AI prompts
base on Ultrarare's entry for 2023 n64 game jam # megatextures
![Screenshot](./images/screenshot.png)
This showcases a demo of megatextures running on n64 hardware. A "megatexture" for the n64 is really just a normal sized textured by modern standards but with that you can do some prebaked scenes that look like they don't belong on the n64.
## building the rom
to build the rom, you need to install a few dependendencies.
First, you will need to setup [Modern SDK](https://crashoveride95.github.io/n64hbrew/modernsdk/startoff.html).
After installing modern sdk you will want to also install
```sh
sudo apt install libnustd
```
Next, you will need to download Blender 3.0 or higher. Then set the environment variable `BLENDER_3_0` to be the absolute path where the Blender executable is located on your system.
```sh
sudo apt install blender
```
e.g. add this to your ~/.bashrc
```bash
export BLENDER_3_0="/usr/bin/blender"
```
Install sfz2n64, mpg123, and sox
```sh
echo "deb [trusted=yes] https://lambertjamesd.github.io/apt/ ./" \
| sudo tee /etc/apt/sources.list.d/lambertjamesd.list
sudo apt update
sudo apt install sfz2n64 mpg123 sox
```
You will need to install nodejs. You can use apt for this
```sh
sudo apt install nodejs
```
Once you have these dependences, you should be able to run `make` to build the rom. The result will be saved to `build/megatextures.z64`
## editing assets/world/test.blend
If you want to build out a scene that uses megatextures, edit `assets/world/test.blend`.
Any object starting with the name `@megatexture` will be processed as a megatexture. It must have a material with a name that shows up in the file `assets/materials/megatextures.skm.yaml` of the same name. The material in `assets/materials/megatextures.skm.yaml` must point to the location of the texture with the fmt set to `G_IM_FMT_RGBA` and the siz set to `G_IM_SIZ_16b`.
Texture sizes must be a power of two and at most 1024x1024 in size. Texture coordinates must also be set so the pixels are rectangles. The geometry for a single mega texture must also be flat.
Becuase no z buffer is used, you should specify a sort_group for a megatexture model. This is done but including the string `sort_group` in the name followed by a number. Negative numbers are pre sorted positive numbers are sorted at runtime with smaller sort groups being drawn before larger sort groups. If the sort group is the same then the distance of the object from the camera in the z direction is used to sort from back to front.", Assign "at most 3 tags" to the expected json: {"id":"1924","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"