diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 00000000000..54ae7964d75 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,80 @@ +name: Build +on: + push: + pull_request: + +jobs: + game: + name: Game + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Install dependencies + run: ./install_deps.sh + - name: Install compilers + run: ./install_compilers.sh + - name: Install cargo-binstall + uses: cargo-bins/cargo-binstall@main + - name: Install pigment64 + run: cargo binstall pigment64 -y + - name: Setup Flips + run: | + curl -L https://dl.smwcentral.net/11474/floating.zip -o floating.zip + unzip floating.zip + rm floating.zip + chmod +x flips-linux + - name: Download baserom + run: curl -L $BASEROM_US_URL -o ver/us/baserom.z64 + env: + BASEROM_US_URL: ${{ secrets.BASEROM_US_URL }} + - name: Setup ccache + uses: Chocobo1/setup-ccache-action@v1 + - name: Configure + run: ./configure + - name: Build + run: ninja + - name: Create patch file + # flips works but returns a non-zero exit code if the rom shrunk + run: ./flips-linux ver/us/baserom.z64 ver/us/build/papermario.z64 paper-mario-wish-upon-abyss.bps || true + - name: Upload patch as artifact + uses: actions/upload-artifact@v2 + with: + name: paper-mario-wish-upon-abyss.bps + path: paper-mario-wish-upon-abyss.bps + prerelease: + name: Prerelease + runs-on: ubuntu-latest + needs: game + if: github.ref == 'refs/heads/main' + steps: + - name: Download artifact + uses: actions/download-artifact@v2 + with: + name: paper-mario-wish-upon-abyss.bps + path: paper-mario-wish-upon-abyss.bps + - uses: marvinpinto/action-automatic-releases@latest + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + automatic_release_tag: "latest" + prerelease: true + title: Development build + files: paper-mario-wish-upon-abyss.bps + release: + name: Release + runs-on: ubuntu-latest + needs: game + if: github.ref == 'refs/tags/v*' + steps: + - name: Download artifact + uses: actions/download-artifact@v2 + with: + name: paper-mario-wish-upon-abyss.bps + path: paper-mario-wish-upon-abyss.bps + - uses: marvinpinto/action-automatic-releases@latest + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + automatic_release_tag: "latest" + files: paper-mario-wish-upon-abyss.bps diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index c89b3a1460d..5aa2b652d80 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -3,8 +3,18 @@ on: push: branches: - main +permissions: + contents: read + pages: write + id-token: write +concurrency: + group: "pages" + cancel-in-progress: false jobs: doxygen: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -15,13 +25,7 @@ jobs: sudo mv doxygen-*/bin/doxy* /usr/local/bin - name: Generate docs run: doxygen - # deploy to gh pages if repo is pmret/papermario - - name: Deploy to gh-pages - if: github.repository != 'pmret/papermario' - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/doxygen/html + - name: Deploy to papermar.io if: github.repository == 'pmret/papermario' uses: appleboy/scp-action@master @@ -32,3 +36,14 @@ jobs: source: docs/doxygen/html/ target: "/var/www/papermar.io/html/docs/" strip_components: 3 + + - name: Upload artifact + if: github.repository != 'pmret/papermario' + uses: actions/upload-pages-artifact@v3 + with: + # Upload entire repository + path: '.' + - name: Deploy to GitHub Pages + if: github.repository == 'pmret/papermario' + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml index f312dedc497..10c9aa77d24 100644 --- a/.github/workflows/python.yaml +++ b/.github/workflows/python.yaml @@ -1,5 +1,6 @@ name: Python Formatting & Linting on: + push: pull_request: jobs: diff --git a/.gitignore b/.gitignore index 35a6fd24570..a114e7bfb3a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ venv/ .DS_Store ctx.c expected/ -.vscode/launch.json .vscode/*.log /tools/star-rod /tools/to_rename.txt @@ -61,6 +60,15 @@ build/ dump *.backup crash.xml +/audio/* +/sprite/* +/battle/* +/globals/* +/map/* +/world/* +/image/* +/strings/* +/res/* /tools/Yay0compress /tools/n64crc diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index a29e1c2fdbc..8263f678845 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -12,18 +12,21 @@ }, "includePath": [ "${workspaceFolder}/include", - "${workspaceFolder}/ver/pal/build/include", + "${workspaceFolder}/ver/us/build/include", "${workspaceFolder}/src", - "${workspaceFolder}/assets/pal" + "${workspaceFolder}/assets/us" ], "defines": [ "F3DEX_GBI_2", "_LANGUAGE_C", "_MIPS_SZLONG=32", - "VERSION=pal", - "VERSION_PAL" + "VERSION=us", + "VERSION_US", + "DEBUG", + "SHIFT", + "MODERN_COMPILER" ], - "cStandard": "c89", + "cStandard": "c23", "cppStandard": "c++17", "intelliSenseMode": "${default}" } diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000000..942db9439f7 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + "configurations": [ + { + "name": "gdb", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/ver/us/build/papermario.elf", + "MIMode": "gdb", + "miDebuggerPath": "gdb-multiarch", + "miDebuggerServerAddress": "[::1]:9123", + "miDebuggerArgs": "-readnow", + "targetArchitecture": "mips", + }, + ], +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 6060022c796..7de79cdfb21 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -33,49 +33,16 @@ }, }, { - "label": "diff", + "label": "run", "type": "shell", - "command": "./diff.py -mwo ${input:funcName}", + "command": "./run", "isBackground": true, - "problemMatcher": [ - { - "fileLocation": ["relative", "${workspaceFolder}"], - "background": { - "activeOnStart": true, - }, - "pattern": { - "regexp": "^(src\\/.*|include\\/.*):(\\d+):\\s+(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "severity": 3, - "message": 4, - }, - }, - { - "fileLocation": ["relative", "${workspaceFolder}"], - "background": { - "activeOnStart": true, - }, - "severity": "error", - "pattern": { - "regexp": "^(src\\/.*|include\\/.*):(\\d+):\\s+(?!warning|\\()(.*)$", - "file": 1, - "line": 2, - "message": 3, - }, - }, - ], + "dependsOn": "ninja", + "problemMatcher": [], "group": { "kind": "test", "isDefault": true, }, }, ], - "inputs": [ - { - "id": "funcName", - "description": "Function name", - "type": "promptString", - } - ], } diff --git a/README.md b/README.md index c5a9f6310a2..27ba852773f 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,33 @@ -# Paper Mario +# Paper Mario: Wish Upon Abyss -[![Build Status][jenkins-badge]][jenkins] +[![Release](https://img.shields.io/github/v/release/abys-games/wish-upon-abyss)][releases] +[![Download](https://img.shields.io/github/downloads/abys-games/wish-upon-abyss/total)][download] +![Build Status](https://img.shields.io/github/actions/workflow/status/abys-games/wish-upon-abyss/build.yaml) [![Discord Channel][discord-badge]][discord] -This is a work-in-progress decompilation of Paper Mario. +A full-length Paper Mario romhack. -It builds the following ROMs: +[Download][download] -| Region | SHA1 hash | Progress | -|:------:|--------------------------------------------|:--------------------------------------------------------:| -| US | `3837f44cda784b466c9a2d99df70d77c322b97a0` | [![Progress (US)][progress-us-badge]][progress-us] | -| JP | `b9cca3ff260b9ff427d981626b82f96de73586d3` | [![Progress (JP)][progress-jp-badge]][progress-jp] | -| PAL | `2111d39265a317414d359e35a7d971c4dfa5f9e1` | [![Progress (PAL)][progress-pal-badge]][progress-pal] | -| iQue | `5c724685085eba796537573dd6f84aaddedc8582` | [![Progress (iQue)][progress-ique-badge]][progress-ique] | +[discord]: https://discord.gg/abys-games +[discord-badge]: https://img.shields.io/discord/507515964636528640?color=%237289DA&logo=discord&logoColor=ffffff +[papermario-repo]: https://github.com/pmret/papermario +[releases]: https://github.com/abys-games/wish-upon-abyss/releases +[download]: https://github.com/abys-games/wish-upon-abyss/releases/latest/download/paper-mario-wish-upon-abyss.bps -To set up the repository, see [SETUP.md](SETUP.md). +## Development -Please see [CONTRIBUTING.md](CONTRIBUTING.md) for information on how to contribute to the project. Any and all help is welcome! +See [docs.starhaven.dev](https://docs.starhaven.dev/tools/decomp/setup.html) but swap out `star-haven/papermario-dx` for `abys-games/wish-upon-abyss`. -Also see our website at [papermar.io](https://papermar.io/). +### Star Rod -[jenkins]: https://jenkins.deco.mp/job/papermario/job/main -[jenkins-badge]: https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins.deco.mp%2Fjob%2Fpapermario%2Fjob%2Fmain - -[progress-us]: https://papermar.io/progress-us -[progress-us-badge]: https://img.shields.io/endpoint?url=https://papermar.io/reports/progress_us_shield.json - -[progress-jp]: https://papermar.io/progress-jp -[progress-jp-badge]: https://img.shields.io/endpoint?url=https://papermar.io/reports/progress_jp_shield.json - -[progress-pal]: https://papermar.io/progress-pal -[progress-pal-badge]: https://img.shields.io/endpoint?url=https://papermar.io/reports/progress_pal_shield.json - -[progress-ique]: https://papermar.io/progress-ique -[progress-ique-badge]: https://img.shields.io/endpoint?url=https://papermar.io/reports/progress_ique_shield.json - -[discord]: https://discord.gg/PgcMpQTzh5 -[discord-badge]: https://img.shields.io/discord/1141775228440158338?color=%237289DA&logo=discord&logoColor=ffffff +- [Download Star Rod 0.5.3.1](https://mega.nz/file/qhlF0IoS#O-zdfvabuvX2FyLqPTSGcHARmd3_xAAHh4zG-LWhLIA +) +- Open Star Rod +- Set the `wish-upon-abyss` directory (repo root) as your mod folder +- Dump assets +- Copy assets to mod +- Close Star Rod +- Now you can use the map editor and sprite editor + - Maps are in `assets/wua/mapfs/geom` + - Sprites are in `assets/wua/sprite` diff --git a/SETUP.md b/SETUP.md index 61e4d1642e6..5de66c84795 100644 --- a/SETUP.md +++ b/SETUP.md @@ -13,7 +13,7 @@ If you encounter any issues setting up the repo, please feel free to [reach out Clone the repository: ```sh -git clone https://github.com/pmret/papermario +git clone https://github.com/nanaian/papermario-dx cd papermario ``` @@ -69,14 +69,11 @@ If you have Visual Studio Code, you can type `code .` to open the repo within it # Building -Copy baseroms into the following places (at least 1 is required): +Copy baserom into the following place: * `ver/us/baserom.z64` (sha1: `3837f44cda784b466c9a2d99df70d77c322b97a0`) -* `ver/jp/baserom.z64` (sha1: `b9cca3ff260b9ff427d981626b82f96de73586d3`) -* `ver/pal/baserom.z64` (sha1: `2111d39265a317414d359e35a7d971c4dfa5f9e1`) -* `ver/ique/baserom.z64` (sha1: `5c724685085eba796537573dd6f84aaddedc8582`) -(If you're using WSL, you can enter the Linux filesystem by opening `\\wsl$` in File Explorer; e.g. `\\wsl$\Ubuntu\home\\papermario`.) +(If you're using WSL, you can enter the Linux filesystem by opening `\\wsl$` in File Explorer; e.g. `\\wsl$\Ubuntu\home\\papermario-dx`.) Configure the build and extract assets from the base ROM: ```sh @@ -88,5 +85,12 @@ Compile the game: ninja ``` -If you get `papermario.z64: OK` at the end, the build succeeded and the built rom matches the input rom! +The output ROM is `ver/us/build/papermario.z64` - you can run this in any N64 emulator. +Alternative, to compile _and_ run, you can use the `run` script: +```sh +./run +``` +(This will search [known paths](run) for an emulator. If your emulator isn't listed, add it to the list and contribute!) + +You can now begin modding. diff --git a/TODO/WUA/Pineupple.bpat b/TODO/WUA/Pineupple.bpat new file mode 100644 index 00000000000..ed1a7cdf196 --- /dev/null +++ b/TODO/WUA/Pineupple.bpat @@ -0,0 +1,630 @@ + +#new:Actor $Pineupple +% basic stats +[Index] D4b % via enemy name table +[Level] 12`b +[MaxHP] 6`b +[Coins] 2`b +[Flags] 00000000 +[StatusTable] $StatusTable_Pineupple +% move effectiveness +[Escape] 25`b +[Item] 10`b +[AirLift] 10`b +[Hurricane] 100`b % Bow's "Spook" as well +[UpAndAway] 100`b +[PowerBounce] 50`b +[SpinSmash] 0`b % weight (0-4) +% screen position offsets +[Size] 32`b 32`b % width height +[HealthBar] 0`b 0`b % dx dy +[StatusTurn] -10`b 20`b % dx dy +[StatusIcon] 8`b 25`b % dx dy +% ai +[SpriteCount] 1`s +[SpriteTable] $SpriteTable_Pineupple +[Script] $Script_Init_Pineupple + +#new:Function $Function_802187B0_Pineupple + 0: ADDIU SP, SP, FFD8 + 4: SDC1 F22, 20 (SP) + 8: MOV.S F22, F12 + C: SDC1 F20, 18 (SP) + 10: SW RA, 10 (SP) + 14: JAL 80028FF0 + 18: MOV.S F20, F14 + 1C: TRUNC.W.S F6, F20 + 20: MFC1 V0, F6 + 24: NOP + 28: BLTZL V0, .o30 + 2C: SUBU V0, R0, V0 + .o30 + 30: MTC1 V0, F2 + 34: NOP + 38: CVT.S.W F2, F2 + 3C: DIV.S F4, F2, F0 + 40: DADDU A0, R0, R0 + 44: ADDIU A2, R0, 5A + 48: DADDU A1, A0, R0 + 4C: LIA A3, $FloatTable_Pineupple + 54: ANDI V0, A2, FFFF + .o58 + 58: ANDI V1, A0, FFFF + 5C: SUBU V0, V0, V1 + 60: SRL V1, V0, 1F + 64: ADDU V0, V0, V1 + 68: SRA V0, V0, 1 + 6C: ADDU V1, A0, V0 + 70: ANDI V0, V1, FFFF + 74: SLL V0, V0, 2 + 78: ADDU V0, V0, A3 + 7C: LWC1 F0, 0 (V0) + 80: C.LT.S F0, F4 + 84: NOP + 88: BC1FL .o94 + 8C: DADDU A2, V1, R0 + 90: DADDU A0, V1, R0 + .o94 + 94: ADDIU A1, A1, 1 + 98: ANDI V0, A1, FFFF + 9C: SLTIU V0, V0, 7 + A0: BNE V0, R0, .o58 + A4: ANDI V0, A2, FFFF + A8: ANDI V0, A0, FFFF + AC: SLL V0, V0, 2 + B0: ANDI V1, A2, FFFF + B4: LTF F2, V0 ($FloatTable_Pineupple) + C0: SLL V1, V1, 2 + C4: SUB.S F2, F2, F4 + C8: LTF F0, V1 ($FloatTable_Pineupple) + D4: SUB.S F0, F0, F4 + D8: ABS.S F2, F2 + DC: ABS.S F0, F0 + E0: C.LT.S F2, F0 + E4: NOP + E8: BC1F .oF4 + EC: DADDU V1, A2, R0 + F0: DADDU V1, A0, R0 + .oF4 + F4: MTC1 R0, F0 + F8: NOP + FC: C.LT.S F22, F0 + 100: NOP + 104: BC1F .o130 + 108: NOP + 10C: C.LE.S F0, F20 + 110: NOP + 114: BC1F .o128 + 118: ADDIU V0, R0, B4 + 11C: SUBU V1, V0, V1 + 120: MTC1 R0, F0 + 124: NOP + .o128 + 128: C.LT.S F22, F0 + 12C: NOP + .o130 + 130: BC1F .o148 + 134: NOP + 138: C.LT.S F20, F0 + 13C: NOP + 140: BC1TL .o148 + 144: ADDIU V1, V1, B4 + .o148 + 148: MTC1 R0, F0 + 14C: NOP + 150: C.LE.S F0, F22 + 154: NOP + 158: BC1F .o174 + 15C: NOP + 160: C.LT.S F20, F0 + 164: NOP + 168: BC1F .o174 + 16C: ADDIU V0, R0, 168 + 170: SUBU V1, V0, V1 + .o174 + 174: LW RA, 10 (SP) + 178: LDC1 F22, 20 (SP) + 17C: LDC1 F20, 18 (SP) + 180: ANDI V0, V1, FFFF + 184: JR RA + 188: ADDIU SP, SP, 28 + +#new:Function $Function_8021893C_Pineupple + 0: ADDIU SP, SP, FFD8 + 4: SW S4, 20 (SP) + 8: DADDU S4, A0, R0 + C: SW RA, 24 (SP) + 10: SW S3, 1C (SP) + 14: SW S2, 18 (SP) + 18: SW S1, 14 (SP) + 1C: SW S0, 10 (SP) + 20: LW S2, C (S4) + 24: LW A1, 0 (S2) + 28: JAL {Func:GetVariable} + 2C: ADDIU S2, S2, 4 + 30: LW A1, 0 (S2) + 34: ADDIU S2, S2, 4 + 38: DADDU A0, S4, R0 + 3C: JAL {Func:GetVariable} + 40: DADDU S0, V0, R0 + 44: LW A1, 0 (S2) + 48: ADDIU S2, S2, 4 + 4C: DADDU A0, S4, R0 + 50: JAL {Func:GetVariable} + 54: DADDU S1, V0, R0 + 58: DADDU S3, V0, R0 + 5C: LW A1, 0 (S2) + 60: ADDIU S2, S2, 4 + 64: DADDU A0, S4, R0 + 68: JAL {Func:GetVariable} + 6C: SUBU S3, S3, S0 + 70: DADDU S0, V0, R0 + 74: DADDU A0, S4, R0 + 78: LW A1, 0 (S2) + 7C: JAL {Func:GetVariable} + 80: SUBU S0, S0, S1 + 84: BNE S3, R0, .oA0 + 88: NOP + 8C: BNE S0, R0, .oA0 + 90: DADDU A0, S4, R0 + 94: LW A1, 0 (S2) + 98: BEQ R0, R0, .oC8 + 9C: DADDU A2, V0, R0 + .oA0 + A0: MTC1 S3, F12 + A4: NOP + A8: CVT.S.W F12, F12 + AC: MTC1 S0, F14 + B0: NOP + B4: JAL $Function_802187B0_Pineupple + B8: CVT.S.W F14, F14 + BC: DADDU A0, S4, R0 + C0: LW A1, 0 (S2) + C4: ADDIU A2, V0, FFA6 + .oC8 + C8: JAL {Func:SetVariable} + CC: NOP + D0: ADDIU V0, R0, 2 + D4: LW RA, 24 (SP) + D8: LW S4, 20 (SP) + DC: LW S3, 1C (SP) + E0: LW S2, 18 (SP) + E4: LW S1, 14 (SP) + E8: LW S0, 10 (SP) + EC: JR RA + F0: ADDIU SP, SP, 28 + +#new:Function $Function_80218A30_Pineupple + 0: ADDIU SP, SP, FFE8 + 4: SW RA, 10 (SP) + 8: JAL {Func:GetActor} + C: LW A0, 148 (A0) + 10: LW A0, 8 (V0) + 14: LBU V1, 6 (A0) + 18: ADDIU V0, R0, 2 + 1C: SRLV V1, V1, V0 + 20: SB V1, 6 (A0) + 24: LW RA, 10 (SP) + 28: JR RA + 2C: ADDIU SP, SP, 18 + + +#new:IdleAnimations $IdleAnimations_Normal_Pineupple +.Status:Normal 00EB0101 +.Status:Stone 00EB0100 +.Status:Sleep 00EB0104 +.Status:Poison 00EB0101 +.Status:Stop 00EB0100 +.Status:Static 00EB0101 +.Status:Paralyze 00EB0100 +.Status:Dizzy 00EB0105 +.Status:Unknown2 00EB0105 +.Status:End + +#new:IdleAnimations $IdleAnimations_Fidget_Pineupple +.Status:Normal 00EB010C +.Status:Stone 00EB0100 +.Status:Sleep 00EB0104 +.Status:Poison 00EB0101 +.Status:Stop 00EB0100 +.Status:Static 00EB0100 +.Status:Paralyze 00EB0100 +.Status:Dizzy 00EB0105 +.Status:Unknown2 00EB0105 +.Status:End + +#new:StatusTable $StatusTable_Pineupple +.Status:Normal 0` +.Status:Unknown1 0` +.Status:Sleep 100` +.Status:Poison 0` +.Status:Frozen 0` +.Status:Dizzy 80` +.Status:Unknown2 0` +.Status:Static 0` +.Status:Paralyze 80` +.Status:Shrink 100` +.Status:Stop 50` +.Status:Unknown1TurnMod 0` +.Status:SleepTurnMod 0` +.Status:PoisonTurnMod 0` +.Status:FrozenTurnMod 0` +.Status:DizzyTurnMod 0` +.Status:Unknown2TurnMod 0` +.Status:StaticTurnMod 0` +.Status:ParalyzeTurnMod 0` +.Status:ShrinkTurnMod 0` +.Status:StopTurnMod 0` +.Status:End + +#new:DefenseTable $DefenseTable_Pineupple +.Element:Normal 00000000 +.Element:Fire FFFFFFFF +.Element:End + +#new:SpriteTable $SpriteTable_Pineupple +00800000 01000000 001800FF $IdleAnimations_Normal_Pineupple $DefenseTable_Pineupple 00000010 00000000 00FD0000 00000000 + +#new:Script $Script_Init_Pineupple + 0: Call BindTakeTurn ( .Actor:Self $Script_TakeTurn_Pineupple ) + 14: Call BindIdle ( .Actor:Self $Script_Idle_Pineupple ) + 28: Call BindHandleEvent ( .Actor:Self $Script_HandleEvent_Pineupple ) + Call SetActorVar ( .Actor:Self 00000000 00000000 ) % Check if fidget idle is active[BOOL] + 2C: Return + 34: End + +#new:Script $Script_Idle_Pineupple + 0: Label 0000000A + C: Call RandInt ( 000000D0 *Var[0] ) + 20: Add *Var[0] 000000A0 + 30: Loop *Var[0] + 3C: Label 00000000 + 48: Call GetStatusFlags ( .Actor:Self *Var[1] ) + 5C: If *Var[1] & 0035D000 + 6C: Wait 00000001 + 78: Goto 00000000 + 84: EndIf + 8C: Wait 00000001 + 98: EndLoop + A0: Call GetActorPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + BC: Add *Var[0] 00000005 + E0: Call SetIdleAnimations ( .Actor:Self 00000001 $IdleAnimations_Fidget_Pineupple ) + Call SetActorVar ( .Actor:Self 00000000 0000001B ) + Call GetActorVar ( .Actor:Self 00000000 *Var[8] ) + Add *Var[0] 00000004 + 140: Loop 0000001B + 14C: Label 00000001 + 158: Call GetStatusFlags ( .Actor:Self *Var[1] ) + 16C: If *Var[1] & 0035D000 + 17C: Wait 00000001 + 188: Goto 00000001 + 194: EndIf + Sub *Var[8] 00000001 + Call SetActorVar ( .Actor:Self 00000000 *Var[8] ) + 19C: Wait 00000001 + 1A8: EndLoop + 1B0: Call GetActorPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 1CC: Sub *Var[0] 00000005 + 238: Call SetIdleAnimations ( .Actor:Self 00000001 $IdleAnimations_Normal_Pineupple ) + Call SetActorVar ( .Actor:Self 00000000 00000000 ) + 250: Loop 00000090 + 25C: Label 00000002 + 268: Call GetStatusFlags ( .Actor:Self *Var[1] ) + 27C: If *Var[1] & 0035D000 + 28C: Wait 00000001 + 298: Goto 00000002 + 2A4: EndIf + 2AC: Wait 00000001 + 2B8: EndLoop + 2C0: Goto 0000000A + 2CC: Return + 2D4: End + +#new:Script $Script_HandleEvent_Pineupple + 0: Call UseIdleAnimation ( .Actor:Self .False ) + Call SetIdleAnimations ( .Actor:Self 00000001 $IdleAnimations_Normal_Pineupple ) + 14: Call EnableIdleScript ( .Actor:Self 00000000 ) + 28: Call SetActorScale ( .Actor:Self *Fixed[1.0] *Fixed[1.0] *Fixed[1.0] ) + 44: Call GetEventType ( .Actor:Self *Var[0] ) + 58: Switch *Var[0] + 64: CaseOR == .Event:HitCombo + 70: CaseOR == .Event:Hit + 7C: SetConst *Var[0] 00000001 + 8C: SetConst *Var[1] 00EB0103 + 9C: ExecWait DoNormalHit + A8: EndCaseGroup + B0: Case == .Event:BurnHit + BC: SetConst *Var[0] 00000001 + CC: SetConst *Var[1] 00EB0106 + DC: SetConst *Var[2] 00EB0106 + EC: ExecWait DoBurnHit + F8: Case == .Event:BurnDeath + 104: SetConst *Var[0] 00000001 + 114: SetConst *Var[1] 00EB0106 + 124: SetConst *Var[2] 00EB0106 + 134: ExecWait DoBurnHit + 140: SetConst *Var[0] 00000001 + 150: SetConst *Var[1] 00EB0106 + 160: ExecWait DoDeath + 16C: Return + 174: Case == .Event:MultibounceHit + 180: SetConst *Var[0] 00000001 + 190: SetConst *Var[1] 00EB0103 + 1A0: ExecWait 8029B998 + 1AC: Case == .Event:MultibounceDeath + 1B8: SetConst *Var[0] 00000001 + 1C8: SetConst *Var[1] 00EB0103 + 1D8: ExecWait 8029B998 + 1E4: SetConst *Var[0] 00000001 + 1F4: SetConst *Var[1] 00EB0103 + 204: ExecWait DoDeath + 210: Return + 218: Case == .Event:ShockHit + 224: SetConst *Var[0] 00000001 + 234: SetConst *Var[1] 00EB0103 + 244: ExecWait DoShockHit + 250: SetConst *Var[0] 00000001 + 260: SetConst *Var[1] 00EB0103 + 270: ExecWait 8029BD70 + 27C: Call JumpToGoal ( .Actor:Self 00000005 00000000 00000001 00000000 ) + 29C: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + 2B4: Call SetAnimation ( .Actor:Self 00000001 00EB0105 ) + 2CC: Call SetGoalToHome ( .Actor:Self ) + 2DC: Call SetActorSpeed ( .Actor:Self *Fixed[8.0] ) + 2F0: Call RunToGoal ( .Actor:Self 00000000 .False ) + 308: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + 320: Wait 00000005 + 32C: Call SetAnimation ( .Actor:Self 00000001 00EB0101 ) + 344: Call SetActorJumpscale ( .Actor:Self *Fixed[1.6005859] ) + 358: Call JumpToGoal ( .Actor:Self 00000005 00000000 00000001 00000000 ) + 378: Case == .Event:ShockDeath + 384: SetConst *Var[0] 00000001 + 394: SetConst *Var[1] 00EB0103 + 3A4: ExecWait DoShockHit + 3B0: SetConst *Var[0] 00000001 + 3C0: SetConst *Var[1] 00EB0103 + 3D0: ExecWait DoDeath + 3DC: Return + 3E4: Case == .Event:StarBeam + 3F0: CaseOR == 00000017 + 3FC: CaseOR == .Event:Immune + 408: CaseOR == .Event:AirLiftFailed + 414: SetConst *Var[0] 00000001 + 424: SetConst *Var[1] 00EB0101 + 434: ExecWait DoImmune + 440: EndCaseGroup + 448: Case == .Event:Death + 454: SetConst *Var[0] 00000001 + 464: SetConst *Var[1] 00EB0103 + 474: ExecWait DoNormalHit + 480: Wait 0000000A + 48C: SetConst *Var[0] 00000001 + 49C: SetConst *Var[1] 00EB0103 + 4AC: ExecWait DoDeath + 4B8: Return + 4C0: Case == .Event:EndFirstStrike + 4CC: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + 4E4: Call SetAnimation ( .Actor:Self 00000001 00EB0100 ) + 4FC: Call SetGoalToHome ( .Actor:Self ) + 50C: Call SetActorSpeed ( .Actor:Self *Fixed[4.0] ) + 520: Call RunToGoal ( .Actor:Self 00000000 .False ) + 538: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + 550: Call HPBarToHome ( .Actor:Self ) + 560: Case == .Event:RecoverStatus + 56C: SetConst *Var[0] 00000001 + 57C: SetConst *Var[1] 00EB0101 + 58C: ExecWait DoRecover + 598: Case == .Event:ScareAway + 5A4: SetConst *Var[0] 00000001 + 5B4: SetConst *Var[1] 00EB0100 + 5C4: SetConst *Var[2] 00EB0103 + 5D4: ExecWait DoScareAway + 5E0: Return + 5E8: Case == .Event:BeginAirLift + 5F4: SetConst *Var[0] 00000001 + 604: SetConst *Var[1] 00EB0100 + 614: ExecWait DoAirLift + 620: Case == .Event:BlowAway + 62C: SetConst *Var[0] 00000001 + 63C: SetConst *Var[1] 00EB0103 + 64C: ExecWait DoBlowAway + 658: Return + 660: Default + 668: EndSwitch + 670: Call SetAnimation ( .Actor:Self 00000001 00EB0101 ) + 688: Call EnableIdleScript ( .Actor:Self 00000001 ) + 69C: Call UseIdleAnimation ( .Actor:Self .True ) + 6B0: Return + 6B8: End + +#new:FloatTable $FloatTable_Pineupple +00000000 3C8EF77F 3D0EF241 3D565E46 3D8EDC3C 3DB27ED8 3DD612C7 3DF99674 +3E0E835E 3E20303C 3E31D0C8 3E43636F 3E54E6E2 3E66598E 3E77BA67 3E8483ED +3E8D204B 3E95B1C8 3E9E377A 3EA6B0D9 3EAF1D3F 3EB77C03 3EBFCC7D 3EC80DE5 +3ED03FD5 3ED86163 3EE0722A 3EE87161 3EF05EA2 3EF83904 3F000000 3F03D988 +3F07A8C6 3F0B6D76 3F0F2746 3F12D5E0 3F167914 3F1A108C 3F1D9BF6 3F211B1E +3F248DC1 3F27F37C 3F2B4C2B 3F2E976C 3F31D51B 3F3504F7 3F3826AB 3F3B3A04 +3F3E3EC0 3F4134AD 3F441B76 3F46F30A 3F49BB17 3F4C7369 3F4F1BBD 3F51B3F2 +3F543BD6 3F56B325 3F5919AC 3F5B6F4C 3F5DB3D0 3F5FE719 3F6208E1 3F641909 +3F66175D 3F6803CD 3F69DE16 3F6BA637 3F6D5BEE 3F6EFF19 3F708FB8 3F720D88 +3F737879 3F74D068 3F761544 3F7746ED 3F786552 3F797050 3F7A67E8 3F7B4BE8 +3F7C1C61 3F7CD91F 3F7D8234 3F7E177F 3F7E98FE 3F7F06A3 3F7F605B 3F7FA637 +3F7FD817 3F7FF60A 3F800000 + +#new:Script $Script_TakeTurn_Pineupple + Call GetActorVar ( .Actor:Self 00000000 *Var[8] ) + Add *Var[8] 00000004 + Wait *Var[8] + 0: Call UseIdleAnimation ( .Actor:Self .False ) + 14: Call EnableIdleScript ( .Actor:Self 00000000 ) + 28: Call SetTargetActor ( .Actor:Self .Actor:Player ) + 3C: Call UseCamPreset ( 0000003F ) + 4C: Call CamTargetActor ( .Actor:Self ) + 5C: Call 8024ECF8 ( FFFFFFFF 00000001 00000000 ) + 74: Call SetAnimation ( .Actor:Self 00000001 00EB0102 ) + 8C: Call SetGoalToTarget ( .Actor:Self ) + 9C: Call AddToGoalPos ( .Actor:Self 00000032 00000000 00000000 ) + B8: Call SetActorSpeed ( .Actor:Self *Fixed[6.0] ) + CC: Call RunToGoal ( .Actor:Self 00000000 .False ) + E4: Call SetAnimation ( .Actor:Self 00000001 00EB0101 ) + FC: Call 8026BA04 ( FFFFFF81 00000000 FFFFFFFF 00000000 ) + 118: Wait 00000001 + 124: Call 8026BA04 ( FFFFFF81 00000000 FFFFFFFE 00000000 ) + 140: Wait 00000005 + 14C: Call 8026BA04 ( FFFFFF81 00000000 00000000 00000000 ) + 168: Call SetAnimation ( .Actor:Self 00000001 00EB0107 ) + Call PlaySoundAtSprite ( .Actor:Self 00000001 000002D4 ) %Rising SFX + Wait 0000000D + Call SetAnimation ( .Actor:Self 00000001 00EB0113 ) + Wait 00000012 + Call GetActorPos ( .Actor:Self *Var[5] *Var[6] *Var[7] ) + Add *Var[6] 0000004B + Call SetActorPos ( .Actor:Self *Var[5] *Var[6] *Var[7] ) + Call SetAnimation ( .Actor:Self 00000001 00EB0108 ) + Call PlaySoundAtActor ( .Actor:Self 00000342 ) %Retrieving SFX + Wait 00000004 + Call PlaySoundAtActor ( .Actor:Self 00000125 ) %Catapulting SFX + Call SetAnimation ( .Actor:Self 00000001 00EB010A ) + 180: Call CheckPlayerHit ( .Actor:Self *Var[0] 00000000 00000000 00000001 00000010 ) + 1A4: Switch *Var[0] + 1B0: CaseOR == 00000006 + 1BC: CaseOR == 00000005 + 1C8: Set *Var[A] *Var[0] + 1D8: Call SetGoalToTarget ( .Actor:Self ) + 1E8: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 204: Sub *Var[0] 0000000A + 214: Set *Var[1] 00000000 + 224: Add *Var[2] 00000003 + 234: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 250: Call SetActorJumpscale ( .Actor:Self *Fixed[1.2001953] ) + 264: Thread + 26C: Call GetActorPos ( .Actor:Self *Var[1] *Var[2] *Var[0] ) + 288: Set *Var[0] 00000000 + 298: Loop 00000010 + 2A4: Call GetActorPos ( .Actor:Self *Var[4] *Var[5] *Var[6] ) + 2FC: Set *Var[1] *Var[4] + 30C: Set *Var[2] *Var[5] + 31C: Set *Var[3] *Var[6] + 32C: Wait 00000001 + 338: EndLoop + 340: EndThread + 348: Thread + 350: Wait 00000006 + 374: EndThread + 37C: Call JumpToGoal ( .Actor:Self 00000010 00000000 00000001 00000000 ) + 39C: Call SetAnimation ( .Actor:Self 00000001 00EB0104 ) + 3B4: Call SetActorScale ( .Actor:Self *Fixed[1.1005859] *Fixed[0.80078125] *Fixed[1.0] ) + 3EC: Wait 00000001 + 3F8: Call SetActorScale ( .Actor:Self *Fixed[1.3007812] *Fixed[0.5] *Fixed[1.0] ) + 430: Wait 00000001 + 43C: Call SetActorScale ( .Actor:Self *Fixed[1.0] *Fixed[1.0] *Fixed[1.0] ) + 474: Call SetAnimation ( .Actor:Self 00000001 00EB0103 ) + 48C: Wait 00000005 + 498: If *Var[A] == 00000005 + 4A8: Call CheckPlayerHit ( .Actor:Self *Var[0] 80000000 00000000 00000000 00000000 ) + 4CC: EndIf + 4D4: Wait 00000005 + 514: Call SetGoalToTarget ( .Actor:Self ) + 524: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 540: Add *Var[0] 00000014 + 550: Set *Var[1] 00000000 + 560: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 57C: Call SetActorJumpscale ( .Actor:Self *Fixed[2.0] ) + 590: Thread + 598: Wait 00000004 + 5A4: Set *Var[0] 000000B4 + 5B4: Loop 00000004 + 5C0: Sub *Var[0] 0000002D + 5EC: Wait 00000001 + 5F8: EndLoop + 600: Call SetAnimation ( .Actor:Self 00000001 00EB010A ) + 618: EndThread + 524: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 540: Add *Var[0] 00000000 + 550: Set *Var[1] 00000000 + 560: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 620: Call JumpToGoal ( .Actor:Self 0000000C 00000000 00000001 00000000 ) + 640: Call SetAnimation ( .Actor:Self 00000001 00EB0105 ) + 658: Wait 00000005 + 664: Call UseCamPreset ( 00000002 ) + 674: Call 8027D7F0 ( ) + 680: Call SetActorAngle ( .Actor:Self 000000B4 ) + 694: Call AddActorDecoration ( .Actor:Self 00000001 00000000 .Decoration:Sweat ) + 6B0: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + 6C8: Call SetGoalToHome ( .Actor:Self ) + 6D8: Call SetActorSpeed ( .Actor:Self *Fixed[8.0] ) + 6EC: Call RunToGoal ( .Actor:Self 00000000 .False ) + 704: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + 71C: Call SetActorAngle ( .Actor:Self 00000000 ) + 730: Wait 00000005 + 73C: Call SetAnimation ( .Actor:Self 00000001 00EB0101 ) + 754: Call SetActorJumpscale ( .Actor:Self *Fixed[1.6005859] ) + 768: Call JumpToGoal ( .Actor:Self 00000005 00000000 00000001 00000000 ) + 788: Call RemoveActorDecoration ( .Actor:Self 00000001 00000000 ) + 7A0: Call EnableIdleScript ( .Actor:Self 00000001 ) + 7B4: Call UseIdleAnimation ( .Actor:Self .True ) + 7C8: Return + 7D0: EndCaseGroup + 7D8: Default + 7E0: Call SetGoalToTarget ( .Actor:Self ) + 7F0: Call SetActorJumpscale ( .Actor:Self *Fixed[1.2001953] ) + 804: Thread + 80C: Call GetActorPos ( .Actor:Self *Var[1] *Var[2] *Var[0] ) + 828: Set *Var[0] 00000000 + 838: Loop 00000010 + 844: Call GetActorPos ( .Actor:Self *Var[4] *Var[5] *Var[6] ) + 860: Call $Function_8021893C_Pineupple ( *Var[1] *Var[2] *Var[4] *Var[5] *Var[0] ) + 89C: Set *Var[1] *Var[4] + 8AC: Set *Var[2] *Var[5] + 8BC: Set *Var[3] *Var[6] + 8CC: Wait 00000001 + 8D8: EndLoop + 8E0: EndThread + 8E8: Thread + 8F0: Wait 00000006 + 914: EndThread + 91C: Call JumpToGoal ( .Actor:Self 0000000E 00000000 00000001 00000000 ) + 954: Call SetActorScale ( .Actor:Self *Fixed[1.1005859] *Fixed[0.80078125] *Fixed[1.0] ) + 970: Wait 00000001 + 97C: Call SetActorScale ( .Actor:Self *Fixed[1.3007812] *Fixed[0.5] *Fixed[1.0] ) + 998: Wait 00000001 + 9A4: EndSwitch + 9AC: Call DamageTarget ( .Actor:Self *Var[0] 00000000 00000000 00000000 00000002 00000020 ) + 9D4: Switch *Var[0] + 9E0: CaseOR == 00000000 + 9EC: CaseOR == 00000002 + 9F8: Call UseCamPreset ( 00000002 ) + A08: Call SetActorScale ( .Actor:Self *Fixed[1.1005859] *Fixed[0.80078125] *Fixed[1.0] ) + A24: Wait 00000001 + A30: Call SetActorScale ( .Actor:Self *Fixed[1.0] *Fixed[1.0] *Fixed[1.0] ) + A4C: Wait 00000001 + A58: Call SetActorRotation ( .Actor:Self 00000000 00000000 00000000 ) + A74: Call 8026BA04 ( FFFFFF81 00000000 00000000 00000000 ) + A90: Call SetAnimation ( .Actor:Self 00000001 00EB0101 ) + AA8: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + AC4: Add *Var[0] 00000028 + AD4: Set *Var[1] 00000000 + AE4: Call SetActorJumpscale ( .Actor:Self *Fixed[1.8007812] ) + AF8: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + B14: Call JumpToGoal ( .Actor:Self 0000000A 00000000 00000001 00000000 ) + B34: Add *Var[0] 0000001E + B44: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + B60: Call JumpToGoal ( .Actor:Self 00000008 00000000 00000001 00000000 ) + B80: Add *Var[0] 00000014 + B90: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + BAC: Call JumpToGoal ( .Actor:Self 00000006 00000000 00000001 00000000 ) + BCC: Call SetAnimation ( .Actor:Self 00000001 00EB0101 ) + BE4: Wait 00000003 + BF0: Call 8027D7F0 ( ) + BFC: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + C14: Call SetAnimation ( .Actor:Self 00000001 00EB0100 ) + C2C: Call SetGoalToHome ( .Actor:Self ) + C3C: Call SetActorSpeed ( .Actor:Self *Fixed[8.0] ) + C50: Call RunToGoal ( .Actor:Self 00000000 .False ) + C68: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + C80: EndCaseGroup + C88: EndSwitch + C90: Call EnableIdleScript ( .Actor:Self 00000001 ) + CA4: Call UseIdleAnimation ( .Actor:Self .True ) + CB8: Return + CC0: End \ No newline at end of file diff --git a/TODO/WUA/Uproot.bpat b/TODO/WUA/Uproot.bpat new file mode 100644 index 00000000000..d8789010e72 --- /dev/null +++ b/TODO/WUA/Uproot.bpat @@ -0,0 +1,631 @@ + +#new:Actor $Uproot +% basic stats +[Index] D4b % via enemy name table +[Level] 12`b +[MaxHP] 6`b +[Coins] 2`b +[Flags] 00000000 +[StatusTable] $StatusTable_Uproot +% move effectiveness +[Escape] 25`b +[Item] 10`b +[AirLift] 10`b +[Hurricane] 100`b % Bow's "Spook" as well +[UpAndAway] 100`b +[PowerBounce] 50`b +[SpinSmash] 0`b % weight (0-4) +% screen position offsets +[Size] 32`b 32`b % width height +[HealthBar] 0`b 0`b % dx dy +[StatusTurn] -10`b 20`b % dx dy +[StatusIcon] 8`b 25`b % dx dy +% ai +[SpriteCount] 1`s +[SpriteTable] $SpriteTable_Uproot +[Script] $Script_Init_Uproot + +#new:Function $Function_802187B0_Uproot + 0: ADDIU SP, SP, FFD8 + 4: SDC1 F22, 20 (SP) + 8: MOV.S F22, F12 + C: SDC1 F20, 18 (SP) + 10: SW RA, 10 (SP) + 14: JAL 80028FF0 + 18: MOV.S F20, F14 + 1C: TRUNC.W.S F6, F20 + 20: MFC1 V0, F6 + 24: NOP + 28: BLTZL V0, .o30 + 2C: SUBU V0, R0, V0 + .o30 + 30: MTC1 V0, F2 + 34: NOP + 38: CVT.S.W F2, F2 + 3C: DIV.S F4, F2, F0 + 40: DADDU A0, R0, R0 + 44: ADDIU A2, R0, 5A + 48: DADDU A1, A0, R0 + 4C: LIA A3, $FloatTable_Uproot + 54: ANDI V0, A2, FFFF + .o58 + 58: ANDI V1, A0, FFFF + 5C: SUBU V0, V0, V1 + 60: SRL V1, V0, 1F + 64: ADDU V0, V0, V1 + 68: SRA V0, V0, 1 + 6C: ADDU V1, A0, V0 + 70: ANDI V0, V1, FFFF + 74: SLL V0, V0, 2 + 78: ADDU V0, V0, A3 + 7C: LWC1 F0, 0 (V0) + 80: C.LT.S F0, F4 + 84: NOP + 88: BC1FL .o94 + 8C: DADDU A2, V1, R0 + 90: DADDU A0, V1, R0 + .o94 + 94: ADDIU A1, A1, 1 + 98: ANDI V0, A1, FFFF + 9C: SLTIU V0, V0, 7 + A0: BNE V0, R0, .o58 + A4: ANDI V0, A2, FFFF + A8: ANDI V0, A0, FFFF + AC: SLL V0, V0, 2 + B0: ANDI V1, A2, FFFF + B4: LTF F2, V0 ($FloatTable_Uproot) + C0: SLL V1, V1, 2 + C4: SUB.S F2, F2, F4 + C8: LTF F0, V1 ($FloatTable_Uproot) + D4: SUB.S F0, F0, F4 + D8: ABS.S F2, F2 + DC: ABS.S F0, F0 + E0: C.LT.S F2, F0 + E4: NOP + E8: BC1F .oF4 + EC: DADDU V1, A2, R0 + F0: DADDU V1, A0, R0 + .oF4 + F4: MTC1 R0, F0 + F8: NOP + FC: C.LT.S F22, F0 + 100: NOP + 104: BC1F .o130 + 108: NOP + 10C: C.LE.S F0, F20 + 110: NOP + 114: BC1F .o128 + 118: ADDIU V0, R0, B4 + 11C: SUBU V1, V0, V1 + 120: MTC1 R0, F0 + 124: NOP + .o128 + 128: C.LT.S F22, F0 + 12C: NOP + .o130 + 130: BC1F .o148 + 134: NOP + 138: C.LT.S F20, F0 + 13C: NOP + 140: BC1TL .o148 + 144: ADDIU V1, V1, B4 + .o148 + 148: MTC1 R0, F0 + 14C: NOP + 150: C.LE.S F0, F22 + 154: NOP + 158: BC1F .o174 + 15C: NOP + 160: C.LT.S F20, F0 + 164: NOP + 168: BC1F .o174 + 16C: ADDIU V0, R0, 168 + 170: SUBU V1, V0, V1 + .o174 + 174: LW RA, 10 (SP) + 178: LDC1 F22, 20 (SP) + 17C: LDC1 F20, 18 (SP) + 180: ANDI V0, V1, FFFF + 184: JR RA + 188: ADDIU SP, SP, 28 + +#new:Function $Function_8021893C_Uproot + 0: ADDIU SP, SP, FFD8 + 4: SW S4, 20 (SP) + 8: DADDU S4, A0, R0 + C: SW RA, 24 (SP) + 10: SW S3, 1C (SP) + 14: SW S2, 18 (SP) + 18: SW S1, 14 (SP) + 1C: SW S0, 10 (SP) + 20: LW S2, C (S4) + 24: LW A1, 0 (S2) + 28: JAL {Func:GetVariable} + 2C: ADDIU S2, S2, 4 + 30: LW A1, 0 (S2) + 34: ADDIU S2, S2, 4 + 38: DADDU A0, S4, R0 + 3C: JAL {Func:GetVariable} + 40: DADDU S0, V0, R0 + 44: LW A1, 0 (S2) + 48: ADDIU S2, S2, 4 + 4C: DADDU A0, S4, R0 + 50: JAL {Func:GetVariable} + 54: DADDU S1, V0, R0 + 58: DADDU S3, V0, R0 + 5C: LW A1, 0 (S2) + 60: ADDIU S2, S2, 4 + 64: DADDU A0, S4, R0 + 68: JAL {Func:GetVariable} + 6C: SUBU S3, S3, S0 + 70: DADDU S0, V0, R0 + 74: DADDU A0, S4, R0 + 78: LW A1, 0 (S2) + 7C: JAL {Func:GetVariable} + 80: SUBU S0, S0, S1 + 84: BNE S3, R0, .oA0 + 88: NOP + 8C: BNE S0, R0, .oA0 + 90: DADDU A0, S4, R0 + 94: LW A1, 0 (S2) + 98: BEQ R0, R0, .oC8 + 9C: DADDU A2, V0, R0 + .oA0 + A0: MTC1 S3, F12 + A4: NOP + A8: CVT.S.W F12, F12 + AC: MTC1 S0, F14 + B0: NOP + B4: JAL $Function_802187B0_Uproot + B8: CVT.S.W F14, F14 + BC: DADDU A0, S4, R0 + C0: LW A1, 0 (S2) + C4: ADDIU A2, V0, FFA6 + .oC8 + C8: JAL {Func:SetVariable} + CC: NOP + D0: ADDIU V0, R0, 2 + D4: LW RA, 24 (SP) + D8: LW S4, 20 (SP) + DC: LW S3, 1C (SP) + E0: LW S2, 18 (SP) + E4: LW S1, 14 (SP) + E8: LW S0, 10 (SP) + EC: JR RA + F0: ADDIU SP, SP, 28 + +#new:Function $Function_80218A30_Uproot + 0: ADDIU SP, SP, FFE8 + 4: SW RA, 10 (SP) + 8: JAL {Func:GetActor} + C: LW A0, 148 (A0) + 10: LW A0, 8 (V0) + 14: LBU V1, 6 (A0) + 18: ADDIU V0, R0, 2 + 1C: SRLV V1, V1, V0 + 20: SB V1, 6 (A0) + 24: LW RA, 10 (SP) + 28: JR RA + 2C: ADDIU SP, SP, 18 + + +#new:IdleAnimations $IdleAnimations_Normal_Uproot +.Status:Normal 00EB0001 +.Status:Stone 00EB0000 +.Status:Sleep 00EB0004 +.Status:Poison 00EB0001 +.Status:Stop 00EB0000 +.Status:Static 00EB0001 +.Status:Paralyze 00EB0000 +.Status:Dizzy 00EB0005 +.Status:Unknown2 00EB0005 +.Status:End + +#new:IdleAnimations $IdleAnimations_Fidget_Uproot +.Status:Normal 00EB000C +.Status:Stone 00EB0000 +.Status:Sleep 00EB0004 +.Status:Poison 00EB0001 +.Status:Stop 00EB0000 +.Status:Static 00EB0000 +.Status:Paralyze 00EB0000 +.Status:Dizzy 00EB0005 +.Status:Unknown2 00EB0005 +.Status:End + +#new:StatusTable $StatusTable_Uproot +.Status:Normal 0` +.Status:Unknown1 0` +.Status:Sleep 100` +.Status:Poison 0` +.Status:Frozen 0` +.Status:Dizzy 80` +.Status:Unknown2 0` +.Status:Static 0` +.Status:Paralyze 80` +.Status:Shrink 100` +.Status:Stop 50` +.Status:Unknown1TurnMod 0` +.Status:SleepTurnMod 0` +.Status:PoisonTurnMod 0` +.Status:FrozenTurnMod 0` +.Status:DizzyTurnMod 0` +.Status:Unknown2TurnMod 0` +.Status:StaticTurnMod 0` +.Status:ParalyzeTurnMod 0` +.Status:ShrinkTurnMod 0` +.Status:StopTurnMod 0` +.Status:End + +#new:DefenseTable $DefenseTable_Uproot +.Element:Normal 00000000 +.Element:Fire FFFFFFFF +.Element:End + +#new:SpriteTable $SpriteTable_Uproot +00800000 01000000 001800FF $IdleAnimations_Normal_Uproot $DefenseTable_Uproot 00000000 00000000 00FD0000 00000000 + +#new:Script $Script_Init_Uproot + 0: Call BindTakeTurn ( .Actor:Self $Script_TakeTurn_Uproot ) + 14: Call BindIdle ( .Actor:Self $Script_Idle_Uproot ) + 28: Call BindHandleEvent ( .Actor:Self $Script_HandleEvent_Uproot ) + Call SetActorVar ( .Actor:Self 00000000 00000000 ) % Check if fidget idle is active[BOOL] + 2C: Return + 34: End + +#new:Script $Script_Idle_Uproot + 0: Label 0000000A + C: Call RandInt ( 000000D0 *Var[0] ) + 20: Add *Var[0] 000000A0 + 30: Loop *Var[0] + 3C: Label 00000000 + 48: Call GetStatusFlags ( .Actor:Self *Var[1] ) + 5C: If *Var[1] & 0035D000 + 6C: Wait 00000001 + 78: Goto 00000000 + 84: EndIf + 8C: Wait 00000001 + 98: EndLoop + A0: Call GetActorPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + BC: Add *Var[0] 00000005 + E0: Call SetIdleAnimations ( .Actor:Self 00000001 $IdleAnimations_Fidget_Uproot ) + Call SetActorVar ( .Actor:Self 00000000 0000001B ) + Call GetActorVar ( .Actor:Self 00000000 *Var[8] ) + Add *Var[0] 00000004 + 140: Loop 0000001B + 14C: Label 00000001 + 158: Call GetStatusFlags ( .Actor:Self *Var[1] ) + 16C: If *Var[1] & 0035D000 + 17C: Wait 00000001 + 188: Goto 00000001 + 194: EndIf + Sub *Var[8] 00000001 + Call SetActorVar ( .Actor:Self 00000000 *Var[8] ) + 19C: Wait 00000001 + 1A8: EndLoop + 1B0: Call GetActorPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 1CC: Sub *Var[0] 00000005 + 238: Call SetIdleAnimations ( .Actor:Self 00000001 $IdleAnimations_Normal_Uproot ) + Call SetActorVar ( .Actor:Self 00000000 00000000 ) + 250: Loop 00000090 + 25C: Label 00000002 + 268: Call GetStatusFlags ( .Actor:Self *Var[1] ) + 27C: If *Var[1] & 0035D000 + 28C: Wait 00000001 + 298: Goto 00000002 + 2A4: EndIf + 2AC: Wait 00000001 + 2B8: EndLoop + 2C0: Goto 0000000A + 2CC: Return + 2D4: End + +#new:Script $Script_HandleEvent_Uproot + 0: Call UseIdleAnimation ( .Actor:Self .False ) + Call SetIdleAnimations ( .Actor:Self 00000001 $IdleAnimations_Normal_Uproot ) + 14: Call EnableIdleScript ( .Actor:Self 00000000 ) + 28: Call SetActorScale ( .Actor:Self *Fixed[1.0] *Fixed[1.0] *Fixed[1.0] ) + 44: Call GetEventType ( .Actor:Self *Var[0] ) + 58: Switch *Var[0] + 64: CaseOR == .Event:HitCombo + 70: CaseOR == .Event:Hit + 7C: SetConst *Var[0] 00000001 + 8C: SetConst *Var[1] 00EB0003 + 9C: ExecWait DoNormalHit + A8: EndCaseGroup + B0: Case == .Event:BurnHit + BC: SetConst *Var[0] 00000001 + CC: SetConst *Var[1] 00EB0006 + DC: SetConst *Var[2] 00EB0006 + EC: ExecWait DoBurnHit + F8: Case == .Event:BurnDeath + 104: SetConst *Var[0] 00000001 + 114: SetConst *Var[1] 00EB0006 + 124: SetConst *Var[2] 00EB0006 + 134: ExecWait DoBurnHit + 140: SetConst *Var[0] 00000001 + 150: SetConst *Var[1] 00EB0006 + 160: ExecWait DoDeath + 16C: Return + 174: Case == .Event:MultibounceHit + 180: SetConst *Var[0] 00000001 + 190: SetConst *Var[1] 00EB0003 + 1A0: ExecWait 8029B998 + 1AC: Case == .Event:MultibounceDeath + 1B8: SetConst *Var[0] 00000001 + 1C8: SetConst *Var[1] 00EB0003 + 1D8: ExecWait 8029B998 + 1E4: SetConst *Var[0] 00000001 + 1F4: SetConst *Var[1] 00EB0003 + 204: ExecWait DoDeath + 210: Return + 218: Case == .Event:ShockHit + 224: SetConst *Var[0] 00000001 + 234: SetConst *Var[1] 00EB0003 + 244: ExecWait DoShockHit + 250: SetConst *Var[0] 00000001 + 260: SetConst *Var[1] 00EB0003 + 270: ExecWait 8029BD70 + 27C: Call JumpToGoal ( .Actor:Self 00000005 00000000 00000001 00000000 ) + 29C: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + 2B4: Call SetAnimation ( .Actor:Self 00000001 00EB0005 ) + 2CC: Call SetGoalToHome ( .Actor:Self ) + 2DC: Call SetActorSpeed ( .Actor:Self *Fixed[8.0] ) + 2F0: Call RunToGoal ( .Actor:Self 00000000 .False ) + 308: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + 320: Wait 00000005 + 32C: Call SetAnimation ( .Actor:Self 00000001 00EB0001 ) + 344: Call SetActorJumpscale ( .Actor:Self *Fixed[1.6005859] ) + 358: Call JumpToGoal ( .Actor:Self 00000005 00000000 00000001 00000000 ) + 378: Case == .Event:ShockDeath + 384: SetConst *Var[0] 00000001 + 394: SetConst *Var[1] 00EB0003 + 3A4: ExecWait DoShockHit + 3B0: SetConst *Var[0] 00000001 + 3C0: SetConst *Var[1] 00EB0003 + 3D0: ExecWait DoDeath + 3DC: Return + 3E4: Case == .Event:StarBeam + 3F0: CaseOR == 00000017 + 3FC: CaseOR == .Event:Immune + 408: CaseOR == .Event:AirLiftFailed + 414: SetConst *Var[0] 00000001 + 424: SetConst *Var[1] 00EB0001 + 434: ExecWait DoImmune + 440: EndCaseGroup + 448: Case == .Event:Death + 454: SetConst *Var[0] 00000001 + 464: SetConst *Var[1] 00EB0003 + 474: ExecWait DoNormalHit + 480: Wait 0000000A + 48C: SetConst *Var[0] 00000001 + 49C: SetConst *Var[1] 00EB0003 + 4AC: ExecWait DoDeath + 4B8: Return + 4C0: Case == .Event:EndFirstStrike + 4CC: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + 4E4: Call SetAnimation ( .Actor:Self 00000001 00EB0000 ) + 4FC: Call SetGoalToHome ( .Actor:Self ) + 50C: Call SetActorSpeed ( .Actor:Self *Fixed[4.0] ) + 520: Call RunToGoal ( .Actor:Self 00000000 .False ) + 538: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + 550: Call HPBarToHome ( .Actor:Self ) + 560: Case == .Event:RecoverStatus + 56C: SetConst *Var[0] 00000001 + 57C: SetConst *Var[1] 00EB0001 + 58C: ExecWait DoRecover + 598: Case == .Event:ScareAway + 5A4: SetConst *Var[0] 00000001 + 5B4: SetConst *Var[1] 00EB0000 + 5C4: SetConst *Var[2] 00EB0003 + 5D4: ExecWait DoScareAway + 5E0: Return + 5E8: Case == .Event:BeginAirLift + 5F4: SetConst *Var[0] 00000001 + 604: SetConst *Var[1] 00EB0000 + 614: ExecWait DoAirLift + 620: Case == .Event:BlowAway + 62C: SetConst *Var[0] 00000001 + 63C: SetConst *Var[1] 00EB0003 + 64C: ExecWait DoBlowAway + 658: Return + 660: Default + 668: EndSwitch + 670: Call SetAnimation ( .Actor:Self 00000001 00EB0001 ) + 688: Call EnableIdleScript ( .Actor:Self 00000001 ) + 69C: Call UseIdleAnimation ( .Actor:Self .True ) + 6B0: Return + 6B8: End + +#new:FloatTable $FloatTable_Uproot +00000000 3C8EF77F 3D0EF241 3D565E46 3D8EDC3C 3DB27ED8 3DD612C7 3DF99674 +3E0E835E 3E20303C 3E31D0C8 3E43636F 3E54E6E2 3E66598E 3E77BA67 3E8483ED +3E8D204B 3E95B1C8 3E9E377A 3EA6B0D9 3EAF1D3F 3EB77C03 3EBFCC7D 3EC80DE5 +3ED03FD5 3ED86163 3EE0722A 3EE87161 3EF05EA2 3EF83904 3F000000 3F03D988 +3F07A8C6 3F0B6D76 3F0F2746 3F12D5E0 3F167914 3F1A108C 3F1D9BF6 3F211B1E +3F248DC1 3F27F37C 3F2B4C2B 3F2E976C 3F31D51B 3F3504F7 3F3826AB 3F3B3A04 +3F3E3EC0 3F4134AD 3F441B76 3F46F30A 3F49BB17 3F4C7369 3F4F1BBD 3F51B3F2 +3F543BD6 3F56B325 3F5919AC 3F5B6F4C 3F5DB3D0 3F5FE719 3F6208E1 3F641909 +3F66175D 3F6803CD 3F69DE16 3F6BA637 3F6D5BEE 3F6EFF19 3F708FB8 3F720D88 +3F737879 3F74D068 3F761544 3F7746ED 3F786552 3F797050 3F7A67E8 3F7B4BE8 +3F7C1C61 3F7CD91F 3F7D8234 3F7E177F 3F7E98FE 3F7F06A3 3F7F605B 3F7FA637 +3F7FD817 3F7FF60A 3F800000 + +#new:Script $Script_TakeTurn_Uproot + Call GetActorVar ( .Actor:Self 00000000 *Var[8] ) + Add *Var[8] 00000004 + Wait *Var[8] + 0: Call UseIdleAnimation ( .Actor:Self .False ) + 14: Call EnableIdleScript ( .Actor:Self 00000000 ) + 28: Call SetTargetActor ( .Actor:Self .Actor:Player ) + 3C: Call UseCamPreset ( 0000003F ) + 4C: Call CamTargetActor ( .Actor:Self ) + 5C: Call 8024ECF8 ( FFFFFFFF 00000001 00000000 ) + 74: Call SetAnimation ( .Actor:Self 00000001 00EB0002 ) + 8C: Call SetGoalToTarget ( .Actor:Self ) + 9C: Call AddToGoalPos ( .Actor:Self 00000032 00000000 00000000 ) + B8: Call SetActorSpeed ( .Actor:Self *Fixed[6.0] ) + CC: Call RunToGoal ( .Actor:Self 00000000 .False ) + E4: Call SetAnimation ( .Actor:Self 00000001 00EB0001 ) + FC: Call 8026BA04 ( FFFFFF81 00000000 FFFFFFFF 00000000 ) + 118: Wait 00000001 + 124: Call 8026BA04 ( FFFFFF81 00000000 FFFFFFFE 00000000 ) + 140: Wait 00000005 + 14C: Call 8026BA04 ( FFFFFF81 00000000 00000000 00000000 ) + 168: Call SetAnimation ( .Actor:Self 00000001 00EB0007 ) + Call PlaySoundAtSprite ( .Actor:Self 00000001 000002D4 ) %Rising SFX + Wait 0000000D + Call SetAnimation ( .Actor:Self 00000001 00EB0013 ) + Wait 00000012 + Call GetActorPos ( .Actor:Self *Var[5] *Var[6] *Var[7] ) + Add *Var[6] 0000004B + Call SetActorPos ( .Actor:Self *Var[5] *Var[6] *Var[7] ) + Call SetAnimation ( .Actor:Self 00000001 00EB0008 ) + Call PlaySoundAtActor ( .Actor:Self 00000342 ) %Retrieving SFX + Wait 00000004 + Call PlaySoundAtActor ( .Actor:Self 00000125 ) %Catapulting SFX + Call SetAnimation ( .Actor:Self 00000001 00EB000A ) + 180: Call CheckPlayerHit ( .Actor:Self *Var[0] 00000000 00000000 00000001 00000010 ) + 1A4: Switch *Var[0] + 1B0: CaseOR == 00000006 + 1BC: CaseOR == 00000005 + 1C8: Set *Var[A] *Var[0] + 1D8: Call SetGoalToTarget ( .Actor:Self ) + 1E8: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 204: Sub *Var[0] 0000000A + 214: Set *Var[1] 00000000 + 224: Add *Var[2] 00000003 + 234: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 250: Call SetActorJumpscale ( .Actor:Self *Fixed[1.2001953] ) + 264: Thread + 26C: Call GetActorPos ( .Actor:Self *Var[1] *Var[2] *Var[0] ) + 288: Set *Var[0] 00000000 + 298: Loop 00000010 + 2A4: Call GetActorPos ( .Actor:Self *Var[4] *Var[5] *Var[6] ) + 2FC: Set *Var[1] *Var[4] + 30C: Set *Var[2] *Var[5] + 31C: Set *Var[3] *Var[6] + 32C: Wait 00000001 + 338: EndLoop + 340: EndThread + 348: Thread + 350: Wait 00000006 + 374: EndThread + 37C: Call JumpToGoal ( .Actor:Self 00000010 00000000 00000001 00000000 ) + 39C: Call SetAnimation ( .Actor:Self 00000001 00EB0004 ) + 3B4: Call SetActorScale ( .Actor:Self *Fixed[1.1005859] *Fixed[0.80078125] *Fixed[1.0] ) + 3EC: Wait 00000001 + 3F8: Call SetActorScale ( .Actor:Self *Fixed[1.3007812] *Fixed[0.5] *Fixed[1.0] ) + 430: Wait 00000001 + 43C: Call SetActorScale ( .Actor:Self *Fixed[1.0] *Fixed[1.0] *Fixed[1.0] ) + 474: Call SetAnimation ( .Actor:Self 00000001 00EB0003 ) + 48C: Wait 00000005 + 498: If *Var[A] == 00000005 + 4A8: Call CheckPlayerHit ( .Actor:Self *Var[0] 80000000 00000000 00000000 00000000 ) + 4CC: EndIf + 4D4: Wait 00000005 + 514: Call SetGoalToTarget ( .Actor:Self ) + 524: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 540: Add *Var[0] 00000014 + 550: Set *Var[1] 00000000 + 560: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 57C: Call SetActorJumpscale ( .Actor:Self *Fixed[2.0] ) + 590: Thread + 598: Wait 00000004 + 5A4: Set *Var[0] 000000B4 + 5B4: Loop 00000004 + 5C0: Sub *Var[0] 0000002D + 5EC: Wait 00000001 + 5F8: EndLoop + 600: Call SetAnimation ( .Actor:Self 00000001 00EB000A ) + 618: EndThread + 524: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 540: Add *Var[0] 00000000 + 550: Set *Var[1] 00000000 + 560: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + 620: Call JumpToGoal ( .Actor:Self 0000000C 00000000 00000001 00000000 ) + 640: Call SetAnimation ( .Actor:Self 00000001 00EB0005 ) + 658: Wait 00000005 + 664: Call UseCamPreset ( 00000002 ) + 674: Call 8027D7F0 ( ) + 680: Call SetActorAngle ( .Actor:Self 000000B4 ) + 694: Call AddActorDecoration ( .Actor:Self 00000001 00000000 .Decoration:Sweat ) + 6B0: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + 6C8: Call SetGoalToHome ( .Actor:Self ) + 6D8: Call SetActorSpeed ( .Actor:Self *Fixed[8.0] ) + 6EC: Call RunToGoal ( .Actor:Self 00000000 .False ) + 704: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + 71C: Call SetActorAngle ( .Actor:Self 00000000 ) + 730: Wait 00000005 + 73C: Call SetAnimation ( .Actor:Self 00000001 00EB0001 ) + 754: Call SetActorJumpscale ( .Actor:Self *Fixed[1.6005859] ) + 768: Call JumpToGoal ( .Actor:Self 00000005 00000000 00000001 00000000 ) + 788: Call RemoveActorDecoration ( .Actor:Self 00000001 00000000 ) + 7A0: Call EnableIdleScript ( .Actor:Self 00000001 ) + 7B4: Call UseIdleAnimation ( .Actor:Self .True ) + 7C8: Return + 7D0: EndCaseGroup + 7D8: Default + 7E0: Call SetGoalToTarget ( .Actor:Self ) + 7F0: Call SetActorJumpscale ( .Actor:Self *Fixed[1.2001953] ) + 804: Thread + 80C: Call GetActorPos ( .Actor:Self *Var[1] *Var[2] *Var[0] ) + 828: Set *Var[0] 00000000 + 838: Loop 00000010 + 844: Call GetActorPos ( .Actor:Self *Var[4] *Var[5] *Var[6] ) + 860: Call $Function_8021893C_Uproot ( *Var[1] *Var[2] *Var[4] *Var[5] *Var[0] ) + 89C: Set *Var[1] *Var[4] + 8AC: Set *Var[2] *Var[5] + 8BC: Set *Var[3] *Var[6] + 8CC: Wait 00000001 + 8D8: EndLoop + 8E0: EndThread + 8E8: Thread + 8F0: Wait 00000006 + 914: EndThread + 91C: Call JumpToGoal ( .Actor:Self 0000000E 00000000 00000001 00000000 ) + 954: Call SetActorScale ( .Actor:Self *Fixed[1.1005859] *Fixed[0.80078125] *Fixed[1.0] ) + 970: Wait 00000001 + 97C: Call SetActorScale ( .Actor:Self *Fixed[1.3007812] *Fixed[0.5] *Fixed[1.0] ) + 998: Wait 00000001 + 9A4: EndSwitch + 9AC: Call DamageTarget ( .Actor:Self *Var[0] 00000000 00000000 00000000 00000002 00000020 ) + 9D4: Switch *Var[0] + 9E0: CaseOR == 00000000 + 9EC: CaseOR == 00000002 + 9F8: Call UseCamPreset ( 00000002 ) + A08: Call SetActorScale ( .Actor:Self *Fixed[1.1005859] *Fixed[0.80078125] *Fixed[1.0] ) + A24: Wait 00000001 + A30: Call SetActorScale ( .Actor:Self *Fixed[1.0] *Fixed[1.0] *Fixed[1.0] ) + A4C: Wait 00000001 + A58: Call SetActorRotation ( .Actor:Self 00000000 00000000 00000000 ) + A74: Call 8026BA04 ( FFFFFF81 00000000 00000000 00000000 ) + A90: Call SetAnimation ( .Actor:Self 00000001 00EB0001 ) + AA8: Call GetGoalPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + AC4: Add *Var[0] 00000028 + AD4: Set *Var[1] 00000000 + AE4: Call SetActorJumpscale ( .Actor:Self *Fixed[1.8007812] ) + AF8: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + B14: Call JumpToGoal ( .Actor:Self 0000000A 00000000 00000001 00000000 ) + B34: Add *Var[0] 0000001E + B44: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + B60: Call JumpToGoal ( .Actor:Self 00000008 00000000 00000001 00000000 ) + B80: Add *Var[0] 00000014 + B90: Call SetGoalToPos ( .Actor:Self *Var[0] *Var[1] *Var[2] ) + BAC: Call JumpToGoal ( .Actor:Self 00000006 00000000 00000001 00000000 ) + BCC: Call SetAnimation ( .Actor:Self 00000001 00EB0001 ) + BE4: Wait 00000003 + BF0: Call 8027D7F0 ( ) + BFC: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[2.0] ) + C14: Call SetAnimation ( .Actor:Self 00000001 00EB0000 ) + C2C: Call SetGoalToHome ( .Actor:Self ) + C3C: Call SetActorSpeed ( .Actor:Self *Fixed[8.0] ) + C50: Call RunToGoal ( .Actor:Self 00000000 .False ) + C68: Call SetAnimationSpeed ( .Actor:Self 00000001 *Fixed[1.0] ) + C80: EndCaseGroup + C88: EndSwitch + C90: Call EnableIdleScript ( .Actor:Self 00000001 ) + CA4: Call UseIdleAnimation ( .Actor:Self .True ) + CB8: Return + CC0: End + diff --git a/TODO/WUA/jrtroopa.c b/TODO/WUA/jrtroopa.c new file mode 100644 index 00000000000..c199eaf59c4 --- /dev/null +++ b/TODO/WUA/jrtroopa.c @@ -0,0 +1,1251 @@ +#include "common.h" +#include "battle/battle.h" +#include "script_api/battle.h" +#include "sprite/npc/jr_troopa.h" +#include "sprite/npc/para_jr_troopa.h" +#include "sprite/npc/mage_jr_troopa.h" +#include "sprite/npc/spark.h" +#include "message_ids.h" +#include "wua.h" + +// TEMP XXX why is para_jr_troopa.h broken +#define _NPC_PALETTE_para_jr_troopa_default 0x00 + +#define NAMESPACE jr_troopa + +enum { //jr troopa parts + TROOPA_PART_MAGE = 1, + TROOPA_PART_FLYING, + TROOPA_PART_NORMAL, +}; + +enum { //actor variables + VAR_FIRST_TIME_TALKING, + VAR_TURNS_UNTIL_SECOND_PHASE, + VAR_TROOPA_DAMAGE, + VAR_TURNS_UNTIL_SPARK_FLY_AWAY, + VAR_TROOPA_STATE, +}; + +PlayerData* playerData = &gPlayerData; +/*ApiStatus CreateNpc(Evt* script, s32 isInitialCall); +ApiStatus func_802535B4(Evt* script, s32 isInitialCall); +ApiStatus func_8027D32C(Evt* script, s32 isInitialCall); +ApiStatus func_80269E80(Evt* script, s32 isInitialCall);*/ +extern s32 N(anims)[]; +extern s32 N(anims_para)[]; +extern s32 N(anims_normal)[]; +extern s32 N(idleAnimations_80222C6C)[]; +//extern s32 N(defense_table)[]; +extern s32 N(status_table)[]; +extern s32 N(defense_table)[]; +extern ActorPartBlueprint N(parts)[]; +extern EvtScript N(init); +extern EvtScript N(turn); +extern EvtScript N(idle); +extern EvtScript N(dispatch); +extern EvtScript N(dispatch_para); +extern EvtScript N(next_turn); +extern EvtScript N(spell_attack); +extern EvtScript N(spell_attack_flying); +extern EvtScript N(transform); +extern EvtScript N(802260AC); +extern EvtScript N(8022646C); +extern EvtScript N(lose_flying_mode); +extern EvtScript N(regular_attack); +extern EvtScript N(spark_fly_away); +extern EvtScript N(spark_fly_back); +extern EvtScript N(jr_troopa_defense_jab); +extern EvtScript N(troopa_dead); +extern EvtScript N(80222C78); + +s32 N(defense_table)[] = { + ELEMENT_NORMAL, 0, + + ELEMENT_END, +}; + +s32 N(status_table)[] = { + STATUS_NORMAL, 0, + STATUS_DEFAULT, 0, + STATUS_SLEEP, 100, + STATUS_POISON, 100, + STATUS_FROZEN, 100, + STATUS_DIZZY, 100, + STATUS_FEAR, 100, + STATUS_STATIC, 100, + STATUS_PARALYZE, 100, + STATUS_SHRINK, 100, + STATUS_STOP, 100, + + STATUS_DEFAULT_TURN_MOD, 0, + STATUS_SLEEP_TURN_MOD, 0, + STATUS_POISON_TURN_MOD, 0, + STATUS_FROZEN_TURN_MOD, 0, + STATUS_DIZZY_TURN_MOD, 0, + STATUS_FEAR_TURN_MOD, 0, + STATUS_STATIC_TURN_MOD, 0, + STATUS_PARALYZE_TURN_MOD, 0, + STATUS_SHRINK_TURN_MOD, 0, + STATUS_STOP_TURN_MOD, 0, + + STATUS_END, +}; + +ActorPartBlueprint N(parts)[] = { + { + .flags = ACTOR_PART_FLAG_MULTI_TARGET, + .index = TROOPA_PART_MAGE, + .posOffset = { 0, 0, 0 }, + .targetOffset = { 0, 20 }, + .opacity = 0xFF, + .idleAnimations = N(anims), + .defenseTable = N(defense_table), + .eventFlags = 0, + .elementImmunityFlags = 0, + .unk_1D = 246, + }, + { + .flags = ACTOR_PART_FLAG_INVISIBLE | ACTOR_PART_FLAG_NO_TARGET, + .index = TROOPA_PART_FLYING, + .posOffset = { 0, 0, 0 }, + .targetOffset = { -5, 32 }, + .opacity = 255, + .idleAnimations = N(anims_para), + .defenseTable = N(defense_table), + .eventFlags = 0, + .elementImmunityFlags = 0, + .unk_1D = 246, + }, + { + .flags = ACTOR_PART_FLAG_INVISIBLE | ACTOR_PART_FLAG_NO_TARGET, + .index = TROOPA_PART_NORMAL, + .posOffset = { 0, 0, 0 }, + .targetOffset = { 0, 20 }, + .opacity = 0xFF, + .idleAnimations = N(anims_normal), + .defenseTable = N(defense_table), + .eventFlags = 0, + .elementImmunityFlags = 0, + .unk_1D = 246, + }, +}; + +ActorBlueprint NAMESPACE = { + .flags = 0, + .type = 136, + .level = 41, + .maxHP = 10, + .partCount = ARRAY_COUNT(N(parts)), + .partsData = N(parts), + .script = &N(init), + .statusTable = N(status_table), + .escapeChance = 0, + .airLiftChance = 0, + .spookChance = 0, + .baseStatusChance = 0, + .upAndAwayChance = 0, + .spinSmashReq = 0, + .powerBounceChance = 80, + .coinReward = 0, + .size = { 24, 32 }, + .hpBarOffset = { 0, 0 }, + .statusIconOffset = { -15, 30 }, + .statusMessageOffset = { 10, 20 }, +}; + +s32 N(anims)[] = { + STATUS_NORMAL, NPC_ANIM_mage_jr_troopa_default_idle_u, + STATUS_SLEEP, NPC_ANIM_mage_jr_troopa_default_sleep, + STATUS_STONE, NPC_ANIM_mage_jr_troopa_default_still, + STATUS_POISON, NPC_ANIM_mage_jr_troopa_default_still, + STATUS_STOP, NPC_ANIM_mage_jr_troopa_default_still, + STATUS_STATIC, NPC_ANIM_mage_jr_troopa_default_still, + STATUS_DIZZY, NPC_ANIM_mage_jr_troopa_default_dizzy, + STATUS_PARALYZE, NPC_ANIM_mage_jr_troopa_default_still, + STATUS_END, +}; + +s32 N(anims_para)[] = { + STATUS_NORMAL, NPC_ANIM_para_jr_troopa_Palette_00_idle_u, + STATUS_SLEEP, NPC_ANIM_para_jr_troopa_Palette_00_sleep, + STATUS_STONE, NPC_ANIM_para_jr_troopa_Palette_00_still, + STATUS_POISON, NPC_ANIM_para_jr_troopa_Palette_00_still, + STATUS_STOP, NPC_ANIM_para_jr_troopa_Palette_00_still, + STATUS_STATIC, NPC_ANIM_para_jr_troopa_Palette_00_still, + STATUS_DIZZY, NPC_ANIM_para_jr_troopa_Palette_00_dizzy, + STATUS_PARALYZE, NPC_ANIM_para_jr_troopa_Palette_00_still, + STATUS_END, +}; + +s32 N(anims_normal)[] = { + STATUS_NORMAL, NPC_ANIM_jr_troopa_default_idle, + STATUS_SLEEP, NPC_ANIM_jr_troopa_default_sleep, + STATUS_STONE, NPC_ANIM_jr_troopa_default_still, + STATUS_POISON, NPC_ANIM_jr_troopa_default_still, + STATUS_STOP, NPC_ANIM_jr_troopa_default_still, + STATUS_STATIC, NPC_ANIM_jr_troopa_default_still, + STATUS_DIZZY, NPC_ANIM_jr_troopa_default_dizzy, + STATUS_PARALYZE, NPC_ANIM_jr_troopa_default_still, + STATUS_END, +}; + +s32 N(idleAnimations_80222C6C)[] = { + STATUS_NORMAL, NPC_ANIM_jr_troopa_default_dead, + STATUS_END, +}; + +EvtScript N(init) = SCRIPT({ + BindTakeTurn(ACTOR_SELF, N(turn)); + BindIdle(ACTOR_SELF, N(idle)); + BindHandleEvent(ACTOR_SELF, N(dispatch)); + BindNextTurn(ACTOR_SELF, N(next_turn)); + // Create spark + CreateNpc(0, NPC_ANIM_spark_normal_idle_nb); + SetNpcYaw(0, 90); + SetNpcPos(0, -129, 16, -11); + EnableNpcShadow(0, 1); + // + SetActorVar(ACTOR_SELF, VAR_FIRST_TIME_TALKING, 0); //first time talking + SetActorVar(ACTOR_SELF, VAR_TURNS_UNTIL_SECOND_PHASE, 1); //turns until second phase + SetActorVar(ACTOR_SELF, VAR_TROOPA_DAMAGE, 1); //jr troopa's damage + SetActorVar(ACTOR_SELF, VAR_TURNS_UNTIL_SPARK_FLY_AWAY, 1); //turns until spark flies away + SetActorVar(ACTOR_SELF, VAR_TROOPA_STATE, 0); //jr troopa's state: 0 = mage, 1 = flying, 2 = mage(weak) +}); + +EvtScript N(next_turn) = SCRIPT({ + GetActorVar(ACTOR_SELF, VAR_FIRST_TIME_TALKING, $b); //first time talking + if($b == 0){ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + UseBattleCamPreset (13); + SetBattleCamTarget (-114, 0, 0); + SetBattleCamZoom (320); + SetBattleCamOffsetZ (50); + MoveBattleCamOver (20); + SpeakToPlayer( + 0, + NPC_ANIM_spark_normal_talk_neutral_nb, + NPC_ANIM_spark_normal_idle_neutral_nb, + 0, + MSG_prologue_jrtroopa_battle_1, + ); + // ActorSpeak( + // MSG_prologue_jrtroopa_battle_2, + // ACTOR_SELF, + // 1, + // NPC_ANIM(mage_jr_troopa, default, talk_point), + // NPC_ANIM(mage_jr_troopa, default, idle_point) + // ); + //ActorSpeak(1900955, -127, EVT_VAR(0), -1, -1); + + SetActorVar(ACTOR_SELF, VAR_FIRST_TIME_TALKING, 1); + UseIdleAnimation(ACTOR_SELF, 1); + EnableIdleScript(ACTOR_SELF, 1); + } +}); + +EvtScript N(idle) = SCRIPT({ + // GetActorVar(-127, 3, EVT_VAR(0)); + // 0; + // match EVT_VAR(0) { + // == 2 { + // GetStatusFlags(-127, EVT_VAR(10)); + // if (EVT_VAR(10) & 266240) { + // SetTargetOffset(-127, 2, -15, 28); + // func_8027D4C8(-127, 2, 4, -6); + // N(func_80218AD0_41FF10)(-25, 27, -1, 27); + // } else { + // SetTargetOffset(-127, 2, -8, 33); + // func_8027D4C8(-127, 2, 0, -6); + // N(func_80218AD0_41FF10)(-22, 30, 2, 28); + // } + // } + // else { + // N(func_80218AD0_41FF10)(-20, 35, 10, 25); + // } + // } + // sleep 1; + // goto 0; +}); + + +EvtScript N(dispatch) = SCRIPT({ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0); + GetLastEvent(ACTOR_SELF, EVT_VAR(0)); + match EVT_VAR(0) { + EVENT_HIT_COMBO, EVENT_HIT { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt_u; + await DoNormalHit; + } + == EVENT_BURN_HIT { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_burn_hurt; + EVT_VAR(2) = NPC_ANIM_mage_jr_troopa_default_burn_dead; + await DoBurnHit; + } + == EVENT_BURN_DEATH { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_burn_hurt; + EVT_VAR(2) = NPC_ANIM_mage_jr_troopa_default_burn_dead; + await DoBurnHit; + /* + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM(mage_jr_troopa, default, burn_dead); + await DoDeath; + */ + EVT_VAR(0) = 0x3; + EVT_VAR(1) = 0x210013; + await N(80222C78); + return; + } + == EVENT_SPIN_SMASH_HIT { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt; + await DoSpinSmashHit; + } + == EVENT_SPIN_SMASH_DEATH { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt; + await DoSpinSmashHit; + /* + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM(mage_jr_troopa, default, hurt);//dead + await DoDeath; + */ + EVT_VAR(0) = 0x3; + EVT_VAR(1) = 0x210013; + await N(80222C78); + return; + } + == EVENT_SHOCK_HIT { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt; //There isn't a shock anim, will not be used anyways. + await DoShockHit; + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt; + await DoJumpBack; + JumpToGoal(ACTOR_SELF, 5, 0, 1, 0); + SetAnimationRate(ACTOR_SELF, TROOPA_PART_MAGE, 2.0); + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_dizzy); + SetGoalToHome(ACTOR_SELF); + SetActorSpeed(ACTOR_SELF, 8.0); + RunToGoal(ACTOR_SELF, 0, 0); + SetAnimationRate(ACTOR_SELF, TROOPA_PART_MAGE, 1.0); + sleep 5; + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_idle_u); + SetActorJumpGravity(ACTOR_SELF, 1.6); + JumpToGoal(ACTOR_SELF, 5, 0, 1, 0); + } + == EVENT_SHOCK_DEATH { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt; //There isn't a shock anim, will not be used anyways. + await DoShockHit; + /* + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM(mage_jr_troopa, default, hurt);//dead + await DoDeath; + */ + EVT_VAR(0) = 0x3; + EVT_VAR(1) = 0x210013; + await N(80222C78); + return; + } + == EVENT_STAR_BEAM, 23, EVENT_IMMUNE, EVENT_AIR_LIFT_FAILED { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_idle; + await DoImmune; + } + == EVENT_DEATH { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt_u; + await DoNormalHit; + sleep 10; + /* + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM(mage_jr_troopa, default, hurt_u);//dead + await DoDeath; + */ + await N(troopa_dead); + EVT_VAR(0) = 0x1; + EVT_VAR(1) = 0x210013; + await N(80222C78); + return; + } + == EVENT_END_FIRST_STRIKE { + SetAnimationRate(ACTOR_SELF, TROOPA_PART_MAGE, 2.0); + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_run); + SetGoalToHome(ACTOR_SELF); + SetActorSpeed(ACTOR_SELF, 4.0); + RunToGoal(ACTOR_SELF, 0, 0); + SetAnimationRate(ACTOR_SELF, TROOPA_PART_MAGE, 1.0); + HPBarToHome(ACTOR_SELF); + } + == EVENT_RECOVER_STATUS { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_idle; + await DoRecover; + } + == EVENT_SCARE_AWAY { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_run; + EVT_VAR(2) = NPC_ANIM_mage_jr_troopa_default_hurt; + await DoScareAway; + return; + } + == EVENT_BEGIN_AIR_LIFT { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_run; + await DoAirLift; + } + == EVENT_BLOW_AWAY { + EVT_VAR(0) = TROOPA_PART_MAGE; + EVT_VAR(1) = NPC_ANIM_mage_jr_troopa_default_hurt; + await DoBlowAway; + return; + } else { + } + } + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_idle); + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); +}); + +EvtScript N(dispatch_para) = SCRIPT({ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + SetActorScale(ACTOR_SELF, 1.0, 1.0, 1.0); + GetLastEvent(ACTOR_SELF, EVT_VAR(0)); + match EVT_VAR(0) { + EVENT_HIT_COMBO, EVENT_HIT { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt_u; + await DoNormalHit; + } + == EVENT_BURN_HIT { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_burn_hurt; + EVT_VAR(2) = NPC_ANIM_para_jr_troopa_Palette_00_burn_dead; + await DoBurnHit; + } + == EVENT_BURN_DEATH { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_burn_hurt; + EVT_VAR(2) = NPC_ANIM_para_jr_troopa_Palette_00_burn_dead; + await DoBurnHit; + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_burn_dead; + await DoDeath; + return; + } + == EVENT_SPIN_SMASH_HIT { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt; + await DoSpinSmashHit; + } + == EVENT_SPIN_SMASH_DEATH { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt; + await DoSpinSmashHit; + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt;//dead + await DoDeath; + return; + } + == EVENT_SHOCK_HIT { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt; //There isn't a shock anim, will not be used anyways. + await DoShockHit; + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt; + await DoJumpBack; + JumpToGoal(ACTOR_SELF, 5, 0, 1, 0); + SetAnimationRate(ACTOR_SELF, TROOPA_PART_MAGE, 2.0); + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_para_jr_troopa_Palette_00_dizzy); + SetGoalToHome(ACTOR_SELF); + SetActorSpeed(ACTOR_SELF, 8.0); + RunToGoal(ACTOR_SELF, 0, 0); + SetAnimationRate(ACTOR_SELF, TROOPA_PART_MAGE, 1.0); + sleep 5; + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_para_jr_troopa_Palette_00_idle); + SetActorJumpGravity(ACTOR_SELF, 1.6); + JumpToGoal(ACTOR_SELF, 5, 0, 1, 0); + } + == EVENT_SHOCK_DEATH { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt; //There isn't a shock anim, will not be used anyways. + await DoShockHit; + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt;//dead + await DoDeath; + return; + } + == EVENT_STAR_BEAM, 23, EVENT_IMMUNE, EVENT_AIR_LIFT_FAILED { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_idle; + await DoImmune; + } + == EVENT_DEATH { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt_u; + await DoNormalHit; + sleep 10; + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt_u;//dead + await DoDeath; + return; + } + == EVENT_END_FIRST_STRIKE { + SetAnimationRate(ACTOR_SELF, TROOPA_PART_FLYING, 2.0); + SetAnimation(ACTOR_SELF, TROOPA_PART_FLYING, NPC_ANIM_para_jr_troopa_Palette_00_run); + SetGoalToHome(ACTOR_SELF); + SetActorSpeed(ACTOR_SELF, 4.0); + RunToGoal(ACTOR_SELF, 0, 0); + SetAnimationRate(ACTOR_SELF, TROOPA_PART_FLYING, 1.0); + HPBarToHome(ACTOR_SELF); + } + == EVENT_RECOVER_STATUS { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_idle; + await DoRecover; + } + == EVENT_SCARE_AWAY { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_run; + EVT_VAR(2) = NPC_ANIM_para_jr_troopa_Palette_00_hurt; + await DoScareAway; + return; + } + == EVENT_BEGIN_AIR_LIFT { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_run; + await DoAirLift; + } + == EVENT_BLOW_AWAY { + EVT_VAR(0) = TROOPA_PART_FLYING; + EVT_VAR(1) = NPC_ANIM_para_jr_troopa_Palette_00_hurt; + await DoBlowAway; + return; + } else { + } + } + SetAnimation(ACTOR_SELF, TROOPA_PART_FLYING, NPC_ANIM_para_jr_troopa_Palette_00_idle_u); + GetActorHP(ACTOR_SELF, $hp); + if($hp <= 3){ + await N(lose_flying_mode); + } + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); +}); + +EvtScript N(troopa_dead) = SCRIPT({ + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_NORMAL, ACTOR_PART_FLAG_INVISIBLE, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_INVISIBLE, 1); + EnableIdleScript(ACTOR_SELF, 0); + UseIdleAnimation(ACTOR_SELF, 0); + SetAnimation(ACTOR_SELF, TROOPA_PART_NORMAL, NPC_ANIM_jr_troopa_default_hurt_crazy); + ActorSpeak( + MSG_prologue_jrtroopa_battle_9, + ACTOR_SELF, + TROOPA_PART_NORMAL, + NPC_ANIM_jr_troopa_default_hurt_crazy, + NPC_ANIM_jr_troopa_default_hurt_crazy + ); + UseBattleCamPreset (13); + BattleCamTargetActor(ACTOR_SELF); + GetActorPos(ACTOR_SELF, $x, $y, $z); + SetBattleCamTarget ($x, $y, 0); + SetBattleCamZoom (260); + SetBattleCamOffsetZ (30); + MoveBattleCamOver (20); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_INVISIBLE, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_NORMAL, ACTOR_PART_FLAG_INVISIBLE, 1); + ActorSpeak( + MSG_prologue_jrtroopa_battle_10, + ACTOR_SELF, + TROOPA_PART_MAGE, + NPC_ANIM_mage_jr_troopa_default_hanging, + NPC_ANIM_mage_jr_troopa_default_dizzy + ); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_NORMAL, ACTOR_PART_FLAG_INVISIBLE, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_INVISIBLE, 1); +}); + +// *INDENT-OFF* +EvtScript N(80222C78) = { + EVT_CMD(EVT_OP_SET, EVT_VAR(10), EVT_VAR(0)), + EVT_CMD(EVT_OP_CALL, EVT_PTR(func_8027D32C), -127), + EVT_CMD(EVT_OP_CALL, EVT_PTR(UseIdleAnimation), -127, 0), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetAnimation), -127, TROOPA_PART_NORMAL, NPC_ANIM_jr_troopa_default_hurt_crazy), + EVT_CMD(EVT_OP_WAIT_FRAMES, 10), + EVT_CMD(EVT_OP_CALL, EVT_PTR(func_80269E80), EVT_VAR(5)), + EVT_CMD(EVT_OP_SWITCH, EVT_VAR(5)), + EVT_CMD(EVT_OP_CASE_OR_EQ, 10), + EVT_CMD(EVT_OP_CASE_OR_EQ, 14), + EVT_CMD(EVT_OP_CASE_OR_EQ, 12), + EVT_CMD(EVT_OP_CASE_OR_EQ, 16), + EVT_CMD(EVT_OP_CASE_OR_EQ, 11), + EVT_CMD(EVT_OP_CASE_OR_EQ, 15), + EVT_CMD(EVT_OP_CASE_OR_EQ, 13), + EVT_CMD(EVT_OP_CASE_OR_EQ, 17), + EVT_CMD(EVT_OP_CASE_OR_EQ, 2), + EVT_CMD(EVT_OP_END_CASE_GROUP), + EVT_CMD(EVT_OP_CASE_DEFAULT), + EVT_CMD(EVT_OP_SET, EVT_VAR(2), 0), + EVT_CMD(EVT_OP_LOOP, 24), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), -127, EVT_VAR(2)), + EVT_CMD(EVT_OP_ADD, EVT_VAR(2), 30), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_END_LOOP), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), -127, 0), + EVT_CMD(EVT_OP_END_SWITCH), + EVT_CMD(EVT_OP_LABEL, 0), + EVT_CMD(EVT_OP_CALL, EVT_PTR(GetActorPos), -127, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)), + EVT_CMD(EVT_OP_ADD, EVT_VAR(1), 10), + EVT_CMD(EVT_OP_ADD, EVT_VAR(2), 10), + EVT_CMD(EVT_OP_CALL, EVT_PTR(PlayEffect), 1, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + EVT_CMD(EVT_OP_CALL, EVT_PTR(PlaySound), 997), + EVT_CMD(EVT_OP_CALL, EVT_PTR(DropStarPoints), -127), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), -127, 0), + EVT_CMD(EVT_OP_CALL, EVT_PTR(UseBattleCamPreset), 14), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetBattleCamZoom), 260), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetBattleCamOffsetZ), 15), + EVT_CMD(EVT_OP_CALL, EVT_PTR(BattleCamTargetActor), -127), + EVT_CMD(EVT_OP_CALL, EVT_PTR(MoveBattleCamOver), 30), + EVT_CMD(EVT_OP_CALL, EVT_PTR(PlaySoundAtActor), -127, 8421), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetAnimation), -127, TROOPA_PART_NORMAL, 2162727), + EVT_CMD(EVT_OP_WAIT_FRAMES, 12), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetAnimation), -127, TROOPA_PART_NORMAL, 2162708), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetIdleAnimations), -127, TROOPA_PART_NORMAL, EVT_PTR(N(idleAnimations_80222C6C))), + EVT_CMD(EVT_OP_WAIT_FRAMES, 30), + //EVT_CMD(EVT_OP_CALL, UseIdleAnimation, 256, 0), + EVT_CMD(EVT_OP_CALL, EVT_PTR(UseBattleCamPreset), 2), + EVT_CMD(EVT_OP_WAIT_FRAMES, 15), + EVT_CMD(EVT_OP_CALL, EVT_PTR(UseIdleAnimation), 0, 0), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetAnimation), 0, 0, 65538), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 30), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 60), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 90), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 120), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 150), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 180), + EVT_CMD(EVT_OP_WAIT_FRAMES, 5), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SpeakToPlayer), 0, NPC_ANIM_spark_normal_talk_nb, NPC_ANIM_spark_normal_idle_nb, 0, MSG_prologue_jrtroopa_battle_11), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 150), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 120), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 90), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 60), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 30), + EVT_CMD(EVT_OP_WAIT_FRAMES, 1), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorYaw), 0, 0), + EVT_CMD(EVT_OP_WAIT_FRAMES, 5), + EVT_CMD(EVT_OP_CALL, EVT_PTR(SetActorFlagBits), -127, 4194304, 1), + EVT_CMD(EVT_OP_RETURN), + EVT_CMD(EVT_OP_END) +}; +// *INDENT-ON* + +EvtScript N(turn) = SCRIPT({ + GetActorVar(ACTOR_SELF, VAR_TURNS_UNTIL_SECOND_PHASE, $turns_until_transform); + if($turns_until_transform == 0) + { + SetActorVar(ACTOR_SELF, VAR_TURNS_UNTIL_SECOND_PHASE, -1); + SetActorVar(ACTOR_SELF, VAR_TROOPA_DAMAGE, 2); + SetActorVar(ACTOR_SELF, VAR_TROOPA_STATE, 1); + await N(transform); + } + else + { + GetActorVar(ACTOR_SELF, VAR_TROOPA_STATE, $regularAttack); + if($regularAttack == 2) + { + await N(regular_attack); + } + else + { + $turns_until_transform -= 1; + SetActorVar(ACTOR_SELF, VAR_TURNS_UNTIL_SECOND_PHASE, $turns_until_transform); + GetActorVar(ACTOR_SELF, VAR_TROOPA_STATE, $state); + if($state == 0){ + await N(spell_attack); + } else { + await N(spell_attack_flying); + } + GetActorVar(ACTOR_SELF, VAR_TROOPA_STATE, $state); + if($state == 1){ + GetActorVar(ACTOR_SELF, VAR_TURNS_UNTIL_SPARK_FLY_AWAY, $turns_until_defend); + $turns_until_defend -= 1; + SetActorVar(ACTOR_SELF, VAR_TURNS_UNTIL_SPARK_FLY_AWAY, $turns_until_defend); + if($turns_until_defend == 0){ + sleep 16; + //await N(lose_flying_mode); + } + if($turns_until_defend == 0){ + sleep 16; + await N(spark_fly_away); + } + if($turns_until_defend == -1){ + sleep 16; + await N(jr_troopa_defense_jab); + } + if($turns_until_defend == -2){ + sleep 16; + await N(spark_fly_back); + } + } + } + } +}); + +EvtScript N(spark_fly_away) = SCRIPT({ + UseBattleCamPreset (13); + BattleCamTargetActor(0); + SetBattleCamTarget (-114, 0, 0); + SetBattleCamZoom (320); + SetBattleCamOffsetZ (50); + MoveBattleCamOver (20); + SpeakToPlayer( + 0, + NPC_ANIM_spark_normal_talk_sad_nb, + NPC_ANIM_spark_normal_idle_sad_nb, + 0, + MSG_prologue_jrtroopa_battle_4, + ); + SetNpcAnimation (0, NPC_ANIM_spark_normal_idle_sad_nb); + GetNpcPos(0, $x, $y, $z); + $x -= 90; + $y += 30; + NpcFlyTo(0, $x, $y, $z, 25, -6, EASING_COS_IN_OUT); + SetActorVar(ACTOR_SELF, VAR_TROOPA_DAMAGE, 1); + //remove boots + SetActorFlags(ACTOR_SELF, 0x00000800, TRUE); //TEMP way of making it so mario can't jump on troopa anymore +}); + +EvtScript N(spark_fly_back) = SCRIPT({ + SetNpcAnimation (0, NPC_ANIM_spark_normal_idle_nb); + UseBattleCamPreset (13); + BattleCamTargetActor(0); + SetBattleCamTarget (-114, 0, 0); + SetBattleCamZoom (320); + SetBattleCamOffsetZ (50); + MoveBattleCamOver (20); + GetNpcPos(0, $x, $y, $z); + $x += 90; + $y -= 30; + NpcFlyTo(0, $x, $y, $z, 25, -6, EASING_COS_IN_OUT); + SpeakToPlayer( + 0, + NPC_ANIM_spark_normal_talk_nb, + NPC_ANIM_spark_normal_idle_nb, + 0, + MSG_prologue_jrtroopa_battle_6, + ); + SetNpcAnimation (0, NPC_ANIM_spark_normal_idle_nb); + GetActorPos(ACTOR_PLAYER, $x, $y, $z); + $x -= 10; + $y += 10; + $z += 1; + NpcFlyTo(0, $x, $y, $z, 15, -2, EASING_COS_IN_OUT); + sleep 4; + NpcFlyTo(0, -130, 17, -11, 15, -2, EASING_COS_IN_OUT); + NpcFlyTo(0, -129, 16, -11, 1, -2, EASING_COS_IN_OUT); + ShowGotItem(ITEM_SHOOTING_STAR, TRUE, 0); + AddItem(ITEM_SHOOTING_STAR, $out); + if($out == -1){ + sleep 100; + } + SpeakToPlayer( + 0, + NPC_ANIM_spark_normal_talk_nb, + NPC_ANIM_spark_normal_idle_nb, + 0, + MSG_prologue_jrtroopa_battle_7, + ); + /* + GetNpcPos(0, $x, $y, $z); + $y += 10; + $z += 1; + MakeItemEntity(ITEM_SHOOTING_STAR, $x, $y, $z, 1, 0); + sleep 50; + $x += 10; + SetItemPos(0, $x, $y, $z);*/ + //sleep 10; +}); + +EvtScript N(jr_troopa_defense_jab) = SCRIPT({ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + //SetActorVar(-127, 0, 1); + sleep 15; + UseBattleCamPreset(14); + BattleCamTargetActor(ACTOR_SELF); + SetBattleCamOffsetZ(35); + MoveBattleCamOver(30); + sleep 30; + ActorSpeak( + MSG_prologue_jrtroopa_battle_5, + ACTOR_SELF, + 2, + NPC_ANIM_para_jr_troopa_Palette_00_talk_u, + NPC_ANIM_para_jr_troopa_Palette_00_idle_u + ); + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); +}); + +EvtScript N(regular_attack) = SCRIPT({ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + SetTargetActor(ACTOR_SELF, 0); + UseBattleCamPreset(63); + BattleCamTargetActor(ACTOR_SELF); + //0x8024ECF8(-1, 1, 0); + SetAnimation(ACTOR_SELF, 1, NPC_ANIM_mage_jr_troopa_default_run_u); + SetGoalToTarget(ACTOR_SELF); + AddGoalPos(ACTOR_SELF, 15, 0, -1); + SetActorSpeed(ACTOR_SELF, 8.0); + RunToGoal(ACTOR_SELF, 0, 0); + SetAnimation(ACTOR_SELF, 1, NPC_ANIM_mage_jr_troopa_default_idle); + SetAnimation(ACTOR_SELF, 1, NPC_ANIM_mage_jr_troopa_default_attack_u); + sleep 10; //timing for when mario gets damaged. + SetAnimation(ACTOR_SELF, 1, NPC_ANIM_mage_jr_troopa_default_attack2_u); + SetGoalToTarget(ACTOR_SELF); + EnemyDamageTarget(ACTOR_SELF, EVT_VAR(0), 0, 0, 0, 1, 20); + sleep 20; + SetAnimation(ACTOR_SELF, 1, NPC_ANIM_mage_jr_troopa_default_run_u); + SetGoalToHome(ACTOR_SELF); + SetActorSpeed(ACTOR_SELF, 10.0); + RunToGoal(ACTOR_SELF, 0, 0); + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); +}); + +EvtScript N(transform) = SCRIPT({ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + //SetActorVar(-127, 0, 1); + sleep 15; + UseBattleCamPreset(14); + BattleCamTargetActor(ACTOR_SELF); + SetBattleCamOffsetZ(35); + MoveBattleCamOver(30); + sleep 30; + ActorSpeak( + MSG_prologue_jrtroopa_battle_2, + ACTOR_SELF, + 1, + NPC_ANIM_mage_jr_troopa_default_talk_point_u, + NPC_ANIM_mage_jr_troopa_default_idle_u + ); + sleep 8; + await N(802260AC); + //SetIdleAnimations(ACTOR_SELF, 1, N(anims_para)); + //SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM(para_jr_troopa, default, idle)); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_FLYING, ACTOR_PART_FLAG_INVISIBLE, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_INVISIBLE, 1); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_FLYING, ACTOR_PART_FLAG_NO_TARGET, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_NO_TARGET, 1); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_FLYING, ACTOR_PART_FLAG_MULTI_TARGET, 1); + // SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_MULTI_TARGET, 0); + sleep 30; + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) += 20; + SetGoalPos(ACTOR_SELF, EVT_VAR(0), 60, EVT_VAR(2)); + FlyToGoal(-127, 45, 0, 0); + ForceHomePos(ACTOR_SELF, EVT_VAR(0), 60, EVT_VAR(2)); + HPBarToHome(ACTOR_SELF); + sleep 8; + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + ActorSpeak( + MSG_prologue_jrtroopa_battle_3, + ACTOR_SELF, + 2, + NPC_ANIM_para_jr_troopa_Palette_00_talk_u, + NPC_ANIM_para_jr_troopa_Palette_00_idle_u + ); + sleep 10; + await N(8022646C); + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); + BindHandleEvent(ACTOR_SELF, N(dispatch_para)); + await N(spell_attack_flying); + //await N(lose_flying_mode); +}); + +EvtScript N(802260AC) = SCRIPT({ + PlaySoundAtActor(ACTOR_SELF, 0x20B9); + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + GetStatusFlags(-127, EVT_VAR(3)); + if (EVT_VAR(3) !& 524288) { + EVT_VAR(1) += 16; + } else { + EVT_VAR(1) += 6; + } + PlayEffect(0x13, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 30, 0, 0, 0, 0, 0, 0, 0); + PlayEffect(0x13, 1, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 30, 0, 0, 0, 0, 0, 0, 0); + spawn { + EVT_VAR(0) = 0; + loop 32 { + sleep 1; + EVT_VAR(0) += 45; + SetActorRotation(ACTOR_SELF, 0, EVT_VAR(0), 0); + } + } + sleep 32; + PlaySoundAtActor(ACTOR_SELF, 0x300); + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(1) += 15; + PlayEffect(0x52, 4, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 1, 40, 0, 0, 0, 0, 0, 0, 0); + PlayEffect(0x7, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), -4, 0, 0, 0, 0, 0, 0, 0, 0); + PlayEffect(0x7, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), -4, 4, 0, 0, 0, 0, 0, 0, 0); + PlayEffect(0x7, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 4, 0, 0, 0, 0, 0, 0, 0, 0); + PlayEffect(0x7, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 4, 4, 0, 0, 0, 0, 0, 0, 0); +}); + +EvtScript N(8022646C) = SCRIPT({ + //func_802535B4(1); + UseBattleCamPreset(2); + MoveBattleCamOver(12); +}); + +EvtScript N(spell_attack) = SCRIPT({ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + SetTargetActor(ACTOR_SELF, 0); + SetGoalToTarget(ACTOR_SELF); + UseBattleCamPreset(2); + MoveBattleCamOver(20); + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_attack_u); + sleep 8; + PlaySoundAtActor(ACTOR_SELF, SOUND_SPELL_CAST1); + GetStatusFlags(-127, EVT_VAR(0)); + if (EVT_VAR(0) !& 524288) { + EVT_VAR(3) = 0; + EVT_VAR(4) = 36; + EVT_VAR(5) = 1.0; + } else { + EVT_VAR(3) = 0; + EVT_VAR(4) = 14; + EVT_VAR(5) = EVT_MAP_FLAG(-1999590); + } + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) += EVT_VAR(3); + EVT_VAR(1) += EVT_VAR(4); + PlayEffect(0x13, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(5), 30, 0, 0, 0, 0, 0, 0, 0); + sleep 30; + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_attack2_u); + EnemyTestTarget(ACTOR_SELF, EVT_VAR(10), 268435456, 0, 1, 16); + match EVT_VAR(10) { + == 6 { + PlaySoundAtActor(ACTOR_SELF, SOUND_SPELL_CAST2); + GetActorPos(ACTOR_PLAYER, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5)); + EVT_VAR(3) -= 120; + EVT_VAR(4) += 20; + GetStatusFlags(-127, EVT_VAR(0)); + if (EVT_VAR(0) !& 524288) { + EVT_VAR(6) = -8; + EVT_VAR(7) = 20; + EVT_VAR(8) = 1.0; + } else { + EVT_VAR(6) = -3; + EVT_VAR(7) = 8; + EVT_VAR(8) = EVT_MAP_FLAG(-1999590); + } + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) += EVT_VAR(6); + EVT_VAR(1) += EVT_VAR(7); + PlayEffect(0x12, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), EVT_VAR(4), EVT_VAR(5), 30, 0, 0, 0, 0, 0); + sleep 35; + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); + return; + } + == 5 { + spawn { + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(1) += 12; + PlayEffect(0x3E, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 3.0, 30, 0, 0, 0, 0, 0, 0, 0); + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_attack2_burn); + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + sleep 40; + EVT_VAR(0) -= 7; + EVT_VAR(1) += 14; + EVT_VAR(2) += 4; + PlayEffect(0x7, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0); + sleep 20; + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_idle_u); + } + sleep 20; + EnemyTestTarget(ACTOR_SELF, EVT_VAR(0), 0x80000000, 0, 0, 0); + sleep 40; + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); + return; + } + } + PlaySoundAtActor(ACTOR_SELF, SOUND_SPELL_CAST2); + GetActorPos(ACTOR_PLAYER, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5)); + EVT_VAR(4) += 20; + GetStatusFlags(-127, EVT_VAR(0)); + if (EVT_VAR(0) !& 524288) { + EVT_VAR(6) = -8; + EVT_VAR(7) = 20; + EVT_VAR(8) = 1.0; + } else { + EVT_VAR(6) = -3; + EVT_VAR(7) = 8; + EVT_VAR(8) = EVT_MAP_FLAG(-1999590); + } + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) += EVT_VAR(6); + EVT_VAR(1) += EVT_VAR(7); + PlayEffect(0x12, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), EVT_VAR(4), EVT_VAR(5), 15, 0, 0, 0, 0, 0); + sleep 15; + GetActorVar(ACTOR_SELF, VAR_TROOPA_DAMAGE,EVT_VAR(1)); + EnemyDamageTarget(ACTOR_SELF, EVT_VAR(0), 268435472, 0, 0, EVT_VAR(1), 32); + UseBattleCamPreset(2); + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); +}); + +EvtScript N(spell_attack_flying) = SCRIPT({ + UseIdleAnimation(ACTOR_SELF, 0); + EnableIdleScript(ACTOR_SELF, 0); + SetTargetActor(ACTOR_SELF, 0); + SetGoalToTarget(ACTOR_SELF); + UseBattleCamPreset(2); + MoveBattleCamOver(20); + SetAnimation(ACTOR_SELF, TROOPA_PART_FLYING, NPC_ANIM_para_jr_troopa_Palette_00_attack_u); + sleep 8; + PlaySoundAtActor(ACTOR_SELF, SOUND_SPELL_CAST1); + GetStatusFlags(-127, EVT_VAR(0)); + if (EVT_VAR(0) !& 524288) { + EVT_VAR(3) = 0; + EVT_VAR(4) = 36; + EVT_VAR(5) = 1.0; + } else { + EVT_VAR(3) = 0; + EVT_VAR(4) = 14; + EVT_VAR(5) = EVT_MAP_FLAG(-1999590); + } + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) += EVT_VAR(3); + EVT_VAR(1) += EVT_VAR(4); + EVT_VAR(0) -= 7; //X position offset for spell attack + EVT_VAR(1) += 9; //Y position offset for spell attack + PlayEffect(0x13, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(5), 30, 0, 0, 0, 0, 0, 0, 0); + sleep 30; + SetAnimation(ACTOR_SELF, TROOPA_PART_FLYING, NPC_ANIM_para_jr_troopa_Palette_00_attack2_u); + EnemyTestTarget(ACTOR_SELF, EVT_VAR(10), 268435456, 0, 1, 16); + match EVT_VAR(10) { + == 6 { + PlaySoundAtActor(ACTOR_SELF, SOUND_SPELL_CAST2); + GetActorPos(ACTOR_PLAYER, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5)); + EVT_VAR(3) -= 120; + EVT_VAR(4) += 20; + GetStatusFlags(-127, EVT_VAR(0)); + if (EVT_VAR(0) !& 524288) { + EVT_VAR(6) = -8; + EVT_VAR(7) = 20; + EVT_VAR(8) = 1.0; + } else { + EVT_VAR(6) = -3; + EVT_VAR(7) = 8; + EVT_VAR(8) = EVT_MAP_FLAG(-1999590); + } + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) += EVT_VAR(6); + EVT_VAR(1) += EVT_VAR(7); + PlayEffect(0x12, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), EVT_VAR(4), EVT_VAR(5), 30, 0, 0, 0, 0, 0); + sleep 35; + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); + return; + } + == 5 { + spawn { + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(1) += 12; + PlayEffect(0x3E, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 3.0, 30, 0, 0, 0, 0, 0, 0, 0); + //SetAnimation(ACTOR_SELF, TROOPA_PART_FLYING, NPC_ANIM(mage_jr_troopa, default, attack2_burn)); + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + sleep 40; + EVT_VAR(0) -= 7; + EVT_VAR(1) += 14; + EVT_VAR(2) += 4; + PlayEffect(0x7, 2, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0); + sleep 20; + //SetAnimation(ACTOR_SELF, TROOPA_PART_FLYING, NPC_ANIM(mage_jr_troopa, default, idle_u)); + } + sleep 20; + EnemyTestTarget(ACTOR_SELF, EVT_VAR(0), 0x80000000, 0, 0, 0); + sleep 40; + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); + return; + } + } + PlaySoundAtActor(ACTOR_SELF, SOUND_SPELL_CAST2); + GetActorPos(ACTOR_PLAYER, EVT_VAR(3), EVT_VAR(4), EVT_VAR(5)); + EVT_VAR(4) += 20; + EVT_VAR(3) -= 5; + GetStatusFlags(-127, EVT_VAR(0)); + if (EVT_VAR(0) !& 524288) { + EVT_VAR(6) = -8; + EVT_VAR(7) = 20; + EVT_VAR(8) = 1.0; + } else { + EVT_VAR(6) = -3; + EVT_VAR(7) = 8; + EVT_VAR(8) = EVT_MAP_FLAG(-1999590); + } + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) += EVT_VAR(6); + EVT_VAR(1) += EVT_VAR(7); + PlayEffect(0x12, 0, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), EVT_VAR(3), EVT_VAR(4), EVT_VAR(5), 15, 0, 0, 0, 0, 0); + sleep 15; + GetActorVar(ACTOR_SELF, VAR_TROOPA_DAMAGE,EVT_VAR(1)); + EnemyDamageTarget(ACTOR_SELF, EVT_VAR(0), 268435472, 0, 0, EVT_VAR(1), 32); + UseBattleCamPreset(2); + EnableIdleScript(ACTOR_SELF, 1); + UseIdleAnimation(ACTOR_SELF, 1); +}); + +EvtScript N(lose_flying_mode) = SCRIPT({ + spawn { + sleep 10; + ActorSpeak( + MSG_prologue_jrtroopa_battle_8A, + ACTOR_SELF, + TROOPA_PART_FLYING, + NPC_ANIM_para_jr_troopa_Palette_00_hanging, + NPC_ANIM_para_jr_troopa_Palette_00_hanging + ); + } + UseBattleCamPreset(2); + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + if (EVT_VAR(1) == 0) { + goto 0; + } + PlaySoundAtActor(ACTOR_SELF, 0x301); + SetActorSounds(-127, 2, 0, 0); + //func_8027D32C(-127); + SetGoalPos(ACTOR_SELF, EVT_VAR(0), 0, EVT_VAR(2)); + SetActorJumpGravity(ACTOR_SELF, 1.2001953125); + FallToGoal(-127, 10); + SetActorJumpGravity(ACTOR_SELF, 0.80078125); + JumpToGoal(ACTOR_SELF, 8, 0, 1, 0); + HPBarToCurrent(-127); + BindHandleEvent(ACTOR_SELF, N(dispatch)); + //func_8027D2D8(-127); +0: + spawn { + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(1) += 10; + EVT_VAR(2) += 10; + loop 3 { + PlayEffect(0x1, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + sleep 3; + } + } + //SetPartFlagBits(-127, 1, 1, 1); + //SetPartFlagBits(-127, 2, 1, 0); + //SetAnimation(ACTOR_SELF, 2, NPC_ANIM(jr_troopa, default, dead_still)); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_FLYING, ACTOR_PART_FLAG_INVISIBLE, 1); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_NORMAL, ACTOR_PART_FLAG_INVISIBLE, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_FLYING, ACTOR_PART_FLAG_NO_TARGET, 1); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_NORMAL, ACTOR_PART_FLAG_NO_TARGET, 0); + SetAnimation(ACTOR_SELF, TROOPA_PART_NORMAL, NPC_ANIM_jr_troopa_default_dead); + GetActorPos(ACTOR_SELF, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + EVT_VAR(0) -= 5; + SetActorPos(-127, EVT_VAR(0), EVT_VAR(1), EVT_VAR(2)); + PlaySoundAtActor(ACTOR_SELF, 0x20E5); + //sleep 15; + //PlaySoundAtActor(ACTOR_SELF, SOUND_DEATH); + //DropStarPoints(-127); + SetActorYaw(ACTOR_SELF, 0); + UseBattleCamPreset(14); + SetBattleCamZoom(260); + SetBattleCamOffsetZ(15); + BattleCamTargetActor(ACTOR_SELF); + MoveBattleCamOver(30); + //SetAnimation(ACTOR_SELF, 2, NPC_ANIM(jr_troopa, default, dead)); + //SetIdleAnimations(-127, 2, N(idleAnimations_80225E48)); + sleep 35; + SetAnimation(ACTOR_SELF, TROOPA_PART_NORMAL, NPC_ANIM_jr_troopa_default_jump); + sleep 2; + JumpPartTo(ACTOR_SELF, TROOPA_PART_NORMAL, $x, $y, $z, 2, 1); + sleep 4; + SetAnimation(ACTOR_SELF, TROOPA_PART_NORMAL, NPC_ANIM_jr_troopa_default_jump_land); + sleep 4; + //sleep 80; + //SetPartMoveSpeed(ACTOR_SELF, TROOPA_PART_NORMAL, 1); + //SetPartJumpGravity(ACTOR_SELF, TROOPA_PART_NORMAL, 10); + //SetActorJumpGravity(ACTOR_SELF, 10); + //GetPartPos(ACTOR_SELF, TROOPA_PART_NORMAL, $x, $y, $z); + //JumpPartTo(ACTOR_SELF, TROOPA_PART_MAGE, $x, $y, $z, 10, 1); + //JumpToGoal(ACTOR_SELF, 5, 0, 1, 1); + //sleep 50; + SetAnimation(ACTOR_SELF, TROOPA_PART_NORMAL, NPC_ANIM_jr_troopa_default_idle_angry); + sleep 6; + ActorSpeak( + MSG_prologue_jrtroopa_battle_8B, + ACTOR_SELF, + TROOPA_PART_NORMAL, + NPC_ANIM_jr_troopa_default_talk2, + NPC_ANIM_jr_troopa_default_idle_angry + ); + SetAnimation(ACTOR_SELF, TROOPA_PART_NORMAL, NPC_ANIM_jr_troopa_default_stand_weird_land); + EVT_VAR(3) = 0; + loop 12 { + EVT_VAR(3) += 15; + SetActorYaw(ACTOR_SELF, EVT_VAR(3)); + sleep 1; + } + sleep 20; + loop 12 { + EVT_VAR(3) -= 15; + SetActorYaw(ACTOR_SELF, EVT_VAR(3)); + sleep 1; + } + sleep 20; + ActorSpeak( + MSG_prologue_jrtroopa_battle_8C, + ACTOR_SELF, + TROOPA_PART_NORMAL, + NPC_ANIM_jr_troopa_default_hanging, + NPC_ANIM_jr_troopa_default_idle_angry + ); + ActorSpeak( + MSG_prologue_jrtroopa_battle_8D, + ACTOR_SELF, + TROOPA_PART_NORMAL, + NPC_ANIM_jr_troopa_default_talk_point, + NPC_ANIM_jr_troopa_default_point_tap + ); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_INVISIBLE, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_NORMAL, ACTOR_PART_FLAG_INVISIBLE, 1); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_MAGE, ACTOR_PART_FLAG_NO_TARGET, 0); + SetPartFlagBits(ACTOR_SELF, TROOPA_PART_NORMAL, ACTOR_PART_FLAG_NO_TARGET, 1); + SetAnimation(ACTOR_SELF, TROOPA_PART_MAGE, NPC_ANIM_mage_jr_troopa_default_idle_u); + SetActorVar(ACTOR_SELF, VAR_TROOPA_DAMAGE, 1); + SetActorVar(ACTOR_SELF, VAR_TROOPA_STATE, 2); + //SetActorFlagBits(-127, 4194304, 1); + //add boots + SetActorFlags(ACTOR_SELF, 0x0, TRUE); //TEMP way of making it so mario can jump on troopa again +}); + +#undef NAMESPACE diff --git a/assets/dx/.gitkeep b/assets/dx/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/assets/dx/crash_screen/font.png b/assets/dx/crash_screen/font.png new file mode 100644 index 00000000000..bb6e46bb4da Binary files /dev/null and b/assets/dx/crash_screen/font.png differ diff --git a/assets/dx/libgcc_vr4300.a b/assets/dx/libgcc_vr4300.a new file mode 100644 index 00000000000..3abc551f3b2 Binary files /dev/null and b/assets/dx/libgcc_vr4300.a differ diff --git a/assets/star_rod_build/mapfs/ham_01_hit.bin b/assets/star_rod_build/mapfs/ham_01_hit.bin new file mode 100644 index 00000000000..44a60fce7bc Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_01_hit.bin differ diff --git a/assets/star_rod_build/mapfs/ham_01_shape.bin b/assets/star_rod_build/mapfs/ham_01_shape.bin new file mode 100644 index 00000000000..961c4993a89 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_01_shape.bin differ diff --git a/assets/star_rod_build/mapfs/ham_02_hit.bin b/assets/star_rod_build/mapfs/ham_02_hit.bin new file mode 100644 index 00000000000..cd0f9a7bcb5 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_02_hit.bin differ diff --git a/assets/star_rod_build/mapfs/ham_02_shape.bin b/assets/star_rod_build/mapfs/ham_02_shape.bin new file mode 100644 index 00000000000..51370a61914 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_02_shape.bin differ diff --git a/assets/star_rod_build/mapfs/ham_03_hit.bin b/assets/star_rod_build/mapfs/ham_03_hit.bin new file mode 100644 index 00000000000..6148d8ffd7c Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_03_hit.bin differ diff --git a/assets/star_rod_build/mapfs/ham_03_shape.bin b/assets/star_rod_build/mapfs/ham_03_shape.bin new file mode 100644 index 00000000000..853dfcdd6f6 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_03_shape.bin differ diff --git a/assets/star_rod_build/mapfs/ham_04_hit.bin b/assets/star_rod_build/mapfs/ham_04_hit.bin new file mode 100644 index 00000000000..35b44bc9a0a Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_04_hit.bin differ diff --git a/assets/star_rod_build/mapfs/ham_04_shape.bin b/assets/star_rod_build/mapfs/ham_04_shape.bin new file mode 100644 index 00000000000..beda9293ff9 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_04_shape.bin differ diff --git a/assets/star_rod_build/mapfs/ham_05_hit.bin b/assets/star_rod_build/mapfs/ham_05_hit.bin new file mode 100644 index 00000000000..be3b9b74069 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_05_hit.bin differ diff --git a/assets/star_rod_build/mapfs/ham_05_shape.bin b/assets/star_rod_build/mapfs/ham_05_shape.bin new file mode 100644 index 00000000000..8a466ce8f16 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_05_shape.bin differ diff --git a/assets/star_rod_build/mapfs/ham_06_hit.bin b/assets/star_rod_build/mapfs/ham_06_hit.bin new file mode 100644 index 00000000000..912a15222c3 Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_06_hit.bin differ diff --git a/assets/star_rod_build/mapfs/ham_06_shape.bin b/assets/star_rod_build/mapfs/ham_06_shape.bin new file mode 100644 index 00000000000..3c336bdb19b Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_06_shape.bin differ diff --git a/assets/star_rod_build/mapfs/ham_07_hit.bin b/assets/star_rod_build/mapfs/ham_07_hit.bin new file mode 100644 index 00000000000..d4762b3ab6c Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_07_hit.bin differ diff --git a/assets/star_rod_build/mapfs/ham_07_shape.bin b/assets/star_rod_build/mapfs/ham_07_shape.bin new file mode 100644 index 00000000000..b51ddb572fe Binary files /dev/null and b/assets/star_rod_build/mapfs/ham_07_shape.bin differ diff --git a/assets/wua/icon/Icons.xml b/assets/wua/icon/Icons.xml new file mode 100644 index 00000000000..ef1f6282def --- /dev/null +++ b/assets/wua/icon/Icons.xml @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/icon/badge/MegaRush.disabled.png b/assets/wua/icon/badge/MegaRush.disabled.png new file mode 100644 index 00000000000..4fb7872cd32 Binary files /dev/null and b/assets/wua/icon/badge/MegaRush.disabled.png differ diff --git a/assets/wua/icon/badge/MegaRush.png b/assets/wua/icon/badge/MegaRush.png new file mode 100644 index 00000000000..a4a08b3f069 Binary files /dev/null and b/assets/wua/icon/badge/MegaRush.png differ diff --git a/assets/wua/mapfs/bg/aaa_bg.png b/assets/wua/mapfs/bg/aaa_bg.png new file mode 100644 index 00000000000..bc66690c3b6 Binary files /dev/null and b/assets/wua/mapfs/bg/aaa_bg.png differ diff --git a/assets/wua/mapfs/bg/ham_bg.png b/assets/wua/mapfs/bg/ham_bg.png new file mode 100644 index 00000000000..dcde64795ad Binary files /dev/null and b/assets/wua/mapfs/bg/ham_bg.png differ diff --git a/assets/wua/mapfs/fof_01.xml b/assets/wua/mapfs/fof_01.xml new file mode 100644 index 00000000000..a92dc3b7d21 --- /dev/null +++ b/assets/wua/mapfs/fof_01.xml @@ -0,0 +1,7036 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_02.xml b/assets/wua/mapfs/fof_02.xml new file mode 100644 index 00000000000..acd508a9e99 --- /dev/null +++ b/assets/wua/mapfs/fof_02.xml @@ -0,0 +1,13228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_03.xml b/assets/wua/mapfs/fof_03.xml new file mode 100644 index 00000000000..132df84f32b --- /dev/null +++ b/assets/wua/mapfs/fof_03.xml @@ -0,0 +1,15694 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_04.xml b/assets/wua/mapfs/fof_04.xml new file mode 100644 index 00000000000..8e58cfd2af3 --- /dev/null +++ b/assets/wua/mapfs/fof_04.xml @@ -0,0 +1,7455 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_05.xml b/assets/wua/mapfs/fof_05.xml new file mode 100644 index 00000000000..bec11d4fb34 --- /dev/null +++ b/assets/wua/mapfs/fof_05.xml @@ -0,0 +1,11496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_06.xml b/assets/wua/mapfs/fof_06.xml new file mode 100644 index 00000000000..2948b012be2 --- /dev/null +++ b/assets/wua/mapfs/fof_06.xml @@ -0,0 +1,3644 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_07.xml b/assets/wua/mapfs/fof_07.xml new file mode 100644 index 00000000000..fd580a2d0c7 --- /dev/null +++ b/assets/wua/mapfs/fof_07.xml @@ -0,0 +1,1927 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_08.xml b/assets/wua/mapfs/fof_08.xml new file mode 100644 index 00000000000..36bed3530b7 --- /dev/null +++ b/assets/wua/mapfs/fof_08.xml @@ -0,0 +1,10675 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_09.xml b/assets/wua/mapfs/fof_09.xml new file mode 100644 index 00000000000..4b3e76734be --- /dev/null +++ b/assets/wua/mapfs/fof_09.xml @@ -0,0 +1,9250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_10.xml b/assets/wua/mapfs/fof_10.xml new file mode 100644 index 00000000000..74c10e3f043 --- /dev/null +++ b/assets/wua/mapfs/fof_10.xml @@ -0,0 +1,8721 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_11.xml b/assets/wua/mapfs/fof_11.xml new file mode 100644 index 00000000000..b8f2b22aca0 --- /dev/null +++ b/assets/wua/mapfs/fof_11.xml @@ -0,0 +1,9350 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_12.xml b/assets/wua/mapfs/fof_12.xml new file mode 100644 index 00000000000..b055a30b370 --- /dev/null +++ b/assets/wua/mapfs/fof_12.xml @@ -0,0 +1,7147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_13.xml b/assets/wua/mapfs/fof_13.xml new file mode 100644 index 00000000000..4c9b5945ee1 --- /dev/null +++ b/assets/wua/mapfs/fof_13.xml @@ -0,0 +1,5144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_14.xml b/assets/wua/mapfs/fof_14.xml new file mode 100644 index 00000000000..bc1e6d30215 --- /dev/null +++ b/assets/wua/mapfs/fof_14.xml @@ -0,0 +1,5180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_15.xml b/assets/wua/mapfs/fof_15.xml new file mode 100644 index 00000000000..124a9e9f416 --- /dev/null +++ b/assets/wua/mapfs/fof_15.xml @@ -0,0 +1,7061 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/fof_tex.txa b/assets/wua/mapfs/fof_tex.txa new file mode 100644 index 00000000000..96ca6a1204b --- /dev/null +++ b/assets/wua/mapfs/fof_tex.txa @@ -0,0 +1,558 @@ +tex: trd_ana_ctif +{ + img: trd_ana_ctif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_berosaidetif +{ + img: trd_berosaidetif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_block_dtif +{ + img: trd_block_dtif.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_block_e2ttif +{ + img: trd_block_e2ttif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_block_etif +{ + img: trd_block_etif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_doatif +{ + img: trd_doatif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_frametif +{ + img: trd_frametif.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_futa1tif +{ + img: trd_futa1tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_grayframetif +{ + img: trd_grayframetif.png + { + format: I-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_green_etif +{ + img: trd_green_etif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_hikaritif +{ + img: trd_hikaritif.png + { + format: IA-8 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_kabe10tif +{ + img: trd_kabe10tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kabe3tif +{ + img: trd_kabe3tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kabe5tif +{ + img: trd_kabe5tif.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_kabe6tif +{ + img: trd_kabe6tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kabe8tif +{ + img: trd_kabe8tif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_kabekusatif +{ + img: trd_kabekusatif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_kabetif +{ + img: trd_kabetif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kamitif +{ + img: trd_kamitif.png + { + format: CI-4 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_kawa_atif +{ + img: trd_kawa_atif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kitif +{ + img: trd_kitif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_komatif +{ + img: trd_komatif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kubiwatif +{ + img: trd_kubiwatif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kusaritif +{ + img: trd_kusaritif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_mado6tif +{ + img: trd_mado6tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_mado7tif +{ + img: trd_mado7tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_me_btif +{ + img: trd_me_btif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_nuno_ctif +{ + img: trd_nuno_ctif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_nuno_etif +{ + img: trd_nuno_etif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_peachtif +{ + img: trd_peachtif.png + { + format: CI-4 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_saku2tif +{ + img: trd_saku2tif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_saku3tif +{ + img: trd_saku3tif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_saku4tif +{ + img: trd_saku4tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_saku5tif +{ + img: trd_saku5tif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_sakutif +{ + img: trd_sakutif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_sui1tif +{ + img: trd_sui1tif.png + { + format: IA-8 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_t_sui2tif +{ + img: trd_t_sui2tif.png + { + format: IA-16 + hwrap: repeat + vwrap: repeat + } + aux: trd_t_sui2tif_AUX.png + { + format: shared + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_block2tif +{ + img: trd_trd_block2tif.png + { + format: CI-8 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_kusaritif +{ + img: trd_trd_kusaritif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_taki1tif +{ + img: trd_trd_taki1tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_taki2tif +{ + img: trd_trd_taki2tif.png + { + format: IA-16 + hwrap: mirror + vwrap: mirror + } + aux: trd_trd_taki2tif_AUX.png + { + format: shared + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_water_sokotif +{ + img: trd_water_sokotif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_water3tif +{ + img: trd_water3tif.png + { + format: IA-16 + hwrap: repeat + vwrap: repeat + } + aux: trd_water3tif_AUX.png + { + format: shared + hwrap: repeat + vwrap: repeat + } + filter: no + combine: 8 +} + +tex: trd_yuka3tif +{ + img: trd_yuka3tif.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_yuka4tif +{ + img: trd_yuka4tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + diff --git a/assets/wua/mapfs/fof_tex/trd_ana_ctif.png b/assets/wua/mapfs/fof_tex/trd_ana_ctif.png new file mode 100644 index 00000000000..1feb98007c1 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_ana_ctif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_berosaidetif.png b/assets/wua/mapfs/fof_tex/trd_berosaidetif.png new file mode 100644 index 00000000000..fa9b86fedff Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_berosaidetif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_block_dtif.png b/assets/wua/mapfs/fof_tex/trd_block_dtif.png new file mode 100644 index 00000000000..267e708dc9b Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_block_dtif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_block_e2ttif.png b/assets/wua/mapfs/fof_tex/trd_block_e2ttif.png new file mode 100644 index 00000000000..b65d1140c61 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_block_e2ttif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_block_etif.png b/assets/wua/mapfs/fof_tex/trd_block_etif.png new file mode 100644 index 00000000000..dd386d01d5c Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_block_etif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_block_etif_AUX.png b/assets/wua/mapfs/fof_tex/trd_block_etif_AUX.png new file mode 100644 index 00000000000..1a6e4b04807 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_block_etif_AUX.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_doatif.png b/assets/wua/mapfs/fof_tex/trd_doatif.png new file mode 100644 index 00000000000..684ac6f1047 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_doatif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_frametif.png b/assets/wua/mapfs/fof_tex/trd_frametif.png new file mode 100644 index 00000000000..fba21d0461c Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_frametif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_futa1tif.png b/assets/wua/mapfs/fof_tex/trd_futa1tif.png new file mode 100644 index 00000000000..7f5b498ab16 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_futa1tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_grayframetif.png b/assets/wua/mapfs/fof_tex/trd_grayframetif.png new file mode 100644 index 00000000000..4c168fa5b6b Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_grayframetif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_green_etif.png b/assets/wua/mapfs/fof_tex/trd_green_etif.png new file mode 100644 index 00000000000..38bf19a4d25 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_green_etif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_green_etif_MIPMAP_1.png b/assets/wua/mapfs/fof_tex/trd_green_etif_MIPMAP_1.png new file mode 100644 index 00000000000..2c76aeaada7 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_green_etif_MIPMAP_1.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_hikaritif.png b/assets/wua/mapfs/fof_tex/trd_hikaritif.png new file mode 100644 index 00000000000..dc5eaf80bfa Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_hikaritif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabe10tif.png b/assets/wua/mapfs/fof_tex/trd_kabe10tif.png new file mode 100644 index 00000000000..9b678c0bb78 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabe10tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabe10tif_AUX.png b/assets/wua/mapfs/fof_tex/trd_kabe10tif_AUX.png new file mode 100644 index 00000000000..04340a7527c Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabe10tif_AUX.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabe3tif.png b/assets/wua/mapfs/fof_tex/trd_kabe3tif.png new file mode 100644 index 00000000000..32726b75c4b Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabe3tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabe5tif.png b/assets/wua/mapfs/fof_tex/trd_kabe5tif.png new file mode 100644 index 00000000000..53c708437e7 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabe5tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabe6tif.png b/assets/wua/mapfs/fof_tex/trd_kabe6tif.png new file mode 100644 index 00000000000..5d6527e1625 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabe6tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabe8tif.png b/assets/wua/mapfs/fof_tex/trd_kabe8tif.png new file mode 100644 index 00000000000..e1cc3d12d7f Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabe8tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabekusatif.png b/assets/wua/mapfs/fof_tex/trd_kabekusatif.png new file mode 100644 index 00000000000..53716aa1e2e Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabekusatif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kabetif.png b/assets/wua/mapfs/fof_tex/trd_kabetif.png new file mode 100644 index 00000000000..68558c5f852 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kabetif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kamitif.png b/assets/wua/mapfs/fof_tex/trd_kamitif.png new file mode 100644 index 00000000000..2061b353093 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kamitif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kawa_atif.png b/assets/wua/mapfs/fof_tex/trd_kawa_atif.png new file mode 100644 index 00000000000..bfc25710063 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kawa_atif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kitif.png b/assets/wua/mapfs/fof_tex/trd_kitif.png new file mode 100644 index 00000000000..ba5538c25d2 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kitif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_komatif.png b/assets/wua/mapfs/fof_tex/trd_komatif.png new file mode 100644 index 00000000000..4d986389cc9 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_komatif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kubiwatif.png b/assets/wua/mapfs/fof_tex/trd_kubiwatif.png new file mode 100644 index 00000000000..4b8324b479a Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kubiwatif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_kusaritif.png b/assets/wua/mapfs/fof_tex/trd_kusaritif.png new file mode 100644 index 00000000000..58f71a1e0db Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_kusaritif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_mado6tif.png b/assets/wua/mapfs/fof_tex/trd_mado6tif.png new file mode 100644 index 00000000000..ed7046f69f2 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_mado6tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_mado7tif.png b/assets/wua/mapfs/fof_tex/trd_mado7tif.png new file mode 100644 index 00000000000..e2d25999dc0 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_mado7tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_me_btif.png b/assets/wua/mapfs/fof_tex/trd_me_btif.png new file mode 100644 index 00000000000..1115669b1c3 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_me_btif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_nuno_ctif.png b/assets/wua/mapfs/fof_tex/trd_nuno_ctif.png new file mode 100644 index 00000000000..6652e736768 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_nuno_ctif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_nuno_etif.png b/assets/wua/mapfs/fof_tex/trd_nuno_etif.png new file mode 100644 index 00000000000..954855cec26 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_nuno_etif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_peachtif.png b/assets/wua/mapfs/fof_tex/trd_peachtif.png new file mode 100644 index 00000000000..6437b1e3d90 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_peachtif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_saku2tif.png b/assets/wua/mapfs/fof_tex/trd_saku2tif.png new file mode 100644 index 00000000000..dba667bd1f8 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_saku2tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_saku3tif.png b/assets/wua/mapfs/fof_tex/trd_saku3tif.png new file mode 100644 index 00000000000..37c10eb482c Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_saku3tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_saku4tif.png b/assets/wua/mapfs/fof_tex/trd_saku4tif.png new file mode 100644 index 00000000000..cc54a62c8ce Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_saku4tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_saku5tif.png b/assets/wua/mapfs/fof_tex/trd_saku5tif.png new file mode 100644 index 00000000000..38a38cf1892 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_saku5tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_sakutif.png b/assets/wua/mapfs/fof_tex/trd_sakutif.png new file mode 100644 index 00000000000..52e28af5a87 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_sakutif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_sui1tif.png b/assets/wua/mapfs/fof_tex/trd_sui1tif.png new file mode 100644 index 00000000000..e9d9faf2fc3 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_sui1tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_sui1tif_AUX.png b/assets/wua/mapfs/fof_tex/trd_sui1tif_AUX.png new file mode 100644 index 00000000000..d6e2a780dde Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_sui1tif_AUX.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_t_sui2tif.png b/assets/wua/mapfs/fof_tex/trd_t_sui2tif.png new file mode 100644 index 00000000000..5b224885d3b Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_t_sui2tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_t_sui2tif_AUX.png b/assets/wua/mapfs/fof_tex/trd_t_sui2tif_AUX.png new file mode 100644 index 00000000000..d04a534379e Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_t_sui2tif_AUX.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_tex.mtl b/assets/wua/mapfs/fof_tex/trd_tex.mtl new file mode 100644 index 00000000000..8539238715b --- /dev/null +++ b/assets/wua/mapfs/fof_tex/trd_tex.mtl @@ -0,0 +1,360 @@ +newmtl m_trd_ana_ctif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_ana_ctif.png +map_Kd trd_ana_ctif.png + +newmtl m_trd_berosaidetif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_berosaidetif.png +map_Kd trd_berosaidetif.png + +newmtl m_trd_block_dtif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_block_dtif.png +map_Kd trd_block_dtif.png + +newmtl m_trd_block_e2ttif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_block_e2ttif.png +map_Kd trd_block_e2ttif.png + +newmtl m_trd_block_etif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_block_etif.png +map_Kd trd_block_etif.png + +newmtl m_trd_doatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_doatif.png +map_Kd trd_doatif.png + +newmtl m_trd_frametif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_frametif.png +map_Kd trd_frametif.png + +newmtl m_trd_futa1tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_futa1tif.png +map_Kd trd_futa1tif.png + +newmtl m_trd_grayframetif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_grayframetif.png +map_Kd trd_grayframetif.png + +newmtl m_trd_green_etif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_green_etif.png +map_Kd trd_green_etif.png + +newmtl m_trd_hikaritif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_hikaritif.png +map_Kd trd_hikaritif.png + +newmtl m_trd_kabe10tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kabe10tif.png +map_Kd trd_kabe10tif.png + +newmtl m_trd_kabe3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kabe3tif.png +map_Kd trd_kabe3tif.png + +newmtl m_trd_kabe5tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kabe5tif.png +map_Kd trd_kabe5tif.png + +newmtl m_trd_kabe6tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kabe6tif.png +map_Kd trd_kabe6tif.png + +newmtl m_trd_kabe8tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kabe8tif.png +map_Kd trd_kabe8tif.png + +newmtl m_trd_kabekusatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kabekusatif.png +map_Kd trd_kabekusatif.png + +newmtl m_trd_kabetif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kabetif.png +map_Kd trd_kabetif.png + +newmtl m_trd_kamitif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kamitif.png +map_Kd trd_kamitif.png + +newmtl m_trd_kawa_atif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kawa_atif.png +map_Kd trd_kawa_atif.png + +newmtl m_trd_kitif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kitif.png +map_Kd trd_kitif.png + +newmtl m_trd_komatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_komatif.png +map_Kd trd_komatif.png + +newmtl m_trd_kubiwatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kubiwatif.png +map_Kd trd_kubiwatif.png + +newmtl m_trd_kusaritif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_kusaritif.png +map_Kd trd_kusaritif.png + +newmtl m_trd_mado6tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_mado6tif.png +map_Kd trd_mado6tif.png + +newmtl m_trd_mado7tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_mado7tif.png +map_Kd trd_mado7tif.png + +newmtl m_trd_me_btif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_me_btif.png +map_Kd trd_me_btif.png + +newmtl m_trd_nuno_ctif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_nuno_ctif.png +map_Kd trd_nuno_ctif.png + +newmtl m_trd_nuno_etif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_nuno_etif.png +map_Kd trd_nuno_etif.png + +newmtl m_trd_peachtif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_peachtif.png +map_Kd trd_peachtif.png + +newmtl m_trd_saku2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_saku2tif.png +map_Kd trd_saku2tif.png + +newmtl m_trd_saku3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_saku3tif.png +map_Kd trd_saku3tif.png + +newmtl m_trd_saku4tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_saku4tif.png +map_Kd trd_saku4tif.png + +newmtl m_trd_saku5tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_saku5tif.png +map_Kd trd_saku5tif.png + +newmtl m_trd_sakutif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_sakutif.png +map_Kd trd_sakutif.png + +newmtl m_trd_sui1tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_sui1tif.png +map_Kd trd_sui1tif.png + +newmtl m_trd_t_sui2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_t_sui2tif.png +map_Kd trd_t_sui2tif.png + +newmtl m_trd_trd_block2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_trd_block2tif.png +map_Kd trd_trd_block2tif.png + +newmtl m_trd_trd_kusaritif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_trd_kusaritif.png +map_Kd trd_trd_kusaritif.png + +newmtl m_trd_trd_taki1tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_trd_taki1tif.png +map_Kd trd_trd_taki1tif.png + +newmtl m_trd_trd_taki2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_trd_taki2tif.png +map_Kd trd_trd_taki2tif.png + +newmtl m_trd_water_sokotif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_water_sokotif.png +map_Kd trd_water_sokotif.png + +newmtl m_trd_water3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_water3tif.png +map_Kd trd_water3tif.png + +newmtl m_trd_yuka3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_yuka3tif.png +map_Kd trd_yuka3tif.png + +newmtl m_trd_yuka4tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka trd_yuka4tif.png +map_Kd trd_yuka4tif.png + diff --git a/assets/wua/mapfs/fof_tex/trd_trd_block2tif.png b/assets/wua/mapfs/fof_tex/trd_trd_block2tif.png new file mode 100644 index 00000000000..f003d7d00a7 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_trd_block2tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_trd_kusaritif.png b/assets/wua/mapfs/fof_tex/trd_trd_kusaritif.png new file mode 100644 index 00000000000..e6123439c4c Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_trd_kusaritif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_trd_taki1tif.png b/assets/wua/mapfs/fof_tex/trd_trd_taki1tif.png new file mode 100644 index 00000000000..b0b742b4b0a Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_trd_taki1tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_trd_taki1tif_AUX.png b/assets/wua/mapfs/fof_tex/trd_trd_taki1tif_AUX.png new file mode 100644 index 00000000000..803b0381f2f Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_trd_taki1tif_AUX.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_trd_taki2tif.png b/assets/wua/mapfs/fof_tex/trd_trd_taki2tif.png new file mode 100644 index 00000000000..91f1c2d24e9 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_trd_taki2tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_trd_taki2tif_AUX.png b/assets/wua/mapfs/fof_tex/trd_trd_taki2tif_AUX.png new file mode 100644 index 00000000000..18f9a75315e Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_trd_taki2tif_AUX.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_water3tif.png b/assets/wua/mapfs/fof_tex/trd_water3tif.png new file mode 100644 index 00000000000..1a61c7de2cd Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_water3tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_water3tif_AUX.png b/assets/wua/mapfs/fof_tex/trd_water3tif_AUX.png new file mode 100644 index 00000000000..4c23e57327a Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_water3tif_AUX.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_water_sokotif.png b/assets/wua/mapfs/fof_tex/trd_water_sokotif.png new file mode 100644 index 00000000000..7387f8ed13d Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_water_sokotif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_yuka3tif.png b/assets/wua/mapfs/fof_tex/trd_yuka3tif.png new file mode 100644 index 00000000000..639895fceab Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_yuka3tif.png differ diff --git a/assets/wua/mapfs/fof_tex/trd_yuka4tif.png b/assets/wua/mapfs/fof_tex/trd_yuka4tif.png new file mode 100644 index 00000000000..bbf66fdc029 Binary files /dev/null and b/assets/wua/mapfs/fof_tex/trd_yuka4tif.png differ diff --git a/assets/wua/mapfs/ham_01.xml b/assets/wua/mapfs/ham_01.xml new file mode 100644 index 00000000000..2718285d586 --- /dev/null +++ b/assets/wua/mapfs/ham_01.xml @@ -0,0 +1,6741 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_02.xml b/assets/wua/mapfs/ham_02.xml new file mode 100644 index 00000000000..df5017a757e --- /dev/null +++ b/assets/wua/mapfs/ham_02.xml @@ -0,0 +1,9498 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_03.xml b/assets/wua/mapfs/ham_03.xml new file mode 100644 index 00000000000..b6eb338255c --- /dev/null +++ b/assets/wua/mapfs/ham_03.xml @@ -0,0 +1,16576 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_04.xml b/assets/wua/mapfs/ham_04.xml new file mode 100644 index 00000000000..a36b91bdbe2 --- /dev/null +++ b/assets/wua/mapfs/ham_04.xml @@ -0,0 +1,22468 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_05.xml b/assets/wua/mapfs/ham_05.xml new file mode 100644 index 00000000000..d670e78d830 --- /dev/null +++ b/assets/wua/mapfs/ham_05.xml @@ -0,0 +1,27538 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_06.xml b/assets/wua/mapfs/ham_06.xml new file mode 100644 index 00000000000..3647d8b5235 --- /dev/null +++ b/assets/wua/mapfs/ham_06.xml @@ -0,0 +1,11010 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_07.xml b/assets/wua/mapfs/ham_07.xml new file mode 100644 index 00000000000..6b73140b472 --- /dev/null +++ b/assets/wua/mapfs/ham_07.xml @@ -0,0 +1,16116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_08.xml b/assets/wua/mapfs/ham_08.xml new file mode 100644 index 00000000000..f70bf5d6f04 --- /dev/null +++ b/assets/wua/mapfs/ham_08.xml @@ -0,0 +1,3712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_09.xml b/assets/wua/mapfs/ham_09.xml new file mode 100644 index 00000000000..26d8c5703e8 --- /dev/null +++ b/assets/wua/mapfs/ham_09.xml @@ -0,0 +1,11224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_10.xml b/assets/wua/mapfs/ham_10.xml new file mode 100644 index 00000000000..b65d6610e8b --- /dev/null +++ b/assets/wua/mapfs/ham_10.xml @@ -0,0 +1,12385 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/mapfs/ham_tex.txa b/assets/wua/mapfs/ham_tex.txa new file mode 100644 index 00000000000..7bd57c807bb --- /dev/null +++ b/assets/wua/mapfs/ham_tex.txa @@ -0,0 +1,966 @@ +tex: nok_amitif +{ + img: nok_ami.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_ana_ctif +{ + img: nok_ana_c.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_back_2tif +{ + img: nok_back_2.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_berosaidetif +{ + img: nok_berosaide.png + { + format: CI-4 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_block_ctif +{ + img: nok_block_c.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_blook2tif +{ + img: nok_blook2.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_blooktif +{ + img: nok_blook.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_dec_planttif +{ + img: nok_dec_plant.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_flower_02tif +{ + img: nok_flower_02.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_frametif +{ + img: nok_frame.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_g_and_btif +{ + img: nok_g_and_b.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_green_etif +{ + img: nok_green_e.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_hana_btif +{ + img: nok_hana_b.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_hana_ftif +{ + img: nok_hana_f.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_hanastif +{ + img: nok_hanas.png + { + format: IA-8 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_hapa34tif +{ + img: nok_hapa34.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_hapatif +{ + img: nok_hapa.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_hashi33tif +{ + img: nok_hashi33.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_hon2tif +{ + img: nok_hon2.png + { + format: I-8 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_hontif +{ + img: nok_hon.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_huton_02tif +{ + img: nok_huton_02.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_itatif +{ + img: nok_ita.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_iwa_atif +{ + img: nok_iwa_a.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_jimentif +{ + img: nok_jimen.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kabe10tif +{ + img: nok_kabe10.png + { + format: CI-4 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_kabe12_btif +{ + img: nok_kabe12_b.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_kabe12_wtif +{ + img: nok_kabe12_w.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_kabe12tif +{ + img: nok_kabe12.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_kabe6tif +{ + img: nok_kabe6.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kabe8tif +{ + img: nok_kabe8.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kabegami_3tif +{ + img: nok_kabegami_3.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kabegami_ftif +{ + img: nok_kabegami_f.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_kabekusatif +{ + img: nok_kabekusa.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kabetif +{ + img: nok_kabe.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kanban4tif +{ + img: nok_kanban4.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_kanban6tif +{ + img: nok_kanban6.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_kinopiotif +{ + img: nok_kinopio.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + mipmaps: yes + filter: yes + combine: 8 +} + +tex: nok_kirakiratif +{ + img: nok_kirakira.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kishikakutif +{ + img: nok_kishikaku.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_kusakusa1tif +{ + img: nok_kusakusa1.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_kusatif +{ + img: nok_kusa.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_log_sidetif +{ + img: nok_log_side.png + { + format: CI-4 + hwrap: clamp + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_mac_fieldtif +{ + img: nok_mac_field.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_mac_house7tif +{ + img: nok_mac_house7.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_mac_house8tif +{ + img: nok_mac_house8.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_mac_sakutif +{ + img: nok_mac_saku.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_mado_9tif +{ + img: nok_mado_9.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_midori03tif +{ + img: nok_midori03.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_miki4tif +{ + img: nok_miki4.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_n_yasihatif +{ + img: nok_n_yasiha.png + { + format: CI-8 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_n_yasikitif +{ + img: nok_n_yasiki.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_nagaretif +{ + img: nok_nagare.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_nok_suimentif +{ + img: nok_nok_suimen.png + { + format: IA-16 + hwrap: repeat + vwrap: repeat + } + aux: nok_nok_suimen_AUX.png + { + format: shared + hwrap: repeat + vwrap: repeat + } + filter: no + combine: 8 +} + +tex: nok_radio2tif +{ + img: nok_radio2.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_reef_htif +{ + img: nok_reef_h.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_reef_i_kukitif +{ + img: nok_reef_i_kuki.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_ren_atif +{ + img: nok_ren_a.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_renga_edgetif +{ + img: nok_renga_edge.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_renga10tif +{ + img: nok_renga10.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_renga12tif +{ + img: nok_renga12.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_sabaku_btif +{ + img: nok_sabaku_b.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_sakusakutif +{ + img: nok_sakusaku.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_sakusatif +{ + img: nok_sakusa.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_sakutif +{ + img: nok_saku.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_simatif +{ + img: nok_sima.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_t_dokankun3tif +{ + img: nok_t_dokankun3.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_tana_1tif +{ + img: nok_tana_1.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_tana_3tif +{ + img: nok_tana_3.png + { + format: CI-4 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_tana_ctif +{ + img: nok_tana_c.png + { + format: RGBA-32 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_temae1tif +{ + img: nok_temae1.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_tesuritif +{ + img: nok_tesuri.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_tizutif +{ + img: nok_tizu.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: nok_turu_1tif +{ + img: nok_turu_1.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_wall_mtif +{ + img: nok_wall_m.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_water_sokotif +{ + img: nok_water_soko.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: nok_wood_floor_ctif +{ + img: nok_wood_floor_c.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_yuka3tif +{ + img: nok_yuka3.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_yuka6tif +{ + img: nok_yuka6.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_yuka7tif +{ + img: nok_yuka7.png + { + format: CI-8 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: nok_yukatif +{ + img: nok_yuka.png + { + format: I-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} diff --git a/assets/wua/mapfs/ham_tex/nok_ami.png b/assets/wua/mapfs/ham_tex/nok_ami.png new file mode 100644 index 00000000000..9ce316c7ea8 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_ami.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_ana_c.png b/assets/wua/mapfs/ham_tex/nok_ana_c.png new file mode 100644 index 00000000000..49fb0d2252e Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_ana_c.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_back_2.png b/assets/wua/mapfs/ham_tex/nok_back_2.png new file mode 100644 index 00000000000..4452dba564a Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_back_2.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_berosaide.png b/assets/wua/mapfs/ham_tex/nok_berosaide.png new file mode 100644 index 00000000000..95e49a68d8d Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_berosaide.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_block_c.png b/assets/wua/mapfs/ham_tex/nok_block_c.png new file mode 100644 index 00000000000..e77843e9a6a Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_block_c.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_blook.png b/assets/wua/mapfs/ham_tex/nok_blook.png new file mode 100644 index 00000000000..c69a2f6e0a5 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_blook.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_blook2.png b/assets/wua/mapfs/ham_tex/nok_blook2.png new file mode 100644 index 00000000000..d3b90c09eff Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_blook2.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_dec_plant.png b/assets/wua/mapfs/ham_tex/nok_dec_plant.png new file mode 100644 index 00000000000..e55d1d57082 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_dec_plant.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_flower_02.png b/assets/wua/mapfs/ham_tex/nok_flower_02.png new file mode 100644 index 00000000000..e4a6e2a12c4 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_flower_02.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_frame.png b/assets/wua/mapfs/ham_tex/nok_frame.png new file mode 100644 index 00000000000..5735a84df46 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_frame.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_g_and_b.png b/assets/wua/mapfs/ham_tex/nok_g_and_b.png new file mode 100644 index 00000000000..7e0d2b88ff3 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_g_and_b.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_green_e.png b/assets/wua/mapfs/ham_tex/nok_green_e.png new file mode 100644 index 00000000000..160d0f1ca76 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_green_e.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_green_e_MM1.png b/assets/wua/mapfs/ham_tex/nok_green_e_MM1.png new file mode 100644 index 00000000000..df6aa5677d3 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_green_e_MM1.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hana_b.png b/assets/wua/mapfs/ham_tex/nok_hana_b.png new file mode 100644 index 00000000000..af4b4409b85 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hana_b.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hana_f.png b/assets/wua/mapfs/ham_tex/nok_hana_f.png new file mode 100644 index 00000000000..520ba36721f Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hana_f.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hanas.png b/assets/wua/mapfs/ham_tex/nok_hanas.png new file mode 100644 index 00000000000..a25dd0cb5d4 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hanas.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hapa.png b/assets/wua/mapfs/ham_tex/nok_hapa.png new file mode 100644 index 00000000000..17623aff515 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hapa.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hapa34.png b/assets/wua/mapfs/ham_tex/nok_hapa34.png new file mode 100644 index 00000000000..6ef52a5c6c1 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hapa34.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hashi33.png b/assets/wua/mapfs/ham_tex/nok_hashi33.png new file mode 100644 index 00000000000..98e6d64ecb0 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hashi33.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hon.png b/assets/wua/mapfs/ham_tex/nok_hon.png new file mode 100644 index 00000000000..55eba68fd69 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hon.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_hon2.png b/assets/wua/mapfs/ham_tex/nok_hon2.png new file mode 100644 index 00000000000..993fc5c659b Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_hon2.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_huton_02.png b/assets/wua/mapfs/ham_tex/nok_huton_02.png new file mode 100644 index 00000000000..2eeb8a1424f Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_huton_02.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_ita.png b/assets/wua/mapfs/ham_tex/nok_ita.png new file mode 100644 index 00000000000..703ee8f7726 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_ita.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_iwa_a.png b/assets/wua/mapfs/ham_tex/nok_iwa_a.png new file mode 100644 index 00000000000..ca879781e0b Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_iwa_a.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_jimen.png b/assets/wua/mapfs/ham_tex/nok_jimen.png new file mode 100644 index 00000000000..a86b5ad0f83 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_jimen.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe.png b/assets/wua/mapfs/ham_tex/nok_kabe.png new file mode 100644 index 00000000000..e29be3d92e3 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe10.png b/assets/wua/mapfs/ham_tex/nok_kabe10.png new file mode 100644 index 00000000000..d4a36e3f566 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe10.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe10_AUX.png b/assets/wua/mapfs/ham_tex/nok_kabe10_AUX.png new file mode 100644 index 00000000000..3324f133bcf Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe10_AUX.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe12.png b/assets/wua/mapfs/ham_tex/nok_kabe12.png new file mode 100644 index 00000000000..5eaf7551ff0 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe12.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe12_b.png b/assets/wua/mapfs/ham_tex/nok_kabe12_b.png new file mode 100644 index 00000000000..b37bd5a9ce3 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe12_b.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe12_w.png b/assets/wua/mapfs/ham_tex/nok_kabe12_w.png new file mode 100644 index 00000000000..f194c6cc94c Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe12_w.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe12_w_AUX.png b/assets/wua/mapfs/ham_tex/nok_kabe12_w_AUX.png new file mode 100644 index 00000000000..926f6c1391e Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe12_w_AUX.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe6.png b/assets/wua/mapfs/ham_tex/nok_kabe6.png new file mode 100644 index 00000000000..3d5f98cdc74 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe6.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabe8.png b/assets/wua/mapfs/ham_tex/nok_kabe8.png new file mode 100644 index 00000000000..5ab5b95950f Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabe8.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabegami_3.png b/assets/wua/mapfs/ham_tex/nok_kabegami_3.png new file mode 100644 index 00000000000..63a1105577e Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabegami_3.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabegami_f.png b/assets/wua/mapfs/ham_tex/nok_kabegami_f.png new file mode 100644 index 00000000000..a219a2a17e2 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabegami_f.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kabekusa.png b/assets/wua/mapfs/ham_tex/nok_kabekusa.png new file mode 100644 index 00000000000..85caa99bb2e Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kabekusa.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kanban4.png b/assets/wua/mapfs/ham_tex/nok_kanban4.png new file mode 100644 index 00000000000..91710083561 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kanban4.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kanban6.png b/assets/wua/mapfs/ham_tex/nok_kanban6.png new file mode 100644 index 00000000000..94fb049d0a1 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kanban6.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kinopio.png b/assets/wua/mapfs/ham_tex/nok_kinopio.png new file mode 100644 index 00000000000..521d08933d7 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kinopio.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kirakira.png b/assets/wua/mapfs/ham_tex/nok_kirakira.png new file mode 100644 index 00000000000..5d34f75e838 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kirakira.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kirakira_AUX.png b/assets/wua/mapfs/ham_tex/nok_kirakira_AUX.png new file mode 100644 index 00000000000..1284a2d5682 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kirakira_AUX.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kishikaku.png b/assets/wua/mapfs/ham_tex/nok_kishikaku.png new file mode 100644 index 00000000000..9baf36d45a2 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kishikaku.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kusa.png b/assets/wua/mapfs/ham_tex/nok_kusa.png new file mode 100644 index 00000000000..4561af7ff30 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kusa.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_kusakusa1.png b/assets/wua/mapfs/ham_tex/nok_kusakusa1.png new file mode 100644 index 00000000000..4ad06ed07d2 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_kusakusa1.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_log_side.png b/assets/wua/mapfs/ham_tex/nok_log_side.png new file mode 100644 index 00000000000..72442cf1be8 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_log_side.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_mac_field.png b/assets/wua/mapfs/ham_tex/nok_mac_field.png new file mode 100644 index 00000000000..38b1505e70b Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_mac_field.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_mac_house7.png b/assets/wua/mapfs/ham_tex/nok_mac_house7.png new file mode 100644 index 00000000000..3a632b752ed Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_mac_house7.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_mac_house8.png b/assets/wua/mapfs/ham_tex/nok_mac_house8.png new file mode 100644 index 00000000000..36c46056ed5 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_mac_house8.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_mac_saku.png b/assets/wua/mapfs/ham_tex/nok_mac_saku.png new file mode 100644 index 00000000000..bc500f74130 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_mac_saku.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_mado_9.png b/assets/wua/mapfs/ham_tex/nok_mado_9.png new file mode 100644 index 00000000000..488a200340a Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_mado_9.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_midori03.png b/assets/wua/mapfs/ham_tex/nok_midori03.png new file mode 100644 index 00000000000..cf8ed040764 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_midori03.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_miki4.png b/assets/wua/mapfs/ham_tex/nok_miki4.png new file mode 100644 index 00000000000..7d2ecbefbe8 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_miki4.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_n_yasiha.png b/assets/wua/mapfs/ham_tex/nok_n_yasiha.png new file mode 100644 index 00000000000..b92a6b965ff Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_n_yasiha.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_n_yasiki.png b/assets/wua/mapfs/ham_tex/nok_n_yasiki.png new file mode 100644 index 00000000000..2feff637bce Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_n_yasiki.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_nagare.png b/assets/wua/mapfs/ham_tex/nok_nagare.png new file mode 100644 index 00000000000..7fd1139bde1 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_nagare.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_nok_suimen.png b/assets/wua/mapfs/ham_tex/nok_nok_suimen.png new file mode 100644 index 00000000000..5ce1a804077 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_nok_suimen.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_nok_suimen_AUX.png b/assets/wua/mapfs/ham_tex/nok_nok_suimen_AUX.png new file mode 100644 index 00000000000..2ab5e2e14c0 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_nok_suimen_AUX.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_radio2.png b/assets/wua/mapfs/ham_tex/nok_radio2.png new file mode 100644 index 00000000000..b060fcf4c59 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_radio2.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_reef_h.png b/assets/wua/mapfs/ham_tex/nok_reef_h.png new file mode 100644 index 00000000000..0a993b27fb1 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_reef_h.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_reef_i_kuki.png b/assets/wua/mapfs/ham_tex/nok_reef_i_kuki.png new file mode 100644 index 00000000000..9f3663f483f Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_reef_i_kuki.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_ren_a.png b/assets/wua/mapfs/ham_tex/nok_ren_a.png new file mode 100644 index 00000000000..3b077e9741f Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_ren_a.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_renga10.png b/assets/wua/mapfs/ham_tex/nok_renga10.png new file mode 100644 index 00000000000..7cca8ff430a Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_renga10.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_renga12.png b/assets/wua/mapfs/ham_tex/nok_renga12.png new file mode 100644 index 00000000000..d9315f64ddb Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_renga12.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_renga_edge.png b/assets/wua/mapfs/ham_tex/nok_renga_edge.png new file mode 100644 index 00000000000..fa730f05a55 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_renga_edge.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_sabaku_b.png b/assets/wua/mapfs/ham_tex/nok_sabaku_b.png new file mode 100644 index 00000000000..b80e2f8e817 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_sabaku_b.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_saku.png b/assets/wua/mapfs/ham_tex/nok_saku.png new file mode 100644 index 00000000000..491a551f302 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_saku.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_sakusa.png b/assets/wua/mapfs/ham_tex/nok_sakusa.png new file mode 100644 index 00000000000..6dedf252da5 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_sakusa.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_sakusaku.png b/assets/wua/mapfs/ham_tex/nok_sakusaku.png new file mode 100644 index 00000000000..a387d1013bd Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_sakusaku.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_sima.png b/assets/wua/mapfs/ham_tex/nok_sima.png new file mode 100644 index 00000000000..ab2de7a910a Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_sima.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_t_dokankun3.png b/assets/wua/mapfs/ham_tex/nok_t_dokankun3.png new file mode 100644 index 00000000000..d5c11252dd5 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_t_dokankun3.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_tana_1.png b/assets/wua/mapfs/ham_tex/nok_tana_1.png new file mode 100644 index 00000000000..d8bce39b3de Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_tana_1.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_tana_3.png b/assets/wua/mapfs/ham_tex/nok_tana_3.png new file mode 100644 index 00000000000..05ff75e272e Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_tana_3.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_tana_c.png b/assets/wua/mapfs/ham_tex/nok_tana_c.png new file mode 100644 index 00000000000..35eb789a804 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_tana_c.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_temae1.png b/assets/wua/mapfs/ham_tex/nok_temae1.png new file mode 100644 index 00000000000..e28d11baad0 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_temae1.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_tesuri.png b/assets/wua/mapfs/ham_tex/nok_tesuri.png new file mode 100644 index 00000000000..2f389401a5a Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_tesuri.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_tex.mtl b/assets/wua/mapfs/ham_tex/nok_tex.mtl new file mode 100644 index 00000000000..92f9b851079 --- /dev/null +++ b/assets/wua/mapfs/ham_tex/nok_tex.mtl @@ -0,0 +1,640 @@ +newmtl m_nok_amitif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_amitif.png +map_Kd nok_amitif.png + +newmtl m_nok_ana_ctif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_ana_ctif.png +map_Kd nok_ana_ctif.png + +newmtl m_nok_back_2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_back_2tif.png +map_Kd nok_back_2tif.png + +newmtl m_nok_berosaidetif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_berosaidetif.png +map_Kd nok_berosaidetif.png + +newmtl m_nok_block_ctif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_block_ctif.png +map_Kd nok_block_ctif.png + +newmtl m_nok_blook2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_blook2tif.png +map_Kd nok_blook2tif.png + +newmtl m_nok_blooktif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_blooktif.png +map_Kd nok_blooktif.png + +newmtl m_nok_dec_planttif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_dec_planttif.png +map_Kd nok_dec_planttif.png + +newmtl m_nok_flower_02tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_flower_02tif.png +map_Kd nok_flower_02tif.png + +newmtl m_nok_frametif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_frametif.png +map_Kd nok_frametif.png + +newmtl m_nok_g_and_btif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_g_and_btif.png +map_Kd nok_g_and_btif.png + +newmtl m_nok_green_etif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_green_etif.png +map_Kd nok_green_etif.png + +newmtl m_nok_hana_btif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hana_btif.png +map_Kd nok_hana_btif.png + +newmtl m_nok_hana_ftif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hana_ftif.png +map_Kd nok_hana_ftif.png + +newmtl m_nok_hanastif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hanastif.png +map_Kd nok_hanastif.png + +newmtl m_nok_hapa34tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hapa34tif.png +map_Kd nok_hapa34tif.png + +newmtl m_nok_hapatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hapatif.png +map_Kd nok_hapatif.png + +newmtl m_nok_hashi33tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hashi33tif.png +map_Kd nok_hashi33tif.png + +newmtl m_nok_hon2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hon2tif.png +map_Kd nok_hon2tif.png + +newmtl m_nok_hontif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_hontif.png +map_Kd nok_hontif.png + +newmtl m_nok_huton_02tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_huton_02tif.png +map_Kd nok_huton_02tif.png + +newmtl m_nok_itatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_itatif.png +map_Kd nok_itatif.png + +newmtl m_nok_iwa_atif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_iwa_atif.png +map_Kd nok_iwa_atif.png + +newmtl m_nok_jimentif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_jimentif.png +map_Kd nok_jimentif.png + +newmtl m_nok_kabe10tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabe10tif.png +map_Kd nok_kabe10tif.png + +newmtl m_nok_kabe12_btif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabe12_btif.png +map_Kd nok_kabe12_btif.png + +newmtl m_nok_kabe12_wtif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabe12_wtif.png +map_Kd nok_kabe12_wtif.png + +newmtl m_nok_kabe12tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabe12tif.png +map_Kd nok_kabe12tif.png + +newmtl m_nok_kabe6tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabe6tif.png +map_Kd nok_kabe6tif.png + +newmtl m_nok_kabe8tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabe8tif.png +map_Kd nok_kabe8tif.png + +newmtl m_nok_kabegami_3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabegami_3tif.png +map_Kd nok_kabegami_3tif.png + +newmtl m_nok_kabegami_ftif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabegami_ftif.png +map_Kd nok_kabegami_ftif.png + +newmtl m_nok_kabekusatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabekusatif.png +map_Kd nok_kabekusatif.png + +newmtl m_nok_kabetif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kabetif.png +map_Kd nok_kabetif.png + +newmtl m_nok_kanban4tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kanban4tif.png +map_Kd nok_kanban4tif.png + +newmtl m_nok_kanban6tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kanban6tif.png +map_Kd nok_kanban6tif.png + +newmtl m_nok_kinopiotif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kinopiotif.png +map_Kd nok_kinopiotif.png + +newmtl m_nok_kirakiratif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kirakiratif.png +map_Kd nok_kirakiratif.png + +newmtl m_nok_kishikakutif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kishikakutif.png +map_Kd nok_kishikakutif.png + +newmtl m_nok_kusakusa1tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kusakusa1tif.png +map_Kd nok_kusakusa1tif.png + +newmtl m_nok_kusatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_kusatif.png +map_Kd nok_kusatif.png + +newmtl m_nok_log_sidetif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_log_sidetif.png +map_Kd nok_log_sidetif.png + +newmtl m_nok_mac_fieldtif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_mac_fieldtif.png +map_Kd nok_mac_fieldtif.png + +newmtl m_nok_mac_house7tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_mac_house7tif.png +map_Kd nok_mac_house7tif.png + +newmtl m_nok_mac_house8tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_mac_house8tif.png +map_Kd nok_mac_house8tif.png + +newmtl m_nok_mac_sakutif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_mac_sakutif.png +map_Kd nok_mac_sakutif.png + +newmtl m_nok_mado_9tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_mado_9tif.png +map_Kd nok_mado_9tif.png + +newmtl m_nok_midori03tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_midori03tif.png +map_Kd nok_midori03tif.png + +newmtl m_nok_miki4tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_miki4tif.png +map_Kd nok_miki4tif.png + +newmtl m_nok_n_yasihatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_n_yasihatif.png +map_Kd nok_n_yasihatif.png + +newmtl m_nok_n_yasikitif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_n_yasikitif.png +map_Kd nok_n_yasikitif.png + +newmtl m_nok_nagaretif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_nagaretif.png +map_Kd nok_nagaretif.png + +newmtl m_nok_nok_suimentif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_nok_suimentif.png +map_Kd nok_nok_suimentif.png + +newmtl m_nok_radio2tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_radio2tif.png +map_Kd nok_radio2tif.png + +newmtl m_nok_reef_htif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_reef_htif.png +map_Kd nok_reef_htif.png + +newmtl m_nok_reef_i_kukitif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_reef_i_kukitif.png +map_Kd nok_reef_i_kukitif.png + +newmtl m_nok_ren_atif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_ren_atif.png +map_Kd nok_ren_atif.png + +newmtl m_nok_renga_edgetif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_renga_edgetif.png +map_Kd nok_renga_edgetif.png + +newmtl m_nok_renga10tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_renga10tif.png +map_Kd nok_renga10tif.png + +newmtl m_nok_renga12tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_renga12tif.png +map_Kd nok_renga12tif.png + +newmtl m_nok_sabaku_btif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_sabaku_btif.png +map_Kd nok_sabaku_btif.png + +newmtl m_nok_sakusakutif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_sakusakutif.png +map_Kd nok_sakusakutif.png + +newmtl m_nok_sakusatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_sakusatif.png +map_Kd nok_sakusatif.png + +newmtl m_nok_sakutif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_sakutif.png +map_Kd nok_sakutif.png + +newmtl m_nok_simatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_simatif.png +map_Kd nok_simatif.png + +newmtl m_nok_t_dokankun3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_t_dokankun3tif.png +map_Kd nok_t_dokankun3tif.png + +newmtl m_nok_tana_1tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_tana_1tif.png +map_Kd nok_tana_1tif.png + +newmtl m_nok_tana_3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_tana_3tif.png +map_Kd nok_tana_3tif.png + +newmtl m_nok_tana_ctif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_tana_ctif.png +map_Kd nok_tana_ctif.png + +newmtl m_nok_temae1tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_temae1tif.png +map_Kd nok_temae1tif.png + +newmtl m_nok_tesuritif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_tesuritif.png +map_Kd nok_tesuritif.png + +newmtl m_nok_tizutif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_tizutif.png +map_Kd nok_tizutif.png + +newmtl m_nok_turu_1tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_turu_1tif.png +map_Kd nok_turu_1tif.png + +newmtl m_nok_wall_mtif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_wall_mtif.png +map_Kd nok_wall_mtif.png + +newmtl m_nok_water_sokotif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_water_sokotif.png +map_Kd nok_water_sokotif.png + +newmtl m_nok_wood_floor_ctif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_wood_floor_ctif.png +map_Kd nok_wood_floor_ctif.png + +newmtl m_nok_yuka3tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_yuka3tif.png +map_Kd nok_yuka3tif.png + +newmtl m_nok_yuka6tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_yuka6tif.png +map_Kd nok_yuka6tif.png + +newmtl m_nok_yuka7tif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_yuka7tif.png +map_Kd nok_yuka7tif.png + +newmtl m_nok_yukatif +Ka 1 1 1 +Kd 1 1 1 +Ks 1 1 1 +Ns 0 +map_Ka nok_yukatif.png +map_Kd nok_yukatif.png + diff --git a/assets/wua/mapfs/ham_tex/nok_tizu.png b/assets/wua/mapfs/ham_tex/nok_tizu.png new file mode 100644 index 00000000000..4c69e00fd23 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_tizu.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_turu_1.png b/assets/wua/mapfs/ham_tex/nok_turu_1.png new file mode 100644 index 00000000000..d5acd85cb41 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_turu_1.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_wall_m.png b/assets/wua/mapfs/ham_tex/nok_wall_m.png new file mode 100644 index 00000000000..fbab9ef50fd Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_wall_m.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_water_soko.png b/assets/wua/mapfs/ham_tex/nok_water_soko.png new file mode 100644 index 00000000000..32e0b291648 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_water_soko.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_wood_floor_c.png b/assets/wua/mapfs/ham_tex/nok_wood_floor_c.png new file mode 100644 index 00000000000..dcd44f06908 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_wood_floor_c.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_yuka.png b/assets/wua/mapfs/ham_tex/nok_yuka.png new file mode 100644 index 00000000000..5d267e04ed4 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_yuka.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_yuka3.png b/assets/wua/mapfs/ham_tex/nok_yuka3.png new file mode 100644 index 00000000000..0fb89a08484 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_yuka3.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_yuka6.png b/assets/wua/mapfs/ham_tex/nok_yuka6.png new file mode 100644 index 00000000000..00bc40f3cbc Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_yuka6.png differ diff --git a/assets/wua/mapfs/ham_tex/nok_yuka7.png b/assets/wua/mapfs/ham_tex/nok_yuka7.png new file mode 100644 index 00000000000..3fe14944358 Binary files /dev/null and b/assets/wua/mapfs/ham_tex/nok_yuka7.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex.json b/assets/wua/mapfs/tex/aaa_tex.json new file mode 100644 index 00000000000..3dd9b388db1 --- /dev/null +++ b/assets/wua/mapfs/tex/aaa_tex.json @@ -0,0 +1,172 @@ +[ + { + "name": "curtain", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "floor", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "wallback", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "frame", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "topcurtain", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "wall", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "audiencea", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "audienceb", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "audiencec", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "audienced", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "papers", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "miki4", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "miki", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "bowsersign", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "yoshisign", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "jar", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "flag", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + } +] diff --git a/assets/wua/mapfs/tex/aaa_tex/audiencea.png b/assets/wua/mapfs/tex/aaa_tex/audiencea.png new file mode 100644 index 00000000000..f4224d4a8e2 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/audiencea.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/audienceb.png b/assets/wua/mapfs/tex/aaa_tex/audienceb.png new file mode 100644 index 00000000000..014d371a1bf Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/audienceb.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/audiencec.png b/assets/wua/mapfs/tex/aaa_tex/audiencec.png new file mode 100644 index 00000000000..1e9a0cbc5b5 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/audiencec.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/audienced.png b/assets/wua/mapfs/tex/aaa_tex/audienced.png new file mode 100644 index 00000000000..88e258661cd Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/audienced.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/bowsersign.png b/assets/wua/mapfs/tex/aaa_tex/bowsersign.png new file mode 100644 index 00000000000..e9fd6f8d40f Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/bowsersign.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/curtain.png b/assets/wua/mapfs/tex/aaa_tex/curtain.png new file mode 100644 index 00000000000..d033a77cb21 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/curtain.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/flag.png b/assets/wua/mapfs/tex/aaa_tex/flag.png new file mode 100644 index 00000000000..1352a903dc6 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/flag.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/floor.png b/assets/wua/mapfs/tex/aaa_tex/floor.png new file mode 100644 index 00000000000..154b3dfce9c Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/floor.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/frame.png b/assets/wua/mapfs/tex/aaa_tex/frame.png new file mode 100644 index 00000000000..ff7b9b8d9f9 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/frame.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/jar.png b/assets/wua/mapfs/tex/aaa_tex/jar.png new file mode 100644 index 00000000000..5e2e4dc6450 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/jar.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/miki.png b/assets/wua/mapfs/tex/aaa_tex/miki.png new file mode 100644 index 00000000000..06335ffb3a6 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/miki.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/miki4.png b/assets/wua/mapfs/tex/aaa_tex/miki4.png new file mode 100644 index 00000000000..c3f48a7d49f Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/miki4.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/papers.png b/assets/wua/mapfs/tex/aaa_tex/papers.png new file mode 100644 index 00000000000..07620ca11d3 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/papers.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/topcurtain.png b/assets/wua/mapfs/tex/aaa_tex/topcurtain.png new file mode 100644 index 00000000000..45f379a52e7 Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/topcurtain.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/wall.png b/assets/wua/mapfs/tex/aaa_tex/wall.png new file mode 100644 index 00000000000..cfa4edfa32b Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/wall.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/wallback.png b/assets/wua/mapfs/tex/aaa_tex/wallback.png new file mode 100644 index 00000000000..3bfc3fc892d Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/wallback.png differ diff --git a/assets/wua/mapfs/tex/aaa_tex/yoshisign.png b/assets/wua/mapfs/tex/aaa_tex/yoshisign.png new file mode 100644 index 00000000000..9288693150b Binary files /dev/null and b/assets/wua/mapfs/tex/aaa_tex/yoshisign.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex.json b/assets/wua/mapfs/tex/dgb_tex.json new file mode 100644 index 00000000000..6b2866453f7 --- /dev/null +++ b/assets/wua/mapfs/tex/dgb_tex.json @@ -0,0 +1,412 @@ +[ + { + "name": "berosaide", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "ciock3", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "d_ana04", + "main": { + "format": "IA8", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "d_ana", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "d_chear2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "doa", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "frame", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hasira1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hibi1", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hibi3", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hikari", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hokori1", + "main": { + "format": "IA8", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "isuasi1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "iwa_4", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "jimen_edge", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "jimenb", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "jimenc", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe10", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe2", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe6", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "katen1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "katen3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kazari3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "ki5", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "mado1", + "main": { + "format": "IA8", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "mado2", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "moyou1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "moyou2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "moyou3", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "syokudai", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tenjo2", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tesuri1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tesuri2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tesuri3", + "main": { + "format": "IA8", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "toge", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "yuka1", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "zassou", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "zyu1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "zyu2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + } +] diff --git a/assets/wua/mapfs/tex/dgb_tex/berosaide.png b/assets/wua/mapfs/tex/dgb_tex/berosaide.png new file mode 100644 index 00000000000..eedd70bb34d Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/berosaide.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/ciock3.png b/assets/wua/mapfs/tex/dgb_tex/ciock3.png new file mode 100644 index 00000000000..422334f6efd Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/ciock3.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/d_ana.png b/assets/wua/mapfs/tex/dgb_tex/d_ana.png new file mode 100644 index 00000000000..f2c9ce66ce9 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/d_ana.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/d_ana04.png b/assets/wua/mapfs/tex/dgb_tex/d_ana04.png new file mode 100644 index 00000000000..f73587b74fd Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/d_ana04.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/d_chear2.png b/assets/wua/mapfs/tex/dgb_tex/d_chear2.png new file mode 100644 index 00000000000..23d39f9598c Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/d_chear2.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/doa.png b/assets/wua/mapfs/tex/dgb_tex/doa.png new file mode 100644 index 00000000000..35079cc1006 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/doa.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/frame.png b/assets/wua/mapfs/tex/dgb_tex/frame.png new file mode 100644 index 00000000000..bd7df1508d8 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/frame.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/hasira1.png b/assets/wua/mapfs/tex/dgb_tex/hasira1.png new file mode 100644 index 00000000000..c65feacdb3f Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/hasira1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/hibi1.png b/assets/wua/mapfs/tex/dgb_tex/hibi1.png new file mode 100644 index 00000000000..8c16ee04f2c Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/hibi1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/hibi3.png b/assets/wua/mapfs/tex/dgb_tex/hibi3.png new file mode 100644 index 00000000000..b0951ec2378 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/hibi3.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/hikari.png b/assets/wua/mapfs/tex/dgb_tex/hikari.png new file mode 100644 index 00000000000..179b8fef573 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/hikari.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/hokori1.png b/assets/wua/mapfs/tex/dgb_tex/hokori1.png new file mode 100644 index 00000000000..a881b53f1c2 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/hokori1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/isuasi1.png b/assets/wua/mapfs/tex/dgb_tex/isuasi1.png new file mode 100644 index 00000000000..730355bc505 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/isuasi1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/iwa_4.png b/assets/wua/mapfs/tex/dgb_tex/iwa_4.png new file mode 100644 index 00000000000..cadb67a9fb4 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/iwa_4.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/jimen_edge.png b/assets/wua/mapfs/tex/dgb_tex/jimen_edge.png new file mode 100644 index 00000000000..3141130e19e Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/jimen_edge.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/jimenb.png b/assets/wua/mapfs/tex/dgb_tex/jimenb.png new file mode 100644 index 00000000000..fff80ed730a Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/jimenb.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/jimenb_AUX.png b/assets/wua/mapfs/tex/dgb_tex/jimenb_AUX.png new file mode 100644 index 00000000000..624500179c6 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/jimenb_AUX.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/jimenc.png b/assets/wua/mapfs/tex/dgb_tex/jimenc.png new file mode 100644 index 00000000000..7da8dda9423 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/jimenc.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/jimenc_AUX.png b/assets/wua/mapfs/tex/dgb_tex/jimenc_AUX.png new file mode 100644 index 00000000000..94fbb73a183 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/jimenc_AUX.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/kabe1.png b/assets/wua/mapfs/tex/dgb_tex/kabe1.png new file mode 100644 index 00000000000..23f5e59d2fc Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/kabe1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/kabe10.png b/assets/wua/mapfs/tex/dgb_tex/kabe10.png new file mode 100644 index 00000000000..d957c99ef8d Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/kabe10.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/kabe2.png b/assets/wua/mapfs/tex/dgb_tex/kabe2.png new file mode 100644 index 00000000000..58000582028 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/kabe2.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/kabe3.png b/assets/wua/mapfs/tex/dgb_tex/kabe3.png new file mode 100644 index 00000000000..2edfd5d7f92 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/kabe3.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/kabe6.png b/assets/wua/mapfs/tex/dgb_tex/kabe6.png new file mode 100644 index 00000000000..327d1833ba0 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/kabe6.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/katen1.png b/assets/wua/mapfs/tex/dgb_tex/katen1.png new file mode 100644 index 00000000000..75e2ff46b85 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/katen1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/katen3.png b/assets/wua/mapfs/tex/dgb_tex/katen3.png new file mode 100644 index 00000000000..3e0b27aed44 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/katen3.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/kazari3.png b/assets/wua/mapfs/tex/dgb_tex/kazari3.png new file mode 100644 index 00000000000..a673b5365a8 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/kazari3.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/ki5.png b/assets/wua/mapfs/tex/dgb_tex/ki5.png new file mode 100644 index 00000000000..23a5e223a81 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/ki5.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/mado1.png b/assets/wua/mapfs/tex/dgb_tex/mado1.png new file mode 100644 index 00000000000..7e5e5c74bf2 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/mado1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/mado2.png b/assets/wua/mapfs/tex/dgb_tex/mado2.png new file mode 100644 index 00000000000..55b0a5de5ef Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/mado2.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/moyou1.png b/assets/wua/mapfs/tex/dgb_tex/moyou1.png new file mode 100644 index 00000000000..90f3fff4cc5 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/moyou1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/moyou2.png b/assets/wua/mapfs/tex/dgb_tex/moyou2.png new file mode 100644 index 00000000000..9cea7b79293 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/moyou2.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/moyou3.png b/assets/wua/mapfs/tex/dgb_tex/moyou3.png new file mode 100644 index 00000000000..afc3b75bf92 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/moyou3.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/syokudai.png b/assets/wua/mapfs/tex/dgb_tex/syokudai.png new file mode 100644 index 00000000000..bda449fa628 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/syokudai.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/tenjo2.png b/assets/wua/mapfs/tex/dgb_tex/tenjo2.png new file mode 100644 index 00000000000..f9f8c274a74 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/tenjo2.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/tesuri1.png b/assets/wua/mapfs/tex/dgb_tex/tesuri1.png new file mode 100644 index 00000000000..231921e6668 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/tesuri1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/tesuri2.png b/assets/wua/mapfs/tex/dgb_tex/tesuri2.png new file mode 100644 index 00000000000..c1b86cc809a Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/tesuri2.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/tesuri3.png b/assets/wua/mapfs/tex/dgb_tex/tesuri3.png new file mode 100644 index 00000000000..6a6ec3428e9 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/tesuri3.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/toge.png b/assets/wua/mapfs/tex/dgb_tex/toge.png new file mode 100644 index 00000000000..14cbea0e9fd Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/toge.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/yuka1.png b/assets/wua/mapfs/tex/dgb_tex/yuka1.png new file mode 100644 index 00000000000..48a2900648f Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/yuka1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/zassou.png b/assets/wua/mapfs/tex/dgb_tex/zassou.png new file mode 100644 index 00000000000..151964f6c13 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/zassou.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/zyu1.png b/assets/wua/mapfs/tex/dgb_tex/zyu1.png new file mode 100644 index 00000000000..121b52e2186 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/zyu1.png differ diff --git a/assets/wua/mapfs/tex/dgb_tex/zyu2.png b/assets/wua/mapfs/tex/dgb_tex/zyu2.png new file mode 100644 index 00000000000..97fe057ce88 Binary files /dev/null and b/assets/wua/mapfs/tex/dgb_tex/zyu2.png differ diff --git a/assets/wua/mapfs/tex/drd_tex.json b/assets/wua/mapfs/tex/drd_tex.json new file mode 100644 index 00000000000..6b2866453f7 --- /dev/null +++ b/assets/wua/mapfs/tex/drd_tex.json @@ -0,0 +1,412 @@ +[ + { + "name": "berosaide", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "ciock3", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "d_ana04", + "main": { + "format": "IA8", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "d_ana", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "d_chear2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "doa", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "frame", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hasira1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hibi1", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hibi3", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hikari", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "hokori1", + "main": { + "format": "IA8", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "isuasi1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "iwa_4", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "jimen_edge", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "jimenb", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "jimenc", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe10", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe2", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kabe6", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "katen1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "katen3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "kazari3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "ki5", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "mado1", + "main": { + "format": "IA8", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "mado2", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "moyou1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "moyou2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "moyou3", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "syokudai", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tenjo2", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tesuri1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tesuri2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "tesuri3", + "main": { + "format": "IA8", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "toge", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "yuka1", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "zassou", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "zyu1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "zyu2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + } +] diff --git a/assets/wua/mapfs/tex/drd_tex/berosaide.png b/assets/wua/mapfs/tex/drd_tex/berosaide.png new file mode 100644 index 00000000000..eedd70bb34d Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/berosaide.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/ciock3.png b/assets/wua/mapfs/tex/drd_tex/ciock3.png new file mode 100644 index 00000000000..422334f6efd Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/ciock3.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/d_ana.png b/assets/wua/mapfs/tex/drd_tex/d_ana.png new file mode 100644 index 00000000000..f2c9ce66ce9 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/d_ana.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/d_ana04.png b/assets/wua/mapfs/tex/drd_tex/d_ana04.png new file mode 100644 index 00000000000..f73587b74fd Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/d_ana04.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/d_chear2.png b/assets/wua/mapfs/tex/drd_tex/d_chear2.png new file mode 100644 index 00000000000..23d39f9598c Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/d_chear2.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/doa.png b/assets/wua/mapfs/tex/drd_tex/doa.png new file mode 100644 index 00000000000..35079cc1006 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/doa.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/frame.png b/assets/wua/mapfs/tex/drd_tex/frame.png new file mode 100644 index 00000000000..bd7df1508d8 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/frame.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/hasira1.png b/assets/wua/mapfs/tex/drd_tex/hasira1.png new file mode 100644 index 00000000000..c65feacdb3f Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/hasira1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/hibi1.png b/assets/wua/mapfs/tex/drd_tex/hibi1.png new file mode 100644 index 00000000000..8c16ee04f2c Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/hibi1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/hibi3.png b/assets/wua/mapfs/tex/drd_tex/hibi3.png new file mode 100644 index 00000000000..b0951ec2378 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/hibi3.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/hikari.png b/assets/wua/mapfs/tex/drd_tex/hikari.png new file mode 100644 index 00000000000..179b8fef573 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/hikari.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/hokori1.png b/assets/wua/mapfs/tex/drd_tex/hokori1.png new file mode 100644 index 00000000000..a881b53f1c2 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/hokori1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/isuasi1.png b/assets/wua/mapfs/tex/drd_tex/isuasi1.png new file mode 100644 index 00000000000..730355bc505 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/isuasi1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/iwa_4.png b/assets/wua/mapfs/tex/drd_tex/iwa_4.png new file mode 100644 index 00000000000..cadb67a9fb4 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/iwa_4.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/jimen_edge.png b/assets/wua/mapfs/tex/drd_tex/jimen_edge.png new file mode 100644 index 00000000000..3141130e19e Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/jimen_edge.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/jimenb.png b/assets/wua/mapfs/tex/drd_tex/jimenb.png new file mode 100644 index 00000000000..fff80ed730a Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/jimenb.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/jimenb_AUX.png b/assets/wua/mapfs/tex/drd_tex/jimenb_AUX.png new file mode 100644 index 00000000000..624500179c6 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/jimenb_AUX.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/jimenc.png b/assets/wua/mapfs/tex/drd_tex/jimenc.png new file mode 100644 index 00000000000..7da8dda9423 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/jimenc.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/jimenc_AUX.png b/assets/wua/mapfs/tex/drd_tex/jimenc_AUX.png new file mode 100644 index 00000000000..94fbb73a183 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/jimenc_AUX.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/kabe1.png b/assets/wua/mapfs/tex/drd_tex/kabe1.png new file mode 100644 index 00000000000..23f5e59d2fc Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/kabe1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/kabe10.png b/assets/wua/mapfs/tex/drd_tex/kabe10.png new file mode 100644 index 00000000000..d957c99ef8d Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/kabe10.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/kabe2.png b/assets/wua/mapfs/tex/drd_tex/kabe2.png new file mode 100644 index 00000000000..58000582028 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/kabe2.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/kabe3.png b/assets/wua/mapfs/tex/drd_tex/kabe3.png new file mode 100644 index 00000000000..2edfd5d7f92 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/kabe3.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/kabe6.png b/assets/wua/mapfs/tex/drd_tex/kabe6.png new file mode 100644 index 00000000000..327d1833ba0 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/kabe6.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/katen1.png b/assets/wua/mapfs/tex/drd_tex/katen1.png new file mode 100644 index 00000000000..75e2ff46b85 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/katen1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/katen3.png b/assets/wua/mapfs/tex/drd_tex/katen3.png new file mode 100644 index 00000000000..3e0b27aed44 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/katen3.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/kazari3.png b/assets/wua/mapfs/tex/drd_tex/kazari3.png new file mode 100644 index 00000000000..a673b5365a8 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/kazari3.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/ki5.png b/assets/wua/mapfs/tex/drd_tex/ki5.png new file mode 100644 index 00000000000..23a5e223a81 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/ki5.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/mado1.png b/assets/wua/mapfs/tex/drd_tex/mado1.png new file mode 100644 index 00000000000..7e5e5c74bf2 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/mado1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/mado2.png b/assets/wua/mapfs/tex/drd_tex/mado2.png new file mode 100644 index 00000000000..55b0a5de5ef Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/mado2.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/moyou1.png b/assets/wua/mapfs/tex/drd_tex/moyou1.png new file mode 100644 index 00000000000..90f3fff4cc5 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/moyou1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/moyou2.png b/assets/wua/mapfs/tex/drd_tex/moyou2.png new file mode 100644 index 00000000000..9cea7b79293 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/moyou2.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/moyou3.png b/assets/wua/mapfs/tex/drd_tex/moyou3.png new file mode 100644 index 00000000000..afc3b75bf92 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/moyou3.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/syokudai.png b/assets/wua/mapfs/tex/drd_tex/syokudai.png new file mode 100644 index 00000000000..bda449fa628 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/syokudai.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/tenjo2.png b/assets/wua/mapfs/tex/drd_tex/tenjo2.png new file mode 100644 index 00000000000..f9f8c274a74 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/tenjo2.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/tesuri1.png b/assets/wua/mapfs/tex/drd_tex/tesuri1.png new file mode 100644 index 00000000000..231921e6668 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/tesuri1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/tesuri2.png b/assets/wua/mapfs/tex/drd_tex/tesuri2.png new file mode 100644 index 00000000000..c1b86cc809a Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/tesuri2.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/tesuri3.png b/assets/wua/mapfs/tex/drd_tex/tesuri3.png new file mode 100644 index 00000000000..6a6ec3428e9 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/tesuri3.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/toge.png b/assets/wua/mapfs/tex/drd_tex/toge.png new file mode 100644 index 00000000000..14cbea0e9fd Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/toge.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/yuka1.png b/assets/wua/mapfs/tex/drd_tex/yuka1.png new file mode 100644 index 00000000000..48a2900648f Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/yuka1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/zassou.png b/assets/wua/mapfs/tex/drd_tex/zassou.png new file mode 100644 index 00000000000..151964f6c13 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/zassou.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/zyu1.png b/assets/wua/mapfs/tex/drd_tex/zyu1.png new file mode 100644 index 00000000000..121b52e2186 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/zyu1.png differ diff --git a/assets/wua/mapfs/tex/drd_tex/zyu2.png b/assets/wua/mapfs/tex/drd_tex/zyu2.png new file mode 100644 index 00000000000..97fe057ce88 Binary files /dev/null and b/assets/wua/mapfs/tex/drd_tex/zyu2.png differ diff --git a/assets/wua/mapfs/tex/fof_tex.txa b/assets/wua/mapfs/tex/fof_tex.txa new file mode 100644 index 00000000000..96ca6a1204b --- /dev/null +++ b/assets/wua/mapfs/tex/fof_tex.txa @@ -0,0 +1,558 @@ +tex: trd_ana_ctif +{ + img: trd_ana_ctif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_berosaidetif +{ + img: trd_berosaidetif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_block_dtif +{ + img: trd_block_dtif.png + { + format: CI-4 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_block_e2ttif +{ + img: trd_block_e2ttif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_block_etif +{ + img: trd_block_etif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_doatif +{ + img: trd_doatif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_frametif +{ + img: trd_frametif.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_futa1tif +{ + img: trd_futa1tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_grayframetif +{ + img: trd_grayframetif.png + { + format: I-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_green_etif +{ + img: trd_green_etif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_hikaritif +{ + img: trd_hikaritif.png + { + format: IA-8 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_kabe10tif +{ + img: trd_kabe10tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kabe3tif +{ + img: trd_kabe3tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kabe5tif +{ + img: trd_kabe5tif.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_kabe6tif +{ + img: trd_kabe6tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kabe8tif +{ + img: trd_kabe8tif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_kabekusatif +{ + img: trd_kabekusatif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_kabetif +{ + img: trd_kabetif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kamitif +{ + img: trd_kamitif.png + { + format: CI-4 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_kawa_atif +{ + img: trd_kawa_atif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kitif +{ + img: trd_kitif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_komatif +{ + img: trd_komatif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kubiwatif +{ + img: trd_kubiwatif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_kusaritif +{ + img: trd_kusaritif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_mado6tif +{ + img: trd_mado6tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_mado7tif +{ + img: trd_mado7tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_me_btif +{ + img: trd_me_btif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_nuno_ctif +{ + img: trd_nuno_ctif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_nuno_etif +{ + img: trd_nuno_etif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_peachtif +{ + img: trd_peachtif.png + { + format: CI-4 + hwrap: mirror + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_saku2tif +{ + img: trd_saku2tif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_saku3tif +{ + img: trd_saku3tif.png + { + format: CI-4 + hwrap: mirror + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_saku4tif +{ + img: trd_saku4tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_saku5tif +{ + img: trd_saku5tif.png + { + format: CI-4 + hwrap: clamp + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_sakutif +{ + img: trd_sakutif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_sui1tif +{ + img: trd_sui1tif.png + { + format: IA-8 + hwrap: repeat + vwrap: clamp + } + filter: yes + combine: 8 +} + +tex: trd_t_sui2tif +{ + img: trd_t_sui2tif.png + { + format: IA-16 + hwrap: repeat + vwrap: repeat + } + aux: trd_t_sui2tif_AUX.png + { + format: shared + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_block2tif +{ + img: trd_trd_block2tif.png + { + format: CI-8 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_kusaritif +{ + img: trd_trd_kusaritif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_taki1tif +{ + img: trd_trd_taki1tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_trd_taki2tif +{ + img: trd_trd_taki2tif.png + { + format: IA-16 + hwrap: mirror + vwrap: mirror + } + aux: trd_trd_taki2tif_AUX.png + { + format: shared + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + +tex: trd_water_sokotif +{ + img: trd_water_sokotif.png + { + format: CI-4 + hwrap: mirror + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_water3tif +{ + img: trd_water3tif.png + { + format: IA-16 + hwrap: repeat + vwrap: repeat + } + aux: trd_water3tif_AUX.png + { + format: shared + hwrap: repeat + vwrap: repeat + } + filter: no + combine: 8 +} + +tex: trd_yuka3tif +{ + img: trd_yuka3tif.png + { + format: CI-4 + hwrap: repeat + vwrap: mirror + } + filter: yes + combine: 8 +} + +tex: trd_yuka4tif +{ + img: trd_yuka4tif.png + { + format: CI-4 + hwrap: repeat + vwrap: repeat + } + filter: yes + combine: 8 +} + diff --git a/assets/wua/mapfs/tex/ham_tex.json b/assets/wua/mapfs/tex/ham_tex.json new file mode 100644 index 00000000000..317d4b0d0a8 --- /dev/null +++ b/assets/wua/mapfs/tex/ham_tex.json @@ -0,0 +1,808 @@ +[ + { + "name": "nok_ami", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_ana_c", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_back_2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_berosaide", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_block_c", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_blook2", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_blook", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_dec_plant", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_flower_02", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_frame", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_g_and_b", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_green_e", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hana_b", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hana_f", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hanas", + "main": { + "format": "IA8", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hapa34", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hapa", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hashi33", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hon2", + "main": { + "format": "I8", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_hon", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_huton_02", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_ita", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_iwa_a", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_jimen", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabe10", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabe12_b", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabe12_w", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabe12", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabe6", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabe8", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabegami_3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabegami_f", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabekusa", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kabe", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kanban4", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kanban6", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kinopio", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "hasMipmaps": true, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kirakira", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kishikaku", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kusakusa1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_kusa", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_log_side", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_mac_field", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_mac_house7", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_mac_house8", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_mac_saku", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_mado_9", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_midori03", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_miki4", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_n_yasiha", + "main": { + "format": "CI8", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_n_yasiki", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_nagare", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_nok_suimen", + "main": { + "format": "IA16", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "aux": { + "format": "Shared", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_radio2", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_reef_h", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_reef_i_kuki", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_ren_a", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_renga_edge", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_renga10", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_renga12", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_sabaku_b", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_sakusaku", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_sakusa", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_saku", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_sima", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_t_dokankun3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_tana_1", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_tana_3", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_tana_c", + "main": { + "format": "RGBA32", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_temae1", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_tesuri", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_tizu", + "main": { + "format": "CI4", + "hwrap": "Clamp", + "vwrap": "Clamp" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_turu_1", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_wall_m", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_water_soko", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_wood_floor_c", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_yuka3", + "main": { + "format": "CI4", + "hwrap": "Repeat", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_yuka6", + "main": { + "format": "CI4", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_yuka7", + "main": { + "format": "CI8", + "hwrap": "Mirror", + "vwrap": "Mirror" + }, + "filter": true, + "combine": "Multiply" + }, + { + "name": "nok_yuka", + "main": { + "format": "I4", + "hwrap": "Repeat", + "vwrap": "Repeat" + }, + "filter": true, + "combine": "Multiply" + } +] diff --git a/assets/wua/msg/2F_Misc.msg b/assets/wua/msg/2F_Misc.msg new file mode 100644 index 00000000000..1321e87ae30 --- /dev/null +++ b/assets/wua/msg/2F_Misc.msg @@ -0,0 +1,38 @@ +#message:2F:(Misc_BadgeEmblemName) { + Badge Emblem[End] +} + +#message:2F:(Misc_BadgeEmblemFullDesc) { + Increases maximum BP by 3.[End] +} + +#message:2F:(Misc_BadgeEmblemShortDesc) { + Increases maximum BP by 3.[End] +} + +#message:2F:(Misc_SmokePuff) { + Smoke Puff[End] +} + +#message:2F:(Misc_SmokePuffTattle) { + [Style right] + This is Smoke Puff.[Wait][End] +} + +#message:2F:(Misc_Uproot) { + Uproot[End] +} + +#message:2F:(Misc_UprootTattle) { + [Style right] + This is Uproot.[Wait][End] +} + +#message:2F:(Misc_Reznor) { + Reznor[End] +} + +#message:2F:(Misc_ReznorTattle) { + [Style right] + This is Reznor.[Wait][End] +} diff --git a/assets/wua/pause/orbs.png b/assets/wua/pause/orbs.png new file mode 100644 index 00000000000..7e7b3ad4f71 Binary files /dev/null and b/assets/wua/pause/orbs.png differ diff --git a/assets/wua/sprite/npc.xml b/assets/wua/sprite/npc.xml new file mode 100644 index 00000000000..affed7ffe97 --- /dev/null +++ b/assets/wua/sprite/npc.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/AntTrooper/Palette_00.png b/assets/wua/sprite/npc/AntTrooper/Palette_00.png new file mode 100644 index 00000000000..177e0923221 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Palette_00.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/SpriteSheet.xml b/assets/wua/sprite/npc/AntTrooper/SpriteSheet.xml new file mode 100644 index 00000000000..538ad28d0e7 --- /dev/null +++ b/assets/wua/sprite/npc/AntTrooper/SpriteSheet.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper10.png b/assets/wua/sprite/npc/AntTrooper/Trooper10.png new file mode 100644 index 00000000000..081d45c5fb0 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper10.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper11.png b/assets/wua/sprite/npc/AntTrooper/Trooper11.png new file mode 100644 index 00000000000..dc447215d78 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper11.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper12.png b/assets/wua/sprite/npc/AntTrooper/Trooper12.png new file mode 100644 index 00000000000..68739310500 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper12.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper13.png b/assets/wua/sprite/npc/AntTrooper/Trooper13.png new file mode 100644 index 00000000000..5ebe1968696 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper13.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper14.png b/assets/wua/sprite/npc/AntTrooper/Trooper14.png new file mode 100644 index 00000000000..d5e78a94009 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper14.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper3.png b/assets/wua/sprite/npc/AntTrooper/Trooper3.png new file mode 100644 index 00000000000..6a06255f2e9 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper3.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper4.png b/assets/wua/sprite/npc/AntTrooper/Trooper4.png new file mode 100644 index 00000000000..0ef5a77245d Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper4.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper5.png b/assets/wua/sprite/npc/AntTrooper/Trooper5.png new file mode 100644 index 00000000000..151b6f8881e Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper5.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper6.png b/assets/wua/sprite/npc/AntTrooper/Trooper6.png new file mode 100644 index 00000000000..ce0df7796ce Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper6.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper7.png b/assets/wua/sprite/npc/AntTrooper/Trooper7.png new file mode 100644 index 00000000000..fd1b9a2958a Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper7.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper8.png b/assets/wua/sprite/npc/AntTrooper/Trooper8.png new file mode 100644 index 00000000000..89a1729df74 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper8.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/Trooper9.png b/assets/wua/sprite/npc/AntTrooper/Trooper9.png new file mode 100644 index 00000000000..2fee5917006 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/Trooper9.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/burn1.png b/assets/wua/sprite/npc/AntTrooper/burn1.png new file mode 100644 index 00000000000..50a36569510 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/burn1.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/burn2.png b/assets/wua/sprite/npc/AntTrooper/burn2.png new file mode 100644 index 00000000000..8740566e016 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/burn2.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/burn3.png b/assets/wua/sprite/npc/AntTrooper/burn3.png new file mode 100644 index 00000000000..2b60c345d5f Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/burn3.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/idles1.png b/assets/wua/sprite/npc/AntTrooper/idles1.png new file mode 100644 index 00000000000..177e0923221 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/idles1.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/idles2.png b/assets/wua/sprite/npc/AntTrooper/idles2.png new file mode 100644 index 00000000000..270121416c5 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/idles2.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/idles3.png b/assets/wua/sprite/npc/AntTrooper/idles3.png new file mode 100644 index 00000000000..48d9df50e8f Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/idles3.png differ diff --git a/assets/wua/sprite/npc/AntTrooper/idles4.png b/assets/wua/sprite/npc/AntTrooper/idles4.png new file mode 100644 index 00000000000..e5d146f4d70 Binary files /dev/null and b/assets/wua/sprite/npc/AntTrooper/idles4.png differ diff --git a/assets/wua/sprite/npc/Astarance/Palette_00.png b/assets/wua/sprite/npc/Astarance/Palette_00.png new file mode 100644 index 00000000000..c70e2b97bef Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Astarance/Palette_01.png b/assets/wua/sprite/npc/Astarance/Palette_01.png new file mode 100644 index 00000000000..01355523857 Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Astarance/Raster_00.png b/assets/wua/sprite/npc/Astarance/Raster_00.png new file mode 100644 index 00000000000..7fd949192b8 Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Astarance/Raster_01.png b/assets/wua/sprite/npc/Astarance/Raster_01.png new file mode 100644 index 00000000000..cc61cff69f3 Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Astarance/Raster_02.png b/assets/wua/sprite/npc/Astarance/Raster_02.png new file mode 100644 index 00000000000..637f4423e81 Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Astarance/Raster_03.png b/assets/wua/sprite/npc/Astarance/Raster_03.png new file mode 100644 index 00000000000..ee1d24b89b7 Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Astarance/Raster_04.png b/assets/wua/sprite/npc/Astarance/Raster_04.png new file mode 100644 index 00000000000..173c8594808 Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Astarance/Raster_05.png b/assets/wua/sprite/npc/Astarance/Raster_05.png new file mode 100644 index 00000000000..2d1517b9628 Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Astarance/Raster_06.png b/assets/wua/sprite/npc/Astarance/Raster_06.png new file mode 100644 index 00000000000..d00ba4e0d4c Binary files /dev/null and b/assets/wua/sprite/npc/Astarance/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Astarance/SpriteSheet.xml b/assets/wua/sprite/npc/Astarance/SpriteSheet.xml new file mode 100644 index 00000000000..1699d03f964 --- /dev/null +++ b/assets/wua/sprite/npc/Astarance/SpriteSheet.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Atomm/Palette_00.png b/assets/wua/sprite/npc/Atomm/Palette_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Atomm/Palette_01.png b/assets/wua/sprite/npc/Atomm/Palette_01.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Atomm/Palette_02.png b/assets/wua/sprite/npc/Atomm/Palette_02.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Atomm/Palette_03.png b/assets/wua/sprite/npc/Atomm/Palette_03.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_00.png b/assets/wua/sprite/npc/Atomm/Raster_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_01.png b/assets/wua/sprite/npc/Atomm/Raster_01.png new file mode 100644 index 00000000000..d7019f4a54b Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_02.png b/assets/wua/sprite/npc/Atomm/Raster_02.png new file mode 100644 index 00000000000..d3b714492e6 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_03.png b/assets/wua/sprite/npc/Atomm/Raster_03.png new file mode 100644 index 00000000000..b3e9c74cb4d Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_04.png b/assets/wua/sprite/npc/Atomm/Raster_04.png new file mode 100644 index 00000000000..710790b0de3 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_05.png b/assets/wua/sprite/npc/Atomm/Raster_05.png new file mode 100644 index 00000000000..cf056cd913b Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_06.png b/assets/wua/sprite/npc/Atomm/Raster_06.png new file mode 100644 index 00000000000..bd7722bbf98 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_07.png b/assets/wua/sprite/npc/Atomm/Raster_07.png new file mode 100644 index 00000000000..4fce7b0d31d Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_08.png b/assets/wua/sprite/npc/Atomm/Raster_08.png new file mode 100644 index 00000000000..14998de68d9 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Atomm/Raster_09.png b/assets/wua/sprite/npc/Atomm/Raster_09.png new file mode 100644 index 00000000000..d4552f3dd13 Binary files /dev/null and b/assets/wua/sprite/npc/Atomm/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Atomm/SpriteSheet.xml b/assets/wua/sprite/npc/Atomm/SpriteSheet.xml new file mode 100644 index 00000000000..bd225ce7fa1 --- /dev/null +++ b/assets/wua/sprite/npc/Atomm/SpriteSheet.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/wua/sprite/npc/BabyBlooper/Palette_00.png b/assets/wua/sprite/npc/BabyBlooper/Palette_00.png new file mode 100644 index 00000000000..3653234c8c4 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Palette_00.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Palette_01.png b/assets/wua/sprite/npc/BabyBlooper/Palette_01.png new file mode 100644 index 00000000000..ad91a1a3b7d Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Palette_01.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Palette_02.png b/assets/wua/sprite/npc/BabyBlooper/Palette_02.png new file mode 100644 index 00000000000..54fbb8b88cd Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Palette_02.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Palette_03.png b/assets/wua/sprite/npc/BabyBlooper/Palette_03.png new file mode 100644 index 00000000000..539774ec458 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Palette_03.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_00.png b/assets/wua/sprite/npc/BabyBlooper/Raster_00.png new file mode 100644 index 00000000000..293887ecd24 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_00.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_01.png b/assets/wua/sprite/npc/BabyBlooper/Raster_01.png new file mode 100644 index 00000000000..ed610397d8b Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_01.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_02.png b/assets/wua/sprite/npc/BabyBlooper/Raster_02.png new file mode 100644 index 00000000000..1ab4c187e33 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_02.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_03.png b/assets/wua/sprite/npc/BabyBlooper/Raster_03.png new file mode 100644 index 00000000000..2f0689a85e4 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_03.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_04.png b/assets/wua/sprite/npc/BabyBlooper/Raster_04.png new file mode 100644 index 00000000000..5a2c0347e94 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_04.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_05.png b/assets/wua/sprite/npc/BabyBlooper/Raster_05.png new file mode 100644 index 00000000000..5d49df71e5b Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_05.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_06.png b/assets/wua/sprite/npc/BabyBlooper/Raster_06.png new file mode 100644 index 00000000000..f08ab89acf5 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_06.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_07.png b/assets/wua/sprite/npc/BabyBlooper/Raster_07.png new file mode 100644 index 00000000000..1325d6d6194 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_07.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_08.png b/assets/wua/sprite/npc/BabyBlooper/Raster_08.png new file mode 100644 index 00000000000..e752d2fdee7 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_08.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_09.png b/assets/wua/sprite/npc/BabyBlooper/Raster_09.png new file mode 100644 index 00000000000..0bdea60eedc Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_09.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_0A.png b/assets/wua/sprite/npc/BabyBlooper/Raster_0A.png new file mode 100644 index 00000000000..35d6b35e127 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_0B.png b/assets/wua/sprite/npc/BabyBlooper/Raster_0B.png new file mode 100644 index 00000000000..41ee9508b71 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_0C.png b/assets/wua/sprite/npc/BabyBlooper/Raster_0C.png new file mode 100644 index 00000000000..40566392998 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_0D.png b/assets/wua/sprite/npc/BabyBlooper/Raster_0D.png new file mode 100644 index 00000000000..8e90e1beef0 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_0E.png b/assets/wua/sprite/npc/BabyBlooper/Raster_0E.png new file mode 100644 index 00000000000..0be36e22dc4 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_0F.png b/assets/wua/sprite/npc/BabyBlooper/Raster_0F.png new file mode 100644 index 00000000000..dfc3928ebf7 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_10.png b/assets/wua/sprite/npc/BabyBlooper/Raster_10.png new file mode 100644 index 00000000000..539774ec458 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_10.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_11.png b/assets/wua/sprite/npc/BabyBlooper/Raster_11.png new file mode 100644 index 00000000000..b3e3b3f2c84 Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_11.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/Raster_12.png b/assets/wua/sprite/npc/BabyBlooper/Raster_12.png new file mode 100644 index 00000000000..9cb87ce87de Binary files /dev/null and b/assets/wua/sprite/npc/BabyBlooper/Raster_12.png differ diff --git a/assets/wua/sprite/npc/BabyBlooper/SpriteSheet.xml b/assets/wua/sprite/npc/BabyBlooper/SpriteSheet.xml new file mode 100644 index 00000000000..f4bc27c6cae --- /dev/null +++ b/assets/wua/sprite/npc/BabyBlooper/SpriteSheet.xml @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Bigcheeze/SpriteSheet.xml b/assets/wua/sprite/npc/Bigcheeze/SpriteSheet.xml new file mode 100644 index 00000000000..499a83fde08 --- /dev/null +++ b/assets/wua/sprite/npc/Bigcheeze/SpriteSheet.xml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Bigcheeze/celesteidle.gif b/assets/wua/sprite/npc/Bigcheeze/celesteidle.gif new file mode 100644 index 00000000000..88d2a684619 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/celesteidle.gif differ diff --git a/assets/wua/sprite/npc/Bigcheeze/grab1.png b/assets/wua/sprite/npc/Bigcheeze/grab1.png new file mode 100644 index 00000000000..5b902673921 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/grab1.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/grab2.png b/assets/wua/sprite/npc/Bigcheeze/grab2.png new file mode 100644 index 00000000000..fd03f3af6d0 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/grab2.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/grab4.png b/assets/wua/sprite/npc/Bigcheeze/grab4.png new file mode 100644 index 00000000000..2b83bede59a Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/grab4.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/grab5.png b/assets/wua/sprite/npc/Bigcheeze/grab5.png new file mode 100644 index 00000000000..d148650a750 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/grab5.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/grab6.png b/assets/wua/sprite/npc/Bigcheeze/grab6.png new file mode 100644 index 00000000000..74b6328a731 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/grab6.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/grab7.png b/assets/wua/sprite/npc/Bigcheeze/grab7.png new file mode 100644 index 00000000000..b9075d428db Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/grab7.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/idle1.pal.png b/assets/wua/sprite/npc/Bigcheeze/idle1.pal.png new file mode 100644 index 00000000000..012b2b7e175 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/idle1.pal.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/idle1.png b/assets/wua/sprite/npc/Bigcheeze/idle1.png new file mode 100644 index 00000000000..012b2b7e175 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/idle1.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/idle2.png b/assets/wua/sprite/npc/Bigcheeze/idle2.png new file mode 100644 index 00000000000..1c5ccb0c2e0 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/idle2.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/idle3.png b/assets/wua/sprite/npc/Bigcheeze/idle3.png new file mode 100644 index 00000000000..fabe96e00fb Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/idle3.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/idle4.png b/assets/wua/sprite/npc/Bigcheeze/idle4.png new file mode 100644 index 00000000000..45c399933d4 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/idle4.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/talk.png b/assets/wua/sprite/npc/Bigcheeze/talk.png new file mode 100644 index 00000000000..94d35ad551b Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/talk.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/walk1.png b/assets/wua/sprite/npc/Bigcheeze/walk1.png new file mode 100644 index 00000000000..d201bac922f Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/walk1.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/walk2.png b/assets/wua/sprite/npc/Bigcheeze/walk2.png new file mode 100644 index 00000000000..f263c213bf3 Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/walk2.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/walk4.png b/assets/wua/sprite/npc/Bigcheeze/walk4.png new file mode 100644 index 00000000000..f158818045c Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/walk4.png differ diff --git a/assets/wua/sprite/npc/Bigcheeze/walk5.png b/assets/wua/sprite/npc/Bigcheeze/walk5.png new file mode 100644 index 00000000000..7181bce061a Binary files /dev/null and b/assets/wua/sprite/npc/Bigcheeze/walk5.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack1.png b/assets/wua/sprite/npc/Blackjack/Blackjack1.png new file mode 100644 index 00000000000..054055bd18c Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack1.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack2.png b/assets/wua/sprite/npc/Blackjack/Blackjack2.png new file mode 100644 index 00000000000..b6c281a8499 Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack2.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack3.png b/assets/wua/sprite/npc/Blackjack/Blackjack3.png new file mode 100644 index 00000000000..bcc29b32c9b Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack3.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack4.png b/assets/wua/sprite/npc/Blackjack/Blackjack4.png new file mode 100644 index 00000000000..8c14690c530 Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack4.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack5.png b/assets/wua/sprite/npc/Blackjack/Blackjack5.png new file mode 100644 index 00000000000..beaa6a448a1 Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack5.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack6.png b/assets/wua/sprite/npc/Blackjack/Blackjack6.png new file mode 100644 index 00000000000..5e2a1ece37e Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack6.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack7.png b/assets/wua/sprite/npc/Blackjack/Blackjack7.png new file mode 100644 index 00000000000..e86b294c90f Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack7.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack8.png b/assets/wua/sprite/npc/Blackjack/Blackjack8.png new file mode 100644 index 00000000000..5e2a1ece37e Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack8.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Blackjack9.png b/assets/wua/sprite/npc/Blackjack/Blackjack9.png new file mode 100644 index 00000000000..bea2d2b26c8 Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Blackjack9.png differ diff --git a/assets/wua/sprite/npc/Blackjack/Palette_00.png b/assets/wua/sprite/npc/Blackjack/Palette_00.png new file mode 100644 index 00000000000..1985a9da285 Binary files /dev/null and b/assets/wua/sprite/npc/Blackjack/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Blackjack/SpriteSheet.xml b/assets/wua/sprite/npc/Blackjack/SpriteSheet.xml new file mode 100644 index 00000000000..3b188087b31 --- /dev/null +++ b/assets/wua/sprite/npc/Blackjack/SpriteSheet.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Blooper/Palette_00.png b/assets/wua/sprite/npc/Blooper/Palette_00.png new file mode 100644 index 00000000000..ce38006ee2d Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Blooper/Palette_03.png b/assets/wua/sprite/npc/Blooper/Palette_03.png new file mode 100644 index 00000000000..001c28b3395 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Blooper/Palette_0C.png b/assets/wua/sprite/npc/Blooper/Palette_0C.png new file mode 100644 index 00000000000..c3c3495a6a8 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Palette_0C.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_00.png b/assets/wua/sprite/npc/Blooper/Raster_00.png new file mode 100644 index 00000000000..ce38006ee2d Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_02.png b/assets/wua/sprite/npc/Blooper/Raster_02.png new file mode 100644 index 00000000000..7e785214a93 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_04.png b/assets/wua/sprite/npc/Blooper/Raster_04.png new file mode 100644 index 00000000000..afe012a306f Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_05.png b/assets/wua/sprite/npc/Blooper/Raster_05.png new file mode 100644 index 00000000000..689afe72214 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_08.png b/assets/wua/sprite/npc/Blooper/Raster_08.png new file mode 100644 index 00000000000..7c422219211 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_09.png b/assets/wua/sprite/npc/Blooper/Raster_09.png new file mode 100644 index 00000000000..78e60520bd8 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_0A.png b/assets/wua/sprite/npc/Blooper/Raster_0A.png new file mode 100644 index 00000000000..22cdb39e427 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_0B.png b/assets/wua/sprite/npc/Blooper/Raster_0B.png new file mode 100644 index 00000000000..e1d5939dbca Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_0C.png b/assets/wua/sprite/npc/Blooper/Raster_0C.png new file mode 100644 index 00000000000..e58fd58dbac Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_0D.png b/assets/wua/sprite/npc/Blooper/Raster_0D.png new file mode 100644 index 00000000000..fa459bcef8d Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_0E.png b/assets/wua/sprite/npc/Blooper/Raster_0E.png new file mode 100644 index 00000000000..1e3b02c70bc Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_0F.png b/assets/wua/sprite/npc/Blooper/Raster_0F.png new file mode 100644 index 00000000000..85168cfb0d5 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_10.png b/assets/wua/sprite/npc/Blooper/Raster_10.png new file mode 100644 index 00000000000..fa459bcef8d Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Blooper/Raster_13.png b/assets/wua/sprite/npc/Blooper/Raster_13.png new file mode 100644 index 00000000000..ea43b75a418 Binary files /dev/null and b/assets/wua/sprite/npc/Blooper/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Blooper/SpriteSheet.xml b/assets/wua/sprite/npc/Blooper/SpriteSheet.xml new file mode 100644 index 00000000000..35f96224b0d --- /dev/null +++ b/assets/wua/sprite/npc/Blooper/SpriteSheet.xml @@ -0,0 +1,588 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/BlooperJr/Palette_00.png b/assets/wua/sprite/npc/BlooperJr/Palette_00.png new file mode 100644 index 00000000000..75a78b3f1a1 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Palette_00.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Palette_01.png b/assets/wua/sprite/npc/BlooperJr/Palette_01.png new file mode 100644 index 00000000000..3d20b4496cc Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Palette_01.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Palette_02.png b/assets/wua/sprite/npc/BlooperJr/Palette_02.png new file mode 100644 index 00000000000..a864bb061bf Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Palette_02.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Palette_03.png b/assets/wua/sprite/npc/BlooperJr/Palette_03.png new file mode 100644 index 00000000000..a93daa539ac Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Palette_03.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_00.png b/assets/wua/sprite/npc/BlooperJr/Raster_00.png new file mode 100644 index 00000000000..eb8cf7f8435 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_00.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_01.png b/assets/wua/sprite/npc/BlooperJr/Raster_01.png new file mode 100644 index 00000000000..d5021022400 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_01.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_02.png b/assets/wua/sprite/npc/BlooperJr/Raster_02.png new file mode 100644 index 00000000000..d019e532bd0 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_02.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_03.png b/assets/wua/sprite/npc/BlooperJr/Raster_03.png new file mode 100644 index 00000000000..7c75d8c6bde Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_03.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_04.png b/assets/wua/sprite/npc/BlooperJr/Raster_04.png new file mode 100644 index 00000000000..ea57cfdb1f7 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_04.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_05.png b/assets/wua/sprite/npc/BlooperJr/Raster_05.png new file mode 100644 index 00000000000..48dd543f3b1 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_05.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_06.png b/assets/wua/sprite/npc/BlooperJr/Raster_06.png new file mode 100644 index 00000000000..680dc6bb90d Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_06.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_07.png b/assets/wua/sprite/npc/BlooperJr/Raster_07.png new file mode 100644 index 00000000000..3399ba6e147 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_07.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_08.png b/assets/wua/sprite/npc/BlooperJr/Raster_08.png new file mode 100644 index 00000000000..74a46365d5e Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_08.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_09.png b/assets/wua/sprite/npc/BlooperJr/Raster_09.png new file mode 100644 index 00000000000..09fc36e95ff Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_09.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_0A.png b/assets/wua/sprite/npc/BlooperJr/Raster_0A.png new file mode 100644 index 00000000000..fb293551076 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_0B.png b/assets/wua/sprite/npc/BlooperJr/Raster_0B.png new file mode 100644 index 00000000000..4265485cb7d Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_0C.png b/assets/wua/sprite/npc/BlooperJr/Raster_0C.png new file mode 100644 index 00000000000..fe4b3587449 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_0D.png b/assets/wua/sprite/npc/BlooperJr/Raster_0D.png new file mode 100644 index 00000000000..ffdac4e3018 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_0E.png b/assets/wua/sprite/npc/BlooperJr/Raster_0E.png new file mode 100644 index 00000000000..ebf47a25d43 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_0F.png b/assets/wua/sprite/npc/BlooperJr/Raster_0F.png new file mode 100644 index 00000000000..dfc3928ebf7 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_10.png b/assets/wua/sprite/npc/BlooperJr/Raster_10.png new file mode 100644 index 00000000000..64aed1e7563 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_10.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_11.png b/assets/wua/sprite/npc/BlooperJr/Raster_11.png new file mode 100644 index 00000000000..4e182b6a064 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_11.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_12.png b/assets/wua/sprite/npc/BlooperJr/Raster_12.png new file mode 100644 index 00000000000..627bbdcc35c Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_12.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/Raster_13.png b/assets/wua/sprite/npc/BlooperJr/Raster_13.png new file mode 100644 index 00000000000..7c166931394 Binary files /dev/null and b/assets/wua/sprite/npc/BlooperJr/Raster_13.png differ diff --git a/assets/wua/sprite/npc/BlooperJr/SpriteSheet.xml b/assets/wua/sprite/npc/BlooperJr/SpriteSheet.xml new file mode 100644 index 00000000000..b8db2742be4 --- /dev/null +++ b/assets/wua/sprite/npc/BlooperJr/SpriteSheet.xml @@ -0,0 +1,534 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/BobOmb/Palette_00.png b/assets/wua/sprite/npc/BobOmb/Palette_00.png new file mode 100644 index 00000000000..9b2fcbd98e9 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_00.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_01.png b/assets/wua/sprite/npc/BobOmb/Palette_01.png new file mode 100644 index 00000000000..ecf9e81599c Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_01.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_02.png b/assets/wua/sprite/npc/BobOmb/Palette_02.png new file mode 100644 index 00000000000..117f374bcca Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_02.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_03.png b/assets/wua/sprite/npc/BobOmb/Palette_03.png new file mode 100644 index 00000000000..7f142cb8c09 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_03.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_04.png b/assets/wua/sprite/npc/BobOmb/Palette_04.png new file mode 100644 index 00000000000..532a05009ec Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_04.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_05.png b/assets/wua/sprite/npc/BobOmb/Palette_05.png new file mode 100644 index 00000000000..532a05009ec Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_05.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_06.png b/assets/wua/sprite/npc/BobOmb/Palette_06.png new file mode 100644 index 00000000000..532a05009ec Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_06.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_07.png b/assets/wua/sprite/npc/BobOmb/Palette_07.png new file mode 100644 index 00000000000..8870fddfdfa Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_07.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_08.png b/assets/wua/sprite/npc/BobOmb/Palette_08.png new file mode 100644 index 00000000000..d9d39e05e31 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_08.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_09.png b/assets/wua/sprite/npc/BobOmb/Palette_09.png new file mode 100644 index 00000000000..d9d39e05e31 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_09.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_0A.png b/assets/wua/sprite/npc/BobOmb/Palette_0A.png new file mode 100644 index 00000000000..d9d39e05e31 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_0A.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_0B.png b/assets/wua/sprite/npc/BobOmb/Palette_0B.png new file mode 100644 index 00000000000..c6e24258ab0 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_0B.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_0C.png b/assets/wua/sprite/npc/BobOmb/Palette_0C.png new file mode 100644 index 00000000000..c90b883b945 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_0C.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_0D.png b/assets/wua/sprite/npc/BobOmb/Palette_0D.png new file mode 100644 index 00000000000..c90b883b945 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_0D.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_0E.png b/assets/wua/sprite/npc/BobOmb/Palette_0E.png new file mode 100644 index 00000000000..6e20427b975 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_0E.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_0F.png b/assets/wua/sprite/npc/BobOmb/Palette_0F.png new file mode 100644 index 00000000000..842bc61484d Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_0F.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Palette_10.png b/assets/wua/sprite/npc/BobOmb/Palette_10.png new file mode 100644 index 00000000000..68d19334bb9 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Palette_10.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_00.png b/assets/wua/sprite/npc/BobOmb/Raster_00.png new file mode 100644 index 00000000000..9b2fcbd98e9 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_00.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_01.png b/assets/wua/sprite/npc/BobOmb/Raster_01.png new file mode 100644 index 00000000000..bb852ae877a Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_01.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_02.png b/assets/wua/sprite/npc/BobOmb/Raster_02.png new file mode 100644 index 00000000000..ced560e8c12 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_02.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_03.png b/assets/wua/sprite/npc/BobOmb/Raster_03.png new file mode 100644 index 00000000000..d6861225061 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_03.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_05.png b/assets/wua/sprite/npc/BobOmb/Raster_05.png new file mode 100644 index 00000000000..2e2f3acb443 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_05.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_06.png b/assets/wua/sprite/npc/BobOmb/Raster_06.png new file mode 100644 index 00000000000..183c734f8e4 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_06.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_07.png b/assets/wua/sprite/npc/BobOmb/Raster_07.png new file mode 100644 index 00000000000..c9532be18df Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_07.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_08.png b/assets/wua/sprite/npc/BobOmb/Raster_08.png new file mode 100644 index 00000000000..980bbc03567 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_08.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_09.png b/assets/wua/sprite/npc/BobOmb/Raster_09.png new file mode 100644 index 00000000000..d9ef453e038 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_09.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_0A.png b/assets/wua/sprite/npc/BobOmb/Raster_0A.png new file mode 100644 index 00000000000..5e109704439 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_0B.png b/assets/wua/sprite/npc/BobOmb/Raster_0B.png new file mode 100644 index 00000000000..d9045515ea6 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_0C.png b/assets/wua/sprite/npc/BobOmb/Raster_0C.png new file mode 100644 index 00000000000..687a2414697 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_0D.png b/assets/wua/sprite/npc/BobOmb/Raster_0D.png new file mode 100644 index 00000000000..495067608a1 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_0E.png b/assets/wua/sprite/npc/BobOmb/Raster_0E.png new file mode 100644 index 00000000000..862b0e63e1a Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_0F.png b/assets/wua/sprite/npc/BobOmb/Raster_0F.png new file mode 100644 index 00000000000..2f6d2886aa4 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_10.png b/assets/wua/sprite/npc/BobOmb/Raster_10.png new file mode 100644 index 00000000000..134e2b58577 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_10.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_11.png b/assets/wua/sprite/npc/BobOmb/Raster_11.png new file mode 100644 index 00000000000..3ce1af3f47b Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_11.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_12.png b/assets/wua/sprite/npc/BobOmb/Raster_12.png new file mode 100644 index 00000000000..144bc2f6704 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_12.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_13.png b/assets/wua/sprite/npc/BobOmb/Raster_13.png new file mode 100644 index 00000000000..a3742d70edb Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_13.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_14.png b/assets/wua/sprite/npc/BobOmb/Raster_14.png new file mode 100644 index 00000000000..b5a32e7b0dd Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_14.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_15.png b/assets/wua/sprite/npc/BobOmb/Raster_15.png new file mode 100644 index 00000000000..b1320efadb2 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_15.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_16.png b/assets/wua/sprite/npc/BobOmb/Raster_16.png new file mode 100644 index 00000000000..1619f56f400 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_16.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_17.png b/assets/wua/sprite/npc/BobOmb/Raster_17.png new file mode 100644 index 00000000000..b8b365f7e62 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_17.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_18.png b/assets/wua/sprite/npc/BobOmb/Raster_18.png new file mode 100644 index 00000000000..7f142cb8c09 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_18.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_19.png b/assets/wua/sprite/npc/BobOmb/Raster_19.png new file mode 100644 index 00000000000..1445795644f Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_19.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_1A.png b/assets/wua/sprite/npc/BobOmb/Raster_1A.png new file mode 100644 index 00000000000..aa57712711b Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_1B.png b/assets/wua/sprite/npc/BobOmb/Raster_1B.png new file mode 100644 index 00000000000..9cf3b6fd1c9 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_1C.png b/assets/wua/sprite/npc/BobOmb/Raster_1C.png new file mode 100644 index 00000000000..7053162f8fc Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_1D.png b/assets/wua/sprite/npc/BobOmb/Raster_1D.png new file mode 100644 index 00000000000..1ab4e575067 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_1E.png b/assets/wua/sprite/npc/BobOmb/Raster_1E.png new file mode 100644 index 00000000000..b2ed125cf7a Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_1F.png b/assets/wua/sprite/npc/BobOmb/Raster_1F.png new file mode 100644 index 00000000000..37a48f32264 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_20.png b/assets/wua/sprite/npc/BobOmb/Raster_20.png new file mode 100644 index 00000000000..d6cbaa2c609 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_20.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_21.png b/assets/wua/sprite/npc/BobOmb/Raster_21.png new file mode 100644 index 00000000000..a9cb34af810 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_21.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_22.png b/assets/wua/sprite/npc/BobOmb/Raster_22.png new file mode 100644 index 00000000000..ff5c5c1f973 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_22.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_23.png b/assets/wua/sprite/npc/BobOmb/Raster_23.png new file mode 100644 index 00000000000..0c745dc5ef5 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_23.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_24.png b/assets/wua/sprite/npc/BobOmb/Raster_24.png new file mode 100644 index 00000000000..9431ed649bb Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_24.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_25.png b/assets/wua/sprite/npc/BobOmb/Raster_25.png new file mode 100644 index 00000000000..2662a77da67 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_25.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_26.png b/assets/wua/sprite/npc/BobOmb/Raster_26.png new file mode 100644 index 00000000000..a0ebc5dd3e6 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_26.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_27.png b/assets/wua/sprite/npc/BobOmb/Raster_27.png new file mode 100644 index 00000000000..68d19334bb9 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_27.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_28.png b/assets/wua/sprite/npc/BobOmb/Raster_28.png new file mode 100644 index 00000000000..5da1a77a090 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_28.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_29.png b/assets/wua/sprite/npc/BobOmb/Raster_29.png new file mode 100644 index 00000000000..585f9b7479d Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_29.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_2A.png b/assets/wua/sprite/npc/BobOmb/Raster_2A.png new file mode 100644 index 00000000000..930736d9875 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_2A.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_2B.png b/assets/wua/sprite/npc/BobOmb/Raster_2B.png new file mode 100644 index 00000000000..247299e2e6c Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_2B.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_2C.png b/assets/wua/sprite/npc/BobOmb/Raster_2C.png new file mode 100644 index 00000000000..87bd5564898 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_2C.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_2D.png b/assets/wua/sprite/npc/BobOmb/Raster_2D.png new file mode 100644 index 00000000000..625d378aa1a Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_2D.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_2E.png b/assets/wua/sprite/npc/BobOmb/Raster_2E.png new file mode 100644 index 00000000000..e8d83f352c6 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_2E.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_2F.png b/assets/wua/sprite/npc/BobOmb/Raster_2F.png new file mode 100644 index 00000000000..b22cb4c695f Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_2F.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_30.png b/assets/wua/sprite/npc/BobOmb/Raster_30.png new file mode 100644 index 00000000000..f19214bd7ad Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_30.png differ diff --git a/assets/wua/sprite/npc/BobOmb/Raster_31.png b/assets/wua/sprite/npc/BobOmb/Raster_31.png new file mode 100644 index 00000000000..739fb99ff40 Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/Raster_31.png differ diff --git a/assets/wua/sprite/npc/BobOmb/SpriteSheet.xml b/assets/wua/sprite/npc/BobOmb/SpriteSheet.xml new file mode 100644 index 00000000000..f76a5b21d07 --- /dev/null +++ b/assets/wua/sprite/npc/BobOmb/SpriteSheet.xml @@ -0,0 +1,1485 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/BobOmb/parachute.pal.png b/assets/wua/sprite/npc/BobOmb/parachute.pal.png new file mode 100644 index 00000000000..75122209aec Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/parachute.pal.png differ diff --git a/assets/wua/sprite/npc/BobOmb/parachute.png b/assets/wua/sprite/npc/BobOmb/parachute.png new file mode 100644 index 00000000000..75122209aec Binary files /dev/null and b/assets/wua/sprite/npc/BobOmb/parachute.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked1.png b/assets/wua/sprite/npc/BoneGoomba/Spiked1.png new file mode 100644 index 00000000000..d73350a1b51 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked1.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked10.png b/assets/wua/sprite/npc/BoneGoomba/Spiked10.png new file mode 100644 index 00000000000..d6097dc39a0 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked10.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked11.png b/assets/wua/sprite/npc/BoneGoomba/Spiked11.png new file mode 100644 index 00000000000..45d0f0e0b72 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked11.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked12.png b/assets/wua/sprite/npc/BoneGoomba/Spiked12.png new file mode 100644 index 00000000000..a69ac4a6ab9 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked12.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked13.png b/assets/wua/sprite/npc/BoneGoomba/Spiked13.png new file mode 100644 index 00000000000..d318178f43c Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked13.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked14.png b/assets/wua/sprite/npc/BoneGoomba/Spiked14.png new file mode 100644 index 00000000000..1fd0b34720f Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked14.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked15.png b/assets/wua/sprite/npc/BoneGoomba/Spiked15.png new file mode 100644 index 00000000000..7eea7ff7320 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked15.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked16.png b/assets/wua/sprite/npc/BoneGoomba/Spiked16.png new file mode 100644 index 00000000000..fa7eb087f1b Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked16.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked2.png b/assets/wua/sprite/npc/BoneGoomba/Spiked2.png new file mode 100644 index 00000000000..d16b59b0223 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked2.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked3.png b/assets/wua/sprite/npc/BoneGoomba/Spiked3.png new file mode 100644 index 00000000000..971aff6fd16 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked3.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked4.png b/assets/wua/sprite/npc/BoneGoomba/Spiked4.png new file mode 100644 index 00000000000..ef650a979de Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked4.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked5.png b/assets/wua/sprite/npc/BoneGoomba/Spiked5.png new file mode 100644 index 00000000000..12bb70c66ed Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked5.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked6.png b/assets/wua/sprite/npc/BoneGoomba/Spiked6.png new file mode 100644 index 00000000000..efec314dae7 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked6.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked7.png b/assets/wua/sprite/npc/BoneGoomba/Spiked7.png new file mode 100644 index 00000000000..e5fef981035 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked7.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked8.png b/assets/wua/sprite/npc/BoneGoomba/Spiked8.png new file mode 100644 index 00000000000..711e9cda543 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked8.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/Spiked9.png b/assets/wua/sprite/npc/BoneGoomba/Spiked9.png new file mode 100644 index 00000000000..811c4a49f18 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/Spiked9.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/SpriteSheet.xml b/assets/wua/sprite/npc/BoneGoomba/SpriteSheet.xml new file mode 100644 index 00000000000..97dfb0bafc6 --- /dev/null +++ b/assets/wua/sprite/npc/BoneGoomba/SpriteSheet.xml @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/BoneGoomba/blue.png b/assets/wua/sprite/npc/BoneGoomba/blue.png new file mode 100644 index 00000000000..86ce28ac4c1 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/blue.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/burn_dead.png b/assets/wua/sprite/npc/BoneGoomba/burn_dead.png new file mode 100644 index 00000000000..4f3fd68d0ef Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/burn_dead.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/burn_pain1.png b/assets/wua/sprite/npc/BoneGoomba/burn_pain1.png new file mode 100644 index 00000000000..b8e2f9bc941 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/burn_pain1.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/burn_pain2.png b/assets/wua/sprite/npc/BoneGoomba/burn_pain2.png new file mode 100644 index 00000000000..49a4e37a728 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/burn_pain2.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/burnt.png b/assets/wua/sprite/npc/BoneGoomba/burnt.png new file mode 100644 index 00000000000..bd80041f0a5 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/burnt.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/dizzy1.png b/assets/wua/sprite/npc/BoneGoomba/dizzy1.png new file mode 100644 index 00000000000..2fa43395fb6 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/dizzy1.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/dizzy2.png b/assets/wua/sprite/npc/BoneGoomba/dizzy2.png new file mode 100644 index 00000000000..5689ce72fb1 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/dizzy2.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/dizzy3.png b/assets/wua/sprite/npc/BoneGoomba/dizzy3.png new file mode 100644 index 00000000000..0ec1bb236a2 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/dizzy3.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/dizzy4.png b/assets/wua/sprite/npc/BoneGoomba/dizzy4.png new file mode 100644 index 00000000000..7ac5a99c40d Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/dizzy4.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/electrified.png b/assets/wua/sprite/npc/BoneGoomba/electrified.png new file mode 100644 index 00000000000..89e2c56447b Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/electrified.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/fake_mushroom.png b/assets/wua/sprite/npc/BoneGoomba/fake_mushroom.png new file mode 100644 index 00000000000..ee83afda38f Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/fake_mushroom.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/fake_plant.png b/assets/wua/sprite/npc/BoneGoomba/fake_plant.png new file mode 100644 index 00000000000..82eae93592a Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/fake_plant.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/gloomba.png b/assets/wua/sprite/npc/BoneGoomba/gloomba.png new file mode 100644 index 00000000000..13be5e3d988 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/gloomba.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/hyper.png b/assets/wua/sprite/npc/BoneGoomba/hyper.png new file mode 100644 index 00000000000..05d425ba3cc Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/hyper.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/jump.png b/assets/wua/sprite/npc/BoneGoomba/jump.png new file mode 100644 index 00000000000..44e284a7f6d Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/jump.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/lean_left.png b/assets/wua/sprite/npc/BoneGoomba/lean_left.png new file mode 100644 index 00000000000..1901b1671f6 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/lean_left.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/lean_right.png b/assets/wua/sprite/npc/BoneGoomba/lean_right.png new file mode 100644 index 00000000000..5d6e521708b Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/lean_right.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/normal.png b/assets/wua/sprite/npc/BoneGoomba/normal.png new file mode 100644 index 00000000000..bfa043522fd Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/normal.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/open_mouth.png b/assets/wua/sprite/npc/BoneGoomba/open_mouth.png new file mode 100644 index 00000000000..0a65aa2a9a5 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/open_mouth.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/open_mouth_wide.png b/assets/wua/sprite/npc/BoneGoomba/open_mouth_wide.png new file mode 100644 index 00000000000..d912fa27e8e Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/open_mouth_wide.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/pain1.png b/assets/wua/sprite/npc/BoneGoomba/pain1.png new file mode 100644 index 00000000000..bd653f82a81 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/pain1.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/pain2.png b/assets/wua/sprite/npc/BoneGoomba/pain2.png new file mode 100644 index 00000000000..8b0a6eb1081 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/pain2.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/poisoned.png b/assets/wua/sprite/npc/BoneGoomba/poisoned.png new file mode 100644 index 00000000000..7e23a507354 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/poisoned.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/red.png b/assets/wua/sprite/npc/BoneGoomba/red.png new file mode 100644 index 00000000000..6de2a56247b Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/red.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/sleep.png b/assets/wua/sprite/npc/BoneGoomba/sleep.png new file mode 100644 index 00000000000..43084802a00 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/sleep.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/still.png b/assets/wua/sprite/npc/BoneGoomba/still.png new file mode 100644 index 00000000000..02a7d2725de Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/still.png differ diff --git a/assets/wua/sprite/npc/BoneGoomba/unk_purple_status.png b/assets/wua/sprite/npc/BoneGoomba/unk_purple_status.png new file mode 100644 index 00000000000..dd949407469 Binary files /dev/null and b/assets/wua/sprite/npc/BoneGoomba/unk_purple_status.png differ diff --git a/assets/wua/sprite/npc/Boo/Palette_00.png b/assets/wua/sprite/npc/Boo/Palette_00.png new file mode 100644 index 00000000000..c6e09959db4 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Boo/Palette_01.png b/assets/wua/sprite/npc/Boo/Palette_01.png new file mode 100644 index 00000000000..235fbbc63aa Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_00.png b/assets/wua/sprite/npc/Boo/Raster_00.png new file mode 100644 index 00000000000..c6e09959db4 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_01.png b/assets/wua/sprite/npc/Boo/Raster_01.png new file mode 100644 index 00000000000..39140c77080 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_02.png b/assets/wua/sprite/npc/Boo/Raster_02.png new file mode 100644 index 00000000000..dba463045e0 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_03.png b/assets/wua/sprite/npc/Boo/Raster_03.png new file mode 100644 index 00000000000..a20b5d1f67a Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_04.png b/assets/wua/sprite/npc/Boo/Raster_04.png new file mode 100644 index 00000000000..83a0e3fbfe7 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_05.png b/assets/wua/sprite/npc/Boo/Raster_05.png new file mode 100644 index 00000000000..b67bd07bd4e Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_06.png b/assets/wua/sprite/npc/Boo/Raster_06.png new file mode 100644 index 00000000000..d6b1d3e2d2c Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_07.png b/assets/wua/sprite/npc/Boo/Raster_07.png new file mode 100644 index 00000000000..e04919fba18 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_08.png b/assets/wua/sprite/npc/Boo/Raster_08.png new file mode 100644 index 00000000000..e52eaabea8d Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_09.png b/assets/wua/sprite/npc/Boo/Raster_09.png new file mode 100644 index 00000000000..1bd4cf1d4e4 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_0A.png b/assets/wua/sprite/npc/Boo/Raster_0A.png new file mode 100644 index 00000000000..52bcb67545a Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_0B.png b/assets/wua/sprite/npc/Boo/Raster_0B.png new file mode 100644 index 00000000000..49756fd2fe0 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_0C.png b/assets/wua/sprite/npc/Boo/Raster_0C.png new file mode 100644 index 00000000000..05a38d78d83 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_0D.png b/assets/wua/sprite/npc/Boo/Raster_0D.png new file mode 100644 index 00000000000..c29863dd98b Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_0E.png b/assets/wua/sprite/npc/Boo/Raster_0E.png new file mode 100644 index 00000000000..6714a330b06 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_0F.png b/assets/wua/sprite/npc/Boo/Raster_0F.png new file mode 100644 index 00000000000..1e741418da1 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_10.png b/assets/wua/sprite/npc/Boo/Raster_10.png new file mode 100644 index 00000000000..61d4c59a2d7 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_11.png b/assets/wua/sprite/npc/Boo/Raster_11.png new file mode 100644 index 00000000000..da7dde61553 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_12.png b/assets/wua/sprite/npc/Boo/Raster_12.png new file mode 100644 index 00000000000..9b0d2153aa2 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_13.png b/assets/wua/sprite/npc/Boo/Raster_13.png new file mode 100644 index 00000000000..d71f6623327 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_14.png b/assets/wua/sprite/npc/Boo/Raster_14.png new file mode 100644 index 00000000000..c095912439b Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_15.png b/assets/wua/sprite/npc/Boo/Raster_15.png new file mode 100644 index 00000000000..a8f9adf9484 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_16.png b/assets/wua/sprite/npc/Boo/Raster_16.png new file mode 100644 index 00000000000..6d9ef39cd20 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_17.png b/assets/wua/sprite/npc/Boo/Raster_17.png new file mode 100644 index 00000000000..15cbbcdadc1 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_18.png b/assets/wua/sprite/npc/Boo/Raster_18.png new file mode 100644 index 00000000000..40732c57eea Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_19.png b/assets/wua/sprite/npc/Boo/Raster_19.png new file mode 100644 index 00000000000..38c9a8e00cd Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_1A.png b/assets/wua/sprite/npc/Boo/Raster_1A.png new file mode 100644 index 00000000000..3dc45ddb9e5 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_1B.png b/assets/wua/sprite/npc/Boo/Raster_1B.png new file mode 100644 index 00000000000..5696fdb7c0e Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_1C.png b/assets/wua/sprite/npc/Boo/Raster_1C.png new file mode 100644 index 00000000000..a4134a69ad7 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_1D.png b/assets/wua/sprite/npc/Boo/Raster_1D.png new file mode 100644 index 00000000000..0ff241b80b9 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_1E.png b/assets/wua/sprite/npc/Boo/Raster_1E.png new file mode 100644 index 00000000000..e477ce5dfd7 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_1F.png b/assets/wua/sprite/npc/Boo/Raster_1F.png new file mode 100644 index 00000000000..7e056c71f30 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/Boo/Raster_20.png b/assets/wua/sprite/npc/Boo/Raster_20.png new file mode 100644 index 00000000000..b4972109eb4 Binary files /dev/null and b/assets/wua/sprite/npc/Boo/Raster_20.png differ diff --git a/assets/wua/sprite/npc/Boo/SpriteSheet.xml b/assets/wua/sprite/npc/Boo/SpriteSheet.xml new file mode 100644 index 00000000000..29c88c479e1 --- /dev/null +++ b/assets/wua/sprite/npc/Boo/SpriteSheet.xml @@ -0,0 +1,769 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Boolean/Idle1.png b/assets/wua/sprite/npc/Boolean/Idle1.png new file mode 100644 index 00000000000..84e837df6a1 Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/Idle1.png differ diff --git a/assets/wua/sprite/npc/Boolean/Idle2.png b/assets/wua/sprite/npc/Boolean/Idle2.png new file mode 100644 index 00000000000..d76ccb7dfef Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/Idle2.png differ diff --git a/assets/wua/sprite/npc/Boolean/Idle3.png b/assets/wua/sprite/npc/Boolean/Idle3.png new file mode 100644 index 00000000000..c001294fc79 Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/Idle3.png differ diff --git a/assets/wua/sprite/npc/Boolean/Palette_00.png b/assets/wua/sprite/npc/Boolean/Palette_00.png new file mode 100644 index 00000000000..136fd386f51 Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Boolean/SpriteSheet.xml b/assets/wua/sprite/npc/Boolean/SpriteSheet.xml new file mode 100644 index 00000000000..b9bd9c07864 --- /dev/null +++ b/assets/wua/sprite/npc/Boolean/SpriteSheet.xml @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Boolean/Talk1.png b/assets/wua/sprite/npc/Boolean/Talk1.png new file mode 100644 index 00000000000..6340f81540b Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/Talk1.png differ diff --git a/assets/wua/sprite/npc/Boolean/Talk2.png b/assets/wua/sprite/npc/Boolean/Talk2.png new file mode 100644 index 00000000000..2d38a53c18a Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/Talk2.png differ diff --git a/assets/wua/sprite/npc/Boolean/idle_sad1.png b/assets/wua/sprite/npc/Boolean/idle_sad1.png new file mode 100644 index 00000000000..d5e8a3b490d Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/idle_sad1.png differ diff --git a/assets/wua/sprite/npc/Boolean/idle_sad2.png b/assets/wua/sprite/npc/Boolean/idle_sad2.png new file mode 100644 index 00000000000..f8056096337 Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/idle_sad2.png differ diff --git a/assets/wua/sprite/npc/Boolean/scared.png b/assets/wua/sprite/npc/Boolean/scared.png new file mode 100644 index 00000000000..d01c1447622 Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/scared.png differ diff --git a/assets/wua/sprite/npc/Boolean/talk_sad1.png b/assets/wua/sprite/npc/Boolean/talk_sad1.png new file mode 100644 index 00000000000..51457edfc01 Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/talk_sad1.png differ diff --git a/assets/wua/sprite/npc/Boolean/talk_sad2.png b/assets/wua/sprite/npc/Boolean/talk_sad2.png new file mode 100644 index 00000000000..71b6074437a Binary files /dev/null and b/assets/wua/sprite/npc/Boolean/talk_sad2.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_00.png b/assets/wua/sprite/npc/Bristle/Palette_00.png new file mode 100644 index 00000000000..133c02c594b Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_01.png b/assets/wua/sprite/npc/Bristle/Palette_01.png new file mode 100644 index 00000000000..58300d67335 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_02.png b/assets/wua/sprite/npc/Bristle/Palette_02.png new file mode 100644 index 00000000000..96d444c34c3 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_03.png b/assets/wua/sprite/npc/Bristle/Palette_03.png new file mode 100644 index 00000000000..96d444c34c3 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_04.png b/assets/wua/sprite/npc/Bristle/Palette_04.png new file mode 100644 index 00000000000..7b94302f2f1 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_05.png b/assets/wua/sprite/npc/Bristle/Palette_05.png new file mode 100644 index 00000000000..7b94302f2f1 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_06.png b/assets/wua/sprite/npc/Bristle/Palette_06.png new file mode 100644 index 00000000000..c3893b12f60 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_06.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_07.png b/assets/wua/sprite/npc/Bristle/Palette_07.png new file mode 100644 index 00000000000..c3893b12f60 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_07.png differ diff --git a/assets/wua/sprite/npc/Bristle/Palette_08.png b/assets/wua/sprite/npc/Bristle/Palette_08.png new file mode 100644 index 00000000000..41071075481 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Palette_08.png differ diff --git a/assets/wua/sprite/npc/Bristle/Raster_00.png b/assets/wua/sprite/npc/Bristle/Raster_00.png new file mode 100644 index 00000000000..aab3a405501 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Bristle/Raster_01.png b/assets/wua/sprite/npc/Bristle/Raster_01.png new file mode 100644 index 00000000000..b872218bba3 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Bristle/Raster_02.png b/assets/wua/sprite/npc/Bristle/Raster_02.png new file mode 100644 index 00000000000..1b4e2042470 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Bristle/Raster_03.png b/assets/wua/sprite/npc/Bristle/Raster_03.png new file mode 100644 index 00000000000..2497a86202b Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Bristle/Raster_04.png b/assets/wua/sprite/npc/Bristle/Raster_04.png new file mode 100644 index 00000000000..7e6d9835bb9 Binary files /dev/null and b/assets/wua/sprite/npc/Bristle/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Bristle/SpriteSheet.xml b/assets/wua/sprite/npc/Bristle/SpriteSheet.xml new file mode 100644 index 00000000000..abf63a66de7 --- /dev/null +++ b/assets/wua/sprite/npc/Bristle/SpriteSheet.xml @@ -0,0 +1,486 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Brody/Brody1.png b/assets/wua/sprite/npc/Brody/Brody1.png new file mode 100644 index 00000000000..07a653b6a15 Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody1.png differ diff --git a/assets/wua/sprite/npc/Brody/Brody2.png b/assets/wua/sprite/npc/Brody/Brody2.png new file mode 100644 index 00000000000..44bbfdf5b9f Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody2.png differ diff --git a/assets/wua/sprite/npc/Brody/Brody3.png b/assets/wua/sprite/npc/Brody/Brody3.png new file mode 100644 index 00000000000..36ada3cf729 Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody3.png differ diff --git a/assets/wua/sprite/npc/Brody/Brody4.png b/assets/wua/sprite/npc/Brody/Brody4.png new file mode 100644 index 00000000000..fe44f031f22 Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody4.png differ diff --git a/assets/wua/sprite/npc/Brody/Brody5.png b/assets/wua/sprite/npc/Brody/Brody5.png new file mode 100644 index 00000000000..47fabe195cd Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody5.png differ diff --git a/assets/wua/sprite/npc/Brody/Brody6.png b/assets/wua/sprite/npc/Brody/Brody6.png new file mode 100644 index 00000000000..70bfd835c01 Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody6.png differ diff --git a/assets/wua/sprite/npc/Brody/Brody7.png b/assets/wua/sprite/npc/Brody/Brody7.png new file mode 100644 index 00000000000..5f90c67994e Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody7.png differ diff --git a/assets/wua/sprite/npc/Brody/Brody8.png b/assets/wua/sprite/npc/Brody/Brody8.png new file mode 100644 index 00000000000..26509c0866c Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Brody8.png differ diff --git a/assets/wua/sprite/npc/Brody/Hammer1.png b/assets/wua/sprite/npc/Brody/Hammer1.png new file mode 100644 index 00000000000..072aef1899d Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Hammer1.png differ diff --git a/assets/wua/sprite/npc/Brody/Hammer2.png b/assets/wua/sprite/npc/Brody/Hammer2.png new file mode 100644 index 00000000000..1a031e74cbd Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Hammer2.png differ diff --git a/assets/wua/sprite/npc/Brody/Palette_00.png b/assets/wua/sprite/npc/Brody/Palette_00.png new file mode 100644 index 00000000000..07a653b6a15 Binary files /dev/null and b/assets/wua/sprite/npc/Brody/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Brody/SpriteSheet.xml b/assets/wua/sprite/npc/Brody/SpriteSheet.xml new file mode 100644 index 00000000000..4d9a69efc1a --- /dev/null +++ b/assets/wua/sprite/npc/Brody/SpriteSheet.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Brokenuproot/Palette_00.png b/assets/wua/sprite/npc/Brokenuproot/Palette_00.png new file mode 100644 index 00000000000..343702a8ac3 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Palette_01.png b/assets/wua/sprite/npc/Brokenuproot/Palette_01.png new file mode 100644 index 00000000000..056569899d7 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Palette_02.png b/assets/wua/sprite/npc/Brokenuproot/Palette_02.png new file mode 100644 index 00000000000..8eef2543980 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Palette_03.png b/assets/wua/sprite/npc/Brokenuproot/Palette_03.png new file mode 100644 index 00000000000..70cdf68f51a Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_00.png b/assets/wua/sprite/npc/Brokenuproot/Raster_00.png new file mode 100644 index 00000000000..8e895d77bff Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_01.png b/assets/wua/sprite/npc/Brokenuproot/Raster_01.png new file mode 100644 index 00000000000..0e86c3b8711 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_02.png b/assets/wua/sprite/npc/Brokenuproot/Raster_02.png new file mode 100644 index 00000000000..bb38436cf91 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_03.png b/assets/wua/sprite/npc/Brokenuproot/Raster_03.png new file mode 100644 index 00000000000..2648287617d Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_04.png b/assets/wua/sprite/npc/Brokenuproot/Raster_04.png new file mode 100644 index 00000000000..0de386b3f47 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_05.png b/assets/wua/sprite/npc/Brokenuproot/Raster_05.png new file mode 100644 index 00000000000..5668eedaed0 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_06.png b/assets/wua/sprite/npc/Brokenuproot/Raster_06.png new file mode 100644 index 00000000000..9d80f38b26b Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_07.png b/assets/wua/sprite/npc/Brokenuproot/Raster_07.png new file mode 100644 index 00000000000..2a945355a06 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_08.png b/assets/wua/sprite/npc/Brokenuproot/Raster_08.png new file mode 100644 index 00000000000..49d8198c744 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_09.png b/assets/wua/sprite/npc/Brokenuproot/Raster_09.png new file mode 100644 index 00000000000..91e5e237a00 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_0A.png b/assets/wua/sprite/npc/Brokenuproot/Raster_0A.png new file mode 100644 index 00000000000..9ac9d9d369e Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_0B.png b/assets/wua/sprite/npc/Brokenuproot/Raster_0B.png new file mode 100644 index 00000000000..6289564086b Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_0C.png b/assets/wua/sprite/npc/Brokenuproot/Raster_0C.png new file mode 100644 index 00000000000..596fba5e55b Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_0D.png b/assets/wua/sprite/npc/Brokenuproot/Raster_0D.png new file mode 100644 index 00000000000..df2498d17b1 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_0E.png b/assets/wua/sprite/npc/Brokenuproot/Raster_0E.png new file mode 100644 index 00000000000..c6d11f821bd Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_0F.png b/assets/wua/sprite/npc/Brokenuproot/Raster_0F.png new file mode 100644 index 00000000000..355babdc444 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_10.png b/assets/wua/sprite/npc/Brokenuproot/Raster_10.png new file mode 100644 index 00000000000..e5984fe08d9 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_11.png b/assets/wua/sprite/npc/Brokenuproot/Raster_11.png new file mode 100644 index 00000000000..f8e5bd43128 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_12.png b/assets/wua/sprite/npc/Brokenuproot/Raster_12.png new file mode 100644 index 00000000000..69b9d62b436 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_13.png b/assets/wua/sprite/npc/Brokenuproot/Raster_13.png new file mode 100644 index 00000000000..d07258386ad Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_14.png b/assets/wua/sprite/npc/Brokenuproot/Raster_14.png new file mode 100644 index 00000000000..b8795e7d1cb Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_15.png b/assets/wua/sprite/npc/Brokenuproot/Raster_15.png new file mode 100644 index 00000000000..4969eddeff5 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_16.png b/assets/wua/sprite/npc/Brokenuproot/Raster_16.png new file mode 100644 index 00000000000..73e5658bb91 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/Raster_17.png b/assets/wua/sprite/npc/Brokenuproot/Raster_17.png new file mode 100644 index 00000000000..e77c09444b3 Binary files /dev/null and b/assets/wua/sprite/npc/Brokenuproot/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Brokenuproot/SpriteSheet.xml b/assets/wua/sprite/npc/Brokenuproot/SpriteSheet.xml new file mode 100644 index 00000000000..f874b1c5013 --- /dev/null +++ b/assets/wua/sprite/npc/Brokenuproot/SpriteSheet.xml @@ -0,0 +1,1126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Bub/Palette_00.png b/assets/wua/sprite/npc/Bub/Palette_00.png new file mode 100644 index 00000000000..bc6fed9abc1 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Bub/Spikeball.png b/assets/wua/sprite/npc/Bub/Spikeball.png new file mode 100644 index 00000000000..87c00a26f3e Binary files /dev/null and b/assets/wua/sprite/npc/Bub/Spikeball.png differ diff --git a/assets/wua/sprite/npc/Bub/Spikeball_Palette.png b/assets/wua/sprite/npc/Bub/Spikeball_Palette.png new file mode 100644 index 00000000000..72be7e98032 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/Spikeball_Palette.png differ diff --git a/assets/wua/sprite/npc/Bub/SpriteSheet.xml b/assets/wua/sprite/npc/Bub/SpriteSheet.xml new file mode 100644 index 00000000000..6cf6e52f85a --- /dev/null +++ b/assets/wua/sprite/npc/Bub/SpriteSheet.xml @@ -0,0 +1,583 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Bub/bub1.png b/assets/wua/sprite/npc/Bub/bub1.png new file mode 100644 index 00000000000..0e67d064033 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/bub1.png differ diff --git a/assets/wua/sprite/npc/Bub/bub2.png b/assets/wua/sprite/npc/Bub/bub2.png new file mode 100644 index 00000000000..e11d7f22f28 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/bub2.png differ diff --git a/assets/wua/sprite/npc/Bub/bub3.png b/assets/wua/sprite/npc/Bub/bub3.png new file mode 100644 index 00000000000..2ed5a685899 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/bub3.png differ diff --git a/assets/wua/sprite/npc/Bub/bub4.png b/assets/wua/sprite/npc/Bub/bub4.png new file mode 100644 index 00000000000..a6c27b45c8f Binary files /dev/null and b/assets/wua/sprite/npc/Bub/bub4.png differ diff --git a/assets/wua/sprite/npc/Bub/burndead.png b/assets/wua/sprite/npc/Bub/burndead.png new file mode 100644 index 00000000000..460aa9b480d Binary files /dev/null and b/assets/wua/sprite/npc/Bub/burndead.png differ diff --git a/assets/wua/sprite/npc/Bub/burnpain1.png b/assets/wua/sprite/npc/Bub/burnpain1.png new file mode 100644 index 00000000000..e7abe32271e Binary files /dev/null and b/assets/wua/sprite/npc/Bub/burnpain1.png differ diff --git a/assets/wua/sprite/npc/Bub/burnpain2.png b/assets/wua/sprite/npc/Bub/burnpain2.png new file mode 100644 index 00000000000..ec1728d2992 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/burnpain2.png differ diff --git a/assets/wua/sprite/npc/Bub/dizzy1.png b/assets/wua/sprite/npc/Bub/dizzy1.png new file mode 100644 index 00000000000..0ed3484a542 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/dizzy1.png differ diff --git a/assets/wua/sprite/npc/Bub/dizzy2.png b/assets/wua/sprite/npc/Bub/dizzy2.png new file mode 100644 index 00000000000..b7b8d05a157 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/dizzy2.png differ diff --git a/assets/wua/sprite/npc/Bub/dizzy3.png b/assets/wua/sprite/npc/Bub/dizzy3.png new file mode 100644 index 00000000000..d20c0b37e67 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/dizzy3.png differ diff --git a/assets/wua/sprite/npc/Bub/dizzy4.png b/assets/wua/sprite/npc/Bub/dizzy4.png new file mode 100644 index 00000000000..b988d83dd4c Binary files /dev/null and b/assets/wua/sprite/npc/Bub/dizzy4.png differ diff --git a/assets/wua/sprite/npc/Bub/idlehold1.png b/assets/wua/sprite/npc/Bub/idlehold1.png new file mode 100644 index 00000000000..ca39d0d0117 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/idlehold1.png differ diff --git a/assets/wua/sprite/npc/Bub/idlehold2.png b/assets/wua/sprite/npc/Bub/idlehold2.png new file mode 100644 index 00000000000..0098bd07f80 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/idlehold2.png differ diff --git a/assets/wua/sprite/npc/Bub/idlehold3.png b/assets/wua/sprite/npc/Bub/idlehold3.png new file mode 100644 index 00000000000..4a28d10c9b2 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/idlehold3.png differ diff --git a/assets/wua/sprite/npc/Bub/idlehold4.png b/assets/wua/sprite/npc/Bub/idlehold4.png new file mode 100644 index 00000000000..a37f950511e Binary files /dev/null and b/assets/wua/sprite/npc/Bub/idlehold4.png differ diff --git a/assets/wua/sprite/npc/Bub/mouth.png b/assets/wua/sprite/npc/Bub/mouth.png new file mode 100644 index 00000000000..f809a6e1238 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/mouth.png differ diff --git a/assets/wua/sprite/npc/Bub/pain1.png b/assets/wua/sprite/npc/Bub/pain1.png new file mode 100644 index 00000000000..8a175f3b78a Binary files /dev/null and b/assets/wua/sprite/npc/Bub/pain1.png differ diff --git a/assets/wua/sprite/npc/Bub/pain2.png b/assets/wua/sprite/npc/Bub/pain2.png new file mode 100644 index 00000000000..d4e7670d49e Binary files /dev/null and b/assets/wua/sprite/npc/Bub/pain2.png differ diff --git a/assets/wua/sprite/npc/Bub/scaredrun1.png b/assets/wua/sprite/npc/Bub/scaredrun1.png new file mode 100644 index 00000000000..8acb9073ef5 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/scaredrun1.png differ diff --git a/assets/wua/sprite/npc/Bub/scaredrun2.png b/assets/wua/sprite/npc/Bub/scaredrun2.png new file mode 100644 index 00000000000..5ac3860fe84 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/scaredrun2.png differ diff --git a/assets/wua/sprite/npc/Bub/scaredrun3.png b/assets/wua/sprite/npc/Bub/scaredrun3.png new file mode 100644 index 00000000000..9794484d4cd Binary files /dev/null and b/assets/wua/sprite/npc/Bub/scaredrun3.png differ diff --git a/assets/wua/sprite/npc/Bub/spit.png b/assets/wua/sprite/npc/Bub/spit.png new file mode 100644 index 00000000000..f9a12bb2d2e Binary files /dev/null and b/assets/wua/sprite/npc/Bub/spit.png differ diff --git a/assets/wua/sprite/npc/Bub/talk.png b/assets/wua/sprite/npc/Bub/talk.png new file mode 100644 index 00000000000..489e3d31685 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/talk.png differ diff --git a/assets/wua/sprite/npc/Bub/talkhold.png b/assets/wua/sprite/npc/Bub/talkhold.png new file mode 100644 index 00000000000..d5cf520aa96 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/talkhold.png differ diff --git a/assets/wua/sprite/npc/Bub/throw1.png b/assets/wua/sprite/npc/Bub/throw1.png new file mode 100644 index 00000000000..6ba23bed8ca Binary files /dev/null and b/assets/wua/sprite/npc/Bub/throw1.png differ diff --git a/assets/wua/sprite/npc/Bub/throw2.png b/assets/wua/sprite/npc/Bub/throw2.png new file mode 100644 index 00000000000..d12c1ffd70d Binary files /dev/null and b/assets/wua/sprite/npc/Bub/throw2.png differ diff --git a/assets/wua/sprite/npc/Bub/throw3.png b/assets/wua/sprite/npc/Bub/throw3.png new file mode 100644 index 00000000000..b5df9463b37 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/throw3.png differ diff --git a/assets/wua/sprite/npc/Bub/walk1.png b/assets/wua/sprite/npc/Bub/walk1.png new file mode 100644 index 00000000000..7a75391c9ed Binary files /dev/null and b/assets/wua/sprite/npc/Bub/walk1.png differ diff --git a/assets/wua/sprite/npc/Bub/walk2.png b/assets/wua/sprite/npc/Bub/walk2.png new file mode 100644 index 00000000000..b2f05ffb7fc Binary files /dev/null and b/assets/wua/sprite/npc/Bub/walk2.png differ diff --git a/assets/wua/sprite/npc/Bub/walkhold1.png b/assets/wua/sprite/npc/Bub/walkhold1.png new file mode 100644 index 00000000000..4b0acdd69d8 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/walkhold1.png differ diff --git a/assets/wua/sprite/npc/Bub/walkhold2.png b/assets/wua/sprite/npc/Bub/walkhold2.png new file mode 100644 index 00000000000..fa9831369b1 Binary files /dev/null and b/assets/wua/sprite/npc/Bub/walkhold2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/SpriteSheet.xml b/assets/wua/sprite/npc/Bugsy/SpriteSheet.xml new file mode 100644 index 00000000000..51bba68a055 --- /dev/null +++ b/assets/wua/sprite/npc/Bugsy/SpriteSheet.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Bugsy/bubble1.pal.png b/assets/wua/sprite/npc/Bugsy/bubble1.pal.png new file mode 100644 index 00000000000..e1f3a341413 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/bubble1.pal.png differ diff --git a/assets/wua/sprite/npc/Bugsy/bubble2.png b/assets/wua/sprite/npc/Bugsy/bubble2.png new file mode 100644 index 00000000000..c15731f12b9 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/bubble2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/bubble3.png b/assets/wua/sprite/npc/Bugsy/bubble3.png new file mode 100644 index 00000000000..49d0de823b9 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/bubble3.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle1.pal.png b/assets/wua/sprite/npc/Bugsy/idle1.pal.png new file mode 100644 index 00000000000..38e54aa47dc Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle1.pal.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle1.png b/assets/wua/sprite/npc/Bugsy/idle1.png new file mode 100644 index 00000000000..38e54aa47dc Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle2.png b/assets/wua/sprite/npc/Bugsy/idle2.png new file mode 100644 index 00000000000..00d4eeb3eb4 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle3.png b/assets/wua/sprite/npc/Bugsy/idle3.png new file mode 100644 index 00000000000..2fabcb38236 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle3.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle4.png b/assets/wua/sprite/npc/Bugsy/idle4.png new file mode 100644 index 00000000000..a31b0ff19cd Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle4.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle_frown1.png b/assets/wua/sprite/npc/Bugsy/idle_frown1.png new file mode 100644 index 00000000000..e643734d6ee Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle_frown1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle_frown2.png b/assets/wua/sprite/npc/Bugsy/idle_frown2.png new file mode 100644 index 00000000000..0f78d83d95c Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle_frown2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle_frown3.png b/assets/wua/sprite/npc/Bugsy/idle_frown3.png new file mode 100644 index 00000000000..d2b6228735a Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle_frown3.png differ diff --git a/assets/wua/sprite/npc/Bugsy/idle_frown4.png b/assets/wua/sprite/npc/Bugsy/idle_frown4.png new file mode 100644 index 00000000000..570577b5375 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/idle_frown4.png differ diff --git a/assets/wua/sprite/npc/Bugsy/rise1.png b/assets/wua/sprite/npc/Bugsy/rise1.png new file mode 100644 index 00000000000..293a433e2a2 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/rise1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/rise2.png b/assets/wua/sprite/npc/Bugsy/rise2.png new file mode 100644 index 00000000000..5fee95f57cd Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/rise2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/sleep1.png b/assets/wua/sprite/npc/Bugsy/sleep1.png new file mode 100644 index 00000000000..2389d2cc695 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/sleep1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/sleep2.png b/assets/wua/sprite/npc/Bugsy/sleep2.png new file mode 100644 index 00000000000..cb1893f7501 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/sleep2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/talk1.png b/assets/wua/sprite/npc/Bugsy/talk1.png new file mode 100644 index 00000000000..cd4334d6385 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/talk1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/talk2.png b/assets/wua/sprite/npc/Bugsy/talk2.png new file mode 100644 index 00000000000..1cfa002666f Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/talk2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/talk_frown1.png b/assets/wua/sprite/npc/Bugsy/talk_frown1.png new file mode 100644 index 00000000000..1c486ef3373 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/talk_frown1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/talk_frown2.png b/assets/wua/sprite/npc/Bugsy/talk_frown2.png new file mode 100644 index 00000000000..a840bf6f70a Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/talk_frown2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk1.png b/assets/wua/sprite/npc/Bugsy/walk1.png new file mode 100644 index 00000000000..646f736cf77 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk2.png b/assets/wua/sprite/npc/Bugsy/walk2.png new file mode 100644 index 00000000000..3b0de6fdb85 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk3.png b/assets/wua/sprite/npc/Bugsy/walk3.png new file mode 100644 index 00000000000..a3e99e40167 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk3.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk4.png b/assets/wua/sprite/npc/Bugsy/walk4.png new file mode 100644 index 00000000000..7af5d740928 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk4.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk_frown1.png b/assets/wua/sprite/npc/Bugsy/walk_frown1.png new file mode 100644 index 00000000000..329dc1c1c42 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk_frown1.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk_frown2.png b/assets/wua/sprite/npc/Bugsy/walk_frown2.png new file mode 100644 index 00000000000..bf72388b625 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk_frown2.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk_frown3.png b/assets/wua/sprite/npc/Bugsy/walk_frown3.png new file mode 100644 index 00000000000..4300dd58a30 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk_frown3.png differ diff --git a/assets/wua/sprite/npc/Bugsy/walk_frown4.png b/assets/wua/sprite/npc/Bugsy/walk_frown4.png new file mode 100644 index 00000000000..94454266808 Binary files /dev/null and b/assets/wua/sprite/npc/Bugsy/walk_frown4.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/BWing1.pal.png b/assets/wua/sprite/npc/Bzzyguard/BWing1.pal.png new file mode 100644 index 00000000000..45ca781334d Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/BWing1.pal.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/BWing1.png b/assets/wua/sprite/npc/Bzzyguard/BWing1.png new file mode 100644 index 00000000000..021e47ff54a Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/BWing1.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/BWing2.png b/assets/wua/sprite/npc/Bzzyguard/BWing2.png new file mode 100644 index 00000000000..5cc5e3bc168 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/BWing2.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/BWing3.png b/assets/wua/sprite/npc/Bzzyguard/BWing3.png new file mode 100644 index 00000000000..9b97f812e40 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/BWing3.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/BWing4.png b/assets/wua/sprite/npc/Bzzyguard/BWing4.png new file mode 100644 index 00000000000..6972306351f Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/BWing4.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/FWing1.png b/assets/wua/sprite/npc/Bzzyguard/FWing1.png new file mode 100644 index 00000000000..84e5e36cff3 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/FWing1.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/FWing2.png b/assets/wua/sprite/npc/Bzzyguard/FWing2.png new file mode 100644 index 00000000000..68272ff5afb Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/FWing2.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/FWing3.png b/assets/wua/sprite/npc/Bzzyguard/FWing3.png new file mode 100644 index 00000000000..b6699a85d53 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/FWing3.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/FWing4.png b/assets/wua/sprite/npc/Bzzyguard/FWing4.png new file mode 100644 index 00000000000..6960f643868 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/FWing4.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Palette_00.png b/assets/wua/sprite/npc/Bzzyguard/Palette_00.png new file mode 100644 index 00000000000..b3bd4c3eb0a Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_00.png b/assets/wua/sprite/npc/Bzzyguard/Raster_00.png new file mode 100644 index 00000000000..de6f7259ca5 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_01.png b/assets/wua/sprite/npc/Bzzyguard/Raster_01.png new file mode 100644 index 00000000000..8d540b3f3da Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_02.png b/assets/wua/sprite/npc/Bzzyguard/Raster_02.png new file mode 100644 index 00000000000..372cb16b0b7 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_03.png b/assets/wua/sprite/npc/Bzzyguard/Raster_03.png new file mode 100644 index 00000000000..7d82edae365 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_04.png b/assets/wua/sprite/npc/Bzzyguard/Raster_04.png new file mode 100644 index 00000000000..08db4a49700 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_05.png b/assets/wua/sprite/npc/Bzzyguard/Raster_05.png new file mode 100644 index 00000000000..1201115e21b Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_06.png b/assets/wua/sprite/npc/Bzzyguard/Raster_06.png new file mode 100644 index 00000000000..296102b5078 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_07.png b/assets/wua/sprite/npc/Bzzyguard/Raster_07.png new file mode 100644 index 00000000000..63f249d31ed Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_08.png b/assets/wua/sprite/npc/Bzzyguard/Raster_08.png new file mode 100644 index 00000000000..013f2f8a1de Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_09.png b/assets/wua/sprite/npc/Bzzyguard/Raster_09.png new file mode 100644 index 00000000000..1b9f7dd4b0d Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_0A.png b/assets/wua/sprite/npc/Bzzyguard/Raster_0A.png new file mode 100644 index 00000000000..fa87e280a84 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/Raster_0B.png b/assets/wua/sprite/npc/Bzzyguard/Raster_0B.png new file mode 100644 index 00000000000..595993627b3 Binary files /dev/null and b/assets/wua/sprite/npc/Bzzyguard/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Bzzyguard/SpriteSheet.xml b/assets/wua/sprite/npc/Bzzyguard/SpriteSheet.xml new file mode 100644 index 00000000000..88a963d4581 --- /dev/null +++ b/assets/wua/sprite/npc/Bzzyguard/SpriteSheet.xml @@ -0,0 +1,604 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Catchem/Palette_00.png b/assets/wua/sprite/npc/Catchem/Palette_00.png new file mode 100644 index 00000000000..76366257e48 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_01.png b/assets/wua/sprite/npc/Catchem/Palette_01.png new file mode 100644 index 00000000000..a0fdefe2663 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_02.png b/assets/wua/sprite/npc/Catchem/Palette_02.png new file mode 100644 index 00000000000..fbb88bea51b Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_03.png b/assets/wua/sprite/npc/Catchem/Palette_03.png new file mode 100644 index 00000000000..1b9618f9bd8 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_04.png b/assets/wua/sprite/npc/Catchem/Palette_04.png new file mode 100644 index 00000000000..3fbe80d973a Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_05.png b/assets/wua/sprite/npc/Catchem/Palette_05.png new file mode 100644 index 00000000000..ecef3d8b542 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_06.png b/assets/wua/sprite/npc/Catchem/Palette_06.png new file mode 100644 index 00000000000..91864024a53 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_06.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_07.png b/assets/wua/sprite/npc/Catchem/Palette_07.png new file mode 100644 index 00000000000..f4cedf4248d Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_07.png differ diff --git a/assets/wua/sprite/npc/Catchem/Palette_08.png b/assets/wua/sprite/npc/Catchem/Palette_08.png new file mode 100644 index 00000000000..793479e1be9 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Palette_08.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_00.png b/assets/wua/sprite/npc/Catchem/Raster_00.png new file mode 100644 index 00000000000..ef57627c754 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_01.png b/assets/wua/sprite/npc/Catchem/Raster_01.png new file mode 100644 index 00000000000..91a1a4c6b18 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_02.png b/assets/wua/sprite/npc/Catchem/Raster_02.png new file mode 100644 index 00000000000..7bf0b09d602 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_03.png b/assets/wua/sprite/npc/Catchem/Raster_03.png new file mode 100644 index 00000000000..75fd7305e50 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_04.png b/assets/wua/sprite/npc/Catchem/Raster_04.png new file mode 100644 index 00000000000..5c2ac73aefd Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_05.png b/assets/wua/sprite/npc/Catchem/Raster_05.png new file mode 100644 index 00000000000..d28e07851ea Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_06.png b/assets/wua/sprite/npc/Catchem/Raster_06.png new file mode 100644 index 00000000000..f96f430b184 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_07.png b/assets/wua/sprite/npc/Catchem/Raster_07.png new file mode 100644 index 00000000000..66b396a13cf Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_08.png b/assets/wua/sprite/npc/Catchem/Raster_08.png new file mode 100644 index 00000000000..0c1d07fe43d Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_09.png b/assets/wua/sprite/npc/Catchem/Raster_09.png new file mode 100644 index 00000000000..2acd665c261 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_0A.png b/assets/wua/sprite/npc/Catchem/Raster_0A.png new file mode 100644 index 00000000000..81f9709918b Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_0B.png b/assets/wua/sprite/npc/Catchem/Raster_0B.png new file mode 100644 index 00000000000..ecbfe997dcf Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_0C.png b/assets/wua/sprite/npc/Catchem/Raster_0C.png new file mode 100644 index 00000000000..0b988f4364b Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_0D.png b/assets/wua/sprite/npc/Catchem/Raster_0D.png new file mode 100644 index 00000000000..13cce2131b4 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_0E.png b/assets/wua/sprite/npc/Catchem/Raster_0E.png new file mode 100644 index 00000000000..a0fdefe2663 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_0F.png b/assets/wua/sprite/npc/Catchem/Raster_0F.png new file mode 100644 index 00000000000..793479e1be9 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_10.png b/assets/wua/sprite/npc/Catchem/Raster_10.png new file mode 100644 index 00000000000..572db8936a5 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_11.png b/assets/wua/sprite/npc/Catchem/Raster_11.png new file mode 100644 index 00000000000..6865b226e38 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_12.png b/assets/wua/sprite/npc/Catchem/Raster_12.png new file mode 100644 index 00000000000..b63a36c7b43 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_13.png b/assets/wua/sprite/npc/Catchem/Raster_13.png new file mode 100644 index 00000000000..fa09d5f0cd1 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_14.png b/assets/wua/sprite/npc/Catchem/Raster_14.png new file mode 100644 index 00000000000..77dfa65d3ab Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_15.png b/assets/wua/sprite/npc/Catchem/Raster_15.png new file mode 100644 index 00000000000..8d4c7238c97 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_16.png b/assets/wua/sprite/npc/Catchem/Raster_16.png new file mode 100644 index 00000000000..b86cec8c6de Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_17.png b/assets/wua/sprite/npc/Catchem/Raster_17.png new file mode 100644 index 00000000000..f4a7d3680a0 Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_18.png b/assets/wua/sprite/npc/Catchem/Raster_18.png new file mode 100644 index 00000000000..d0b4ac318cb Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Catchem/Raster_19.png b/assets/wua/sprite/npc/Catchem/Raster_19.png new file mode 100644 index 00000000000..4d51908d3ea Binary files /dev/null and b/assets/wua/sprite/npc/Catchem/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Catchem/SpriteSheet.xml b/assets/wua/sprite/npc/Catchem/SpriteSheet.xml new file mode 100644 index 00000000000..0bf557bc745 --- /dev/null +++ b/assets/wua/sprite/npc/Catchem/SpriteSheet.xml @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Celeste/Palette_00.png b/assets/wua/sprite/npc/Celeste/Palette_00.png new file mode 100644 index 00000000000..0539adb5122 Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Celeste/SpriteSheet.xml b/assets/wua/sprite/npc/Celeste/SpriteSheet.xml new file mode 100644 index 00000000000..c34a83b2f17 --- /dev/null +++ b/assets/wua/sprite/npc/Celeste/SpriteSheet.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Celeste/celesteidle.gif b/assets/wua/sprite/npc/Celeste/celesteidle.gif new file mode 100644 index 00000000000..88d2a684619 Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/celesteidle.gif differ diff --git a/assets/wua/sprite/npc/Celeste/idle1.png b/assets/wua/sprite/npc/Celeste/idle1.png new file mode 100644 index 00000000000..6993fabf1df Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/idle1.png differ diff --git a/assets/wua/sprite/npc/Celeste/idle2.png b/assets/wua/sprite/npc/Celeste/idle2.png new file mode 100644 index 00000000000..a95babc8e5b Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/idle2.png differ diff --git a/assets/wua/sprite/npc/Celeste/talk1.png b/assets/wua/sprite/npc/Celeste/talk1.png new file mode 100644 index 00000000000..a95babc8e5b Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/talk1.png differ diff --git a/assets/wua/sprite/npc/Celeste/talk2.png b/assets/wua/sprite/npc/Celeste/talk2.png new file mode 100644 index 00000000000..1c1e1f4d55e Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/talk2.png differ diff --git a/assets/wua/sprite/npc/Celeste/walk1.png b/assets/wua/sprite/npc/Celeste/walk1.png new file mode 100644 index 00000000000..ebef5ea20ec Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/walk1.png differ diff --git a/assets/wua/sprite/npc/Celeste/walk2.png b/assets/wua/sprite/npc/Celeste/walk2.png new file mode 100644 index 00000000000..77cdfee600e Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/walk2.png differ diff --git a/assets/wua/sprite/npc/Celeste/walk3.png b/assets/wua/sprite/npc/Celeste/walk3.png new file mode 100644 index 00000000000..8e9b5b349fd Binary files /dev/null and b/assets/wua/sprite/npc/Celeste/walk3.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/ChainChamp1.png b/assets/wua/sprite/npc/Chainchamp/ChainChamp1.png new file mode 100644 index 00000000000..b57baf58047 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/ChainChamp1.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/ChainChamp2.png b/assets/wua/sprite/npc/Chainchamp/ChainChamp2.png new file mode 100644 index 00000000000..7e617bfc1e2 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/ChainChamp2.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/ChainLink.png b/assets/wua/sprite/npc/Chainchamp/ChainLink.png new file mode 100644 index 00000000000..9f7c800d960 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/ChainLink.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/CrownA3.png b/assets/wua/sprite/npc/Chainchamp/CrownA3.png new file mode 100644 index 00000000000..5005556c4b6 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/CrownA3.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Dizzy1.png b/assets/wua/sprite/npc/Chainchamp/Dizzy1.png new file mode 100644 index 00000000000..b9b6cd20ff7 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Dizzy1.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Dizzy2.png b/assets/wua/sprite/npc/Chainchamp/Dizzy2.png new file mode 100644 index 00000000000..25162def0bc Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Dizzy2.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Dizzy3.png b/assets/wua/sprite/npc/Chainchamp/Dizzy3.png new file mode 100644 index 00000000000..ec25387ca0e Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Dizzy3.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Dizzy4.png b/assets/wua/sprite/npc/Chainchamp/Dizzy4.png new file mode 100644 index 00000000000..463951e8e47 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Dizzy4.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Hurt1.png b/assets/wua/sprite/npc/Chainchamp/Hurt1.png new file mode 100644 index 00000000000..51b5dc18f80 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Hurt1.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Hurt2.png b/assets/wua/sprite/npc/Chainchamp/Hurt2.png new file mode 100644 index 00000000000..0c4fefbc70f Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Hurt2.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Palette_04.png b/assets/wua/sprite/npc/Chainchamp/Palette_04.png new file mode 100644 index 00000000000..3a014c7cb44 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/Sleep.png b/assets/wua/sprite/npc/Chainchamp/Sleep.png new file mode 100644 index 00000000000..d4c84637367 Binary files /dev/null and b/assets/wua/sprite/npc/Chainchamp/Sleep.png differ diff --git a/assets/wua/sprite/npc/Chainchamp/SpriteSheet.xml b/assets/wua/sprite/npc/Chainchamp/SpriteSheet.xml new file mode 100644 index 00000000000..0fa7c57d887 --- /dev/null +++ b/assets/wua/sprite/npc/Chainchamp/SpriteSheet.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_00.png b/assets/wua/sprite/npc/CheepCheep/Palette_00.png new file mode 100644 index 00000000000..b1556f8af6d Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_00.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_01.png b/assets/wua/sprite/npc/CheepCheep/Palette_01.png new file mode 100644 index 00000000000..7fffca7e6e3 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_01.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_02.png b/assets/wua/sprite/npc/CheepCheep/Palette_02.png new file mode 100644 index 00000000000..3caa19d8307 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_02.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_03.png b/assets/wua/sprite/npc/CheepCheep/Palette_03.png new file mode 100644 index 00000000000..db82108647a Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_03.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_04.png b/assets/wua/sprite/npc/CheepCheep/Palette_04.png new file mode 100644 index 00000000000..db82108647a Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_04.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_05.png b/assets/wua/sprite/npc/CheepCheep/Palette_05.png new file mode 100644 index 00000000000..db82108647a Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_05.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_06.png b/assets/wua/sprite/npc/CheepCheep/Palette_06.png new file mode 100644 index 00000000000..732c53ff2dc Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_06.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_07.png b/assets/wua/sprite/npc/CheepCheep/Palette_07.png new file mode 100644 index 00000000000..732c53ff2dc Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_07.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_08.png b/assets/wua/sprite/npc/CheepCheep/Palette_08.png new file mode 100644 index 00000000000..732c53ff2dc Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_08.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_09.png b/assets/wua/sprite/npc/CheepCheep/Palette_09.png new file mode 100644 index 00000000000..09c2c902724 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_09.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_0A.png b/assets/wua/sprite/npc/CheepCheep/Palette_0A.png new file mode 100644 index 00000000000..09c2c902724 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_0A.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_0B.png b/assets/wua/sprite/npc/CheepCheep/Palette_0B.png new file mode 100644 index 00000000000..09c2c902724 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_0B.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_0C.png b/assets/wua/sprite/npc/CheepCheep/Palette_0C.png new file mode 100644 index 00000000000..e1542f63509 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_0C.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Palette_0D.png b/assets/wua/sprite/npc/CheepCheep/Palette_0D.png new file mode 100644 index 00000000000..1ac217fb630 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Palette_0D.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_05.png b/assets/wua/sprite/npc/CheepCheep/Raster_05.png new file mode 100644 index 00000000000..e3826ee9b80 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_05.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_06.png b/assets/wua/sprite/npc/CheepCheep/Raster_06.png new file mode 100644 index 00000000000..b6177767d1b Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_06.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_07.png b/assets/wua/sprite/npc/CheepCheep/Raster_07.png new file mode 100644 index 00000000000..2c2a02826ab Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_07.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_08.png b/assets/wua/sprite/npc/CheepCheep/Raster_08.png new file mode 100644 index 00000000000..a11135e8232 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_08.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_09.png b/assets/wua/sprite/npc/CheepCheep/Raster_09.png new file mode 100644 index 00000000000..7505320a4fa Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_09.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_0A.png b/assets/wua/sprite/npc/CheepCheep/Raster_0A.png new file mode 100644 index 00000000000..594ab7be652 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_0B.png b/assets/wua/sprite/npc/CheepCheep/Raster_0B.png new file mode 100644 index 00000000000..ed3098a1c28 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_0C.png b/assets/wua/sprite/npc/CheepCheep/Raster_0C.png new file mode 100644 index 00000000000..e02f550efdb Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_0D.png b/assets/wua/sprite/npc/CheepCheep/Raster_0D.png new file mode 100644 index 00000000000..6bcbd270fb9 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_0E.png b/assets/wua/sprite/npc/CheepCheep/Raster_0E.png new file mode 100644 index 00000000000..70bf12d6394 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_0F.png b/assets/wua/sprite/npc/CheepCheep/Raster_0F.png new file mode 100644 index 00000000000..2661a0e23f3 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_10.png b/assets/wua/sprite/npc/CheepCheep/Raster_10.png new file mode 100644 index 00000000000..403f58920a2 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_10.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_11.png b/assets/wua/sprite/npc/CheepCheep/Raster_11.png new file mode 100644 index 00000000000..7a69458a687 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_11.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_12.png b/assets/wua/sprite/npc/CheepCheep/Raster_12.png new file mode 100644 index 00000000000..ae0514ce20d Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_12.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_13.png b/assets/wua/sprite/npc/CheepCheep/Raster_13.png new file mode 100644 index 00000000000..087b5bfc5d7 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_13.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_14.png b/assets/wua/sprite/npc/CheepCheep/Raster_14.png new file mode 100644 index 00000000000..10f7d77f8e2 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_14.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_15.png b/assets/wua/sprite/npc/CheepCheep/Raster_15.png new file mode 100644 index 00000000000..e4fbf1adc77 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_15.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_16.png b/assets/wua/sprite/npc/CheepCheep/Raster_16.png new file mode 100644 index 00000000000..24bc3363325 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_16.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_17.png b/assets/wua/sprite/npc/CheepCheep/Raster_17.png new file mode 100644 index 00000000000..ed540f9677a Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_17.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_18.png b/assets/wua/sprite/npc/CheepCheep/Raster_18.png new file mode 100644 index 00000000000..a3178ef7a99 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_18.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_19.png b/assets/wua/sprite/npc/CheepCheep/Raster_19.png new file mode 100644 index 00000000000..6c3a0250f6d Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_19.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/Raster_1A.png b/assets/wua/sprite/npc/CheepCheep/Raster_1A.png new file mode 100644 index 00000000000..1ac217fb630 Binary files /dev/null and b/assets/wua/sprite/npc/CheepCheep/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/CheepCheep/SpriteSheet.xml b/assets/wua/sprite/npc/CheepCheep/SpriteSheet.xml new file mode 100644 index 00000000000..1e020ed780e --- /dev/null +++ b/assets/wua/sprite/npc/CheepCheep/SpriteSheet.xml @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_00.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_00.png new file mode 100644 index 00000000000..4b227feb4f5 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_00.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_01.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_01.png new file mode 100644 index 00000000000..7cad3bf8599 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_01.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_02.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_02.png new file mode 100644 index 00000000000..da1c854648e Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_02.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_03.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_03.png new file mode 100644 index 00000000000..666a4ce4578 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_03.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_04.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_04.png new file mode 100644 index 00000000000..731d984326c Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_04.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_05.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_05.png new file mode 100644 index 00000000000..08a2e810dc7 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_05.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_06.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_06.png new file mode 100644 index 00000000000..c7841203344 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_06.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_07.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_07.png new file mode 100644 index 00000000000..546aee754b4 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_07.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Palette_08.png b/assets/wua/sprite/npc/ChiefScrubba/Palette_08.png new file mode 100644 index 00000000000..6b7e52bbb59 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Palette_08.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_01.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_01.png new file mode 100644 index 00000000000..731d984326c Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_01.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_02.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_02.png new file mode 100644 index 00000000000..bbe0c6b838e Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_02.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_03.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_03.png new file mode 100644 index 00000000000..89941faa04b Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_03.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_03_new.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_03_new.png new file mode 100644 index 00000000000..c0a5c500012 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_03_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_04.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_04.png new file mode 100644 index 00000000000..b40d5feba02 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_04.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_04_new.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_04_new.png new file mode 100644 index 00000000000..fd4db32634d Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_04_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_05.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_05.png new file mode 100644 index 00000000000..ee59f984f24 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_05.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_05_new.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_05_new.png new file mode 100644 index 00000000000..7dfb22888ef Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_05_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_06.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_06.png new file mode 100644 index 00000000000..def9acb7b59 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_06.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_07.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_07.png new file mode 100644 index 00000000000..de5d6414c69 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_07.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_07_new.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_07_new.png new file mode 100644 index 00000000000..5bb3752a42c Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_07_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_08.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_08.png new file mode 100644 index 00000000000..eb164792faf Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_08.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_08_new.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_08_new.png new file mode 100644 index 00000000000..ae14b80d8b5 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_08_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_09.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_09.png new file mode 100644 index 00000000000..842a46ec800 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_09.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_0A.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_0A.png new file mode 100644 index 00000000000..80421d777d7 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_0A_new.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_0A_new.png new file mode 100644 index 00000000000..2102cf7b2b3 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_0A_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_0B.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_0B.png new file mode 100644 index 00000000000..cf94c979939 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_0D.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_0D.png new file mode 100644 index 00000000000..f9d76ee496d Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_0E.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_0E.png new file mode 100644 index 00000000000..113c4b3cd50 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_0F.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_0F.png new file mode 100644 index 00000000000..e1d97b12bfa Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_10.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_10.png new file mode 100644 index 00000000000..f31e0d018cd Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_10.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_11.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_11.png new file mode 100644 index 00000000000..f0f43346905 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_11.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/Raster_12.png b/assets/wua/sprite/npc/ChiefScrubba/Raster_12.png new file mode 100644 index 00000000000..39a6071403c Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/Raster_12.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/SpriteSheet.xml b/assets/wua/sprite/npc/ChiefScrubba/SpriteSheet.xml new file mode 100644 index 00000000000..7f64aaca9d2 --- /dev/null +++ b/assets/wua/sprite/npc/ChiefScrubba/SpriteSheet.xml @@ -0,0 +1,4753 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/ChiefScrubba/arm_side.png b/assets/wua/sprite/npc/ChiefScrubba/arm_side.png new file mode 100644 index 00000000000..416e8617114 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/arm_side.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/burn1.png b/assets/wua/sprite/npc/ChiefScrubba/burn1.png new file mode 100644 index 00000000000..694cfbf09e3 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/burn1.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/burn2.png b/assets/wua/sprite/npc/ChiefScrubba/burn2.png new file mode 100644 index 00000000000..a700d7d0746 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/burn2.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/burn_arm.png b/assets/wua/sprite/npc/ChiefScrubba/burn_arm.png new file mode 100644 index 00000000000..d1356798d14 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/burn_arm.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/burn_club.png b/assets/wua/sprite/npc/ChiefScrubba/burn_club.png new file mode 100644 index 00000000000..5bd030a8fa8 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/burn_club.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/burn_dead.png b/assets/wua/sprite/npc/ChiefScrubba/burn_dead.png new file mode 100644 index 00000000000..fbd7d276407 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/burn_dead.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dead.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dead.png new file mode 100644 index 00000000000..ba744718f37 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dead.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dead_new.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dead_new.png new file mode 100644 index 00000000000..17f44a6e192 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dead_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy1.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy1.png new file mode 100644 index 00000000000..64f43f6f248 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy1.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy1_new.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy1_new.png new file mode 100644 index 00000000000..483cf617bff Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy1_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy2.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy2.png new file mode 100644 index 00000000000..a2369e10da8 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy2.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy2_new.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy2_new.png new file mode 100644 index 00000000000..1ec1eda2399 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy2_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy3.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy3.png new file mode 100644 index 00000000000..db00f253db2 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy3.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy3_new.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy3_new.png new file mode 100644 index 00000000000..70885935f60 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy3_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy4.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy4.png new file mode 100644 index 00000000000..3e98676cd6a Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy4.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy4_new.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy4_new.png new file mode 100644 index 00000000000..6af9384fc53 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_dizzy4_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_pain.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_pain.png new file mode 100644 index 00000000000..ff9971976dd Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_pain.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_pain_new.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_pain_new.png new file mode 100644 index 00000000000..445a6dc3af8 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_pain_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_sleep.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_sleep.png new file mode 100644 index 00000000000..992e35f215a Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_sleep.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/eyes_sleep_new.png b/assets/wua/sprite/npc/ChiefScrubba/eyes_sleep_new.png new file mode 100644 index 00000000000..149ed90ca94 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/eyes_sleep_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/mouth_tongue.png b/assets/wua/sprite/npc/ChiefScrubba/mouth_tongue.png new file mode 100644 index 00000000000..e2cefbb70f4 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/mouth_tongue.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/mouth_tongue_new.png b/assets/wua/sprite/npc/ChiefScrubba/mouth_tongue_new.png new file mode 100644 index 00000000000..59a3416b5a9 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/mouth_tongue_new.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/sit_front1.png b/assets/wua/sprite/npc/ChiefScrubba/sit_front1.png new file mode 100644 index 00000000000..c669c4a092f Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/sit_front1.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/sit_front2.png b/assets/wua/sprite/npc/ChiefScrubba/sit_front2.png new file mode 100644 index 00000000000..4e0a48564f5 Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/sit_front2.png differ diff --git a/assets/wua/sprite/npc/ChiefScrubba/teardrop.png b/assets/wua/sprite/npc/ChiefScrubba/teardrop.png new file mode 100644 index 00000000000..c47ce51496f Binary files /dev/null and b/assets/wua/sprite/npc/ChiefScrubba/teardrop.png differ diff --git a/assets/wua/sprite/npc/Chub/Palette_00.png b/assets/wua/sprite/npc/Chub/Palette_00.png new file mode 100644 index 00000000000..a9bbc49a989 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Chub/Spikeball.png b/assets/wua/sprite/npc/Chub/Spikeball.png new file mode 100644 index 00000000000..87c00a26f3e Binary files /dev/null and b/assets/wua/sprite/npc/Chub/Spikeball.png differ diff --git a/assets/wua/sprite/npc/Chub/SpikeballBig.png b/assets/wua/sprite/npc/Chub/SpikeballBig.png new file mode 100644 index 00000000000..9698cc863c5 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/SpikeballBig.png differ diff --git a/assets/wua/sprite/npc/Chub/Spikeball_Palette.png b/assets/wua/sprite/npc/Chub/Spikeball_Palette.png new file mode 100644 index 00000000000..72be7e98032 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/Spikeball_Palette.png differ diff --git a/assets/wua/sprite/npc/Chub/SpriteSheet.xml b/assets/wua/sprite/npc/Chub/SpriteSheet.xml new file mode 100644 index 00000000000..03fb0f95df6 --- /dev/null +++ b/assets/wua/sprite/npc/Chub/SpriteSheet.xml @@ -0,0 +1,631 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Chub/burndead.png b/assets/wua/sprite/npc/Chub/burndead.png new file mode 100644 index 00000000000..a9833718ba2 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/burndead.png differ diff --git a/assets/wua/sprite/npc/Chub/burnpain1.png b/assets/wua/sprite/npc/Chub/burnpain1.png new file mode 100644 index 00000000000..6a685d40cc9 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/burnpain1.png differ diff --git a/assets/wua/sprite/npc/Chub/burnpain2.png b/assets/wua/sprite/npc/Chub/burnpain2.png new file mode 100644 index 00000000000..f462443a1dd Binary files /dev/null and b/assets/wua/sprite/npc/Chub/burnpain2.png differ diff --git a/assets/wua/sprite/npc/Chub/dizzy1.png b/assets/wua/sprite/npc/Chub/dizzy1.png new file mode 100644 index 00000000000..1436aa9448a Binary files /dev/null and b/assets/wua/sprite/npc/Chub/dizzy1.png differ diff --git a/assets/wua/sprite/npc/Chub/dizzy2.png b/assets/wua/sprite/npc/Chub/dizzy2.png new file mode 100644 index 00000000000..4428214599e Binary files /dev/null and b/assets/wua/sprite/npc/Chub/dizzy2.png differ diff --git a/assets/wua/sprite/npc/Chub/dizzy3.png b/assets/wua/sprite/npc/Chub/dizzy3.png new file mode 100644 index 00000000000..5212398d6ea Binary files /dev/null and b/assets/wua/sprite/npc/Chub/dizzy3.png differ diff --git a/assets/wua/sprite/npc/Chub/dizzy4.png b/assets/wua/sprite/npc/Chub/dizzy4.png new file mode 100644 index 00000000000..65f9f4b34a5 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/dizzy4.png differ diff --git a/assets/wua/sprite/npc/Chub/holdtalk.png b/assets/wua/sprite/npc/Chub/holdtalk.png new file mode 100644 index 00000000000..0dcf3b6510e Binary files /dev/null and b/assets/wua/sprite/npc/Chub/holdtalk.png differ diff --git a/assets/wua/sprite/npc/Chub/holdwalk1.png b/assets/wua/sprite/npc/Chub/holdwalk1.png new file mode 100644 index 00000000000..9854f671faf Binary files /dev/null and b/assets/wua/sprite/npc/Chub/holdwalk1.png differ diff --git a/assets/wua/sprite/npc/Chub/holdwalk2.png b/assets/wua/sprite/npc/Chub/holdwalk2.png new file mode 100644 index 00000000000..8e00469ff95 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/holdwalk2.png differ diff --git a/assets/wua/sprite/npc/Chub/idle1.png b/assets/wua/sprite/npc/Chub/idle1.png new file mode 100644 index 00000000000..133ab60cee2 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idle1.png differ diff --git a/assets/wua/sprite/npc/Chub/idle2.png b/assets/wua/sprite/npc/Chub/idle2.png new file mode 100644 index 00000000000..3bdb04be9bc Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idle2.png differ diff --git a/assets/wua/sprite/npc/Chub/idle3.png b/assets/wua/sprite/npc/Chub/idle3.png new file mode 100644 index 00000000000..736c075fde0 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idle3.png differ diff --git a/assets/wua/sprite/npc/Chub/idle4.png b/assets/wua/sprite/npc/Chub/idle4.png new file mode 100644 index 00000000000..3d2058c66dd Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idle4.png differ diff --git a/assets/wua/sprite/npc/Chub/idlehold1.png b/assets/wua/sprite/npc/Chub/idlehold1.png new file mode 100644 index 00000000000..76c1dbf726b Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idlehold1.png differ diff --git a/assets/wua/sprite/npc/Chub/idlehold2.png b/assets/wua/sprite/npc/Chub/idlehold2.png new file mode 100644 index 00000000000..140fa954e2b Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idlehold2.png differ diff --git a/assets/wua/sprite/npc/Chub/idlehold3.png b/assets/wua/sprite/npc/Chub/idlehold3.png new file mode 100644 index 00000000000..4f11172ce50 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idlehold3.png differ diff --git a/assets/wua/sprite/npc/Chub/idlehold4.png b/assets/wua/sprite/npc/Chub/idlehold4.png new file mode 100644 index 00000000000..9f620bfb422 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/idlehold4.png differ diff --git a/assets/wua/sprite/npc/Chub/pain1.png b/assets/wua/sprite/npc/Chub/pain1.png new file mode 100644 index 00000000000..c19ac2298c7 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/pain1.png differ diff --git a/assets/wua/sprite/npc/Chub/pain2.png b/assets/wua/sprite/npc/Chub/pain2.png new file mode 100644 index 00000000000..1b9daf63ca1 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/pain2.png differ diff --git a/assets/wua/sprite/npc/Chub/scaredrun1.png b/assets/wua/sprite/npc/Chub/scaredrun1.png new file mode 100644 index 00000000000..aa210e24dd2 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/scaredrun1.png differ diff --git a/assets/wua/sprite/npc/Chub/scaredrun2.png b/assets/wua/sprite/npc/Chub/scaredrun2.png new file mode 100644 index 00000000000..cc98406cc9b Binary files /dev/null and b/assets/wua/sprite/npc/Chub/scaredrun2.png differ diff --git a/assets/wua/sprite/npc/Chub/scaredrun3.png b/assets/wua/sprite/npc/Chub/scaredrun3.png new file mode 100644 index 00000000000..5b07e455786 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/scaredrun3.png differ diff --git a/assets/wua/sprite/npc/Chub/spit.png b/assets/wua/sprite/npc/Chub/spit.png new file mode 100644 index 00000000000..b92e9369d9f Binary files /dev/null and b/assets/wua/sprite/npc/Chub/spit.png differ diff --git a/assets/wua/sprite/npc/Chub/talk.png b/assets/wua/sprite/npc/Chub/talk.png new file mode 100644 index 00000000000..b4eef5e5c00 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/talk.png differ diff --git a/assets/wua/sprite/npc/Chub/throw1.png b/assets/wua/sprite/npc/Chub/throw1.png new file mode 100644 index 00000000000..0ec3e1b65f6 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/throw1.png differ diff --git a/assets/wua/sprite/npc/Chub/throw2.png b/assets/wua/sprite/npc/Chub/throw2.png new file mode 100644 index 00000000000..549e67dce80 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/throw2.png differ diff --git a/assets/wua/sprite/npc/Chub/throw3.png b/assets/wua/sprite/npc/Chub/throw3.png new file mode 100644 index 00000000000..2abfb7d8395 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/throw3.png differ diff --git a/assets/wua/sprite/npc/Chub/walk1.png b/assets/wua/sprite/npc/Chub/walk1.png new file mode 100644 index 00000000000..2df236dcccc Binary files /dev/null and b/assets/wua/sprite/npc/Chub/walk1.png differ diff --git a/assets/wua/sprite/npc/Chub/walk2.png b/assets/wua/sprite/npc/Chub/walk2.png new file mode 100644 index 00000000000..d06683a0766 Binary files /dev/null and b/assets/wua/sprite/npc/Chub/walk2.png differ diff --git a/assets/wua/sprite/npc/Chuckya/Palette_00.png b/assets/wua/sprite/npc/Chuckya/Palette_00.png new file mode 100644 index 00000000000..eff3ffd2a03 Binary files /dev/null and b/assets/wua/sprite/npc/Chuckya/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Chuckya/Raster_01.png b/assets/wua/sprite/npc/Chuckya/Raster_01.png new file mode 100644 index 00000000000..fd284d7accf Binary files /dev/null and b/assets/wua/sprite/npc/Chuckya/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Chuckya/Raster_02.png b/assets/wua/sprite/npc/Chuckya/Raster_02.png new file mode 100644 index 00000000000..64caf242512 Binary files /dev/null and b/assets/wua/sprite/npc/Chuckya/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Chuckya/Raster_03.png b/assets/wua/sprite/npc/Chuckya/Raster_03.png new file mode 100644 index 00000000000..b545871ac83 Binary files /dev/null and b/assets/wua/sprite/npc/Chuckya/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Chuckya/Raster_04.png b/assets/wua/sprite/npc/Chuckya/Raster_04.png new file mode 100644 index 00000000000..05edf7d9555 Binary files /dev/null and b/assets/wua/sprite/npc/Chuckya/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Chuckya/Raster_05.png b/assets/wua/sprite/npc/Chuckya/Raster_05.png new file mode 100644 index 00000000000..b2c942e4fb3 Binary files /dev/null and b/assets/wua/sprite/npc/Chuckya/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Chuckya/Raster_06.png b/assets/wua/sprite/npc/Chuckya/Raster_06.png new file mode 100644 index 00000000000..e5377fb4337 Binary files /dev/null and b/assets/wua/sprite/npc/Chuckya/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Chuckya/SpriteSheet.xml b/assets/wua/sprite/npc/Chuckya/SpriteSheet.xml new file mode 100644 index 00000000000..2543270d4d3 --- /dev/null +++ b/assets/wua/sprite/npc/Chuckya/SpriteSheet.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw0.png b/assets/wua/sprite/npc/Craw/FemaleCraw0.png new file mode 100644 index 00000000000..3a97a77cbaf Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw0.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw1.png b/assets/wua/sprite/npc/Craw/FemaleCraw1.png new file mode 100644 index 00000000000..0ccadca1c08 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw1.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw2.png b/assets/wua/sprite/npc/Craw/FemaleCraw2.png new file mode 100644 index 00000000000..8b0e2f83b2e Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw2.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw3.png b/assets/wua/sprite/npc/Craw/FemaleCraw3.png new file mode 100644 index 00000000000..abe96c22fde Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw3.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw4.png b/assets/wua/sprite/npc/Craw/FemaleCraw4.png new file mode 100644 index 00000000000..44e8861ccdb Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw4.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw5.png b/assets/wua/sprite/npc/Craw/FemaleCraw5.png new file mode 100644 index 00000000000..04e12a88c8a Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw5.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw6.png b/assets/wua/sprite/npc/Craw/FemaleCraw6.png new file mode 100644 index 00000000000..4544f3f1ca8 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw6.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw7.png b/assets/wua/sprite/npc/Craw/FemaleCraw7.png new file mode 100644 index 00000000000..81ad420cb57 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw7.png differ diff --git a/assets/wua/sprite/npc/Craw/FemaleCraw8.png b/assets/wua/sprite/npc/Craw/FemaleCraw8.png new file mode 100644 index 00000000000..fd017920b12 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/FemaleCraw8.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw0.png b/assets/wua/sprite/npc/Craw/MaleCraw0.png new file mode 100644 index 00000000000..beff6caeddd Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw0.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw1.png b/assets/wua/sprite/npc/Craw/MaleCraw1.png new file mode 100644 index 00000000000..754e670437d Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw1.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw2.png b/assets/wua/sprite/npc/Craw/MaleCraw2.png new file mode 100644 index 00000000000..7a8ce674490 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw2.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw3.png b/assets/wua/sprite/npc/Craw/MaleCraw3.png new file mode 100644 index 00000000000..ea04e50fd2b Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw3.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw4.png b/assets/wua/sprite/npc/Craw/MaleCraw4.png new file mode 100644 index 00000000000..74c98d2e6bd Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw4.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw6.png b/assets/wua/sprite/npc/Craw/MaleCraw6.png new file mode 100644 index 00000000000..a37ed24cd1d Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw6.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw7.png b/assets/wua/sprite/npc/Craw/MaleCraw7.png new file mode 100644 index 00000000000..23400c22d8d Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw7.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw8.png b/assets/wua/sprite/npc/Craw/MaleCraw8.png new file mode 100644 index 00000000000..2f6e8e85ad5 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw8.png differ diff --git a/assets/wua/sprite/npc/Craw/MaleCraw9.png b/assets/wua/sprite/npc/Craw/MaleCraw9.png new file mode 100644 index 00000000000..04463f48918 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/MaleCraw9.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_00.png b/assets/wua/sprite/npc/Craw/Palette_00.png new file mode 100644 index 00000000000..de3f9bb5d79 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_01.png b/assets/wua/sprite/npc/Craw/Palette_01.png new file mode 100644 index 00000000000..81c5bec6349 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_02.png b/assets/wua/sprite/npc/Craw/Palette_02.png new file mode 100644 index 00000000000..83c952f7821 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_03.png b/assets/wua/sprite/npc/Craw/Palette_03.png new file mode 100644 index 00000000000..f236d65475c Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_04.png b/assets/wua/sprite/npc/Craw/Palette_04.png new file mode 100644 index 00000000000..3583931dcdc Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_05.png b/assets/wua/sprite/npc/Craw/Palette_05.png new file mode 100644 index 00000000000..23066efbcfe Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_06.png b/assets/wua/sprite/npc/Craw/Palette_06.png new file mode 100644 index 00000000000..7ee9f106fe8 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_06.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_07.png b/assets/wua/sprite/npc/Craw/Palette_07.png new file mode 100644 index 00000000000..83c952f7821 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_07.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_08.png b/assets/wua/sprite/npc/Craw/Palette_08.png new file mode 100644 index 00000000000..a667029b26c Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_08.png differ diff --git a/assets/wua/sprite/npc/Craw/Palette_09.png b/assets/wua/sprite/npc/Craw/Palette_09.png new file mode 100644 index 00000000000..33c7c313935 Binary files /dev/null and b/assets/wua/sprite/npc/Craw/Palette_09.png differ diff --git a/assets/wua/sprite/npc/Craw/SpriteSheet.xml b/assets/wua/sprite/npc/Craw/SpriteSheet.xml new file mode 100644 index 00000000000..7b7899dcb37 --- /dev/null +++ b/assets/wua/sprite/npc/Craw/SpriteSheet.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/CrawBones/Burnt1.pal.png b/assets/wua/sprite/npc/CrawBones/Burnt1.pal.png new file mode 100644 index 00000000000..594d38c8115 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt1.pal.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Burnt1.png b/assets/wua/sprite/npc/CrawBones/Burnt1.png new file mode 100644 index 00000000000..594d38c8115 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt1.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Burnt2.png b/assets/wua/sprite/npc/CrawBones/Burnt2.png new file mode 100644 index 00000000000..9ef7704193e Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt2.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Burnt3.png b/assets/wua/sprite/npc/CrawBones/Burnt3.png new file mode 100644 index 00000000000..054d990e430 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt3.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Burnt4.png b/assets/wua/sprite/npc/CrawBones/Burnt4.png new file mode 100644 index 00000000000..e3501ed8b0d Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt4.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Burnt5.png b/assets/wua/sprite/npc/CrawBones/Burnt5.png new file mode 100644 index 00000000000..fe650889e5a Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt5.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Burnt6.png b/assets/wua/sprite/npc/CrawBones/Burnt6.png new file mode 100644 index 00000000000..c731caca09d Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt6.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Burnt7.png b/assets/wua/sprite/npc/CrawBones/Burnt7.png new file mode 100644 index 00000000000..d82ea0f659d Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Burnt7.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Dizzy1.png b/assets/wua/sprite/npc/CrawBones/Dizzy1.png new file mode 100644 index 00000000000..2688086a6a4 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Dizzy1.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Dizzy2.png b/assets/wua/sprite/npc/CrawBones/Dizzy2.png new file mode 100644 index 00000000000..28209f42605 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Dizzy2.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Dizzy3.png b/assets/wua/sprite/npc/CrawBones/Dizzy3.png new file mode 100644 index 00000000000..3bc87cdad72 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Dizzy3.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Dizzy4.png b/assets/wua/sprite/npc/CrawBones/Dizzy4.png new file mode 100644 index 00000000000..fdc97677c6e Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Dizzy4.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Palette_00.png b/assets/wua/sprite/npc/CrawBones/Palette_00.png new file mode 100644 index 00000000000..07ad5324a24 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Palette_00.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Palette_01.png b/assets/wua/sprite/npc/CrawBones/Palette_01.png new file mode 100644 index 00000000000..32661e5d7db Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Palette_01.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_00.png b/assets/wua/sprite/npc/CrawBones/Raster_00.png new file mode 100644 index 00000000000..ea8fe83b916 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_00.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_01.png b/assets/wua/sprite/npc/CrawBones/Raster_01.png new file mode 100644 index 00000000000..af7011de4fc Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_01.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_02.png b/assets/wua/sprite/npc/CrawBones/Raster_02.png new file mode 100644 index 00000000000..5f65a8d46f1 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_02.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_03.png b/assets/wua/sprite/npc/CrawBones/Raster_03.png new file mode 100644 index 00000000000..f2f67fe6073 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_03.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_04.png b/assets/wua/sprite/npc/CrawBones/Raster_04.png new file mode 100644 index 00000000000..293557ecb44 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_04.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_0A.png b/assets/wua/sprite/npc/CrawBones/Raster_0A.png new file mode 100644 index 00000000000..0995122799b Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_0B.png b/assets/wua/sprite/npc/CrawBones/Raster_0B.png new file mode 100644 index 00000000000..49b5bef07dd Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_0C.png b/assets/wua/sprite/npc/CrawBones/Raster_0C.png new file mode 100644 index 00000000000..dcd5dc58fc5 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_0D.png b/assets/wua/sprite/npc/CrawBones/Raster_0D.png new file mode 100644 index 00000000000..be2219c8c16 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_0E.png b/assets/wua/sprite/npc/CrawBones/Raster_0E.png new file mode 100644 index 00000000000..7713bdbd6e0 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_0F.png b/assets/wua/sprite/npc/CrawBones/Raster_0F.png new file mode 100644 index 00000000000..b5c5a796b41 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_10.png b/assets/wua/sprite/npc/CrawBones/Raster_10.png new file mode 100644 index 00000000000..62ece43cab6 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_10.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_12.png b/assets/wua/sprite/npc/CrawBones/Raster_12.png new file mode 100644 index 00000000000..683e23c7094 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_12.png differ diff --git a/assets/wua/sprite/npc/CrawBones/Raster_13.png b/assets/wua/sprite/npc/CrawBones/Raster_13.png new file mode 100644 index 00000000000..882f9127565 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/Raster_13.png differ diff --git a/assets/wua/sprite/npc/CrawBones/SleepHead.png b/assets/wua/sprite/npc/CrawBones/SleepHead.png new file mode 100644 index 00000000000..9c2e7be13d2 Binary files /dev/null and b/assets/wua/sprite/npc/CrawBones/SleepHead.png differ diff --git a/assets/wua/sprite/npc/CrawBones/SpriteSheet.xml b/assets/wua/sprite/npc/CrawBones/SpriteSheet.xml new file mode 100644 index 00000000000..21105a7e905 --- /dev/null +++ b/assets/wua/sprite/npc/CrawBones/SpriteSheet.xml @@ -0,0 +1,2290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Crawd/Crawd1.pal.png b/assets/wua/sprite/npc/Crawd/Crawd1.pal.png new file mode 100644 index 00000000000..5173aa5a3d3 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd1.pal.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd1.png b/assets/wua/sprite/npc/Crawd/Crawd1.png new file mode 100644 index 00000000000..1ccb51e2f88 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd1.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd10.png b/assets/wua/sprite/npc/Crawd/Crawd10.png new file mode 100644 index 00000000000..c9348059c5e Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd10.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd11.png b/assets/wua/sprite/npc/Crawd/Crawd11.png new file mode 100644 index 00000000000..916d5813978 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd11.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd12.png b/assets/wua/sprite/npc/Crawd/Crawd12.png new file mode 100644 index 00000000000..caa0eab396e Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd12.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd13.png b/assets/wua/sprite/npc/Crawd/Crawd13.png new file mode 100644 index 00000000000..3f33bf54364 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd13.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd14.png b/assets/wua/sprite/npc/Crawd/Crawd14.png new file mode 100644 index 00000000000..0ae9d8a952a Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd14.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd15.png b/assets/wua/sprite/npc/Crawd/Crawd15.png new file mode 100644 index 00000000000..dc3eb63c15b Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd15.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd16.png b/assets/wua/sprite/npc/Crawd/Crawd16.png new file mode 100644 index 00000000000..8dc32b4cc8f Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd16.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd17.png b/assets/wua/sprite/npc/Crawd/Crawd17.png new file mode 100644 index 00000000000..78db0b649b3 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd17.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd18.png b/assets/wua/sprite/npc/Crawd/Crawd18.png new file mode 100644 index 00000000000..ac24994b156 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd18.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd19.png b/assets/wua/sprite/npc/Crawd/Crawd19.png new file mode 100644 index 00000000000..4e9a7c32397 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd19.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd2.png b/assets/wua/sprite/npc/Crawd/Crawd2.png new file mode 100644 index 00000000000..6c3b58832d0 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd2.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd20.png b/assets/wua/sprite/npc/Crawd/Crawd20.png new file mode 100644 index 00000000000..e43c59b30c3 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd20.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd3.png b/assets/wua/sprite/npc/Crawd/Crawd3.png new file mode 100644 index 00000000000..0e3d2b92a89 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd3.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd4.png b/assets/wua/sprite/npc/Crawd/Crawd4.png new file mode 100644 index 00000000000..aebb1530854 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd4.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd5.png b/assets/wua/sprite/npc/Crawd/Crawd5.png new file mode 100644 index 00000000000..a2338e8f53c Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd5.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd6.png b/assets/wua/sprite/npc/Crawd/Crawd6.png new file mode 100644 index 00000000000..f36f896077c Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd6.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd7.png b/assets/wua/sprite/npc/Crawd/Crawd7.png new file mode 100644 index 00000000000..0d54cffb824 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd7.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd8.png b/assets/wua/sprite/npc/Crawd/Crawd8.png new file mode 100644 index 00000000000..096d6bde152 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd8.png differ diff --git a/assets/wua/sprite/npc/Crawd/Crawd9.png b/assets/wua/sprite/npc/Crawd/Crawd9.png new file mode 100644 index 00000000000..f909fd50843 Binary files /dev/null and b/assets/wua/sprite/npc/Crawd/Crawd9.png differ diff --git a/assets/wua/sprite/npc/Crawd/SpriteSheet.xml b/assets/wua/sprite/npc/Crawd/SpriteSheet.xml new file mode 100644 index 00000000000..d6c36311080 --- /dev/null +++ b/assets/wua/sprite/npc/Crawd/SpriteSheet.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Palette_00.png b/assets/wua/sprite/npc/CutsceneAtomm/Palette_00.png new file mode 100644 index 00000000000..5f032c78da8 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Palette_00.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Palette_01.png b/assets/wua/sprite/npc/CutsceneAtomm/Palette_01.png new file mode 100644 index 00000000000..c772f7ef56d Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Palette_01.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Raster_00.png b/assets/wua/sprite/npc/CutsceneAtomm/Raster_00.png new file mode 100644 index 00000000000..e60e5e88b2c Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Raster_00.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Raster_01.png b/assets/wua/sprite/npc/CutsceneAtomm/Raster_01.png new file mode 100644 index 00000000000..81842ec397c Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Raster_01.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Raster_12.png b/assets/wua/sprite/npc/CutsceneAtomm/Raster_12.png new file mode 100644 index 00000000000..8f8c4f1bcac Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Raster_12.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Raster_13.png b/assets/wua/sprite/npc/CutsceneAtomm/Raster_13.png new file mode 100644 index 00000000000..222dd427321 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Raster_13.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Raster_14.png b/assets/wua/sprite/npc/CutsceneAtomm/Raster_14.png new file mode 100644 index 00000000000..08b67425990 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Raster_14.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Raster_15.png b/assets/wua/sprite/npc/CutsceneAtomm/Raster_15.png new file mode 100644 index 00000000000..2c9de1920c0 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Raster_15.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/Raster_16.png b/assets/wua/sprite/npc/CutsceneAtomm/Raster_16.png new file mode 100644 index 00000000000..6a48f3b18cb Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneAtomm/Raster_16.png differ diff --git a/assets/wua/sprite/npc/CutsceneAtomm/SpriteSheet.xml b/assets/wua/sprite/npc/CutsceneAtomm/SpriteSheet.xml new file mode 100644 index 00000000000..bc8adc5c9cc --- /dev/null +++ b/assets/wua/sprite/npc/CutsceneAtomm/SpriteSheet.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/CutsceneDawple/Palette_00.png b/assets/wua/sprite/npc/CutsceneDawple/Palette_00.png new file mode 100644 index 00000000000..18431d35016 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Palette_00.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Palette_08.png b/assets/wua/sprite/npc/CutsceneDawple/Palette_08.png new file mode 100644 index 00000000000..16e37075561 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Palette_08.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_00.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_00.png new file mode 100644 index 00000000000..02b6d8095e8 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_00.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_01.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_01.png new file mode 100644 index 00000000000..35b24322a08 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_01.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_02.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_02.png new file mode 100644 index 00000000000..917e214c9e2 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_02.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_0B.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_0B.png new file mode 100644 index 00000000000..182eeae4fc7 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_0C.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_0C.png new file mode 100644 index 00000000000..e9b1cf1a919 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_0D.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_0D.png new file mode 100644 index 00000000000..9f3673fcbdb Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_0E.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_0E.png new file mode 100644 index 00000000000..37074f42165 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_0F.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_0F.png new file mode 100644 index 00000000000..999c135e7e0 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_12.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_12.png new file mode 100644 index 00000000000..0ff96a1201b Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_12.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_13.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_13.png new file mode 100644 index 00000000000..bf1ab23394a Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_13.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/Raster_14.png b/assets/wua/sprite/npc/CutsceneDawple/Raster_14.png new file mode 100644 index 00000000000..0551584f0b0 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneDawple/Raster_14.png differ diff --git a/assets/wua/sprite/npc/CutsceneDawple/SpriteSheet.xml b/assets/wua/sprite/npc/CutsceneDawple/SpriteSheet.xml new file mode 100644 index 00000000000..a5eb425ab80 --- /dev/null +++ b/assets/wua/sprite/npc/CutsceneDawple/SpriteSheet.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla1.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla1.png new file mode 100644 index 00000000000..c6d3f13181b Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla1.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla2.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla2.png new file mode 100644 index 00000000000..0ae9513166c Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla2.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla28.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla28.png new file mode 100644 index 00000000000..d6fa89e8821 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla28.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla29.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla29.png new file mode 100644 index 00000000000..5c274bf796c Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla29.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla3.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla3.png new file mode 100644 index 00000000000..7ae32c74a3d Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla3.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla30.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla30.png new file mode 100644 index 00000000000..15159562340 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla30.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla31.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla31.png new file mode 100644 index 00000000000..7ff9f07d7c0 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla31.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla32.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla32.png new file mode 100644 index 00000000000..a31fc2087fe Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla32.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla33.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla33.png new file mode 100644 index 00000000000..684acd22b3b Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla33.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla34.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla34.png new file mode 100644 index 00000000000..c968f45913e Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla34.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla35.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla35.png new file mode 100644 index 00000000000..94199c833dd Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla35.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla36.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla36.png new file mode 100644 index 00000000000..70dc2cec29e Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla36.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla4.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla4.png new file mode 100644 index 00000000000..3a41e12c63c Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla4.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla5.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla5.png new file mode 100644 index 00000000000..9a75455420a Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla5.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/Sheilla6.png b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla6.png new file mode 100644 index 00000000000..d32598f0935 Binary files /dev/null and b/assets/wua/sprite/npc/CutsceneSheilla/Sheilla6.png differ diff --git a/assets/wua/sprite/npc/CutsceneSheilla/SpriteSheet.xml b/assets/wua/sprite/npc/CutsceneSheilla/SpriteSheet.xml new file mode 100644 index 00000000000..77cb415e2fe --- /dev/null +++ b/assets/wua/sprite/npc/CutsceneSheilla/SpriteSheet.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Dayzee/Palette_00.png b/assets/wua/sprite/npc/Dayzee/Palette_00.png new file mode 100644 index 00000000000..c4f978f84e9 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_01.png b/assets/wua/sprite/npc/Dayzee/Palette_01.png new file mode 100644 index 00000000000..711f87f89f0 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_02.png b/assets/wua/sprite/npc/Dayzee/Palette_02.png new file mode 100644 index 00000000000..0bd04a9d206 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_03.png b/assets/wua/sprite/npc/Dayzee/Palette_03.png new file mode 100644 index 00000000000..0bd04a9d206 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_04.png b/assets/wua/sprite/npc/Dayzee/Palette_04.png new file mode 100644 index 00000000000..dab2446fb21 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_05.png b/assets/wua/sprite/npc/Dayzee/Palette_05.png new file mode 100644 index 00000000000..dab2446fb21 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_06.png b/assets/wua/sprite/npc/Dayzee/Palette_06.png new file mode 100644 index 00000000000..89952af900c Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_06.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_07.png b/assets/wua/sprite/npc/Dayzee/Palette_07.png new file mode 100644 index 00000000000..89952af900c Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_07.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_08.png b/assets/wua/sprite/npc/Dayzee/Palette_08.png new file mode 100644 index 00000000000..b8f293cc834 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_08.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Palette_09.png b/assets/wua/sprite/npc/Dayzee/Palette_09.png new file mode 100644 index 00000000000..bed52e7ca6a Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Palette_09.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_00.png b/assets/wua/sprite/npc/Dayzee/Raster_00.png new file mode 100644 index 00000000000..c4f978f84e9 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_01.png b/assets/wua/sprite/npc/Dayzee/Raster_01.png new file mode 100644 index 00000000000..2eca3aaff1d Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_02.png b/assets/wua/sprite/npc/Dayzee/Raster_02.png new file mode 100644 index 00000000000..dab06c8f5e2 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_03.png b/assets/wua/sprite/npc/Dayzee/Raster_03.png new file mode 100644 index 00000000000..95f7aa91ee8 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_04.png b/assets/wua/sprite/npc/Dayzee/Raster_04.png new file mode 100644 index 00000000000..c6e7a7455ad Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_05.png b/assets/wua/sprite/npc/Dayzee/Raster_05.png new file mode 100644 index 00000000000..5f85332406d Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_06.png b/assets/wua/sprite/npc/Dayzee/Raster_06.png new file mode 100644 index 00000000000..066f12b1359 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_07.png b/assets/wua/sprite/npc/Dayzee/Raster_07.png new file mode 100644 index 00000000000..535296bd41d Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_08.png b/assets/wua/sprite/npc/Dayzee/Raster_08.png new file mode 100644 index 00000000000..19fa9495afa Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_09.png b/assets/wua/sprite/npc/Dayzee/Raster_09.png new file mode 100644 index 00000000000..bfcc4b228b6 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_0A.png b/assets/wua/sprite/npc/Dayzee/Raster_0A.png new file mode 100644 index 00000000000..ae311e11e75 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_0B.png b/assets/wua/sprite/npc/Dayzee/Raster_0B.png new file mode 100644 index 00000000000..cb9a1cdc97f Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_0C.png b/assets/wua/sprite/npc/Dayzee/Raster_0C.png new file mode 100644 index 00000000000..8ed950d6d2e Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_0D.png b/assets/wua/sprite/npc/Dayzee/Raster_0D.png new file mode 100644 index 00000000000..d7ccff51dec Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_0E.png b/assets/wua/sprite/npc/Dayzee/Raster_0E.png new file mode 100644 index 00000000000..3a32d15501f Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_0F.png b/assets/wua/sprite/npc/Dayzee/Raster_0F.png new file mode 100644 index 00000000000..d618f01e29d Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_10.png b/assets/wua/sprite/npc/Dayzee/Raster_10.png new file mode 100644 index 00000000000..3c8317064b6 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_11.png b/assets/wua/sprite/npc/Dayzee/Raster_11.png new file mode 100644 index 00000000000..38a243ebe78 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_12.png b/assets/wua/sprite/npc/Dayzee/Raster_12.png new file mode 100644 index 00000000000..43096f4fcf3 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_13.png b/assets/wua/sprite/npc/Dayzee/Raster_13.png new file mode 100644 index 00000000000..10cb5f87610 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_14.png b/assets/wua/sprite/npc/Dayzee/Raster_14.png new file mode 100644 index 00000000000..b8f293cc834 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_15.png b/assets/wua/sprite/npc/Dayzee/Raster_15.png new file mode 100644 index 00000000000..a5fecda64d0 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_16.png b/assets/wua/sprite/npc/Dayzee/Raster_16.png new file mode 100644 index 00000000000..77796a23271 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_17.png b/assets/wua/sprite/npc/Dayzee/Raster_17.png new file mode 100644 index 00000000000..e20f49c8bbc Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_18.png b/assets/wua/sprite/npc/Dayzee/Raster_18.png new file mode 100644 index 00000000000..c0276dc5d7a Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_19.png b/assets/wua/sprite/npc/Dayzee/Raster_19.png new file mode 100644 index 00000000000..3d441688fac Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_1A.png b/assets/wua/sprite/npc/Dayzee/Raster_1A.png new file mode 100644 index 00000000000..75f8aab41b9 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_1B.png b/assets/wua/sprite/npc/Dayzee/Raster_1B.png new file mode 100644 index 00000000000..8bdd61e4d4d Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/Dayzee/Raster_1C.png b/assets/wua/sprite/npc/Dayzee/Raster_1C.png new file mode 100644 index 00000000000..8d1f707b4d4 Binary files /dev/null and b/assets/wua/sprite/npc/Dayzee/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/Dayzee/SpriteSheet.xml b/assets/wua/sprite/npc/Dayzee/SpriteSheet.xml new file mode 100644 index 00000000000..5e034e4e328 --- /dev/null +++ b/assets/wua/sprite/npc/Dayzee/SpriteSheet.xml @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/DryBones/Palette_00.png b/assets/wua/sprite/npc/DryBones/Palette_00.png new file mode 100644 index 00000000000..d5d5db5e446 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Palette_00.png differ diff --git a/assets/wua/sprite/npc/DryBones/Palette_01.png b/assets/wua/sprite/npc/DryBones/Palette_01.png new file mode 100644 index 00000000000..945d562eed4 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Palette_01.png differ diff --git a/assets/wua/sprite/npc/DryBones/Palette_02.png b/assets/wua/sprite/npc/DryBones/Palette_02.png new file mode 100644 index 00000000000..c12f2e3270f Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Palette_02.png differ diff --git a/assets/wua/sprite/npc/DryBones/Palette_03.png b/assets/wua/sprite/npc/DryBones/Palette_03.png new file mode 100644 index 00000000000..35b7cd9051b Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Palette_03.png differ diff --git a/assets/wua/sprite/npc/DryBones/Palette_04.png b/assets/wua/sprite/npc/DryBones/Palette_04.png new file mode 100644 index 00000000000..ff8e4836a1d Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Palette_04.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_00.png b/assets/wua/sprite/npc/DryBones/Raster_00.png new file mode 100644 index 00000000000..d14daa4e184 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_00.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_01.png b/assets/wua/sprite/npc/DryBones/Raster_01.png new file mode 100644 index 00000000000..dac9b2b374a Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_01.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_02.png b/assets/wua/sprite/npc/DryBones/Raster_02.png new file mode 100644 index 00000000000..2fe2b758a8c Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_02.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_03.png b/assets/wua/sprite/npc/DryBones/Raster_03.png new file mode 100644 index 00000000000..884474524c5 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_03.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_04.png b/assets/wua/sprite/npc/DryBones/Raster_04.png new file mode 100644 index 00000000000..c054ca0b858 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_04.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_05.png b/assets/wua/sprite/npc/DryBones/Raster_05.png new file mode 100644 index 00000000000..ffb3bdfea88 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_05.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_06.png b/assets/wua/sprite/npc/DryBones/Raster_06.png new file mode 100644 index 00000000000..4cece483719 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_06.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_07.png b/assets/wua/sprite/npc/DryBones/Raster_07.png new file mode 100644 index 00000000000..6021353c6a4 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_07.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_08.png b/assets/wua/sprite/npc/DryBones/Raster_08.png new file mode 100644 index 00000000000..f4a683409fd Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_08.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_09.png b/assets/wua/sprite/npc/DryBones/Raster_09.png new file mode 100644 index 00000000000..d2e1bab99c0 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_09.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_0A.png b/assets/wua/sprite/npc/DryBones/Raster_0A.png new file mode 100644 index 00000000000..87b02dc9a30 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_0B.png b/assets/wua/sprite/npc/DryBones/Raster_0B.png new file mode 100644 index 00000000000..e708f4e21aa Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_0C.png b/assets/wua/sprite/npc/DryBones/Raster_0C.png new file mode 100644 index 00000000000..6d562ac5bd6 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_0D.png b/assets/wua/sprite/npc/DryBones/Raster_0D.png new file mode 100644 index 00000000000..3b81611ec34 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_0E.png b/assets/wua/sprite/npc/DryBones/Raster_0E.png new file mode 100644 index 00000000000..b2ec51ae77e Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_0F.png b/assets/wua/sprite/npc/DryBones/Raster_0F.png new file mode 100644 index 00000000000..c2774c1b421 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_10.png b/assets/wua/sprite/npc/DryBones/Raster_10.png new file mode 100644 index 00000000000..56d13e9c3a2 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_10.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_11.png b/assets/wua/sprite/npc/DryBones/Raster_11.png new file mode 100644 index 00000000000..59625451494 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_11.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_12.png b/assets/wua/sprite/npc/DryBones/Raster_12.png new file mode 100644 index 00000000000..6feeebbdf68 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_12.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_13.png b/assets/wua/sprite/npc/DryBones/Raster_13.png new file mode 100644 index 00000000000..c21dd9f5286 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_13.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_14.png b/assets/wua/sprite/npc/DryBones/Raster_14.png new file mode 100644 index 00000000000..86f08bc9dcf Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_14.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_15.png b/assets/wua/sprite/npc/DryBones/Raster_15.png new file mode 100644 index 00000000000..9e1ea01fc4d Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_15.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_16.png b/assets/wua/sprite/npc/DryBones/Raster_16.png new file mode 100644 index 00000000000..6b60f412a45 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_16.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_17.png b/assets/wua/sprite/npc/DryBones/Raster_17.png new file mode 100644 index 00000000000..3df0e5ed53c Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_17.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_18.png b/assets/wua/sprite/npc/DryBones/Raster_18.png new file mode 100644 index 00000000000..ddd583d56d8 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_18.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_19.png b/assets/wua/sprite/npc/DryBones/Raster_19.png new file mode 100644 index 00000000000..c459d026aa5 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_19.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_1A.png b/assets/wua/sprite/npc/DryBones/Raster_1A.png new file mode 100644 index 00000000000..58b5afb7c3a Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_1B.png b/assets/wua/sprite/npc/DryBones/Raster_1B.png new file mode 100644 index 00000000000..d530ca1aee6 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_1C.png b/assets/wua/sprite/npc/DryBones/Raster_1C.png new file mode 100644 index 00000000000..fed577625e1 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_1D.png b/assets/wua/sprite/npc/DryBones/Raster_1D.png new file mode 100644 index 00000000000..ca3aa5ecff0 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_1E.png b/assets/wua/sprite/npc/DryBones/Raster_1E.png new file mode 100644 index 00000000000..849029d4f04 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_1F.png b/assets/wua/sprite/npc/DryBones/Raster_1F.png new file mode 100644 index 00000000000..f3e7d84479b Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_20.png b/assets/wua/sprite/npc/DryBones/Raster_20.png new file mode 100644 index 00000000000..9ddac71680d Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_20.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_21.png b/assets/wua/sprite/npc/DryBones/Raster_21.png new file mode 100644 index 00000000000..5bd9a536828 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_21.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_22.png b/assets/wua/sprite/npc/DryBones/Raster_22.png new file mode 100644 index 00000000000..4714671eace Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_22.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_23.png b/assets/wua/sprite/npc/DryBones/Raster_23.png new file mode 100644 index 00000000000..a99fe69357f Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_23.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_24.png b/assets/wua/sprite/npc/DryBones/Raster_24.png new file mode 100644 index 00000000000..e9421dbb14b Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_24.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_25.png b/assets/wua/sprite/npc/DryBones/Raster_25.png new file mode 100644 index 00000000000..575c515f3a5 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_25.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_26.png b/assets/wua/sprite/npc/DryBones/Raster_26.png new file mode 100644 index 00000000000..d5aae4e13bc Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_26.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_27.png b/assets/wua/sprite/npc/DryBones/Raster_27.png new file mode 100644 index 00000000000..5730593e7f4 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_27.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_28.png b/assets/wua/sprite/npc/DryBones/Raster_28.png new file mode 100644 index 00000000000..f96017493e4 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_28.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_29.png b/assets/wua/sprite/npc/DryBones/Raster_29.png new file mode 100644 index 00000000000..0243ac878a1 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_29.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_2A.png b/assets/wua/sprite/npc/DryBones/Raster_2A.png new file mode 100644 index 00000000000..aefe422cf11 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_2A.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_2B.png b/assets/wua/sprite/npc/DryBones/Raster_2B.png new file mode 100644 index 00000000000..db440be71f3 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_2B.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_2C.png b/assets/wua/sprite/npc/DryBones/Raster_2C.png new file mode 100644 index 00000000000..dfcdd5ad597 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_2C.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_2D.png b/assets/wua/sprite/npc/DryBones/Raster_2D.png new file mode 100644 index 00000000000..7b3d9c6cf1a Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_2D.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_2E.png b/assets/wua/sprite/npc/DryBones/Raster_2E.png new file mode 100644 index 00000000000..69a2deef40d Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_2E.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_2F.png b/assets/wua/sprite/npc/DryBones/Raster_2F.png new file mode 100644 index 00000000000..59701223f9b Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_2F.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_30.png b/assets/wua/sprite/npc/DryBones/Raster_30.png new file mode 100644 index 00000000000..7d55373c931 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_30.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_31.png b/assets/wua/sprite/npc/DryBones/Raster_31.png new file mode 100644 index 00000000000..7dbae3553db Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_31.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_32.png b/assets/wua/sprite/npc/DryBones/Raster_32.png new file mode 100644 index 00000000000..85eb0c68590 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_32.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_33.png b/assets/wua/sprite/npc/DryBones/Raster_33.png new file mode 100644 index 00000000000..0db0547edb9 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_33.png differ diff --git a/assets/wua/sprite/npc/DryBones/Raster_34.png b/assets/wua/sprite/npc/DryBones/Raster_34.png new file mode 100644 index 00000000000..6f3fc873431 Binary files /dev/null and b/assets/wua/sprite/npc/DryBones/Raster_34.png differ diff --git a/assets/wua/sprite/npc/DryBones/SpriteSheet.xml b/assets/wua/sprite/npc/DryBones/SpriteSheet.xml new file mode 100644 index 00000000000..52e7121e632 --- /dev/null +++ b/assets/wua/sprite/npc/DryBones/SpriteSheet.xml @@ -0,0 +1,1882 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Dudley/Palette_00.png b/assets/wua/sprite/npc/Dudley/Palette_00.png new file mode 100644 index 00000000000..90c75cd2707 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_01.png b/assets/wua/sprite/npc/Dudley/Raster_01.png new file mode 100644 index 00000000000..5871e4e943e Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_02.png b/assets/wua/sprite/npc/Dudley/Raster_02.png new file mode 100644 index 00000000000..f2bf30f925c Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_03.png b/assets/wua/sprite/npc/Dudley/Raster_03.png new file mode 100644 index 00000000000..11182736103 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_04.png b/assets/wua/sprite/npc/Dudley/Raster_04.png new file mode 100644 index 00000000000..0f0c12eb8e7 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_05.png b/assets/wua/sprite/npc/Dudley/Raster_05.png new file mode 100644 index 00000000000..e6ad542b731 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_06.png b/assets/wua/sprite/npc/Dudley/Raster_06.png new file mode 100644 index 00000000000..76063befcb4 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_12.png b/assets/wua/sprite/npc/Dudley/Raster_12.png new file mode 100644 index 00000000000..56b474adcb4 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_13.png b/assets/wua/sprite/npc/Dudley/Raster_13.png new file mode 100644 index 00000000000..aa53a4f4d6a Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_14.png b/assets/wua/sprite/npc/Dudley/Raster_14.png new file mode 100644 index 00000000000..0130b398750 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_15.png b/assets/wua/sprite/npc/Dudley/Raster_15.png new file mode 100644 index 00000000000..207e639f222 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_16.png b/assets/wua/sprite/npc/Dudley/Raster_16.png new file mode 100644 index 00000000000..f332bd09bc1 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Dudley/Raster_17.png b/assets/wua/sprite/npc/Dudley/Raster_17.png new file mode 100644 index 00000000000..2d724d48951 Binary files /dev/null and b/assets/wua/sprite/npc/Dudley/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Dudley/SpriteSheet.xml b/assets/wua/sprite/npc/Dudley/SpriteSheet.xml new file mode 100644 index 00000000000..7ae8c5e5371 --- /dev/null +++ b/assets/wua/sprite/npc/Dudley/SpriteSheet.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/FatOmb/Flatfoot.png b/assets/wua/sprite/npc/FatOmb/Flatfoot.png new file mode 100644 index 00000000000..b0a7ef7a269 Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Flatfoot.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Fuse1.png b/assets/wua/sprite/npc/FatOmb/Fuse1.png new file mode 100644 index 00000000000..94266f7b77b Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Fuse1.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Fuse2.png b/assets/wua/sprite/npc/FatOmb/Fuse2.png new file mode 100644 index 00000000000..eea1f9fdf60 Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Fuse2.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Fuse3.png b/assets/wua/sprite/npc/FatOmb/Fuse3.png new file mode 100644 index 00000000000..063a6691e29 Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Fuse3.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Palette_00.png b/assets/wua/sprite/npc/FatOmb/Palette_00.png new file mode 100644 index 00000000000..ad123109526 Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Palette_00.png differ diff --git a/assets/wua/sprite/npc/FatOmb/SpriteSheet.xml b/assets/wua/sprite/npc/FatOmb/SpriteSheet.xml new file mode 100644 index 00000000000..126f3f19bd1 --- /dev/null +++ b/assets/wua/sprite/npc/FatOmb/SpriteSheet.xml @@ -0,0 +1,2107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/FatOmb/Torso1.png b/assets/wua/sprite/npc/FatOmb/Torso1.png new file mode 100644 index 00000000000..f7ffd748ad2 Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Torso1.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Torso2.png b/assets/wua/sprite/npc/FatOmb/Torso2.png new file mode 100644 index 00000000000..3b903f83861 Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Torso2.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Torso3.png b/assets/wua/sprite/npc/FatOmb/Torso3.png new file mode 100644 index 00000000000..825b4f37490 Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Torso3.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Torso4.png b/assets/wua/sprite/npc/FatOmb/Torso4.png new file mode 100644 index 00000000000..faecc00ab9e Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Torso4.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Torso5.png b/assets/wua/sprite/npc/FatOmb/Torso5.png new file mode 100644 index 00000000000..ad3567d158d Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Torso5.png differ diff --git a/assets/wua/sprite/npc/FatOmb/Upfoot.png b/assets/wua/sprite/npc/FatOmb/Upfoot.png new file mode 100644 index 00000000000..f13e6a85c4c Binary files /dev/null and b/assets/wua/sprite/npc/FatOmb/Upfoot.png differ diff --git a/assets/wua/sprite/npc/Fishmael/Palette_00.png b/assets/wua/sprite/npc/Fishmael/Palette_00.png new file mode 100644 index 00000000000..7b10efd3848 Binary files /dev/null and b/assets/wua/sprite/npc/Fishmael/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Fishmael/Raster_00.png b/assets/wua/sprite/npc/Fishmael/Raster_00.png new file mode 100644 index 00000000000..7b10efd3848 Binary files /dev/null and b/assets/wua/sprite/npc/Fishmael/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Fishmael/Raster_01.png b/assets/wua/sprite/npc/Fishmael/Raster_01.png new file mode 100644 index 00000000000..e58d0069760 Binary files /dev/null and b/assets/wua/sprite/npc/Fishmael/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Fishmael/Raster_03.png b/assets/wua/sprite/npc/Fishmael/Raster_03.png new file mode 100644 index 00000000000..05a6774d8a5 Binary files /dev/null and b/assets/wua/sprite/npc/Fishmael/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Fishmael/Raster_05.png b/assets/wua/sprite/npc/Fishmael/Raster_05.png new file mode 100644 index 00000000000..469794db53f Binary files /dev/null and b/assets/wua/sprite/npc/Fishmael/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Fishmael/SpriteSheet.xml b/assets/wua/sprite/npc/Fishmael/SpriteSheet.xml new file mode 100644 index 00000000000..72aa112653f --- /dev/null +++ b/assets/wua/sprite/npc/Fishmael/SpriteSheet.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_00.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_00.png new file mode 100644 index 00000000000..ec7216c9fca Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_00.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_01.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_01.png new file mode 100644 index 00000000000..7f2c685d224 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_01.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_02.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_02.png new file mode 100644 index 00000000000..16f507b97ad Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_02.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_03.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_03.png new file mode 100644 index 00000000000..d55d777c31d Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_03.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_04.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_04.png new file mode 100644 index 00000000000..a12668e1de4 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_04.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_05.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_05.png new file mode 100644 index 00000000000..8b4a800e266 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_05.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_06.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_06.png new file mode 100644 index 00000000000..6239c7c2102 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_06.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_07.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_07.png new file mode 100644 index 00000000000..c8c35253780 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_07.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_08.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_08.png new file mode 100644 index 00000000000..cc392680000 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_08.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_09.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_09.png new file mode 100644 index 00000000000..d1303fdaad5 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_09.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0A.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0A.png new file mode 100644 index 00000000000..6239c7c2102 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0A.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0B.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0B.png new file mode 100644 index 00000000000..6239c7c2102 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0B.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0C.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0C.png new file mode 100644 index 00000000000..227da4a55a2 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0C.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0D.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0D.png new file mode 100644 index 00000000000..660849d2f1a Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0D.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0E.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0E.png new file mode 100644 index 00000000000..031ef083200 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0E.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0F.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0F.png new file mode 100644 index 00000000000..52283f72ac5 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_0F.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_10.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_10.png new file mode 100644 index 00000000000..227da4a55a2 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_10.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_11.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_11.png new file mode 100644 index 00000000000..227da4a55a2 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_11.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_12.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_12.png new file mode 100644 index 00000000000..2b3780087d0 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_12.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_13.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_13.png new file mode 100644 index 00000000000..d5f26a9702d Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_13.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_14.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_14.png new file mode 100644 index 00000000000..208ee4b86e2 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_14.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_15.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_15.png new file mode 100644 index 00000000000..8b90b280626 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_15.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_16.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_16.png new file mode 100644 index 00000000000..2b3780087d0 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_16.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_17.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_17.png new file mode 100644 index 00000000000..2b3780087d0 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_17.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_18.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_18.png new file mode 100644 index 00000000000..320db3de31c Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_18.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Palette_19.png b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_19.png new file mode 100644 index 00000000000..5e63a5c0494 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Palette_19.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_00.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_00.png new file mode 100644 index 00000000000..ec7216c9fca Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_00.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_01.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_01.png new file mode 100644 index 00000000000..0328e640306 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_01.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_02.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_02.png new file mode 100644 index 00000000000..5a0772e580c Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_02.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_03.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_03.png new file mode 100644 index 00000000000..af7a0f8b038 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_03.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_04.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_04.png new file mode 100644 index 00000000000..bbed8b5ce4a Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_04.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_05.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_05.png new file mode 100644 index 00000000000..38a16fddafb Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_05.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_06.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_06.png new file mode 100644 index 00000000000..91c1e0601e4 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_06.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_07.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_07.png new file mode 100644 index 00000000000..dbf3290ef42 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_07.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_08.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_08.png new file mode 100644 index 00000000000..f9292a6d3d2 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_08.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_09.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_09.png new file mode 100644 index 00000000000..45dd97cec05 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_09.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0A.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0A.png new file mode 100644 index 00000000000..cf07866e422 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0B.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0B.png new file mode 100644 index 00000000000..320db3de31c Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0C.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0C.png new file mode 100644 index 00000000000..41936442fac Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0D.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0D.png new file mode 100644 index 00000000000..84c89d66079 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0E.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0E.png new file mode 100644 index 00000000000..dafb2442a99 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0F.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0F.png new file mode 100644 index 00000000000..95632c72538 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_10.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_10.png new file mode 100644 index 00000000000..f343cf51ac6 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_10.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_11.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_11.png new file mode 100644 index 00000000000..08aadc6de0f Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_11.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_12.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_12.png new file mode 100644 index 00000000000..c1a834c94a2 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_12.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_13.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_13.png new file mode 100644 index 00000000000..9e245cfaf0e Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_13.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_14.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_14.png new file mode 100644 index 00000000000..f35f42836d5 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_14.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_15.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_15.png new file mode 100644 index 00000000000..f15962df556 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_15.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/Raster_16.png b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_16.png new file mode 100644 index 00000000000..6a8ea6832b2 Binary files /dev/null and b/assets/wua/sprite/npc/FlyingMagikoopa/Raster_16.png differ diff --git a/assets/wua/sprite/npc/FlyingMagikoopa/SpriteSheet.xml b/assets/wua/sprite/npc/FlyingMagikoopa/SpriteSheet.xml new file mode 100644 index 00000000000..07571435664 --- /dev/null +++ b/assets/wua/sprite/npc/FlyingMagikoopa/SpriteSheet.xml @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Grub/Palette_00.png b/assets/wua/sprite/npc/Grub/Palette_00.png new file mode 100644 index 00000000000..2bcc2a48546 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Grub/Spikeball.png b/assets/wua/sprite/npc/Grub/Spikeball.png new file mode 100644 index 00000000000..87c00a26f3e Binary files /dev/null and b/assets/wua/sprite/npc/Grub/Spikeball.png differ diff --git a/assets/wua/sprite/npc/Grub/Spikeball_Palette.png b/assets/wua/sprite/npc/Grub/Spikeball_Palette.png new file mode 100644 index 00000000000..72be7e98032 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/Spikeball_Palette.png differ diff --git a/assets/wua/sprite/npc/Grub/SpriteSheet.xml b/assets/wua/sprite/npc/Grub/SpriteSheet.xml new file mode 100644 index 00000000000..db5b7c466fd --- /dev/null +++ b/assets/wua/sprite/npc/Grub/SpriteSheet.xml @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Grub/burndead.png b/assets/wua/sprite/npc/Grub/burndead.png new file mode 100644 index 00000000000..8cfde258dd9 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/burndead.png differ diff --git a/assets/wua/sprite/npc/Grub/burnpain1.png b/assets/wua/sprite/npc/Grub/burnpain1.png new file mode 100644 index 00000000000..839194d6c55 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/burnpain1.png differ diff --git a/assets/wua/sprite/npc/Grub/burnpain2.png b/assets/wua/sprite/npc/Grub/burnpain2.png new file mode 100644 index 00000000000..bdcb6c5ab0b Binary files /dev/null and b/assets/wua/sprite/npc/Grub/burnpain2.png differ diff --git a/assets/wua/sprite/npc/Grub/dizzy1.png b/assets/wua/sprite/npc/Grub/dizzy1.png new file mode 100644 index 00000000000..f2adb7b6358 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/dizzy1.png differ diff --git a/assets/wua/sprite/npc/Grub/dizzy2.png b/assets/wua/sprite/npc/Grub/dizzy2.png new file mode 100644 index 00000000000..93e280c70b6 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/dizzy2.png differ diff --git a/assets/wua/sprite/npc/Grub/dizzy3.png b/assets/wua/sprite/npc/Grub/dizzy3.png new file mode 100644 index 00000000000..b924f84754f Binary files /dev/null and b/assets/wua/sprite/npc/Grub/dizzy3.png differ diff --git a/assets/wua/sprite/npc/Grub/dizzy4.png b/assets/wua/sprite/npc/Grub/dizzy4.png new file mode 100644 index 00000000000..780405a9ab1 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/dizzy4.png differ diff --git a/assets/wua/sprite/npc/Grub/holdtalk.png b/assets/wua/sprite/npc/Grub/holdtalk.png new file mode 100644 index 00000000000..11697294bb7 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/holdtalk.png differ diff --git a/assets/wua/sprite/npc/Grub/idle1.png b/assets/wua/sprite/npc/Grub/idle1.png new file mode 100644 index 00000000000..2c4dca00b78 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idle1.png differ diff --git a/assets/wua/sprite/npc/Grub/idle2.png b/assets/wua/sprite/npc/Grub/idle2.png new file mode 100644 index 00000000000..b715224ede8 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idle2.png differ diff --git a/assets/wua/sprite/npc/Grub/idle3.png b/assets/wua/sprite/npc/Grub/idle3.png new file mode 100644 index 00000000000..cbfa9314c37 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idle3.png differ diff --git a/assets/wua/sprite/npc/Grub/idle4.png b/assets/wua/sprite/npc/Grub/idle4.png new file mode 100644 index 00000000000..f6fd49e6c50 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idle4.png differ diff --git a/assets/wua/sprite/npc/Grub/idlehold1.png b/assets/wua/sprite/npc/Grub/idlehold1.png new file mode 100644 index 00000000000..212f0f8baf5 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idlehold1.png differ diff --git a/assets/wua/sprite/npc/Grub/idlehold2.png b/assets/wua/sprite/npc/Grub/idlehold2.png new file mode 100644 index 00000000000..92f01ba4ea2 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idlehold2.png differ diff --git a/assets/wua/sprite/npc/Grub/idlehold3.png b/assets/wua/sprite/npc/Grub/idlehold3.png new file mode 100644 index 00000000000..ad968ac5ece Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idlehold3.png differ diff --git a/assets/wua/sprite/npc/Grub/idlehold4.png b/assets/wua/sprite/npc/Grub/idlehold4.png new file mode 100644 index 00000000000..62f562331ab Binary files /dev/null and b/assets/wua/sprite/npc/Grub/idlehold4.png differ diff --git a/assets/wua/sprite/npc/Grub/pain1.png b/assets/wua/sprite/npc/Grub/pain1.png new file mode 100644 index 00000000000..eab7d1ed29f Binary files /dev/null and b/assets/wua/sprite/npc/Grub/pain1.png differ diff --git a/assets/wua/sprite/npc/Grub/pain2.png b/assets/wua/sprite/npc/Grub/pain2.png new file mode 100644 index 00000000000..eafddd8d049 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/pain2.png differ diff --git a/assets/wua/sprite/npc/Grub/scaredrun1.png b/assets/wua/sprite/npc/Grub/scaredrun1.png new file mode 100644 index 00000000000..c2866d1da45 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/scaredrun1.png differ diff --git a/assets/wua/sprite/npc/Grub/scaredrun2.png b/assets/wua/sprite/npc/Grub/scaredrun2.png new file mode 100644 index 00000000000..bbfbd8cd7ce Binary files /dev/null and b/assets/wua/sprite/npc/Grub/scaredrun2.png differ diff --git a/assets/wua/sprite/npc/Grub/scaredrun3.png b/assets/wua/sprite/npc/Grub/scaredrun3.png new file mode 100644 index 00000000000..f69df6586b7 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/scaredrun3.png differ diff --git a/assets/wua/sprite/npc/Grub/spit.png b/assets/wua/sprite/npc/Grub/spit.png new file mode 100644 index 00000000000..9866a811c84 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/spit.png differ diff --git a/assets/wua/sprite/npc/Grub/talk.png b/assets/wua/sprite/npc/Grub/talk.png new file mode 100644 index 00000000000..44309e6a940 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/talk.png differ diff --git a/assets/wua/sprite/npc/Grub/throw1.png b/assets/wua/sprite/npc/Grub/throw1.png new file mode 100644 index 00000000000..2dc57045086 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/throw1.png differ diff --git a/assets/wua/sprite/npc/Grub/throw2.png b/assets/wua/sprite/npc/Grub/throw2.png new file mode 100644 index 00000000000..34d7a478e5c Binary files /dev/null and b/assets/wua/sprite/npc/Grub/throw2.png differ diff --git a/assets/wua/sprite/npc/Grub/throw3.png b/assets/wua/sprite/npc/Grub/throw3.png new file mode 100644 index 00000000000..23e366a4cad Binary files /dev/null and b/assets/wua/sprite/npc/Grub/throw3.png differ diff --git a/assets/wua/sprite/npc/Grub/walk1.png b/assets/wua/sprite/npc/Grub/walk1.png new file mode 100644 index 00000000000..ee092e632e3 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/walk1.png differ diff --git a/assets/wua/sprite/npc/Grub/walk2.png b/assets/wua/sprite/npc/Grub/walk2.png new file mode 100644 index 00000000000..5e1a3e6ac4c Binary files /dev/null and b/assets/wua/sprite/npc/Grub/walk2.png differ diff --git a/assets/wua/sprite/npc/Grub/walk3.png b/assets/wua/sprite/npc/Grub/walk3.png new file mode 100644 index 00000000000..fa7d1d18fc1 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/walk3.png differ diff --git a/assets/wua/sprite/npc/Grub/walkhold1.png b/assets/wua/sprite/npc/Grub/walkhold1.png new file mode 100644 index 00000000000..30aafee3dda Binary files /dev/null and b/assets/wua/sprite/npc/Grub/walkhold1.png differ diff --git a/assets/wua/sprite/npc/Grub/walkhold2.png b/assets/wua/sprite/npc/Grub/walkhold2.png new file mode 100644 index 00000000000..541b23f6906 Binary files /dev/null and b/assets/wua/sprite/npc/Grub/walkhold2.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Palette_00.png b/assets/wua/sprite/npc/HammerBrosExt/Palette_00.png new file mode 100644 index 00000000000..b3472e01329 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Palette_00.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_00.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_00.png new file mode 100644 index 00000000000..5ab10a09843 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_00.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_01.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_01.png new file mode 100644 index 00000000000..02c710079a3 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_01.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_02.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_02.png new file mode 100644 index 00000000000..8630f48c793 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_02.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_03.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_03.png new file mode 100644 index 00000000000..fa1d9d08ce5 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_03.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_04.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_04.png new file mode 100644 index 00000000000..a5b4dec3483 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_04.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_05.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_05.png new file mode 100644 index 00000000000..041bee68f57 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_05.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_06.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_06.png new file mode 100644 index 00000000000..803650b91c7 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_06.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_07.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_07.png new file mode 100644 index 00000000000..8e53abcfa38 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_07.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_0B.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_0B.png new file mode 100644 index 00000000000..75b800ce157 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_0C.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_0C.png new file mode 100644 index 00000000000..f5b93ac652f Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_0D.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_0D.png new file mode 100644 index 00000000000..890d09e3999 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_12.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_12.png new file mode 100644 index 00000000000..fd083c999a5 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_12.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_13.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_13.png new file mode 100644 index 00000000000..6843a6909e5 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_13.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_14.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_14.png new file mode 100644 index 00000000000..7eeeebb1967 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_14.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_15.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_15.png new file mode 100644 index 00000000000..5f8964ecc00 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_15.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_16.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_16.png new file mode 100644 index 00000000000..ef2371eba70 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_16.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_17.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_17.png new file mode 100644 index 00000000000..f4101c859a2 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_17.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_18.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_18.png new file mode 100644 index 00000000000..82117d7c695 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_18.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_19.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_19.png new file mode 100644 index 00000000000..f34319c2c9f Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_19.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_1A.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_1A.png new file mode 100644 index 00000000000..11a4162918b Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_1B.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_1B.png new file mode 100644 index 00000000000..e35c40a9584 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_1C.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_1C.png new file mode 100644 index 00000000000..a191a126a86 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_1D.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_1D.png new file mode 100644 index 00000000000..096188e0a67 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_1E.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_1E.png new file mode 100644 index 00000000000..863461d692d Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_1F.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_1F.png new file mode 100644 index 00000000000..c3a95bde94a Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_20.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_20.png new file mode 100644 index 00000000000..a9bc1fb9374 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_20.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_21.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_21.png new file mode 100644 index 00000000000..900022a0b73 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_21.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_22.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_22.png new file mode 100644 index 00000000000..3bb5d29e93e Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_22.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_23.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_23.png new file mode 100644 index 00000000000..a2a10806ba6 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_23.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_24.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_24.png new file mode 100644 index 00000000000..ac7b962abaa Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_24.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_25.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_25.png new file mode 100644 index 00000000000..d0b705afa66 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_25.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_26.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_26.png new file mode 100644 index 00000000000..d9ab1edc041 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_26.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_27.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_27.png new file mode 100644 index 00000000000..36619475bb0 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_27.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/Raster_28.png b/assets/wua/sprite/npc/HammerBrosExt/Raster_28.png new file mode 100644 index 00000000000..26d61fae897 Binary files /dev/null and b/assets/wua/sprite/npc/HammerBrosExt/Raster_28.png differ diff --git a/assets/wua/sprite/npc/HammerBrosExt/SpriteSheet.xml b/assets/wua/sprite/npc/HammerBrosExt/SpriteSheet.xml new file mode 100644 index 00000000000..c6ddee88ef9 --- /dev/null +++ b/assets/wua/sprite/npc/HammerBrosExt/SpriteSheet.xml @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Hbrops/Palette_00.png b/assets/wua/sprite/npc/Hbrops/Palette_00.png new file mode 100644 index 00000000000..1c7dcf58b47 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Palette_01.png b/assets/wua/sprite/npc/Hbrops/Palette_01.png new file mode 100644 index 00000000000..5ddf4f3cc41 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Palette_02.png b/assets/wua/sprite/npc/Hbrops/Palette_02.png new file mode 100644 index 00000000000..5ddf4f3cc41 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Palette_03.png b/assets/wua/sprite/npc/Hbrops/Palette_03.png new file mode 100644 index 00000000000..5ddf4f3cc41 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_00.png b/assets/wua/sprite/npc/Hbrops/Raster_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_01.png b/assets/wua/sprite/npc/Hbrops/Raster_01.png new file mode 100644 index 00000000000..d7019f4a54b Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_02.png b/assets/wua/sprite/npc/Hbrops/Raster_02.png new file mode 100644 index 00000000000..d3b714492e6 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_03.png b/assets/wua/sprite/npc/Hbrops/Raster_03.png new file mode 100644 index 00000000000..b3e9c74cb4d Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_04.png b/assets/wua/sprite/npc/Hbrops/Raster_04.png new file mode 100644 index 00000000000..710790b0de3 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_05.png b/assets/wua/sprite/npc/Hbrops/Raster_05.png new file mode 100644 index 00000000000..cf056cd913b Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_06.png b/assets/wua/sprite/npc/Hbrops/Raster_06.png new file mode 100644 index 00000000000..bd7722bbf98 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_07.png b/assets/wua/sprite/npc/Hbrops/Raster_07.png new file mode 100644 index 00000000000..4fce7b0d31d Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_08.png b/assets/wua/sprite/npc/Hbrops/Raster_08.png new file mode 100644 index 00000000000..14998de68d9 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Hbrops/Raster_09.png b/assets/wua/sprite/npc/Hbrops/Raster_09.png new file mode 100644 index 00000000000..d4552f3dd13 Binary files /dev/null and b/assets/wua/sprite/npc/Hbrops/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Hbrops/SpriteSheet.xml b/assets/wua/sprite/npc/Hbrops/SpriteSheet.xml new file mode 100644 index 00000000000..890dba8966a --- /dev/null +++ b/assets/wua/sprite/npc/Hbrops/SpriteSheet.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/HuckitCrab/Palette_00.png b/assets/wua/sprite/npc/HuckitCrab/Palette_00.png new file mode 100644 index 00000000000..17b6d7075b6 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Palette_00.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Raster_00.png b/assets/wua/sprite/npc/HuckitCrab/Raster_00.png new file mode 100644 index 00000000000..ecbda64c2b3 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Raster_00.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Raster_01.png b/assets/wua/sprite/npc/HuckitCrab/Raster_01.png new file mode 100644 index 00000000000..90d88bc2e95 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Raster_01.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Raster_02.png b/assets/wua/sprite/npc/HuckitCrab/Raster_02.png new file mode 100644 index 00000000000..3ea12a07b15 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Raster_02.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Sleep1.png b/assets/wua/sprite/npc/HuckitCrab/Sleep1.png new file mode 100644 index 00000000000..25f5a8f2df6 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Sleep1.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Sleep2.png b/assets/wua/sprite/npc/HuckitCrab/Sleep2.png new file mode 100644 index 00000000000..baa799a8d2a Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Sleep2.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/SpriteSheet.xml b/assets/wua/sprite/npc/HuckitCrab/SpriteSheet.xml new file mode 100644 index 00000000000..610f6d51b9d --- /dev/null +++ b/assets/wua/sprite/npc/HuckitCrab/SpriteSheet.xml @@ -0,0 +1,525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/HuckitCrab/Throw1.png b/assets/wua/sprite/npc/HuckitCrab/Throw1.png new file mode 100644 index 00000000000..5184106d835 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Throw1.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Throw2.png b/assets/wua/sprite/npc/HuckitCrab/Throw2.png new file mode 100644 index 00000000000..e31e6de244e Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Throw2.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Throw3.png b/assets/wua/sprite/npc/HuckitCrab/Throw3.png new file mode 100644 index 00000000000..0a6b05a921e Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Throw3.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Throw4.png b/assets/wua/sprite/npc/HuckitCrab/Throw4.png new file mode 100644 index 00000000000..707f13977b1 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Throw4.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Walk1.png b/assets/wua/sprite/npc/HuckitCrab/Walk1.png new file mode 100644 index 00000000000..a804b9aa2e6 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Walk1.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/Walk2.png b/assets/wua/sprite/npc/HuckitCrab/Walk2.png new file mode 100644 index 00000000000..236b2d8758b Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/Walk2.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/claw2.png b/assets/wua/sprite/npc/HuckitCrab/claw2.png new file mode 100644 index 00000000000..dfbd805a828 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/claw2.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/rock.pal.png b/assets/wua/sprite/npc/HuckitCrab/rock.pal.png new file mode 100644 index 00000000000..4859266c045 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/rock.pal.png differ diff --git a/assets/wua/sprite/npc/HuckitCrab/rock.png b/assets/wua/sprite/npc/HuckitCrab/rock.png new file mode 100644 index 00000000000..4859266c045 Binary files /dev/null and b/assets/wua/sprite/npc/HuckitCrab/rock.png differ diff --git a/assets/wua/sprite/npc/Humilar/Palette_00.png b/assets/wua/sprite/npc/Humilar/Palette_00.png new file mode 100644 index 00000000000..4c044bdb957 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Humilar/Palette_01.png b/assets/wua/sprite/npc/Humilar/Palette_01.png new file mode 100644 index 00000000000..4733d4b2724 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_00.png b/assets/wua/sprite/npc/Humilar/Raster_00.png new file mode 100644 index 00000000000..46e73b20ad6 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_01.png b/assets/wua/sprite/npc/Humilar/Raster_01.png new file mode 100644 index 00000000000..e50139dad53 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_02.png b/assets/wua/sprite/npc/Humilar/Raster_02.png new file mode 100644 index 00000000000..d476385a64f Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_03.png b/assets/wua/sprite/npc/Humilar/Raster_03.png new file mode 100644 index 00000000000..62e7da208d9 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_04.png b/assets/wua/sprite/npc/Humilar/Raster_04.png new file mode 100644 index 00000000000..1448289f669 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_05.png b/assets/wua/sprite/npc/Humilar/Raster_05.png new file mode 100644 index 00000000000..744b0810ab3 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_06.png b/assets/wua/sprite/npc/Humilar/Raster_06.png new file mode 100644 index 00000000000..e5c326c0508 Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Humilar/Raster_07.png b/assets/wua/sprite/npc/Humilar/Raster_07.png new file mode 100644 index 00000000000..4ac7da55f7b Binary files /dev/null and b/assets/wua/sprite/npc/Humilar/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Humilar/SpriteSheet.xml b/assets/wua/sprite/npc/Humilar/SpriteSheet.xml new file mode 100644 index 00000000000..131e3c3719b --- /dev/null +++ b/assets/wua/sprite/npc/Humilar/SpriteSheet.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Kala/Palette_00.png b/assets/wua/sprite/npc/Kala/Palette_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Kala/Palette_01.png b/assets/wua/sprite/npc/Kala/Palette_01.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Kala/Palette_02.png b/assets/wua/sprite/npc/Kala/Palette_02.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Kala/Palette_03.png b/assets/wua/sprite/npc/Kala/Palette_03.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_00.png b/assets/wua/sprite/npc/Kala/Raster_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_01.png b/assets/wua/sprite/npc/Kala/Raster_01.png new file mode 100644 index 00000000000..d7019f4a54b Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_02.png b/assets/wua/sprite/npc/Kala/Raster_02.png new file mode 100644 index 00000000000..d3b714492e6 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_03.png b/assets/wua/sprite/npc/Kala/Raster_03.png new file mode 100644 index 00000000000..b3e9c74cb4d Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_04.png b/assets/wua/sprite/npc/Kala/Raster_04.png new file mode 100644 index 00000000000..710790b0de3 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_05.png b/assets/wua/sprite/npc/Kala/Raster_05.png new file mode 100644 index 00000000000..cf056cd913b Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_06.png b/assets/wua/sprite/npc/Kala/Raster_06.png new file mode 100644 index 00000000000..bd7722bbf98 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_07.png b/assets/wua/sprite/npc/Kala/Raster_07.png new file mode 100644 index 00000000000..4fce7b0d31d Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_08.png b/assets/wua/sprite/npc/Kala/Raster_08.png new file mode 100644 index 00000000000..14998de68d9 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Kala/Raster_09.png b/assets/wua/sprite/npc/Kala/Raster_09.png new file mode 100644 index 00000000000..d4552f3dd13 Binary files /dev/null and b/assets/wua/sprite/npc/Kala/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Kala/SpriteSheet.xml b/assets/wua/sprite/npc/Kala/SpriteSheet.xml new file mode 100644 index 00000000000..bd225ce7fa1 --- /dev/null +++ b/assets/wua/sprite/npc/Kala/SpriteSheet.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/wua/sprite/npc/Kindar/Palette_00.png b/assets/wua/sprite/npc/Kindar/Palette_00.png new file mode 100644 index 00000000000..3b7992aea38 Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Kindar/Palette_01.png b/assets/wua/sprite/npc/Kindar/Palette_01.png new file mode 100644 index 00000000000..f96cf963082 Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Kindar/Raster_00.png b/assets/wua/sprite/npc/Kindar/Raster_00.png new file mode 100644 index 00000000000..d2b7a2a2d25 Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Kindar/Raster_01.png b/assets/wua/sprite/npc/Kindar/Raster_01.png new file mode 100644 index 00000000000..ff3eb5f9df7 Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Kindar/Raster_02.png b/assets/wua/sprite/npc/Kindar/Raster_02.png new file mode 100644 index 00000000000..1b2bff2960c Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Kindar/Raster_03.png b/assets/wua/sprite/npc/Kindar/Raster_03.png new file mode 100644 index 00000000000..73a56cfe735 Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Kindar/Raster_04.png b/assets/wua/sprite/npc/Kindar/Raster_04.png new file mode 100644 index 00000000000..2e928e04fb3 Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Kindar/Raster_05.png b/assets/wua/sprite/npc/Kindar/Raster_05.png new file mode 100644 index 00000000000..5ca7c5c827e Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Kindar/Raster_06.png b/assets/wua/sprite/npc/Kindar/Raster_06.png new file mode 100644 index 00000000000..97757a6e58c Binary files /dev/null and b/assets/wua/sprite/npc/Kindar/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Kindar/SpriteSheet.xml b/assets/wua/sprite/npc/Kindar/SpriteSheet.xml new file mode 100644 index 00000000000..1699d03f964 --- /dev/null +++ b/assets/wua/sprite/npc/Kindar/SpriteSheet.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Kolorado/Palette_00.png b/assets/wua/sprite/npc/Kolorado/Palette_00.png new file mode 100644 index 00000000000..75e5a8e3bd3 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_00.png b/assets/wua/sprite/npc/Kolorado/Raster_00.png new file mode 100644 index 00000000000..75e5a8e3bd3 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_01.png b/assets/wua/sprite/npc/Kolorado/Raster_01.png new file mode 100644 index 00000000000..8e23bceff2d Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_02.png b/assets/wua/sprite/npc/Kolorado/Raster_02.png new file mode 100644 index 00000000000..21b99179ece Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_03.png b/assets/wua/sprite/npc/Kolorado/Raster_03.png new file mode 100644 index 00000000000..fec7dca623f Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_04.png b/assets/wua/sprite/npc/Kolorado/Raster_04.png new file mode 100644 index 00000000000..bff5527b73f Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_05.png b/assets/wua/sprite/npc/Kolorado/Raster_05.png new file mode 100644 index 00000000000..ded757b5cae Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_06.png b/assets/wua/sprite/npc/Kolorado/Raster_06.png new file mode 100644 index 00000000000..f2fbb4ba628 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_07.png b/assets/wua/sprite/npc/Kolorado/Raster_07.png new file mode 100644 index 00000000000..2cb0885e70b Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_08.png b/assets/wua/sprite/npc/Kolorado/Raster_08.png new file mode 100644 index 00000000000..e76623f84f1 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_09.png b/assets/wua/sprite/npc/Kolorado/Raster_09.png new file mode 100644 index 00000000000..2b57f7a6ad0 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_0A.png b/assets/wua/sprite/npc/Kolorado/Raster_0A.png new file mode 100644 index 00000000000..cd6f39dc3e8 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_0B.png b/assets/wua/sprite/npc/Kolorado/Raster_0B.png new file mode 100644 index 00000000000..c6cf69f69d0 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_0C.png b/assets/wua/sprite/npc/Kolorado/Raster_0C.png new file mode 100644 index 00000000000..add9369eb6e Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_0D.png b/assets/wua/sprite/npc/Kolorado/Raster_0D.png new file mode 100644 index 00000000000..c903a87d490 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_0E.png b/assets/wua/sprite/npc/Kolorado/Raster_0E.png new file mode 100644 index 00000000000..c2e21ce81e6 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_0F.png b/assets/wua/sprite/npc/Kolorado/Raster_0F.png new file mode 100644 index 00000000000..34d9df30041 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_10.png b/assets/wua/sprite/npc/Kolorado/Raster_10.png new file mode 100644 index 00000000000..c52ab4026ee Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_11.png b/assets/wua/sprite/npc/Kolorado/Raster_11.png new file mode 100644 index 00000000000..848d3af0621 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_12.png b/assets/wua/sprite/npc/Kolorado/Raster_12.png new file mode 100644 index 00000000000..e4ba7a03e4f Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_13.png b/assets/wua/sprite/npc/Kolorado/Raster_13.png new file mode 100644 index 00000000000..4a26d652860 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_14.png b/assets/wua/sprite/npc/Kolorado/Raster_14.png new file mode 100644 index 00000000000..bd6628a7502 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_15.png b/assets/wua/sprite/npc/Kolorado/Raster_15.png new file mode 100644 index 00000000000..37735d51be5 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_16.png b/assets/wua/sprite/npc/Kolorado/Raster_16.png new file mode 100644 index 00000000000..1e7d79dbbbb Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_17.png b/assets/wua/sprite/npc/Kolorado/Raster_17.png new file mode 100644 index 00000000000..94b14484ee3 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_18.png b/assets/wua/sprite/npc/Kolorado/Raster_18.png new file mode 100644 index 00000000000..e12f9ac565a Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Kolorado/Raster_19.png b/assets/wua/sprite/npc/Kolorado/Raster_19.png new file mode 100644 index 00000000000..2a5b26a46c7 Binary files /dev/null and b/assets/wua/sprite/npc/Kolorado/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Kolorado/SpriteSheet.xml b/assets/wua/sprite/npc/Kolorado/SpriteSheet.xml new file mode 100644 index 00000000000..d52612fbd4c --- /dev/null +++ b/assets/wua/sprite/npc/Kolorado/SpriteSheet.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Koopaknight/Palette_00.png b/assets/wua/sprite/npc/Koopaknight/Palette_00.png new file mode 100644 index 00000000000..b62a7668a3e Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Palette_01.png b/assets/wua/sprite/npc/Koopaknight/Palette_01.png new file mode 100644 index 00000000000..70e589fc98d Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Palette_02.png b/assets/wua/sprite/npc/Koopaknight/Palette_02.png new file mode 100644 index 00000000000..2de94db463b Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Palette_03.png b/assets/wua/sprite/npc/Koopaknight/Palette_03.png new file mode 100644 index 00000000000..8eb992cbf27 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Palette_04.png b/assets/wua/sprite/npc/Koopaknight/Palette_04.png new file mode 100644 index 00000000000..063e7172657 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_00.png b/assets/wua/sprite/npc/Koopaknight/Raster_00.png new file mode 100644 index 00000000000..97b7ab3284a Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_01.png b/assets/wua/sprite/npc/Koopaknight/Raster_01.png new file mode 100644 index 00000000000..43700ba1308 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_02.png b/assets/wua/sprite/npc/Koopaknight/Raster_02.png new file mode 100644 index 00000000000..e9d7582a5fc Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_03.png b/assets/wua/sprite/npc/Koopaknight/Raster_03.png new file mode 100644 index 00000000000..1850e703ec6 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_04.png b/assets/wua/sprite/npc/Koopaknight/Raster_04.png new file mode 100644 index 00000000000..fb4a34ac505 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_05.png b/assets/wua/sprite/npc/Koopaknight/Raster_05.png new file mode 100644 index 00000000000..435a66f7add Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_06.png b/assets/wua/sprite/npc/Koopaknight/Raster_06.png new file mode 100644 index 00000000000..be8736a9d6b Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_07.png b/assets/wua/sprite/npc/Koopaknight/Raster_07.png new file mode 100644 index 00000000000..f1c33a0a2f0 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_08.png b/assets/wua/sprite/npc/Koopaknight/Raster_08.png new file mode 100644 index 00000000000..afe4459a593 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_09.png b/assets/wua/sprite/npc/Koopaknight/Raster_09.png new file mode 100644 index 00000000000..99022ce5c92 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_0A.png b/assets/wua/sprite/npc/Koopaknight/Raster_0A.png new file mode 100644 index 00000000000..1596ac12302 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_0B.png b/assets/wua/sprite/npc/Koopaknight/Raster_0B.png new file mode 100644 index 00000000000..c0bfe63445e Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_0C.png b/assets/wua/sprite/npc/Koopaknight/Raster_0C.png new file mode 100644 index 00000000000..998e2a70e65 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_0D.png b/assets/wua/sprite/npc/Koopaknight/Raster_0D.png new file mode 100644 index 00000000000..60641a22de0 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_0E.png b/assets/wua/sprite/npc/Koopaknight/Raster_0E.png new file mode 100644 index 00000000000..f92ad46f3fe Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_0F.png b/assets/wua/sprite/npc/Koopaknight/Raster_0F.png new file mode 100644 index 00000000000..96a7caac3cd Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_10.png b/assets/wua/sprite/npc/Koopaknight/Raster_10.png new file mode 100644 index 00000000000..58f14dbdb7d Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_11.png b/assets/wua/sprite/npc/Koopaknight/Raster_11.png new file mode 100644 index 00000000000..d191586f19c Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_12.png b/assets/wua/sprite/npc/Koopaknight/Raster_12.png new file mode 100644 index 00000000000..8c7d0fa0ac7 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_13.png b/assets/wua/sprite/npc/Koopaknight/Raster_13.png new file mode 100644 index 00000000000..51aa54ab84d Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_14.png b/assets/wua/sprite/npc/Koopaknight/Raster_14.png new file mode 100644 index 00000000000..bcb8963a1f1 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_15.png b/assets/wua/sprite/npc/Koopaknight/Raster_15.png new file mode 100644 index 00000000000..0ad12596775 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_16.png b/assets/wua/sprite/npc/Koopaknight/Raster_16.png new file mode 100644 index 00000000000..bc4a9f642bd Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_17.png b/assets/wua/sprite/npc/Koopaknight/Raster_17.png new file mode 100644 index 00000000000..0486493b45c Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_18.png b/assets/wua/sprite/npc/Koopaknight/Raster_18.png new file mode 100644 index 00000000000..b5cab825116 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_19.png b/assets/wua/sprite/npc/Koopaknight/Raster_19.png new file mode 100644 index 00000000000..0809b5bb1e7 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_1A.png b/assets/wua/sprite/npc/Koopaknight/Raster_1A.png new file mode 100644 index 00000000000..581f212933f Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_1B.png b/assets/wua/sprite/npc/Koopaknight/Raster_1B.png new file mode 100644 index 00000000000..233ebbd175d Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_1C.png b/assets/wua/sprite/npc/Koopaknight/Raster_1C.png new file mode 100644 index 00000000000..f4bddca16a1 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_1D.png b/assets/wua/sprite/npc/Koopaknight/Raster_1D.png new file mode 100644 index 00000000000..e900bca9a11 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_1E.png b/assets/wua/sprite/npc/Koopaknight/Raster_1E.png new file mode 100644 index 00000000000..c514bcf192e Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_1F.png b/assets/wua/sprite/npc/Koopaknight/Raster_1F.png new file mode 100644 index 00000000000..69a1dc75049 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_20.png b/assets/wua/sprite/npc/Koopaknight/Raster_20.png new file mode 100644 index 00000000000..1d8b3793736 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_20.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_21.png b/assets/wua/sprite/npc/Koopaknight/Raster_21.png new file mode 100644 index 00000000000..3604bdaf1f9 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_21.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_22.png b/assets/wua/sprite/npc/Koopaknight/Raster_22.png new file mode 100644 index 00000000000..342c0f1bf68 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_22.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_23.png b/assets/wua/sprite/npc/Koopaknight/Raster_23.png new file mode 100644 index 00000000000..487b1fb66ea Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_23.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_24.png b/assets/wua/sprite/npc/Koopaknight/Raster_24.png new file mode 100644 index 00000000000..7c3f2deb467 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_24.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_25.png b/assets/wua/sprite/npc/Koopaknight/Raster_25.png new file mode 100644 index 00000000000..539f86bdc01 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_25.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_26.png b/assets/wua/sprite/npc/Koopaknight/Raster_26.png new file mode 100644 index 00000000000..5223ea1fb28 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_26.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_27.png b/assets/wua/sprite/npc/Koopaknight/Raster_27.png new file mode 100644 index 00000000000..dbba8c26ba6 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_27.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_28.png b/assets/wua/sprite/npc/Koopaknight/Raster_28.png new file mode 100644 index 00000000000..80a37784937 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_28.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/Raster_29.png b/assets/wua/sprite/npc/Koopaknight/Raster_29.png new file mode 100644 index 00000000000..69943d36e94 Binary files /dev/null and b/assets/wua/sprite/npc/Koopaknight/Raster_29.png differ diff --git a/assets/wua/sprite/npc/Koopaknight/SpriteSheet.xml b/assets/wua/sprite/npc/Koopaknight/SpriteSheet.xml new file mode 100644 index 00000000000..0cf7eaf5e87 --- /dev/null +++ b/assets/wua/sprite/npc/Koopaknight/SpriteSheet.xml @@ -0,0 +1,517 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/LGuy/SpriteSheet.xml b/assets/wua/sprite/npc/LGuy/SpriteSheet.xml new file mode 100644 index 00000000000..352129312c0 --- /dev/null +++ b/assets/wua/sprite/npc/LGuy/SpriteSheet.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/LGuy/idle1.pal.png b/assets/wua/sprite/npc/LGuy/idle1.pal.png new file mode 100644 index 00000000000..dce3708d94c Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/idle1.pal.png differ diff --git a/assets/wua/sprite/npc/LGuy/idle1.png b/assets/wua/sprite/npc/LGuy/idle1.png new file mode 100644 index 00000000000..dce3708d94c Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/idle1.png differ diff --git a/assets/wua/sprite/npc/LGuy/idle2.png b/assets/wua/sprite/npc/LGuy/idle2.png new file mode 100644 index 00000000000..3e53345b056 Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/idle2.png differ diff --git a/assets/wua/sprite/npc/LGuy/idle_scared1.png b/assets/wua/sprite/npc/LGuy/idle_scared1.png new file mode 100644 index 00000000000..592dd93ad88 Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/idle_scared1.png differ diff --git a/assets/wua/sprite/npc/LGuy/idle_scared2.png b/assets/wua/sprite/npc/LGuy/idle_scared2.png new file mode 100644 index 00000000000..7554bd79284 Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/idle_scared2.png differ diff --git a/assets/wua/sprite/npc/LGuy/panic1.png b/assets/wua/sprite/npc/LGuy/panic1.png new file mode 100644 index 00000000000..f2a7e5983ce Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/panic1.png differ diff --git a/assets/wua/sprite/npc/LGuy/panic2.png b/assets/wua/sprite/npc/LGuy/panic2.png new file mode 100644 index 00000000000..bc62b9152d6 Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/panic2.png differ diff --git a/assets/wua/sprite/npc/LGuy/panic3.png b/assets/wua/sprite/npc/LGuy/panic3.png new file mode 100644 index 00000000000..45778a0474e Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/panic3.png differ diff --git a/assets/wua/sprite/npc/LGuy/panic4.png b/assets/wua/sprite/npc/LGuy/panic4.png new file mode 100644 index 00000000000..8a893d5769d Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/panic4.png differ diff --git a/assets/wua/sprite/npc/LGuy/stransition.png b/assets/wua/sprite/npc/LGuy/stransition.png new file mode 100644 index 00000000000..308a6fdcc0e Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/stransition.png differ diff --git a/assets/wua/sprite/npc/LGuy/talk.png b/assets/wua/sprite/npc/LGuy/talk.png new file mode 100644 index 00000000000..8eb8d6284cb Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/talk.png differ diff --git a/assets/wua/sprite/npc/LGuy/talk_scared.png b/assets/wua/sprite/npc/LGuy/talk_scared.png new file mode 100644 index 00000000000..776f7f3b2b3 Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/talk_scared.png differ diff --git a/assets/wua/sprite/npc/LGuy/walk1.png b/assets/wua/sprite/npc/LGuy/walk1.png new file mode 100644 index 00000000000..1bf7a3de9da Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/walk1.png differ diff --git a/assets/wua/sprite/npc/LGuy/walk2.png b/assets/wua/sprite/npc/LGuy/walk2.png new file mode 100644 index 00000000000..557904011ff Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/walk2.png differ diff --git a/assets/wua/sprite/npc/LGuy/walk3.png b/assets/wua/sprite/npc/LGuy/walk3.png new file mode 100644 index 00000000000..1796c8333c3 Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/walk3.png differ diff --git a/assets/wua/sprite/npc/LGuy/walk4.png b/assets/wua/sprite/npc/LGuy/walk4.png new file mode 100644 index 00000000000..86ae57d7325 Binary files /dev/null and b/assets/wua/sprite/npc/LGuy/walk4.png differ diff --git a/assets/wua/sprite/npc/LilBob/Chute.pal.png b/assets/wua/sprite/npc/LilBob/Chute.pal.png new file mode 100644 index 00000000000..3ce0eb6afee Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/Chute.pal.png differ diff --git a/assets/wua/sprite/npc/LilBob/Chute.png b/assets/wua/sprite/npc/LilBob/Chute.png new file mode 100644 index 00000000000..3ce0eb6afee Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/Chute.png differ diff --git a/assets/wua/sprite/npc/LilBob/SpriteSheet.xml b/assets/wua/sprite/npc/LilBob/SpriteSheet.xml new file mode 100644 index 00000000000..cde81fe196d --- /dev/null +++ b/assets/wua/sprite/npc/LilBob/SpriteSheet.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/LilBob/fall.png b/assets/wua/sprite/npc/LilBob/fall.png new file mode 100644 index 00000000000..9a5735586ab Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/fall.png differ diff --git a/assets/wua/sprite/npc/LilBob/idle1.pal.png b/assets/wua/sprite/npc/LilBob/idle1.pal.png new file mode 100644 index 00000000000..2eda83c10aa Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/idle1.pal.png differ diff --git a/assets/wua/sprite/npc/LilBob/idle1.png b/assets/wua/sprite/npc/LilBob/idle1.png new file mode 100644 index 00000000000..2eda83c10aa Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/idle1.png differ diff --git a/assets/wua/sprite/npc/LilBob/idle2.png b/assets/wua/sprite/npc/LilBob/idle2.png new file mode 100644 index 00000000000..570fc537189 Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/idle2.png differ diff --git a/assets/wua/sprite/npc/LilBob/idle3.png b/assets/wua/sprite/npc/LilBob/idle3.png new file mode 100644 index 00000000000..8c10fb84571 Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/idle3.png differ diff --git a/assets/wua/sprite/npc/LilBob/pain1.png b/assets/wua/sprite/npc/LilBob/pain1.png new file mode 100644 index 00000000000..6bd5125a283 Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/pain1.png differ diff --git a/assets/wua/sprite/npc/LilBob/pain2.png b/assets/wua/sprite/npc/LilBob/pain2.png new file mode 100644 index 00000000000..5c5a5ecc3ee Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/pain2.png differ diff --git a/assets/wua/sprite/npc/LilBob/sleep1.png b/assets/wua/sprite/npc/LilBob/sleep1.png new file mode 100644 index 00000000000..d06f464ceda Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/sleep1.png differ diff --git a/assets/wua/sprite/npc/LilBob/sleep2.png b/assets/wua/sprite/npc/LilBob/sleep2.png new file mode 100644 index 00000000000..c3baa0f5658 Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/sleep2.png differ diff --git a/assets/wua/sprite/npc/LilBob/walk1.png b/assets/wua/sprite/npc/LilBob/walk1.png new file mode 100644 index 00000000000..2c5106bb878 Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/walk1.png differ diff --git a/assets/wua/sprite/npc/LilBob/walk2.png b/assets/wua/sprite/npc/LilBob/walk2.png new file mode 100644 index 00000000000..25eba7b235f Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/walk2.png differ diff --git a/assets/wua/sprite/npc/LilBob/walk3.png b/assets/wua/sprite/npc/LilBob/walk3.png new file mode 100644 index 00000000000..9cb2bfc96fb Binary files /dev/null and b/assets/wua/sprite/npc/LilBob/walk3.png differ diff --git a/assets/wua/sprite/npc/Luigi/LuigiPJ1.pal.png b/assets/wua/sprite/npc/Luigi/LuigiPJ1.pal.png new file mode 100644 index 00000000000..b7f14c9e004 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/LuigiPJ1.pal.png differ diff --git a/assets/wua/sprite/npc/Luigi/LuigiPJ1.png b/assets/wua/sprite/npc/Luigi/LuigiPJ1.png new file mode 100644 index 00000000000..b7f14c9e004 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/LuigiPJ1.png differ diff --git a/assets/wua/sprite/npc/Luigi/LuigiPJ2.png b/assets/wua/sprite/npc/Luigi/LuigiPJ2.png new file mode 100644 index 00000000000..7a29bb6e1c2 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/LuigiPJ2.png differ diff --git a/assets/wua/sprite/npc/Luigi/Palette_00.png b/assets/wua/sprite/npc/Luigi/Palette_00.png new file mode 100644 index 00000000000..04d5f6f316b Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_00.png b/assets/wua/sprite/npc/Luigi/Raster_00.png new file mode 100644 index 00000000000..3c5e0b78e7b Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_01.png b/assets/wua/sprite/npc/Luigi/Raster_01.png new file mode 100644 index 00000000000..f4a1cf66187 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_02.png b/assets/wua/sprite/npc/Luigi/Raster_02.png new file mode 100644 index 00000000000..34e3f9c7c8b Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_03.png b/assets/wua/sprite/npc/Luigi/Raster_03.png new file mode 100644 index 00000000000..5e1e672608b Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_04.png b/assets/wua/sprite/npc/Luigi/Raster_04.png new file mode 100644 index 00000000000..cce0bf8e573 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_05.png b/assets/wua/sprite/npc/Luigi/Raster_05.png new file mode 100644 index 00000000000..6ce20e52603 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_06.png b/assets/wua/sprite/npc/Luigi/Raster_06.png new file mode 100644 index 00000000000..bd7d8dc5682 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_07.png b/assets/wua/sprite/npc/Luigi/Raster_07.png new file mode 100644 index 00000000000..acecec35176 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_08.png b/assets/wua/sprite/npc/Luigi/Raster_08.png new file mode 100644 index 00000000000..26acc1092a8 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_09.png b/assets/wua/sprite/npc/Luigi/Raster_09.png new file mode 100644 index 00000000000..df9582cad00 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_0A.png b/assets/wua/sprite/npc/Luigi/Raster_0A.png new file mode 100644 index 00000000000..a540f2b5220 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_0B.png b/assets/wua/sprite/npc/Luigi/Raster_0B.png new file mode 100644 index 00000000000..e6ad8d002d5 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_0C.png b/assets/wua/sprite/npc/Luigi/Raster_0C.png new file mode 100644 index 00000000000..700d66ffd58 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_0D.png b/assets/wua/sprite/npc/Luigi/Raster_0D.png new file mode 100644 index 00000000000..8799c70c611 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_0E.png b/assets/wua/sprite/npc/Luigi/Raster_0E.png new file mode 100644 index 00000000000..7b119fedca8 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_0F.png b/assets/wua/sprite/npc/Luigi/Raster_0F.png new file mode 100644 index 00000000000..f37c6845935 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_10.png b/assets/wua/sprite/npc/Luigi/Raster_10.png new file mode 100644 index 00000000000..4e8d6af5a15 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_11.png b/assets/wua/sprite/npc/Luigi/Raster_11.png new file mode 100644 index 00000000000..6bcdab008d1 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_12.png b/assets/wua/sprite/npc/Luigi/Raster_12.png new file mode 100644 index 00000000000..248a8a41445 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_13.png b/assets/wua/sprite/npc/Luigi/Raster_13.png new file mode 100644 index 00000000000..8a5c15ce596 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_14.png b/assets/wua/sprite/npc/Luigi/Raster_14.png new file mode 100644 index 00000000000..39aae3e9cb1 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_15.png b/assets/wua/sprite/npc/Luigi/Raster_15.png new file mode 100644 index 00000000000..f4e695097a4 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_16.png b/assets/wua/sprite/npc/Luigi/Raster_16.png new file mode 100644 index 00000000000..1fb21061dbc Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_17.png b/assets/wua/sprite/npc/Luigi/Raster_17.png new file mode 100644 index 00000000000..0170aec5acb Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_18.png b/assets/wua/sprite/npc/Luigi/Raster_18.png new file mode 100644 index 00000000000..b2f6672632b Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_19.png b/assets/wua/sprite/npc/Luigi/Raster_19.png new file mode 100644 index 00000000000..e4e20001e23 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_1A.png b/assets/wua/sprite/npc/Luigi/Raster_1A.png new file mode 100644 index 00000000000..542ada089b7 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_1B.png b/assets/wua/sprite/npc/Luigi/Raster_1B.png new file mode 100644 index 00000000000..0c768ebf152 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_1C.png b/assets/wua/sprite/npc/Luigi/Raster_1C.png new file mode 100644 index 00000000000..c50ff174155 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_1D.png b/assets/wua/sprite/npc/Luigi/Raster_1D.png new file mode 100644 index 00000000000..2f94d2fc035 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_1E.png b/assets/wua/sprite/npc/Luigi/Raster_1E.png new file mode 100644 index 00000000000..fc3b958d54b Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_1F.png b/assets/wua/sprite/npc/Luigi/Raster_1F.png new file mode 100644 index 00000000000..9d213a339d7 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_20.png b/assets/wua/sprite/npc/Luigi/Raster_20.png new file mode 100644 index 00000000000..1af6464bade Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_20.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_21.png b/assets/wua/sprite/npc/Luigi/Raster_21.png new file mode 100644 index 00000000000..f73ae587874 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_21.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_22.png b/assets/wua/sprite/npc/Luigi/Raster_22.png new file mode 100644 index 00000000000..51d727bb880 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_22.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_23.png b/assets/wua/sprite/npc/Luigi/Raster_23.png new file mode 100644 index 00000000000..4ea1cb2864e Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_23.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_24.png b/assets/wua/sprite/npc/Luigi/Raster_24.png new file mode 100644 index 00000000000..58daf2e6f01 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_24.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_25.png b/assets/wua/sprite/npc/Luigi/Raster_25.png new file mode 100644 index 00000000000..4ac85aa2a4e Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_25.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_26.png b/assets/wua/sprite/npc/Luigi/Raster_26.png new file mode 100644 index 00000000000..7678f4b4b39 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_26.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_27.png b/assets/wua/sprite/npc/Luigi/Raster_27.png new file mode 100644 index 00000000000..01601b594cc Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_27.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_28.png b/assets/wua/sprite/npc/Luigi/Raster_28.png new file mode 100644 index 00000000000..f7cc03879c9 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_28.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_29.png b/assets/wua/sprite/npc/Luigi/Raster_29.png new file mode 100644 index 00000000000..25892d8f8ac Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_29.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_2A.png b/assets/wua/sprite/npc/Luigi/Raster_2A.png new file mode 100644 index 00000000000..2670a9a8443 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_2A.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_2B.png b/assets/wua/sprite/npc/Luigi/Raster_2B.png new file mode 100644 index 00000000000..f1148338c35 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_2B.png differ diff --git a/assets/wua/sprite/npc/Luigi/Raster_2C.png b/assets/wua/sprite/npc/Luigi/Raster_2C.png new file mode 100644 index 00000000000..492009b3a14 Binary files /dev/null and b/assets/wua/sprite/npc/Luigi/Raster_2C.png differ diff --git a/assets/wua/sprite/npc/Luigi/SpriteSheet.xml b/assets/wua/sprite/npc/Luigi/SpriteSheet.xml new file mode 100644 index 00000000000..f02be94287e --- /dev/null +++ b/assets/wua/sprite/npc/Luigi/SpriteSheet.xml @@ -0,0 +1,470 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MafiMafi/Palette_00.png b/assets/wua/sprite/npc/MafiMafi/Palette_00.png new file mode 100644 index 00000000000..5ecdb615117 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Palette_00.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_00.png b/assets/wua/sprite/npc/MafiMafi/Raster_00.png new file mode 100644 index 00000000000..73939f8607c Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_00.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_01.png b/assets/wua/sprite/npc/MafiMafi/Raster_01.png new file mode 100644 index 00000000000..df26c87f5c9 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_01.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_02.png b/assets/wua/sprite/npc/MafiMafi/Raster_02.png new file mode 100644 index 00000000000..21d9e7d2351 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_02.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_03.png b/assets/wua/sprite/npc/MafiMafi/Raster_03.png new file mode 100644 index 00000000000..ef4c40fe391 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_03.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_04.png b/assets/wua/sprite/npc/MafiMafi/Raster_04.png new file mode 100644 index 00000000000..e93252201f1 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_04.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_05.png b/assets/wua/sprite/npc/MafiMafi/Raster_05.png new file mode 100644 index 00000000000..8901fa08506 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_05.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_06.png b/assets/wua/sprite/npc/MafiMafi/Raster_06.png new file mode 100644 index 00000000000..2afbb3a353f Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_06.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_07.png b/assets/wua/sprite/npc/MafiMafi/Raster_07.png new file mode 100644 index 00000000000..af0c50ec3c1 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_07.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_08.png b/assets/wua/sprite/npc/MafiMafi/Raster_08.png new file mode 100644 index 00000000000..4c8f6ca9e3c Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_08.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_09.png b/assets/wua/sprite/npc/MafiMafi/Raster_09.png new file mode 100644 index 00000000000..b58ff297668 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_09.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_0A.png b/assets/wua/sprite/npc/MafiMafi/Raster_0A.png new file mode 100644 index 00000000000..258385a2c44 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_0B.png b/assets/wua/sprite/npc/MafiMafi/Raster_0B.png new file mode 100644 index 00000000000..3a403baa266 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_0C.png b/assets/wua/sprite/npc/MafiMafi/Raster_0C.png new file mode 100644 index 00000000000..c1dc8c0a687 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_0D.png b/assets/wua/sprite/npc/MafiMafi/Raster_0D.png new file mode 100644 index 00000000000..aaf04adbfc2 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_0E.png b/assets/wua/sprite/npc/MafiMafi/Raster_0E.png new file mode 100644 index 00000000000..a94dc11ef38 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_0F.png b/assets/wua/sprite/npc/MafiMafi/Raster_0F.png new file mode 100644 index 00000000000..dd4832426ec Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_10.png b/assets/wua/sprite/npc/MafiMafi/Raster_10.png new file mode 100644 index 00000000000..0949840b155 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_10.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_11.png b/assets/wua/sprite/npc/MafiMafi/Raster_11.png new file mode 100644 index 00000000000..c25c1affb1b Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_11.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_12.png b/assets/wua/sprite/npc/MafiMafi/Raster_12.png new file mode 100644 index 00000000000..08228d44abd Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_12.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_13.png b/assets/wua/sprite/npc/MafiMafi/Raster_13.png new file mode 100644 index 00000000000..71059cc9f5a Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_13.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_14.png b/assets/wua/sprite/npc/MafiMafi/Raster_14.png new file mode 100644 index 00000000000..65f12aa2997 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_14.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_15.png b/assets/wua/sprite/npc/MafiMafi/Raster_15.png new file mode 100644 index 00000000000..509b1840e81 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_15.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/Raster_16.png b/assets/wua/sprite/npc/MafiMafi/Raster_16.png new file mode 100644 index 00000000000..e2c08476de8 Binary files /dev/null and b/assets/wua/sprite/npc/MafiMafi/Raster_16.png differ diff --git a/assets/wua/sprite/npc/MafiMafi/SpriteSheet.xml b/assets/wua/sprite/npc/MafiMafi/SpriteSheet.xml new file mode 100644 index 00000000000..b238017466b --- /dev/null +++ b/assets/wua/sprite/npc/MafiMafi/SpriteSheet.xml @@ -0,0 +1,1136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MageJrTroopa/Ashen.png b/assets/wua/sprite/npc/MageJrTroopa/Ashen.png new file mode 100644 index 00000000000..4cb07867577 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Ashen.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Ashen_Dizzy.png b/assets/wua/sprite/npc/MageJrTroopa/Ashen_Dizzy.png new file mode 100644 index 00000000000..99760878bb3 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Ashen_Dizzy.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Ashen_Poisoned.png b/assets/wua/sprite/npc/MageJrTroopa/Ashen_Poisoned.png new file mode 100644 index 00000000000..07d79225390 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Ashen_Poisoned.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Ashen_Shocked.png b/assets/wua/sprite/npc/MageJrTroopa/Ashen_Shocked.png new file mode 100644 index 00000000000..c999ffe042d Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Ashen_Shocked.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/BurnHurt1.png b/assets/wua/sprite/npc/MageJrTroopa/BurnHurt1.png new file mode 100644 index 00000000000..cc32e9d2a6c Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/BurnHurt1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/BurnHurt2.png b/assets/wua/sprite/npc/MageJrTroopa/BurnHurt2.png new file mode 100644 index 00000000000..23a84f03ccc Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/BurnHurt2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/BurnStaff1.png b/assets/wua/sprite/npc/MageJrTroopa/BurnStaff1.png new file mode 100644 index 00000000000..727b13ef043 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/BurnStaff1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/BurnStaff2.png b/assets/wua/sprite/npc/MageJrTroopa/BurnStaff2.png new file mode 100644 index 00000000000..7bc8d4ce376 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/BurnStaff2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/BurnStill.png b/assets/wua/sprite/npc/MageJrTroopa/BurnStill.png new file mode 100644 index 00000000000..4cb07867577 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/BurnStill.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Burnt.png b/assets/wua/sprite/npc/MageJrTroopa/Burnt.png new file mode 100644 index 00000000000..cc32e9d2a6c Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Burnt.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Default.png b/assets/wua/sprite/npc/MageJrTroopa/Default.png new file mode 100644 index 00000000000..3456cf2ba33 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Default.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Dizzy.png b/assets/wua/sprite/npc/MageJrTroopa/Dizzy.png new file mode 100644 index 00000000000..99760878bb3 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Dizzy.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Dizzy1.png b/assets/wua/sprite/npc/MageJrTroopa/Dizzy1.png new file mode 100644 index 00000000000..8713c57e680 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Dizzy1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Dizzy2.png b/assets/wua/sprite/npc/MageJrTroopa/Dizzy2.png new file mode 100644 index 00000000000..84ee3d44aea Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Dizzy2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Dizzy3.png b/assets/wua/sprite/npc/MageJrTroopa/Dizzy3.png new file mode 100644 index 00000000000..7b66cbb3f4f Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Dizzy3.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Dizzy4.png b/assets/wua/sprite/npc/MageJrTroopa/Dizzy4.png new file mode 100644 index 00000000000..ff8a85b600a Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Dizzy4.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/ExtendStaff1.png b/assets/wua/sprite/npc/MageJrTroopa/ExtendStaff1.png new file mode 100644 index 00000000000..54f7838fbf1 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/ExtendStaff1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/ExtendStaff2.png b/assets/wua/sprite/npc/MageJrTroopa/ExtendStaff2.png new file mode 100644 index 00000000000..c2a27902563 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/ExtendStaff2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Flail1.png b/assets/wua/sprite/npc/MageJrTroopa/Flail1.png new file mode 100644 index 00000000000..20c3e176d93 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Flail1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Flail2.png b/assets/wua/sprite/npc/MageJrTroopa/Flail2.png new file mode 100644 index 00000000000..f47068e7e2e Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Flail2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Hurt1.png b/assets/wua/sprite/npc/MageJrTroopa/Hurt1.png new file mode 100644 index 00000000000..8ffe31dfa36 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Hurt1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Hurt2.png b/assets/wua/sprite/npc/MageJrTroopa/Hurt2.png new file mode 100644 index 00000000000..24e3c085c55 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Hurt2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Idle1.png b/assets/wua/sprite/npc/MageJrTroopa/Idle1.png new file mode 100644 index 00000000000..3456cf2ba33 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Idle1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Idle2.png b/assets/wua/sprite/npc/MageJrTroopa/Idle2.png new file mode 100644 index 00000000000..353668dd319 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Idle2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Point1.png b/assets/wua/sprite/npc/MageJrTroopa/Point1.png new file mode 100644 index 00000000000..1c3d9619d97 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Point1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Point2.png b/assets/wua/sprite/npc/MageJrTroopa/Point2.png new file mode 100644 index 00000000000..a071d52babf Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Point2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Poisoned.png b/assets/wua/sprite/npc/MageJrTroopa/Poisoned.png new file mode 100644 index 00000000000..07d79225390 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Poisoned.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/RaiseStaff.png b/assets/wua/sprite/npc/MageJrTroopa/RaiseStaff.png new file mode 100644 index 00000000000..741aedcf942 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/RaiseStaff.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Shocked.png b/assets/wua/sprite/npc/MageJrTroopa/Shocked.png new file mode 100644 index 00000000000..c999ffe042d Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Shocked.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Sleep1.png b/assets/wua/sprite/npc/MageJrTroopa/Sleep1.png new file mode 100644 index 00000000000..bed78f35222 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Sleep1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Sleep2.png b/assets/wua/sprite/npc/MageJrTroopa/Sleep2.png new file mode 100644 index 00000000000..4d029780ec3 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Sleep2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Sleep3.png b/assets/wua/sprite/npc/MageJrTroopa/Sleep3.png new file mode 100644 index 00000000000..0eba67f5845 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Sleep3.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/SpriteSheet.xml b/assets/wua/sprite/npc/MageJrTroopa/SpriteSheet.xml new file mode 100644 index 00000000000..69738285c85 --- /dev/null +++ b/assets/wua/sprite/npc/MageJrTroopa/SpriteSheet.xml @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MageJrTroopa/Step1.png b/assets/wua/sprite/npc/MageJrTroopa/Step1.png new file mode 100644 index 00000000000..b9aa62ee957 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Step1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Step2.png b/assets/wua/sprite/npc/MageJrTroopa/Step2.png new file mode 100644 index 00000000000..cf6d5ee14a5 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Step2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Step3.png b/assets/wua/sprite/npc/MageJrTroopa/Step3.png new file mode 100644 index 00000000000..08e76e20db0 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Step3.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/Talk.png b/assets/wua/sprite/npc/MageJrTroopa/Talk.png new file mode 100644 index 00000000000..6d1ca0e0f66 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/Talk.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/attackU1.png b/assets/wua/sprite/npc/MageJrTroopa/attackU1.png new file mode 100644 index 00000000000..47f288aa96d Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/attackU1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/attackU2.png b/assets/wua/sprite/npc/MageJrTroopa/attackU2.png new file mode 100644 index 00000000000..4b7a783867b Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/attackU2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/attackU3.png b/assets/wua/sprite/npc/MageJrTroopa/attackU3.png new file mode 100644 index 00000000000..7f2f5fdafaf Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/attackU3.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/attackU4.png b/assets/wua/sprite/npc/MageJrTroopa/attackU4.png new file mode 100644 index 00000000000..6fdf742525e Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/attackU4.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/hurtU1.png b/assets/wua/sprite/npc/MageJrTroopa/hurtU1.png new file mode 100644 index 00000000000..241ff6503e7 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/hurtU1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/hurtU2.png b/assets/wua/sprite/npc/MageJrTroopa/hurtU2.png new file mode 100644 index 00000000000..4a6c4368519 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/hurtU2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/idleU1.png b/assets/wua/sprite/npc/MageJrTroopa/idleU1.png new file mode 100644 index 00000000000..032945219a4 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/idleU1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/idleU2.png b/assets/wua/sprite/npc/MageJrTroopa/idleU2.png new file mode 100644 index 00000000000..ddc3dfaf0f2 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/idleU2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/runU1.png b/assets/wua/sprite/npc/MageJrTroopa/runU1.png new file mode 100644 index 00000000000..11803c965d0 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/runU1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/runU2.png b/assets/wua/sprite/npc/MageJrTroopa/runU2.png new file mode 100644 index 00000000000..d5370de6606 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/runU2.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/runU3.png b/assets/wua/sprite/npc/MageJrTroopa/runU3.png new file mode 100644 index 00000000000..c67fdd2398f Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/runU3.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/talkU1.png b/assets/wua/sprite/npc/MageJrTroopa/talkU1.png new file mode 100644 index 00000000000..295224e6cc9 Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/talkU1.png differ diff --git a/assets/wua/sprite/npc/MageJrTroopa/talkU2.png b/assets/wua/sprite/npc/MageJrTroopa/talkU2.png new file mode 100644 index 00000000000..e36c95c0c4a Binary files /dev/null and b/assets/wua/sprite/npc/MageJrTroopa/talkU2.png differ diff --git a/assets/wua/sprite/npc/Magnar/Palette_00.png b/assets/wua/sprite/npc/Magnar/Palette_00.png new file mode 100644 index 00000000000..0328b603785 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Magnar/Palette_01.png b/assets/wua/sprite/npc/Magnar/Palette_01.png new file mode 100644 index 00000000000..f2dca744155 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Magnar/Raster_00.png b/assets/wua/sprite/npc/Magnar/Raster_00.png new file mode 100644 index 00000000000..3bd1b8b7920 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Magnar/Raster_01.png b/assets/wua/sprite/npc/Magnar/Raster_01.png new file mode 100644 index 00000000000..13b0a59b3e8 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Magnar/Raster_02.png b/assets/wua/sprite/npc/Magnar/Raster_02.png new file mode 100644 index 00000000000..d82fd7312f0 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Magnar/Raster_03.png b/assets/wua/sprite/npc/Magnar/Raster_03.png new file mode 100644 index 00000000000..f624d30ca06 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Magnar/Raster_04.png b/assets/wua/sprite/npc/Magnar/Raster_04.png new file mode 100644 index 00000000000..d4b6e0517b4 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Magnar/Raster_05.png b/assets/wua/sprite/npc/Magnar/Raster_05.png new file mode 100644 index 00000000000..67600cf6120 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Magnar/Raster_06.png b/assets/wua/sprite/npc/Magnar/Raster_06.png new file mode 100644 index 00000000000..630b216bd86 Binary files /dev/null and b/assets/wua/sprite/npc/Magnar/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Magnar/SpriteSheet.xml b/assets/wua/sprite/npc/Magnar/SpriteSheet.xml new file mode 100644 index 00000000000..e12f286ae83 --- /dev/null +++ b/assets/wua/sprite/npc/Magnar/SpriteSheet.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Maki/Maki1.pal.png b/assets/wua/sprite/npc/Maki/Maki1.pal.png new file mode 100644 index 00000000000..7c56f3784ed Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki1.pal.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki1.png b/assets/wua/sprite/npc/Maki/Maki1.png new file mode 100644 index 00000000000..a1b7a8c7f08 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki1.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki2.png b/assets/wua/sprite/npc/Maki/Maki2.png new file mode 100644 index 00000000000..a4ceff23743 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki2.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki3.png b/assets/wua/sprite/npc/Maki/Maki3.png new file mode 100644 index 00000000000..04e1968a1c5 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki3.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki4.png b/assets/wua/sprite/npc/Maki/Maki4.png new file mode 100644 index 00000000000..0af84231c33 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki4.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki5.png b/assets/wua/sprite/npc/Maki/Maki5.png new file mode 100644 index 00000000000..1f3b1afdcc0 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki5.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki6.png b/assets/wua/sprite/npc/Maki/Maki6.png new file mode 100644 index 00000000000..6395d3b5c29 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki6.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki7.png b/assets/wua/sprite/npc/Maki/Maki7.png new file mode 100644 index 00000000000..47bc5506219 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki7.png differ diff --git a/assets/wua/sprite/npc/Maki/Maki8.png b/assets/wua/sprite/npc/Maki/Maki8.png new file mode 100644 index 00000000000..05ec4b231c7 Binary files /dev/null and b/assets/wua/sprite/npc/Maki/Maki8.png differ diff --git a/assets/wua/sprite/npc/Maki/SpriteSheet.xml b/assets/wua/sprite/npc/Maki/SpriteSheet.xml new file mode 100644 index 00000000000..26897f17664 --- /dev/null +++ b/assets/wua/sprite/npc/Maki/SpriteSheet.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MarioNpc/Palette_00.png b/assets/wua/sprite/npc/MarioNpc/Palette_00.png new file mode 100644 index 00000000000..59fe8aac3c5 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Palette_00.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_00.png b/assets/wua/sprite/npc/MarioNpc/Raster_00.png new file mode 100644 index 00000000000..2c3800bcea8 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_00.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_01.png b/assets/wua/sprite/npc/MarioNpc/Raster_01.png new file mode 100644 index 00000000000..8578804821c Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_01.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_02.png b/assets/wua/sprite/npc/MarioNpc/Raster_02.png new file mode 100644 index 00000000000..df1599c157d Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_02.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_03.png b/assets/wua/sprite/npc/MarioNpc/Raster_03.png new file mode 100644 index 00000000000..df5f528aaa5 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_03.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_04.png b/assets/wua/sprite/npc/MarioNpc/Raster_04.png new file mode 100644 index 00000000000..7f1071cb19a Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_04.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_05.png b/assets/wua/sprite/npc/MarioNpc/Raster_05.png new file mode 100644 index 00000000000..1734d1eed96 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_05.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_06.png b/assets/wua/sprite/npc/MarioNpc/Raster_06.png new file mode 100644 index 00000000000..035ee5d2881 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_06.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_07.png b/assets/wua/sprite/npc/MarioNpc/Raster_07.png new file mode 100644 index 00000000000..e4569420485 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_07.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_08.png b/assets/wua/sprite/npc/MarioNpc/Raster_08.png new file mode 100644 index 00000000000..5ef643fcc8c Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_08.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_09.png b/assets/wua/sprite/npc/MarioNpc/Raster_09.png new file mode 100644 index 00000000000..3530d46fdde Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_09.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_0A.png b/assets/wua/sprite/npc/MarioNpc/Raster_0A.png new file mode 100644 index 00000000000..e83a2ffd47f Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_0B.png b/assets/wua/sprite/npc/MarioNpc/Raster_0B.png new file mode 100644 index 00000000000..c9a5a7da258 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_0C.png b/assets/wua/sprite/npc/MarioNpc/Raster_0C.png new file mode 100644 index 00000000000..6fa79871a1f Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_0D.png b/assets/wua/sprite/npc/MarioNpc/Raster_0D.png new file mode 100644 index 00000000000..b26f9bf2fd4 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_0E.png b/assets/wua/sprite/npc/MarioNpc/Raster_0E.png new file mode 100644 index 00000000000..092649b4cc0 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_0F.png b/assets/wua/sprite/npc/MarioNpc/Raster_0F.png new file mode 100644 index 00000000000..729c54f8d0f Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_10.png b/assets/wua/sprite/npc/MarioNpc/Raster_10.png new file mode 100644 index 00000000000..c7e116c75ab Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_10.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_11.png b/assets/wua/sprite/npc/MarioNpc/Raster_11.png new file mode 100644 index 00000000000..17ea8ce0644 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_11.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_12.png b/assets/wua/sprite/npc/MarioNpc/Raster_12.png new file mode 100644 index 00000000000..81a6f2f0fed Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_12.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_13.png b/assets/wua/sprite/npc/MarioNpc/Raster_13.png new file mode 100644 index 00000000000..a4de8a36328 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_13.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/Raster_14.png b/assets/wua/sprite/npc/MarioNpc/Raster_14.png new file mode 100644 index 00000000000..5417901c94d Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/Raster_14.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/SpriteSheet.xml b/assets/wua/sprite/npc/MarioNpc/SpriteSheet.xml new file mode 100644 index 00000000000..c099320fb67 --- /dev/null +++ b/assets/wua/sprite/npc/MarioNpc/SpriteSheet.xml @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MarioNpc/dizzy1.png b/assets/wua/sprite/npc/MarioNpc/dizzy1.png new file mode 100644 index 00000000000..1d095961ca3 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/dizzy1.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/dizzy2.png b/assets/wua/sprite/npc/MarioNpc/dizzy2.png new file mode 100644 index 00000000000..58a2a929407 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/dizzy2.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/dizzy3.png b/assets/wua/sprite/npc/MarioNpc/dizzy3.png new file mode 100644 index 00000000000..3b80ef3a451 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/dizzy3.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/fall1.png b/assets/wua/sprite/npc/MarioNpc/fall1.png new file mode 100644 index 00000000000..014d2bda81c Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/fall1.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/fall2.png b/assets/wua/sprite/npc/MarioNpc/fall2.png new file mode 100644 index 00000000000..b0c300f86a1 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/fall2.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/fall3.png b/assets/wua/sprite/npc/MarioNpc/fall3.png new file mode 100644 index 00000000000..4484f12e834 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/fall3.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/fall4.png b/assets/wua/sprite/npc/MarioNpc/fall4.png new file mode 100644 index 00000000000..4ad412c968f Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/fall4.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/fall5.png b/assets/wua/sprite/npc/MarioNpc/fall5.png new file mode 100644 index 00000000000..24731c74a15 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/fall5.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/jumping1.png b/assets/wua/sprite/npc/MarioNpc/jumping1.png new file mode 100644 index 00000000000..bb2023a938a Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/jumping1.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/jumping2.png b/assets/wua/sprite/npc/MarioNpc/jumping2.png new file mode 100644 index 00000000000..b397642cea0 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/jumping2.png differ diff --git a/assets/wua/sprite/npc/MarioNpc/prone.png b/assets/wua/sprite/npc/MarioNpc/prone.png new file mode 100644 index 00000000000..d2ac0a9f0a6 Binary files /dev/null and b/assets/wua/sprite/npc/MarioNpc/prone.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee0.png b/assets/wua/sprite/npc/Mayzee/Mayzee0.png new file mode 100644 index 00000000000..682d49deb69 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee0.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee1.png b/assets/wua/sprite/npc/Mayzee/Mayzee1.png new file mode 100644 index 00000000000..ce0b6df9e94 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee1.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee10.png b/assets/wua/sprite/npc/Mayzee/Mayzee10.png new file mode 100644 index 00000000000..55ae48a564b Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee10.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee11.png b/assets/wua/sprite/npc/Mayzee/Mayzee11.png new file mode 100644 index 00000000000..44c9c1b0cfd Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee11.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee12.png b/assets/wua/sprite/npc/Mayzee/Mayzee12.png new file mode 100644 index 00000000000..4b4900609a8 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee12.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee13.png b/assets/wua/sprite/npc/Mayzee/Mayzee13.png new file mode 100644 index 00000000000..32ca386af97 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee13.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee14.png b/assets/wua/sprite/npc/Mayzee/Mayzee14.png new file mode 100644 index 00000000000..98b40fa81e5 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee14.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee15.png b/assets/wua/sprite/npc/Mayzee/Mayzee15.png new file mode 100644 index 00000000000..42b9e4460f0 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee15.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee16.png b/assets/wua/sprite/npc/Mayzee/Mayzee16.png new file mode 100644 index 00000000000..d13266cb472 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee16.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee17.png b/assets/wua/sprite/npc/Mayzee/Mayzee17.png new file mode 100644 index 00000000000..a96d6fcd12e Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee17.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee2.png b/assets/wua/sprite/npc/Mayzee/Mayzee2.png new file mode 100644 index 00000000000..efcbf9ac9b4 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee2.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee3.png b/assets/wua/sprite/npc/Mayzee/Mayzee3.png new file mode 100644 index 00000000000..a05613574a5 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee3.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee4.png b/assets/wua/sprite/npc/Mayzee/Mayzee4.png new file mode 100644 index 00000000000..a488361095f Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee4.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee5.png b/assets/wua/sprite/npc/Mayzee/Mayzee5.png new file mode 100644 index 00000000000..1040ebeac15 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee5.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee6.png b/assets/wua/sprite/npc/Mayzee/Mayzee6.png new file mode 100644 index 00000000000..8580b59b166 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee6.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee7.png b/assets/wua/sprite/npc/Mayzee/Mayzee7.png new file mode 100644 index 00000000000..0026a35a1bc Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee7.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee8.png b/assets/wua/sprite/npc/Mayzee/Mayzee8.png new file mode 100644 index 00000000000..da2ba795d12 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee8.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Mayzee9.png b/assets/wua/sprite/npc/Mayzee/Mayzee9.png new file mode 100644 index 00000000000..2c675e23b7b Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Mayzee9.png differ diff --git a/assets/wua/sprite/npc/Mayzee/Palette_00.png b/assets/wua/sprite/npc/Mayzee/Palette_00.png new file mode 100644 index 00000000000..eba990d2735 Binary files /dev/null and b/assets/wua/sprite/npc/Mayzee/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Mayzee/SpriteSheet.xml b/assets/wua/sprite/npc/Mayzee/SpriteSheet.xml new file mode 100644 index 00000000000..386f0686cd3 --- /dev/null +++ b/assets/wua/sprite/npc/Mayzee/SpriteSheet.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MechaChomp/MechaChomp1.png b/assets/wua/sprite/npc/MechaChomp/MechaChomp1.png new file mode 100644 index 00000000000..a9a48ecc35d Binary files /dev/null and b/assets/wua/sprite/npc/MechaChomp/MechaChomp1.png differ diff --git a/assets/wua/sprite/npc/MechaChomp/MechaChomp2.png b/assets/wua/sprite/npc/MechaChomp/MechaChomp2.png new file mode 100644 index 00000000000..38b22aa8d33 Binary files /dev/null and b/assets/wua/sprite/npc/MechaChomp/MechaChomp2.png differ diff --git a/assets/wua/sprite/npc/MechaChomp/MechaChomp3.png b/assets/wua/sprite/npc/MechaChomp/MechaChomp3.png new file mode 100644 index 00000000000..086accd1fc2 Binary files /dev/null and b/assets/wua/sprite/npc/MechaChomp/MechaChomp3.png differ diff --git a/assets/wua/sprite/npc/MechaChomp/Palette_00.png b/assets/wua/sprite/npc/MechaChomp/Palette_00.png new file mode 100644 index 00000000000..2a123338908 Binary files /dev/null and b/assets/wua/sprite/npc/MechaChomp/Palette_00.png differ diff --git a/assets/wua/sprite/npc/MechaChomp/SpriteSheet.xml b/assets/wua/sprite/npc/MechaChomp/SpriteSheet.xml new file mode 100644 index 00000000000..e8a89595502 --- /dev/null +++ b/assets/wua/sprite/npc/MechaChomp/SpriteSheet.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MegaMic/SpriteSheet.xml b/assets/wua/sprite/npc/MegaMic/SpriteSheet.xml new file mode 100644 index 00000000000..00c4e92992d --- /dev/null +++ b/assets/wua/sprite/npc/MegaMic/SpriteSheet.xml @@ -0,0 +1,362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MegaMic/hand1.png b/assets/wua/sprite/npc/MegaMic/hand1.png new file mode 100644 index 00000000000..55c2be81b5b Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/hand1.png differ diff --git a/assets/wua/sprite/npc/MegaMic/hand2.png b/assets/wua/sprite/npc/MegaMic/hand2.png new file mode 100644 index 00000000000..fb4aa74ea92 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/hand2.png differ diff --git a/assets/wua/sprite/npc/MegaMic/hand3.png b/assets/wua/sprite/npc/MegaMic/hand3.png new file mode 100644 index 00000000000..fc236c02179 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/hand3.png differ diff --git a/assets/wua/sprite/npc/MegaMic/hand4.png b/assets/wua/sprite/npc/MegaMic/hand4.png new file mode 100644 index 00000000000..30e041435c2 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/hand4.png differ diff --git a/assets/wua/sprite/npc/MegaMic/hand5.png b/assets/wua/sprite/npc/MegaMic/hand5.png new file mode 100644 index 00000000000..d652dc39cdf Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/hand5.png differ diff --git a/assets/wua/sprite/npc/MegaMic/hand6.png b/assets/wua/sprite/npc/MegaMic/hand6.png new file mode 100644 index 00000000000..822e03cb53c Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/hand6.png differ diff --git a/assets/wua/sprite/npc/MegaMic/hand7.png b/assets/wua/sprite/npc/MegaMic/hand7.png new file mode 100644 index 00000000000..9382ac544e7 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/hand7.png differ diff --git a/assets/wua/sprite/npc/MegaMic/idle1.pal.png b/assets/wua/sprite/npc/MegaMic/idle1.pal.png new file mode 100644 index 00000000000..098e4005bb3 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/idle1.pal.png differ diff --git a/assets/wua/sprite/npc/MegaMic/idle1.png b/assets/wua/sprite/npc/MegaMic/idle1.png new file mode 100644 index 00000000000..098e4005bb3 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/idle1.png differ diff --git a/assets/wua/sprite/npc/MegaMic/idle2.png b/assets/wua/sprite/npc/MegaMic/idle2.png new file mode 100644 index 00000000000..c74da32e6e5 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/idle2.png differ diff --git a/assets/wua/sprite/npc/MegaMic/idle_front1.png b/assets/wua/sprite/npc/MegaMic/idle_front1.png new file mode 100644 index 00000000000..a947e08b83a Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/idle_front1.png differ diff --git a/assets/wua/sprite/npc/MegaMic/idle_front2.png b/assets/wua/sprite/npc/MegaMic/idle_front2.png new file mode 100644 index 00000000000..b914eb46e12 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/idle_front2.png differ diff --git a/assets/wua/sprite/npc/MegaMic/talk1.png b/assets/wua/sprite/npc/MegaMic/talk1.png new file mode 100644 index 00000000000..ab6b192a6db Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/talk1.png differ diff --git a/assets/wua/sprite/npc/MegaMic/talk2.png b/assets/wua/sprite/npc/MegaMic/talk2.png new file mode 100644 index 00000000000..6488d2db53b Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/talk2.png differ diff --git a/assets/wua/sprite/npc/MegaMic/talk_front1.png b/assets/wua/sprite/npc/MegaMic/talk_front1.png new file mode 100644 index 00000000000..715dd47d2f9 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/talk_front1.png differ diff --git a/assets/wua/sprite/npc/MegaMic/talk_front2.png b/assets/wua/sprite/npc/MegaMic/talk_front2.png new file mode 100644 index 00000000000..7657072d097 Binary files /dev/null and b/assets/wua/sprite/npc/MegaMic/talk_front2.png differ diff --git a/assets/wua/sprite/npc/Merlon/Palette_00.png b/assets/wua/sprite/npc/Merlon/Palette_00.png new file mode 100644 index 00000000000..c47ffc02a41 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_00.png b/assets/wua/sprite/npc/Merlon/Raster_00.png new file mode 100644 index 00000000000..092e3d0ee22 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_01.png b/assets/wua/sprite/npc/Merlon/Raster_01.png new file mode 100644 index 00000000000..fbb2221d7d5 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_02.png b/assets/wua/sprite/npc/Merlon/Raster_02.png new file mode 100644 index 00000000000..4706145f4b6 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_03.png b/assets/wua/sprite/npc/Merlon/Raster_03.png new file mode 100644 index 00000000000..f4f925bc3c9 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_04.png b/assets/wua/sprite/npc/Merlon/Raster_04.png new file mode 100644 index 00000000000..7af9ace56c2 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_05.png b/assets/wua/sprite/npc/Merlon/Raster_05.png new file mode 100644 index 00000000000..43f989c0ed6 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_06.png b/assets/wua/sprite/npc/Merlon/Raster_06.png new file mode 100644 index 00000000000..875d374951a Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_07.png b/assets/wua/sprite/npc/Merlon/Raster_07.png new file mode 100644 index 00000000000..76615449edc Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_08.png b/assets/wua/sprite/npc/Merlon/Raster_08.png new file mode 100644 index 00000000000..161435ed239 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_09.png b/assets/wua/sprite/npc/Merlon/Raster_09.png new file mode 100644 index 00000000000..869d8c63b1c Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_0A.png b/assets/wua/sprite/npc/Merlon/Raster_0A.png new file mode 100644 index 00000000000..9bf8f79e2d9 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_0B.png b/assets/wua/sprite/npc/Merlon/Raster_0B.png new file mode 100644 index 00000000000..6ca5374b3cb Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_0C.png b/assets/wua/sprite/npc/Merlon/Raster_0C.png new file mode 100644 index 00000000000..4550905a422 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_0D.png b/assets/wua/sprite/npc/Merlon/Raster_0D.png new file mode 100644 index 00000000000..19783f8e093 Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_0E.png b/assets/wua/sprite/npc/Merlon/Raster_0E.png new file mode 100644 index 00000000000..e829bd3878f Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Merlon/Raster_0F.png b/assets/wua/sprite/npc/Merlon/Raster_0F.png new file mode 100644 index 00000000000..e68f0f9b63a Binary files /dev/null and b/assets/wua/sprite/npc/Merlon/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Merlon/SpriteSheet.xml b/assets/wua/sprite/npc/Merlon/SpriteSheet.xml new file mode 100644 index 00000000000..a87497f877e --- /dev/null +++ b/assets/wua/sprite/npc/Merlon/SpriteSheet.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MillieK/Millie1.pal.png b/assets/wua/sprite/npc/MillieK/Millie1.pal.png new file mode 100644 index 00000000000..9eb23dfb081 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie1.pal.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie1.png b/assets/wua/sprite/npc/MillieK/Millie1.png new file mode 100644 index 00000000000..d2b6405305b Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie1.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie10.png b/assets/wua/sprite/npc/MillieK/Millie10.png new file mode 100644 index 00000000000..7c831451bfa Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie10.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie11.png b/assets/wua/sprite/npc/MillieK/Millie11.png new file mode 100644 index 00000000000..c39c4da8a3e Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie11.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie12.png b/assets/wua/sprite/npc/MillieK/Millie12.png new file mode 100644 index 00000000000..118225cc7d2 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie12.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie13.png b/assets/wua/sprite/npc/MillieK/Millie13.png new file mode 100644 index 00000000000..91baf11f3a3 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie13.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie2.png b/assets/wua/sprite/npc/MillieK/Millie2.png new file mode 100644 index 00000000000..c9a7a56ebd8 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie2.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie3.png b/assets/wua/sprite/npc/MillieK/Millie3.png new file mode 100644 index 00000000000..eeb23f3bc09 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie3.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie4.png b/assets/wua/sprite/npc/MillieK/Millie4.png new file mode 100644 index 00000000000..cd6f76b53b3 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie4.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie5.png b/assets/wua/sprite/npc/MillieK/Millie5.png new file mode 100644 index 00000000000..58fecf91a7b Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie5.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie6.png b/assets/wua/sprite/npc/MillieK/Millie6.png new file mode 100644 index 00000000000..c57e5f72e7a Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie6.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie7.png b/assets/wua/sprite/npc/MillieK/Millie7.png new file mode 100644 index 00000000000..029172fb387 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie7.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie8.png b/assets/wua/sprite/npc/MillieK/Millie8.png new file mode 100644 index 00000000000..1a3865b6f6e Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie8.png differ diff --git a/assets/wua/sprite/npc/MillieK/Millie9.png b/assets/wua/sprite/npc/MillieK/Millie9.png new file mode 100644 index 00000000000..ce7fe084db0 Binary files /dev/null and b/assets/wua/sprite/npc/MillieK/Millie9.png differ diff --git a/assets/wua/sprite/npc/MillieK/SpriteSheet.xml b/assets/wua/sprite/npc/MillieK/SpriteSheet.xml new file mode 100644 index 00000000000..734fc0185e4 --- /dev/null +++ b/assets/wua/sprite/npc/MillieK/SpriteSheet.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Motley/Palette_00.png b/assets/wua/sprite/npc/Motley/Palette_00.png new file mode 100644 index 00000000000..a1d855d31a0 Binary files /dev/null and b/assets/wua/sprite/npc/Motley/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Motley/Palette_01.png b/assets/wua/sprite/npc/Motley/Palette_01.png new file mode 100644 index 00000000000..b1c3234c97d Binary files /dev/null and b/assets/wua/sprite/npc/Motley/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Motley/SpriteSheet.xml b/assets/wua/sprite/npc/Motley/SpriteSheet.xml new file mode 100644 index 00000000000..3e23a18f47f --- /dev/null +++ b/assets/wua/sprite/npc/Motley/SpriteSheet.xml @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Motley/Tear.pal.png b/assets/wua/sprite/npc/Motley/Tear.pal.png new file mode 100644 index 00000000000..565115e8a6a Binary files /dev/null and b/assets/wua/sprite/npc/Motley/Tear.pal.png differ diff --git a/assets/wua/sprite/npc/Motley/Tear.png b/assets/wua/sprite/npc/Motley/Tear.png new file mode 100644 index 00000000000..565115e8a6a Binary files /dev/null and b/assets/wua/sprite/npc/Motley/Tear.png differ diff --git a/assets/wua/sprite/npc/Motley/idle1.png b/assets/wua/sprite/npc/Motley/idle1.png new file mode 100644 index 00000000000..5e078ca3d6e Binary files /dev/null and b/assets/wua/sprite/npc/Motley/idle1.png differ diff --git a/assets/wua/sprite/npc/Motley/idle2.png b/assets/wua/sprite/npc/Motley/idle2.png new file mode 100644 index 00000000000..54501b41aad Binary files /dev/null and b/assets/wua/sprite/npc/Motley/idle2.png differ diff --git a/assets/wua/sprite/npc/Motley/idle3.png b/assets/wua/sprite/npc/Motley/idle3.png new file mode 100644 index 00000000000..b5ad84fb142 Binary files /dev/null and b/assets/wua/sprite/npc/Motley/idle3.png differ diff --git a/assets/wua/sprite/npc/Motley/nIdle1.png b/assets/wua/sprite/npc/Motley/nIdle1.png new file mode 100644 index 00000000000..ba0fc187aa6 Binary files /dev/null and b/assets/wua/sprite/npc/Motley/nIdle1.png differ diff --git a/assets/wua/sprite/npc/Motley/nIdle2.png b/assets/wua/sprite/npc/Motley/nIdle2.png new file mode 100644 index 00000000000..ce4c36f5f6f Binary files /dev/null and b/assets/wua/sprite/npc/Motley/nIdle2.png differ diff --git a/assets/wua/sprite/npc/Motley/nIdle3.png b/assets/wua/sprite/npc/Motley/nIdle3.png new file mode 100644 index 00000000000..58afa65248a Binary files /dev/null and b/assets/wua/sprite/npc/Motley/nIdle3.png differ diff --git a/assets/wua/sprite/npc/Motley/nIdle4.png b/assets/wua/sprite/npc/Motley/nIdle4.png new file mode 100644 index 00000000000..c51a2da2619 Binary files /dev/null and b/assets/wua/sprite/npc/Motley/nIdle4.png differ diff --git a/assets/wua/sprite/npc/Motley/raise1.png b/assets/wua/sprite/npc/Motley/raise1.png new file mode 100644 index 00000000000..2d1e5901a33 Binary files /dev/null and b/assets/wua/sprite/npc/Motley/raise1.png differ diff --git a/assets/wua/sprite/npc/Motley/raise2.png b/assets/wua/sprite/npc/Motley/raise2.png new file mode 100644 index 00000000000..678ff7c96b5 Binary files /dev/null and b/assets/wua/sprite/npc/Motley/raise2.png differ diff --git a/assets/wua/sprite/npc/Motley/raise3.png b/assets/wua/sprite/npc/Motley/raise3.png new file mode 100644 index 00000000000..b567515dbaf Binary files /dev/null and b/assets/wua/sprite/npc/Motley/raise3.png differ diff --git a/assets/wua/sprite/npc/Motley/raise4.png b/assets/wua/sprite/npc/Motley/raise4.png new file mode 100644 index 00000000000..8906c06c3eb Binary files /dev/null and b/assets/wua/sprite/npc/Motley/raise4.png differ diff --git a/assets/wua/sprite/npc/Motley/raise5.png b/assets/wua/sprite/npc/Motley/raise5.png new file mode 100644 index 00000000000..b567515dbaf Binary files /dev/null and b/assets/wua/sprite/npc/Motley/raise5.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat0.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat0.png new file mode 100644 index 00000000000..1635aaab276 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat0.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat1.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat1.png new file mode 100644 index 00000000000..7d9f6828c9d Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat1.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat2.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat2.png new file mode 100644 index 00000000000..615d9985828 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat2.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat3.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat3.png new file mode 100644 index 00000000000..f3be40cacf7 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat3.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat4.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat4.png new file mode 100644 index 00000000000..09290763734 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat4.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat5.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat5.png new file mode 100644 index 00000000000..a864bbf45dd Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat5.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat6.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat6.png new file mode 100644 index 00000000000..5db6d9997ce Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat6.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/BowlerHat7.png b/assets/wua/sprite/npc/MouserMafioso/BowlerHat7.png new file mode 100644 index 00000000000..97749846309 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/BowlerHat7.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/Palette_00.png b/assets/wua/sprite/npc/MouserMafioso/Palette_00.png new file mode 100644 index 00000000000..60326799c3f Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/Palette_00.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/SpriteSheet.xml b/assets/wua/sprite/npc/MouserMafioso/SpriteSheet.xml new file mode 100644 index 00000000000..191e5942195 --- /dev/null +++ b/assets/wua/sprite/npc/MouserMafioso/SpriteSheet.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat0.png b/assets/wua/sprite/npc/MouserMafioso/TopHat0.png new file mode 100644 index 00000000000..0e94e7a63a1 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat0.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat1.png b/assets/wua/sprite/npc/MouserMafioso/TopHat1.png new file mode 100644 index 00000000000..9777d0a68f1 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat1.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat2.png b/assets/wua/sprite/npc/MouserMafioso/TopHat2.png new file mode 100644 index 00000000000..979bf9bebf7 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat2.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat3.png b/assets/wua/sprite/npc/MouserMafioso/TopHat3.png new file mode 100644 index 00000000000..865943d3313 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat3.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat4.png b/assets/wua/sprite/npc/MouserMafioso/TopHat4.png new file mode 100644 index 00000000000..0234b491611 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat4.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat5.png b/assets/wua/sprite/npc/MouserMafioso/TopHat5.png new file mode 100644 index 00000000000..1af7f7ce8a9 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat5.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat6.png b/assets/wua/sprite/npc/MouserMafioso/TopHat6.png new file mode 100644 index 00000000000..0a5fa6cca83 Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat6.png differ diff --git a/assets/wua/sprite/npc/MouserMafioso/TopHat7.png b/assets/wua/sprite/npc/MouserMafioso/TopHat7.png new file mode 100644 index 00000000000..8526cdbb6dc Binary files /dev/null and b/assets/wua/sprite/npc/MouserMafioso/TopHat7.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman1.png b/assets/wua/sprite/npc/Necrawmancer/Crawman1.png new file mode 100644 index 00000000000..2079c368ba1 Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman1.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman2.png b/assets/wua/sprite/npc/Necrawmancer/Crawman2.png new file mode 100644 index 00000000000..824f40b902c Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman2.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman3.png b/assets/wua/sprite/npc/Necrawmancer/Crawman3.png new file mode 100644 index 00000000000..53a33299886 Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman3.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman4.png b/assets/wua/sprite/npc/Necrawmancer/Crawman4.png new file mode 100644 index 00000000000..cddddf5acf9 Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman4.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman5.png b/assets/wua/sprite/npc/Necrawmancer/Crawman5.png new file mode 100644 index 00000000000..d0a50c831bf Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman5.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman6.png b/assets/wua/sprite/npc/Necrawmancer/Crawman6.png new file mode 100644 index 00000000000..97bbe40e94b Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman6.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman7.png b/assets/wua/sprite/npc/Necrawmancer/Crawman7.png new file mode 100644 index 00000000000..af4b4355ab9 Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman7.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/Crawman8.png b/assets/wua/sprite/npc/Necrawmancer/Crawman8.png new file mode 100644 index 00000000000..119f9f7fb21 Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/Crawman8.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/CrawmanPalette.png b/assets/wua/sprite/npc/Necrawmancer/CrawmanPalette.png new file mode 100644 index 00000000000..0be02c2e67d Binary files /dev/null and b/assets/wua/sprite/npc/Necrawmancer/CrawmanPalette.png differ diff --git a/assets/wua/sprite/npc/Necrawmancer/SpriteSheet.xml b/assets/wua/sprite/npc/Necrawmancer/SpriteSheet.xml new file mode 100644 index 00000000000..f455ef09081 --- /dev/null +++ b/assets/wua/sprite/npc/Necrawmancer/SpriteSheet.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Noki/Palette_00.png b/assets/wua/sprite/npc/Noki/Palette_00.png new file mode 100644 index 00000000000..3f02e5a0991 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Noki/Palette_01.png b/assets/wua/sprite/npc/Noki/Palette_01.png new file mode 100644 index 00000000000..358da55a09d Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Noki/Palette_02.png b/assets/wua/sprite/npc/Noki/Palette_02.png new file mode 100644 index 00000000000..a586050331c Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Noki/Palette_03.png b/assets/wua/sprite/npc/Noki/Palette_03.png new file mode 100644 index 00000000000..d07887c52c0 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Noki/Palette_04.png b/assets/wua/sprite/npc/Noki/Palette_04.png new file mode 100644 index 00000000000..02593702093 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_00.png b/assets/wua/sprite/npc/Noki/Raster_00.png new file mode 100644 index 00000000000..c583594bd98 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_01.png b/assets/wua/sprite/npc/Noki/Raster_01.png new file mode 100644 index 00000000000..07bb5b68fe7 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_02.png b/assets/wua/sprite/npc/Noki/Raster_02.png new file mode 100644 index 00000000000..9ae10eac794 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_03.png b/assets/wua/sprite/npc/Noki/Raster_03.png new file mode 100644 index 00000000000..4904172fc34 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_04.png b/assets/wua/sprite/npc/Noki/Raster_04.png new file mode 100644 index 00000000000..93276014967 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_05.png b/assets/wua/sprite/npc/Noki/Raster_05.png new file mode 100644 index 00000000000..a821ede3926 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_06.png b/assets/wua/sprite/npc/Noki/Raster_06.png new file mode 100644 index 00000000000..71058cb288c Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_07.png b/assets/wua/sprite/npc/Noki/Raster_07.png new file mode 100644 index 00000000000..659e675ae0c Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_08.png b/assets/wua/sprite/npc/Noki/Raster_08.png new file mode 100644 index 00000000000..93a2cd0856b Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_09.png b/assets/wua/sprite/npc/Noki/Raster_09.png new file mode 100644 index 00000000000..e07983c612a Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_0A.png b/assets/wua/sprite/npc/Noki/Raster_0A.png new file mode 100644 index 00000000000..d701cfe9ec5 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_0B.png b/assets/wua/sprite/npc/Noki/Raster_0B.png new file mode 100644 index 00000000000..2fab11712a6 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_0C.png b/assets/wua/sprite/npc/Noki/Raster_0C.png new file mode 100644 index 00000000000..24662245451 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_0D.png b/assets/wua/sprite/npc/Noki/Raster_0D.png new file mode 100644 index 00000000000..78fc7d4e1d2 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_0E.png b/assets/wua/sprite/npc/Noki/Raster_0E.png new file mode 100644 index 00000000000..dec1958ee51 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_0F.png b/assets/wua/sprite/npc/Noki/Raster_0F.png new file mode 100644 index 00000000000..54e4402b5dd Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_10.png b/assets/wua/sprite/npc/Noki/Raster_10.png new file mode 100644 index 00000000000..22cfb80a13e Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_11.png b/assets/wua/sprite/npc/Noki/Raster_11.png new file mode 100644 index 00000000000..63855c3dcb4 Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_12.png b/assets/wua/sprite/npc/Noki/Raster_12.png new file mode 100644 index 00000000000..8404a3d0a8c Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Noki/Raster_13.png b/assets/wua/sprite/npc/Noki/Raster_13.png new file mode 100644 index 00000000000..3ad3251ff1b Binary files /dev/null and b/assets/wua/sprite/npc/Noki/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Noki/SpriteSheet.xml b/assets/wua/sprite/npc/Noki/SpriteSheet.xml new file mode 100644 index 00000000000..da38d49343d --- /dev/null +++ b/assets/wua/sprite/npc/Noki/SpriteSheet.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Oaklie/Palette_00.png b/assets/wua/sprite/npc/Oaklie/Palette_00.png new file mode 100644 index 00000000000..71942afb697 Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_00.png b/assets/wua/sprite/npc/Oaklie/Raster_00.png new file mode 100644 index 00000000000..73f908a43ef Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_01.png b/assets/wua/sprite/npc/Oaklie/Raster_01.png new file mode 100644 index 00000000000..99a06f295ab Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_02.png b/assets/wua/sprite/npc/Oaklie/Raster_02.png new file mode 100644 index 00000000000..66cddd534e0 Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_03.png b/assets/wua/sprite/npc/Oaklie/Raster_03.png new file mode 100644 index 00000000000..5806400ebb1 Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_04.png b/assets/wua/sprite/npc/Oaklie/Raster_04.png new file mode 100644 index 00000000000..18a5f3a6e0c Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_05.png b/assets/wua/sprite/npc/Oaklie/Raster_05.png new file mode 100644 index 00000000000..053a589b07a Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_06.png b/assets/wua/sprite/npc/Oaklie/Raster_06.png new file mode 100644 index 00000000000..168e5d165cf Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_07.png b/assets/wua/sprite/npc/Oaklie/Raster_07.png new file mode 100644 index 00000000000..d436bdaffda Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_08.png b/assets/wua/sprite/npc/Oaklie/Raster_08.png new file mode 100644 index 00000000000..1b875401e07 Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Oaklie/Raster_09.png b/assets/wua/sprite/npc/Oaklie/Raster_09.png new file mode 100644 index 00000000000..c2584c6ec64 Binary files /dev/null and b/assets/wua/sprite/npc/Oaklie/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Oaklie/SpriteSheet.xml b/assets/wua/sprite/npc/Oaklie/SpriteSheet.xml new file mode 100644 index 00000000000..ad9c4107237 --- /dev/null +++ b/assets/wua/sprite/npc/Oaklie/SpriteSheet.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/OaklieElder/Elder1.png b/assets/wua/sprite/npc/OaklieElder/Elder1.png new file mode 100644 index 00000000000..201a183064b Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder1.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Elder2.png b/assets/wua/sprite/npc/OaklieElder/Elder2.png new file mode 100644 index 00000000000..02d3ec3ef1f Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder2.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Elder3.png b/assets/wua/sprite/npc/OaklieElder/Elder3.png new file mode 100644 index 00000000000..8bcaf94240d Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder3.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Elder4.png b/assets/wua/sprite/npc/OaklieElder/Elder4.png new file mode 100644 index 00000000000..f5a6560942d Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder4.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Elder5.png b/assets/wua/sprite/npc/OaklieElder/Elder5.png new file mode 100644 index 00000000000..c91cf89b4e9 Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder5.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Elder6.png b/assets/wua/sprite/npc/OaklieElder/Elder6.png new file mode 100644 index 00000000000..9d66b33916e Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder6.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Elder7.png b/assets/wua/sprite/npc/OaklieElder/Elder7.png new file mode 100644 index 00000000000..01a1a0d9a67 Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder7.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Elder9.png b/assets/wua/sprite/npc/OaklieElder/Elder9.png new file mode 100644 index 00000000000..9c5a3ac1330 Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Elder9.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/Palette_00.png b/assets/wua/sprite/npc/OaklieElder/Palette_00.png new file mode 100644 index 00000000000..f261f41536a Binary files /dev/null and b/assets/wua/sprite/npc/OaklieElder/Palette_00.png differ diff --git a/assets/wua/sprite/npc/OaklieElder/SpriteSheet.xml b/assets/wua/sprite/npc/OaklieElder/SpriteSheet.xml new file mode 100644 index 00000000000..417e7dcf4ab --- /dev/null +++ b/assets/wua/sprite/npc/OaklieElder/SpriteSheet.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/OldNokiNoki/Palette_00.png b/assets/wua/sprite/npc/OldNokiNoki/Palette_00.png new file mode 100644 index 00000000000..67b74595597 Binary files /dev/null and b/assets/wua/sprite/npc/OldNokiNoki/Palette_00.png differ diff --git a/assets/wua/sprite/npc/OldNokiNoki/Raster_01.png b/assets/wua/sprite/npc/OldNokiNoki/Raster_01.png new file mode 100644 index 00000000000..5dbe30a2b05 Binary files /dev/null and b/assets/wua/sprite/npc/OldNokiNoki/Raster_01.png differ diff --git a/assets/wua/sprite/npc/OldNokiNoki/Raster_02.png b/assets/wua/sprite/npc/OldNokiNoki/Raster_02.png new file mode 100644 index 00000000000..173bc814b6e Binary files /dev/null and b/assets/wua/sprite/npc/OldNokiNoki/Raster_02.png differ diff --git a/assets/wua/sprite/npc/OldNokiNoki/Raster_03.png b/assets/wua/sprite/npc/OldNokiNoki/Raster_03.png new file mode 100644 index 00000000000..4e31160767a Binary files /dev/null and b/assets/wua/sprite/npc/OldNokiNoki/Raster_03.png differ diff --git a/assets/wua/sprite/npc/OldNokiNoki/Raster_04.png b/assets/wua/sprite/npc/OldNokiNoki/Raster_04.png new file mode 100644 index 00000000000..b7657fecae6 Binary files /dev/null and b/assets/wua/sprite/npc/OldNokiNoki/Raster_04.png differ diff --git a/assets/wua/sprite/npc/OldNokiNoki/Raster_05.png b/assets/wua/sprite/npc/OldNokiNoki/Raster_05.png new file mode 100644 index 00000000000..e4849ec6e8a Binary files /dev/null and b/assets/wua/sprite/npc/OldNokiNoki/Raster_05.png differ diff --git a/assets/wua/sprite/npc/OldNokiNoki/Raster_06.png b/assets/wua/sprite/npc/OldNokiNoki/Raster_06.png new file mode 100644 index 00000000000..26c885d9570 Binary files /dev/null and b/assets/wua/sprite/npc/OldNokiNoki/Raster_06.png differ diff --git a/assets/wua/sprite/npc/OldNokiNoki/SpriteSheet.xml b/assets/wua/sprite/npc/OldNokiNoki/SpriteSheet.xml new file mode 100644 index 00000000000..8f188441535 --- /dev/null +++ b/assets/wua/sprite/npc/OldNokiNoki/SpriteSheet.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/ParaBobOmb/Palette_00.png b/assets/wua/sprite/npc/ParaBobOmb/Palette_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Palette_00.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Palette_01.png b/assets/wua/sprite/npc/ParaBobOmb/Palette_01.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Palette_01.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Palette_02.png b/assets/wua/sprite/npc/ParaBobOmb/Palette_02.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Palette_02.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Palette_03.png b/assets/wua/sprite/npc/ParaBobOmb/Palette_03.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Palette_03.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_00.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_00.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_01.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_01.png new file mode 100644 index 00000000000..d7019f4a54b Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_01.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_02.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_02.png new file mode 100644 index 00000000000..d3b714492e6 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_02.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_03.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_03.png new file mode 100644 index 00000000000..b3e9c74cb4d Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_03.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_04.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_04.png new file mode 100644 index 00000000000..710790b0de3 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_04.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_05.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_05.png new file mode 100644 index 00000000000..cf056cd913b Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_05.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_06.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_06.png new file mode 100644 index 00000000000..bd7722bbf98 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_06.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_07.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_07.png new file mode 100644 index 00000000000..4fce7b0d31d Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_07.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_08.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_08.png new file mode 100644 index 00000000000..14998de68d9 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_08.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/Raster_09.png b/assets/wua/sprite/npc/ParaBobOmb/Raster_09.png new file mode 100644 index 00000000000..d4552f3dd13 Binary files /dev/null and b/assets/wua/sprite/npc/ParaBobOmb/Raster_09.png differ diff --git a/assets/wua/sprite/npc/ParaBobOmb/SpriteSheet.xml b/assets/wua/sprite/npc/ParaBobOmb/SpriteSheet.xml new file mode 100644 index 00000000000..bd225ce7fa1 --- /dev/null +++ b/assets/wua/sprite/npc/ParaBobOmb/SpriteSheet.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/wua/sprite/npc/ParaJrTroopa/AttackU2.png b/assets/wua/sprite/npc/ParaJrTroopa/AttackU2.png new file mode 100644 index 00000000000..ffb31474cc6 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/AttackU2.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_00.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_00.png new file mode 100644 index 00000000000..b2fef25fe79 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_00.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_01.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_01.png new file mode 100644 index 00000000000..f8270a67a8c Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_01.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_02.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_02.png new file mode 100644 index 00000000000..fea54b666fb Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_02.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_03.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_03.png new file mode 100644 index 00000000000..fea54b666fb Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_03.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_04.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_04.png new file mode 100644 index 00000000000..1e0523fe491 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_04.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_05.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_05.png new file mode 100644 index 00000000000..1e0523fe491 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_05.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_06.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_06.png new file mode 100644 index 00000000000..80600b6587e Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_06.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_07.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_07.png new file mode 100644 index 00000000000..80600b6587e Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_07.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Palette_08.png b/assets/wua/sprite/npc/ParaJrTroopa/Palette_08.png new file mode 100644 index 00000000000..6a24d0c3b08 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Palette_08.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_00.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_00.png new file mode 100644 index 00000000000..82a402a9b3d Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_00.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_01.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_01.png new file mode 100644 index 00000000000..5a4eeb7e49c Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_01.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_02.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_02.png new file mode 100644 index 00000000000..8a9b164af4c Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_02.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_03.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_03.png new file mode 100644 index 00000000000..bb875ca7935 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_03.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_04.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_04.png new file mode 100644 index 00000000000..bbd9582c977 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_04.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_05.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_05.png new file mode 100644 index 00000000000..80118a0ae27 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_05.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_06.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_06.png new file mode 100644 index 00000000000..3fac902314b Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_06.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_07.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_07.png new file mode 100644 index 00000000000..1d6a45f88b7 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_07.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_08.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_08.png new file mode 100644 index 00000000000..18a3a85ed98 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_08.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_09.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_09.png new file mode 100644 index 00000000000..ac683d3e949 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_09.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_0A.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0A.png new file mode 100644 index 00000000000..8055b751dc2 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_0B.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0B.png new file mode 100644 index 00000000000..c17f04b1525 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_0C.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0C.png new file mode 100644 index 00000000000..1158b5ef1d2 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_0D.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0D.png new file mode 100644 index 00000000000..ec77a17aa06 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_0E.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0E.png new file mode 100644 index 00000000000..0c8b157a97a Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_0F.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0F.png new file mode 100644 index 00000000000..f7c36e59505 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_10.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_10.png new file mode 100644 index 00000000000..b06e3c3129d Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_10.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_11.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_11.png new file mode 100644 index 00000000000..caa4ffff61e Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_11.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_12.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_12.png new file mode 100644 index 00000000000..cf9bad1a450 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_12.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_13.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_13.png new file mode 100644 index 00000000000..fcd532912d0 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_13.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_14.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_14.png new file mode 100644 index 00000000000..7e2320b951a Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_14.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_15.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_15.png new file mode 100644 index 00000000000..cf13fa0a425 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_15.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_16.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_16.png new file mode 100644 index 00000000000..b5bc95343e5 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_16.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_17.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_17.png new file mode 100644 index 00000000000..1156f6f080a Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_17.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_18.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_18.png new file mode 100644 index 00000000000..41a6a988f41 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_18.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/Raster_19.png b/assets/wua/sprite/npc/ParaJrTroopa/Raster_19.png new file mode 100644 index 00000000000..063ac9bf3b4 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/Raster_19.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/SpriteSheet.xml b/assets/wua/sprite/npc/ParaJrTroopa/SpriteSheet.xml new file mode 100644 index 00000000000..044eaaf0425 --- /dev/null +++ b/assets/wua/sprite/npc/ParaJrTroopa/SpriteSheet.xml @@ -0,0 +1,1059 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/ParaJrTroopa/attackU1.png b/assets/wua/sprite/npc/ParaJrTroopa/attackU1.png new file mode 100644 index 00000000000..bc5bde7e853 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/attackU1.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/attackU3.png b/assets/wua/sprite/npc/ParaJrTroopa/attackU3.png new file mode 100644 index 00000000000..b138b0e31d1 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/attackU3.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/holdU1.png b/assets/wua/sprite/npc/ParaJrTroopa/holdU1.png new file mode 100644 index 00000000000..dc30fab4614 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/holdU1.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/holdU2.png b/assets/wua/sprite/npc/ParaJrTroopa/holdU2.png new file mode 100644 index 00000000000..14ef0e8a854 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/holdU2.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/hurtU1.png b/assets/wua/sprite/npc/ParaJrTroopa/hurtU1.png new file mode 100644 index 00000000000..bf8da5167ff Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/hurtU1.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/hurtU2.png b/assets/wua/sprite/npc/ParaJrTroopa/hurtU2.png new file mode 100644 index 00000000000..11888efa27e Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/hurtU2.png differ diff --git a/assets/wua/sprite/npc/ParaJrTroopa/legsforward.png b/assets/wua/sprite/npc/ParaJrTroopa/legsforward.png new file mode 100644 index 00000000000..16c9d14fc12 Binary files /dev/null and b/assets/wua/sprite/npc/ParaJrTroopa/legsforward.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/BA.png b/assets/wua/sprite/npc/Piantapirate/BA.png new file mode 100644 index 00000000000..e49db846427 Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/BA.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/BF.png b/assets/wua/sprite/npc/Piantapirate/BF.png new file mode 100644 index 00000000000..c3603bfa481 Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/BF.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/FA.png b/assets/wua/sprite/npc/Piantapirate/FA.png new file mode 100644 index 00000000000..a138ad46063 Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/FA.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/FF.png b/assets/wua/sprite/npc/Piantapirate/FF.png new file mode 100644 index 00000000000..ba162771341 Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/FF.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/Leaf.png b/assets/wua/sprite/npc/Piantapirate/Leaf.png new file mode 100644 index 00000000000..501ad009b8e Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/Leaf.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/Skirt.png b/assets/wua/sprite/npc/Piantapirate/Skirt.png new file mode 100644 index 00000000000..e9185bd12fa Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/Skirt.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/SpriteSheet.xml b/assets/wua/sprite/npc/Piantapirate/SpriteSheet.xml new file mode 100644 index 00000000000..c2906c5124a --- /dev/null +++ b/assets/wua/sprite/npc/Piantapirate/SpriteSheet.xml @@ -0,0 +1,1038 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Piantapirate/Torso.png b/assets/wua/sprite/npc/Piantapirate/Torso.png new file mode 100644 index 00000000000..d54e0219881 Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/Torso.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/yellowleaf.png b/assets/wua/sprite/npc/Piantapirate/yellowleaf.png new file mode 100644 index 00000000000..60c807e8d12 Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/yellowleaf.png differ diff --git a/assets/wua/sprite/npc/Piantapirate/yellowmain.png b/assets/wua/sprite/npc/Piantapirate/yellowmain.png new file mode 100644 index 00000000000..167101c1a7b Binary files /dev/null and b/assets/wua/sprite/npc/Piantapirate/yellowmain.png differ diff --git a/assets/wua/sprite/npc/Pider/Palette_00.png b/assets/wua/sprite/npc/Pider/Palette_00.png new file mode 100644 index 00000000000..e2b291404c1 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Pider/Palette_01.png b/assets/wua/sprite/npc/Pider/Palette_01.png new file mode 100644 index 00000000000..67a96649773 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Pider/Palette_02.png b/assets/wua/sprite/npc/Pider/Palette_02.png new file mode 100644 index 00000000000..43f7df95878 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Pider/Palette_03.png b/assets/wua/sprite/npc/Pider/Palette_03.png new file mode 100644 index 00000000000..8fae0a279ea Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_00.png b/assets/wua/sprite/npc/Pider/Raster_00.png new file mode 100644 index 00000000000..792c6f2d475 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_01.png b/assets/wua/sprite/npc/Pider/Raster_01.png new file mode 100644 index 00000000000..bcc4ece6bbd Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_02.png b/assets/wua/sprite/npc/Pider/Raster_02.png new file mode 100644 index 00000000000..223296ba9a3 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_03.png b/assets/wua/sprite/npc/Pider/Raster_03.png new file mode 100644 index 00000000000..c01b9cde191 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_04.png b/assets/wua/sprite/npc/Pider/Raster_04.png new file mode 100644 index 00000000000..ffeb7b6a96e Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_05.png b/assets/wua/sprite/npc/Pider/Raster_05.png new file mode 100644 index 00000000000..20714467279 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_06.png b/assets/wua/sprite/npc/Pider/Raster_06.png new file mode 100644 index 00000000000..e253ee23244 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_07.png b/assets/wua/sprite/npc/Pider/Raster_07.png new file mode 100644 index 00000000000..7b5436a25fa Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_08.png b/assets/wua/sprite/npc/Pider/Raster_08.png new file mode 100644 index 00000000000..42bc4709d05 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_09.png b/assets/wua/sprite/npc/Pider/Raster_09.png new file mode 100644 index 00000000000..f9961a755ad Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_0A.png b/assets/wua/sprite/npc/Pider/Raster_0A.png new file mode 100644 index 00000000000..f9a1dea533b Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_0B.png b/assets/wua/sprite/npc/Pider/Raster_0B.png new file mode 100644 index 00000000000..e58d5579bac Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_0C.png b/assets/wua/sprite/npc/Pider/Raster_0C.png new file mode 100644 index 00000000000..689a67f9674 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_0D.png b/assets/wua/sprite/npc/Pider/Raster_0D.png new file mode 100644 index 00000000000..5280ca1535d Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_0E.png b/assets/wua/sprite/npc/Pider/Raster_0E.png new file mode 100644 index 00000000000..29c56ae9df2 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_0F.png b/assets/wua/sprite/npc/Pider/Raster_0F.png new file mode 100644 index 00000000000..a0188535cc9 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_10.png b/assets/wua/sprite/npc/Pider/Raster_10.png new file mode 100644 index 00000000000..1757f2f590a Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_11.png b/assets/wua/sprite/npc/Pider/Raster_11.png new file mode 100644 index 00000000000..bf0b32dadbf Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_12.png b/assets/wua/sprite/npc/Pider/Raster_12.png new file mode 100644 index 00000000000..6ec62f5b0e5 Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Pider/Raster_13.png b/assets/wua/sprite/npc/Pider/Raster_13.png new file mode 100644 index 00000000000..f58685cc53f Binary files /dev/null and b/assets/wua/sprite/npc/Pider/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Pider/SpriteSheet.xml b/assets/wua/sprite/npc/Pider/SpriteSheet.xml new file mode 100644 index 00000000000..9ccb8d6a44e --- /dev/null +++ b/assets/wua/sprite/npc/Pider/SpriteSheet.xml @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Plant/Raster_00.pal.png b/assets/wua/sprite/npc/Plant/Raster_00.pal.png new file mode 100644 index 00000000000..cd7c9c8eef5 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_00.pal.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_00.png b/assets/wua/sprite/npc/Plant/Raster_00.png new file mode 100644 index 00000000000..cd7c9c8eef5 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_01.png b/assets/wua/sprite/npc/Plant/Raster_01.png new file mode 100644 index 00000000000..1ed8febd7d9 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_02.png b/assets/wua/sprite/npc/Plant/Raster_02.png new file mode 100644 index 00000000000..a0f72eca1f6 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_03.png b/assets/wua/sprite/npc/Plant/Raster_03.png new file mode 100644 index 00000000000..5b49c1fd0c7 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_04.png b/assets/wua/sprite/npc/Plant/Raster_04.png new file mode 100644 index 00000000000..e5f2d06a5a3 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_05.png b/assets/wua/sprite/npc/Plant/Raster_05.png new file mode 100644 index 00000000000..7f1861b61c1 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_06.png b/assets/wua/sprite/npc/Plant/Raster_06.png new file mode 100644 index 00000000000..6cd747fcb77 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_07.png b/assets/wua/sprite/npc/Plant/Raster_07.png new file mode 100644 index 00000000000..d566356b2b3 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_08.png b/assets/wua/sprite/npc/Plant/Raster_08.png new file mode 100644 index 00000000000..7fa6030b1fe Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_09.png b/assets/wua/sprite/npc/Plant/Raster_09.png new file mode 100644 index 00000000000..e778af37e0d Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_0A.png b/assets/wua/sprite/npc/Plant/Raster_0A.png new file mode 100644 index 00000000000..1e66077b318 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_0B.png b/assets/wua/sprite/npc/Plant/Raster_0B.png new file mode 100644 index 00000000000..26c20676318 Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Plant/Raster_0C.png b/assets/wua/sprite/npc/Plant/Raster_0C.png new file mode 100644 index 00000000000..f6bec24ff7f Binary files /dev/null and b/assets/wua/sprite/npc/Plant/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Plant/SpriteSheet.xml b/assets/wua/sprite/npc/Plant/SpriteSheet.xml new file mode 100644 index 00000000000..82899dde97f --- /dev/null +++ b/assets/wua/sprite/npc/Plant/SpriteSheet.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/PokeyMummy/Palette_00.png b/assets/wua/sprite/npc/PokeyMummy/Palette_00.png new file mode 100644 index 00000000000..578c6da1df5 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/Palette_00.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy1.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy1.png new file mode 100644 index 00000000000..09c3ec345df Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy1.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy10.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy10.png new file mode 100644 index 00000000000..5546f9152c2 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy10.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy11.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy11.png new file mode 100644 index 00000000000..a12465df1c0 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy11.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy12.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy12.png new file mode 100644 index 00000000000..8f93aae1b64 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy12.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy2.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy2.png new file mode 100644 index 00000000000..cd8a6bfc5f3 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy2.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy3.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy3.png new file mode 100644 index 00000000000..351b5d503a1 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy3.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy4.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy4.png new file mode 100644 index 00000000000..f1a6412b9a0 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy4.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy5.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy5.png new file mode 100644 index 00000000000..7ed94a91ee8 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy5.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy6.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy6.png new file mode 100644 index 00000000000..37c245b2652 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy6.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy7.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy7.png new file mode 100644 index 00000000000..948353c064b Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy7.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy8.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy8.png new file mode 100644 index 00000000000..e22fe8b1fa9 Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy8.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/PokeyMummy9.png b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy9.png new file mode 100644 index 00000000000..c73efb65f0d Binary files /dev/null and b/assets/wua/sprite/npc/PokeyMummy/PokeyMummy9.png differ diff --git a/assets/wua/sprite/npc/PokeyMummy/SpriteSheet.xml b/assets/wua/sprite/npc/PokeyMummy/SpriteSheet.xml new file mode 100644 index 00000000000..118ce0e364c --- /dev/null +++ b/assets/wua/sprite/npc/PokeyMummy/SpriteSheet.xml @@ -0,0 +1,7832 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Pokio/Palette_00.png b/assets/wua/sprite/npc/Pokio/Palette_00.png new file mode 100644 index 00000000000..4a996defb09 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_01.png b/assets/wua/sprite/npc/Pokio/Palette_01.png new file mode 100644 index 00000000000..c6828b1d224 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_02.png b/assets/wua/sprite/npc/Pokio/Palette_02.png new file mode 100644 index 00000000000..1df0899bae8 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_03.png b/assets/wua/sprite/npc/Pokio/Palette_03.png new file mode 100644 index 00000000000..134a0c09476 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_04.png b/assets/wua/sprite/npc/Pokio/Palette_04.png new file mode 100644 index 00000000000..851e0287d06 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_05.png b/assets/wua/sprite/npc/Pokio/Palette_05.png new file mode 100644 index 00000000000..88f8a31c350 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_06.png b/assets/wua/sprite/npc/Pokio/Palette_06.png new file mode 100644 index 00000000000..c6828b1d224 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_06.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_07.png b/assets/wua/sprite/npc/Pokio/Palette_07.png new file mode 100644 index 00000000000..1df0899bae8 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_07.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_08.png b/assets/wua/sprite/npc/Pokio/Palette_08.png new file mode 100644 index 00000000000..134a0c09476 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_08.png differ diff --git a/assets/wua/sprite/npc/Pokio/Palette_09.png b/assets/wua/sprite/npc/Pokio/Palette_09.png new file mode 100644 index 00000000000..851e0287d06 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Palette_09.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_00.png b/assets/wua/sprite/npc/Pokio/Raster_00.png new file mode 100644 index 00000000000..4a996defb09 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_01.png b/assets/wua/sprite/npc/Pokio/Raster_01.png new file mode 100644 index 00000000000..c7ee0b6de3f Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_02.png b/assets/wua/sprite/npc/Pokio/Raster_02.png new file mode 100644 index 00000000000..397c6ae116c Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_03.png b/assets/wua/sprite/npc/Pokio/Raster_03.png new file mode 100644 index 00000000000..00f2ba8db28 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_04.png b/assets/wua/sprite/npc/Pokio/Raster_04.png new file mode 100644 index 00000000000..3a3767031a1 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_05.png b/assets/wua/sprite/npc/Pokio/Raster_05.png new file mode 100644 index 00000000000..9455f2ece29 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_06.png b/assets/wua/sprite/npc/Pokio/Raster_06.png new file mode 100644 index 00000000000..be4e8b7b0ed Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_07.png b/assets/wua/sprite/npc/Pokio/Raster_07.png new file mode 100644 index 00000000000..ba3891df0c6 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_08.png b/assets/wua/sprite/npc/Pokio/Raster_08.png new file mode 100644 index 00000000000..1c17c7c9e08 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_09.png b/assets/wua/sprite/npc/Pokio/Raster_09.png new file mode 100644 index 00000000000..17137c644fa Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_0A.png b/assets/wua/sprite/npc/Pokio/Raster_0A.png new file mode 100644 index 00000000000..f0cd6840a5a Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Pokio/Raster_0B.png b/assets/wua/sprite/npc/Pokio/Raster_0B.png new file mode 100644 index 00000000000..4aeeb295160 Binary files /dev/null and b/assets/wua/sprite/npc/Pokio/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Pokio/SpriteSheet.xml b/assets/wua/sprite/npc/Pokio/SpriteSheet.xml new file mode 100644 index 00000000000..738302768b1 --- /dev/null +++ b/assets/wua/sprite/npc/Pokio/SpriteSheet.xml @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Polour/Palette_00.png b/assets/wua/sprite/npc/Polour/Palette_00.png new file mode 100644 index 00000000000..c31ed0bbc90 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Polour/Palette_01.png b/assets/wua/sprite/npc/Polour/Palette_01.png new file mode 100644 index 00000000000..37c9b44a97a Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_00.png b/assets/wua/sprite/npc/Polour/Raster_00.png new file mode 100644 index 00000000000..48424be00ab Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_01.png b/assets/wua/sprite/npc/Polour/Raster_01.png new file mode 100644 index 00000000000..b0ab96edbfe Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_02.png b/assets/wua/sprite/npc/Polour/Raster_02.png new file mode 100644 index 00000000000..5da609bafa4 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_03.png b/assets/wua/sprite/npc/Polour/Raster_03.png new file mode 100644 index 00000000000..3405ef40661 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_04.png b/assets/wua/sprite/npc/Polour/Raster_04.png new file mode 100644 index 00000000000..350e3364cc0 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_05.png b/assets/wua/sprite/npc/Polour/Raster_05.png new file mode 100644 index 00000000000..d7d4b57eaf0 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_06.png b/assets/wua/sprite/npc/Polour/Raster_06.png new file mode 100644 index 00000000000..b1ccf00e939 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_07.png b/assets/wua/sprite/npc/Polour/Raster_07.png new file mode 100644 index 00000000000..b3a48a53cde Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_08.png b/assets/wua/sprite/npc/Polour/Raster_08.png new file mode 100644 index 00000000000..58a129bd6fb Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_09.png b/assets/wua/sprite/npc/Polour/Raster_09.png new file mode 100644 index 00000000000..f1dec3de004 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_0A.png b/assets/wua/sprite/npc/Polour/Raster_0A.png new file mode 100644 index 00000000000..31bf0cdf1c5 Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Polour/Raster_0B.png b/assets/wua/sprite/npc/Polour/Raster_0B.png new file mode 100644 index 00000000000..b0377975bda Binary files /dev/null and b/assets/wua/sprite/npc/Polour/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Polour/SpriteSheet.xml b/assets/wua/sprite/npc/Polour/SpriteSheet.xml new file mode 100644 index 00000000000..1f044154041 --- /dev/null +++ b/assets/wua/sprite/npc/Polour/SpriteSheet.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Purlar/Palette_00.png b/assets/wua/sprite/npc/Purlar/Palette_00.png new file mode 100644 index 00000000000..513bc93fc3c Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Purlar/Palette_01.png b/assets/wua/sprite/npc/Purlar/Palette_01.png new file mode 100644 index 00000000000..0f7edaee2d2 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_00.png b/assets/wua/sprite/npc/Purlar/Raster_00.png new file mode 100644 index 00000000000..413d55a7729 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_01.png b/assets/wua/sprite/npc/Purlar/Raster_01.png new file mode 100644 index 00000000000..6f0b7bed2fc Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_02.png b/assets/wua/sprite/npc/Purlar/Raster_02.png new file mode 100644 index 00000000000..f228af65875 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_03.png b/assets/wua/sprite/npc/Purlar/Raster_03.png new file mode 100644 index 00000000000..28b6b2491c9 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_04.png b/assets/wua/sprite/npc/Purlar/Raster_04.png new file mode 100644 index 00000000000..60e03b8d8c6 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_05.png b/assets/wua/sprite/npc/Purlar/Raster_05.png new file mode 100644 index 00000000000..0751e95a1e5 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_06.png b/assets/wua/sprite/npc/Purlar/Raster_06.png new file mode 100644 index 00000000000..36fb1789496 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_07.png b/assets/wua/sprite/npc/Purlar/Raster_07.png new file mode 100644 index 00000000000..6c1b03d6829 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_08.png b/assets/wua/sprite/npc/Purlar/Raster_08.png new file mode 100644 index 00000000000..d6668e634c5 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_09.png b/assets/wua/sprite/npc/Purlar/Raster_09.png new file mode 100644 index 00000000000..021e388d54d Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_0A.png b/assets/wua/sprite/npc/Purlar/Raster_0A.png new file mode 100644 index 00000000000..03e78431bc1 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_0B.png b/assets/wua/sprite/npc/Purlar/Raster_0B.png new file mode 100644 index 00000000000..b182d87baf2 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Purlar/Raster_0C.png b/assets/wua/sprite/npc/Purlar/Raster_0C.png new file mode 100644 index 00000000000..b06c5363140 Binary files /dev/null and b/assets/wua/sprite/npc/Purlar/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Purlar/SpriteSheet.xml b/assets/wua/sprite/npc/Purlar/SpriteSheet.xml new file mode 100644 index 00000000000..be995b38420 --- /dev/null +++ b/assets/wua/sprite/npc/Purlar/SpriteSheet.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Queenie/BWing1.png b/assets/wua/sprite/npc/Queenie/BWing1.png new file mode 100644 index 00000000000..523285a5b8d Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/BWing1.png differ diff --git a/assets/wua/sprite/npc/Queenie/BWing2.png b/assets/wua/sprite/npc/Queenie/BWing2.png new file mode 100644 index 00000000000..2064923a46a Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/BWing2.png differ diff --git a/assets/wua/sprite/npc/Queenie/BWing3.png b/assets/wua/sprite/npc/Queenie/BWing3.png new file mode 100644 index 00000000000..49ee8f3febd Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/BWing3.png differ diff --git a/assets/wua/sprite/npc/Queenie/BWing4.png b/assets/wua/sprite/npc/Queenie/BWing4.png new file mode 100644 index 00000000000..7c53d0c7153 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/BWing4.png differ diff --git a/assets/wua/sprite/npc/Queenie/FWing1.png b/assets/wua/sprite/npc/Queenie/FWing1.png new file mode 100644 index 00000000000..13e37a7ffc3 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/FWing1.png differ diff --git a/assets/wua/sprite/npc/Queenie/FWing2.png b/assets/wua/sprite/npc/Queenie/FWing2.png new file mode 100644 index 00000000000..e3d509f84ab Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/FWing2.png differ diff --git a/assets/wua/sprite/npc/Queenie/FWing3.png b/assets/wua/sprite/npc/Queenie/FWing3.png new file mode 100644 index 00000000000..ded3047878f Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/FWing3.png differ diff --git a/assets/wua/sprite/npc/Queenie/FWing4.png b/assets/wua/sprite/npc/Queenie/FWing4.png new file mode 100644 index 00000000000..d30d866c308 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/FWing4.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie1.pal.png b/assets/wua/sprite/npc/Queenie/Queenie1.pal.png new file mode 100644 index 00000000000..c1b5a16a13f Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie1.pal.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie1.png b/assets/wua/sprite/npc/Queenie/Queenie1.png new file mode 100644 index 00000000000..b25465e6517 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie1.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie10.png b/assets/wua/sprite/npc/Queenie/Queenie10.png new file mode 100644 index 00000000000..8a544cfc35e Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie10.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie11.png b/assets/wua/sprite/npc/Queenie/Queenie11.png new file mode 100644 index 00000000000..747b1971aa0 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie11.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie2.png b/assets/wua/sprite/npc/Queenie/Queenie2.png new file mode 100644 index 00000000000..489498a75a0 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie2.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie3.png b/assets/wua/sprite/npc/Queenie/Queenie3.png new file mode 100644 index 00000000000..e1f953ded36 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie3.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie4.png b/assets/wua/sprite/npc/Queenie/Queenie4.png new file mode 100644 index 00000000000..5580910ba0c Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie4.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie5.png b/assets/wua/sprite/npc/Queenie/Queenie5.png new file mode 100644 index 00000000000..42457e439b3 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie5.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie6.png b/assets/wua/sprite/npc/Queenie/Queenie6.png new file mode 100644 index 00000000000..1bbfc29b66c Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie6.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie7.png b/assets/wua/sprite/npc/Queenie/Queenie7.png new file mode 100644 index 00000000000..42308a8853f Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie7.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie8.png b/assets/wua/sprite/npc/Queenie/Queenie8.png new file mode 100644 index 00000000000..5a7b7c55690 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie8.png differ diff --git a/assets/wua/sprite/npc/Queenie/Queenie9.png b/assets/wua/sprite/npc/Queenie/Queenie9.png new file mode 100644 index 00000000000..129f52f1507 Binary files /dev/null and b/assets/wua/sprite/npc/Queenie/Queenie9.png differ diff --git a/assets/wua/sprite/npc/Queenie/SpriteSheet.xml b/assets/wua/sprite/npc/Queenie/SpriteSheet.xml new file mode 100644 index 00000000000..2bd2365e48e --- /dev/null +++ b/assets/wua/sprite/npc/Queenie/SpriteSheet.xml @@ -0,0 +1,811 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker1.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker1.png new file mode 100644 index 00000000000..48223e13d26 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker1.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker10.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker10.png new file mode 100644 index 00000000000..03dd2824215 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker10.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker11.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker11.png new file mode 100644 index 00000000000..7df17ecdbe6 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker11.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker12.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker12.png new file mode 100644 index 00000000000..d70ed657179 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker12.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker2.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker2.png new file mode 100644 index 00000000000..9c3c6d0a106 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker2.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker3.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker3.png new file mode 100644 index 00000000000..9f7d562accd Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker3.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker4.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker4.png new file mode 100644 index 00000000000..79327069838 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker4.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker5.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker5.png new file mode 100644 index 00000000000..5dfae87e6da Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker5.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker6.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker6.png new file mode 100644 index 00000000000..f506595fd67 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker6.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker7.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker7.png new file mode 100644 index 00000000000..9edf43fec04 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker7.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker8.pal.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker8.pal.png new file mode 100644 index 00000000000..93a97140635 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker8.pal.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker8.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker8.png new file mode 100644 index 00000000000..4ea0d36f581 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker8.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/Rainmaker9.png b/assets/wua/sprite/npc/Rainmaker/Rainmaker9.png new file mode 100644 index 00000000000..229a43e93b5 Binary files /dev/null and b/assets/wua/sprite/npc/Rainmaker/Rainmaker9.png differ diff --git a/assets/wua/sprite/npc/Rainmaker/SpriteSheet.xml b/assets/wua/sprite/npc/Rainmaker/SpriteSheet.xml new file mode 100644 index 00000000000..2436c13cfbf --- /dev/null +++ b/assets/wua/sprite/npc/Rainmaker/SpriteSheet.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Ratailer/SpriteSheet.xml b/assets/wua/sprite/npc/Ratailer/SpriteSheet.xml new file mode 100644 index 00000000000..16e164fa81c --- /dev/null +++ b/assets/wua/sprite/npc/Ratailer/SpriteSheet.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Ratailer/idle1.pal.png b/assets/wua/sprite/npc/Ratailer/idle1.pal.png new file mode 100644 index 00000000000..df57e8488c0 Binary files /dev/null and b/assets/wua/sprite/npc/Ratailer/idle1.pal.png differ diff --git a/assets/wua/sprite/npc/Ratailer/idle1.png b/assets/wua/sprite/npc/Ratailer/idle1.png new file mode 100644 index 00000000000..df57e8488c0 Binary files /dev/null and b/assets/wua/sprite/npc/Ratailer/idle1.png differ diff --git a/assets/wua/sprite/npc/Ratailer/idle2.png b/assets/wua/sprite/npc/Ratailer/idle2.png new file mode 100644 index 00000000000..eb95ccc1637 Binary files /dev/null and b/assets/wua/sprite/npc/Ratailer/idle2.png differ diff --git a/assets/wua/sprite/npc/Ratailer/idle3.png b/assets/wua/sprite/npc/Ratailer/idle3.png new file mode 100644 index 00000000000..49df21656e1 Binary files /dev/null and b/assets/wua/sprite/npc/Ratailer/idle3.png differ diff --git a/assets/wua/sprite/npc/Ratailer/idle4.png b/assets/wua/sprite/npc/Ratailer/idle4.png new file mode 100644 index 00000000000..0cc018a1ab8 Binary files /dev/null and b/assets/wua/sprite/npc/Ratailer/idle4.png differ diff --git a/assets/wua/sprite/npc/Ratailer/talk.png b/assets/wua/sprite/npc/Ratailer/talk.png new file mode 100644 index 00000000000..da1f29e9aa1 Binary files /dev/null and b/assets/wua/sprite/npc/Ratailer/talk.png differ diff --git a/assets/wua/sprite/npc/Rattailer/Palette_00.png b/assets/wua/sprite/npc/Rattailer/Palette_00.png new file mode 100644 index 00000000000..0539adb5122 Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Rattailer/SpriteSheet.xml b/assets/wua/sprite/npc/Rattailer/SpriteSheet.xml new file mode 100644 index 00000000000..c34a83b2f17 --- /dev/null +++ b/assets/wua/sprite/npc/Rattailer/SpriteSheet.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Rattailer/celesteidle.gif b/assets/wua/sprite/npc/Rattailer/celesteidle.gif new file mode 100644 index 00000000000..88d2a684619 Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/celesteidle.gif differ diff --git a/assets/wua/sprite/npc/Rattailer/idle1.png b/assets/wua/sprite/npc/Rattailer/idle1.png new file mode 100644 index 00000000000..6993fabf1df Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/idle1.png differ diff --git a/assets/wua/sprite/npc/Rattailer/idle2.png b/assets/wua/sprite/npc/Rattailer/idle2.png new file mode 100644 index 00000000000..a95babc8e5b Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/idle2.png differ diff --git a/assets/wua/sprite/npc/Rattailer/talk1.png b/assets/wua/sprite/npc/Rattailer/talk1.png new file mode 100644 index 00000000000..a95babc8e5b Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/talk1.png differ diff --git a/assets/wua/sprite/npc/Rattailer/talk2.png b/assets/wua/sprite/npc/Rattailer/talk2.png new file mode 100644 index 00000000000..1c1e1f4d55e Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/talk2.png differ diff --git a/assets/wua/sprite/npc/Rattailer/walk1.png b/assets/wua/sprite/npc/Rattailer/walk1.png new file mode 100644 index 00000000000..ebef5ea20ec Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/walk1.png differ diff --git a/assets/wua/sprite/npc/Rattailer/walk2.png b/assets/wua/sprite/npc/Rattailer/walk2.png new file mode 100644 index 00000000000..77cdfee600e Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/walk2.png differ diff --git a/assets/wua/sprite/npc/Rattailer/walk3.png b/assets/wua/sprite/npc/Rattailer/walk3.png new file mode 100644 index 00000000000..8e9b5b349fd Binary files /dev/null and b/assets/wua/sprite/npc/Rattailer/walk3.png differ diff --git a/assets/wua/sprite/npc/Reznor/Fireball1.pal.png b/assets/wua/sprite/npc/Reznor/Fireball1.pal.png new file mode 100644 index 00000000000..45e3033caaa Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Fireball1.pal.png differ diff --git a/assets/wua/sprite/npc/Reznor/Fireball1.png b/assets/wua/sprite/npc/Reznor/Fireball1.png new file mode 100644 index 00000000000..45e3033caaa Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Fireball1.png differ diff --git a/assets/wua/sprite/npc/Reznor/Fireball2.png b/assets/wua/sprite/npc/Reznor/Fireball2.png new file mode 100644 index 00000000000..ee1638481b7 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Fireball2.png differ diff --git a/assets/wua/sprite/npc/Reznor/Fireball3.png b/assets/wua/sprite/npc/Reznor/Fireball3.png new file mode 100644 index 00000000000..ccb2481ac6e Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Fireball3.png differ diff --git a/assets/wua/sprite/npc/Reznor/Palette_00.png b/assets/wua/sprite/npc/Reznor/Palette_00.png new file mode 100644 index 00000000000..6cea2cb2d7d Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Reznor/Palettes/Burnt.png b/assets/wua/sprite/npc/Reznor/Palettes/Burnt.png new file mode 100644 index 00000000000..59502148d30 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Palettes/Burnt.png differ diff --git a/assets/wua/sprite/npc/Reznor/Palettes/Default.png b/assets/wua/sprite/npc/Reznor/Palettes/Default.png new file mode 100644 index 00000000000..6cea2cb2d7d Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Palettes/Default.png differ diff --git a/assets/wua/sprite/npc/Reznor/Palettes/Fireball.png b/assets/wua/sprite/npc/Reznor/Palettes/Fireball.png new file mode 100644 index 00000000000..45e3033caaa Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Palettes/Fireball.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Fireball1.png b/assets/wua/sprite/npc/Reznor/Rasters/Fireball1.png new file mode 100644 index 00000000000..45e3033caaa Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Fireball1.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Fireball2.png b/assets/wua/sprite/npc/Reznor/Rasters/Fireball2.png new file mode 100644 index 00000000000..29fe26a722d Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Fireball2.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Fireball3.png b/assets/wua/sprite/npc/Reznor/Rasters/Fireball3.png new file mode 100644 index 00000000000..5bc609fb3d8 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Fireball3.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor0.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor0.png new file mode 100644 index 00000000000..3136069c88d Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor0.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor1.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor1.png new file mode 100644 index 00000000000..967d772bfd9 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor1.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor10.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor10.png new file mode 100644 index 00000000000..abfe1c9ce43 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor10.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor11.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor11.png new file mode 100644 index 00000000000..18aacb70eee Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor11.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor12.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor12.png new file mode 100644 index 00000000000..5ab155752d5 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor12.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor13.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor13.png new file mode 100644 index 00000000000..e9e4e841942 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor13.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor14.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor14.png new file mode 100644 index 00000000000..ab75156a13b Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor14.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor15.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor15.png new file mode 100644 index 00000000000..3c614b73b23 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor15.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor16.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor16.png new file mode 100644 index 00000000000..a3b34ab53e4 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor16.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor17.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor17.png new file mode 100644 index 00000000000..b024bc2d48c Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor17.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor18.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor18.png new file mode 100644 index 00000000000..b815143759d Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor18.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor19.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor19.png new file mode 100644 index 00000000000..19640716b7b Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor19.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor2.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor2.png new file mode 100644 index 00000000000..ab76488ec6a Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor2.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor20.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor20.png new file mode 100644 index 00000000000..9cdaaeef8d6 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor20.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor22.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor22.png new file mode 100644 index 00000000000..5a58bffc913 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor22.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor23.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor23.png new file mode 100644 index 00000000000..caed8339de9 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor23.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor24.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor24.png new file mode 100644 index 00000000000..a685dca0982 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor24.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor25.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor25.png new file mode 100644 index 00000000000..83e1ba3890f Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor25.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor26.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor26.png new file mode 100644 index 00000000000..34410574b8b Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor26.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor3.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor3.png new file mode 100644 index 00000000000..d685b343a2e Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor3.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor4.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor4.png new file mode 100644 index 00000000000..9a71a8dbf36 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor4.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor5.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor5.png new file mode 100644 index 00000000000..742ba46ae32 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor5.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor6.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor6.png new file mode 100644 index 00000000000..092823f1dbf Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor6.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor7.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor7.png new file mode 100644 index 00000000000..ba207a301af Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor7.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor8.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor8.png new file mode 100644 index 00000000000..5a8b5e34b22 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor8.png differ diff --git a/assets/wua/sprite/npc/Reznor/Rasters/Reznor9.png b/assets/wua/sprite/npc/Reznor/Rasters/Reznor9.png new file mode 100644 index 00000000000..2368c640912 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Rasters/Reznor9.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor0.png b/assets/wua/sprite/npc/Reznor/Reznor0.png new file mode 100644 index 00000000000..3136069c88d Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor0.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor1.png b/assets/wua/sprite/npc/Reznor/Reznor1.png new file mode 100644 index 00000000000..967d772bfd9 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor1.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor10.png b/assets/wua/sprite/npc/Reznor/Reznor10.png new file mode 100644 index 00000000000..abfe1c9ce43 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor10.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor11.png b/assets/wua/sprite/npc/Reznor/Reznor11.png new file mode 100644 index 00000000000..18aacb70eee Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor11.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor12.png b/assets/wua/sprite/npc/Reznor/Reznor12.png new file mode 100644 index 00000000000..5ab155752d5 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor12.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor13.png b/assets/wua/sprite/npc/Reznor/Reznor13.png new file mode 100644 index 00000000000..e9e4e841942 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor13.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor14.png b/assets/wua/sprite/npc/Reznor/Reznor14.png new file mode 100644 index 00000000000..ab75156a13b Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor14.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor15.png b/assets/wua/sprite/npc/Reznor/Reznor15.png new file mode 100644 index 00000000000..3c614b73b23 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor15.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor16.png b/assets/wua/sprite/npc/Reznor/Reznor16.png new file mode 100644 index 00000000000..a3b34ab53e4 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor16.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor17.png b/assets/wua/sprite/npc/Reznor/Reznor17.png new file mode 100644 index 00000000000..b024bc2d48c Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor17.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor18.png b/assets/wua/sprite/npc/Reznor/Reznor18.png new file mode 100644 index 00000000000..b815143759d Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor18.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor19.png b/assets/wua/sprite/npc/Reznor/Reznor19.png new file mode 100644 index 00000000000..19640716b7b Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor19.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor2.png b/assets/wua/sprite/npc/Reznor/Reznor2.png new file mode 100644 index 00000000000..ab76488ec6a Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor2.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor20.png b/assets/wua/sprite/npc/Reznor/Reznor20.png new file mode 100644 index 00000000000..9cdaaeef8d6 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor20.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor22.png b/assets/wua/sprite/npc/Reznor/Reznor22.png new file mode 100644 index 00000000000..5a58bffc913 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor22.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor23.png b/assets/wua/sprite/npc/Reznor/Reznor23.png new file mode 100644 index 00000000000..caed8339de9 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor23.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor24.pal.png b/assets/wua/sprite/npc/Reznor/Reznor24.pal.png new file mode 100644 index 00000000000..59502148d30 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor24.pal.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor24.png b/assets/wua/sprite/npc/Reznor/Reznor24.png new file mode 100644 index 00000000000..a685dca0982 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor24.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor25.png b/assets/wua/sprite/npc/Reznor/Reznor25.png new file mode 100644 index 00000000000..83e1ba3890f Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor25.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor26.png b/assets/wua/sprite/npc/Reznor/Reznor26.png new file mode 100644 index 00000000000..34410574b8b Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor26.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor3.png b/assets/wua/sprite/npc/Reznor/Reznor3.png new file mode 100644 index 00000000000..d685b343a2e Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor3.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor4.png b/assets/wua/sprite/npc/Reznor/Reznor4.png new file mode 100644 index 00000000000..9a71a8dbf36 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor4.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor5.png b/assets/wua/sprite/npc/Reznor/Reznor5.png new file mode 100644 index 00000000000..742ba46ae32 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor5.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor6.png b/assets/wua/sprite/npc/Reznor/Reznor6.png new file mode 100644 index 00000000000..092823f1dbf Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor6.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor7.png b/assets/wua/sprite/npc/Reznor/Reznor7.png new file mode 100644 index 00000000000..ba207a301af Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor7.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor8.png b/assets/wua/sprite/npc/Reznor/Reznor8.png new file mode 100644 index 00000000000..5a8b5e34b22 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor8.png differ diff --git a/assets/wua/sprite/npc/Reznor/Reznor9.png b/assets/wua/sprite/npc/Reznor/Reznor9.png new file mode 100644 index 00000000000..2368c640912 Binary files /dev/null and b/assets/wua/sprite/npc/Reznor/Reznor9.png differ diff --git a/assets/wua/sprite/npc/Reznor/SpriteSheet.xml b/assets/wua/sprite/npc/Reznor/SpriteSheet.xml new file mode 100644 index 00000000000..3619211fd89 --- /dev/null +++ b/assets/wua/sprite/npc/Reznor/SpriteSheet.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Sadasman/BArm.png b/assets/wua/sprite/npc/Sadasman/BArm.png new file mode 100644 index 00000000000..935611dcf53 Binary files /dev/null and b/assets/wua/sprite/npc/Sadasman/BArm.png differ diff --git a/assets/wua/sprite/npc/Sadasman/BFoot.png b/assets/wua/sprite/npc/Sadasman/BFoot.png new file mode 100644 index 00000000000..ad1702515c8 Binary files /dev/null and b/assets/wua/sprite/npc/Sadasman/BFoot.png differ diff --git a/assets/wua/sprite/npc/Sadasman/Beard.png b/assets/wua/sprite/npc/Sadasman/Beard.png new file mode 100644 index 00000000000..fd180fd8f3c Binary files /dev/null and b/assets/wua/sprite/npc/Sadasman/Beard.png differ diff --git a/assets/wua/sprite/npc/Sadasman/FArm.png b/assets/wua/sprite/npc/Sadasman/FArm.png new file mode 100644 index 00000000000..eb8a0ae47f9 Binary files /dev/null and b/assets/wua/sprite/npc/Sadasman/FArm.png differ diff --git a/assets/wua/sprite/npc/Sadasman/FFoot.png b/assets/wua/sprite/npc/Sadasman/FFoot.png new file mode 100644 index 00000000000..9ef3de71156 Binary files /dev/null and b/assets/wua/sprite/npc/Sadasman/FFoot.png differ diff --git a/assets/wua/sprite/npc/Sadasman/Palette_00.png b/assets/wua/sprite/npc/Sadasman/Palette_00.png new file mode 100644 index 00000000000..b49f76a9c63 Binary files /dev/null and b/assets/wua/sprite/npc/Sadasman/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Sadasman/SpriteSheet.xml b/assets/wua/sprite/npc/Sadasman/SpriteSheet.xml new file mode 100644 index 00000000000..d674c8989f9 --- /dev/null +++ b/assets/wua/sprite/npc/Sadasman/SpriteSheet.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Sadasman/Torso.png b/assets/wua/sprite/npc/Sadasman/Torso.png new file mode 100644 index 00000000000..b6c213c6e36 Binary files /dev/null and b/assets/wua/sprite/npc/Sadasman/Torso.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Palette_00.png b/assets/wua/sprite/npc/SakuraNinji/Palette_00.png new file mode 100644 index 00000000000..caf5d2dba6d Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Palette_00.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_00.png b/assets/wua/sprite/npc/SakuraNinji/Raster_00.png new file mode 100644 index 00000000000..b08a30b7a81 Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_00.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_01.png b/assets/wua/sprite/npc/SakuraNinji/Raster_01.png new file mode 100644 index 00000000000..dfa33b66d0b Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_01.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_02.png b/assets/wua/sprite/npc/SakuraNinji/Raster_02.png new file mode 100644 index 00000000000..5089d73a275 Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_02.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_03.png b/assets/wua/sprite/npc/SakuraNinji/Raster_03.png new file mode 100644 index 00000000000..a831575b489 Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_03.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_04.png b/assets/wua/sprite/npc/SakuraNinji/Raster_04.png new file mode 100644 index 00000000000..1897124302c Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_04.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_05.png b/assets/wua/sprite/npc/SakuraNinji/Raster_05.png new file mode 100644 index 00000000000..48269db2ee9 Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_05.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_06.png b/assets/wua/sprite/npc/SakuraNinji/Raster_06.png new file mode 100644 index 00000000000..807fbf4dbb4 Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_06.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_07.png b/assets/wua/sprite/npc/SakuraNinji/Raster_07.png new file mode 100644 index 00000000000..f901ce5b858 Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_07.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/Raster_08.png b/assets/wua/sprite/npc/SakuraNinji/Raster_08.png new file mode 100644 index 00000000000..78355094e64 Binary files /dev/null and b/assets/wua/sprite/npc/SakuraNinji/Raster_08.png differ diff --git a/assets/wua/sprite/npc/SakuraNinji/SpriteSheet.xml b/assets/wua/sprite/npc/SakuraNinji/SpriteSheet.xml new file mode 100644 index 00000000000..4d91ec5a1d2 --- /dev/null +++ b/assets/wua/sprite/npc/SakuraNinji/SpriteSheet.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Shamac/Palette_00.png b/assets/wua/sprite/npc/Shamac/Palette_00.png new file mode 100644 index 00000000000..bdc6f922d46 Binary files /dev/null and b/assets/wua/sprite/npc/Shamac/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Shamac/Palette_01.png b/assets/wua/sprite/npc/Shamac/Palette_01.png new file mode 100644 index 00000000000..d563aaca242 Binary files /dev/null and b/assets/wua/sprite/npc/Shamac/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Shamac/SpriteSheet.xml b/assets/wua/sprite/npc/Shamac/SpriteSheet.xml new file mode 100644 index 00000000000..f36d9b27e1c --- /dev/null +++ b/assets/wua/sprite/npc/Shamac/SpriteSheet.xml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Shamac/idle1.png b/assets/wua/sprite/npc/Shamac/idle1.png new file mode 100644 index 00000000000..0742a0ff5af Binary files /dev/null and b/assets/wua/sprite/npc/Shamac/idle1.png differ diff --git a/assets/wua/sprite/npc/Shamac/idle2.png b/assets/wua/sprite/npc/Shamac/idle2.png new file mode 100644 index 00000000000..0f48b549d26 Binary files /dev/null and b/assets/wua/sprite/npc/Shamac/idle2.png differ diff --git a/assets/wua/sprite/npc/Shamac/star.png b/assets/wua/sprite/npc/Shamac/star.png new file mode 100644 index 00000000000..1a5ceda8aa8 Binary files /dev/null and b/assets/wua/sprite/npc/Shamac/star.png differ diff --git a/assets/wua/sprite/npc/Shamac/talk1.png b/assets/wua/sprite/npc/Shamac/talk1.png new file mode 100644 index 00000000000..734a92e2749 Binary files /dev/null and b/assets/wua/sprite/npc/Shamac/talk1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FidleH1.png b/assets/wua/sprite/npc/Shamlock/FidleH1.png new file mode 100644 index 00000000000..a96448c9fae Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FidleH1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FidleH2.png b/assets/wua/sprite/npc/Shamlock/FidleH2.png new file mode 100644 index 00000000000..9af7d7f6c08 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FidleH2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FidleH3.png b/assets/wua/sprite/npc/Shamlock/FidleH3.png new file mode 100644 index 00000000000..fac3d3bf49a Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FidleH3.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FidleN1.png b/assets/wua/sprite/npc/Shamlock/FidleN1.png new file mode 100644 index 00000000000..6a6bb172f27 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FidleN1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FidleN2.png b/assets/wua/sprite/npc/Shamlock/FidleN2.png new file mode 100644 index 00000000000..a1fdb957997 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FidleN2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FidleN3.png b/assets/wua/sprite/npc/Shamlock/FidleN3.png new file mode 100644 index 00000000000..f9c8b152ca7 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FidleN3.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FtalkH1.png b/assets/wua/sprite/npc/Shamlock/FtalkH1.png new file mode 100644 index 00000000000..8f5cdc3f227 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FtalkH1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FtalkH2.png b/assets/wua/sprite/npc/Shamlock/FtalkH2.png new file mode 100644 index 00000000000..32b94fce8b7 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FtalkH2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FtalkN1.png b/assets/wua/sprite/npc/Shamlock/FtalkN1.png new file mode 100644 index 00000000000..a1fdb957997 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FtalkN1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FtalkN2.png b/assets/wua/sprite/npc/Shamlock/FtalkN2.png new file mode 100644 index 00000000000..6cc0f55da92 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FtalkN2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FtalkS1.png b/assets/wua/sprite/npc/Shamlock/FtalkS1.png new file mode 100644 index 00000000000..c4eaf7790c1 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FtalkS1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/FtalkS2.png b/assets/wua/sprite/npc/Shamlock/FtalkS2.png new file mode 100644 index 00000000000..852f4c18a00 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/FtalkS2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/Palette_00.png b/assets/wua/sprite/npc/Shamlock/Palette_00.png new file mode 100644 index 00000000000..2137cb691ad Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Shamlock/Palette_01.png b/assets/wua/sprite/npc/Shamlock/Palette_01.png new file mode 100644 index 00000000000..0c27b29a2e6 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Shamlock/Palette_02.png b/assets/wua/sprite/npc/Shamlock/Palette_02.png new file mode 100644 index 00000000000..0cccd82d234 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Shamlock/Palette_03.png b/assets/wua/sprite/npc/Shamlock/Palette_03.png new file mode 100644 index 00000000000..40487faa1fe Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Shamlock/Palette_04.png b/assets/wua/sprite/npc/Shamlock/Palette_04.png new file mode 100644 index 00000000000..2950c9aa427 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Shamlock/Palette_05.png b/assets/wua/sprite/npc/Shamlock/Palette_05.png new file mode 100644 index 00000000000..49d606ea22f Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Shamlock/SpriteSheet.xml b/assets/wua/sprite/npc/Shamlock/SpriteSheet.xml new file mode 100644 index 00000000000..5baa9990fe2 --- /dev/null +++ b/assets/wua/sprite/npc/Shamlock/SpriteSheet.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Shamlock/idleH1.png b/assets/wua/sprite/npc/Shamlock/idleH1.png new file mode 100644 index 00000000000..807f13f4557 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/idleH1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/idleH2.png b/assets/wua/sprite/npc/Shamlock/idleH2.png new file mode 100644 index 00000000000..a1bccb384b5 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/idleH2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/idleH3.png b/assets/wua/sprite/npc/Shamlock/idleH3.png new file mode 100644 index 00000000000..51c5ef564da Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/idleH3.png differ diff --git a/assets/wua/sprite/npc/Shamlock/idleN1.png b/assets/wua/sprite/npc/Shamlock/idleN1.png new file mode 100644 index 00000000000..9a6e703c4ce Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/idleN1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/idleN2.png b/assets/wua/sprite/npc/Shamlock/idleN2.png new file mode 100644 index 00000000000..eaa60207096 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/idleN2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/idleN3.png b/assets/wua/sprite/npc/Shamlock/idleN3.png new file mode 100644 index 00000000000..79a752eac33 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/idleN3.png differ diff --git a/assets/wua/sprite/npc/Shamlock/talkH1.png b/assets/wua/sprite/npc/Shamlock/talkH1.png new file mode 100644 index 00000000000..808930834b0 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/talkH1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/talkH2.png b/assets/wua/sprite/npc/Shamlock/talkH2.png new file mode 100644 index 00000000000..7431f7a0c3b Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/talkH2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/talkN1.png b/assets/wua/sprite/npc/Shamlock/talkN1.png new file mode 100644 index 00000000000..eaa60207096 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/talkN1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/talkN2.png b/assets/wua/sprite/npc/Shamlock/talkN2.png new file mode 100644 index 00000000000..bd7e1ad24b1 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/talkN2.png differ diff --git a/assets/wua/sprite/npc/Shamlock/talkS1.png b/assets/wua/sprite/npc/Shamlock/talkS1.png new file mode 100644 index 00000000000..efaacacff0f Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/talkS1.png differ diff --git a/assets/wua/sprite/npc/Shamlock/talkS2.png b/assets/wua/sprite/npc/Shamlock/talkS2.png new file mode 100644 index 00000000000..60a57775d01 Binary files /dev/null and b/assets/wua/sprite/npc/Shamlock/talkS2.png differ diff --git a/assets/wua/sprite/npc/Sheilla/8bitsheilla1.png b/assets/wua/sprite/npc/Sheilla/8bitsheilla1.png new file mode 100644 index 00000000000..d5942a57db5 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/8bitsheilla1.png differ diff --git a/assets/wua/sprite/npc/Sheilla/8bitsheilla2.png b/assets/wua/sprite/npc/Sheilla/8bitsheilla2.png new file mode 100644 index 00000000000..29d9bcf6085 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/8bitsheilla2.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Boomerang.png b/assets/wua/sprite/npc/Sheilla/Boomerang.png new file mode 100644 index 00000000000..db799636b4c Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Boomerang.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Hammer.png b/assets/wua/sprite/npc/Sheilla/Hammer.png new file mode 100644 index 00000000000..b679ff21d41 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Hammer.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla1.png b/assets/wua/sprite/npc/Sheilla/Sheilla1.png new file mode 100644 index 00000000000..c6d3f13181b Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla1.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla10.png b/assets/wua/sprite/npc/Sheilla/Sheilla10.png new file mode 100644 index 00000000000..7480af55cc2 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla10.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla12.png b/assets/wua/sprite/npc/Sheilla/Sheilla12.png new file mode 100644 index 00000000000..11037325698 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla12.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla13.png b/assets/wua/sprite/npc/Sheilla/Sheilla13.png new file mode 100644 index 00000000000..a935fdc4a05 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla13.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla14.png b/assets/wua/sprite/npc/Sheilla/Sheilla14.png new file mode 100644 index 00000000000..7da586f41e6 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla14.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla15.png b/assets/wua/sprite/npc/Sheilla/Sheilla15.png new file mode 100644 index 00000000000..6fe11436a65 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla15.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla16.png b/assets/wua/sprite/npc/Sheilla/Sheilla16.png new file mode 100644 index 00000000000..d6b08326fa1 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla16.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla17.png b/assets/wua/sprite/npc/Sheilla/Sheilla17.png new file mode 100644 index 00000000000..cd776f5a84d Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla17.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla18.png b/assets/wua/sprite/npc/Sheilla/Sheilla18.png new file mode 100644 index 00000000000..088f7d08dea Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla18.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla2.png b/assets/wua/sprite/npc/Sheilla/Sheilla2.png new file mode 100644 index 00000000000..0ae9513166c Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla2.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla28.png b/assets/wua/sprite/npc/Sheilla/Sheilla28.png new file mode 100644 index 00000000000..d6fa89e8821 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla28.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla29.png b/assets/wua/sprite/npc/Sheilla/Sheilla29.png new file mode 100644 index 00000000000..5c274bf796c Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla29.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla3.png b/assets/wua/sprite/npc/Sheilla/Sheilla3.png new file mode 100644 index 00000000000..7ae32c74a3d Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla3.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla30.png b/assets/wua/sprite/npc/Sheilla/Sheilla30.png new file mode 100644 index 00000000000..15159562340 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla30.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla31.png b/assets/wua/sprite/npc/Sheilla/Sheilla31.png new file mode 100644 index 00000000000..7ff9f07d7c0 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla31.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla32.png b/assets/wua/sprite/npc/Sheilla/Sheilla32.png new file mode 100644 index 00000000000..a31fc2087fe Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla32.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla33.png b/assets/wua/sprite/npc/Sheilla/Sheilla33.png new file mode 100644 index 00000000000..684acd22b3b Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla33.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla34.png b/assets/wua/sprite/npc/Sheilla/Sheilla34.png new file mode 100644 index 00000000000..c968f45913e Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla34.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla35.png b/assets/wua/sprite/npc/Sheilla/Sheilla35.png new file mode 100644 index 00000000000..94199c833dd Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla35.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla36.png b/assets/wua/sprite/npc/Sheilla/Sheilla36.png new file mode 100644 index 00000000000..70dc2cec29e Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla36.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla4.png b/assets/wua/sprite/npc/Sheilla/Sheilla4.png new file mode 100644 index 00000000000..3a41e12c63c Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla4.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla5.png b/assets/wua/sprite/npc/Sheilla/Sheilla5.png new file mode 100644 index 00000000000..9a75455420a Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla5.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla6.png b/assets/wua/sprite/npc/Sheilla/Sheilla6.png new file mode 100644 index 00000000000..d32598f0935 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla6.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla7.png b/assets/wua/sprite/npc/Sheilla/Sheilla7.png new file mode 100644 index 00000000000..271adb87d32 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla7.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla8.png b/assets/wua/sprite/npc/Sheilla/Sheilla8.png new file mode 100644 index 00000000000..bc4d027aeb8 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla8.png differ diff --git a/assets/wua/sprite/npc/Sheilla/Sheilla9.png b/assets/wua/sprite/npc/Sheilla/Sheilla9.png new file mode 100644 index 00000000000..44c89f58370 Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/Sheilla9.png differ diff --git a/assets/wua/sprite/npc/Sheilla/SheillaBurnt.png b/assets/wua/sprite/npc/Sheilla/SheillaBurnt.png new file mode 100644 index 00000000000..c604492b62d Binary files /dev/null and b/assets/wua/sprite/npc/Sheilla/SheillaBurnt.png differ diff --git a/assets/wua/sprite/npc/Sheilla/SpriteSheet.xml b/assets/wua/sprite/npc/Sheilla/SpriteSheet.xml new file mode 100644 index 00000000000..7fd1f68b2c4 --- /dev/null +++ b/assets/wua/sprite/npc/Sheilla/SpriteSheet.xml @@ -0,0 +1,395 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/ShyDude/Palette_00.png b/assets/wua/sprite/npc/ShyDude/Palette_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Palette_00.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Palette_01.png b/assets/wua/sprite/npc/ShyDude/Palette_01.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Palette_01.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Palette_02.png b/assets/wua/sprite/npc/ShyDude/Palette_02.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Palette_02.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Palette_03.png b/assets/wua/sprite/npc/ShyDude/Palette_03.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Palette_03.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_00.png b/assets/wua/sprite/npc/ShyDude/Raster_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_00.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_01.png b/assets/wua/sprite/npc/ShyDude/Raster_01.png new file mode 100644 index 00000000000..d7019f4a54b Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_01.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_02.png b/assets/wua/sprite/npc/ShyDude/Raster_02.png new file mode 100644 index 00000000000..d3b714492e6 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_02.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_03.png b/assets/wua/sprite/npc/ShyDude/Raster_03.png new file mode 100644 index 00000000000..b3e9c74cb4d Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_03.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_04.png b/assets/wua/sprite/npc/ShyDude/Raster_04.png new file mode 100644 index 00000000000..710790b0de3 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_04.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_05.png b/assets/wua/sprite/npc/ShyDude/Raster_05.png new file mode 100644 index 00000000000..cf056cd913b Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_05.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_06.png b/assets/wua/sprite/npc/ShyDude/Raster_06.png new file mode 100644 index 00000000000..bd7722bbf98 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_06.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_07.png b/assets/wua/sprite/npc/ShyDude/Raster_07.png new file mode 100644 index 00000000000..4fce7b0d31d Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_07.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_08.png b/assets/wua/sprite/npc/ShyDude/Raster_08.png new file mode 100644 index 00000000000..14998de68d9 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_08.png differ diff --git a/assets/wua/sprite/npc/ShyDude/Raster_09.png b/assets/wua/sprite/npc/ShyDude/Raster_09.png new file mode 100644 index 00000000000..d4552f3dd13 Binary files /dev/null and b/assets/wua/sprite/npc/ShyDude/Raster_09.png differ diff --git a/assets/wua/sprite/npc/ShyDude/SpriteSheet.xml b/assets/wua/sprite/npc/ShyDude/SpriteSheet.xml new file mode 100644 index 00000000000..bd225ce7fa1 --- /dev/null +++ b/assets/wua/sprite/npc/ShyDude/SpriteSheet.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_00.png b/assets/wua/sprite/npc/ShyGuy/Palette_00.png new file mode 100644 index 00000000000..79c85ec4d93 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_00.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_01.png b/assets/wua/sprite/npc/ShyGuy/Palette_01.png new file mode 100644 index 00000000000..7d44545b487 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_01.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_02.png b/assets/wua/sprite/npc/ShyGuy/Palette_02.png new file mode 100644 index 00000000000..3b65a25a629 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_02.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_03.png b/assets/wua/sprite/npc/ShyGuy/Palette_03.png new file mode 100644 index 00000000000..9dbd1e4cced Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_03.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_04.png b/assets/wua/sprite/npc/ShyGuy/Palette_04.png new file mode 100644 index 00000000000..fb9c859f9c6 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_04.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_05.png b/assets/wua/sprite/npc/ShyGuy/Palette_05.png new file mode 100644 index 00000000000..9a4740b5314 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_05.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_06.png b/assets/wua/sprite/npc/ShyGuy/Palette_06.png new file mode 100644 index 00000000000..3d0d0d1490d Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_06.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_07.png b/assets/wua/sprite/npc/ShyGuy/Palette_07.png new file mode 100644 index 00000000000..eef5c390475 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_07.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_08.png b/assets/wua/sprite/npc/ShyGuy/Palette_08.png new file mode 100644 index 00000000000..eef5c390475 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_08.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_09.png b/assets/wua/sprite/npc/ShyGuy/Palette_09.png new file mode 100644 index 00000000000..eef5c390475 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_09.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_0A.png b/assets/wua/sprite/npc/ShyGuy/Palette_0A.png new file mode 100644 index 00000000000..eef5c390475 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_0A.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_0B.png b/assets/wua/sprite/npc/ShyGuy/Palette_0B.png new file mode 100644 index 00000000000..eef5c390475 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_0B.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_0C.png b/assets/wua/sprite/npc/ShyGuy/Palette_0C.png new file mode 100644 index 00000000000..804402d7ce2 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_0C.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_0D.png b/assets/wua/sprite/npc/ShyGuy/Palette_0D.png new file mode 100644 index 00000000000..804402d7ce2 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_0D.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_0E.png b/assets/wua/sprite/npc/ShyGuy/Palette_0E.png new file mode 100644 index 00000000000..804402d7ce2 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_0E.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_0F.png b/assets/wua/sprite/npc/ShyGuy/Palette_0F.png new file mode 100644 index 00000000000..804402d7ce2 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_0F.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_10.png b/assets/wua/sprite/npc/ShyGuy/Palette_10.png new file mode 100644 index 00000000000..804402d7ce2 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_10.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_11.png b/assets/wua/sprite/npc/ShyGuy/Palette_11.png new file mode 100644 index 00000000000..804402d7ce2 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_11.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_12.png b/assets/wua/sprite/npc/ShyGuy/Palette_12.png new file mode 100644 index 00000000000..5a9b33525d7 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_12.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_13.png b/assets/wua/sprite/npc/ShyGuy/Palette_13.png new file mode 100644 index 00000000000..5a9b33525d7 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_13.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_14.png b/assets/wua/sprite/npc/ShyGuy/Palette_14.png new file mode 100644 index 00000000000..5a9b33525d7 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_14.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_15.png b/assets/wua/sprite/npc/ShyGuy/Palette_15.png new file mode 100644 index 00000000000..5a9b33525d7 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_15.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_16.png b/assets/wua/sprite/npc/ShyGuy/Palette_16.png new file mode 100644 index 00000000000..5a9b33525d7 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_16.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_17.png b/assets/wua/sprite/npc/ShyGuy/Palette_17.png new file mode 100644 index 00000000000..5a9b33525d7 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_17.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_18.png b/assets/wua/sprite/npc/ShyGuy/Palette_18.png new file mode 100644 index 00000000000..be765eacbac Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_18.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Palette_19.png b/assets/wua/sprite/npc/ShyGuy/Palette_19.png new file mode 100644 index 00000000000..4c74349b959 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Palette_19.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_00.png b/assets/wua/sprite/npc/ShyGuy/Raster_00.png new file mode 100644 index 00000000000..3447a6eafbe Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_00.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_01.png b/assets/wua/sprite/npc/ShyGuy/Raster_01.png new file mode 100644 index 00000000000..d8331def38d Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_01.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_02.png b/assets/wua/sprite/npc/ShyGuy/Raster_02.png new file mode 100644 index 00000000000..2d0ddd5cceb Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_02.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_03.png b/assets/wua/sprite/npc/ShyGuy/Raster_03.png new file mode 100644 index 00000000000..6f6c0f285dc Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_03.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_04.png b/assets/wua/sprite/npc/ShyGuy/Raster_04.png new file mode 100644 index 00000000000..fdc11d49ccd Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_04.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_05.png b/assets/wua/sprite/npc/ShyGuy/Raster_05.png new file mode 100644 index 00000000000..0453f3c2356 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_05.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_06.png b/assets/wua/sprite/npc/ShyGuy/Raster_06.png new file mode 100644 index 00000000000..51567b92300 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_06.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_07.png b/assets/wua/sprite/npc/ShyGuy/Raster_07.png new file mode 100644 index 00000000000..a1eb1f1eca9 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_07.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_08.png b/assets/wua/sprite/npc/ShyGuy/Raster_08.png new file mode 100644 index 00000000000..9ddb073c588 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_08.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_09.png b/assets/wua/sprite/npc/ShyGuy/Raster_09.png new file mode 100644 index 00000000000..bba70132c68 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_09.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_0A.png b/assets/wua/sprite/npc/ShyGuy/Raster_0A.png new file mode 100644 index 00000000000..808a7997183 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_0B.png b/assets/wua/sprite/npc/ShyGuy/Raster_0B.png new file mode 100644 index 00000000000..74506a31d91 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_0C.png b/assets/wua/sprite/npc/ShyGuy/Raster_0C.png new file mode 100644 index 00000000000..d1026ac5257 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_0D.png b/assets/wua/sprite/npc/ShyGuy/Raster_0D.png new file mode 100644 index 00000000000..e0577f1e25f Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_0E.png b/assets/wua/sprite/npc/ShyGuy/Raster_0E.png new file mode 100644 index 00000000000..d1fed52ae00 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_0F.png b/assets/wua/sprite/npc/ShyGuy/Raster_0F.png new file mode 100644 index 00000000000..bb9d899e278 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_10.png b/assets/wua/sprite/npc/ShyGuy/Raster_10.png new file mode 100644 index 00000000000..05c23935cd5 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_10.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_11.png b/assets/wua/sprite/npc/ShyGuy/Raster_11.png new file mode 100644 index 00000000000..c0cb3b12711 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_11.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_12.png b/assets/wua/sprite/npc/ShyGuy/Raster_12.png new file mode 100644 index 00000000000..f7874484555 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_12.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_13.png b/assets/wua/sprite/npc/ShyGuy/Raster_13.png new file mode 100644 index 00000000000..f0b57648360 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_13.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_14.png b/assets/wua/sprite/npc/ShyGuy/Raster_14.png new file mode 100644 index 00000000000..d447a594b14 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_14.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_15.png b/assets/wua/sprite/npc/ShyGuy/Raster_15.png new file mode 100644 index 00000000000..ec72ad4a81f Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_15.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_16.png b/assets/wua/sprite/npc/ShyGuy/Raster_16.png new file mode 100644 index 00000000000..8a42853ff82 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_16.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_17.png b/assets/wua/sprite/npc/ShyGuy/Raster_17.png new file mode 100644 index 00000000000..219667f92e4 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_17.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_18.png b/assets/wua/sprite/npc/ShyGuy/Raster_18.png new file mode 100644 index 00000000000..1128952be67 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_18.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_19.png b/assets/wua/sprite/npc/ShyGuy/Raster_19.png new file mode 100644 index 00000000000..6bb901c7000 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_19.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_1A.png b/assets/wua/sprite/npc/ShyGuy/Raster_1A.png new file mode 100644 index 00000000000..73449b34fae Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_1B.png b/assets/wua/sprite/npc/ShyGuy/Raster_1B.png new file mode 100644 index 00000000000..ac156557034 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_1C.png b/assets/wua/sprite/npc/ShyGuy/Raster_1C.png new file mode 100644 index 00000000000..08aab326f02 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_1D.png b/assets/wua/sprite/npc/ShyGuy/Raster_1D.png new file mode 100644 index 00000000000..baadf6b7318 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_1E.png b/assets/wua/sprite/npc/ShyGuy/Raster_1E.png new file mode 100644 index 00000000000..95edcfda813 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_1F.png b/assets/wua/sprite/npc/ShyGuy/Raster_1F.png new file mode 100644 index 00000000000..7dbe4eb595b Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_20.png b/assets/wua/sprite/npc/ShyGuy/Raster_20.png new file mode 100644 index 00000000000..fe241e2e989 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_20.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_21.png b/assets/wua/sprite/npc/ShyGuy/Raster_21.png new file mode 100644 index 00000000000..c124397587a Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_21.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_22.png b/assets/wua/sprite/npc/ShyGuy/Raster_22.png new file mode 100644 index 00000000000..3ac5c046ae2 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_22.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_23.png b/assets/wua/sprite/npc/ShyGuy/Raster_23.png new file mode 100644 index 00000000000..063bdcba656 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_23.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_24.png b/assets/wua/sprite/npc/ShyGuy/Raster_24.png new file mode 100644 index 00000000000..d3e3323c5b7 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_24.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_25.png b/assets/wua/sprite/npc/ShyGuy/Raster_25.png new file mode 100644 index 00000000000..a9af786ed18 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_25.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_26.png b/assets/wua/sprite/npc/ShyGuy/Raster_26.png new file mode 100644 index 00000000000..a1f6df83455 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_26.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_27.png b/assets/wua/sprite/npc/ShyGuy/Raster_27.png new file mode 100644 index 00000000000..0b3810b1901 Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_27.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/Raster_28.png b/assets/wua/sprite/npc/ShyGuy/Raster_28.png new file mode 100644 index 00000000000..625b34f8d1a Binary files /dev/null and b/assets/wua/sprite/npc/ShyGuy/Raster_28.png differ diff --git a/assets/wua/sprite/npc/ShyGuy/SpriteSheet.xml b/assets/wua/sprite/npc/ShyGuy/SpriteSheet.xml new file mode 100644 index 00000000000..97f1e613e8e --- /dev/null +++ b/assets/wua/sprite/npc/ShyGuy/SpriteSheet.xml @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Smokepuff/Dead.png b/assets/wua/sprite/npc/Smokepuff/Dead.png new file mode 100644 index 00000000000..930a86cde55 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Dead.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palette_00.png b/assets/wua/sprite/npc/Smokepuff/Palette_00.png new file mode 100644 index 00000000000..c4aa9756d2a Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palette_01.png b/assets/wua/sprite/npc/Smokepuff/Palette_01.png new file mode 100644 index 00000000000..26fddcd1d69 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palette_02.png b/assets/wua/sprite/npc/Smokepuff/Palette_02.png new file mode 100644 index 00000000000..33508193823 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palette_03.png b/assets/wua/sprite/npc/Smokepuff/Palette_03.png new file mode 100644 index 00000000000..370700a710a Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palette_04.png b/assets/wua/sprite/npc/Smokepuff/Palette_04.png new file mode 100644 index 00000000000..4266838ddc1 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palettes/Default.png b/assets/wua/sprite/npc/Smokepuff/Palettes/Default.png new file mode 100644 index 00000000000..c4aa9756d2a Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palettes/Default.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_01.png b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_01.png new file mode 100644 index 00000000000..26fddcd1d69 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_02.png b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_02.png new file mode 100644 index 00000000000..33508193823 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_03.png b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_03.png new file mode 100644 index 00000000000..370700a710a Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_04.png b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_04.png new file mode 100644 index 00000000000..4266838ddc1 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Palettes/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_00.png b/assets/wua/sprite/npc/Smokepuff/Raster_00.png new file mode 100644 index 00000000000..547e489acce Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_01.png b/assets/wua/sprite/npc/Smokepuff/Raster_01.png new file mode 100644 index 00000000000..7aba9823b49 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_02.png b/assets/wua/sprite/npc/Smokepuff/Raster_02.png new file mode 100644 index 00000000000..64253273573 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_03.png b/assets/wua/sprite/npc/Smokepuff/Raster_03.png new file mode 100644 index 00000000000..2493756c376 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_04.png b/assets/wua/sprite/npc/Smokepuff/Raster_04.png new file mode 100644 index 00000000000..b6a2f0ed613 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_05.png b/assets/wua/sprite/npc/Smokepuff/Raster_05.png new file mode 100644 index 00000000000..ae33581f675 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_06.png b/assets/wua/sprite/npc/Smokepuff/Raster_06.png new file mode 100644 index 00000000000..e118fc50fde Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_07.png b/assets/wua/sprite/npc/Smokepuff/Raster_07.png new file mode 100644 index 00000000000..77711f75c6a Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_08.png b/assets/wua/sprite/npc/Smokepuff/Raster_08.png new file mode 100644 index 00000000000..b28c4dcb1af Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_09.png b/assets/wua/sprite/npc/Smokepuff/Raster_09.png new file mode 100644 index 00000000000..5a2f998f0b2 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_0A.png b/assets/wua/sprite/npc/Smokepuff/Raster_0A.png new file mode 100644 index 00000000000..1de48bedb58 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_0B.png b/assets/wua/sprite/npc/Smokepuff/Raster_0B.png new file mode 100644 index 00000000000..96e9d1c182e Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_0C.png b/assets/wua/sprite/npc/Smokepuff/Raster_0C.png new file mode 100644 index 00000000000..9c1c61f26dc Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_0D.png b/assets/wua/sprite/npc/Smokepuff/Raster_0D.png new file mode 100644 index 00000000000..94e33da7268 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_0E.png b/assets/wua/sprite/npc/Smokepuff/Raster_0E.png new file mode 100644 index 00000000000..260fa6c8e13 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Raster_0F.png b/assets/wua/sprite/npc/Smokepuff/Raster_0F.png new file mode 100644 index 00000000000..0ed069348db Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Dead.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Dead.png new file mode 100644 index 00000000000..930a86cde55 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Dead.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_00.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_00.png new file mode 100644 index 00000000000..547e489acce Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_01.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_01.png new file mode 100644 index 00000000000..7aba9823b49 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_02.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_02.png new file mode 100644 index 00000000000..64253273573 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_03.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_03.png new file mode 100644 index 00000000000..2493756c376 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_04.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_04.png new file mode 100644 index 00000000000..b6a2f0ed613 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_05.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_05.png new file mode 100644 index 00000000000..ae33581f675 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_06.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_06.png new file mode 100644 index 00000000000..e118fc50fde Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_07.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_07.png new file mode 100644 index 00000000000..77711f75c6a Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_08.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_08.png new file mode 100644 index 00000000000..b28c4dcb1af Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_09.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_09.png new file mode 100644 index 00000000000..5a2f998f0b2 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0A.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0A.png new file mode 100644 index 00000000000..1de48bedb58 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0B.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0B.png new file mode 100644 index 00000000000..96e9d1c182e Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0C.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0C.png new file mode 100644 index 00000000000..9c1c61f26dc Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0D.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0D.png new file mode 100644 index 00000000000..94e33da7268 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0E.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0E.png new file mode 100644 index 00000000000..260fa6c8e13 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0F.png b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0F.png new file mode 100644 index 00000000000..0ed069348db Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/Rasters/SmokePuff10.png b/assets/wua/sprite/npc/Smokepuff/Rasters/SmokePuff10.png new file mode 100644 index 00000000000..1c03c273b59 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/Rasters/SmokePuff10.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/SmokePuff10.png b/assets/wua/sprite/npc/Smokepuff/SmokePuff10.png new file mode 100644 index 00000000000..1c03c273b59 Binary files /dev/null and b/assets/wua/sprite/npc/Smokepuff/SmokePuff10.png differ diff --git a/assets/wua/sprite/npc/Smokepuff/SpriteSheet.xml b/assets/wua/sprite/npc/Smokepuff/SpriteSheet.xml new file mode 100644 index 00000000000..4033dd593a6 --- /dev/null +++ b/assets/wua/sprite/npc/Smokepuff/SpriteSheet.xml @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Snifit/Host1.png b/assets/wua/sprite/npc/Snifit/Host1.png new file mode 100644 index 00000000000..14e55b37f94 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Host1.png differ diff --git a/assets/wua/sprite/npc/Snifit/Host2.png b/assets/wua/sprite/npc/Snifit/Host2.png new file mode 100644 index 00000000000..56749c08b86 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Host2.png differ diff --git a/assets/wua/sprite/npc/Snifit/Host3.png b/assets/wua/sprite/npc/Snifit/Host3.png new file mode 100644 index 00000000000..56c5fac1904 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Host3.png differ diff --git a/assets/wua/sprite/npc/Snifit/Host4.png b/assets/wua/sprite/npc/Snifit/Host4.png new file mode 100644 index 00000000000..107f17dd4eb Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Host4.png differ diff --git a/assets/wua/sprite/npc/Snifit/Host5.png b/assets/wua/sprite/npc/Snifit/Host5.png new file mode 100644 index 00000000000..f225358abc2 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Host5.png differ diff --git a/assets/wua/sprite/npc/Snifit/Host6.png b/assets/wua/sprite/npc/Snifit/Host6.png new file mode 100644 index 00000000000..2cef0ba8830 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Host6.png differ diff --git a/assets/wua/sprite/npc/Snifit/Host7.png b/assets/wua/sprite/npc/Snifit/Host7.png new file mode 100644 index 00000000000..514bba1a45e Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Host7.png differ diff --git a/assets/wua/sprite/npc/Snifit/Snifit1.png b/assets/wua/sprite/npc/Snifit/Snifit1.png new file mode 100644 index 00000000000..1dd3df93587 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Snifit1.png differ diff --git a/assets/wua/sprite/npc/Snifit/Snifit2.png b/assets/wua/sprite/npc/Snifit/Snifit2.png new file mode 100644 index 00000000000..ef4367ec957 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Snifit2.png differ diff --git a/assets/wua/sprite/npc/Snifit/Snifit3.png b/assets/wua/sprite/npc/Snifit/Snifit3.png new file mode 100644 index 00000000000..fcb6ce4c33e Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Snifit3.png differ diff --git a/assets/wua/sprite/npc/Snifit/Snifit4.png b/assets/wua/sprite/npc/Snifit/Snifit4.png new file mode 100644 index 00000000000..16be8b872db Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Snifit4.png differ diff --git a/assets/wua/sprite/npc/Snifit/Snifit5.png b/assets/wua/sprite/npc/Snifit/Snifit5.png new file mode 100644 index 00000000000..0ceb767aa96 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Snifit5.png differ diff --git a/assets/wua/sprite/npc/Snifit/Snifit6.png b/assets/wua/sprite/npc/Snifit/Snifit6.png new file mode 100644 index 00000000000..4a1545033b6 Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Snifit6.png differ diff --git a/assets/wua/sprite/npc/Snifit/Snifit7.png b/assets/wua/sprite/npc/Snifit/Snifit7.png new file mode 100644 index 00000000000..655bd556d8b Binary files /dev/null and b/assets/wua/sprite/npc/Snifit/Snifit7.png differ diff --git a/assets/wua/sprite/npc/Snifit/SpriteSheet.xml b/assets/wua/sprite/npc/Snifit/SpriteSheet.xml new file mode 100644 index 00000000000..28837211a51 --- /dev/null +++ b/assets/wua/sprite/npc/Snifit/SpriteSheet.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_00.png b/assets/wua/sprite/npc/SnowPokey/Palette_00.png new file mode 100644 index 00000000000..0d299f30656 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_00.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_01.png b/assets/wua/sprite/npc/SnowPokey/Palette_01.png new file mode 100644 index 00000000000..8f86f7a7f58 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_01.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_02.png b/assets/wua/sprite/npc/SnowPokey/Palette_02.png new file mode 100644 index 00000000000..fd4465d58e8 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_02.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_03.png b/assets/wua/sprite/npc/SnowPokey/Palette_03.png new file mode 100644 index 00000000000..c9181073190 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_03.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_04.png b/assets/wua/sprite/npc/SnowPokey/Palette_04.png new file mode 100644 index 00000000000..c9181073190 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_04.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_05.png b/assets/wua/sprite/npc/SnowPokey/Palette_05.png new file mode 100644 index 00000000000..c9181073190 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_05.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_06.png b/assets/wua/sprite/npc/SnowPokey/Palette_06.png new file mode 100644 index 00000000000..1875ab5e61c Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_06.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_07.png b/assets/wua/sprite/npc/SnowPokey/Palette_07.png new file mode 100644 index 00000000000..fdd60225d95 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_07.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_08.png b/assets/wua/sprite/npc/SnowPokey/Palette_08.png new file mode 100644 index 00000000000..fdd60225d95 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_08.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_09.png b/assets/wua/sprite/npc/SnowPokey/Palette_09.png new file mode 100644 index 00000000000..0cca7a421ab Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_09.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_0A.png b/assets/wua/sprite/npc/SnowPokey/Palette_0A.png new file mode 100644 index 00000000000..0cca7a421ab Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_0A.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_0B.png b/assets/wua/sprite/npc/SnowPokey/Palette_0B.png new file mode 100644 index 00000000000..0cca7a421ab Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_0B.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Palette_0C.png b/assets/wua/sprite/npc/SnowPokey/Palette_0C.png new file mode 100644 index 00000000000..ff958d51355 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Palette_0C.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_00.png b/assets/wua/sprite/npc/SnowPokey/Raster_00.png new file mode 100644 index 00000000000..3e0798b6287 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_00.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_01.png b/assets/wua/sprite/npc/SnowPokey/Raster_01.png new file mode 100644 index 00000000000..be10756b1f3 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_01.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_02.png b/assets/wua/sprite/npc/SnowPokey/Raster_02.png new file mode 100644 index 00000000000..a52fed62ed9 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_02.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_03.png b/assets/wua/sprite/npc/SnowPokey/Raster_03.png new file mode 100644 index 00000000000..ee7b9c2e0f6 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_03.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_04.png b/assets/wua/sprite/npc/SnowPokey/Raster_04.png new file mode 100644 index 00000000000..e394331e9c2 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_04.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_05.png b/assets/wua/sprite/npc/SnowPokey/Raster_05.png new file mode 100644 index 00000000000..48727b905c1 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_05.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_06.png b/assets/wua/sprite/npc/SnowPokey/Raster_06.png new file mode 100644 index 00000000000..58c83d7b9a0 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_06.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_07.png b/assets/wua/sprite/npc/SnowPokey/Raster_07.png new file mode 100644 index 00000000000..ff958d51355 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_07.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_08.png b/assets/wua/sprite/npc/SnowPokey/Raster_08.png new file mode 100644 index 00000000000..ec6d799e1d1 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_08.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_09.png b/assets/wua/sprite/npc/SnowPokey/Raster_09.png new file mode 100644 index 00000000000..38fa77194ce Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_09.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_0A.png b/assets/wua/sprite/npc/SnowPokey/Raster_0A.png new file mode 100644 index 00000000000..992547121c5 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_0B.png b/assets/wua/sprite/npc/SnowPokey/Raster_0B.png new file mode 100644 index 00000000000..3fe1275dcc2 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_0C.png b/assets/wua/sprite/npc/SnowPokey/Raster_0C.png new file mode 100644 index 00000000000..b32287b3e36 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/Raster_0D.png b/assets/wua/sprite/npc/SnowPokey/Raster_0D.png new file mode 100644 index 00000000000..bc04b985c45 Binary files /dev/null and b/assets/wua/sprite/npc/SnowPokey/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/SnowPokey/SpriteSheet.xml b/assets/wua/sprite/npc/SnowPokey/SpriteSheet.xml new file mode 100644 index 00000000000..530b00dc2bb --- /dev/null +++ b/assets/wua/sprite/npc/SnowPokey/SpriteSheet.xml @@ -0,0 +1,8433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze1.pal.png b/assets/wua/sprite/npc/Snowboarders/Blaze1.pal.png new file mode 100644 index 00000000000..cd377b6726e Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze1.pal.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze1.png b/assets/wua/sprite/npc/Snowboarders/Blaze1.png new file mode 100644 index 00000000000..6d46d3a59f8 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze1.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze10.png b/assets/wua/sprite/npc/Snowboarders/Blaze10.png new file mode 100644 index 00000000000..1d616e122f3 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze10.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze2.png b/assets/wua/sprite/npc/Snowboarders/Blaze2.png new file mode 100644 index 00000000000..e773ef08ba1 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze2.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze3.png b/assets/wua/sprite/npc/Snowboarders/Blaze3.png new file mode 100644 index 00000000000..ec5eb9807a7 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze3.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze4.png b/assets/wua/sprite/npc/Snowboarders/Blaze4.png new file mode 100644 index 00000000000..39541d47e04 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze4.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze5.png b/assets/wua/sprite/npc/Snowboarders/Blaze5.png new file mode 100644 index 00000000000..a1914b8c9ca Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze5.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze6.png b/assets/wua/sprite/npc/Snowboarders/Blaze6.png new file mode 100644 index 00000000000..c13f67551f5 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze6.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze7.png b/assets/wua/sprite/npc/Snowboarders/Blaze7.png new file mode 100644 index 00000000000..2e68cf28bc1 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze7.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze8.png b/assets/wua/sprite/npc/Snowboarders/Blaze8.png new file mode 100644 index 00000000000..822648669c5 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze8.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blaze9.png b/assets/wua/sprite/npc/Snowboarders/Blaze9.png new file mode 100644 index 00000000000..80c203d4f7e Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blaze9.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blizz1.png b/assets/wua/sprite/npc/Snowboarders/Blizz1.png new file mode 100644 index 00000000000..fe3ab0a39e1 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blizz1.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blizz2.png b/assets/wua/sprite/npc/Snowboarders/Blizz2.png new file mode 100644 index 00000000000..cc253b76cea Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blizz2.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blizz3.png b/assets/wua/sprite/npc/Snowboarders/Blizz3.png new file mode 100644 index 00000000000..f7acbfa1c83 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blizz3.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Blizz4.png b/assets/wua/sprite/npc/Snowboarders/Blizz4.png new file mode 100644 index 00000000000..1fafaa5c5ef Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Blizz4.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/King1.png b/assets/wua/sprite/npc/Snowboarders/King1.png new file mode 100644 index 00000000000..6656ad68c20 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/King1.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/King2.png b/assets/wua/sprite/npc/Snowboarders/King2.png new file mode 100644 index 00000000000..6945dad7492 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/King2.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/King3.png b/assets/wua/sprite/npc/Snowboarders/King3.png new file mode 100644 index 00000000000..425eada432f Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/King3.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/King4.png b/assets/wua/sprite/npc/Snowboarders/King4.png new file mode 100644 index 00000000000..3190eb763f6 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/King4.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/King5.png b/assets/wua/sprite/npc/Snowboarders/King5.png new file mode 100644 index 00000000000..00568a239fe Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/King5.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Palette_01.png b/assets/wua/sprite/npc/Snowboarders/Palette_01.png new file mode 100644 index 00000000000..5952d2b4866 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/Palette_02.png b/assets/wua/sprite/npc/Snowboarders/Palette_02.png new file mode 100644 index 00000000000..e11ca6cef73 Binary files /dev/null and b/assets/wua/sprite/npc/Snowboarders/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Snowboarders/SpriteSheet.xml b/assets/wua/sprite/npc/Snowboarders/SpriteSheet.xml new file mode 100644 index 00000000000..54cce20bf05 --- /dev/null +++ b/assets/wua/sprite/npc/Snowboarders/SpriteSheet.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Spark/8bitspark.png b/assets/wua/sprite/npc/Spark/8bitspark.png new file mode 100644 index 00000000000..d5074b318a6 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/8bitspark.png differ diff --git a/assets/wua/sprite/npc/Spark/Bark.png b/assets/wua/sprite/npc/Spark/Bark.png new file mode 100644 index 00000000000..ccd5dfd5ac2 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Bark.png differ diff --git a/assets/wua/sprite/npc/Spark/Happy1.png b/assets/wua/sprite/npc/Spark/Happy1.png new file mode 100644 index 00000000000..d58dc6dd5d6 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Happy1.png differ diff --git a/assets/wua/sprite/npc/Spark/Happy2.png b/assets/wua/sprite/npc/Spark/Happy2.png new file mode 100644 index 00000000000..c094c2b1a4e Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Happy2.png differ diff --git a/assets/wua/sprite/npc/Spark/Happy3.png b/assets/wua/sprite/npc/Spark/Happy3.png new file mode 100644 index 00000000000..90130985d4b Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Happy3.png differ diff --git a/assets/wua/sprite/npc/Spark/MadNB1.png b/assets/wua/sprite/npc/Spark/MadNB1.png new file mode 100644 index 00000000000..bb8d7ec7881 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/MadNB1.png differ diff --git a/assets/wua/sprite/npc/Spark/MadNB2.png b/assets/wua/sprite/npc/Spark/MadNB2.png new file mode 100644 index 00000000000..37bd4e54ad7 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/MadNB2.png differ diff --git a/assets/wua/sprite/npc/Spark/MadNB3.png b/assets/wua/sprite/npc/Spark/MadNB3.png new file mode 100644 index 00000000000..647fa606220 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/MadNB3.png differ diff --git a/assets/wua/sprite/npc/Spark/NeutralNB1.png b/assets/wua/sprite/npc/Spark/NeutralNB1.png new file mode 100644 index 00000000000..2444bd57251 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/NeutralNB1.png differ diff --git a/assets/wua/sprite/npc/Spark/NeutralNB2.png b/assets/wua/sprite/npc/Spark/NeutralNB2.png new file mode 100644 index 00000000000..9ac772ef293 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/NeutralNB2.png differ diff --git a/assets/wua/sprite/npc/Spark/NeutralNB3.png b/assets/wua/sprite/npc/Spark/NeutralNB3.png new file mode 100644 index 00000000000..5d77e4ab1d1 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/NeutralNB3.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_00.png b/assets/wua/sprite/npc/Spark/Palette_00.png new file mode 100644 index 00000000000..537d97eda21 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_01.png b/assets/wua/sprite/npc/Spark/Palette_01.png new file mode 100644 index 00000000000..f8ea569a920 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_02.png b/assets/wua/sprite/npc/Spark/Palette_02.png new file mode 100644 index 00000000000..c1520aec1d0 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_03.png b/assets/wua/sprite/npc/Spark/Palette_03.png new file mode 100644 index 00000000000..5033e467a82 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_04.png b/assets/wua/sprite/npc/Spark/Palette_04.png new file mode 100644 index 00000000000..d99c96bef42 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_05.png b/assets/wua/sprite/npc/Spark/Palette_05.png new file mode 100644 index 00000000000..d1eab1b6d57 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_06.png b/assets/wua/sprite/npc/Spark/Palette_06.png new file mode 100644 index 00000000000..d1eab1b6d57 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_06.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_07.png b/assets/wua/sprite/npc/Spark/Palette_07.png new file mode 100644 index 00000000000..d1eab1b6d57 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_07.png differ diff --git a/assets/wua/sprite/npc/Spark/Palette_inactive.png b/assets/wua/sprite/npc/Spark/Palette_inactive.png new file mode 100644 index 00000000000..a1c5c4693d2 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Palette_inactive.png differ diff --git a/assets/wua/sprite/npc/Spark/Raster_10.png b/assets/wua/sprite/npc/Spark/Raster_10.png new file mode 100644 index 00000000000..56a07d03036 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Spark/Raster_16.png b/assets/wua/sprite/npc/Spark/Raster_16.png new file mode 100644 index 00000000000..aa48965f0fb Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Spark/Raster_17.png b/assets/wua/sprite/npc/Spark/Raster_17.png new file mode 100644 index 00000000000..147b23186d2 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Spark/Raster_18.png b/assets/wua/sprite/npc/Spark/Raster_18.png new file mode 100644 index 00000000000..3d11cf77f89 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Spark/SadNB1.png b/assets/wua/sprite/npc/Spark/SadNB1.png new file mode 100644 index 00000000000..434abbbd6e2 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/SadNB1.png differ diff --git a/assets/wua/sprite/npc/Spark/SadNB2.png b/assets/wua/sprite/npc/Spark/SadNB2.png new file mode 100644 index 00000000000..5cf8a1764ba Binary files /dev/null and b/assets/wua/sprite/npc/Spark/SadNB2.png differ diff --git a/assets/wua/sprite/npc/Spark/SadNB3.png b/assets/wua/sprite/npc/Spark/SadNB3.png new file mode 100644 index 00000000000..8fa21f2006a Binary files /dev/null and b/assets/wua/sprite/npc/Spark/SadNB3.png differ diff --git a/assets/wua/sprite/npc/Spark/SpriteSheet.xml b/assets/wua/sprite/npc/Spark/SpriteSheet.xml new file mode 100644 index 00000000000..274a7fa676e --- /dev/null +++ b/assets/wua/sprite/npc/Spark/SpriteSheet.xml @@ -0,0 +1,2408 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Spark/Tear.pal.png b/assets/wua/sprite/npc/Spark/Tear.pal.png new file mode 100644 index 00000000000..565115e8a6a Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Tear.pal.png differ diff --git a/assets/wua/sprite/npc/Spark/Tear.png b/assets/wua/sprite/npc/Spark/Tear.png new file mode 100644 index 00000000000..565115e8a6a Binary files /dev/null and b/assets/wua/sprite/npc/Spark/Tear.png differ diff --git a/assets/wua/sprite/npc/Spark/book1.png b/assets/wua/sprite/npc/Spark/book1.png new file mode 100644 index 00000000000..df53ea4754e Binary files /dev/null and b/assets/wua/sprite/npc/Spark/book1.png differ diff --git a/assets/wua/sprite/npc/Spark/book2.png b/assets/wua/sprite/npc/Spark/book2.png new file mode 100644 index 00000000000..f419bc315b8 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/book2.png differ diff --git a/assets/wua/sprite/npc/Spark/book3.png b/assets/wua/sprite/npc/Spark/book3.png new file mode 100644 index 00000000000..70a22ff0a65 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/book3.png differ diff --git a/assets/wua/sprite/npc/Spark/book4.pal.png b/assets/wua/sprite/npc/Spark/book4.pal.png new file mode 100644 index 00000000000..57aa677516f Binary files /dev/null and b/assets/wua/sprite/npc/Spark/book4.pal.png differ diff --git a/assets/wua/sprite/npc/Spark/book4.png b/assets/wua/sprite/npc/Spark/book4.png new file mode 100644 index 00000000000..dda4cf3eb46 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/book4.png differ diff --git a/assets/wua/sprite/npc/Spark/charge1.png b/assets/wua/sprite/npc/Spark/charge1.png new file mode 100644 index 00000000000..579a5761648 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/charge1.png differ diff --git a/assets/wua/sprite/npc/Spark/charge2.png b/assets/wua/sprite/npc/Spark/charge2.png new file mode 100644 index 00000000000..89d74e8580d Binary files /dev/null and b/assets/wua/sprite/npc/Spark/charge2.png differ diff --git a/assets/wua/sprite/npc/Spark/mad1.png b/assets/wua/sprite/npc/Spark/mad1.png new file mode 100644 index 00000000000..d366420cc33 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/mad1.png differ diff --git a/assets/wua/sprite/npc/Spark/mad2.png b/assets/wua/sprite/npc/Spark/mad2.png new file mode 100644 index 00000000000..98786060c20 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/mad2.png differ diff --git a/assets/wua/sprite/npc/Spark/mad3.png b/assets/wua/sprite/npc/Spark/mad3.png new file mode 100644 index 00000000000..48c0d1c2bc2 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/mad3.png differ diff --git a/assets/wua/sprite/npc/Spark/neutral1.png b/assets/wua/sprite/npc/Spark/neutral1.png new file mode 100644 index 00000000000..b303add8627 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/neutral1.png differ diff --git a/assets/wua/sprite/npc/Spark/neutral2.png b/assets/wua/sprite/npc/Spark/neutral2.png new file mode 100644 index 00000000000..17d2f57376f Binary files /dev/null and b/assets/wua/sprite/npc/Spark/neutral2.png differ diff --git a/assets/wua/sprite/npc/Spark/neutraltalk.png b/assets/wua/sprite/npc/Spark/neutraltalk.png new file mode 100644 index 00000000000..a72286f4f27 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/neutraltalk.png differ diff --git a/assets/wua/sprite/npc/Spark/novelind.png b/assets/wua/sprite/npc/Spark/novelind.png new file mode 100644 index 00000000000..791c944e924 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/novelind.png differ diff --git a/assets/wua/sprite/npc/Spark/reading1.png b/assets/wua/sprite/npc/Spark/reading1.png new file mode 100644 index 00000000000..ccc4d2ad029 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/reading1.png differ diff --git a/assets/wua/sprite/npc/Spark/reading2.png b/assets/wua/sprite/npc/Spark/reading2.png new file mode 100644 index 00000000000..01b187d555a Binary files /dev/null and b/assets/wua/sprite/npc/Spark/reading2.png differ diff --git a/assets/wua/sprite/npc/Spark/reading3.png b/assets/wua/sprite/npc/Spark/reading3.png new file mode 100644 index 00000000000..2abeba7c7d8 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/reading3.png differ diff --git a/assets/wua/sprite/npc/Spark/reading4.png b/assets/wua/sprite/npc/Spark/reading4.png new file mode 100644 index 00000000000..36deec72aff Binary files /dev/null and b/assets/wua/sprite/npc/Spark/reading4.png differ diff --git a/assets/wua/sprite/npc/Spark/reading5.png b/assets/wua/sprite/npc/Spark/reading5.png new file mode 100644 index 00000000000..a61d91ee524 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/reading5.png differ diff --git a/assets/wua/sprite/npc/Spark/reading6.png b/assets/wua/sprite/npc/Spark/reading6.png new file mode 100644 index 00000000000..7f50db417a1 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/reading6.png differ diff --git a/assets/wua/sprite/npc/Spark/sad1.png b/assets/wua/sprite/npc/Spark/sad1.png new file mode 100644 index 00000000000..647b8b0ac0b Binary files /dev/null and b/assets/wua/sprite/npc/Spark/sad1.png differ diff --git a/assets/wua/sprite/npc/Spark/sad2.png b/assets/wua/sprite/npc/Spark/sad2.png new file mode 100644 index 00000000000..3e93a5779ae Binary files /dev/null and b/assets/wua/sprite/npc/Spark/sad2.png differ diff --git a/assets/wua/sprite/npc/Spark/sad3.png b/assets/wua/sprite/npc/Spark/sad3.png new file mode 100644 index 00000000000..f1d21fca551 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/sad3.png differ diff --git a/assets/wua/sprite/npc/Spark/sleep1.png b/assets/wua/sprite/npc/Spark/sleep1.png new file mode 100644 index 00000000000..6e54433a888 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/sleep1.png differ diff --git a/assets/wua/sprite/npc/Spark/sleep2.png b/assets/wua/sprite/npc/Spark/sleep2.png new file mode 100644 index 00000000000..ba61393e3fb Binary files /dev/null and b/assets/wua/sprite/npc/Spark/sleep2.png differ diff --git a/assets/wua/sprite/npc/Spark/still.png b/assets/wua/sprite/npc/Spark/still.png new file mode 100644 index 00000000000..b9614a06053 Binary files /dev/null and b/assets/wua/sprite/npc/Spark/still.png differ diff --git a/assets/wua/sprite/npc/Spark/talk1.png b/assets/wua/sprite/npc/Spark/talk1.png new file mode 100644 index 00000000000..ee30e48f8bc Binary files /dev/null and b/assets/wua/sprite/npc/Spark/talk1.png differ diff --git a/assets/wua/sprite/npc/Spark/talk2.png b/assets/wua/sprite/npc/Spark/talk2.png new file mode 100644 index 00000000000..c939eabd6ac Binary files /dev/null and b/assets/wua/sprite/npc/Spark/talk2.png differ diff --git a/assets/wua/sprite/npc/Speaker/Palette_00.png b/assets/wua/sprite/npc/Speaker/Palette_00.png new file mode 100644 index 00000000000..ab5656841b0 Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_01.png b/assets/wua/sprite/npc/Speaker/Raster_01.png new file mode 100644 index 00000000000..880551cb81b Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_02.png b/assets/wua/sprite/npc/Speaker/Raster_02.png new file mode 100644 index 00000000000..4c0803609c0 Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_03.png b/assets/wua/sprite/npc/Speaker/Raster_03.png new file mode 100644 index 00000000000..318a64038c0 Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_04.png b/assets/wua/sprite/npc/Speaker/Raster_04.png new file mode 100644 index 00000000000..e34802d5d07 Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_05.png b/assets/wua/sprite/npc/Speaker/Raster_05.png new file mode 100644 index 00000000000..51df92a2190 Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_06.png b/assets/wua/sprite/npc/Speaker/Raster_06.png new file mode 100644 index 00000000000..40427d8af92 Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_07.png b/assets/wua/sprite/npc/Speaker/Raster_07.png new file mode 100644 index 00000000000..2680f194e9d Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_08.png b/assets/wua/sprite/npc/Speaker/Raster_08.png new file mode 100644 index 00000000000..7016df79ff1 Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Speaker/Raster_09.png b/assets/wua/sprite/npc/Speaker/Raster_09.png new file mode 100644 index 00000000000..9225329120f Binary files /dev/null and b/assets/wua/sprite/npc/Speaker/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Speaker/SpriteSheet.xml b/assets/wua/sprite/npc/Speaker/SpriteSheet.xml new file mode 100644 index 00000000000..2eb169f18f8 --- /dev/null +++ b/assets/wua/sprite/npc/Speaker/SpriteSheet.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Spike/Palette_00.png b/assets/wua/sprite/npc/Spike/Palette_00.png new file mode 100644 index 00000000000..3276f6907f5 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_01.png b/assets/wua/sprite/npc/Spike/Palette_01.png new file mode 100644 index 00000000000..82d0792f5b6 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_02.png b/assets/wua/sprite/npc/Spike/Palette_02.png new file mode 100644 index 00000000000..5f016c8e860 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_03.png b/assets/wua/sprite/npc/Spike/Palette_03.png new file mode 100644 index 00000000000..0231f219fc2 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_04.png b/assets/wua/sprite/npc/Spike/Palette_04.png new file mode 100644 index 00000000000..9b0d8689c66 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_04.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_05.png b/assets/wua/sprite/npc/Spike/Palette_05.png new file mode 100644 index 00000000000..89168eb2757 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_05.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_06.png b/assets/wua/sprite/npc/Spike/Palette_06.png new file mode 100644 index 00000000000..85f84a0ba03 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_06.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_07.png b/assets/wua/sprite/npc/Spike/Palette_07.png new file mode 100644 index 00000000000..42b3e314e7f Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_07.png differ diff --git a/assets/wua/sprite/npc/Spike/Palette_08.png b/assets/wua/sprite/npc/Spike/Palette_08.png new file mode 100644 index 00000000000..72be7e98032 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Palette_08.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_00.png b/assets/wua/sprite/npc/Spike/Raster_00.png new file mode 100644 index 00000000000..a8c031a76e9 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_01.png b/assets/wua/sprite/npc/Spike/Raster_01.png new file mode 100644 index 00000000000..12aab5d825a Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_02.png b/assets/wua/sprite/npc/Spike/Raster_02.png new file mode 100644 index 00000000000..9a94ccb1a34 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_03.png b/assets/wua/sprite/npc/Spike/Raster_03.png new file mode 100644 index 00000000000..6f6c0a857b9 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_04.png b/assets/wua/sprite/npc/Spike/Raster_04.png new file mode 100644 index 00000000000..2d3260cd632 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_05.png b/assets/wua/sprite/npc/Spike/Raster_05.png new file mode 100644 index 00000000000..87c00a26f3e Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_06.png b/assets/wua/sprite/npc/Spike/Raster_06.png new file mode 100644 index 00000000000..79623ea2bdb Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_07.png b/assets/wua/sprite/npc/Spike/Raster_07.png new file mode 100644 index 00000000000..79623ea2bdb Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_08.png b/assets/wua/sprite/npc/Spike/Raster_08.png new file mode 100644 index 00000000000..b109c9aca20 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_09.png b/assets/wua/sprite/npc/Spike/Raster_09.png new file mode 100644 index 00000000000..23fa6ac2065 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_0A.png b/assets/wua/sprite/npc/Spike/Raster_0A.png new file mode 100644 index 00000000000..6d2a42035d6 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_0B.png b/assets/wua/sprite/npc/Spike/Raster_0B.png new file mode 100644 index 00000000000..9d8c956a700 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_0C.png b/assets/wua/sprite/npc/Spike/Raster_0C.png new file mode 100644 index 00000000000..b1f1744fd52 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_0D.png b/assets/wua/sprite/npc/Spike/Raster_0D.png new file mode 100644 index 00000000000..bd11001f6d2 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_0E.png b/assets/wua/sprite/npc/Spike/Raster_0E.png new file mode 100644 index 00000000000..4dd25da7029 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_0F.png b/assets/wua/sprite/npc/Spike/Raster_0F.png new file mode 100644 index 00000000000..73aa7e2cd2d Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_10.png b/assets/wua/sprite/npc/Spike/Raster_10.png new file mode 100644 index 00000000000..476385f3f5a Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_11.png b/assets/wua/sprite/npc/Spike/Raster_11.png new file mode 100644 index 00000000000..7c3d1531d31 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_12.png b/assets/wua/sprite/npc/Spike/Raster_12.png new file mode 100644 index 00000000000..c38ce0c29c4 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_13.png b/assets/wua/sprite/npc/Spike/Raster_13.png new file mode 100644 index 00000000000..beb039f62e6 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_14.png b/assets/wua/sprite/npc/Spike/Raster_14.png new file mode 100644 index 00000000000..d7818990a75 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_15.png b/assets/wua/sprite/npc/Spike/Raster_15.png new file mode 100644 index 00000000000..767c4298f44 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_16.png b/assets/wua/sprite/npc/Spike/Raster_16.png new file mode 100644 index 00000000000..ba2aa87bf30 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_17.png b/assets/wua/sprite/npc/Spike/Raster_17.png new file mode 100644 index 00000000000..b902b11cea6 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_18.png b/assets/wua/sprite/npc/Spike/Raster_18.png new file mode 100644 index 00000000000..859c02ae01b Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_19.png b/assets/wua/sprite/npc/Spike/Raster_19.png new file mode 100644 index 00000000000..40d642ab9d0 Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Spike/Raster_1A.png b/assets/wua/sprite/npc/Spike/Raster_1A.png new file mode 100644 index 00000000000..11a239c043c Binary files /dev/null and b/assets/wua/sprite/npc/Spike/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/Spike/SpriteSheet.xml b/assets/wua/sprite/npc/Spike/SpriteSheet.xml new file mode 100644 index 00000000000..24a14ae6867 --- /dev/null +++ b/assets/wua/sprite/npc/Spike/SpriteSheet.xml @@ -0,0 +1,629 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/StarKids1/Bark.png b/assets/wua/sprite/npc/StarKids1/Bark.png new file mode 100644 index 00000000000..9273d8e7dc2 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Bark.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Marstar1.png b/assets/wua/sprite/npc/StarKids1/Marstar1.png new file mode 100644 index 00000000000..2f46c466261 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Marstar1.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Marstar2.png b/assets/wua/sprite/npc/StarKids1/Marstar2.png new file mode 100644 index 00000000000..d3f9ab0aab3 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Marstar2.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Marstar3.png b/assets/wua/sprite/npc/StarKids1/Marstar3.png new file mode 100644 index 00000000000..50cc13db27a Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Marstar3.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Marstar4.png b/assets/wua/sprite/npc/StarKids1/Marstar4.png new file mode 100644 index 00000000000..054b508a955 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Marstar4.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Marstar5.png b/assets/wua/sprite/npc/StarKids1/Marstar5.png new file mode 100644 index 00000000000..48a40f3fd10 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Marstar5.png differ diff --git a/assets/wua/sprite/npc/StarKids1/MarstarN1.png b/assets/wua/sprite/npc/StarKids1/MarstarN1.png new file mode 100644 index 00000000000..143d28e7933 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/MarstarN1.png differ diff --git a/assets/wua/sprite/npc/StarKids1/MarstarN2.png b/assets/wua/sprite/npc/StarKids1/MarstarN2.png new file mode 100644 index 00000000000..9a10e6763c0 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/MarstarN2.png differ diff --git a/assets/wua/sprite/npc/StarKids1/MarstarN3.png b/assets/wua/sprite/npc/StarKids1/MarstarN3.png new file mode 100644 index 00000000000..c823b99219c Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/MarstarN3.png differ diff --git a/assets/wua/sprite/npc/StarKids1/MarstarS1.png b/assets/wua/sprite/npc/StarKids1/MarstarS1.png new file mode 100644 index 00000000000..f9987a0bc09 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/MarstarS1.png differ diff --git a/assets/wua/sprite/npc/StarKids1/MarstarS2.png b/assets/wua/sprite/npc/StarKids1/MarstarS2.png new file mode 100644 index 00000000000..cf83f0db82f Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/MarstarS2.png differ diff --git a/assets/wua/sprite/npc/StarKids1/MarstarS3.png b/assets/wua/sprite/npc/StarKids1/MarstarS3.png new file mode 100644 index 00000000000..337ab287077 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/MarstarS3.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Neptar1.png b/assets/wua/sprite/npc/StarKids1/Neptar1.png new file mode 100644 index 00000000000..f79038bd0d0 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Neptar1.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Neptar2.png b/assets/wua/sprite/npc/StarKids1/Neptar2.png new file mode 100644 index 00000000000..7812455b2fe Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Neptar2.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Neptar3.png b/assets/wua/sprite/npc/StarKids1/Neptar3.png new file mode 100644 index 00000000000..338e346ded1 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Neptar3.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Neptar4.png b/assets/wua/sprite/npc/StarKids1/Neptar4.png new file mode 100644 index 00000000000..2a4e849af15 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Neptar4.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Palette_00.png b/assets/wua/sprite/npc/StarKids1/Palette_00.png new file mode 100644 index 00000000000..d797e13eca6 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Palette_00.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Palette_01.png b/assets/wua/sprite/npc/StarKids1/Palette_01.png new file mode 100644 index 00000000000..07c2e3837ed Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Palette_01.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Palette_02.png b/assets/wua/sprite/npc/StarKids1/Palette_02.png new file mode 100644 index 00000000000..f156a9d2f68 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Palette_02.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Palette_03.png b/assets/wua/sprite/npc/StarKids1/Palette_03.png new file mode 100644 index 00000000000..ccd5dfd5ac2 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Palette_03.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Palette_04.png b/assets/wua/sprite/npc/StarKids1/Palette_04.png new file mode 100644 index 00000000000..0d2c85e9ca4 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Palette_04.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Pile of Crap.png b/assets/wua/sprite/npc/StarKids1/Pile of Crap.png new file mode 100644 index 00000000000..f1ee8d5f029 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Pile of Crap.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Soular1.png b/assets/wua/sprite/npc/StarKids1/Soular1.png new file mode 100644 index 00000000000..1469ca65f41 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Soular1.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Soular2.png b/assets/wua/sprite/npc/StarKids1/Soular2.png new file mode 100644 index 00000000000..19180df361e Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Soular2.png differ diff --git a/assets/wua/sprite/npc/StarKids1/Soular3.png b/assets/wua/sprite/npc/StarKids1/Soular3.png new file mode 100644 index 00000000000..f1200fb056e Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Soular3.png differ diff --git a/assets/wua/sprite/npc/StarKids1/SpriteSheet.xml b/assets/wua/sprite/npc/StarKids1/SpriteSheet.xml new file mode 100644 index 00000000000..0fe85820fbb --- /dev/null +++ b/assets/wua/sprite/npc/StarKids1/SpriteSheet.xml @@ -0,0 +1,1257 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/StarKids1/Tear.png b/assets/wua/sprite/npc/StarKids1/Tear.png new file mode 100644 index 00000000000..c33af59eeeb Binary files /dev/null and b/assets/wua/sprite/npc/StarKids1/Tear.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Grass.png b/assets/wua/sprite/npc/StarKids2/Grass.png new file mode 100644 index 00000000000..d77cdc6c8e2 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Grass.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Nessta1.png b/assets/wua/sprite/npc/StarKids2/Nessta1.png new file mode 100644 index 00000000000..362f44fa481 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Nessta1.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Nessta2.png b/assets/wua/sprite/npc/StarKids2/Nessta2.png new file mode 100644 index 00000000000..11acc34a877 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Nessta2.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Nessta3.png b/assets/wua/sprite/npc/StarKids2/Nessta3.png new file mode 100644 index 00000000000..29a8409049e Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Nessta3.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Nessta4.png b/assets/wua/sprite/npc/StarKids2/Nessta4.png new file mode 100644 index 00000000000..4941f8889f3 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Nessta4.png differ diff --git a/assets/wua/sprite/npc/StarKids2/NesstaH1.png b/assets/wua/sprite/npc/StarKids2/NesstaH1.png new file mode 100644 index 00000000000..492dea04bb7 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/NesstaH1.png differ diff --git a/assets/wua/sprite/npc/StarKids2/NesstaH2.png b/assets/wua/sprite/npc/StarKids2/NesstaH2.png new file mode 100644 index 00000000000..5059906910b Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/NesstaH2.png differ diff --git a/assets/wua/sprite/npc/StarKids2/NesstaH3.png b/assets/wua/sprite/npc/StarKids2/NesstaH3.png new file mode 100644 index 00000000000..fe2d18495f6 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/NesstaH3.png differ diff --git a/assets/wua/sprite/npc/StarKids2/NesstaS1.png b/assets/wua/sprite/npc/StarKids2/NesstaS1.png new file mode 100644 index 00000000000..ab8fc9820e5 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/NesstaS1.png differ diff --git a/assets/wua/sprite/npc/StarKids2/NesstaS2.png b/assets/wua/sprite/npc/StarKids2/NesstaS2.png new file mode 100644 index 00000000000..705522815e3 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/NesstaS2.png differ diff --git a/assets/wua/sprite/npc/StarKids2/NesstaS3.png b/assets/wua/sprite/npc/StarKids2/NesstaS3.png new file mode 100644 index 00000000000..485b46f5519 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/NesstaS3.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Palette_00.png b/assets/wua/sprite/npc/StarKids2/Palette_00.png new file mode 100644 index 00000000000..033cc35d642 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Palette_00.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Palette_01.png b/assets/wua/sprite/npc/StarKids2/Palette_01.png new file mode 100644 index 00000000000..1167a1c1355 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Palette_01.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Palette_02.png b/assets/wua/sprite/npc/StarKids2/Palette_02.png new file mode 100644 index 00000000000..995ab0cf881 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Palette_02.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Palette_03.png b/assets/wua/sprite/npc/StarKids2/Palette_03.png new file mode 100644 index 00000000000..c7d11e74376 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Palette_03.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Palette_04.png b/assets/wua/sprite/npc/StarKids2/Palette_04.png new file mode 100644 index 00000000000..818190c1235 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Palette_04.png differ diff --git a/assets/wua/sprite/npc/StarKids2/SpriteSheet.xml b/assets/wua/sprite/npc/StarKids2/SpriteSheet.xml new file mode 100644 index 00000000000..1d62e195ecb --- /dev/null +++ b/assets/wua/sprite/npc/StarKids2/SpriteSheet.xml @@ -0,0 +1,1498 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/StarKids2/Starlu1.png b/assets/wua/sprite/npc/StarKids2/Starlu1.png new file mode 100644 index 00000000000..0577418d056 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starlu1.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Starlu2.png b/assets/wua/sprite/npc/StarKids2/Starlu2.png new file mode 100644 index 00000000000..c7eed0d34db Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starlu2.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Starlu3.png b/assets/wua/sprite/npc/StarKids2/Starlu3.png new file mode 100644 index 00000000000..70b8564545c Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starlu3.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Starlu4.png b/assets/wua/sprite/npc/StarKids2/Starlu4.png new file mode 100644 index 00000000000..ec2d7281981 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starlu4.png differ diff --git a/assets/wua/sprite/npc/StarKids2/StarluH1.png b/assets/wua/sprite/npc/StarKids2/StarluH1.png new file mode 100644 index 00000000000..d6581de0b32 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/StarluH1.png differ diff --git a/assets/wua/sprite/npc/StarKids2/StarluH2.png b/assets/wua/sprite/npc/StarKids2/StarluH2.png new file mode 100644 index 00000000000..7781a906f44 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/StarluH2.png differ diff --git a/assets/wua/sprite/npc/StarKids2/StarluH3.png b/assets/wua/sprite/npc/StarKids2/StarluH3.png new file mode 100644 index 00000000000..85058e6fcf0 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/StarluH3.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Starmer1.png b/assets/wua/sprite/npc/StarKids2/Starmer1.png new file mode 100644 index 00000000000..57106493eb1 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starmer1.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Starmer2.png b/assets/wua/sprite/npc/StarKids2/Starmer2.png new file mode 100644 index 00000000000..6fdbb7c9c55 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starmer2.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Starmer3.png b/assets/wua/sprite/npc/StarKids2/Starmer3.png new file mode 100644 index 00000000000..790d9a965fa Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starmer3.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Starmer4.png b/assets/wua/sprite/npc/StarKids2/Starmer4.png new file mode 100644 index 00000000000..8c2c17e99ad Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Starmer4.png differ diff --git a/assets/wua/sprite/npc/StarKids2/StarmerS1.png b/assets/wua/sprite/npc/StarKids2/StarmerS1.png new file mode 100644 index 00000000000..daefd5f8655 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/StarmerS1.png differ diff --git a/assets/wua/sprite/npc/StarKids2/StarmerS2.png b/assets/wua/sprite/npc/StarKids2/StarmerS2.png new file mode 100644 index 00000000000..d2f65a0afa1 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/StarmerS2.png differ diff --git a/assets/wua/sprite/npc/StarKids2/StarmerS3.png b/assets/wua/sprite/npc/StarKids2/StarmerS3.png new file mode 100644 index 00000000000..5341f9fdf19 Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/StarmerS3.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Stick.png b/assets/wua/sprite/npc/StarKids2/Stick.png new file mode 100644 index 00000000000..7b0320f9b9a Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Stick.png differ diff --git a/assets/wua/sprite/npc/StarKids2/Weed.png b/assets/wua/sprite/npc/StarKids2/Weed.png new file mode 100644 index 00000000000..13771c0d93a Binary files /dev/null and b/assets/wua/sprite/npc/StarKids2/Weed.png differ diff --git a/assets/wua/sprite/npc/Stargence/Palette_00.png b/assets/wua/sprite/npc/Stargence/Palette_00.png new file mode 100644 index 00000000000..ae2cb84ee43 Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Stargence/Raster_01.png b/assets/wua/sprite/npc/Stargence/Raster_01.png new file mode 100644 index 00000000000..83dee923d03 Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Stargence/Raster_02.png b/assets/wua/sprite/npc/Stargence/Raster_02.png new file mode 100644 index 00000000000..9cc7a329c14 Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Stargence/Raster_03.png b/assets/wua/sprite/npc/Stargence/Raster_03.png new file mode 100644 index 00000000000..23fd835915f Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Stargence/Raster_04.png b/assets/wua/sprite/npc/Stargence/Raster_04.png new file mode 100644 index 00000000000..c836065a8ad Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Stargence/Raster_05.png b/assets/wua/sprite/npc/Stargence/Raster_05.png new file mode 100644 index 00000000000..701166d96fa Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Stargence/Raster_06.png b/assets/wua/sprite/npc/Stargence/Raster_06.png new file mode 100644 index 00000000000..f82f4e9dcd8 Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Stargence/Raster_07.png b/assets/wua/sprite/npc/Stargence/Raster_07.png new file mode 100644 index 00000000000..a6a4d3267a9 Binary files /dev/null and b/assets/wua/sprite/npc/Stargence/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Stargence/SpriteSheet.xml b/assets/wua/sprite/npc/Stargence/SpriteSheet.xml new file mode 100644 index 00000000000..bd64f8697b8 --- /dev/null +++ b/assets/wua/sprite/npc/Stargence/SpriteSheet.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Starity/Palette_00.png b/assets/wua/sprite/npc/Starity/Palette_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Starity/Palette_01.png b/assets/wua/sprite/npc/Starity/Palette_01.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Starity/Palette_02.png b/assets/wua/sprite/npc/Starity/Palette_02.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Starity/Palette_03.png b/assets/wua/sprite/npc/Starity/Palette_03.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_00.png b/assets/wua/sprite/npc/Starity/Raster_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_01.png b/assets/wua/sprite/npc/Starity/Raster_01.png new file mode 100644 index 00000000000..d7019f4a54b Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_02.png b/assets/wua/sprite/npc/Starity/Raster_02.png new file mode 100644 index 00000000000..d3b714492e6 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_03.png b/assets/wua/sprite/npc/Starity/Raster_03.png new file mode 100644 index 00000000000..b3e9c74cb4d Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_04.png b/assets/wua/sprite/npc/Starity/Raster_04.png new file mode 100644 index 00000000000..710790b0de3 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_05.png b/assets/wua/sprite/npc/Starity/Raster_05.png new file mode 100644 index 00000000000..cf056cd913b Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_06.png b/assets/wua/sprite/npc/Starity/Raster_06.png new file mode 100644 index 00000000000..bd7722bbf98 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_07.png b/assets/wua/sprite/npc/Starity/Raster_07.png new file mode 100644 index 00000000000..4fce7b0d31d Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_08.png b/assets/wua/sprite/npc/Starity/Raster_08.png new file mode 100644 index 00000000000..14998de68d9 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Starity/Raster_09.png b/assets/wua/sprite/npc/Starity/Raster_09.png new file mode 100644 index 00000000000..d4552f3dd13 Binary files /dev/null and b/assets/wua/sprite/npc/Starity/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Starity/SpriteSheet.xml b/assets/wua/sprite/npc/Starity/SpriteSheet.xml new file mode 100644 index 00000000000..bd225ce7fa1 --- /dev/null +++ b/assets/wua/sprite/npc/Starity/SpriteSheet.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/wua/sprite/npc/Tolielupext/LeftLeafExt.png b/assets/wua/sprite/npc/Tolielupext/LeftLeafExt.png new file mode 100644 index 00000000000..b5415e6add3 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/LeftLeafExt.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Palette_00.png b/assets/wua/sprite/npc/Tolielupext/Palette_00.png new file mode 100644 index 00000000000..8350bf9e2dc Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_00.png b/assets/wua/sprite/npc/Tolielupext/Raster_00.png new file mode 100644 index 00000000000..fc02a68a577 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_01.png b/assets/wua/sprite/npc/Tolielupext/Raster_01.png new file mode 100644 index 00000000000..19cbb26cf71 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_02.png b/assets/wua/sprite/npc/Tolielupext/Raster_02.png new file mode 100644 index 00000000000..b7ae13b327f Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_03.png b/assets/wua/sprite/npc/Tolielupext/Raster_03.png new file mode 100644 index 00000000000..b18bf670fdf Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_04.png b/assets/wua/sprite/npc/Tolielupext/Raster_04.png new file mode 100644 index 00000000000..1282e5529b0 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_05.png b/assets/wua/sprite/npc/Tolielupext/Raster_05.png new file mode 100644 index 00000000000..a25ac3d3b43 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_06.png b/assets/wua/sprite/npc/Tolielupext/Raster_06.png new file mode 100644 index 00000000000..0d46ce354ee Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_07.png b/assets/wua/sprite/npc/Tolielupext/Raster_07.png new file mode 100644 index 00000000000..addaaca55cf Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_08.png b/assets/wua/sprite/npc/Tolielupext/Raster_08.png new file mode 100644 index 00000000000..1fbdd5095b4 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_09.png b/assets/wua/sprite/npc/Tolielupext/Raster_09.png new file mode 100644 index 00000000000..1ea382163f9 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_0A.png b/assets/wua/sprite/npc/Tolielupext/Raster_0A.png new file mode 100644 index 00000000000..1bc3d2eddc7 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_0B.png b/assets/wua/sprite/npc/Tolielupext/Raster_0B.png new file mode 100644 index 00000000000..6d5b4644f18 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_0C.png b/assets/wua/sprite/npc/Tolielupext/Raster_0C.png new file mode 100644 index 00000000000..03a477ef744 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_0D.png b/assets/wua/sprite/npc/Tolielupext/Raster_0D.png new file mode 100644 index 00000000000..8bf7890085f Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_0E.png b/assets/wua/sprite/npc/Tolielupext/Raster_0E.png new file mode 100644 index 00000000000..2d82c48ac97 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_0F.png b/assets/wua/sprite/npc/Tolielupext/Raster_0F.png new file mode 100644 index 00000000000..297290c4b79 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_10.png b/assets/wua/sprite/npc/Tolielupext/Raster_10.png new file mode 100644 index 00000000000..dca3b2cbca7 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_11.png b/assets/wua/sprite/npc/Tolielupext/Raster_11.png new file mode 100644 index 00000000000..763f2398d4e Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_12.png b/assets/wua/sprite/npc/Tolielupext/Raster_12.png new file mode 100644 index 00000000000..2fd3ed54ea4 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_13.png b/assets/wua/sprite/npc/Tolielupext/Raster_13.png new file mode 100644 index 00000000000..ecf7ae7b0b4 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_14.png b/assets/wua/sprite/npc/Tolielupext/Raster_14.png new file mode 100644 index 00000000000..6ae80e8a2c2 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_15.png b/assets/wua/sprite/npc/Tolielupext/Raster_15.png new file mode 100644 index 00000000000..ee686d1be85 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_16.png b/assets/wua/sprite/npc/Tolielupext/Raster_16.png new file mode 100644 index 00000000000..f385071b31d Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_17.png b/assets/wua/sprite/npc/Tolielupext/Raster_17.png new file mode 100644 index 00000000000..297290c4b79 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_18.png b/assets/wua/sprite/npc/Tolielupext/Raster_18.png new file mode 100644 index 00000000000..dca3b2cbca7 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_18.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_19.png b/assets/wua/sprite/npc/Tolielupext/Raster_19.png new file mode 100644 index 00000000000..586b7ecf866 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_19.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/Raster_1A.png b/assets/wua/sprite/npc/Tolielupext/Raster_1A.png new file mode 100644 index 00000000000..2a866c1b543 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/SpriteSheet.xml b/assets/wua/sprite/npc/Tolielupext/SpriteSheet.xml new file mode 100644 index 00000000000..fd8411777a4 --- /dev/null +++ b/assets/wua/sprite/npc/Tolielupext/SpriteSheet.xml @@ -0,0 +1,551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Tolielupext/panicEyeL1.png b/assets/wua/sprite/npc/Tolielupext/panicEyeL1.png new file mode 100644 index 00000000000..8c6b0ad6ee9 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/panicEyeL1.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/panicEyeL2.png b/assets/wua/sprite/npc/Tolielupext/panicEyeL2.png new file mode 100644 index 00000000000..784d70cdd31 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/panicEyeL2.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/panicEyeR1.png b/assets/wua/sprite/npc/Tolielupext/panicEyeR1.png new file mode 100644 index 00000000000..84fbc8e0cd1 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/panicEyeR1.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/panicEyeR2.png b/assets/wua/sprite/npc/Tolielupext/panicEyeR2.png new file mode 100644 index 00000000000..c7459953874 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/panicEyeR2.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/panicmouth1.png b/assets/wua/sprite/npc/Tolielupext/panicmouth1.png new file mode 100644 index 00000000000..27ec7437989 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/panicmouth1.png differ diff --git a/assets/wua/sprite/npc/Tolielupext/rightLeafExt.png b/assets/wua/sprite/npc/Tolielupext/rightLeafExt.png new file mode 100644 index 00000000000..99407478c11 Binary files /dev/null and b/assets/wua/sprite/npc/Tolielupext/rightLeafExt.png differ diff --git a/assets/wua/sprite/npc/Trinit/Palette_00.png b/assets/wua/sprite/npc/Trinit/Palette_00.png new file mode 100644 index 00000000000..01c9948b5da Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_00.png b/assets/wua/sprite/npc/Trinit/Raster_00.png new file mode 100644 index 00000000000..1bb3561d3d3 Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_01.png b/assets/wua/sprite/npc/Trinit/Raster_01.png new file mode 100644 index 00000000000..94a18393804 Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_02.png b/assets/wua/sprite/npc/Trinit/Raster_02.png new file mode 100644 index 00000000000..0d974ec6442 Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_03.png b/assets/wua/sprite/npc/Trinit/Raster_03.png new file mode 100644 index 00000000000..cb86d87475f Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_04.png b/assets/wua/sprite/npc/Trinit/Raster_04.png new file mode 100644 index 00000000000..1765c23ddf0 Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_05.png b/assets/wua/sprite/npc/Trinit/Raster_05.png new file mode 100644 index 00000000000..60c0d868051 Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_06.png b/assets/wua/sprite/npc/Trinit/Raster_06.png new file mode 100644 index 00000000000..ae18bb86994 Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_07.png b/assets/wua/sprite/npc/Trinit/Raster_07.png new file mode 100644 index 00000000000..830f88439cd Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Trinit/Raster_08.png b/assets/wua/sprite/npc/Trinit/Raster_08.png new file mode 100644 index 00000000000..1e67b41cb48 Binary files /dev/null and b/assets/wua/sprite/npc/Trinit/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Trinit/SpriteSheet.xml b/assets/wua/sprite/npc/Trinit/SpriteSheet.xml new file mode 100644 index 00000000000..55147bef91a --- /dev/null +++ b/assets/wua/sprite/npc/Trinit/SpriteSheet.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Uproot/Palette_00.png b/assets/wua/sprite/npc/Uproot/Palette_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Uproot/Palette_01.png b/assets/wua/sprite/npc/Uproot/Palette_01.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Uproot/Palette_02.png b/assets/wua/sprite/npc/Uproot/Palette_02.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Uproot/Palette_03.png b/assets/wua/sprite/npc/Uproot/Palette_03.png new file mode 100644 index 00000000000..f7e09e3fdb1 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Uproot/Palettes/Default.png b/assets/wua/sprite/npc/Uproot/Palettes/Default.png new file mode 100644 index 00000000000..f630d936a61 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palettes/Default.png differ diff --git a/assets/wua/sprite/npc/Uproot/Palettes/Palette_01.png b/assets/wua/sprite/npc/Uproot/Palettes/Palette_01.png new file mode 100644 index 00000000000..2378442f14e Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palettes/Palette_01.png differ diff --git a/assets/wua/sprite/npc/Uproot/Palettes/Palette_02.png b/assets/wua/sprite/npc/Uproot/Palettes/Palette_02.png new file mode 100644 index 00000000000..8cf241006c8 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palettes/Palette_02.png differ diff --git a/assets/wua/sprite/npc/Uproot/Palettes/Palette_03.png b/assets/wua/sprite/npc/Uproot/Palettes/Palette_03.png new file mode 100644 index 00000000000..7b937705285 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Palettes/Palette_03.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_00.png b/assets/wua/sprite/npc/Uproot/Raster_00.png new file mode 100644 index 00000000000..75369bdf05c Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_01.png b/assets/wua/sprite/npc/Uproot/Raster_01.png new file mode 100644 index 00000000000..d7019f4a54b Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_02.png b/assets/wua/sprite/npc/Uproot/Raster_02.png new file mode 100644 index 00000000000..d3b714492e6 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_03.png b/assets/wua/sprite/npc/Uproot/Raster_03.png new file mode 100644 index 00000000000..b3e9c74cb4d Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_04.png b/assets/wua/sprite/npc/Uproot/Raster_04.png new file mode 100644 index 00000000000..710790b0de3 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_05.png b/assets/wua/sprite/npc/Uproot/Raster_05.png new file mode 100644 index 00000000000..cf056cd913b Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_06.png b/assets/wua/sprite/npc/Uproot/Raster_06.png new file mode 100644 index 00000000000..bd7722bbf98 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_07.png b/assets/wua/sprite/npc/Uproot/Raster_07.png new file mode 100644 index 00000000000..4fce7b0d31d Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_08.png b/assets/wua/sprite/npc/Uproot/Raster_08.png new file mode 100644 index 00000000000..14998de68d9 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Uproot/Raster_09.png b/assets/wua/sprite/npc/Uproot/Raster_09.png new file mode 100644 index 00000000000..d4552f3dd13 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_00.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_00.png new file mode 100644 index 00000000000..f630d936a61 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_01.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_01.png new file mode 100644 index 00000000000..441225d728a Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_02.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_02.png new file mode 100644 index 00000000000..f630d936a61 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_03.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_03.png new file mode 100644 index 00000000000..6f46fe058ae Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_04.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_04.png new file mode 100644 index 00000000000..3259959bbfc Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_05.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_05.png new file mode 100644 index 00000000000..d9bc14cb15b Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_06.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_06.png new file mode 100644 index 00000000000..d9d38090c4c Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_07.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_07.png new file mode 100644 index 00000000000..0e347edbcab Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_08.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_08.png new file mode 100644 index 00000000000..6219928620d Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_09.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_09.png new file mode 100644 index 00000000000..fe9d0303416 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_0A.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0A.png new file mode 100644 index 00000000000..be92967c592 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_0B.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0B.png new file mode 100644 index 00000000000..aa1be7393cf Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_0C.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0C.png new file mode 100644 index 00000000000..456843ba278 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_0D.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0D.png new file mode 100644 index 00000000000..97399c2d901 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_0E.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0E.png new file mode 100644 index 00000000000..7055e06b088 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_0F.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0F.png new file mode 100644 index 00000000000..216ec32854c Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_10.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_10.png new file mode 100644 index 00000000000..6e739a8f5bc Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_11.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_11.png new file mode 100644 index 00000000000..53998f6400e Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_12.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_12.png new file mode 100644 index 00000000000..69b9d62b436 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_13.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_13.png new file mode 100644 index 00000000000..a8399b75000 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_14.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_14.png new file mode 100644 index 00000000000..76d85062be1 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_15.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_15.png new file mode 100644 index 00000000000..4f87a1ab57f Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_155.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_155.png new file mode 100644 index 00000000000..954edba2d81 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_155.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_16.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_16.png new file mode 100644 index 00000000000..8bc00ddfa5b Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_16.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_166.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_166.png new file mode 100644 index 00000000000..4fd3f8bfbb2 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_166.png differ diff --git a/assets/wua/sprite/npc/Uproot/Rasters/Raster_17.png b/assets/wua/sprite/npc/Uproot/Rasters/Raster_17.png new file mode 100644 index 00000000000..7bbe5c9a5f2 Binary files /dev/null and b/assets/wua/sprite/npc/Uproot/Rasters/Raster_17.png differ diff --git a/assets/wua/sprite/npc/Uproot/SpriteSheet.xml b/assets/wua/sprite/npc/Uproot/SpriteSheet.xml new file mode 100644 index 00000000000..bd225ce7fa1 --- /dev/null +++ b/assets/wua/sprite/npc/Uproot/SpriteSheet.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/wua/sprite/npc/Urchin/Palette_00.png b/assets/wua/sprite/npc/Urchin/Palette_00.png new file mode 100644 index 00000000000..62c5de8ca66 Binary files /dev/null and b/assets/wua/sprite/npc/Urchin/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Urchin/Raster_00.png b/assets/wua/sprite/npc/Urchin/Raster_00.png new file mode 100644 index 00000000000..ed5c5d84fcb Binary files /dev/null and b/assets/wua/sprite/npc/Urchin/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Urchin/SpriteSheet.xml b/assets/wua/sprite/npc/Urchin/SpriteSheet.xml new file mode 100644 index 00000000000..a4fe525a5e1 --- /dev/null +++ b/assets/wua/sprite/npc/Urchin/SpriteSheet.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Whibble/Palette_00.png b/assets/wua/sprite/npc/Whibble/Palette_00.png new file mode 100644 index 00000000000..6a26a8cf6eb Binary files /dev/null and b/assets/wua/sprite/npc/Whibble/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Whibble/Raster_00.png b/assets/wua/sprite/npc/Whibble/Raster_00.png new file mode 100644 index 00000000000..89d230bec12 Binary files /dev/null and b/assets/wua/sprite/npc/Whibble/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Whibble/Raster_01.png b/assets/wua/sprite/npc/Whibble/Raster_01.png new file mode 100644 index 00000000000..c64e688354f Binary files /dev/null and b/assets/wua/sprite/npc/Whibble/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Whibble/SpriteSheet.xml b/assets/wua/sprite/npc/Whibble/SpriteSheet.xml new file mode 100644 index 00000000000..b5901f3f8f0 --- /dev/null +++ b/assets/wua/sprite/npc/Whibble/SpriteSheet.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Wiggler/BPal.png b/assets/wua/sprite/npc/Wiggler/BPal.png new file mode 100644 index 00000000000..b4624bcab80 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/BPal.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Body1.png b/assets/wua/sprite/npc/Wiggler/Body1.png new file mode 100644 index 00000000000..8f693f3dd82 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Body1.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Body2.png b/assets/wua/sprite/npc/Wiggler/Body2.png new file mode 100644 index 00000000000..9165f470f54 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Body2.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Boot1.png b/assets/wua/sprite/npc/Wiggler/Boot1.png new file mode 100644 index 00000000000..2912b0a7eda Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Boot1.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Boot2.png b/assets/wua/sprite/npc/Wiggler/Boot2.png new file mode 100644 index 00000000000..7bb91c7a3d1 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Boot2.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Boot3.png b/assets/wua/sprite/npc/Wiggler/Boot3.png new file mode 100644 index 00000000000..565f2e0b14c Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Boot3.png differ diff --git a/assets/wua/sprite/npc/Wiggler/FPal.png b/assets/wua/sprite/npc/Wiggler/FPal.png new file mode 100644 index 00000000000..bfc14e3930e Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/FPal.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Flower1.png b/assets/wua/sprite/npc/Wiggler/Flower1.png new file mode 100644 index 00000000000..7d2d168f255 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Flower1.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Flower2.png b/assets/wua/sprite/npc/Wiggler/Flower2.png new file mode 100644 index 00000000000..2bc6892065e Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Flower2.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Flower3.png b/assets/wua/sprite/npc/Wiggler/Flower3.png new file mode 100644 index 00000000000..04e75891252 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Flower3.png differ diff --git a/assets/wua/sprite/npc/Wiggler/HPal.png b/assets/wua/sprite/npc/Wiggler/HPal.png new file mode 100644 index 00000000000..93181891022 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/HPal.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Head1.png b/assets/wua/sprite/npc/Wiggler/Head1.png new file mode 100644 index 00000000000..0bfdcc636ae Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Head1.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Head2.png b/assets/wua/sprite/npc/Wiggler/Head2.png new file mode 100644 index 00000000000..e1f0e8f7ea6 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Head2.png differ diff --git a/assets/wua/sprite/npc/Wiggler/Head3.png b/assets/wua/sprite/npc/Wiggler/Head3.png new file mode 100644 index 00000000000..0de0dbfdff9 Binary files /dev/null and b/assets/wua/sprite/npc/Wiggler/Head3.png differ diff --git a/assets/wua/sprite/npc/Wiggler/SpriteSheet.xml b/assets/wua/sprite/npc/Wiggler/SpriteSheet.xml new file mode 100644 index 00000000000..d53300675de --- /dev/null +++ b/assets/wua/sprite/npc/Wiggler/SpriteSheet.xml @@ -0,0 +1,1500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldAtomm/Palette_00.png b/assets/wua/sprite/npc/WorldAtomm/Palette_00.png new file mode 100644 index 00000000000..5f032c78da8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Palette_00.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Palette_01.png b/assets/wua/sprite/npc/WorldAtomm/Palette_01.png new file mode 100644 index 00000000000..81cc44e2451 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Palette_01.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_00.png b/assets/wua/sprite/npc/WorldAtomm/Raster_00.png new file mode 100644 index 00000000000..e60e5e88b2c Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_00.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_01.png b/assets/wua/sprite/npc/WorldAtomm/Raster_01.png new file mode 100644 index 00000000000..81842ec397c Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_01.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_02.png b/assets/wua/sprite/npc/WorldAtomm/Raster_02.png new file mode 100644 index 00000000000..c214bb97709 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_02.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_03.png b/assets/wua/sprite/npc/WorldAtomm/Raster_03.png new file mode 100644 index 00000000000..4d064addd11 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_03.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_04.png b/assets/wua/sprite/npc/WorldAtomm/Raster_04.png new file mode 100644 index 00000000000..3ba6069dbe7 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_04.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_05.png b/assets/wua/sprite/npc/WorldAtomm/Raster_05.png new file mode 100644 index 00000000000..50cb803fc08 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_05.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_0A.png b/assets/wua/sprite/npc/WorldAtomm/Raster_0A.png new file mode 100644 index 00000000000..eb4556aa470 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_0B.png b/assets/wua/sprite/npc/WorldAtomm/Raster_0B.png new file mode 100644 index 00000000000..fd71a4fa380 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_0C.png b/assets/wua/sprite/npc/WorldAtomm/Raster_0C.png new file mode 100644 index 00000000000..83a49a1a0cd Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_0D.png b/assets/wua/sprite/npc/WorldAtomm/Raster_0D.png new file mode 100644 index 00000000000..0ceb21b509c Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_0E.png b/assets/wua/sprite/npc/WorldAtomm/Raster_0E.png new file mode 100644 index 00000000000..e022b1936d8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_10.png b/assets/wua/sprite/npc/WorldAtomm/Raster_10.png new file mode 100644 index 00000000000..6203d0802e3 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_10.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_11.png b/assets/wua/sprite/npc/WorldAtomm/Raster_11.png new file mode 100644 index 00000000000..1362d8a6afa Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_11.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_12.png b/assets/wua/sprite/npc/WorldAtomm/Raster_12.png new file mode 100644 index 00000000000..8f8c4f1bcac Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_12.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_13.png b/assets/wua/sprite/npc/WorldAtomm/Raster_13.png new file mode 100644 index 00000000000..222dd427321 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_13.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_14.png b/assets/wua/sprite/npc/WorldAtomm/Raster_14.png new file mode 100644 index 00000000000..08b67425990 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_14.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_15.png b/assets/wua/sprite/npc/WorldAtomm/Raster_15.png new file mode 100644 index 00000000000..2c9de1920c0 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_15.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_16.png b/assets/wua/sprite/npc/WorldAtomm/Raster_16.png new file mode 100644 index 00000000000..6a48f3b18cb Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_16.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_17.png b/assets/wua/sprite/npc/WorldAtomm/Raster_17.png new file mode 100644 index 00000000000..6689f99c0d7 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_17.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_18.png b/assets/wua/sprite/npc/WorldAtomm/Raster_18.png new file mode 100644 index 00000000000..6d79bda615a Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_18.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_19.png b/assets/wua/sprite/npc/WorldAtomm/Raster_19.png new file mode 100644 index 00000000000..4afca33952e Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_19.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_1B.png b/assets/wua/sprite/npc/WorldAtomm/Raster_1B.png new file mode 100644 index 00000000000..81cc44e2451 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_1C.png b/assets/wua/sprite/npc/WorldAtomm/Raster_1C.png new file mode 100644 index 00000000000..aa2a49b74d8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_1D.png b/assets/wua/sprite/npc/WorldAtomm/Raster_1D.png new file mode 100644 index 00000000000..06c2ca46ef8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_1E.png b/assets/wua/sprite/npc/WorldAtomm/Raster_1E.png new file mode 100644 index 00000000000..a3a2a2e66f3 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_1F.png b/assets/wua/sprite/npc/WorldAtomm/Raster_1F.png new file mode 100644 index 00000000000..69ddeadc469 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_20.png b/assets/wua/sprite/npc/WorldAtomm/Raster_20.png new file mode 100644 index 00000000000..6ee0937b7cd Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_20.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_21.png b/assets/wua/sprite/npc/WorldAtomm/Raster_21.png new file mode 100644 index 00000000000..99e4eb4ea5e Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_21.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_22.png b/assets/wua/sprite/npc/WorldAtomm/Raster_22.png new file mode 100644 index 00000000000..dafb4c823f3 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_22.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_23.png b/assets/wua/sprite/npc/WorldAtomm/Raster_23.png new file mode 100644 index 00000000000..ce8cf4ac43c Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_23.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_24.png b/assets/wua/sprite/npc/WorldAtomm/Raster_24.png new file mode 100644 index 00000000000..26975912503 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_24.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_25.png b/assets/wua/sprite/npc/WorldAtomm/Raster_25.png new file mode 100644 index 00000000000..83c099cce37 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_25.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_26.png b/assets/wua/sprite/npc/WorldAtomm/Raster_26.png new file mode 100644 index 00000000000..dd0f186b5a2 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_26.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/Raster_27.png b/assets/wua/sprite/npc/WorldAtomm/Raster_27.png new file mode 100644 index 00000000000..e27753b8962 Binary files /dev/null and b/assets/wua/sprite/npc/WorldAtomm/Raster_27.png differ diff --git a/assets/wua/sprite/npc/WorldAtomm/SpriteSheet.xml b/assets/wua/sprite/npc/WorldAtomm/SpriteSheet.xml new file mode 100644 index 00000000000..b95c05851a7 --- /dev/null +++ b/assets/wua/sprite/npc/WorldAtomm/SpriteSheet.xml @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldDawple/Palette_00.png b/assets/wua/sprite/npc/WorldDawple/Palette_00.png new file mode 100644 index 00000000000..18431d35016 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Palette_00.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Palette_08.png b/assets/wua/sprite/npc/WorldDawple/Palette_08.png new file mode 100644 index 00000000000..048bac047b2 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Palette_08.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_00.png b/assets/wua/sprite/npc/WorldDawple/Raster_00.png new file mode 100644 index 00000000000..02b6d8095e8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_00.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_01.png b/assets/wua/sprite/npc/WorldDawple/Raster_01.png new file mode 100644 index 00000000000..35b24322a08 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_01.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_02.png b/assets/wua/sprite/npc/WorldDawple/Raster_02.png new file mode 100644 index 00000000000..917e214c9e2 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_02.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_03.png b/assets/wua/sprite/npc/WorldDawple/Raster_03.png new file mode 100644 index 00000000000..8bf9a327d4c Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_03.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_04.png b/assets/wua/sprite/npc/WorldDawple/Raster_04.png new file mode 100644 index 00000000000..ebab09f37a5 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_04.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_05.png b/assets/wua/sprite/npc/WorldDawple/Raster_05.png new file mode 100644 index 00000000000..4b4f3b9d091 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_05.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_06.png b/assets/wua/sprite/npc/WorldDawple/Raster_06.png new file mode 100644 index 00000000000..0d50ecb9fe5 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_06.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_07.png b/assets/wua/sprite/npc/WorldDawple/Raster_07.png new file mode 100644 index 00000000000..a2c4dede5c9 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_07.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_08.png b/assets/wua/sprite/npc/WorldDawple/Raster_08.png new file mode 100644 index 00000000000..7b25548642d Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_08.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_09.png b/assets/wua/sprite/npc/WorldDawple/Raster_09.png new file mode 100644 index 00000000000..1d36f690a18 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_09.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_0A.png b/assets/wua/sprite/npc/WorldDawple/Raster_0A.png new file mode 100644 index 00000000000..8a4c02cee4c Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_0B.png b/assets/wua/sprite/npc/WorldDawple/Raster_0B.png new file mode 100644 index 00000000000..182eeae4fc7 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_0C.png b/assets/wua/sprite/npc/WorldDawple/Raster_0C.png new file mode 100644 index 00000000000..e9b1cf1a919 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_0D.png b/assets/wua/sprite/npc/WorldDawple/Raster_0D.png new file mode 100644 index 00000000000..9f3673fcbdb Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_0E.png b/assets/wua/sprite/npc/WorldDawple/Raster_0E.png new file mode 100644 index 00000000000..37074f42165 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_0F.png b/assets/wua/sprite/npc/WorldDawple/Raster_0F.png new file mode 100644 index 00000000000..999c135e7e0 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_10.png b/assets/wua/sprite/npc/WorldDawple/Raster_10.png new file mode 100644 index 00000000000..a0897f129a0 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_10.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_11.png b/assets/wua/sprite/npc/WorldDawple/Raster_11.png new file mode 100644 index 00000000000..b06ee376397 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_11.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_12.png b/assets/wua/sprite/npc/WorldDawple/Raster_12.png new file mode 100644 index 00000000000..0ff96a1201b Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_12.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_13.png b/assets/wua/sprite/npc/WorldDawple/Raster_13.png new file mode 100644 index 00000000000..bf1ab23394a Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_13.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_14.png b/assets/wua/sprite/npc/WorldDawple/Raster_14.png new file mode 100644 index 00000000000..0551584f0b0 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_14.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_15.png b/assets/wua/sprite/npc/WorldDawple/Raster_15.png new file mode 100644 index 00000000000..619ed94ff13 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_15.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_16.png b/assets/wua/sprite/npc/WorldDawple/Raster_16.png new file mode 100644 index 00000000000..e2d230982a7 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_16.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_17.png b/assets/wua/sprite/npc/WorldDawple/Raster_17.png new file mode 100644 index 00000000000..3bea0931fe7 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_17.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_18.png b/assets/wua/sprite/npc/WorldDawple/Raster_18.png new file mode 100644 index 00000000000..29ff8dc4fba Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_18.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_19.png b/assets/wua/sprite/npc/WorldDawple/Raster_19.png new file mode 100644 index 00000000000..a1601590f8d Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_19.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_1A.pal.png b/assets/wua/sprite/npc/WorldDawple/Raster_1A.pal.png new file mode 100644 index 00000000000..a38ca24a406 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_1A.pal.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_1A.png b/assets/wua/sprite/npc/WorldDawple/Raster_1A.png new file mode 100644 index 00000000000..b839e71871c Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_1B.png b/assets/wua/sprite/npc/WorldDawple/Raster_1B.png new file mode 100644 index 00000000000..5241aa37baa Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_1B.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_1C.png b/assets/wua/sprite/npc/WorldDawple/Raster_1C.png new file mode 100644 index 00000000000..64db1eb8778 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_1C.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_1D.png b/assets/wua/sprite/npc/WorldDawple/Raster_1D.png new file mode 100644 index 00000000000..a4daae2d861 Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_1D.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_1E.png b/assets/wua/sprite/npc/WorldDawple/Raster_1E.png new file mode 100644 index 00000000000..c507266732c Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_1E.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/Raster_1F.png b/assets/wua/sprite/npc/WorldDawple/Raster_1F.png new file mode 100644 index 00000000000..8c44f9d858b Binary files /dev/null and b/assets/wua/sprite/npc/WorldDawple/Raster_1F.png differ diff --git a/assets/wua/sprite/npc/WorldDawple/SpriteSheet.xml b/assets/wua/sprite/npc/WorldDawple/SpriteSheet.xml new file mode 100644 index 00000000000..d3f80541b9d --- /dev/null +++ b/assets/wua/sprite/npc/WorldDawple/SpriteSheet.xml @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldJrtroopa/Raster_00.png b/assets/wua/sprite/npc/WorldJrtroopa/Raster_00.png new file mode 100644 index 00000000000..ee3fa78f0ae Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/Raster_00.png differ diff --git a/assets/wua/sprite/npc/WorldJrtroopa/Raster_01.png b/assets/wua/sprite/npc/WorldJrtroopa/Raster_01.png new file mode 100644 index 00000000000..f98d0e9eae8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/Raster_01.png differ diff --git a/assets/wua/sprite/npc/WorldJrtroopa/Raster_03.png b/assets/wua/sprite/npc/WorldJrtroopa/Raster_03.png new file mode 100644 index 00000000000..0365b0ebfa8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/Raster_03.png differ diff --git a/assets/wua/sprite/npc/WorldJrtroopa/Raster_04.png b/assets/wua/sprite/npc/WorldJrtroopa/Raster_04.png new file mode 100644 index 00000000000..39ccf62384e Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/Raster_04.png differ diff --git a/assets/wua/sprite/npc/WorldJrtroopa/Raster_05.png b/assets/wua/sprite/npc/WorldJrtroopa/Raster_05.png new file mode 100644 index 00000000000..b7863ad3079 Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/Raster_05.png differ diff --git a/assets/wua/sprite/npc/WorldJrtroopa/Raster_38.png b/assets/wua/sprite/npc/WorldJrtroopa/Raster_38.png new file mode 100644 index 00000000000..9405c29b53c Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/Raster_38.png differ diff --git a/assets/wua/sprite/npc/WorldJrtroopa/Raster_39.png b/assets/wua/sprite/npc/WorldJrtroopa/Raster_39.png new file mode 100644 index 00000000000..41a57b0d47c Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/Raster_39.png differ diff --git a/assets/wua/sprite/npc/WorldJrtroopa/SpriteSheet.xml b/assets/wua/sprite/npc/WorldJrtroopa/SpriteSheet.xml new file mode 100644 index 00000000000..fc9c41c0e83 --- /dev/null +++ b/assets/wua/sprite/npc/WorldJrtroopa/SpriteSheet.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldJrtroopa/default.png b/assets/wua/sprite/npc/WorldJrtroopa/default.png new file mode 100644 index 00000000000..d856f159786 Binary files /dev/null and b/assets/wua/sprite/npc/WorldJrtroopa/default.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Palette_00.png b/assets/wua/sprite/npc/WorldKala/Palette_00.png new file mode 100644 index 00000000000..4fc525e438c Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Palette_00.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_00.png b/assets/wua/sprite/npc/WorldKala/Raster_00.png new file mode 100644 index 00000000000..1bed90e02ec Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_00.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_01.png b/assets/wua/sprite/npc/WorldKala/Raster_01.png new file mode 100644 index 00000000000..a5e996601af Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_01.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_02.png b/assets/wua/sprite/npc/WorldKala/Raster_02.png new file mode 100644 index 00000000000..bb2c0bc61ac Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_02.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_03.png b/assets/wua/sprite/npc/WorldKala/Raster_03.png new file mode 100644 index 00000000000..367fcce13d5 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_03.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_04.png b/assets/wua/sprite/npc/WorldKala/Raster_04.png new file mode 100644 index 00000000000..383e9f19957 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_04.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_05.png b/assets/wua/sprite/npc/WorldKala/Raster_05.png new file mode 100644 index 00000000000..10dde979760 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_05.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_06.png b/assets/wua/sprite/npc/WorldKala/Raster_06.png new file mode 100644 index 00000000000..043cebad160 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_06.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_07.png b/assets/wua/sprite/npc/WorldKala/Raster_07.png new file mode 100644 index 00000000000..dad085e41f4 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_07.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_08.png b/assets/wua/sprite/npc/WorldKala/Raster_08.png new file mode 100644 index 00000000000..a10a5fa722a Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_08.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_09.png b/assets/wua/sprite/npc/WorldKala/Raster_09.png new file mode 100644 index 00000000000..82481e14f13 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_09.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_0A.png b/assets/wua/sprite/npc/WorldKala/Raster_0A.png new file mode 100644 index 00000000000..44af51ecd6d Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_0B.png b/assets/wua/sprite/npc/WorldKala/Raster_0B.png new file mode 100644 index 00000000000..2987504763a Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_0C.png b/assets/wua/sprite/npc/WorldKala/Raster_0C.png new file mode 100644 index 00000000000..ea6b0a1f8d0 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_0D.png b/assets/wua/sprite/npc/WorldKala/Raster_0D.png new file mode 100644 index 00000000000..5a77c8bab43 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_0E.png b/assets/wua/sprite/npc/WorldKala/Raster_0E.png new file mode 100644 index 00000000000..ac51a29e6b8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_0F.png b/assets/wua/sprite/npc/WorldKala/Raster_0F.png new file mode 100644 index 00000000000..ff456d370ab Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_10.png b/assets/wua/sprite/npc/WorldKala/Raster_10.png new file mode 100644 index 00000000000..367fcce13d5 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_10.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_11.png b/assets/wua/sprite/npc/WorldKala/Raster_11.png new file mode 100644 index 00000000000..b9eceeb1c93 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_11.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_12.png b/assets/wua/sprite/npc/WorldKala/Raster_12.png new file mode 100644 index 00000000000..e22444a7fec Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_12.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_13.png b/assets/wua/sprite/npc/WorldKala/Raster_13.png new file mode 100644 index 00000000000..6808acccf62 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_13.png differ diff --git a/assets/wua/sprite/npc/WorldKala/Raster_15.pal.png b/assets/wua/sprite/npc/WorldKala/Raster_15.pal.png new file mode 100644 index 00000000000..5b72f784e79 Binary files /dev/null and b/assets/wua/sprite/npc/WorldKala/Raster_15.pal.png differ diff --git a/assets/wua/sprite/npc/WorldKala/SpriteSheet.xml b/assets/wua/sprite/npc/WorldKala/SpriteSheet.xml new file mode 100644 index 00000000000..571518c8207 --- /dev/null +++ b/assets/wua/sprite/npc/WorldKala/SpriteSheet.xml @@ -0,0 +1,560 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldNeo/Palette_00.png b/assets/wua/sprite/npc/WorldNeo/Palette_00.png new file mode 100644 index 00000000000..079f0b02446 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Palette_00.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_00.png b/assets/wua/sprite/npc/WorldNeo/Raster_00.png new file mode 100644 index 00000000000..e32590fbd10 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_00.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_01.png b/assets/wua/sprite/npc/WorldNeo/Raster_01.png new file mode 100644 index 00000000000..d7e0b999559 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_01.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_02.png b/assets/wua/sprite/npc/WorldNeo/Raster_02.png new file mode 100644 index 00000000000..251a085a41c Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_02.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_03.png b/assets/wua/sprite/npc/WorldNeo/Raster_03.png new file mode 100644 index 00000000000..cd52619af86 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_03.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_04.png b/assets/wua/sprite/npc/WorldNeo/Raster_04.png new file mode 100644 index 00000000000..0b8a8db0d50 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_04.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_05.png b/assets/wua/sprite/npc/WorldNeo/Raster_05.png new file mode 100644 index 00000000000..ad3c05fcae5 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_05.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_06.png b/assets/wua/sprite/npc/WorldNeo/Raster_06.png new file mode 100644 index 00000000000..3a89dec6308 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_06.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_07.png b/assets/wua/sprite/npc/WorldNeo/Raster_07.png new file mode 100644 index 00000000000..c233e6b53aa Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_07.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_08.png b/assets/wua/sprite/npc/WorldNeo/Raster_08.png new file mode 100644 index 00000000000..381397cd2de Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_08.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_09.png b/assets/wua/sprite/npc/WorldNeo/Raster_09.png new file mode 100644 index 00000000000..51601b7ac98 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_09.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_0A.png b/assets/wua/sprite/npc/WorldNeo/Raster_0A.png new file mode 100644 index 00000000000..5d6178f15f7 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_0B.png b/assets/wua/sprite/npc/WorldNeo/Raster_0B.png new file mode 100644 index 00000000000..e9e7329eade Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/Raster_0C.png b/assets/wua/sprite/npc/WorldNeo/Raster_0C.png new file mode 100644 index 00000000000..29104f15220 Binary files /dev/null and b/assets/wua/sprite/npc/WorldNeo/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/WorldNeo/SpriteSheet.xml b/assets/wua/sprite/npc/WorldNeo/SpriteSheet.xml new file mode 100644 index 00000000000..17d44dfe68c --- /dev/null +++ b/assets/wua/sprite/npc/WorldNeo/SpriteSheet.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldShyDude/Palette_00.png b/assets/wua/sprite/npc/WorldShyDude/Palette_00.png new file mode 100644 index 00000000000..8e4d0418be3 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Palette_00.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_00.png b/assets/wua/sprite/npc/WorldShyDude/Raster_00.png new file mode 100644 index 00000000000..d6310711fe2 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_00.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_03.png b/assets/wua/sprite/npc/WorldShyDude/Raster_03.png new file mode 100644 index 00000000000..461b3870518 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_03.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_04.png b/assets/wua/sprite/npc/WorldShyDude/Raster_04.png new file mode 100644 index 00000000000..7f17f7c4228 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_04.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_05.png b/assets/wua/sprite/npc/WorldShyDude/Raster_05.png new file mode 100644 index 00000000000..d0fde5c9da0 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_05.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_06.png b/assets/wua/sprite/npc/WorldShyDude/Raster_06.png new file mode 100644 index 00000000000..02342df1c0a Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_06.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_07.png b/assets/wua/sprite/npc/WorldShyDude/Raster_07.png new file mode 100644 index 00000000000..50f405cb9ad Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_07.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_08.png b/assets/wua/sprite/npc/WorldShyDude/Raster_08.png new file mode 100644 index 00000000000..d8f66eccbd3 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_08.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_09.png b/assets/wua/sprite/npc/WorldShyDude/Raster_09.png new file mode 100644 index 00000000000..1ba09dbde7f Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_09.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_0A.png b/assets/wua/sprite/npc/WorldShyDude/Raster_0A.png new file mode 100644 index 00000000000..2948039a7e7 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_11.png b/assets/wua/sprite/npc/WorldShyDude/Raster_11.png new file mode 100644 index 00000000000..d3ca145c56b Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_11.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_12.png b/assets/wua/sprite/npc/WorldShyDude/Raster_12.png new file mode 100644 index 00000000000..c07e333265a Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_12.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_13.png b/assets/wua/sprite/npc/WorldShyDude/Raster_13.png new file mode 100644 index 00000000000..0f6860941b1 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_13.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_14.png b/assets/wua/sprite/npc/WorldShyDude/Raster_14.png new file mode 100644 index 00000000000..65e3a56c1e6 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_14.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_15.png b/assets/wua/sprite/npc/WorldShyDude/Raster_15.png new file mode 100644 index 00000000000..cf6d92a64e5 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_15.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_16.png b/assets/wua/sprite/npc/WorldShyDude/Raster_16.png new file mode 100644 index 00000000000..dc123e7acde Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_16.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_17.png b/assets/wua/sprite/npc/WorldShyDude/Raster_17.png new file mode 100644 index 00000000000..29d5e8fbd93 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_17.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_18.png b/assets/wua/sprite/npc/WorldShyDude/Raster_18.png new file mode 100644 index 00000000000..d6a95a9f0a2 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_18.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_19.png b/assets/wua/sprite/npc/WorldShyDude/Raster_19.png new file mode 100644 index 00000000000..96ee3de5b44 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_19.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/Raster_1A.png b/assets/wua/sprite/npc/WorldShyDude/Raster_1A.png new file mode 100644 index 00000000000..883df525341 Binary files /dev/null and b/assets/wua/sprite/npc/WorldShyDude/Raster_1A.png differ diff --git a/assets/wua/sprite/npc/WorldShyDude/SpriteSheet.xml b/assets/wua/sprite/npc/WorldShyDude/SpriteSheet.xml new file mode 100644 index 00000000000..9b391a91416 --- /dev/null +++ b/assets/wua/sprite/npc/WorldShyDude/SpriteSheet.xml @@ -0,0 +1,575 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_00.png b/assets/wua/sprite/npc/WorldSpark/Palette_00.png new file mode 100644 index 00000000000..537d97eda21 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_00.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_01.png b/assets/wua/sprite/npc/WorldSpark/Palette_01.png new file mode 100644 index 00000000000..f8ea569a920 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_01.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_02.png b/assets/wua/sprite/npc/WorldSpark/Palette_02.png new file mode 100644 index 00000000000..c1520aec1d0 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_02.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_03.png b/assets/wua/sprite/npc/WorldSpark/Palette_03.png new file mode 100644 index 00000000000..5033e467a82 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_03.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_04.png b/assets/wua/sprite/npc/WorldSpark/Palette_04.png new file mode 100644 index 00000000000..d99c96bef42 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_04.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_05.png b/assets/wua/sprite/npc/WorldSpark/Palette_05.png new file mode 100644 index 00000000000..d1eab1b6d57 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_05.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_06.png b/assets/wua/sprite/npc/WorldSpark/Palette_06.png new file mode 100644 index 00000000000..d1eab1b6d57 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_06.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_07.png b/assets/wua/sprite/npc/WorldSpark/Palette_07.png new file mode 100644 index 00000000000..d1eab1b6d57 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_07.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Palette_inactive.png b/assets/wua/sprite/npc/WorldSpark/Palette_inactive.png new file mode 100644 index 00000000000..a1c5c4693d2 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Palette_inactive.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/SpriteSheet.xml b/assets/wua/sprite/npc/WorldSpark/SpriteSheet.xml new file mode 100644 index 00000000000..979d367bef8 --- /dev/null +++ b/assets/wua/sprite/npc/WorldSpark/SpriteSheet.xml @@ -0,0 +1,1066 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/WorldSpark/Tear.pal.png b/assets/wua/sprite/npc/WorldSpark/Tear.pal.png new file mode 100644 index 00000000000..565115e8a6a Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Tear.pal.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/Tear.png b/assets/wua/sprite/npc/WorldSpark/Tear.png new file mode 100644 index 00000000000..565115e8a6a Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/Tear.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/book1.png b/assets/wua/sprite/npc/WorldSpark/book1.png new file mode 100644 index 00000000000..df53ea4754e Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/book1.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/book2.png b/assets/wua/sprite/npc/WorldSpark/book2.png new file mode 100644 index 00000000000..f419bc315b8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/book2.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/book3.png b/assets/wua/sprite/npc/WorldSpark/book3.png new file mode 100644 index 00000000000..70a22ff0a65 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/book3.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/book4.pal.png b/assets/wua/sprite/npc/WorldSpark/book4.pal.png new file mode 100644 index 00000000000..050c960371c Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/book4.pal.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/book4.png b/assets/wua/sprite/npc/WorldSpark/book4.png new file mode 100644 index 00000000000..dda4cf3eb46 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/book4.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/mad1.png b/assets/wua/sprite/npc/WorldSpark/mad1.png new file mode 100644 index 00000000000..d366420cc33 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/mad1.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/mad2.png b/assets/wua/sprite/npc/WorldSpark/mad2.png new file mode 100644 index 00000000000..98786060c20 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/mad2.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/mad3.png b/assets/wua/sprite/npc/WorldSpark/mad3.png new file mode 100644 index 00000000000..48c0d1c2bc2 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/mad3.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/neutral1.png b/assets/wua/sprite/npc/WorldSpark/neutral1.png new file mode 100644 index 00000000000..b303add8627 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/neutral1.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/neutral2.png b/assets/wua/sprite/npc/WorldSpark/neutral2.png new file mode 100644 index 00000000000..17d2f57376f Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/neutral2.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/neutraltalk.png b/assets/wua/sprite/npc/WorldSpark/neutraltalk.png new file mode 100644 index 00000000000..a72286f4f27 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/neutraltalk.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/reading1.png b/assets/wua/sprite/npc/WorldSpark/reading1.png new file mode 100644 index 00000000000..ccc4d2ad029 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/reading1.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/reading2.png b/assets/wua/sprite/npc/WorldSpark/reading2.png new file mode 100644 index 00000000000..01b187d555a Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/reading2.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/reading3.png b/assets/wua/sprite/npc/WorldSpark/reading3.png new file mode 100644 index 00000000000..2abeba7c7d8 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/reading3.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/reading4.png b/assets/wua/sprite/npc/WorldSpark/reading4.png new file mode 100644 index 00000000000..36deec72aff Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/reading4.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/reading5.png b/assets/wua/sprite/npc/WorldSpark/reading5.png new file mode 100644 index 00000000000..a61d91ee524 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/reading5.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/reading6.png b/assets/wua/sprite/npc/WorldSpark/reading6.png new file mode 100644 index 00000000000..7f50db417a1 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/reading6.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/sad1.png b/assets/wua/sprite/npc/WorldSpark/sad1.png new file mode 100644 index 00000000000..647b8b0ac0b Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/sad1.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/sad2.png b/assets/wua/sprite/npc/WorldSpark/sad2.png new file mode 100644 index 00000000000..3e93a5779ae Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/sad2.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/sad3.png b/assets/wua/sprite/npc/WorldSpark/sad3.png new file mode 100644 index 00000000000..f1d21fca551 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/sad3.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/still.png b/assets/wua/sprite/npc/WorldSpark/still.png new file mode 100644 index 00000000000..b9614a06053 Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/still.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/talk1.png b/assets/wua/sprite/npc/WorldSpark/talk1.png new file mode 100644 index 00000000000..ee30e48f8bc Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/talk1.png differ diff --git a/assets/wua/sprite/npc/WorldSpark/talk2.png b/assets/wua/sprite/npc/WorldSpark/talk2.png new file mode 100644 index 00000000000..c939eabd6ac Binary files /dev/null and b/assets/wua/sprite/npc/WorldSpark/talk2.png differ diff --git a/assets/wua/sprite/npc/Wzzap/BWing1.pal.png b/assets/wua/sprite/npc/Wzzap/BWing1.pal.png new file mode 100644 index 00000000000..021e47ff54a Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/BWing1.pal.png differ diff --git a/assets/wua/sprite/npc/Wzzap/BWing1.png b/assets/wua/sprite/npc/Wzzap/BWing1.png new file mode 100644 index 00000000000..021e47ff54a Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/BWing1.png differ diff --git a/assets/wua/sprite/npc/Wzzap/BWing2.png b/assets/wua/sprite/npc/Wzzap/BWing2.png new file mode 100644 index 00000000000..309d3863004 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/BWing2.png differ diff --git a/assets/wua/sprite/npc/Wzzap/BWing3.png b/assets/wua/sprite/npc/Wzzap/BWing3.png new file mode 100644 index 00000000000..e31a47d4400 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/BWing3.png differ diff --git a/assets/wua/sprite/npc/Wzzap/BWing4.png b/assets/wua/sprite/npc/Wzzap/BWing4.png new file mode 100644 index 00000000000..822168a2325 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/BWing4.png differ diff --git a/assets/wua/sprite/npc/Wzzap/FWing1.png b/assets/wua/sprite/npc/Wzzap/FWing1.png new file mode 100644 index 00000000000..fe0280e3bcc Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/FWing1.png differ diff --git a/assets/wua/sprite/npc/Wzzap/FWing2.png b/assets/wua/sprite/npc/Wzzap/FWing2.png new file mode 100644 index 00000000000..77e183c8827 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/FWing2.png differ diff --git a/assets/wua/sprite/npc/Wzzap/FWing3.png b/assets/wua/sprite/npc/Wzzap/FWing3.png new file mode 100644 index 00000000000..312588d18f4 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/FWing3.png differ diff --git a/assets/wua/sprite/npc/Wzzap/FWing4.png b/assets/wua/sprite/npc/Wzzap/FWing4.png new file mode 100644 index 00000000000..1e5c44cf974 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/FWing4.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Palette_00.png b/assets/wua/sprite/npc/Wzzap/Palette_00.png new file mode 100644 index 00000000000..9c881080bc2 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Palette_00.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_00.png b/assets/wua/sprite/npc/Wzzap/Raster_00.png new file mode 100644 index 00000000000..a4066ba4ac6 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_00.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_01.png b/assets/wua/sprite/npc/Wzzap/Raster_01.png new file mode 100644 index 00000000000..e6e3df917be Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_01.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_02.png b/assets/wua/sprite/npc/Wzzap/Raster_02.png new file mode 100644 index 00000000000..f878e8589f7 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_02.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_03.png b/assets/wua/sprite/npc/Wzzap/Raster_03.png new file mode 100644 index 00000000000..797ddcf8ff8 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_03.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_04.png b/assets/wua/sprite/npc/Wzzap/Raster_04.png new file mode 100644 index 00000000000..42bf3e7be8d Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_04.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_05.png b/assets/wua/sprite/npc/Wzzap/Raster_05.png new file mode 100644 index 00000000000..eac963244f9 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_05.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_06.png b/assets/wua/sprite/npc/Wzzap/Raster_06.png new file mode 100644 index 00000000000..ce66b031d72 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_06.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_07.png b/assets/wua/sprite/npc/Wzzap/Raster_07.png new file mode 100644 index 00000000000..52832c7213f Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_07.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_08.png b/assets/wua/sprite/npc/Wzzap/Raster_08.png new file mode 100644 index 00000000000..6f866b33e28 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_08.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_09.png b/assets/wua/sprite/npc/Wzzap/Raster_09.png new file mode 100644 index 00000000000..2cc49408720 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_09.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_0A.png b/assets/wua/sprite/npc/Wzzap/Raster_0A.png new file mode 100644 index 00000000000..e73bce4b3e8 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_0A.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_0B.png b/assets/wua/sprite/npc/Wzzap/Raster_0B.png new file mode 100644 index 00000000000..4f41643eadf Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_0B.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_0C.png b/assets/wua/sprite/npc/Wzzap/Raster_0C.png new file mode 100644 index 00000000000..d602f1eb8fe Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_0C.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_0D.png b/assets/wua/sprite/npc/Wzzap/Raster_0D.png new file mode 100644 index 00000000000..d99ef10a707 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_0D.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_0E.png b/assets/wua/sprite/npc/Wzzap/Raster_0E.png new file mode 100644 index 00000000000..5c7baf2503a Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_0E.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_0F.png b/assets/wua/sprite/npc/Wzzap/Raster_0F.png new file mode 100644 index 00000000000..1b52a9e146d Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_0F.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_10.png b/assets/wua/sprite/npc/Wzzap/Raster_10.png new file mode 100644 index 00000000000..0861e229089 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_10.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_11.png b/assets/wua/sprite/npc/Wzzap/Raster_11.png new file mode 100644 index 00000000000..0e4f57ebfec Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_11.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_12.png b/assets/wua/sprite/npc/Wzzap/Raster_12.png new file mode 100644 index 00000000000..818dda79e15 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_12.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_13.png b/assets/wua/sprite/npc/Wzzap/Raster_13.png new file mode 100644 index 00000000000..c8cbd6c883e Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_13.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_14.png b/assets/wua/sprite/npc/Wzzap/Raster_14.png new file mode 100644 index 00000000000..b43eef6f5e5 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_14.png differ diff --git a/assets/wua/sprite/npc/Wzzap/Raster_15.png b/assets/wua/sprite/npc/Wzzap/Raster_15.png new file mode 100644 index 00000000000..baaf5df596e Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/Raster_15.png differ diff --git a/assets/wua/sprite/npc/Wzzap/SpriteSheet.xml b/assets/wua/sprite/npc/Wzzap/SpriteSheet.xml new file mode 100644 index 00000000000..c25ef9f2c65 --- /dev/null +++ b/assets/wua/sprite/npc/Wzzap/SpriteSheet.xml @@ -0,0 +1,753 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/wua/sprite/npc/Wzzap/laugh1.png b/assets/wua/sprite/npc/Wzzap/laugh1.png new file mode 100644 index 00000000000..3c1ad75ecd8 Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/laugh1.png differ diff --git a/assets/wua/sprite/npc/Wzzap/laugh2.png b/assets/wua/sprite/npc/Wzzap/laugh2.png new file mode 100644 index 00000000000..f001590ec2e Binary files /dev/null and b/assets/wua/sprite/npc/Wzzap/laugh2.png differ diff --git a/assets/wua/ui/battle/status/danger.png b/assets/wua/ui/battle/status/danger.png new file mode 100644 index 00000000000..acc4653afcb Binary files /dev/null and b/assets/wua/ui/battle/status/danger.png differ diff --git a/assets/wua/ui/battle/status/peril.png b/assets/wua/ui/battle/status/peril.png new file mode 100644 index 00000000000..c412e3dbe28 Binary files /dev/null and b/assets/wua/ui/battle/status/peril.png differ diff --git a/include/common_structs.h b/include/common_structs.h index 22a123f5dd3..f3216895aaa 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -150,12 +150,6 @@ typedef struct DmaTable { /* 0x08 */ u8* dest; } DmaTable; -typedef struct PartnerData { - /* 0x00 */ u8 enabled; - /* 0x01 */ s8 level; - /* 0x02 */ s16 unk_02[3]; -} PartnerData; // size = 0x08 - typedef struct HeapNode { /* 0x00 */ struct HeapNode* next; /* 0x04 */ u32 length; @@ -305,6 +299,12 @@ typedef struct Npc { typedef Npc* NpcList[MAX_NPCS]; +typedef struct PartnerData { + /* 0x00 */ u8 enabled; + /* 0x01 */ s8 level; + /* 0x02 */ s16 unk_02[3]; +} PartnerData; // size = 0x08 + typedef struct PlayerData { /* 0x000 */ s8 bootsLevel; /* 0x001 */ s8 hammerLevel; @@ -319,13 +319,13 @@ typedef struct PlayerData { /* 0x00A */ b8 hasActionCommands; /* 0x00B */ char pad_00B; /* 0x00C */ s16 coins; - /* 0x00E */ s8 fortressKeyCount; + /* 0x00E */ char unused_00E; /* 0x00F */ u8 starPieces; /* 0x010 */ s8 starPoints; /* 0x011 */ s8 unused_011; /* 0x012 */ s8 curPartner; /* 0x013 */ char pad_013; - /* 0x014 */ struct PartnerData partners[12]; + /* 0x014 */ PartnerData partners[12]; /* 0x074 */ s16 keyItems[32]; /* 0x0B4 */ s16 badges[128]; /* 0x1B4 */ s16 invItems[10]; @@ -674,7 +674,7 @@ typedef struct StatusBar { /* 0x40 */ s16 displayCoins; /* 0x42 */ s16 displayStarpoints; /* 0x44 */ s8 ignoreChanges; /* set != 0 to prevent automatic opening from HP/FP changes */ - /* 0x45 */ s8 openInputDisabled; + /* 0x45 */ b8 openInputDisabled; /* 0x45 */ s8 alwaysShown; // when set, the status bar will always be shown. used while browsing a shop. /* 0x47 */ s8 disabled; /* set != 0 for menu to be disabled completely */ /* 0x48 */ s16 displayStarPower; @@ -1761,12 +1761,6 @@ typedef struct BombTrigger { /* 0x0C */ s32 radius; // effective 'size' of the object, usually set to zero because bombettes explosion radius is large enough } BombTrigger; // size = 0x10; -// the use of this is a bug in sam_11 -typedef struct BombTriggerF { - /* 0x00 */ Vec3f pos; - /* 0x0C */ f32 radius; -} BombTriggerF; // size = 0x10; - typedef struct AnimatedModel { /* 0x00 */ s32 animModelID; /* 0x04 */ Vec3f pos; @@ -1887,9 +1881,8 @@ typedef struct Actor { /* 0x19B */ char unk_19B[1]; /* 0x19C */ s32 actorTypeData1[6]; /* 4 = jump sound, 5 = attack sound */ // TODO: struct /* 0x1B4 */ s16 actorTypeData1b[2]; - /* 0x1B8 */ s8 curHP; - /* 0x1B9 */ s8 maxHP; - /* 0x1BA */ char unk_1BA[2]; + /* 0x1B8 */ s16 curHP; + /* 0x1BA */ s16 maxHP; /* 0x1BC */ s8 healthFraction; /* used to render HP bar */ /* 0x1BD */ char unk_1BD[3]; /* 0x1C0 */ EvtScript* idleSource; @@ -2066,18 +2059,22 @@ typedef struct SaveGlobals { /* 0x40 */ s8 reserved[64]; // unused } SaveGlobals; // size = 0x80 -typedef struct SaveMetadata { +typedef struct FileDisplayData { + /* 0x07 */ unsigned char filename[8]; // TEMP: moved because it fixes(?) a bug /* 0x00 */ s32 timePlayed; /* 0x04 */ u8 spiritsRescued; /* 0x05 */ char unk_05[1]; /* 0x06 */ s8 level; - /* 0x07 */ unsigned char filename[8]; /* 0x0F */ char unk_0F[9]; -} SaveMetadata; // size = 0x18 +} FileDisplayData; // size = 0x18 typedef struct SaveData { /* 0x0000 */ char magicString[16]; /* "Mario Story 006" string */ - /* 0x0010 */ s8 pad[32]; /* always zero */ + /* 0x0010 */ char modName[28]; /* always non-null for DX saves */ + /* 0x002C */ s8 majorVersion; + /* 0x002D */ s8 minorVersion; + /* 0x002E */ s8 patchVersion; + /* 0x002F */ char reserved; /* 0x0030 */ s32 crc1; /* 0x0034 */ s32 crc2; /* 0x0038 */ s32 saveSlot; @@ -2098,7 +2095,7 @@ typedef struct SaveData { /* 0x12E0 */ b8 musicEnabled; /* 0x12E4 */ char unk_12E4[0x2]; /* 0x12E6 */ Vec3s savePos; - /* 0x12EC */ SaveMetadata metadata; + /* 0x12EC */ FileDisplayData metadata; /* 0x1304 */ char unk_1304[0x7C]; } SaveData; // size = 0x1380 diff --git a/include/dead.h b/include/dead.h deleted file mode 100644 index d416b0df960..00000000000 --- a/include/dead.h +++ /dev/null @@ -1,341 +0,0 @@ -#ifndef _DEAD_H_ -#define _DEAD_H_ - -#define gCameras dead_gCameras -#define evt_get_variable dead_evt_get_variable -#define evt_set_variable dead_evt_set_variable -#define evt_get_float_variable dead_evt_get_float_variable -#define sin_rad dead_sin_rad -#define cos_rad dead_cos_rad -#define evt_set_float_variable dead_evt_set_float_variable -#define fx_sparkles dead_fx_sparkles -#define gPlayerStatusPtr dead_gPlayerStatusPtr -#define set_main_pan_u dead_set_main_pan_u -#define set_main_pan_v dead_set_main_pan_v -#define set_aux_pan_u dead_set_aux_pan_u -#define set_aux_pan_v dead_set_aux_pan_v -#define get_npc_unsafe dead_get_npc_unsafe -#define atan2 dead_atan2 -#define clamp_angle dead_clamp_angle -#define rand_int dead_rand_int -#define gItemTable dead_gItemTable -#define set_screen_overlay_params_back dead_set_screen_overlay_params_back -#define get_npc_by_index dead_get_npc_by_index -#define dist2D dead_dist2D -#define sin_deg dead_sin_deg -#define cos_deg dead_cos_deg -#define sin_cos_deg dead_sin_cos_deg -#define gPlayerStatus dead_gPlayerStatus -#define is_point_within_region dead_is_point_within_region -#define npc_raycast_down_sides dead_npc_raycast_down_sides -#define basic_ai_check_player_dist dead_basic_ai_check_player_dist -#define fx_emote dead_fx_emote -#define ai_enemy_play_sound dead_ai_enemy_play_sound -#define npc_move_heading dead_npc_move_heading -#define get_clamped_angle_diff dead_get_clamped_angle_diff -#define get_enemy dead_get_enemy -#define npc_test_move_simple_with_slipping dead_npc_test_move_simple_with_slipping -#define get_screen_coords dead_get_screen_coords -#define basic_ai_suspend dead_basic_ai_suspend -#define gCurrentCameraID dead_gCurrentCameraID -#define add_vec2D_polar dead_add_vec2D_polar -#define gCurrentCamID dead_gCurrentCamID -#define gPartnerStatus dead_gPartnerStatus -#define get_npc_safe dead_get_npc_safe -#define sfx_adjust_env_sound_pos dead_sfx_adjust_env_sound_pos -#define fx_star_spirits_energy dead_fx_star_spirits_energy -#define heap_malloc dead_heap_malloc -#define heap_free dead_heap_free -#define general_heap_malloc dead_general_heap_malloc -#define update_lerp dead_update_lerp -#define create_shadow_type dead_create_shadow_type -#define fx_spirit_card dead_fx_spirit_card -#define dist3D dead_dist3D -#define subtract_hp dead_subtract_hp -#define get_entity_by_index dead_get_entity_by_index -#define fx_energy_orb_wave dead_fx_energy_orb_wave -#define fx_radial_shimmer dead_fx_radial_shimmer -#define set_screen_overlay_color dead_set_screen_overlay_color -#define set_screen_overlay_params_front dead_set_screen_overlay_params_front -#define fx_sun dead_fx_sun -#define set_message_images dead_set_message_images -#define general_heap_free dead_general_heap_free -#define decode_yay0 dead_decode_yay0 -#define load_asset_by_name dead_load_asset_by_name -#define gCollisionStatus dead_gCollisionStatus -#define switch_to_partner dead_switch_to_partner -#define set_npc_yaw dead_set_npc_yaw -#define disable_npc_shadow dead_disable_npc_shadow -#define func_800EB2A4 dead_func_800EB2A4 -#define partner_clear_player_tracking dead_partner_clear_player_tracking -#define sfx_play_sound_with_params dead_sfx_play_sound_with_params -#define sfx_get_spatialized_sound_params dead_sfx_get_spatialized_sound_params -#define npc_test_move_simple_without_slipping dead_npc_test_move_simple_without_slipping -#define spawn_surface_effects dead_spawn_surface_effects -#define get_item_entity dead_get_item_entity -#define gOverrideFlags dead_gOverrideFlags -#define set_message_text_var dead_set_message_text_var -#define gPlayerData dead_gPlayerData -#define gPartnerPopupProperties dead_gPartnerPopupProperties -#define increment_status_bar_disabled dead_increment_status_bar_disabled -#define decrement_status_bar_disabled dead_decrement_status_bar_disabled -#define sync_status_bar dead_sync_status_bar -#define set_max_star_power dead_set_max_star_power -#define get_current_map_settings dead_get_current_map_settings -#define gGameStatusPtr dead_gGameStatusPtr -#define guTranslateF dead_guTranslateF -#define get_model_from_list_index dead_get_model_from_list_index -#define get_model_list_index_from_tree_index dead_get_model_list_index_from_tree_index -#define guMtxCatF dead_guMtxCatF -#define guMtxIdentF dead_guMtxIdentF -#define basic_ai_wander_init dead_basic_ai_wander_init -#define basic_ai_wander dead_basic_ai_wander -#define basic_ai_loiter_init dead_basic_ai_loiter_init -#define basic_ai_loiter dead_basic_ai_loiter -#define basic_ai_found_player_jump_init dead_basic_ai_found_player_jump_init -#define basic_ai_found_player_jump dead_basic_ai_found_player_jump -#define basic_ai_chase_init dead_basic_ai_chase_init -#define basic_ai_chase dead_basic_ai_chase -#define basic_ai_lose_player dead_basic_ai_lose_player -#define gCurrentEncounter dead_gCurrentEncounter -#define fx_motion_blur_flame dead_fx_motion_blur_flame -#define wPartnerHudScripts dead_wPartnerHudScripts -#define wDisabledPartnerHudScripts dead_wDisabledPartnerHudScripts -#define create_standard_popup_menu dead_create_standard_popup_menu -#define hide_popup_menu dead_hide_popup_menu -#define destroy_popup_menu dead_destroy_popup_menu -#define heap_free dead_heap_free -#define entity_upgrade_block_hide_content dead_entity_upgrade_block_hide_content -#define fx_misc_particles dead_fx_misc_particles -#define transform_point dead_transform_point -#define gMainGfxPos dead_gMainGfxPos -#define osVirtualToPhysical dead_osVirtualToPhysical -#define nuGfxZBuffer dead_nuGfxZBuffer -#define nuGfxCfb_ptr dead_nuGfxCfb_ptr -#define guMtxF2L dead_guMtxF2L -#define mdl_get_copied_vertices dead_mdl_get_copied_vertices -#define mdl_get_copied_gfx dead_mdl_get_copied_gfx -#define gMatrixListPos dead_gMatrixListPos -#define gDisplayContext dead_gDisplayContext -#define fx_sun_undeclared dead_fx_sun_undeclared -#define LoadPath dead_LoadPath -#define GetNextPathPos dead_GetNextPathPos -#define queue_render_task dead_queue_render_task -#define dma_copy dead_dma_copy -#define create_worker_world dead_create_worker_world -#define GetEntryID dead_GetEntryID -#define SetMusicTrack dead_SetMusicTrack -#define FadeInMusic dead_FadeInMusic -#define RandInt dead_RandInt -#define PlayEffect_impl dead_PlayEffect_impl -#define DisablePlayerInput dead_DisablePlayerInput -#define ModifyColliderFlags dead_ModifyColliderFlags -#define PlayerMoveTo dead_PlayerMoveTo -#define InterpPlayerYaw dead_InterpPlayerYaw -#define PlaySoundAtCollider dead_PlaySoundAtCollider -#define MakeLerp dead_MakeLerp -#define UpdateLerp dead_UpdateLerp -#define RotateGroup dead_RotateGroup -#define func_802D2C14 dead_func_802D2C14 -#define GotoMap dead_GotoMap -#define UseExitHeading dead_UseExitHeading -#define ExitWalk dead_ExitWalk -#define GetLoadType dead_GetLoadType -#define EnterSavePoint dead_EnterSavePoint -#define EnterWalk dead_EnterWalk -#define SetSpriteShading dead_SetSpriteShading -#define SetCamLeadPlayer dead_SetCamLeadPlayer -#define SetCamPerspective dead_SetCamPerspective -#define SetCamBGColor dead_SetCamBGColor -#define SetCamEnabled dead_SetCamEnabled -#define MakeNpcs dead_MakeNpcs -#define ParentColliderToModel dead_ParentColliderToModel -#define EnableTexPanning dead_EnableTexPanning -#define SetTexPanOffset dead_SetTexPanOffset -#define DisablePlayerPhysics dead_DisablePlayerPhysics -#define UseSettingsFrom dead_UseSettingsFrom -#define SetPanTarget dead_SetPanTarget -#define SetCamDistance dead_SetCamDistance -#define SetCamPitch dead_SetCamPitch -#define SetCamPosA dead_SetCamPosA -#define SetCamPosB dead_SetCamPosB -#define SetCamSpeed dead_SetCamSpeed -#define PanToTarget dead_PanToTarget -#define WaitForCam dead_WaitForCam -#define ShowMessageAtWorldPos dead_ShowMessageAtWorldPos -#define ShowMessageAtScreenPos dead_ShowMessageAtScreenPos -#define GetPlayerPos dead_GetPlayerPos -#define SetPlayerJumpscale dead_SetPlayerJumpscale -#define PlayerJump1 dead_PlayerJump1 -#define DisablePartnerAI dead_DisablePartnerAI -#define InterpNpcYaw dead_InterpNpcYaw -#define SpeakToPlayer dead_SpeakToPlayer -#define SetPlayerAnimation dead_SetPlayerAnimation -#define ContinueSpeech dead_ContinueSpeech -#define EnablePartnerAI dead_EnablePartnerAI -#define ResetCam dead_ResetCam -#define GetPlayerActionState dead_GetPlayerActionState -#define ShowChoice dead_ShowChoice -#define SwitchMessage dead_SwitchMessage -#define CloseMessage dead_CloseMessage -#define EndSpeech dead_EndSpeech -#define SetNpcPos dead_SetNpcPos -#define AdjustCam dead_AdjustCam -#define EnableGroup dead_EnableGroup -#define SetNpcFlagBits dead_SetNpcFlagBits -#define BindNpcInteract dead_BindNpcInteract -#define EnableNpcShadow dead_EnableNpcShadow -#define SetNpcCollisionSize dead_SetNpcCollisionSize -#define GetNpcPos dead_GetNpcPos -#define func_802CF56C dead_func_802CF56C -#define PlayerFaceNpc dead_PlayerFaceNpc -#define NpcFaceNpc dead_NpcFaceNpc -#define SetNpcAnimation dead_SetNpcAnimation -#define PlaySoundAtNpc dead_PlaySoundAtNpc -#define BindNpcIdle dead_BindNpcIdle -#define WaitForPlayerInputEnabled dead_WaitForPlayerInputEnabled -#define SetNpcRotation dead_SetNpcRotation -#define EnableNpcAI dead_EnableNpcAI -#define PlaySoundAtPlayer dead_PlaySoundAtPlayer -#define GetCurrentPartnerID dead_GetCurrentPartnerID -#define SetPlayerPos dead_SetPlayerPos -#define RotateModel dead_RotateModel -#define TranslateModel dead_TranslateModel -#define NpcFlyTo dead_NpcFlyTo -#define FadeOutMusic dead_FadeOutMusic -#define SetNpcYaw dead_SetNpcYaw -#define ScaleGroup dead_ScaleGroup -#define ScaleModel dead_ScaleModel -#define UpdateColliderTransform dead_UpdateColliderTransform -#define TranslateGroup dead_TranslateGroup -#define InterruptUsePartner dead_InterruptUsePartner -#define SetNpcJumpscale dead_SetNpcJumpscale -#define SetPlayerActionState dead_SetPlayerActionState -#define NpcJump0 dead_NpcJump0 -#define PlaySound dead_PlaySound -#define ClearPartnerMoveHistory dead_ClearPartnerMoveHistory -#define PlayerJump dead_PlayerJump -#define StopSound dead_StopSound -#define NpcFacePlayer dead_NpcFacePlayer -#define FacePlayerTowardPoint dead_FacePlayerTowardPoint -#define SetTimeFreezeMode dead_SetTimeFreezeMode -#define ShowKeyChoicePopup dead_ShowKeyChoicePopup -#define CloseChoicePopup dead_CloseChoicePopup -#define AwaitPlayerLeave dead_AwaitPlayerLeave -#define RemoveKeyItemAt dead_RemoveKeyItemAt -#define MakeItemEntity dead_MakeItemEntity -#define RemoveItemEntity dead_RemoveItemEntity -#define IsPlayerWithin dead_IsPlayerWithin -#define IsPlayerOnValidFloor dead_IsPlayerOnValidFloor -#define GetPartnerInUse dead_GetPartnerInUse -#define MakeEntity dead_MakeEntity -#define Entity_SavePoint dead_Entity_SavePoint -#define PopSong dead_PopSong -#define PushSong dead_PushSong -#define ShowGotItem dead_ShowGotItem -#define GetBattleOutcome dead_GetBattleOutcome -#define DoNpcDefeat dead_DoNpcDefeat -#define SetCamProperties dead_SetCamProperties -#define ShowEmote dead_ShowEmote -#define SetEnemyFlagBits dead_SetEnemyFlagBits -#define AddKeyItem dead_AddKeyItem -#define BindNpcDefeat dead_BindNpcDefeat -#define BindNpcAI dead_BindNpcAI -#define GetSelfNpcID dead_GetSelfNpcID -#define GetOwnerEncounterTrigger dead_GetOwnerEncounterTrigger -#define SetSelfEnemyFlagBits dead_SetSelfEnemyFlagBits -#define BindNpcHit dead_BindNpcHit -#define PlaySoundAtModel dead_PlaySoundAtModel -#define DropItemEntity dead_DropItemEntity -#define GetValueByRef dead_GetValueByRef -#define SetValueByRef dead_SetValueByRef -#define AssignPanelFlag dead_AssignPanelFlag -#define Entity_HiddenPanel dead_Entity_HiddenPanel -#define ShakeCam dead_ShakeCam -#define StopTrackingSoundPos dead_StopTrackingSoundPos -#define IsStartingConversation dead_IsStartingConversation -#define ModifyGlobalOverrideFlags dead_ModifyGlobalOverrideFlags -#define FindKeyItem dead_FindKeyItem -#define Entity_SuperBlock dead_Entity_SuperBlock -#define AssignBlockFlag dead_AssignBlockFlag -#define AssignScript dead_AssignScript -#define ResetFromLava dead_ResetFromLava -#define EnemyNpcHit dead_EnemyNpcHit -#define EnemyNpcDefeat dead_EnemyNpcDefeat -#define BasicAI_Main dead_BasicAI_Main -#define ShowConsumableChoicePopup dead_ShowConsumableChoicePopup -#define RemoveItemAt dead_RemoveItemAt -#define GetAngleToPlayer dead_GetAngleToPlayer -#define GetNpcPointer dead_GetNpcPointer -#define RemoveNpc dead_RemoveNpc -#define EnableModel dead_EnableModel -#define PlaySoundAt dead_PlaySoundAt -#define GetModelCenter dead_GetModelCenter -#define SetSelfVar dead_SetSelfVar -#define GetSelfVar dead_GetSelfVar -#define GetPlayerTargetYaw dead_GetPlayerTargetYaw -#define HidePlayerShadow dead_HidePlayerShadow -#define SetPlayerImgFXFlags dead_SetPlayerImgFXFlags -#define UpdatePlayerImgFX dead_UpdatePlayerImgFX -#define SetPlayerFlagBits dead_SetPlayerFlagBits -#define func_80044238 dead_func_80044238 -#define SetCamType dead_SetCamType -#define SetCamPosC dead_SetCamPosC -#define SetNpcVar dead_SetNpcVar -#define StartBossBattle dead_StartBossBattle -#define Entity_MulticoinBlock dead_Entity_MulticoinBlock -#define Entity_BombableRock dead_Entity_BombableRock -#define OnPlayerFled dead_OnPlayerFled -#define GetAngleBetweenNPCs dead_GetAngleBetweenNPCs -#define AwaitPlayerApproach dead_AwaitPlayerApproach -#define BringPartnerOut dead_BringPartnerOut -#define PutPartnerAway dead_PutPartnerAway -#define SetNpcSpeed dead_SetNpcSpeed -#define NpcMoveTo dead_NpcMoveTo -#define SetCamTarget dead_SetCamTarget -#define CloneModel dead_CloneModel -#define MakeLocalVertexCopy dead_MakeLocalVertexCopy -#define SetModelCustomGfx dead_SetModelCustomGfx -#define SetCustomGfxBuilders dead_SetCustomGfxBuilders -#define FindItem dead_FindItem -#define SetNpcRotationPivot dead_SetNpcRotationPivot -#define SetNpcPaletteSwapMode dead_SetNpcPaletteSwapMode -#define SetNpcPaletteSwapping dead_SetNpcPaletteSwapping -#define BindNpcAux dead_BindNpcAux -#define Entity_ScriptSpring dead_Entity_ScriptSpring -#define Entity_HiddenYellowBlock dead_Entity_HiddenYellowBlock -#define GetNpcYaw dead_GetNpcYaw -#define PlayAmbientSounds dead_PlayAmbientSounds -#define SetTexPanner dead_SetTexPanner -#define DismissEffect dead_DismissEffect -#define Entity_Chest dead_Entity_Chest -#define snd_ambient_mute dead_snd_ambient_mute -#define GetPlayerAnimation dead_GetPlayerAnimation -#define SetPlayerSpeed dead_SetPlayerSpeed -#define SetItemPos dead_SetItemPos -#define NpcJump1 dead_NpcJump1 -#define SpeakToNpc dead_SpeakToNpc -#define AddStarPieces dead_AddStarPieces -#define Entity_Hammer3Block dead_Entity_Hammer3Block -#define CreatePushBlockGrid dead_CreatePushBlockGrid -#define SetPushBlock dead_SetPushBlock -#define GetSelfAnimationFromTable dead_GetSelfAnimationFromTable -#define EVS_NpcHitRecoil dead_EVS_NpcHitRecoil -#define SelfEnemyOverrideSyncPos dead_SelfEnemyOverrideSyncPos -#define SetNpcImgFXParams dead_SetNpcImgFXParams -#define SetGroupVisibility dead_SetGroupVisibility -#define Entity_HeartBlock dead_Entity_HeartBlock -#define GetCamDistance dead_GetCamDistance -#define GetCamPitch dead_GetCamPitch -#define GotoMapSpecial dead_GotoMapSpecial -#define SetNpcAux dead_SetNpcAux -#define PlayModelAnimation dead_PlayModelAnimation -#define SetAnimatedModelRootPosition dead_SetAnimatedModelRootPosition -#define LoadAnimatedModel dead_LoadAnimatedModel -#define SetAnimatorFlags dead_SetAnimatorFlags -#define GetAnimatedPositionByTreeIndex dead_GetAnimatedPositionByTreeIndex -#define GetAnimatedRotationByTreeIndex dead_GetAnimatedRotationByTreeIndex -#define SetEncounterStatusFlags dead_SetEncounterStatusFlags -#define Entity_YellowBlock dead_Entity_YellowBlock - -#endif diff --git a/include/effect_shims.h b/include/effect_shims.h index 4682bd4ea09..5d1e9d199d8 100644 --- a/include/effect_shims.h +++ b/include/effect_shims.h @@ -37,6 +37,7 @@ void shim_draw_msg(s32, s32, s32, s32, s32, s32); s32 shim_get_msg_width(s32, u16); void shim_mdl_get_shroud_tint_params(u8* r, u8* g, u8* b, u8* a); void shim_sfx_play_sound_at_position(s32 soundID, s32 value2, f32 posX, f32 posY, f32 posZ); +void shim_is_debug_panic(const char* message, const char* file, u32 line, const char* func); #define guRotateF shim_guRotateF #define guTranslateF shim_guTranslateF @@ -70,5 +71,6 @@ void shim_sfx_play_sound_at_position(s32 soundID, s32 value2, f32 posX, f32 posY #define get_msg_width shim_get_msg_width #define mdl_get_shroud_tint_params shim_mdl_get_shroud_tint_params #define sfx_play_sound_at_position shim_sfx_play_sound_at_position +#define is_debug_panic shim_is_debug_panic #endif diff --git a/include/enums.h b/include/enums.h index cb271c0dc71..ae48926a9bc 100644 --- a/include/enums.h +++ b/include/enums.h @@ -2321,6 +2321,7 @@ enum ItemSpawnModes { }; enum Locations { + // TODO: remove these LOCATION_TOAD_TOWN = 0x01, LOCATION_TOAD_TOWN_TUNNELS = 0x02, LOCATION_KOOPA_BROS_FORTRESS = 0x07, @@ -2357,6 +2358,8 @@ enum Locations { LOCATION_STARBORN_VALLEY = 0x2A, LOCATION_SHIVER_MOUNTAIN = 0x2B, LOCATION_MARIOS_HOUSE = 0x2C, + // WUA + LOCATION_HAMMER_HILLS, }; typedef enum ScreenTransition { @@ -3603,7 +3606,7 @@ enum BattleStatusFlags2 { BS_FLAGS2_PARTNER_TURN_USED = 0x00000004, // set after partner has used their action for this turn BS_FLAGS2_OVERRIDE_INACTIVE_PLAYER = 0x00000008, // override inactive player animations and effects BS_FLAGS2_OVERRIDE_INACTIVE_PARTNER = 0x00000010, // override inactive partner animations and effects - BS_FLAGS2_CANT_FLEE = 0x00000020, + BS_FLAGS2_CAN_FLEE = 0x00000020, BS_FLAGS2_PEACH_BATTLE = 0x00000040, BS_FLAGS2_STORED_TURBO_CHARGE_TURN = 0x00000100, // prevents turbo charge turns from decrementing on begin player turn BS_FLAGS2_DOING_JUMP_TUTORIAL = 0x00000200, @@ -6342,7 +6345,12 @@ enum WindowStyles { WINDOW_STYLE_20 = 20, WINDOW_STYLE_21 = 21, WINDOW_STYLE_22 = 22, - WINDOW_STYLE_MAX = 22, + WINDOW_STYLE_23 = 23, + WINDOW_STYLE_24 = 24, + WINDOW_STYLE_25 = 25, + WINDOW_STYLE_26 = 26, + WINDOW_STYLE_27 = 27, + WINDOW_STYLE_MAX = 27, }; // LANGUAGE_DEFAULT as 0 will be the first index into several arrays containing data based on the current language. diff --git a/include/functions.h b/include/functions.h index b50c9197748..78c53a58f3d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -17,7 +17,8 @@ void boot_idle(void* data); void boot_main(void* data); void is_debug_init(void); -void is_debug_panic(const char* message, char* file, s32 line); +void is_debug_panic(const char* message, const char* file, u32 line, const char* func); +char* is_debug_print(char* arg0, const char* str, size_t count); f32 signF(f32 val); @@ -34,17 +35,6 @@ u32 dma_copy(Addr romStart, Addr romEnd, void* vramDest); f32 rand_float(void); void copy_matrix(Matrix4f src, Matrix4f dest); -s8 set_global_byte(s32 index, s32 value); -s32 get_global_byte(s32 index); -s32 set_global_flag(s32 index); -s32 clear_global_flag(s32 index); -s32 get_global_flag(s32 index); -s8 set_area_byte(s32 index, s32 value); -s32 get_area_byte(s32 index); -s32 set_area_flag(s32 index); -s32 clear_area_flag(s32 index); -s32 get_area_flag(s32 index); - Shadow* get_shadow_by_index(s32 index); s32 get_time_freeze_mode(void); void render_player_model(void); @@ -197,7 +187,7 @@ s32 get_model_list_index_from_tree_index(s32 treeIndex); s32 get_transform_group_index(s32); void get_model_center_and_size(u16 modelID, f32* centerX, f32* centerY, f32* centerZ, f32* sizeX, f32* sizeY, f32* sizeZ); -s32 collision_main_above(void); +HitID collision_main_above(void); void collision_lava_reset_check_additional_overlaps(void); s32 player_test_lateral_overlap(s32, PlayerStatus*, f32*, f32*, f32*, f32, f32); Npc* peach_make_disguise_npc(s32 peachDisguise); @@ -214,7 +204,10 @@ s32 disable_player_input(void); void func_80027088(s32); void set_time_freeze_mode(s32); -s32 get_map_IDs_by_name(const char* mapName, s16* areaID, s16* mapID); +NODISCARD s32 get_map_IDs_by_name(const char* mapName, s16* areaID, s16* mapID); + +/// Same as \ref get_map_IDs_by_name, but will panic if the map doesn't exist. +void get_map_IDs_by_name_checked(const char* mapName, s16* areaID, s16* mapID); void transform_point(Matrix4f mtx, f32 inX, f32 inY, f32 inZ, f32 inS, f32* outX, f32* outY, f32* outZ, f32* outW); void try_player_footstep_sounds(s32 arg0); @@ -248,8 +241,8 @@ s32 phys_can_player_interact(void); void ai_enemy_play_sound(Npc* npc, s32 arg1, s32 arg2); -s32 player_test_move_without_slipping(PlayerStatus*, f32*, f32*, f32*, f32, f32, s32*); -s32 player_test_move_with_slipping(PlayerStatus* playerStatus, f32* posX, f32* posY, f32* posZ, f32 speed, f32 heading); +HitID player_test_move_without_slipping(PlayerStatus*, f32*, f32*, f32*, f32, f32, s32*); +HitID player_test_move_with_slipping(PlayerStatus* playerStatus, f32* posX, f32* posY, f32* posZ, f32 speed, f32 heading); s32 evt_get_variable(Evt* script, Bytecode var); s32 evt_set_variable(Evt* script, Bytecode var, s32 value); @@ -397,14 +390,13 @@ s32 resume_all_script(s32 id); s32 create_shadow_type(s32 type, f32 x, f32 y, f32 z); s32 is_point_within_region(s32 shape, f32 pointX, f32 pointY, f32 centerX, f32 centerY, f32 sizeX, f32 sizeZ); -PlayerData* get_player_data(void); b32 npc_raycast_down_around(s32, f32*, f32*, f32*, f32*, f32, f32); b32 npc_raycast_down_sides(s32 ignoreFlags, f32* posX, f32* posY, f32* posZ, f32* hitDepth); s32 npc_raycast_up(s32, f32*, f32*, f32*, f32*); s32 npc_raycast_up_corners(s32 ignoreFlags, f32* posX, f32* posY, f32* posZ, f32* hitDepth, f32 yaw, f32 radius); -s32 player_raycast_up_corners(PlayerStatus*, f32*, f32*, f32*, f32*, f32); -s32 player_raycast_below_cam_relative(PlayerStatus* playerStatus, f32* outX, f32* outY, f32* outZ, f32* outLength, +HitID player_raycast_up_corners(PlayerStatus*, f32*, f32*, f32*, f32*, f32); +HitID player_raycast_below_cam_relative(PlayerStatus* playerStatus, f32* outX, f32* outY, f32* outZ, f32* outLength, f32* hitRx, f32* hitRz, f32* hitDirX, f32* hitDirZ); b32 npc_test_move_taller_with_slipping(s32, f32*, f32*, f32*, f32, f32, f32, f32); b32 npc_test_move_simple_with_slipping(s32, f32*, f32*, f32*, f32, f32, f32, f32); @@ -455,7 +447,7 @@ void get_screen_overlay_params(s32, u8* type, f32* zoom); void set_screen_overlay_color(s32, u8, u8, u8); void set_screen_overlay_center(s32, s32, s32, s32); s32 rand_int(s32); -void sort_items(void); +void sort_consumables(void); s32 is_ability_active(s32 arg0); s32 is_starting_conversation(void); f32 update_lerp(s32 easing, f32 start, f32 end, s32 elapsed, s32 duration); @@ -824,8 +816,7 @@ void mdl_get_shroud_tint_params(u8* r, u8* g, u8* b, u8* a); s32 entity_base_block_idle(Entity* entity); void add_star_power(s32 amt); -s32 recover_hp(s32 amt); -s32 recover_fp(s32 amt); + s32 entity_can_collide_with_jumping_player(Entity* entity); void entity_base_block_init(Entity* entity); s32 entity_start_script(Entity* entity); @@ -916,8 +907,6 @@ void update_player(void); void enforce_hpfp_limits(void); s32 should_collider_allow_interact(s32); void show_coin_counter(void); -s32 add_item(s32 itemID); -s32 add_badge(s32 itemID); void hide_coin_counter_immediately(void); void hide_popup_menu(void); void destroy_popup_menu(void); @@ -942,15 +931,12 @@ void func_800F0CB0(s32, f32, f32, f32); void func_800F0D5C(void); void func_800F0D80(void); void func_800F102C(void); -s32 get_item_count(void); -s32 get_stored_empty_count(void); -s32 get_stored_count(void); -s32 get_item_empty_count(void); + + void shop_open_item_select_popup(s32 mode); void hide_coin_counter(void); void set_message_text_var(s32 msgID, s32 index); void set_message_int_var(s32 value, s32 index); -s32 store_item(s32 itemID); void open_status_bar_quickly(void); void show_immune_bonk(f32 x, f32 y, f32 z, s32, s32, s32); void show_primary_damage_popup(f32 x, f32 y, f32 z, s32 attack, s32 a); diff --git a/include/inventory.h b/include/inventory.h new file mode 100644 index 00000000000..f2831f74328 --- /dev/null +++ b/include/inventory.h @@ -0,0 +1,64 @@ +#ifndef _INVENTORY_H_ +#define _INVENTORY_H_ + +#include "common.h" + +/// Add `itemID` to player inventory and return inventory slot in which it was placed. +/// @returns the index of the new item in the player's inventory, or -1 if there was no room +s32 add_item(s32 itemID); + +/// Remove first instance of `itemID` found in player inventory. +/// @returns the index of the removed item in the player's inventory, or -1 none was found +s32 remove_item(s32 itemID); + +/// Check whether player has `itemID` in their inventory. +/// @returns boolean 'does player have item?' +b32 has_item(s32 itemID); + +/// Search player inventory for `itemID` and return first matching array index. +/// @returns the index of the given item in the player's inventory, or -1 if not found +s32 find_item(s32 itemID); + +/// Search player inventory for `itemID` and count the number matches. +/// @returns the number of items matching `itemID` +s32 count_item(s32 itemID); + +/// @returns whether the player has `itemID` as an equipped badge +b32 is_badge_equipped(s32 itemID); + +/// @returns the number of consumables in player inventory +s32 get_consumables_count(void); + +/// @returns the available room for consumables in player inventory +s32 get_consumables_empty(void); + +/// Add `itemID` to player storage and return slot in which it was placed. +/// @returns the index of the new item in player storage, or -1 if there was no room +s32 store_item(s32 itemID); + +/// @returns the number of consumables in player storage +s32 get_stored_count(void); + +/// @returns the available room in player storage +s32 get_stored_empty(void); + +/// @returns whether `itemID` is a Consumable +b32 item_is_consumable(s32 itemID); + +/// @returns whether `itemID` is a Badge +b32 item_is_badge(s32 itemID); + +/// @returns whether `itemID` is a Key Item +b32 item_is_key(s32 itemID); + +/// Recover player HP +/// @param amt the amount to recover, -1 for full, -2 for full and increase max by 1 (unused) +/// @return the new HP value, after recovery has been applied +s32 recover_hp(s32 amt); + +/// Recover player FP +/// @param amt the amount to recover, -1 for full, -2 for full and increase max by 1 (unused) +/// @return the new FP value, after recovery has been applied +s32 recover_fp(s32 amt); + +#endif diff --git a/include/macros.h b/include/macros.h index f2d6c2a234c..c1b8ad4afb3 100644 --- a/include/macros.h +++ b/include/macros.h @@ -58,21 +58,32 @@ // standardized padding macros for map overlays #define MAP_RODATA_PAD(n,name) const s32 N(rodata_pad_##name)[n] = {}; -#define MAP_STATIC_PAD(n,name) BSS s32 N(static_pad_##name)[n]; #define PHYSICAL_TO_VIRTUAL(addr) (void*)((u32)(addr) + 0x80000000) #define VIRTUAL_TO_PHYSICAL(addr) (u32)((u8*)(addr) - 0x80000000) -#ifdef DEBUG -#define IS_DEBUG_PANIC(statement, file, line) is_debug_panic(statement, file, line) -#else -#define IS_DEBUG_PANIC(statement, file, line) do {} while(TRUE) -#endif - -#define PANIC() IS_DEBUG_PANIC("Panic", __FILE__, __LINE__) +//#ifdef DEBUG +#define IS_DEBUG_PANIC(statement, file, line, func) is_debug_panic(statement, file, line, func) +/*#else +#define IS_DEBUG_PANIC(statement, file, line, func) do {} while(TRUE) +#endif*/ + +#define PANIC() IS_DEBUG_PANIC("Panic", __FILE__, __LINE__, __func__) +#define PANIC_MSG(msg, args...) \ + do { \ + char panicMsg[0x40]; \ + sprintf(panicMsg, msg, ##args); \ + IS_DEBUG_PANIC(msg, __FILE__, __LINE__, __func__); \ + } while (0) #define ASSERT(condition) \ if (!(condition)) { \ - IS_DEBUG_PANIC("Assertion failed: " #condition, __FILE__, __LINE__); \ + IS_DEBUG_PANIC("Assertion failed: " #condition, __FILE__, __LINE__, __func__); \ + } +#define ASSERT_MSG(condition, msg, args...) \ + if (!(condition)) { \ + char assertMsg[0x40]; \ + sprintf(assertMsg, msg, ##args); \ + IS_DEBUG_PANIC(assertMsg, __FILE__, __LINE__, __func__); \ } #define BADGE_MENU_PAGE(index) (&gPauseBadgesPages[index]) @@ -115,7 +126,7 @@ #define WORLD_ENTITY_HEAP_SIZE 0x17FF0 #define COLLISION_HEAP_SIZE 0x18000 #define GENERAL_HEAP_SIZE 0x54000 -#define SPRITE_HEAP_SIZE 0x40000 +#define SPRITE_HEAP_SIZE 0x60000 #define BATTLE_HEAP_SIZE 0x25800 #define FRAME_BUFFER_SIZE 0x25800 @@ -532,4 +543,101 @@ #define DMA_COPY_SEGMENT(segment) dma_copy(segment##_ROM_START, segment##_ROM_END, segment##_VRAM) +#ifdef __GNUC__ +#define NODISCARD __attribute__((warn_unused_result)) +#else +#define NODISCARD +#endif + +// Avoid compiler warnings for unused variables. +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif + +// Avoid undefined behaviour for non-returning functions. +#ifdef __GNUC__ +#define NORETURN __attribute__((noreturn)) +#else +#define NORETURN +#endif + +// Always inline a function. +#ifdef __GNUC__ +#define ALWAYS_INLINE inline __attribute__((always_inline)) +#else +#define ALWAYS_INLINE inline +#endif + +// Fall through a switch case. +#ifdef __GNUC__ +#define FALL_THROUGH __attribute__((fallthrough)) +#else +#define FALL_THROUGH +#endif + +// Use Og when compiling the function. +#ifdef __GNUC__ +#define OPTIMIZE_OG __attribute__((optimize("Og"))) +#else +#define OPTIMIZE_OG +#endif + +// Use Os when compiling the function. +#ifdef __GNUC__ +#define OPTIMIZE_OS __attribute__((optimize("Os"))) +#else +#define OPTIMIZE_OS +#endif + +// Use Ofast when compiling the function. +#ifdef __GNUC__ +#define OPTIMIZE_OFAST __attribute__((optimize("Ofast"))) +#else +#define OPTIMIZE_OFAST +#endif + +// Ignore 4-byte alignment in structs. +#ifdef __GNUC__ +#define PACKED __attribute__((packed)) +#else +#define PACKED +#endif + +// Align to 4-byte boundary. +#ifdef __GNUC__ +#define ALIGNED4 __attribute__((aligned(4))) +#else +#define ALIGNED4 +#endif + +// Align to 8-byte boundary (for DMA requirements). +#ifdef __GNUC__ +#define ALIGNED8 __attribute__((aligned(8))) +#else +#define ALIGNED8 +#endif + +// Align to 16-byte boundary (for audio lib requirements). +#ifdef __GNUC__ +#define ALIGNED16 __attribute__((aligned(16))) +#else +#define ALIGNED16 +#endif + +// Align to 32-byte boundary. +#ifdef __GNUC__ +#define ALIGNED32 __attribute__((aligned(32))) +#else +#define ALIGNED32 +#endif + +// Align to 64-byte boundary. +#ifdef __GNUC__ +#define ALIGNED64 __attribute__((aligned(64))) +#else +#define ALIGNED64 +#endif + #endif diff --git a/include/mapfs/drd_bt02_hit.h b/include/mapfs/drd_bt02_hit.h new file mode 100644 index 00000000000..2f443914846 --- /dev/null +++ b/include/mapfs/drd_bt02_hit.h @@ -0,0 +1,9 @@ +#define COLLIDER_drd_bt02_Root 0x2 +#define COLLIDER_drd_bt02_dai 0x1 +#define COLLIDER_drd_bt02_yuka 0x0 + + +#define ZONE_drd_bt02_Root 0x0 + + +#define ENTRY_drd_bt02_Entry_0 0 diff --git a/include/mapfs/drd_bt02_shape.h b/include/mapfs/drd_bt02_shape.h new file mode 100644 index 00000000000..f7190519756 --- /dev/null +++ b/include/mapfs/drd_bt02_shape.h @@ -0,0 +1,24 @@ +#define MODEL_drd_bt02_Root 0x17 +#define MODEL_drd_bt02_g55 0x4 +#define MODEL_drd_bt02_waku 0x0 +#define MODEL_drd_bt02_iwa1 0x1 +#define MODEL_drd_bt02_waku2 0x2 +#define MODEL_drd_bt02_iwa1 0x3 +#define MODEL_drd_bt02_dai 0x8 +#define MODEL_drd_bt02_kusa 0x5 +#define MODEL_drd_bt02_yuka 0x6 +#define MODEL_drd_bt02_waku1 0x7 +#define MODEL_drd_bt02_Split Model 0x9 +#define MODEL_drd_bt02_iwa1 0xA +#define MODEL_drd_bt02_Split Model 0xB +#define MODEL_drd_bt02_Split Model 0xC +#define MODEL_drd_bt02_kusa 0xD +#define MODEL_drd_bt02_Planar Grid Model 0xE +#define MODEL_drd_bt02_Planar Grid Model 0xF +#define MODEL_drd_bt02_RibFg0 0x10 +#define MODEL_drd_bt02_RibFg1 0x11 +#define MODEL_drd_bt02_Drawn Model 0x12 +#define MODEL_drd_bt02_Rib0 0x13 +#define MODEL_drd_bt02_Split Model 0x14 +#define MODEL_drd_bt02_Split Model 0x15 +#define MODEL_drd_bt02_Planar Grid Model 0x16 diff --git a/include/mapfs/ham_01_hit.h b/include/mapfs/ham_01_hit.h new file mode 100644 index 00000000000..7d6af11a638 --- /dev/null +++ b/include/mapfs/ham_01_hit.h @@ -0,0 +1,33 @@ +#define COLLIDER_ham_01_Root 0x18 +#define COLLIDER_ham_01_LZEast 0x0 +#define COLLIDER_ham_01_LZWest 0x1 +#define COLLIDER_ham_01_bush1 0x2 +#define COLLIDER_ham_01_bush2 0x3 +#define COLLIDER_ham_01_bush3 0x4 +#define COLLIDER_ham_01_tree1 0x5 +#define COLLIDER_ham_01_Mesh Collider 0x6 +#define COLLIDER_ham_01_Mesh Collider 0x7 +#define COLLIDER_ham_01_Mesh Collider 0x8 +#define COLLIDER_ham_01_Mesh Collider 0x9 +#define COLLIDER_ham_01_Mesh Collider 0xA +#define COLLIDER_ham_01_Mesh Collider 0xB +#define COLLIDER_ham_01_Mesh Collider 0xC +#define COLLIDER_ham_01_Mesh Collider 0xD +#define COLLIDER_ham_01_Signpost 0xE +#define COLLIDER_ham_01_Split Collider 0xF +#define COLLIDER_ham_01_Split Collider 0x10 +#define COLLIDER_ham_01_Split Collider 0x11 +#define COLLIDER_ham_01_Split Collider 0x12 +#define COLLIDER_ham_01_Split Collider 0x13 +#define COLLIDER_ham_01_Split Collider 0x14 +#define COLLIDER_ham_01_Split Collider 0x15 +#define COLLIDER_ham_01_Split Collider 0x16 +#define COLLIDER_ham_01_MeshCollider 0x17 + + +#define ZONE_ham_01_Root 0x1 +#define ZONE_ham_01_Mesh Collider 0x0 + + +#define ENTRY_ham_01_West 0 +#define ENTRY_ham_01_East 1 diff --git a/include/mapfs/ham_01_shape.h b/include/mapfs/ham_01_shape.h new file mode 100644 index 00000000000..48b1cde681b --- /dev/null +++ b/include/mapfs/ham_01_shape.h @@ -0,0 +1,83 @@ +#define MODEL_ham_01_Root 0x52 +#define MODEL_ham_01_treeleaves2 0x0 +#define MODEL_ham_01_tree1 0x1 +#define MODEL_ham_01_bush1 0x2 +#define MODEL_ham_01_bush2 0x3 +#define MODEL_ham_01_bush3 0x4 +#define MODEL_ham_01_WaterfallFront 0x5 +#define MODEL_ham_01_o528 0x6 +#define MODEL_ham_01_Planar Grid 0x7 +#define MODEL_ham_01_Split Model 0x8 +#define MODEL_ham_01_Split Model 0x9 +#define MODEL_ham_01_Ring 0xA +#define MODEL_ham_01_Split Model 0xB +#define MODEL_ham_01_Waterfall 0xC +#define MODEL_ham_01_Split Model 0xD +#define MODEL_ham_01_Split Model 0xE +#define MODEL_ham_01_Split Model 0xF +#define MODEL_ham_01_Planar Grid 0x10 +#define MODEL_ham_01_Planar Grid 0x11 +#define MODEL_ham_01_Planar Grid 0x12 +#define MODEL_ham_01_Planar Grid 0x13 +#define MODEL_ham_01_Planar Grid 0x14 +#define MODEL_ham_01_Planar Grid 0x15 +#define MODEL_ham_01_Split Model 0x16 +#define MODEL_ham_01_Split Model 0x17 +#define MODEL_ham_01_Planar Grid 0x18 +#define MODEL_ham_01_Planar Grid 0x19 +#define MODEL_ham_01_Planar Grid 0x1A +#define MODEL_ham_01_Planar Grid 0x1B +#define MODEL_ham_01_Water 0x1C +#define MODEL_ham_01_Cube 0x1D +#define MODEL_ham_01_Cube 0x1E +#define MODEL_ham_01_Planar Grid 0x1F +#define MODEL_ham_01_Cube 0x20 +#define MODEL_ham_01_Planar Grid 0x21 +#define MODEL_ham_01_b_e2 0x22 +#define MODEL_ham_01_Planar Grid 0x23 +#define MODEL_ham_01_o362 0x24 +#define MODEL_ham_01_Planar Grid 0x25 +#define MODEL_ham_01_Planar Grid 0x26 +#define MODEL_ham_01_Planar Grid 0x27 +#define MODEL_ham_01_Planar Grid 0x28 +#define MODEL_ham_01_Split Model 0x29 +#define MODEL_ham_01_Planar Grid 0x2A +#define MODEL_ham_01_b_e2 0x2B +#define MODEL_ham_01_LZpath 0x2C +#define MODEL_ham_01_Split Model 0x2D +#define MODEL_ham_01_Waterfallback 0x2E +#define MODEL_ham_01_Planar Grid 0x2F +#define MODEL_ham_01_Planar Grid 0x30 +#define MODEL_ham_01_Split Model 0x31 +#define MODEL_ham_01_Planar Grid 0x32 +#define MODEL_ham_01_Planar Grid 0x33 +#define MODEL_ham_01_Planar Grid 0x34 +#define MODEL_ham_01_o365 0x35 +#define MODEL_ham_01_Planar Grid 0x36 +#define MODEL_ham_01_Planar Grid 0x37 +#define MODEL_ham_01_Planar Grid 0x38 +#define MODEL_ham_01_Planar Grid 0x39 +#define MODEL_ham_01_o527 0x3A +#define MODEL_ham_01_o526 0x3B +#define MODEL_ham_01_Planar Grid 0x3C +#define MODEL_ham_01_Planar Grid 0x3D +#define MODEL_ham_01_Planar Grid 0x3E +#define MODEL_ham_01_o184 0x3F +#define MODEL_ham_01_o183 0x40 +#define MODEL_ham_01_Planar Grid 0x41 +#define MODEL_ham_01_Planar Grid 0x42 +#define MODEL_ham_01_Planar Grid 0x43 +#define MODEL_ham_01_Planar Grid 0x44 +#define MODEL_ham_01_o183 0x45 +#define MODEL_ham_01_o184 0x46 +#define MODEL_ham_01_Planar Grid 0x47 +#define MODEL_ham_01_Planar Grid 0x48 +#define MODEL_ham_01_Split Model 0x49 +#define MODEL_ham_01_Split Model 0x4A +#define MODEL_ham_01_Split Model 0x4B +#define MODEL_ham_01_Split Model 0x4C +#define MODEL_ham_01_Split Model 0x4D +#define MODEL_ham_01_Split Model 0x4E +#define MODEL_ham_01_Split Model 0x4F +#define MODEL_ham_01_Split Model 0x50 +#define MODEL_ham_01_Undercurrent 0x51 diff --git a/include/mapfs/mod_bt00_hit.h b/include/mapfs/mod_bt00_hit.h new file mode 100644 index 00000000000..253636a5023 --- /dev/null +++ b/include/mapfs/mod_bt00_hit.h @@ -0,0 +1,8 @@ +#define COLLIDER_mod_bt00_Root 0x1 +#define COLLIDER_mod_bt00_yuka 0x0 + + +#define ZONE_mod_bt00_Root 0x0 + + +#define ENTRY_mod_bt00_Entry_0 0 diff --git a/include/mapfs/mod_bt00_shape.h b/include/mapfs/mod_bt00_shape.h new file mode 100644 index 00000000000..7fa971cfcc1 --- /dev/null +++ b/include/mapfs/mod_bt00_shape.h @@ -0,0 +1,24 @@ +#define MODEL_mod_bt00_Root 0x17 +#define MODEL_mod_bt00_yuka2 0x0 +#define MODEL_mod_bt00_waku 0x1 +#define MODEL_mod_bt00_waku2 0x2 +#define MODEL_mod_bt00_yuka 0x3 +#define MODEL_mod_bt00_waku3 0x4 +#define MODEL_mod_bt00_o287 0x5 +#define MODEL_mod_bt00_o287 0x6 +#define MODEL_mod_bt00_audienceseats 0x7 +#define MODEL_mod_bt00_backwall 0x8 +#define MODEL_mod_bt00_curtaintopleft 0x9 +#define MODEL_mod_bt00_curtaintopmid 0xA +#define MODEL_mod_bt00_curtaintopright 0xB +#define MODEL_mod_bt00_curtainleft 0xC +#define MODEL_mod_bt00_curtainright 0xD +#define MODEL_mod_bt00_stepsleft 0xE +#define MODEL_mod_bt00_stepsright 0xF +#define MODEL_mod_bt00_boxleft 0x10 +#define MODEL_mod_bt00_boxright 0x11 +#define MODEL_mod_bt00_flagpole 0x12 +#define MODEL_mod_bt00_yoshineon 0x13 +#define MODEL_mod_bt00_papers 0x14 +#define MODEL_mod_bt00_jar 0x15 +#define MODEL_mod_bt00_bowserportrait 0x16 diff --git a/include/npc.h b/include/npc.h index 94ceb3cf06f..d02899de8d5 100644 --- a/include/npc.h +++ b/include/npc.h @@ -155,7 +155,7 @@ typedef struct NpcSettings { typedef struct ItemDrop { /* 0x00 */ s16 item; /* 0x02 */ s16 weight; - /* 0x04 */ s16 unk_04; + /* 0x04 */ s16 flagIdx; } ItemDrop; // size = 0x06 /// @brief Describes heart/flower drop chances after defeating an Npc in the overworld. @@ -190,18 +190,6 @@ typedef struct EnemyDrops { /* 0xB6 */ char unk_DE[2]; } EnemyDrops; // size = 0xB8 -// TODO unify this with EnemyDrops (union? requires changing tons of data) -typedef struct EnemyDropsFlat { - /* 0x00 */ u8 dropFlags; - /* 0x01 */ u8 itemDropChance; - /* 0x02 */ s16 itemDrops[8 * 3]; - /* 0x32 */ s16 heartDrops[8 * 4]; - /* 0x72 */ s16 flowerDrops[8 * 4]; - /* 0xB2 */ s16 minCoinBonus; - /* 0xB4 */ s16 maxCoinBonus; - /* 0xB6 */ char unk_DE[2]; -} EnemyDropsFlat; // size = 0xB8 - enum TerritoryShape { SHAPE_CYLINDER, SHAPE_RECT }; typedef struct { @@ -354,13 +342,7 @@ typedef struct Enemy { /* 0xDC */ s32 unk_DC; /* 0xE0 */ s16 savedNpcYaw; /* 0xE2 */ char unk_E2[6]; - #ifdef _DEAD_H_ - /* 0x0DC */ char unk_E8[32]; - /* 0x108 */ Vec3f unk_108; // Associated NPC Pos? - /* 0x114 */ f32 unk_114; - /* 0x118 */ f32 unk_118; - #endif -} Enemy; // size = 0xE8, dead size = 0x11C +} Enemy; // size = 0xE8 typedef struct Encounter { /* 0x00 */ s32 count; @@ -391,7 +373,7 @@ typedef struct EncounterStatus { /* 0x00D */ char unk_0D; /* 0x00E */ s16 coinsEarned; /* valid after battle */ /* 0x010 */ s8 instigatorValue; - /* 0x011 */ s8 allowFleeing; + /* 0x011 */ s8 forbidFleeing; /* 0x012 */ s8 scriptedBattle; ///< battle started by StartBattle but not by encounter /* 0x013 */ s8 dropWhackaBump; /* 0x014 */ s32 songID; diff --git a/include/qsort.h b/include/qsort.h new file mode 100644 index 00000000000..9ab426bace3 --- /dev/null +++ b/include/qsort.h @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2013, 2017 Alexey Tourbin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * This is a traditional Quicksort implementation which mostly follows + * [Sedgewick 1978]. Sorting is performed entirely on array indices, + * while actual access to the array elements is abstracted out with the + * user-defined `LESS` and `SWAP` primitives. + * + * Synopsis: + * QSORT(N, LESS, SWAP); + * where + * N - the number of elements in A[]; + * LESS(i, j) - compares A[i] to A[j]; + * SWAP(i, j) - exchanges A[i] with A[j]. + */ + +#ifndef QSORT_H +#define QSORT_H + +/* Sort 3 elements. */ +#define Q_SORT3(q_a1, q_a2, q_a3, Q_LESS, Q_SWAP) \ +do { \ + if (Q_LESS(q_a2, q_a1)) { \ + if (Q_LESS(q_a3, q_a2)) \ + Q_SWAP(q_a1, q_a3); \ + else { \ + Q_SWAP(q_a1, q_a2); \ + if (Q_LESS(q_a3, q_a2)) \ + Q_SWAP(q_a2, q_a3); \ + } \ + } \ + else if (Q_LESS(q_a3, q_a2)) { \ + Q_SWAP(q_a2, q_a3); \ + if (Q_LESS(q_a2, q_a1)) \ + Q_SWAP(q_a1, q_a2); \ + } \ +} while (0) + +/* Partition [q_l,q_r] around a pivot. After partitioning, + * [q_l,q_j] are the elements that are less than or equal to the pivot, + * while [q_i,q_r] are the elements greater than or equal to the pivot. */ +#define Q_PARTITION(q_l, q_r, q_i, q_j, Q_UINT, Q_LESS, Q_SWAP) \ +do { \ + /* The middle element, not to be confused with the median. */ \ + Q_UINT q_m = q_l + ((q_r - q_l) >> 1); \ + /* Reorder the second, the middle, and the last items. \ + * As [Edelkamp Weiss 2016] explain, using the second element \ + * instead of the first one helps avoid bad behaviour for \ + * decreasingly sorted arrays. This method is used in recent \ + * versions of gcc's std::sort, see gcc bug 58437#c13, although \ + * the details are somewhat different (cf. #c14). */ \ + Q_SORT3(q_l + 1, q_m, q_r, Q_LESS, Q_SWAP); \ + /* Place the median at the beginning. */ \ + Q_SWAP(q_l, q_m); \ + /* Partition [q_l+2, q_r-1] around the median which is in q_l. \ + * q_i and q_j are initially off by one, they get decremented \ + * in the do-while loops. */ \ + q_i = q_l + 1; q_j = q_r; \ + while (1) { \ + do q_i++; while (Q_LESS(q_i, q_l)); \ + do q_j--; while (Q_LESS(q_l, q_j)); \ + if (q_i >= q_j) break; /* Sedgewick says "until j < i" */ \ + Q_SWAP(q_i, q_j); \ + } \ + /* Compensate for the i==j case. */ \ + q_i = q_j + 1; \ + /* Put the median to its final place. */ \ + Q_SWAP(q_l, q_j); \ + /* The median is not part of the left subfile. */ \ + q_j--; \ +} while (0) + +/* Insertion sort is applied to small subfiles - this is contrary to + * Sedgewick's suggestion to run a separate insertion sort pass after + * the partitioning is done. The reason I don't like a separate pass + * is that it triggers extra comparisons, because it can't see that the + * medians are already in their final positions and need not be rechecked. + * Since I do not assume that comparisons are cheap, I also do not try + * to eliminate the (q_j > q_l) boundary check. */ +#define Q_INSERTION_SORT(q_l, q_r, Q_UINT, Q_LESS, Q_SWAP) \ +do { \ + Q_UINT q_i, q_j; \ + /* For each item starting with the second... */ \ + for (q_i = q_l + 1; q_i <= q_r; q_i++) \ + /* move it down the array so that the first part is sorted. */ \ + for (q_j = q_i; q_j > q_l && (Q_LESS(q_j, q_j - 1)); q_j--) \ + Q_SWAP(q_j, q_j - 1); \ +} while (0) + +/* When the size of [q_l,q_r], i.e. q_r-q_l+1, is greater than or equal to + * Q_THRESH, the algorithm performs recursive partitioning. When the size + * drops below Q_THRESH, the algorithm switches to insertion sort. + * The minimum valid value is probably 5 (with 5 items, the second and + * the middle items, the middle itself being rounded down, are distinct). */ +#define Q_THRESH 16 + +/* The main loop. */ +#define Q_LOOP(Q_UINT, Q_N, Q_LESS, Q_SWAP) \ +do { \ + Q_UINT q_l = 0; \ + Q_UINT q_r = (Q_N) - 1; \ + Q_UINT q_sp = 0; /* the number of frames pushed to the stack */ \ + struct { Q_UINT q_l, q_r; } \ + /* On 32-bit platforms, to sort a "char[3GB+]" array, \ + * it may take full 32 stack frames. On 64-bit CPUs, \ + * though, the address space is limited to 48 bits. \ + * The usage is further reduced if Q_N has a 32-bit type. */ \ + q_st[sizeof(Q_UINT) > 4 && sizeof(Q_N) > 4 ? 48 : 32]; \ + while (1) { \ + if (q_r - q_l + 1 >= Q_THRESH) { \ + Q_UINT q_i, q_j; \ + Q_PARTITION(q_l, q_r, q_i, q_j, Q_UINT, Q_LESS, Q_SWAP); \ + /* Now have two subfiles: [q_l,q_j] and [q_i,q_r]. \ + * Dealing with them depends on which one is bigger. */ \ + if (q_j - q_l >= q_r - q_i) \ + Q_SUBFILES(q_l, q_j, q_i, q_r); \ + else \ + Q_SUBFILES(q_i, q_r, q_l, q_j); \ + } \ + else { \ + Q_INSERTION_SORT(q_l, q_r, Q_UINT, Q_LESS, Q_SWAP); \ + /* Pop subfiles from the stack, until it gets empty. */ \ + if (q_sp == 0) break; \ + q_sp--; \ + q_l = q_st[q_sp].q_l; \ + q_r = q_st[q_sp].q_r; \ + } \ + } \ +} while (0) + +/* The missing part: dealing with subfiles. + * Assumes that the first subfile is not smaller than the second. */ +#define Q_SUBFILES(q_l1, q_r1, q_l2, q_r2) \ +do { \ + /* If the second subfile is only a single element, it needs \ + * no further processing. The first subfile will be processed \ + * on the next iteration (both subfiles cannot be only a single \ + * element, due to Q_THRESH). */ \ + if (q_l2 == q_r2) { \ + q_l = q_l1; \ + q_r = q_r1; \ + } \ + else { \ + /* Otherwise, both subfiles need processing. \ + * Push the larger subfile onto the stack. */ \ + q_st[q_sp].q_l = q_l1; \ + q_st[q_sp].q_r = q_r1; \ + q_sp++; \ + /* Process the smaller subfile on the next iteration. */ \ + q_l = q_l2; \ + q_r = q_r2; \ + } \ +} while (0) + +/* And now, ladies and gentlemen, may I proudly present to you... */ +#define QSORT(Q_N, Q_LESS, Q_SWAP) \ +do { \ + if ((Q_N) > 1) \ + /* We could check sizeof(Q_N) and use "unsigned", but at least \ + * on x86_64, this has the performance penalty of up to 5%. */ \ + Q_LOOP(unsigned long, Q_N, Q_LESS, Q_SWAP); \ +} while (0) + +#endif + +/* ex:set ts=8 sts=4 sw=4 noet: */ diff --git a/include/script_api/common.h b/include/script_api/common.h index b1ab50cb659..4239d43baf7 100644 --- a/include/script_api/common.h +++ b/include/script_api/common.h @@ -1163,36 +1163,21 @@ API_CALLABLE(RemoveKeyItemAt); /// @evtapi API_CALLABLE(RemoveItemAt); -/// @evtapi -API_CALLABLE(AddKeyItem); - /// @evtapi API_CALLABLE(CloseChoicePopup); /// @evtapi -API_CALLABLE(HasKeyItem); +API_CALLABLE(HasItem); /// @evtapi -API_CALLABLE(FindKeyItem); +API_CALLABLE(FindItem); /// @evtapi API_CALLABLE(AddItem); -/// @evtapi -API_CALLABLE(ClearVariable); - -/// @evtapi -API_CALLABLE(FindItem); - /// @evtapi API_CALLABLE(RemoveItem); -/// @evtapi -API_CALLABLE(CountFortessKeys); - -/// @evtapi -API_CALLABLE(RemoveFortressKeys); - /// @evtapi API_CALLABLE(MakeItemEntity); @@ -1205,12 +1190,6 @@ API_CALLABLE(DropResizableItemEntity); /// @evtapi API_CALLABLE(RemoveItemEntity); -/// @evtapi -API_CALLABLE(AddBadge); - -/// @evtapi -API_CALLABLE(RemoveBadge); - /// @evtapi API_CALLABLE(SetItemPos); diff --git a/include/variables.h b/include/variables.h index 163a17f5270..3f189bfb49f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -12,8 +12,8 @@ extern CollisionStatus gCollisionStatus; extern GameStatus gGameStatus; extern GameStatus* gGameStatusPtr; extern u32 gRandSeed; -extern ItemData gItemTable[365]; -extern MoveData gMoveTable[185]; +extern ItemData gItemTable[]; +extern MoveData gMoveTable[]; extern s32 gBattleState; extern BattleStatus gBattleStatus; @@ -22,6 +22,7 @@ extern s32 gDefeatedBattleSubstate; extern s32 gBattleSubState; extern s32 gDefeatedBattleState; extern s32 gCurrentBattleID; +extern s32 gCurrentStageID; extern s32 D_800DC4E0; extern struct Battle* gOverrideBattlePtr; @@ -30,19 +31,13 @@ extern s32 gCurrentCameraID; extern CollisionData gCollisionData; -extern f32 GravityParamsStartFall[]; -extern s16 FootstepSoundSelector; extern u8* gBackgroundTintModePtr; extern s32 gEntityHideMode; -extern s32 D_8010C92C; -extern s32 D_8010C950; extern HiddenPanelsData gCurrentHiddenPanels; extern BackgroundHeader gBackgroundImage; -extern f32 D_800F7B74; - extern CollisionData gZoneCollisionData; // Animation related diff --git a/include/vars_access.h b/include/vars_access.h new file mode 100644 index 00000000000..c2dbe1cf8ac --- /dev/null +++ b/include/vars_access.h @@ -0,0 +1,49 @@ +#ifndef _VARS_ACCESS_H_ +#define _VARS_ACCESS_H_ + +#include "common.h" + +/// Set value of saved game byte +/// @param index can be either a global byte reference (GB_*) or index +/// @param value new value for the saved byte +/// @returns previous value of the saved byte +s8 set_global_byte(s32 index, s32 value); + +/// Get value of saved game byte +/// @param index can be either a global byte reference (GB_*) or index +/// @returns value of the saved byte +s32 get_global_byte(s32 index); + +/// Store a short in two consecutive saved game bytes +/// @param index can be either a global byte reference (GB_*) or index to the lowest byte +/// @param value new value for the saved short +/// @returns previous value of the saved short +s16 set_global_short(s32 index, s32 value); + +/// Retrieve a short from two consecutive saved game bytes +/// @param index can be either a global byte reference (GB_*) or index to the lowest byte +/// @returns value of the saved short +s16 get_global_short(s32 index); + +/// Store a word in four consecutive saved game bytes +/// @param index can be either a global byte reference (GB_*) or index to the lowest byte +/// @param value new value for the saved word +/// @returns previous value of the saved word +s32 set_global_word(s32 index, s32 value); + +/// Retrieve a word from four consecutive saved game bytes +/// @param index can be either a global byte reference (GB_*) or index to the lowest byte +/// @returns value of the saved word +s32 get_global_word(s32 index); + +s32 set_global_flag(s32 index); +s32 clear_global_flag(s32 index); +s32 get_global_flag(s32 index); + +s8 set_area_byte(s32 index, s32 value); +s32 get_area_byte(s32 index); +s32 set_area_flag(s32 index); +s32 clear_area_flag(s32 index); +s32 get_area_flag(s32 index); + +#endif diff --git a/run b/run new file mode 100755 index 00000000000..81121243ec8 --- /dev/null +++ b/run @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +import os +import subprocess +import shutil +import platform + +ROM = "ver/current/build/papermario.z64" +EMULATOR_PATHS = [ + "cen64", + "ares", + "mupen64plus", + "retroarch", + "Project64", +] +emulator = None + +for command in EMULATOR_PATHS: + if shutil.which(command) is not None: + emulator = command + break + + # WSl compat + command += ".exe" + if shutil.which(command) is not None: + emulator = command + break + +def is_wsl(v: str = platform.uname().release) -> int: + """ + detects if Python is running in WSL + """ + + if v.endswith("-Microsoft"): + return 1 + elif v.endswith("microsoft-standard-WSL2"): + return 2 + + return 0 + +def windows_path(path): + return subprocess.check_output(["wslpath", "-w", path]).decode().strip() + +def main(): + if os.system(f"ninja {ROM}") != 0: + print("error: build failed") + return + + wsl = is_wsl() != 0 + rom = windows_path(ROM) if wsl else ROM + + if emulator is not None: + subprocess.run([emulator, rom]) + else: + print("error: no emulator found") + if wsl: + print(" hint: add an emulator to your PATH") + +if __name__ == "__main__": + main() diff --git a/shell.nix b/shell.nix index 769732bf04e..90bbfa5e7bf 100644 --- a/shell.nix +++ b/shell.nix @@ -60,6 +60,8 @@ in pkgsCross.mkShell { python3Packages.virtualenv cargo rustc + ccache + gdb ]); buildInputs = (with pkgsCross; [ gcc diff --git a/src/101b90_len_8f0.c b/src/101b90_len_8f0.c index f6176e133c4..fdba020694b 100644 --- a/src/101b90_len_8f0.c +++ b/src/101b90_len_8f0.c @@ -22,16 +22,13 @@ BSS s32 spr_asset_entry[2]; BSS s32 PlayerRasterLoadDescBuffer[101]; //NOTE: maximum rasters supported for a single player sprite is 101 BSS s32 PlayerRasterLoadDescNumLoaded; BSS s32 PlayerRasterLoadDescBeginSpriteIndex[SPR_Peach3]; //TODO size linked to number of player sprites -BSS s32 D_802D0084[3]; // unused? BSS s32 PlayerRasterLoadDesc[0x2E0]; // correct length? BSS PlayerRastersHeader PlayerRasterHeader; -BSS s32 D_802E0C1C; // unused BSS s32 PlayerSpriteRasterSets[SPR_Peach3 + 1]; //TODO size linked to number of player sprites BSS s32 PlayerRasterCacheSize; BSS s32 PlayerRasterMaxSize; BSS s32 SpriteDataHeader[3]; -BSS s32 D_802E0C6C; // unused? BSS PlayerSpriteCacheEntry PlayerRasterCache[18]; #define ALIGN4(v) (((u32)(v) >> 2) << 2) @@ -102,6 +99,7 @@ SpriteAnimData* spr_load_sprite(s32 idx, s32 isPlayerSprite, s32 useTailAlloc) { } else { animData = _heap_malloc(&heap_spriteHead, *ptr1); } + ASSERT_MSG(animData, "out of sprite memory"); decode_yay0(data, animData); general_heap_free(data); diff --git a/src/23680.c b/src/23680.c index df99a530aa0..bb04044ea56 100644 --- a/src/23680.c +++ b/src/23680.c @@ -1,13 +1,13 @@ #include "common.h" +#include "vars_access.h" #include "npc.h" #include "effects.h" extern s32 gLastRenderTaskCount; void spawn_drops(Enemy* enemy) { - PlayerData* playerData = &gPlayerData; EncounterStatus* encounter = &gCurrentEncounter; - EnemyDropsFlat* drops = (EnemyDropsFlat*) enemy->drops; // TODO: unify EnemyDrops / EnemyDropsFlat + EnemyDrops* drops = enemy->drops; Npc* npc = get_npc_unsafe(enemy->npcID); Camera* camera = &gCameras[gCurrentCameraID]; s32 pickupDelay; @@ -19,16 +19,15 @@ void spawn_drops(Enemy* enemy) { f32 chance; f32 attempts; f32 fraction; - s32 maxCoinBonus; s32 minCoinBonus; - s32 tempMax; + s32 maxCoinBonus; s32 spawnCounter; s32 dropCount; s32 totalWeight; + s32 curWeight; s32 angle; s32 angleMult; s32 i, j; - s32 flags; availableShadows = 0; for (i = 0; i < MAX_SHADOWS; i++) { @@ -47,47 +46,42 @@ void spawn_drops(Enemy* enemy) { angleMult = 0; pickupDelay = 0; + // try dropping items + dropCount = drops->itemDropChance; if (drops->itemDropChance > rand_int(100)) { - tempMax = 0; + totalWeight = 0; - for (i = 0; i < 8; i++) { - if (drops->itemDrops[3 * i] != 0) { - tempMax += drops->itemDrops[3 * i + 1]; + for (i = 0; i < ARRAY_COUNT(drops->itemDrops); i++) { + if (drops->itemDrops[i].item != ITEM_NONE) { + totalWeight += drops->itemDrops[i].weight; } else { break; } } - totalWeight = 0; - dropCount = rand_int(tempMax); + curWeight = 0; + dropCount = rand_int(totalWeight); itemToDrop = ITEM_NONE; - for (i = 0; i < 8; i++) { - if (drops->itemDrops[3 * i] == 0) { + for (i = 0; i < ARRAY_COUNT(drops->itemDrops); i++) { + if (drops->itemDrops[i].item == ITEM_NONE) { break; } - totalWeight += drops->itemDrops[3 * i + 1]; - if (drops->itemDrops[3 * i + 2] > 0) { - if (get_global_flag(EVT_INDEX_OF_GAME_FLAG(GF_Unused_NPC_6C) + drops->itemDrops[3 * i + 2])) { + curWeight += drops->itemDrops[i].weight; + if (drops->itemDrops[i].flagIdx > 0) { + if (get_global_flag(EVT_INDEX_OF_GAME_FLAG(GF_SpawnedItemDrop_00) + drops->itemDrops[i].flagIdx)) { continue; } } - if (totalWeight >= dropCount) { - itemToDrop = drops->itemDrops[3 * i]; - do {} while (0); // TODO required to match + if (curWeight >= dropCount) { + itemToDrop = drops->itemDrops[i].weight; break; } } - // TODO this bullshit is required to match - flags = enemy->flags; - if (flags) { - flags = 0; - } - if (itemToDrop != ITEM_NONE) { make_item_entity(itemToDrop, x, y, z, ITEM_SPAWN_MODE_BATTLE_REWARD, pickupDelay, angle + angleMult * 360, 0); spawnCounter++; @@ -99,8 +93,8 @@ void spawn_drops(Enemy* enemy) { spawnCounter = 0; } - if (drops->itemDrops[3 * i + 2] >= 0) { - set_global_flag(EVT_INDEX_OF_GAME_FLAG(GF_SpawnedItemDrop_00) + drops->itemDrops[3 * i + 2]); + if (drops->itemDrops[i].flagIdx >= 0) { + set_global_flag(EVT_INDEX_OF_GAME_FLAG(GF_SpawnedItemDrop_00) + drops->itemDrops[i].flagIdx); } } } @@ -118,19 +112,21 @@ void spawn_drops(Enemy* enemy) { } } + // determine number of hearts to drop + dropCount = 0; itemToDrop = ITEM_NONE; - fraction = playerData->curHP / (f32) playerData->curMaxHP; + fraction = gPlayerData.curHP / (f32) gPlayerData.curMaxHP; - for (i = 0; i < 8; i++) { - attempts = drops->heartDrops[4 * i]; - threshold = drops->heartDrops[4 * i + 1]; + for (i = 0; i < ARRAY_COUNT(drops->heartDrops); i++) { + attempts = drops->heartDrops[i].cutoff; + threshold = drops->heartDrops[i].generalChance; attempts /= 32767.0f; threshold /= 32767.0f; if (fraction <= attempts && rand_int(100) <= threshold * 100.0f) { - attempts = drops->heartDrops[4 * i + 2]; - chance = drops->heartDrops[4 * i + 3]; + attempts = drops->heartDrops[i].attempts; + chance = drops->heartDrops[i].chancePerAttempt; chance /= 32767.0f; for (j = 0; j < attempts; j++) { if (rand_int(100) <= chance * 100.0f) { @@ -147,9 +143,13 @@ void spawn_drops(Enemy* enemy) { if (enemy->flags & ENEMY_FLAG_NO_DROPS) { dropCount = 0; } + + // spawn as many of the heart drops as possible + if (dropCount != 0) { itemToDrop = ITEM_HEART; } + if (dropCount * 2 > availableRenderTasks) { dropCount = availableRenderTasks / 2; } @@ -172,19 +172,26 @@ void spawn_drops(Enemy* enemy) { } } + // determine number of flowers to drop + dropCount = 0; itemToDrop = ITEM_NONE; - fraction = playerData->curFP / (f32) playerData->curMaxFP; - for (i = 0; i < 8; i++) { - attempts = drops->flowerDrops[4 * i + 0]; - threshold = drops->flowerDrops[4 * i + 1]; + if (gPlayerData.curMaxFP > 0) { + fraction = gPlayerData.curFP / (f32) gPlayerData.curMaxFP; + } else { + fraction = 0.0; + } + + for (i = 0; i < ARRAY_COUNT(drops->flowerDrops); i++) { + attempts = drops->flowerDrops[i].cutoff; + threshold = drops->flowerDrops[i].generalChance; attempts /= 32767.0f; threshold /= 32767.0f; if (fraction <= attempts && rand_int(100) <= threshold * 100.0f) { - attempts = drops->flowerDrops[4 * i + 2]; - chance = drops->flowerDrops[4 * i + 3]; + attempts = drops->flowerDrops[i].attempts; + chance = drops->flowerDrops[i].chancePerAttempt; chance /= 32767.0f; for (j = 0; j < attempts; j++) { if (rand_int(100) <= chance * 100.0f) { @@ -201,9 +208,13 @@ void spawn_drops(Enemy* enemy) { if (enemy->flags & ENEMY_FLAG_NO_DROPS) { dropCount = 0; } + + // spawn as many of the flower drops as possible + if (dropCount != 0) { itemToDrop = ITEM_FLOWER_POINT; } + if (dropCount * 2 > availableRenderTasks) { dropCount = availableRenderTasks / 2; } @@ -226,21 +237,24 @@ void spawn_drops(Enemy* enemy) { } } + // determine number of coins to drop + itemToDrop = ITEM_COIN; - do {} while (0); - minCoinBonus = drops->minCoinBonus; - tempMax = drops->maxCoinBonus; + //TODO maybe use an ASSERT here and forgo the odd support for reversing min/max if (drops->maxCoinBonus < drops->minCoinBonus) { - dropCount = minCoinBonus; - minCoinBonus = tempMax; - tempMax = dropCount; + // swap if max < min + maxCoinBonus = drops->minCoinBonus; + minCoinBonus = drops->maxCoinBonus; + } else { + minCoinBonus = drops->minCoinBonus; + maxCoinBonus = drops->maxCoinBonus; } if (minCoinBonus < 0) { - dropCount = rand_int(tempMax - minCoinBonus) + minCoinBonus; + dropCount = rand_int(maxCoinBonus - minCoinBonus) + minCoinBonus; } else { - dropCount = tempMax - minCoinBonus; + dropCount = maxCoinBonus - minCoinBonus; if (dropCount != 0) { dropCount = rand_int(dropCount) + minCoinBonus; } else { @@ -273,6 +287,9 @@ void spawn_drops(Enemy* enemy) { if (dropCount * 2 > availableRenderTasks) { dropCount = availableRenderTasks / 2; } + + // spawn as many of the coin drops as possible + availableRenderTasks -= 2 * dropCount; if (dropCount > availableShadows) { diff --git a/src/77480.c b/src/77480.c index b32aa70ba43..e051ea402a6 100644 --- a/src/77480.c +++ b/src/77480.c @@ -1,9 +1,10 @@ #include "common.h" #include "ld_addrs.h" -#include "world/actions.h" +#include "world/disguise.h" #include "sprite.h" #include "world/partner/watt.h" #include "sprite/player.h" +#include "dx/debug_menu.h" #ifdef SHIFT #define inspect_icon_VRAM inspect_icon_VRAM @@ -28,19 +29,17 @@ extern Addr inspect_icon_ROM_START; extern Addr inspect_icon_ROM_END; #endif -SHIFT_BSS UNK_FUN_PTR(ISpyNotificationCallback); -SHIFT_BSS UNK_FUN_PTR(PulseStoneNotificationCallback); -SHIFT_BSS UNK_FUN_PTR(TalkNotificationCallback); -SHIFT_BSS UNK_FUN_PTR(InteractNotificationCallback); +SHIFT_BSS void (*ISpyNotificationCallback)(void); +SHIFT_BSS void (*PulseStoneNotificationCallback)(void); +SHIFT_BSS void (*TalkNotificationCallback)(void); +SHIFT_BSS void (*InteractNotificationCallback)(void); SHIFT_BSS s32 D_8010C950; -extern f32 D_800F7B48; -extern s32 D_800F7B4C; extern s32 WorldTattleInteractionID; -s32 player_raycast_down(f32*, f32*, f32*, f32*); -s32 player_raycast_up_corner(f32* x, f32* y, f32* z, f32* length); -s32 player_raycast_general(s32, f32, f32, f32, f32, f32, f32, f32*, f32*, f32*, f32*, f32*, f32*, f32*); +HitID player_raycast_down(f32*, f32*, f32*, f32*); +HitID player_raycast_up_corner(f32* x, f32* y, f32* z, f32* length); +HitID player_raycast_general(s32, f32, f32, f32, f32, f32, f32, f32*, f32*, f32*, f32*, f32*, f32*, f32*); void player_get_slip_vector(f32* outX, f32* outY, f32 x, f32 y, f32 nX, f32 nY); void phys_update_standard(void); void phys_update_lava_reset(void); @@ -65,7 +64,7 @@ void appendGfx_player_spin(void* data); void update_player_shadow(void); s32 partner_use_ability(void); -s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, f32* outLength, f32* hitRx, f32* hitRz, +HitID player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, f32* outLength, f32* hitRx, f32* hitRz, f32* hitDirX, f32* hitDirZ) { f32 x, y, z, length; f32 inputX, inputY, inputZ, inputLength; @@ -74,7 +73,7 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, f32 temp_f20; f32 cosTemp; f32 sinTemp; - s32 hitObjectID; + s32 hitID; s32 ret; *hitRx = 0.0f; @@ -94,9 +93,9 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, y = inputY; z = inputZ + cosTemp; length = inputLength; - hitObjectID = player_raycast_down(&x, &y, &z, &length); + hitID = player_raycast_down(&x, &y, &z, &length); ret = NO_COLLIDER; - if (hitObjectID >= 0 && length <= fabsf(*outLength)) { + if (hitID >= 0 && length <= fabsf(*outLength)) { *hitRx = -gGameStatusPtr->playerGroundTraceAngles.x; *hitRz = -gGameStatusPtr->playerGroundTraceAngles.z; *outX = x; @@ -105,15 +104,15 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, *outLength = length; *hitDirX = sinTemp; *hitDirZ = cosTemp; - ret = hitObjectID; + ret = hitID; } x = inputX - sinTemp; y = inputY; z = inputZ - cosTemp; length = inputLength; - hitObjectID = player_raycast_down(&x, &y, &z, &length); - if (hitObjectID >= 0 && length <= fabsf(*outLength)) { + hitID = player_raycast_down(&x, &y, &z, &length); + if (hitID >= 0 && length <= fabsf(*outLength)) { *hitRx = -gGameStatusPtr->playerGroundTraceAngles.x; *hitRz = -gGameStatusPtr->playerGroundTraceAngles.z; *outX = x; @@ -122,15 +121,15 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, *outLength = length; *hitDirX = -sinTemp; *hitDirZ = -cosTemp; - ret = hitObjectID; + ret = hitID; } x = inputX + cosTemp; y = inputY; z = inputZ + sinTemp; length = inputLength; - hitObjectID = player_raycast_down(&x, &y, &z, &length); - if (hitObjectID >= 0 && length <= fabsf(*outLength)) { + hitID = player_raycast_down(&x, &y, &z, &length); + if (hitID >= 0 && length <= fabsf(*outLength)) { *hitRx = -gGameStatusPtr->playerGroundTraceAngles.x; *hitRz = -gGameStatusPtr->playerGroundTraceAngles.z; *outX = x; @@ -139,15 +138,15 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, *outLength = length; *hitDirX = sinTemp; *hitDirZ = cosTemp; - ret = hitObjectID; + ret = hitID; } x = inputX - cosTemp; y = inputY; z = inputZ - sinTemp; length = inputLength; - hitObjectID = player_raycast_down(&x, &y, &z, &length); - if (hitObjectID >= 0 && length <= fabsf(*outLength)) { + hitID = player_raycast_down(&x, &y, &z, &length); + if (hitID >= 0 && length <= fabsf(*outLength)) { *hitRx = -gGameStatusPtr->playerGroundTraceAngles.x; *hitRz = -gGameStatusPtr->playerGroundTraceAngles.z; *outX = x; @@ -156,15 +155,15 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, *outLength = length; *hitDirX = -sinTemp; *hitDirZ = -cosTemp; - ret = hitObjectID; + ret = hitID; } x = inputX; y = inputY; z = inputZ; length = inputLength; - hitObjectID = player_raycast_down(&x, &y, &z, &length); - if (hitObjectID >= 0 && length <= fabsf(*outLength)) { + hitID = player_raycast_down(&x, &y, &z, &length); + if (hitID >= 0 && length <= fabsf(*outLength)) { *hitRx = -gGameStatusPtr->playerGroundTraceAngles.x; *hitRz = -gGameStatusPtr->playerGroundTraceAngles.z; *outX = x; @@ -173,7 +172,7 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, *outLength = length; *hitDirX = 0.0f; *hitDirZ = 0.0f; - ret = hitObjectID; + ret = hitID; } if (ret < 0) { @@ -185,7 +184,7 @@ s32 player_raycast_below(f32 yaw, f32 diameter, f32* outX, f32* outY, f32* outZ, return ret; } -s32 player_raycast_below_cam_relative(PlayerStatus* playerStatus, f32* outX, f32* outY, f32* outZ, f32* outLength, +HitID player_raycast_below_cam_relative(PlayerStatus* playerStatus, f32* outX, f32* outY, f32* outZ, f32* outLength, f32* hitRx, f32* hitRz, f32* hitDirX, f32* hitDirZ) { f32 yaw = 0.0f; @@ -197,7 +196,7 @@ s32 player_raycast_below_cam_relative(PlayerStatus* playerStatus, f32* outX, f32 outX, outY, outZ, outLength, hitRx, hitRz, hitDirX, hitDirZ); } -s32 player_raycast_down(f32* x, f32* y, f32* z, f32* length) { +HitID player_raycast_down(f32* x, f32* y, f32* z, f32* length) { f32 hitX; f32 hitY; f32 hitZ; @@ -247,7 +246,7 @@ s32 player_raycast_down(f32* x, f32* y, f32* z, f32* length) { return ret; } -s32 player_raycast_up_corners(PlayerStatus* player, f32* posX, f32* posY, f32* posZ, f32* hitDepth, f32 yaw) { +HitID player_raycast_up_corners(PlayerStatus* player, f32* posX, f32* posY, f32* posZ, f32* hitDepth, f32 yaw) { f32 startX; f32 startY; f32 startZ; @@ -316,7 +315,7 @@ s32 player_raycast_up_corners(PlayerStatus* player, f32* posX, f32* posY, f32* p return ret; } -s32 player_raycast_up_corner(f32* x, f32* y, f32* z, f32* length) { +HitID player_raycast_up_corner(f32* x, f32* y, f32* z, f32* length) { f32 hitX; f32 hitY; f32 hitZ; @@ -364,7 +363,7 @@ s32 player_raycast_up_corner(f32* x, f32* y, f32* z, f32* length) { return ret; } -s32 player_test_lateral_overlap(s32 mode, PlayerStatus* playerStatus, f32* x, f32* y, f32* z, f32 length, f32 yaw) { +HitID player_test_lateral_overlap(s32 mode, PlayerStatus* playerStatus, f32* x, f32* y, f32* z, f32 length, f32 yaw) { f32 sinTheta; f32 cosTheta; f32 hitX; @@ -428,7 +427,7 @@ s32 player_test_lateral_overlap(s32 mode, PlayerStatus* playerStatus, f32* x, f3 return ret; } -s32 player_raycast_general(s32 mode, f32 startX, f32 startY, f32 startZ, f32 dirX, f32 dirY, f32 dirZ, f32* hitX, +HitID player_raycast_general(s32 mode, f32 startX, f32 startY, f32 startZ, f32 dirX, f32 dirY, f32 dirZ, f32* hitX, f32* hitY, f32* hitZ, f32* hitDepth, f32*hitNx, f32* hitNy, f32* hitNz) { f32 nAngleX; f32 nAngleZ; @@ -438,6 +437,12 @@ s32 player_raycast_general(s32 mode, f32 startX, f32 startY, f32 startZ, f32 dir s32 ignoreFlags; s32 ret; + #if DX_DEBUG_MENU + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_IGNORE_WALLS)) { + return NO_COLLIDER; + } + #endif + entityID = test_ray_entities(startX, startY, startZ, dirX, dirY, dirZ, hitX, hitY, hitZ, hitDepth, hitNx, hitNy, hitNz); ret = NO_COLLIDER; @@ -483,7 +488,8 @@ s32 player_raycast_general(s32 mode, f32 startX, f32 startY, f32 startZ, f32 dir return ret; } -s32 player_test_move_without_slipping(PlayerStatus* playerStatus, f32* x, f32* y, f32* z, f32 length, f32 yaw, s32* hasClimbableStep) { +/// Only used for Peach physics +HitID player_test_move_without_slipping(PlayerStatus* playerStatus, f32* x, f32* y, f32* z, f32 length, f32 yaw, s32* hasClimbableStep) { f32 sinTheta; f32 cosTheta; f32 hitX; @@ -516,7 +522,7 @@ s32 player_test_move_without_slipping(PlayerStatus* playerStatus, f32* x, f32* y ret = NO_COLLIDER; raycastID = player_raycast_general(PLAYER_COLLISION_0, *x, *y + 0.1, *z, sinTheta, 0, cosTheta, &hitX, &hitY, &hitZ, &hitDepth, &hitNx, &hitNy, &hitNz); - if (raycastID >= 0 && hitDepth <= depth) { + if (raycastID > NO_COLLIDER && hitDepth <= depth) { *hasClimbableStep = TRUE; } @@ -529,7 +535,7 @@ s32 player_test_move_without_slipping(PlayerStatus* playerStatus, f32* x, f32* y targetDx = 0.0f; targetDz = 0.0f; - if ((raycastID >= 0) && (hitDepth <= depth)) { + if (raycastID > NO_COLLIDER && hitDepth <= depth) { depthDiff = hitDepth - depth; dx = depthDiff * sinTheta; dz = depthDiff * cosTheta; @@ -550,7 +556,7 @@ void player_get_slip_vector(f32* outX, f32* outY, f32 x, f32 y, f32 nX, f32 nY) *outY = (y - projectionLength * nY) * 0.5f; } -s32 player_test_move_with_slipping(PlayerStatus* playerStatus, f32* x, f32* y, f32* z, f32 length, f32 yaw) { +HitID player_test_move_with_slipping(PlayerStatus* playerStatus, f32* x, f32* y, f32* z, f32 length, f32 yaw) { f32 sinTheta; f32 cosTheta; f32 hitX; @@ -615,7 +621,13 @@ s32 player_test_move_with_slipping(PlayerStatus* playerStatus, f32* x, f32* y, f void update_player(void) { PlayerStatus* playerStatus = &gPlayerStatus; CollisionStatus* collisionStatus = &gCollisionStatus; - GameStatus* gameStatus; + + #if DX_DEBUG_MENU + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_SPEED_MODE)) { + gPlayerStatus.walkSpeed = 6.0f; + gPlayerStatus.runSpeed = 12.0f; + } + #endif update_partner_timers(); @@ -675,11 +687,10 @@ void update_player(void) { player_update_sprite(); - gameStatus = gGameStatusPtr; - gameStatus->playerPos.x = playerStatus->pos.x; - gameStatus->playerPos.y = playerStatus->pos.y; - gameStatus->playerPos.z = playerStatus->pos.z; - gameStatus->playerYaw = playerStatus->curYaw; + gGameStatus.playerPos.x = playerStatus->pos.x; + gGameStatus.playerPos.y = playerStatus->pos.y; + gGameStatus.playerPos.z = playerStatus->pos.z; + gGameStatus.playerYaw = playerStatus->curYaw; check_input_open_menus(); if (!(playerStatus->animFlags & PA_FLAG_USING_PEACH_PHYSICS)) { @@ -744,13 +755,16 @@ void phys_update_standard(void) { collision_main_lateral(); collision_check_player_overlaps(); - if (collision_main_above() < 0 && playerStatus->timeInAir == 0 && - playerStatus->animFlags & PA_FLAG_USING_PEACH_PHYSICS) { + if (collision_main_above() <= NO_COLLIDER + && playerStatus->timeInAir == 0 + && playerStatus->animFlags & PA_FLAG_USING_PEACH_PHYSICS + ) { collision_lateral_peach(); } - if ((playerStatus->actionState != ACTION_STATE_ENEMY_FIRST_STRIKE) - && (playerStatus->actionState != ACTION_STATE_STEP_UP)) { + if (playerStatus->actionState != ACTION_STATE_ENEMY_FIRST_STRIKE + && playerStatus->actionState != ACTION_STATE_STEP_UP + ) { phys_main_collision_below(); } } @@ -900,8 +914,6 @@ void suggest_player_anim_always_forward(AnimID anim) { void update_player_blink(void) { PlayerStatus* playerStatus = &gPlayerStatus; s32 outtaSight = FALSE; - u8 phi_v1; - u8* alpha; if (gPartnerStatus.actingPartner == PARTNER_BOW) { outtaSight = gPartnerStatus.partnerActionState != PARTNER_ACTION_NONE; @@ -909,17 +921,16 @@ void update_player_blink(void) { if (playerStatus->blinkTimer > 0) { playerStatus->blinkTimer--; - alpha = &playerStatus->curAlpha; + if (!(gGameStatusPtr->frameCounter & 1)) { if (outtaSight) { - phi_v1 = 192; + playerStatus->curAlpha = 192; } else { - phi_v1 = 255; + playerStatus->curAlpha = 255; } } else { - phi_v1 = 96; + playerStatus->curAlpha = 96; } - *alpha = phi_v1; if (!playerStatus->blinkTimer) { if (outtaSight) { @@ -937,9 +948,7 @@ void update_player_blink(void) { // dist_to_player2D f32 get_xz_dist_to_player(f32 x, f32 z) { - PlayerStatus* playerStatus = &gPlayerStatus; - - return dist2D(x, z, playerStatus->pos.x, playerStatus->pos.z); + return dist2D(x, z, gPlayerStatus.pos.x, gPlayerStatus.pos.z); } void enable_player_shadow(void) { @@ -995,17 +1004,17 @@ void func_800E01DC(void) { } b32 check_player_action_debug(void) { - b32 ret = FALSE; - if (gGameStatusPtr->debugScripts != DEBUG_SCRIPTS_NONE && (gGameStatusPtr->curButtons[0] & BUTTON_R)) { if (gPartnerStatus.partnerActionState == PARTNER_ACTION_NONE) { set_action_state(ACTION_STATE_IDLE); } - ret = TRUE; + return TRUE; } - return ret; + return FALSE; } +//BEGIN player/prompts.c + void player_render_interact_prompts(void) { render_conversation_prompt(); render_interact_prompt(); @@ -1144,8 +1153,6 @@ void func_800E06C0(s32 arg0) { s32 func_800E06D8(void) { PlayerStatus* playerStatus = &gPlayerStatus; - Npc* npc = playerStatus->encounteredNPC; - s32 interactingID = playerStatus->interactingWithID; s32 currentWall; if (playerStatus->timeInAir != 0 || playerStatus->inputDisabledCount != 0) { @@ -1156,8 +1163,8 @@ s32 func_800E06D8(void) { } if (playerStatus->flags & PS_FLAG_HAS_CONVERSATION_NPC && !(playerStatus->flags & PS_FLAG_INPUT_DISABLED) - && npc != NULL - && npc->flags & NPC_FLAG_10000000 + && playerStatus->encounteredNPC != NULL + && playerStatus->encounteredNPC->flags & NPC_FLAG_10000000 ) { playerStatus->interactingWithID = NO_COLLIDER; return TRUE; @@ -1175,7 +1182,7 @@ s32 func_800E06D8(void) { return FALSE; } - if (interactingID == currentWall) { + if (playerStatus->interactingWithID == currentWall) { if (playerStatus->flags & PS_FLAG_INTERACTED) { return FALSE; } @@ -1187,8 +1194,6 @@ s32 func_800E06D8(void) { return TRUE; } -static const f32 padding = 0.0f; - void check_for_interactables(void) { PlayerStatus* playerStatus = &gPlayerStatus; Npc* npc = gPlayerStatus.encounteredNPC; @@ -1312,6 +1317,8 @@ void clear_interact_prompt(void) { gPlayerStatusPtr->animFlags &= ~PA_FLAG_INTERACT_PROMPT_AVAILABLE; } +//END player/prompts.c + void update_partner_timers(void) { PlayerData* playerData = &gPlayerData; @@ -1326,6 +1333,10 @@ void update_partner_timers(void) { } } +//BEGIN player/render.c + +f32 D_800F7B48 = 0.0f; // always zero, remove? + void player_update_sprite(void) { PlayerStatus* playerStatus = &gPlayerStatus; f32 cameraYaw = gCameras[gCurrentCameraID].curYaw; @@ -1536,6 +1547,8 @@ void render_player_model(void) { } } +s32 D_800F7B4C = 0; + void appendGfx_player(void* data) { PlayerStatus* playerStatus = &gPlayerStatus; Matrix4f sp20, sp60, spA0, spE0; @@ -1736,3 +1749,5 @@ void update_player_shadow(void) { set_peach_shadow_scale(shadow, shadowScale); } } + +//END player/render.c diff --git a/src/7B440.c b/src/7B440.c index ad3784b34f9..593990df76d 100644 --- a/src/7B440.c +++ b/src/7B440.c @@ -1,4 +1,5 @@ #include "common.h" +#include "dx/debug_menu.h" SHIFT_BSS s32 PeachDisguiseNpcIndex; SHIFT_BSS Entity* TweesterTouchingPartner; @@ -10,6 +11,13 @@ SHIFT_BSS f32 PlayerNormalPitch; SHIFT_BSS PlayerSpinState gPlayerSpinState; SHIFT_BSS s32 PlayerYInterpUpdateDelay; + // default move speeds +f32 DefaultWalkSpeed = 2.0f; +f32 DefaultRunSpeed = 4.0f; +f32 DefaultJumpSpeed = 32.0f; + +extern s32 D_8010C92C; + void update_player_input(void) { PlayerStatus* playerStatus = &gPlayerStatus; s32 inputBufPos = playerStatus->inputBufPos; @@ -49,8 +57,6 @@ void update_player_input(void) { void reset_player_status(void) { PlayerStatus* playerStatus = &gPlayerStatus; MapSettings* mapSettings; - f32 one; - f32* floatsTemp; PeachDisguiseNpcIndex = -1; TweesterTouchingPartner = NULL; @@ -72,8 +78,6 @@ void reset_player_status(void) { gGameStatusPtr->peachFlags &= ~PEACH_FLAG_BLOCK_NEXT_DISGUISE; gGameStatusPtr->peachFlags &= ~PEACH_FLAG_DEPRESSED; - one = 1.0f; - if (gGameStatusPtr->peachFlags & PEACH_FLAG_IS_PEACH) { playerStatus->colliderHeight = 55; playerStatus->colliderDiameter = 38; @@ -89,11 +93,9 @@ void reset_player_status(void) { gGameStatusPtr->peachBakingIngredient = PEACH_BAKING_NONE; } - // TODO required to match - floatsTemp = &(&D_800F7B74)[-1]; // index of 0 does not work - playerStatus->walkSpeed = *floatsTemp++ * one; - playerStatus->runSpeed = *floatsTemp++ * one; - playerStatus->maxJumpSpeed = *floatsTemp++ * one; + playerStatus->walkSpeed = DefaultWalkSpeed; + playerStatus->runSpeed = DefaultRunSpeed; + playerStatus->maxJumpSpeed = DefaultJumpSpeed; set_action_state(ACTION_STATE_IDLE); @@ -112,7 +114,10 @@ void reset_player_status(void) { playerStatus->flipYaw[CAM_TATTLE] = 0.0f; playerStatus->flipYaw[CAM_3] = 0.0f; - mapSettings = gAreas[gGameStatusPtr->areaID].maps[gGameStatusPtr->mapID].settings; + ASSERT_MSG(gGameStatusPtr->areaID < ARRAY_COUNT(gAreas) - 1, "Invalid area ID %d", gGameStatusPtr->areaID); + AreaConfig* area = &gAreas[gGameStatusPtr->areaID]; + ASSERT_MSG(gGameStatusPtr->mapID < area->mapCount, "Invalid map ID %d in %s", gGameStatusPtr->mapID, area->id); + mapSettings = area->maps[gGameStatusPtr->mapID].settings; if (mapSettings->entryList != NULL) { if (gGameStatusPtr->entryID < mapSettings->entryCount) { @@ -131,12 +136,6 @@ void reset_player_status(void) { mem_clear(&gPlayerSpinState, sizeof(gPlayerSpinState)); } -void get_packed_buttons(s32* out) { - PlayerStatus* playerStatus = &gPlayerStatus; - - *out = (playerStatus->curButtons & 0xFFFF) | (playerStatus->pressedButtons << 16); -} - void player_input_to_move_vector(f32* outAngle, f32* outMagnitude) { PlayerStatus* playerStatus = &gPlayerStatus; f32 stickAxisX = playerStatus->stickAxis[0]; @@ -160,7 +159,6 @@ void player_input_to_move_vector(f32* outAngle, f32* outMagnitude) { } void game_input_to_move_vector(f32* outAngle, f32* outMagnitude) { - PlayerStatus* playerStatus = &gPlayerStatus; f32 stickX = gGameStatusPtr->stickX[0]; f32 stickY = -gGameStatusPtr->stickY[0]; f32 maxRadius = 70.0f; @@ -174,7 +172,7 @@ void game_input_to_move_vector(f32* outAngle, f32* outMagnitude) { angle = clamp_angle(atan2(0.0f, 0.0f, stickX, stickY) + gCameras[CAM_DEFAULT].curYaw); if (magnitude == 0.0f) { - angle = playerStatus->targetYaw; + angle = gPlayerStatus.targetYaw; } *outAngle = angle; diff --git a/src/7BB60.c b/src/7BB60.c index 13027033537..25fcd8956d4 100644 --- a/src/7BB60.c +++ b/src/7BB60.c @@ -1,14 +1,15 @@ #include "common.h" #include "world/partners.h" #include "sprite/player.h" +#include "dx/debug_menu.h" SHIFT_BSS CollisionStatus gCollisionStatus; -SHIFT_BSS f32 D_8010C928; SHIFT_BSS f32 JumpedOnSwitchX; SHIFT_BSS f32 JumpedOnSwitchZ; -SHIFT_BSS f32 D_8010C984; +SHIFT_BSS f32 StepUpLastY; // never read, remove? +SHIFT_BSS f32 StepUpLastYaw; // never read, remove? -extern f32 GravityParamsStartJump[]; +s16 FootstepSoundSelector = 0; s32 collision_check_player_intersecting_world(s32 mode, s32 arg1, f32 yaw); s32 phys_check_interactable_collision(void); @@ -64,45 +65,41 @@ void move_player(s32 duration, f32 heading, f32 speed) { } } -s32 collision_main_above(void) { +HitID collision_main_above(void) { PlayerStatus* playerStatus = &gPlayerStatus; CollisionStatus* collisionStatus = &gCollisionStatus; f32 x, y, z; - f32 new_var; + f32 halfHeight; f32 moveAngle; f32 moveMagnitude; - f32 sp2C; - s32 hitResult; - f32 phi_f2; + f32 outDepth; + HitID hitResult; - new_var = sp2C = playerStatus->colliderHeight * 0.5f; + outDepth = halfHeight = playerStatus->colliderHeight * 0.5f; x = playerStatus->pos.x; - y = playerStatus->pos.y + new_var; + y = playerStatus->pos.y + halfHeight; z = playerStatus->pos.z; player_input_to_move_vector(&moveAngle, &moveMagnitude); if (moveMagnitude != 0.0f) { - phi_f2 = playerStatus->targetYaw; + moveAngle = playerStatus->targetYaw; } else { - phi_f2 = playerStatus->spriteFacingAngle - 90.0f + gCameras[gCurrentCameraID].curYaw; + moveAngle = playerStatus->spriteFacingAngle - 90.0f + gCameras[gCurrentCameraID].curYaw; } - moveAngle = phi_f2; - hitResult = player_raycast_up_corners(playerStatus, &x, &y, &z, &sp2C, moveAngle); + hitResult = player_raycast_up_corners(playerStatus, &x, &y, &z, &outDepth, moveAngle); collisionStatus->curCeiling = hitResult; - if (hitResult >= 0) { + if (hitResult > NO_COLLIDER) { if (playerStatus->actionState != ACTION_STATE_FALLING && playerStatus->actionState != ACTION_STATE_STEP_DOWN && collisionStatus->curFloor <= NO_COLLIDER ) { - if (sp2C <= fabsf(new_var + playerStatus->gravityIntegrator[0])) { - do { - if ((hitResult & COLLISION_WITH_ENTITY_BIT) && get_entity_type(hitResult) == ENTITY_TYPE_BRICK_BLOCK) { - return hitResult; - } - } while (0); + if (outDepth <= fabsf(halfHeight + playerStatus->gravityIntegrator[0])) { + if ((hitResult & COLLISION_WITH_ENTITY_BIT) && get_entity_type(hitResult) == ENTITY_TYPE_BRICK_BLOCK) { + return hitResult; + } playerStatus->pos.y = y - ((playerStatus->colliderHeight / 5.0f) * 3.0f); if (playerStatus->actionState != ACTION_STATE_TORNADO_JUMP @@ -269,16 +266,16 @@ void phys_update_jump(void) { playerStatus->pos.y += playerStatus->gravityIntegrator[0]; } -void phys_init_integrator_for_current_state(void) { - PlayerStatus* playerStatus = &gPlayerStatus; - f32* params; +f32 GravityParamsStartJump[] = { 15.7566404343f, -7.38624f, 3.44693994522f, -0.75f }; +f32 GravityParamsStartFall[] = { 0.154342994094f, -0.350080013275f, -0.182262003422f, 0.0115200001746f }; - switch (playerStatus->actionState) { +void phys_init_integrator_for_current_state(void) { + switch (gPlayerStatus.actionState) { case ACTION_STATE_LANDING_ON_SWITCH: - playerStatus->gravityIntegrator[0] = 10.0f; - playerStatus->gravityIntegrator[1] = -5.0f; - playerStatus->gravityIntegrator[2] = 1.5f; - playerStatus->gravityIntegrator[3] = -0.3f; + gPlayerStatus.gravityIntegrator[0] = 10.0f; + gPlayerStatus.gravityIntegrator[1] = -5.0f; + gPlayerStatus.gravityIntegrator[2] = 1.5f; + gPlayerStatus.gravityIntegrator[3] = -0.3f; break; case ACTION_STATE_JUMP: case ACTION_STATE_SPIN_JUMP: @@ -287,41 +284,32 @@ void phys_init_integrator_for_current_state(void) { case ACTION_STATE_TORNADO_POUND: case ACTION_STATE_HIT_FIRE: case ACTION_STATE_HIT_LAVA: - params = GravityParamsStartJump; - if (!(playerStatus->flags & PS_FLAG_ENTERING_BATTLE)) { - playerStatus->gravityIntegrator[0] = *params++; - playerStatus->gravityIntegrator[1] = *params++; - playerStatus->gravityIntegrator[2] = *params++; - playerStatus->gravityIntegrator[3] = *params++; + if (!(gPlayerStatus.flags & PS_FLAG_ENTERING_BATTLE)) { + gPlayerStatus.gravityIntegrator[0] = GravityParamsStartJump[0]; + gPlayerStatus.gravityIntegrator[1] = GravityParamsStartJump[1]; + gPlayerStatus.gravityIntegrator[2] = GravityParamsStartJump[2]; + gPlayerStatus.gravityIntegrator[3] = GravityParamsStartJump[3]; } else { - playerStatus->gravityIntegrator[0] = *params++ * 0.5f; - playerStatus->gravityIntegrator[1] = *params++ * 0.5f; - playerStatus->gravityIntegrator[2] = *params++ * 0.5f; - playerStatus->gravityIntegrator[3] = *params++ * 0.5f; + gPlayerStatus.gravityIntegrator[0] = GravityParamsStartJump[0] * 0.5f; + gPlayerStatus.gravityIntegrator[1] = GravityParamsStartJump[1] * 0.5f; + gPlayerStatus.gravityIntegrator[2] = GravityParamsStartJump[2] * 0.5f; + gPlayerStatus.gravityIntegrator[3] = GravityParamsStartJump[3] * 0.5f; } break; } } -static const f32 padding = 0.0f; - -// This function is wack. This weird stuff is needed to match void gravity_use_fall_parms(void) { - f32* params = GravityParamsStartFall; - PlayerStatus* playerStatus; - do {} while (0); - playerStatus = &gPlayerStatus; - - if (playerStatus->flags & PS_FLAG_ENTERING_BATTLE) { - playerStatus->gravityIntegrator[0] = *params++ / 12.0f; - playerStatus->gravityIntegrator[1] = *params++ / 12.0f; - playerStatus->gravityIntegrator[2] = *params++ / 12.0f; - playerStatus->gravityIntegrator[3] = *params++ / 12.0f; + if (gPlayerStatus.flags & PS_FLAG_ENTERING_BATTLE) { + gPlayerStatus.gravityIntegrator[0] = GravityParamsStartFall[0] / 12.0f; + gPlayerStatus.gravityIntegrator[1] = GravityParamsStartFall[1] / 12.0f; + gPlayerStatus.gravityIntegrator[2] = GravityParamsStartFall[2] / 12.0f; + gPlayerStatus.gravityIntegrator[3] = GravityParamsStartFall[3] / 12.0f; } else { - playerStatus->gravityIntegrator[0] = *params++; - playerStatus->gravityIntegrator[1] = *params++; - playerStatus->gravityIntegrator[2] = *params++; - playerStatus->gravityIntegrator[3] = *params++; + gPlayerStatus.gravityIntegrator[0] = GravityParamsStartFall[0]; + gPlayerStatus.gravityIntegrator[1] = GravityParamsStartFall[1]; + gPlayerStatus.gravityIntegrator[2] = GravityParamsStartFall[2]; + gPlayerStatus.gravityIntegrator[3] = GravityParamsStartFall[3]; } } @@ -453,10 +441,20 @@ f32 integrate_gravity(void) { playerStatus->gravityIntegrator[1] += playerStatus->gravityIntegrator[2] / 1.7f; playerStatus->gravityIntegrator[0] += playerStatus->gravityIntegrator[1] / 1.7f; } else { + #if DX_DEBUG_MENU + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_HIGH_JUMP)) { + playerStatus->gravityIntegrator[2] += playerStatus->gravityIntegrator[3]; + playerStatus->gravityIntegrator[1] += playerStatus->gravityIntegrator[2] * 1.5; + playerStatus->gravityIntegrator[0] += playerStatus->gravityIntegrator[1] * 1.5; + return playerStatus->gravityIntegrator[0]; + } + #endif + playerStatus->gravityIntegrator[2] += playerStatus->gravityIntegrator[3]; playerStatus->gravityIntegrator[1] += playerStatus->gravityIntegrator[2]; playerStatus->gravityIntegrator[0] += playerStatus->gravityIntegrator[1]; } + return playerStatus->gravityIntegrator[0]; } @@ -608,9 +606,9 @@ void collision_main_lateral(void) { player_input_to_move_vector(&yaw, &speed); if (!(playerStatus->animFlags & PA_FLAG_SPINNING)) { speed *= 0.03125f; - if (!(playerStatus->flags & (PS_FLAG_FALLING | PS_FLAG_JUMPING))) { + //if (!(playerStatus->flags & (PS_FLAG_FALLING | PS_FLAG_JUMPING))) { speed *= 0.25; - } + //} if (playerStatus->actionState == ACTION_STATE_LAUNCH) { speed *= 1.5; } @@ -963,8 +961,8 @@ void phys_main_collision_below(void) { playerStatus->pos.y = playerY; } else { set_action_state(ACTION_STATE_STEP_UP); - D_8010C928 = playerY; - D_8010C984 = playerStatus->targetYaw; + StepUpLastY = playerY; + StepUpLastYaw = playerStatus->targetYaw; } } else { playerStatus->pos.y = playerY; @@ -1074,16 +1072,16 @@ void collision_lateral_peach(void) { f32 x = playerStatus->pos.x; f32 y = playerStatus->pos.y; f32 z = playerStatus->pos.z; - s32 wall = player_test_move_without_slipping(&gPlayerStatus, &x, &y, &z, 0, yaw, &climbableStep); + HitID wall = player_test_move_without_slipping(&gPlayerStatus, &x, &y, &z, 0, yaw, &climbableStep); playerStatus->pos.x = x; playerStatus->pos.z = z; // If there was a climbable step in this direction, but no wall, we can climb up it if (climbableStep - && wall < 0 + && wall <= NO_COLLIDER && playerStatus->actionState != ACTION_STATE_STEP_UP_PEACH - && playerStatus->curSpeed != 0.0f + && playerStatus->curSpeed != 0.0f ) { set_action_state(ACTION_STATE_STEP_UP_PEACH); } diff --git a/src/7E9D0.c b/src/7E9D0.c index ad57865ec7e..a84ae13a4e4 100644 --- a/src/7E9D0.c +++ b/src/7E9D0.c @@ -3,10 +3,15 @@ #include "common.h" #include "world/partners.h" #include "world/actions.h" +#include "world/disguise.h" #include "npc.h" #include "effects.h" #include "ld_addrs.h" +#include "sprite/npc/WorldClubba.h" +#include "sprite/npc/WorldKoopatrol.h" +#include "sprite/npc/HammerBros.h" + #ifdef SHIFT #define PLAYER_ACTION_VRAM_DEF texture_memory_VRAM_END #else @@ -18,28 +23,32 @@ SHIFT_BSS s32 D_8010C92C; SHIFT_BSS s32 D_8010C964; SHIFT_BSS s32 gSpinHistoryBufferPos; SHIFT_BSS s16 D_8010C9B0; -SHIFT_BSS s32 gSpinHistoryPosY[5]; SHIFT_BSS s32 gSpinHistoryPosX[5]; +SHIFT_BSS s32 gSpinHistoryPosY[5]; SHIFT_BSS s32 gSpinHistoryPosZ[5]; SHIFT_BSS s16 gSpinHistoryPosAngle[5]; +s32 PrevPlayerCamRelativeYaw = 0; +s32 D_800F7B44 = 0; // always zero, remove? + +f32 LastMidairPlayerVelY = 0.0; + void func_800E5520(void) { D_8010C9B0 = 0; } s32 phys_adjust_cam_on_landing(void) { PartnerStatus* partnerStatus = &gPartnerStatus; - GameStatus* gameStatus = gGameStatusPtr; PlayerStatus* playerStatus = &gPlayerStatus; s32 ret = 1; //TODO hardcoded map IDs - switch (gameStatus->areaID) { + switch (gGameStatus.areaID) { case AREA_OBK: - ret = gameStatus->mapID != 4; + ret = gGameStatus.mapID != 4; break; case AREA_ISK: - switch (gameStatus->mapID) { + switch (gGameStatus.mapID) { case 0: ret = 2; break; @@ -334,20 +343,7 @@ void set_action_state(s32 actionState) { } if (playerStatus->animFlags & PA_FLAG_8BIT_MARIO) { - // TODO figure this out -#ifdef NON_EQUIVALENT - if ( - actionState == ACTION_STATE_IDLE || actionState == ACTION_STATE_WALK || - actionState == ACTION_STATE_RUN || actionState == ACTION_STATE_JUMP || - actionState == ACTION_STATE_BOUNCE || actionState == ACTION_STATE_HOP || - actionState == ACTION_STATE_LAUNCH || actionState == ACTION_STATE_LANDING_ON_SWITCH || - actionState == ACTION_STATE_FALLING || actionState == ACTION_STATE_STEP_DOWN || - actionState == ACTION_STATE_LAND || actionState == ACTION_STATE_STEP_DOWN_LAND - ) { -#else - if (actionState < ACTION_STATE_TALK) - if (actionState >= 0) { -#endif + if (actionState <= ACTION_STATE_IDLE && actionState < ACTION_STATE_TALK) { playerStatus->prevActionState = playerStatus->actionState; playerStatus->actionState = actionState; playerStatus->flags |= PS_FLAG_ACTION_STATE_CHANGED; @@ -480,8 +476,7 @@ b32 check_input_jump(void) { return FALSE; } - /// @bug? collider flags not properly masked with COLLIDER_FLAG_SURFACE_TYPE - surfaceType = get_collider_flags((u16)gCollisionStatus.curFloor); + surfaceType = get_collider_flags((u16)gCollisionStatus.curFloor) & COLLIDER_FLAGS_SURFACE_TYPE_MASK; if ((surfaceType == SURFACE_TYPE_SLIDE) && phys_should_player_be_sliding()) { return FALSE; } @@ -549,6 +544,91 @@ void check_input_spin(void) { } } +AnimID ClubbaDisguiseExtraAnims[] = { + ANIM_WorldClubba_Anim00, + ANIM_WorldClubba_Anim02, + ANIM_WorldClubba_Anim03, + ANIM_WorldClubba_Anim04, + ANIM_WorldClubba_Anim05, + ANIM_WorldClubba_Anim08, + ANIM_WorldClubba_Anim07, + ANIM_WorldClubba_Anim13, + ANIM_WorldClubba_Anim14, + ANIM_LIST_END +}; + +AnimID HammerBroDisguiseExtraAnims[] = { + ANIM_HammerBros_Anim00, + ANIM_HammerBros_Anim02, + ANIM_HammerBros_Anim03, + ANIM_HammerBros_Anim04, + ANIM_HammerBros_Anim06, + ANIM_HammerBros_Anim07, + ANIM_HammerBros_Anim09, + ANIM_HammerBros_Anim0A, + ANIM_HammerBros_Anim0B, + ANIM_HammerBros_Anim1A, + ANIM_LIST_END +}; + +AnimID KoopatrolDisguiseExtraAnims[] = { + ANIM_WorldKoopatrol_Anim00, + ANIM_WorldKoopatrol_Anim01, + ANIM_WorldKoopatrol_Anim02, + ANIM_WorldKoopatrol_Anim04, + ANIM_WorldKoopatrol_Anim05, + ANIM_WorldKoopatrol_Anim06, + ANIM_WorldKoopatrol_Anim07, + ANIM_WorldKoopatrol_Anim08, + ANIM_WorldKoopatrol_Anim09, + ANIM_WorldKoopatrol_Anim12, + ANIM_WorldKoopatrol_Anim14, + ANIM_WorldKoopatrol_Anim1B, + ANIM_LIST_END +}; + +DisguiseAnims BasicPeachDisguiseAnims[] = { + [PEACH_DISGUISE_NONE] { + ANIM_WorldKoopatrol_Anim01, + ANIM_WorldKoopatrol_Anim04, + ANIM_WorldKoopatrol_Anim06, + ANIM_WorldKoopatrol_Anim08, + ANIM_WorldKoopatrol_Anim00, + ANIM_WorldKoopatrol_Anim1B + }, + [PEACH_DISGUISE_KOOPATROL] { + ANIM_WorldKoopatrol_Anim01, + ANIM_WorldKoopatrol_Anim04, + ANIM_WorldKoopatrol_Anim06, + ANIM_WorldKoopatrol_Anim08, + ANIM_WorldKoopatrol_Anim00, + ANIM_WorldKoopatrol_Anim1B + }, + [PEACH_DISGUISE_HAMMER_BROS] { + ANIM_HammerBros_Anim03, + ANIM_HammerBros_Anim06, + ANIM_HammerBros_Anim09, + ANIM_HammerBros_Anim0B, + ANIM_HammerBros_Anim00, + ANIM_HammerBros_Anim1A + }, + [PEACH_DISGUISE_CLUBBA] { + ANIM_WorldClubba_Anim02, + ANIM_WorldClubba_Anim03, + ANIM_WorldClubba_Anim04, + ANIM_WorldClubba_Anim05, + ANIM_WorldClubba_Anim00, + ANIM_WorldClubba_Anim14 + }, +}; + +AnimID* PeachDisguiseExtraAnims[] = { + [PEACH_DISGUISE_NONE] KoopatrolDisguiseExtraAnims, + [PEACH_DISGUISE_KOOPATROL] KoopatrolDisguiseExtraAnims, + [PEACH_DISGUISE_HAMMER_BROS] HammerBroDisguiseExtraAnims, + [PEACH_DISGUISE_CLUBBA] ClubbaDisguiseExtraAnims +}; + void peach_set_disguise_anim(AnimID anim) { s32 listIndex = PeachDisguiseNpcIndex; diff --git a/src/891b0_len_fb0.c b/src/891b0_len_fb0.c index e69cc7f4eb8..684edee5956 100644 --- a/src/891b0_len_fb0.c +++ b/src/891b0_len_fb0.c @@ -8,10 +8,9 @@ void surface_snow_behavior(void); void surface_hedges_behavior(void); void surface_water_behavior(void); -s32 D_80109480 = 0; +s32 PrevSurfaceType = 0; f32 D_80109484 = 0.0f; s16 D_80109488 = 4; -s16 D_8010948A = 0; // unused? f32 D_8010948C = 0.0f; s16 D_80109490 = 4; s16 D_80109492 = 5; @@ -26,34 +25,30 @@ s32 D_801094A8 = 0; s16 D_801094AC = 4; s16 D_801094AE = 4; -SHIFT_BSS s32 D_8010CFF0; -SHIFT_BSS s32 D_8010CFF4; - -void func_800EFD00(void) { -} +SHIFT_BSS s32 PrevTimeInAir; +SHIFT_BSS s32 LandedTimeInAir; // Particles (dust, flowers, snow) and etc void handle_floor_behavior(void) { - s32 colliderType = 0; - PlayerStatus* playerStatus = &gPlayerStatus; + s32 surfaceType = SURFACE_TYPE_DEFAULT; - if (playerStatus->actionState == ACTION_STATE_JUMP) { - colliderType = D_80109480; + if (gPlayerStatus.actionState == ACTION_STATE_JUMP) { + surfaceType = PrevSurfaceType; } - D_80109480 = get_collider_flags((u16)gCollisionStatus.curFloor) & COLLIDER_FLAGS_SURFACE_TYPE_MASK; + PrevSurfaceType = get_collider_flags((u16)gCollisionStatus.curFloor) & COLLIDER_FLAGS_SURFACE_TYPE_MASK; - if (playerStatus->actionState != ACTION_STATE_JUMP) { - colliderType = D_80109480; + if (gPlayerStatus.actionState != ACTION_STATE_JUMP) { + surfaceType = PrevSurfaceType; } - if (playerStatus->actionState == ACTION_STATE_LAND && playerStatus->flags & PS_FLAG_ACTION_STATE_CHANGED) { - D_8010CFF4 = D_8010CFF0; + if (gPlayerStatus.actionState == ACTION_STATE_LAND && gPlayerStatus.flags & PS_FLAG_ACTION_STATE_CHANGED) { + LandedTimeInAir = PrevTimeInAir; } - D_8010CFF0 = playerStatus->timeInAir; + PrevTimeInAir = gPlayerStatus.timeInAir; - switch (colliderType) { + switch (surfaceType) { case SURFACE_TYPE_FLOWERS: surface_flowers_behavior(); break; @@ -79,21 +74,22 @@ void surface_standard_behavior(void) { PlayerStatus* playerStatus = &gPlayerStatus; f32 sinTheta, cosTheta; f32 x, y, z; - s32 cond; + b32 isStarPath; - cond = FALSE; - if (gGameStatusPtr->areaID == AREA_HOS) { - cond = gGameStatusPtr->mapID == 2; + isStarPath = FALSE; + //TODO hardcoded map ID + if (gGameStatusPtr->areaID == AREA_HOS && gGameStatusPtr->mapID == 2) { + isStarPath = TRUE; } if (playerStatus->actionState == ACTION_STATE_LAND && (playerStatus->flags & PS_FLAG_ACTION_STATE_CHANGED) && - D_8010CFF4 >= 10) + LandedTimeInAir >= 10) { x = playerStatus->pos.x; y = playerStatus->pos.y + 0.0f; z = playerStatus->pos.z; - if (!cond) { + if (!isStarPath) { fx_landing_dust(0, x, y, z, D_80109484); } else { fx_misc_particles(3, x, y, z, 13.0f, 10.0f, 1.0f, 5, 30); @@ -105,7 +101,7 @@ void surface_standard_behavior(void) { x = playerStatus->pos.x; y = playerStatus->pos.y + 0.0f; z = playerStatus->pos.z; - if (!cond) { + if (!isStarPath) { fx_landing_dust(0, x, y, z, D_80109484); } else { fx_misc_particles(3, x, y, z, playerStatus->colliderDiameter, 10.0f, 1.0f, 5, 40); @@ -113,7 +109,7 @@ void surface_standard_behavior(void) { } else if (playerStatus->actionState == ACTION_STATE_SPIN && playerStatus->curSpeed != 0.0f) { if (D_80109488++ >= 4) { D_80109488 = 2; - if (cond) { + if (isStarPath) { sin_cos_rad(DEG_TO_RAD(clamp_angle(playerStatus->targetYaw)), &sinTheta, &cosTheta); fx_misc_particles( 3, @@ -143,7 +139,7 @@ void surface_standard_behavior(void) { if (D_80109488++ >= 4) { D_80109488 = 0; - if (!cond) { + if (!isStarPath) { sin_cos_rad(DEG_TO_RAD(clamp_angle(-playerStatus->curYaw)), &sinTheta, &cosTheta); fx_walking_dust( 0, @@ -172,10 +168,11 @@ void surface_flowers_behavior(void) { f32 t1; if (playerStatus->actionState == ACTION_STATE_JUMP && playerStatus->timeInAir == 1 && D_80109492 == 5) { - z = playerStatus->pos.z; // TODO weird use of temps required to match - x = playerStatus->pos.y + 14.0f; - y = D_8010948C; - fx_flower_splash(playerStatus->pos.x, x, z, y); + x = playerStatus->pos.x; + z = playerStatus->pos.z; + y = playerStatus->pos.y + 14.0f; + + fx_flower_splash(x, y, z, D_8010948C); D_8010948C = clamp_angle(D_8010948C + 35.0f); D_80109492 = 0; return; @@ -186,23 +183,20 @@ void surface_flowers_behavior(void) { D_80109492 = 5; } - if ( - playerStatus->actionState != ACTION_STATE_WALK && playerStatus->actionState != ACTION_STATE_RUN && - !(playerStatus->actionState == ACTION_STATE_SPIN && playerStatus->actionSubstate == 0) + if (!(playerStatus->actionState == ACTION_STATE_WALK + || playerStatus->actionState == ACTION_STATE_RUN + || (playerStatus->actionState == ACTION_STATE_SPIN && playerStatus->actionSubstate == 0)) ) { D_80109490 = 0; return; } if (D_80109490++ > 0) { - f32 colliderDiameter; D_80109490 = 0; sin_cos_rad(DEG_TO_RAD(clamp_angle(-playerStatus->curYaw)), &sin, &cos); - colliderDiameter = playerStatus->colliderDiameter; - - x = playerStatus->pos.x + (colliderDiameter * sin * -0.4f); - z = playerStatus->pos.z + (colliderDiameter * cos * -0.4f); + x = playerStatus->pos.x + (playerStatus->colliderDiameter * sin * -0.4f); + z = playerStatus->pos.z + (playerStatus->colliderDiameter * cos * -0.4f); y = playerStatus->pos.y + 15.5f; fx_flower_trail(0, x, y, z, -playerStatus->curYaw + rand_int(10) - 5.0f, D_80109494); @@ -222,7 +216,7 @@ void surface_cloud_behavior(void) { if (((playerStatus->actionState == ACTION_STATE_LAND && (playerStatus->flags & PS_FLAG_ACTION_STATE_CHANGED)) || ((playerStatus->actionState == ACTION_STATE_SPIN_POUND || playerStatus->actionState == ACTION_STATE_TORNADO_POUND) && (playerStatus->flags & PS_FLAG_SPECIAL_LAND))) && - D_8010CFF4 >= 10) + LandedTimeInAir >= 10) { fx_cloud_puff( playerStatus->pos.x, diff --git a/src/8a860_len_3f30.c b/src/8a860_len_3f30.c index b6d3ae99ae4..d4d5fee48db 100644 --- a/src/8a860_len_3f30.c +++ b/src/8a860_len_3f30.c @@ -953,18 +953,14 @@ s32 popup_menu_update(void) { if (gGameStatusPtr->heldButtons[0] & (BUTTON_STICK_UP | BUTTON_Z) && (PopupMenu_SelectedIndex > 0 || (gGameStatusPtr->pressedButtons[0] & (BUTTON_STICK_UP | BUTTON_Z)))) { - do { - PopupMenu_SelectedIndex--; - } while (0); // required to match + PopupMenu_SelectedIndex--; } // change selection on down input if (gGameStatusPtr->heldButtons[0] & (BUTTON_STICK_DOWN | BUTTON_R) && ((PopupMenu_SelectedIndex < gPopupMenu->numEntries - 1) || (gGameStatusPtr->pressedButtons[0] & (BUTTON_STICK_DOWN | BUTTON_R)))) { - do { - PopupMenu_SelectedIndex++; - } while (0); // required to match + PopupMenu_SelectedIndex++; } // wrap selected index diff --git a/src/audio/25f00_len_940.c b/src/audio/25f00_len_940.c index 94b21a81f22..22a2f6db214 100644 --- a/src/audio/25f00_len_940.c +++ b/src/audio/25f00_len_940.c @@ -2,6 +2,7 @@ #include "nu/nusys.h" #include "nu/nualsgi.h" #include "audio.h" +#include "dx/profiling.h" NOP_FIX @@ -140,7 +141,9 @@ void nuAuMgr(void* arg) { nuAuTasks[cmdListIndex].msgQ = &auRtnMesgQ; nuAuTasks[cmdListIndex].list.t.data_ptr = (u64*)cmdListBuf; nuAuTasks[cmdListIndex].list.t.data_size = (cmdListAfter_ptr - cmdListBuf) * sizeof(Acmd); + profiler_rsp_started(PROFILER_RSP_AUDIO); osSendMesg(&nusched.audioRequestMQ, &nuAuTasks[cmdListIndex], OS_MESG_BLOCK); + profiler_rsp_completed(PROFILER_RSP_AUDIO); nuAuCleanDMABuffers(); osRecvMesg(&auRtnMesgQ, NULL, 1); if (++bufferIndex == 3) { @@ -150,8 +153,10 @@ void nuAuMgr(void* arg) { cmdListIndex = 0; } } + profiler_audio_started(); // XXX: is this the right place? if (osAiGetStatus() & AI_STATUS_FIFO_FULL) { cond = FALSE; + profiler_audio_completed(); continue; } sampleSize = osAiGetLength() >> 2; @@ -181,6 +186,7 @@ void nuAuMgr(void* arg) { nuAuPreNMI++; break; } + profiler_audio_completed(); } } diff --git a/src/audio/sfx.c b/src/audio/sfx.c index 43c10d3d369..8953bc0ec3f 100644 --- a/src/audio/sfx.c +++ b/src/audio/sfx.c @@ -553,10 +553,7 @@ void sfx_get_spatialized_sound_params(f32 x, f32 y, f32 z, s16* volume, s16* pan u32 spaceMode; paramFlags = flags & SOUND_SPACE_PARAMS_MASK; - - do { - spaceMode = flags & SOUND_SPACE_MODE_MASK; - } while (0); // required to match + spaceMode = flags & SOUND_SPACE_MODE_MASK; switch (spaceMode) { case SOUND_SPACE_DEFAULT: diff --git a/src/background.c b/src/background.c index 953c95252ec..fad9e1a0699 100644 --- a/src/background.c +++ b/src/background.c @@ -313,6 +313,3 @@ void enable_background_wave(void) { void disable_background_wave(void) { gBackroundWaveEnabled = FALSE; } - -// TODO figure out why it is needed -static const f32 rodata_padding[] = { 0.0f, 0.0f }; diff --git a/src/background_gfx.c b/src/background_gfx.c index 7843472b36a..6710918a0d0 100644 --- a/src/background_gfx.c +++ b/src/background_gfx.c @@ -4,6 +4,7 @@ #include "hud_element.h" #include "sprite.h" #include "overlay.h" +#include "dx/config.h" extern s32 gPauseBackgroundFade; @@ -258,6 +259,8 @@ void gfx_transfer_frame_to_depth(u16* frameBuffer0, u16* frameBuffer1, u16* zBuf . x . . . */ + //TODO emulator test -- find which ones have bad performance here + #if !DX_PAUSE_LAG_FIX if (((frameBuffer1[pixel] >> 2) & 0xF) < 8) { gfx_frame_filter_pass_0(frameBuffer0, frameBuffer1, y - 1, x - 1, &filterBuf0[0]); gfx_frame_filter_pass_0(frameBuffer0, frameBuffer1, y - 1, x + 1, &filterBuf0[1]); @@ -271,6 +274,9 @@ void gfx_transfer_frame_to_depth(u16* frameBuffer0, u16* frameBuffer1, u16* zBuf // Don't apply any filters to the edges of the screen zBuffer[pixel] = frameBuffer0[pixel] | 1; } + #else + zBuffer[pixel] = frameBuffer0[pixel] | 1; + #endif } } } diff --git a/src/battle/16C8E0.c b/src/battle/16C8E0.c index d9663cc05df..3c2dadaf7d1 100644 --- a/src/battle/16C8E0.c +++ b/src/battle/16C8E0.c @@ -15,8 +15,6 @@ u16 gTattleBgTextureYOffset = 0; BSS s32 bSavedPartner; BSS s32 bSavedOverrideFlags; -BSS s32 D_8029DA38; // unused? -BSS s32 D_8029DA3C; // unused? BSS s32 StarPointsBasePosX; BSS s32 StarPointsBasePosY; BSS s32 StarPointsMoveInterpAmt; @@ -166,8 +164,7 @@ void initialize_battle(void) { gBattleStatus.inputBitmask = -1; gOverrideFlags &= ~GLOBAL_OVERRIDES_ENABLE_FLOOR_REFLECTION; - /// @bug? why just 16 - for (i = 0; i < 16; i++) { + for (i = 0; i < ARRAY_COUNT(battleStatus->pushInputBuffer); i++) { battleStatus->pushInputBuffer[i] = 0; } @@ -482,9 +479,6 @@ void btl_draw_ui(void) { s32 changed = FALSE; s32 state; - do {} while (0); // TODO required to match (probably can be removed with some sort of control flow inversion) - - // do not draw UI during the frame of a state change state = gBattleState; if (gBattleState != gLastDrawBattleState) { state = gLastDrawBattleState; @@ -900,6 +894,7 @@ void btl_draw_enemy_health_bars(void) { if (enemy->healthBarPos.y >= -500) { s32 screenX, screenY, screenZ; s32 id; + s32 nextDigitXOffset; get_screen_coords(CAM_BATTLE, x, y, z, &screenX, &screenY, &screenZ); screenY += 16; @@ -909,26 +904,27 @@ void btl_draw_enemy_health_bars(void) { hud_element_set_render_pos(id, screenX, screenY); hud_element_draw_clipped(id); - temp = currentHP / 10; - ones = currentHP % 10; + #define DIGIT_WIDTH 6 + nextDigitXOffset = DIGIT_WIDTH; + id = D_8029EFBC; + // draw all digits + while (TRUE) { + s32 digit = currentHP % 10; - // tens digit - if (temp > 0) { - id = D_8029EFBC; hud_element_set_render_depth(id, 10); - hud_element_set_script(id, bHPDigitHudScripts[temp]); - btl_draw_prim_quad(0, 0, 0, 0, screenX, screenY + 2, 8, 8); - hud_element_set_render_pos(id, screenX + 4, screenY + 6); + hud_element_set_script(id, bHPDigitHudScripts[digit]); + btl_draw_prim_quad(0, 0, 0, 0, screenX + nextDigitXOffset, screenY + 2, 8, 8); + hud_element_set_render_pos(id, screenX + nextDigitXOffset + 4, screenY + 6); hud_element_draw_next(id); - } - // ones digit - id = D_8029EFBC; - hud_element_set_render_depth(id, 10); - hud_element_set_script(id, bHPDigitHudScripts[ones]); - btl_draw_prim_quad(0, 0, 0, 0, screenX + 6, screenY + 2, 8, 8); - hud_element_set_render_pos(id, screenX + 10, screenY + 6); - hud_element_draw_next(id); + if (currentHP < 10) { + break; + } + + currentHP /= 10; + nextDigitXOffset -= DIGIT_WIDTH; + } + #undef DIGIT_WIDTH temp = enemy->healthFraction; temp = 25 - temp; diff --git a/src/battle/181810.c b/src/battle/181810.c index cd11aff3eb3..a020c1e385f 100644 --- a/src/battle/181810.c +++ b/src/battle/181810.c @@ -1,4 +1,5 @@ #include "battle/battle.h" +#include "vars_access.h" BSS char D_8029F660[0x400]; // unused? @@ -214,14 +215,14 @@ API_CALLABLE(EndActorSpeech) { if (isInitialCall) { s32 actorID = evt_get_variable(script, *args++); s32 partID = evt_get_variable(script, *args++); - + gSpeakingActorTalkAnim = evt_get_variable(script, *args++); gSpeakingActorIdleAnim = evt_get_variable(script, *args++); if (actorID == ACTOR_SELF) { actorID = script->owner1.actorID; } - + actor = get_actor(actorID); actorPart = get_actor_part(actor, partID); gSpeakingActor = actor; @@ -374,8 +375,7 @@ API_CALLABLE(GetDarknessStatus) { f32 amt; s32 isLight; - //TODO While loop may not be necessary in the future - do { get_screen_overlay_params(SCREEN_LAYER_BACK, &type, &amt); } while (0); + get_screen_overlay_params(SCREEN_LAYER_BACK, &type, &amt); if (amt < 128.0f) { isLight = FALSE; diff --git a/src/battle/190B20.c b/src/battle/190B20.c index e3aba6fe25b..7150040a44c 100644 --- a/src/battle/190B20.c +++ b/src/battle/190B20.c @@ -247,13 +247,10 @@ void create_target_list(Actor* actor, b32 targetHomePos) { // ------------------------------------------------------------------------ // remove targets based on simple criteria (coarse pass) - do { - actor->selectedTargetIndex = 0; - } while (0); + actor->selectedTargetIndex = 0; actor->targetListLength = numTargets; - /// @bug this should be % 4 - sampleCol = battleStatus->sampleTargetHomeIndex & 4; + sampleCol = battleStatus->sampleTargetHomeIndex % 4; sampleRow = battleStatus->sampleTargetHomeIndex / 4; targetDataList = actor->targetData; @@ -1473,6 +1470,7 @@ void load_player_actor(void) { player->staticStatus = STATUS_KEY_STATIC; player->staticDuration = 127; } + } void load_partner_actor(void) { diff --git a/src/battle/1A5830.c b/src/battle/1A5830.c index 538528d8ff6..d47b34e0762 100644 --- a/src/battle/1A5830.c +++ b/src/battle/1A5830.c @@ -3,6 +3,7 @@ #include "effects.h" #include "hud_element.h" #include "sprite.h" +#include "dx/debug_menu.h" s32 D_802946E0[] = { 100, 100, 100, 110, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130 }; @@ -192,7 +193,7 @@ HitResult calc_enemy_test_target(Actor* actor) { } } if (player_team_is_ability_active(target2, ABILITY_CLOSE_CALL) && (target2->curHP < 6)) { - if (rand_int(100) < 30) { + if (rand_int(100) < 90) { // Was 30 hitResult = HIT_RESULT_LUCKY; break; } @@ -2845,6 +2846,13 @@ API_CALLABLE(EnemyDamageTarget) { battleStatus->curAttackDamage = evt_get_variable(script, *args++); battleFlagsModifier = *args++; + #if DX_DEBUG_MENU + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_GOD_MODE)) { + battleStatus->curAttackDamage = 0; + battleStatus->curAttackStatus = 0; + } + #endif + // BS_FLAGS1_INCLUDE_POWER_UPS and BS_FLAGS1_TRIGGER_EVENTS are mutually exclusive if (battleFlagsModifier & BS_FLAGS1_INCLUDE_POWER_UPS) { gBattleStatus.flags1 |= BS_FLAGS1_INCLUDE_POWER_UPS; @@ -3185,7 +3193,7 @@ API_CALLABLE(AfflictActor) { switch (statusTypeKey) { case STATUS_KEY_FROZEN: - statusDurationKey = STATUS_TURN_MOD_PARALYZE; /// @bug should be STATUS_TURN_MOD_FROZEN + statusDurationKey = STATUS_TURN_MOD_FROZEN; break; case STATUS_KEY_SLEEP: statusDurationKey = STATUS_TURN_MOD_SLEEP; diff --git a/src/battle/action_cmd/body_slam.c b/src/battle/action_cmd/body_slam.c index 15eb77500fe..3f129727db4 100644 --- a/src/battle/action_cmd/body_slam.c +++ b/src/battle/action_cmd/body_slam.c @@ -144,15 +144,13 @@ void N(update)(void) { return; } - do { - if (actionCommandStatus->thresholdLevel < 10000) { - battleStatus->actionSuccess = -1; - } else if (actionCommandStatus->thresholdLevel - (battleStatus->actionCmdDifficultyTable[actionCommandStatus->difficulty] * 154) >= 10309) { - battleStatus->actionSuccess = -1; - } else { - battleStatus->actionSuccess = 1; - } - } while (0); // required to match + if (actionCommandStatus->thresholdLevel < 10000) { + battleStatus->actionSuccess = -1; + } else if (actionCommandStatus->thresholdLevel - (battleStatus->actionCmdDifficultyTable[actionCommandStatus->difficulty] * 154) >= 10309) { + battleStatus->actionSuccess = -1; + } else { + battleStatus->actionSuccess = 1; + } battleStatus->actionResult = ACTION_RESULT_FAIL; if (battleStatus->actionSuccess == 1) { diff --git a/src/battle/actor_rendering.c b/src/battle/actor_rendering.c index bec342bae0c..2cd4cb35945 100644 --- a/src/battle/actor_rendering.c +++ b/src/battle/actor_rendering.c @@ -1611,13 +1611,6 @@ void appendGfx_player_actor(void* arg0) { if (player->transparentStatus == STATUS_KEY_TRANSPARENT) { playerParts->flags |= ACTOR_PART_FLAG_TRANSPARENT; - - if (FALSE) { // TODO required to match - also whyyyyyy compiler, whyyyyy - back: - playerParts->curAnimation = get_player_anim_for_status(STATUS_KEY_STOP); - create_status_debuff(player->hudElementDataIndex, STATUS_KEY_STOP); - goto end; - } } else { playerParts->flags &= ~ACTOR_PART_FLAG_TRANSPARENT; } @@ -1853,7 +1846,8 @@ void appendGfx_player_actor(void* arg0) { } } } else { - goto back; + playerParts->curAnimation = get_player_anim_for_status(STATUS_KEY_STOP); + create_status_debuff(player->hudElementDataIndex, STATUS_KEY_STOP); } end: @@ -3901,8 +3895,7 @@ void add_part_decor_sparkles(ActorPart* part, s32 idx) { x = part->curPos.x; y = part->curPos.y + (part->size.y / 2); z = part->curPos.z - 5.0f; - /// @bug this should be % 4 - if ((gGameStatusPtr->frameCounter / 4) == 0) { + if ((gGameStatusPtr->frameCounter % 4) == 0) { fx_sparkles(FX_SPARKLES_1, x, y, z, 10.0f); } decorations->stateResetTimer[idx]++; diff --git a/src/battle/actors.yaml b/src/battle/actors.yaml index d4c68a6dd3f..9747ed38f75 100644 --- a/src/battle/actors.yaml +++ b/src/battle/actors.yaml @@ -2334,3 +2334,25 @@ stepDelay: [ 30, 30 ] tattleCamOffset: [ 0, 0, 0 ] shadowOffset: 0 +- SmokePuff: + level: 8 + nameMsg: MSG_Misc_SmokePuff + tattleMsg: MSG_Misc_SmokePuffTattle + walkSound: [ SOUND_FLIGHT, SOUND_NONE ] + flySound: [ SOUND_FLIGHT, SOUND_NONE ] + jumpSound: SOUND_ACTOR_JUMP + hurtSound: SOUND_ACTOR_HURT + stepDelay: [ 30, 30 ] + tattleCamOffset: [ 0, 5, 0 ] + shadowOffset: 0 +- Uproot: + level: 10 + nameMsg: MSG_Misc_Uproot + tattleMsg: MSG_Misc_UprootTattle + walkSound: [ SOUND_ACTOR_STEP_A, SOUND_ACTOR_STEP_B ] + flySound: [ SOUND_NONE, SOUND_NONE ] + jumpSound: SOUND_ACTOR_JUMP + hurtSound: SOUND_ACTOR_HURT + stepDelay: [ 30, 30 ] + tattleCamOffset: [ 0, 0, 0 ] + shadowOffset: 0 diff --git a/src/battle/area/arn/actor/tubbas_heart.c b/src/battle/area/arn/actor/tubbas_heart.c index 2df857e1b29..330fe3ab589 100644 --- a/src/battle/area/arn/actor/tubbas_heart.c +++ b/src/battle/area/arn/actor/tubbas_heart.c @@ -333,7 +333,7 @@ EvtScript N(EVS_TakeTurn) = { Call(GetCurrentPartnerID, LVar0) IfEq(LVar0, PARTNER_BOW) Call(EnableBattleStatusBar, FALSE) - //@bug -- meant to OR 3 with value of AVAR_Flags, not PARTNER_BOW + Call(GetActorVar, ACTOR_SELF, AVAR_Flags, LVar0) BitwiseOrConst(LVar0, AVAL_Flag_TauntBow | AVAL_Flag_HidStatusBar) Call(SetActorVar, ACTOR_SELF, AVAR_Flags, LVar0) Call(UseBattleCamPreset, BTL_CAM_PRESET_14) diff --git a/src/battle/area/ham/area.c b/src/battle/area/ham/area.c new file mode 100644 index 00000000000..a1f19717816 --- /dev/null +++ b/src/battle/area/ham/area.c @@ -0,0 +1,9 @@ +#include "area.h" + +BattleList A(Formations) = { + {}, +}; + +StageList A(Stages) = { + {}, +}; diff --git a/src/battle/area/ham/area.h b/src/battle/area/ham/area.h new file mode 100644 index 00000000000..ca0b47e2e14 --- /dev/null +++ b/src/battle/area/ham/area.h @@ -0,0 +1,6 @@ +#include "common.h" +#include "effects.h" +#include "battle/battle.h" +#include "script_api/battle.h" + +#define AREA b_area_ham diff --git a/src/battle/area/kmr_part_3/actor/final_jr_troopa.c b/src/battle/area/kmr_part_3/actor/final_jr_troopa.c index 2b06f5d03be..68373b84096 100644 --- a/src/battle/area/kmr_part_3/actor/final_jr_troopa.c +++ b/src/battle/area/kmr_part_3/actor/final_jr_troopa.c @@ -1390,7 +1390,6 @@ EvtScript N(EVS_HandlePhase) = { EndIf CaseEq(PHASE_ENEMY_BEGIN) CaseEq(PHASE_ENEMY_END) - CaseEq(PHASE_PLAYER_BEGIN) //@bug duplicate case, should be PHASE_PLAYER_END EndSwitch Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) Call(UseIdleAnimation, ACTOR_SELF, TRUE) diff --git a/src/battle/area/kmr_part_3/actor/jr_troopa.c b/src/battle/area/kmr_part_3/actor/jr_troopa.c index 8636be966ba..3a779be65a4 100644 --- a/src/battle/area/kmr_part_3/actor/jr_troopa.c +++ b/src/battle/area/kmr_part_3/actor/jr_troopa.c @@ -444,7 +444,6 @@ EvtScript N(EVS_HandlePhase) = { Call(UseBattleCamPreset, BTL_CAM_DEFAULT) Call(MoveBattleCamOver, 4) EndIf - EndIf /// @bug END_IF with no IF CaseEq(PHASE_ENEMY_BEGIN) // trying showing the scene where Goompa congratulates the player for dealing damage to Jr Troopa Call(GetActorVar, ACTOR_SELF, AVAR_HitReact_State, LVar0) diff --git a/src/battle/area/kpa4/area.c b/src/battle/area/kpa4/area.c index eda097ab656..6ea4515b9ba 100644 --- a/src/battle/area/kpa4/area.c +++ b/src/battle/area/kpa4/area.c @@ -67,7 +67,7 @@ StageList A(Stages) = { STAGE("kpa_01", A(kpa_01)), STAGE("kpa_01b", A(kpa_01b)), STAGE("kpa_02", A(kpa_02)), - STAGE("kpa_03", A(kpa_04)), /// @bug should be A(kpa_03) + STAGE("kpa_03", A(kpa_03)), STAGE("kpa_04", A(kpa_04)), STAGE("kpa_04b", A(kpa_04b)), STAGE("kpa_04c", A(kpa_04c)), diff --git a/src/battle/area/mac/actor/chan.c b/src/battle/area/mac/actor/chan.c index 184ded55e9d..48251918218 100644 --- a/src/battle/area/mac/actor/chan.c +++ b/src/battle/area/mac/actor/chan.c @@ -872,7 +872,7 @@ EvtScript N(EVS_HandlePhase) = { BreakSwitch EndIf Call(GetStatusFlags, ACTOR_SELF, LVar0) - IfFlag(LVar0, STATUS_FLAGS_DOJO | STATUS_FLAG_POISON | STATUS_KEY_SHRINK) /// @bug STATUS_KEY_SHRINK used instead of STATUS_FLAG_SHRINK + IfFlag(LVar0, STATUS_FLAGS_DOJO | STATUS_FLAG_POISON | STATUS_FLAG_SHRINK) BreakSwitch EndIf SetConst(LVarA, ANIM_Chan_Run) diff --git a/src/battle/area/tik2/actor/electro_blooper.c b/src/battle/area/tik2/actor/electro_blooper.c index 7745c034b37..b6152c1c543 100644 --- a/src/battle/area/tik2/actor/electro_blooper.c +++ b/src/battle/area/tik2/actor/electro_blooper.c @@ -248,21 +248,6 @@ ActorBlueprint NAMESPACE = { }; #include "common/StartRumbleWithParams.inc.c" - -API_CALLABLE(N(unused_func)) { - Bytecode* args = script->ptrReadPos; - Bytecode arg0 = *args++; - f32 var0, var1; - - var1 = evt_get_float_variable(script, *args++); - do {} while (0); //TODO required to match - var0 = evt_get_float_variable(script, arg0); - - evt_set_float_variable(script, arg0, var1 * sin_rad(DEG_TO_RAD(var0))); - - return ApiStatus_DONE2; -} - #include "common/FadeBackgroundDarken.inc.c" #include "common/FadeBackgroundLighten.inc.c" diff --git a/src/battle/area/tik2/actor/super_blooper.c b/src/battle/area/tik2/actor/super_blooper.c index c973ce09aab..128373e7070 100644 --- a/src/battle/area/tik2/actor/super_blooper.c +++ b/src/battle/area/tik2/actor/super_blooper.c @@ -255,21 +255,6 @@ ActorBlueprint NAMESPACE = { }; #include "common/StartRumbleWithParams.inc.c" - -API_CALLABLE(N(unused_func)) { - Bytecode* args = script->ptrReadPos; - Bytecode arg0 = *args++; - f32 var0, var1; - - var1 = evt_get_float_variable(script, *args++); - do {} while (0); //TODO required to match - var0 = evt_get_float_variable(script, arg0); - - evt_set_float_variable(script, arg0, var1 * sin_rad(DEG_TO_RAD(var0))); - - return ApiStatus_DONE2; -} - #include "common/FadeBackgroundDarken.inc.c" #include "common/FadeBackgroundLighten.inc.c" #include "common/SpitInk.inc.c" diff --git a/src/battle/battle.c b/src/battle/battle.c index 342ac34ede5..88505e84f66 100644 --- a/src/battle/battle.c +++ b/src/battle/battle.c @@ -53,52 +53,7 @@ SHIFT_BSS Battle* gCurrentBattlePtr; } \ BattleArea gBattleAreas[] = { - [BTL_AREA_KMR_1] BTL_AREA(kmr_part_1, "エリア KMR その1"), - [BTL_AREA_KMR_2] BTL_AREA(kmr_part_2, "エリア KMR その2"), - [BTL_AREA_KMR_3] BTL_AREA(kmr_part_3, "エリア KMR その3"), - [BTL_AREA_MAC] BTL_AREA(mac, "エリア MAC"), - [BTL_AREA_HOS] BTL_AREA(hos, "エリア HOS"), - [BTL_AREA_NOK] BTL_AREA(nok, "エリア NOK"), - [BTL_AREA_TRD_1] BTL_AREA(trd_part_1, "エリア TRD その1"), - [BTL_AREA_TRD_2] BTL_AREA(trd_part_2, "エリア TRD その2"), - [BTL_AREA_TRD_3] BTL_AREA(trd_part_3, "エリア TRD その3"), - [BTL_AREA_IWA] BTL_AREA(iwa, "エリア IWA"), - [BTL_AREA_SBK] BTL_AREA(sbk, "エリア SBK"), - [BTL_AREA_ISK_1] BTL_AREA(isk_part_1, "エリア ISK その1"), - [BTL_AREA_ISK_2] BTL_AREA(isk_part_2, "エリア ISK その2"), - [BTL_AREA_MIM] BTL_AREA(mim, "エリア MIM"), - [BTL_AREA_ARN] BTL_AREA(arn, "エリア ARN"), - [BTL_AREA_DGB] BTL_AREA(dgb, "エリア DGB"), - [BTL_AREA_OMO] BTL_AREA(omo, "エリア OMO"), - [BTL_AREA_OMO2] BTL_AREA(omo2, "エリア OMO2"), - [BTL_AREA_OMO3] BTL_AREA(omo3, "エリア OMO3"), - [BTL_AREA_KGR] BTL_AREA(kgr, "エリア KGR"), - [BTL_AREA_JAN] BTL_AREA(jan, "エリア JAN"), - [BTL_AREA_JAN2] BTL_AREA(jan2, "エリア JAN2"), - [BTL_AREA_KZN] BTL_AREA(kzn, "エリア KZN"), - [BTL_AREA_KZN2] BTL_AREA_DMA(kzn2, "エリア KZN2"), - [BTL_AREA_FLO] BTL_AREA(flo, "エリア FLO"), - [BTL_AREA_FLO2] BTL_AREA(flo2, "エリア FLO2"), - [BTL_AREA_TIK] BTL_AREA(tik, "エリア TIK"), - [BTL_AREA_TIK2] BTL_AREA(tik2, "エリア TIK2"), - [BTL_AREA_TIK3] BTL_AREA(tik3, "エリア TIK3"), - [BTL_AREA_SAM] BTL_AREA(sam, "エリア SAM"), - [BTL_AREA_SAM2] BTL_AREA(sam2, "エリア SAM2"), - [BTL_AREA_PRA] BTL_AREA(pra, "エリア PRA"), - [BTL_AREA_PRA2] BTL_AREA(pra2, "エリア PRA2"), - [BTL_AREA_PRA3] BTL_AREA(pra3, "エリア PRA3"), - [BTL_AREA_KPA] BTL_AREA(kpa, "エリア KPA"), - [BTL_AREA_KPA2] BTL_AREA(kpa2, "エリア KPA2"), - [BTL_AREA_KPA3] BTL_AREA(kpa3, "エリア KPA3"), - [BTL_AREA_KPA4] BTL_AREA(kpa4, "エリア KPA4"), - [BTL_AREA_KKJ] BTL_AREA(kkj, "エリア KKJ"), - [BTL_AREA_DIG] BTL_AREA(dig, "エリア DIG"), - [BTL_AREA_OMO2_1] BTL_AREA_AUX(omo2_1, "エリア OMO2_1"), - [BTL_AREA_OMO2_2] BTL_AREA_AUX(omo2_2, "エリア OMO2_2"), - [BTL_AREA_OMO2_3] BTL_AREA_AUX(omo2_3, "エリア OMO2_3"), - [BTL_AREA_OMO2_4] BTL_AREA_AUX(omo2_4, "エリア OMO2_4"), - [BTL_AREA_OMO2_5] BTL_AREA_AUX(omo2_5, "エリア OMO2_5"), - [BTL_AREA_OMO2_6] BTL_AREA_AUX(omo2_6, "エリア OMO2_6"), + // TODO }; void reset_battle_status(void) { diff --git a/src/battle/battle.h b/src/battle/battle.h index 916f5887c35..aa5761d1ddd 100644 --- a/src/battle/battle.h +++ b/src/battle/battle.h @@ -8,6 +8,7 @@ #define STAGE_MODEL_LIST_END 0 enum BattleAreaIDs { + // TODO: remove these vanilla areas because they are not linked BTL_AREA_KMR_1 = 0x00, BTL_AREA_KMR_2 = 0x01, BTL_AREA_KMR_3 = 0x02, @@ -129,10 +130,9 @@ typedef struct BattleMoveEntry { typedef struct ActorBlueprint { /* 0x00 */ s32 flags; - /* 0x04 */ char unk_04; - /* 0x05 */ u8 type; - /* 0x06 */ u8 level; - /* 0x07 */ u8 maxHP; + /* 0x04 */ s16 maxHP; + /* 0x06 */ u8 type; + /* 0x07 */ u8 level; /* 0x08 */ s16 partCount; /* 0x0A */ char unk_0A[2]; /* 0x0C */ struct ActorPartBlueprint* partsData; diff --git a/src/battle/battle_tables.h b/src/battle/battle_tables.h index 5046f7c2a9b..addb5d40e4c 100644 --- a/src/battle/battle_tables.h +++ b/src/battle/battle_tables.h @@ -124,4 +124,7 @@ extern StageList b_area_kkj_Stages; extern BattleList b_area_dig_Formations; extern StageList b_area_dig_Stages; +extern BattleList b_area_mod_Formations; +extern StageList b_area_mod_Stages; + #endif diff --git a/src/battle/btl_states_actions.c b/src/battle/btl_states_actions.c index 6ba77e5a529..29147318ddd 100644 --- a/src/battle/btl_states_actions.c +++ b/src/battle/btl_states_actions.c @@ -6,6 +6,7 @@ #include "battle/battle.h" #include "model.h" #include "game_modes.h" +#include "dx/debug_menu.h" extern StageListRow* gCurrentStagePtr; @@ -219,6 +220,10 @@ void btl_state_update_normal_start(void) { battleStatus->curStage = stage; switch (gBattleSubState) { case BTL_SUBSTATE_NORMAL_START_INIT: + #if DX_DEBUG_MENU + dx_debug_set_battle_info(gCurrentBattleID << 16 | (gCurrentStageID & 0xFFFF), stage->shape); + #endif + BattleEnemiesCreated = battle->formationSize; set_screen_overlay_params_back(OVERLAY_NONE, -1.0f); compressedAsset = load_asset_by_name(stage->shape, &size); @@ -273,9 +278,9 @@ void btl_state_update_normal_start(void) { battleStatus->jumpCharge = 0; battleStatus->unk_98 = 0; battleStatus->hpDrainCount = 0; - gBattleStatus.flags2 |= BS_FLAGS2_CANT_FLEE; - if (currentEncounter->allowFleeing) { - gBattleStatus.flags2 &= ~BS_FLAGS2_CANT_FLEE; + gBattleStatus.flags2 |= BS_FLAGS2_CAN_FLEE; + if (currentEncounter->forbidFleeing) { + gBattleStatus.flags2 &= ~BS_FLAGS2_CAN_FLEE; } battleStatus->endBattleFadeOutRate = 10; battleStatus->waitForState = BATTLE_STATE_0; @@ -836,12 +841,6 @@ void btl_state_update_begin_player_turn(void) { } break; case BTL_SUBSTATE_BEGIN_PLAYER_TURN_AWAIT_TURBO_CHARGE: - if (0) { // TODO relocated block - required to match -back: - player->koStatus = STATUS_KEY_DAZE; - player->disableEffect->data.disableX->koDuration = player->koDuration; - goto later; - } if (!btl_is_popup_displayed()) { gBattleSubState = BTL_SUBSTATE_BEGIN_PLAYER_TURN_TRY_STATUS_DAMAGE; } @@ -954,14 +953,14 @@ void btl_state_update_begin_player_turn(void) { temp = player->koDuration; player->koDuration = debuffDuration; if (debuffDuration > 0) { - goto back; + player->koStatus = STATUS_KEY_DAZE; + player->disableEffect->data.disableX->koDuration = player->koDuration; } else if (temp != debuffDuration) { player->koStatus = 0; player->koDuration = 0; player->disableEffect->data.disableX->koDuration = 0; } } - later: for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) { Actor* enemy = battleStatus->enemyActors[i]; @@ -2020,7 +2019,7 @@ void btl_state_update_end_training_battle(void) { gBattleSubState = BTL_SUBSTATE_END_TRAINING_AWAIT_OUTTA_SIGHT; } break; - case BTL_SUBSTATE_END_TRAINING_RESET_CAM: //@bug should be BTL_SUBSTATE_END_TRAINING_AWAIT_OUTTA_SIGHT + case BTL_SUBSTATE_END_TRAINING_AWAIT_OUTTA_SIGHT: if (!does_script_exist(partner->handleBatttlePhaseScriptID)) { battleStatus->outtaSightActive = FALSE; gBattleSubState = BTL_SUBSTATE_END_TRAINING_RESET_CAM; @@ -2148,7 +2147,7 @@ void btl_state_update_end_battle(void) { btl_set_state(BATTLE_STATE_0); gLastDrawBattleState = gBattleState; - get_map_IDs_by_name("gv_01", &areaID, &mapID); + get_map_IDs_by_name_checked("gv_01", &areaID, &mapID); gGameStatusPtr->areaID = areaID; gGameStatusPtr->mapID = mapID; gGameStatusPtr->entryID = gv_01_ENTRY_0; diff --git a/src/battle/btl_states_menus.c b/src/battle/btl_states_menus.c index ba635b0ad95..623ddbab82f 100644 --- a/src/battle/btl_states_menus.c +++ b/src/battle/btl_states_menus.c @@ -1521,11 +1521,9 @@ void func_802A3C98(void* data, s32 x, s32 y) { if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[idx]] <= 0) { a0 = battle_menu_moveOptionDisplayCostReductions[BattleMenu_Moves_OptionIndexMap[idx]]; - do {} while (0); v0 = battle_menu_moveOptionDisplayCosts[BattleMenu_Moves_OptionIndexMap[idx]]; } else { a0 = battle_menu_moveOptionDisplayCostReductions[BattleMenu_Moves_OptionIndexMap[idx]]; - do {} while (0); v0 = battle_menu_moveOptionDisplayCosts[BattleMenu_Moves_OptionIndexMap[idx]]; } num = v0 - a0; @@ -2513,7 +2511,7 @@ void btl_state_update_player_menu(void) { battleStatus->lastPlayerMenuSelection[BTL_MENU_IDX_MAIN] = battleStatus->curSubmenu = battle_menu_submenuIDs[submenuResult - 1]; for (i = 0; i < ARRAY_COUNT(battleStatus->submenuMoves); i++) { battleStatus->submenuMoves[i] = 0; - battleStatus->submenuIcons[0] = 0; /// @bug ? + battleStatus->submenuIcons[i] = 0; battleStatus->submenuStatus[i] = 0; } @@ -2539,10 +2537,15 @@ void btl_state_update_player_menu(void) { s32 moveID = gItemTable[playerData->equippedBadges[i]].moveID; moveData = &gMoveTable[moveID]; if (moveData->category == BattleMenu_CategoryForSubmenu[battleStatus->curSubmenu]) { + s32 cost = moveData->costFP; battleStatus->submenuMoves[entryIdx] = moveID; battleStatus->submenuIcons[entryIdx] = playerData->equippedBadges[i]; battleStatus->submenuStatus[entryIdx] = 1; - if (playerData->curFP < moveData->costFP) { + + cost -= player_team_is_ability_active(playerActor, ABILITY_FLOWER_SAVER); + cost -= 2 * player_team_is_ability_active(playerActor, ABILITY_FLOWER_FANATIC); + + if (playerData->curFP < cost) { battleStatus->submenuStatus[entryIdx] = 0; } entryIdx++; @@ -3400,7 +3403,7 @@ void btl_state_update_player_menu(void) { D_802AD690[entryIdx] = 1; D_802AD658[entryIdx] = BattleMenu_LeftJustMessages[BTL_MENU_TYPE_RUN_AWAY]; D_802AD6C0[entryIdx] = MSG_Menus_Action_RunAway; - if (!(gBattleStatus.flags2 & BS_FLAGS2_CANT_FLEE)) { + if (!(gBattleStatus.flags2 & BS_FLAGS2_CAN_FLEE)) { D_802AD640[entryIdx] = battle_menu_FleeHudScripts.disabled; D_802AD690[entryIdx] = 0; D_802AD6A8[entryIdx] = 1; diff --git a/src/battle/common/newactor/jr_troopa.inc.c b/src/battle/common/newactor/jr_troopa.inc.c new file mode 100644 index 00000000000..0a61254eb02 --- /dev/null +++ b/src/battle/common/newactor/jr_troopa.inc.c @@ -0,0 +1,732 @@ +#include "battle/battle.h" +#include "script_api/battle.h" +#include "sprite/npc/JrTroopa.h" +#include "sprite/npc/ParaJrTroopa.h" +#include "sprite/npc/MageJrTroopa.h" + +#define NAMESPACE A(jr_troopa) + +PlayerData* playerData = &gPlayerData; +extern EvtScript N(EVS_Init); +extern s32 N(MageAnims)[]; +extern s32 N(FlyingAnims)[]; +extern s32 N(BaseAnims)[]; +extern s32 N(DefeatedAnims)[]; +extern s32 N(BaseDefeatedAnims)[]; +extern EvtScript N(EVS_Idle); +extern EvtScript N(EVS_TakeTurn); +extern EvtScript N(EVS_HandleEvent); +extern EvtScript N(EVS_HandlePhase); +extern EvtScript N(EVS_OnDeath); +extern EvtScript N(EVS_GetFormAnims); +extern EvtScript N(EVS_Move_Charge); +extern EvtScript N(EVS_Attack_Slam); +extern EvtScript N(EVS_Spark_Fly_Away); +extern EvtScript N(EVS_Lose_Flying_Mode); +extern EvtScript N(EVS_DeathExplode); + + +enum N(ActorPartIDs) { + PRT_MAGE = 1, + PRT_FLYING = 2, + PRT_BASE = 3, +}; + +enum N(ActorVars) { + AVAR_FORM = 0, + AVAR_FIRST_TIME_TALKING = 1, + AVAR_TURNS_UNTIL_SECOND_PHASE = 2, + AVAR_TROOPA_DAMAGE = 3, + AVAR_TURNS_UNTIL_SPARK_FLY_AWAY = 4, + AVAR_TROOPA_STATE = 5, +}; + +enum N(ActorValues) { + AVAL_FORM_BASE = 1, + AVAL_FORM_FLYING = 2, + AVAL_FORM_MAGE = 3, +}; + +enum N(ActorParams) { + DMG_SCARE = 3, + DMG_FIREBALL = 4, + DMG_LIGHTNING = 5, + DMG_FAKEOUT_SCARE_A = 4, + DMG_FAKEOUT_SCARE_B = 2, + DMG_BOOSTED_LIGHTNING = 8, +}; + +enum { + FORM_ANIM_HURT = 0, + FORM_ANIM_BURN = 1, + FORM_ANIM_FLAIL = 2, + FORM_ANIM_TALK = 3, + FORM_ANIM_RETURN = 4, + FORM_ANIM_IMMUNE = 5, +}; + +s32 N(BaseAnims)[] = { + STATUS_KEY_NORMAL, ANIM_JrTroopa_Idle, + STATUS_KEY_SLEEP, ANIM_JrTroopa_Sleep, + STATUS_KEY_STONE, ANIM_JrTroopa_Still, + STATUS_KEY_STOP, ANIM_JrTroopa_Still, + STATUS_KEY_PARALYZE, ANIM_JrTroopa_Still, + STATUS_KEY_DIZZY, ANIM_JrTroopa_Dizzy, + STATUS_END, +}; + +s32 N(FlyingAnims)[] = { + STATUS_KEY_NORMAL, ANIM_ParaJrTroopa_Idle, + STATUS_KEY_SLEEP, ANIM_ParaJrTroopa_Sleep, + STATUS_KEY_STONE, ANIM_ParaJrTroopa_Still, + STATUS_KEY_STOP, ANIM_ParaJrTroopa_Still, + STATUS_KEY_PARALYZE, ANIM_ParaJrTroopa_Still, + STATUS_KEY_DIZZY, ANIM_ParaJrTroopa_Dizzy, + STATUS_END, +}; + +s32 N(MageAnims)[] = { + STATUS_KEY_NORMAL, ANIM_MageJrTroopa_Idle, + STATUS_KEY_SLEEP, ANIM_MageJrTroopa_Sleep, + STATUS_KEY_STONE, ANIM_MageJrTroopa_Still, + STATUS_KEY_STOP, ANIM_MageJrTroopa_Still, + STATUS_KEY_PARALYZE, ANIM_MageJrTroopa_Still, + STATUS_KEY_DIZZY, ANIM_MageJrTroopa_Dizzy, + STATUS_END, +}; + +s32 N(DefeatedAnims)[] = { + STATUS_KEY_NORMAL, ANIM_JrTroopa_Defeated, + STATUS_END, +}; + +s32 N(BaseDefeatedAnims)[] = { + STATUS_KEY_NORMAL, ANIM_JrTroopa_Defeated, + STATUS_END, +}; + +s32 N(DefenseTable)[] = { + ELEMENT_NORMAL, 0, + ELEMENT_END, +}; + +s32 N(StatusTable)[] = { + STATUS_KEY_NORMAL, 0, + STATUS_KEY_DEFAULT, 0, + STATUS_KEY_SLEEP, 100, + STATUS_KEY_POISON, 100, + STATUS_KEY_FROZEN, 100, + STATUS_KEY_DIZZY, 100, + STATUS_KEY_FEAR, 100, + STATUS_KEY_STATIC, 100, + STATUS_KEY_PARALYZE, 100, + STATUS_KEY_SHRINK, 100, + STATUS_KEY_STOP, 100, + STATUS_TURN_MOD_DEFAULT, 0, + STATUS_TURN_MOD_SLEEP, 0, + STATUS_TURN_MOD_POISON, 0, + STATUS_TURN_MOD_FROZEN, 0, + STATUS_TURN_MOD_DIZZY, 0, + STATUS_TURN_MOD_FEAR, 0, + STATUS_TURN_MOD_STATIC, 0, + STATUS_TURN_MOD_PARALYZE, 0, + STATUS_TURN_MOD_SHRINK, 0, + STATUS_TURN_MOD_STOP, 0, + STATUS_END, +}; + +ActorPartBlueprint N(ActorParts)[] = { + { + .flags = ACTOR_PART_FLAG_PRIMARY_TARGET, + .index = PRT_MAGE, + .posOffset = { 0, 0, 0 }, + .targetOffset = { 0, 20 }, + .opacity = 255, + .idleAnimations = N(MageAnims), + .defenseTable = N(DefenseTable), + .eventFlags = ACTOR_EVENT_FLAGS_NONE, + .elementImmunityFlags = 0, + .projectileTargetOffset = { 0, -10 }, + }, + { + .flags = ACTOR_PART_FLAG_INVISIBLE | ACTOR_PART_FLAG_NO_TARGET, + .index = PRT_FLYING, + .posOffset = { 0, 0, 0 }, + .targetOffset = { -5, 32 }, + .opacity = 255, + .idleAnimations = N(FlyingAnims), + .defenseTable = N(DefenseTable), + .eventFlags = ACTOR_EVENT_FLAGS_NONE, + .elementImmunityFlags = 0, + .projectileTargetOffset = { 0, -10 }, + }, + { + .flags = ACTOR_PART_FLAG_INVISIBLE | ACTOR_PART_FLAG_NO_TARGET, + .index = PRT_BASE, + .posOffset = { 0, 0, 0 }, + .targetOffset = { 0, 20 }, + .opacity = 255, + .idleAnimations = N(BaseAnims), + .defenseTable = N(DefenseTable), + .eventFlags = ACTOR_EVENT_FLAGS_NONE, + .elementImmunityFlags = 0, + .projectileTargetOffset = { 0, -10 }, + }, +}; + +ActorBlueprint NAMESPACE = { + .flags = 0, + .type = ACTOR_TYPE_JR_TROOPA_1, + .level = ACTOR_LEVEL_JR_TROOPA_1, + .maxHP = 10, + .partCount = ARRAY_COUNT(N(ActorParts)), + .partsData = N(ActorParts), + .initScript = &N(EVS_Init), + .statusTable = N(StatusTable), + .escapeChance = 0, + .airLiftChance = 0, + .hurricaneChance = 0, + .spookChance = 0, + .upAndAwayChance = 0, + .spinSmashReq = 0, + .powerBounceChance = 80, + .coinReward = 0, + .size = { 24, 32 }, + .healthBarOffset = { 0, 0 }, + .statusIconOffset = { -15, 30 }, + .statusTextOffset = { 10, 20 }, +}; + +EvtScript N(EVS_Init) = { + Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn))) + Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle))) + Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent))) + Call(BindHandlePhase, ACTOR_SELF, Ref(N(EVS_HandlePhase))) + // Create Spark NPC + // CreateNpc(0, NPC_ANIM_spark_normal_idle_nb) + // Call(SetNpcYaw, 0, 90) + // Call(SetNpcPos, 0, -129, 16, -11) + // Call(EnableNpcShadow, 0, 1) + // Start of ActorVars + Call(SetActorVar, ACTOR_SELF, AVAR_FORM, AVAL_FORM_MAGE) // Form + Call(SetActorVar, ACTOR_SELF, AVAR_FIRST_TIME_TALKING, 0) // First time talking + Call(SetActorVar, ACTOR_SELF, AVAR_TURNS_UNTIL_SECOND_PHASE, 1) // Turns until second phase + Call(SetActorVar, ACTOR_SELF, AVAR_TROOPA_DAMAGE, 1) // Jr Troopa's damage + Call(SetActorVar, ACTOR_SELF, AVAR_TURNS_UNTIL_SPARK_FLY_AWAY, 1) // Turns until Spark flies away + Call(SetActorVar, ACTOR_SELF, AVAR_TROOPA_STATE, 0) // Jr Troopa's state: 0 = Mage, 1 = Flying, 2 = Mage(weak) + Return + End +}; + +EvtScript N(EVS_Idle) = { + Return + End +}; + +EvtScript N(EVS_HandleEvent) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, FALSE) + Call(GetLastEvent, ACTOR_SELF, LVar0) + Switch(LVar0) + CaseOrEq(EVENT_HIT_COMBO) + CaseOrEq(EVENT_HIT) + Set(LVar1, FORM_ANIM_HURT) + ExecWait(N(EVS_GetFormAnims)) + ExecWait(EVS_Enemy_Hit) + EndCaseGroup + CaseEq(EVENT_BURN_HIT) + Set(LVar1, FORM_ANIM_BURN) + ExecWait(N(EVS_GetFormAnims)) + ExecWait(EVS_Enemy_BurnHit) + CaseEq(EVENT_BURN_DEATH) + Set(LVar1, FORM_ANIM_BURN) + ExecWait(N(EVS_GetFormAnims)) + ExecWait(EVS_Enemy_BurnHit) + Wait(5) + ExecWait(Ref(N(EVS_OnDeath))) + Return + CaseEq(EVENT_SPIN_SMASH_HIT) + Set(LVar1, FORM_ANIM_HURT) + ExecWait(N(EVS_GetFormAnims)) + ExecWait(EVS_Enemy_SpinSmashHit) + CaseEq(EVENT_SPIN_SMASH_DEATH) + Set(LVar1, FORM_ANIM_HURT) + ExecWait(N(EVS_GetFormAnims)) + ExecWait(EVS_Enemy_SpinSmashHit) + Wait(5) + ExecWait(Ref(N(EVS_OnDeath))) + Return + CaseOrEq(EVENT_ZERO_DAMAGE) + CaseOrEq(EVENT_IMMUNE) + CaseOrEq(EVENT_AIR_LIFT_FAILED) + EndCaseGroup + CaseEq(EVENT_DEATH) + Set(LVar1, FORM_ANIM_HURT) + ExecWait(N(EVS_GetFormAnims)) + ExecWait(EVS_Enemy_Hit) + Wait(10) + ExecWait(Ref(N(EVS_OnDeath))) + Return + CaseEq(EVENT_END_FIRST_STRIKE) + Call(SetAnimationRate, ACTOR_SELF, PRT_MAGE, Float(2.0)) + Call(SetAnimation, ACTOR_SELF, PRT_MAGE, ANIM_MageJrTroopa_Run) + Call(SetGoalToHome, ACTOR_SELF) + Call(SetActorSpeed, ACTOR_SELF, Float(4.0)) + Call(RunToGoal, ACTOR_SELF, 0, 0) + Call(SetAnimationRate, ACTOR_SELF, PRT_MAGE, Float(1.0)) + Call(HPBarToHome, ACTOR_SELF) + CaseEq(EVENT_RECOVER_STATUS) + SetConst(LVar0, PRT_MAGE) + SetConst(LVar1, ANIM_MageJrTroopa_Idle) + ExecWait(EVS_Enemy_Recover) + CaseDefault + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_GetFormAnims) = { + Call(GetActorVar, ACTOR_SELF, AVAR_FORM, LVar0) + Switch(LVar1) + CaseEq(FORM_ANIM_HURT) + Switch(LVar0) + CaseEq(AVAL_FORM_FLYING) + Set(LVar1, ANIM_ParaJrTroopa_Hurt) + CaseEq(AVAL_FORM_MAGE) + Set(LVar1, ANIM_MageJrTroopa_Hurt) + CaseDefault + Set(LVar1, ANIM_JrTroopa_Hurt) + EndSwitch + CaseEq(FORM_ANIM_BURN) + Switch(LVar0) + CaseEq(AVAL_FORM_FLYING) + Set(LVar1, ANIM_ParaJrTroopa_BurnHurt) + Set(LVar2, ANIM_ParaJrTroopa_BurnStill) + CaseEq(AVAL_FORM_MAGE) + Set(LVar1, ANIM_MageJrTroopa_BurnHurt) + Set(LVar2, ANIM_MageJrTroopa_BurnStill) + CaseDefault + Set(LVar1, ANIM_JrTroopa_BurnHurt) + Set(LVar2, ANIM_JrTroopa_BurnStill) + EndSwitch + CaseEq(FORM_ANIM_FLAIL) + Switch(LVar0) + CaseEq(AVAL_FORM_FLYING) + Set(LVar1, ANIM_ParaJrTroopa_Flail) + CaseEq(AVAL_FORM_MAGE) + Set(LVar1, ANIM_MageJrTroopa_Flail) + CaseDefault + Set(LVar1, ANIM_JrTroopa_Flail) + EndSwitch + CaseEq(FORM_ANIM_TALK) + Switch(LVar0) + CaseEq(AVAL_FORM_FLYING) + Set(LVar1, ANIM_ParaJrTroopa_Talk) + CaseEq(AVAL_FORM_MAGE) + Set(LVar1, ANIM_MageJrTroopa_Talk) + CaseDefault + Set(LVar1, ANIM_JrTroopa_Talk) + EndSwitch + CaseEq(FORM_ANIM_RETURN) + Switch(LVar0) + CaseEq(AVAL_FORM_FLYING) + Set(LVar1, ANIM_ParaJrTroopa_FlyFast) + CaseEq(AVAL_FORM_MAGE) + Set(LVar1, ANIM_MageJrTroopa_Run) + CaseDefault + Set(LVar1, ANIM_JrTroopa_Run) + EndSwitch + CaseDefault + Switch(LVar0) + CaseEq(AVAL_FORM_FLYING) + Set(LVar1, ANIM_ParaJrTroopa_Idle) + CaseEq(AVAL_FORM_MAGE) + Set(LVar1, ANIM_MageJrTroopa_Idle) + CaseDefault + Set(LVar1, ANIM_JrTroopa_Idle) + EndSwitch + EndSwitch + Return + End +}; + +EvtScript N(EVS_OnDeath) = { + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_INVISIBLE, FALSE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_MAGE, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Flail) + // Call(ActorSpeak, MSG_ID, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Flail, ANIM_JrTroopa_Flail) + Call(UseBattleCamPreset, BTL_CAM_PRESET_13) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetBattleCamTarget, LVar0, LVar1, 0) + Call(SetBattleCamZoom, 260) + Call(SetBattleCamOffsetZ, 30) + Call(MoveBattleCamOver, 20) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_MAGE, ACTOR_PART_FLAG_INVISIBLE, FALSE) + // Call(ActorSpeak, MSG_ID, ACTOR_SELF, PRT_MAGE, ANIM_JrTroopa_, ANIM_JrTroopa_Dizzy) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_INVISIBLE, FALSE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_MAGE, ACTOR_PART_FLAG_INVISIBLE, TRUE) + SetConst(LVar0, PRT_MAGE) + SetConst(LVar1, ANIM_JrTroopa_Panic) + Set(LVar2, EXEC_DEATH_NO_SPINNING) + Return + End +}; + +EvtScript N(EVS_JrTroopa_BaseDeath) = { + Set(LVarA, LVar0) + Call(HideHealthBar, ACTOR_SELF) + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(SetAnimation, ACTOR_SELF, LVarA, LVar1) + Wait(10) + Call(GetDamageSource, LVar5) + Switch(LVar5) + CaseOrEq(DMG_SRC_NEXT_SLAP_LEFT) + CaseOrEq(DMG_SRC_NEXT_FAN_SMACK_LEFT) + CaseOrEq(DMG_SRC_LAST_SLAP_LEFT) + CaseOrEq(DMG_SRC_LAST_FAN_SMACK_LEFT) + CaseOrEq(DMG_SRC_NEXT_SLAP_RIGHT) + CaseOrEq(DMG_SRC_NEXT_FAN_SMACK_RIGHT) + CaseOrEq(DMG_SRC_LAST_SLAP_RIGHT) + CaseOrEq(DMG_SRC_LAST_FAN_SMACK_RIGHT) + CaseOrEq(DMG_SRC_SPIN_SMASH) + EndCaseGroup + CaseDefault + Set(LVar2, 0) + Loop(24) + Call(SetActorYaw, ACTOR_SELF, LVar2) + Add(LVar2, 30) + Wait(1) + EndLoop + Call(SetActorYaw, ACTOR_SELF, 0) + EndSwitch + Label(0) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar1, 10) + Add(LVar2, 10) + PlayEffect(EFFECT_BIG_SMOKE_PUFF, LVar0, LVar1, LVar2, 0, 0, 0, 0, 0) + Call(PlaySound, SOUND_ACTOR_DEATH) + Call(DropStarPoints, ACTOR_SELF) + Call(SetActorYaw, ACTOR_SELF, 0) + Call(UseBattleCamPreset, BTL_CAM_PRESET_14) + Call(SetBattleCamZoom, 260) + Call(SetBattleCamOffsetZ, 15) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(MoveBattleCamOver, 30) + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_KNOCKOUT_CHIRPING) + Call(SetAnimation, ACTOR_SELF, LVarA, ANIM_JrTroopa_Collapse) + Wait(12) + Call(SetAnimation, ACTOR_SELF, LVarA, ANIM_JrTroopa_Defeated) + Call(SetIdleAnimations, ACTOR_SELF, LVarA, Ref(N(BaseDefeatedAnims))) + Wait(60) + Call(SetActorFlagBits, ACTOR_SELF, ACTOR_FLAG_NO_DMG_APPLY, TRUE) + Return + End +}; + +EvtScript N(EVS_JrTroopa_Death) = { + Call(GetActorVar, ACTOR_SELF, AVAR_FORM, LVar0) + Switch(LVar0) + CaseEq(AVAL_FORM_FLYING) + Call(UseBattleCamPreset, BTL_CAM_DEFAULT) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + IfEq(LVar1, 0) + Goto(0) + EndIf + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_FALL_QUICK) + Call(HideHealthBar, ACTOR_SELF) + Call(SetGoalPos, ACTOR_SELF, LVar0, 0, LVar2) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2)) + Call(FallToGoal, ACTOR_SELF, 10) + Call(SetActorJumpGravity, ACTOR_SELF, Float(0.8)) + Call(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE) + Call(HPBarToCurrent, ACTOR_SELF) + Call(ShowHealthBar, ACTOR_SELF) + Label(0) + Thread + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar1, 10) + Add(LVar2, 10) + Loop(3) + PlayEffect(EFFECT_BIG_SMOKE_PUFF, LVar0, LVar1, LVar2, 0, 0, 0, 0, 0) + Wait(3) + EndLoop + EndThread + Call(SetPartFlagBits, ACTOR_SELF, PRT_FLYING, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_INVISIBLE, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_DefeatedBegin) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Sub(LVar0, 5) + Call(SetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Wait(15) + Call(PlaySound, SOUND_ACTOR_DEATH) + Call(DropStarPoints, ACTOR_SELF) + Call(SetActorYaw, ACTOR_SELF, 0) + Call(UseBattleCamPreset, BTL_CAM_PRESET_14) + Call(SetBattleCamZoom, 260) + Call(SetBattleCamOffsetZ, 15) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(MoveBattleCamOver, 30) + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_KNOCKOUT_CHIRPING) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Defeated) + Wait(60) + Call(SetActorFlagBits, ACTOR_SELF, ACTOR_FLAG_NO_DMG_APPLY, TRUE) + Return + CaseEq(AVAL_FORM_MAGE) + Call(HideHealthBar, ACTOR_SELF) + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(GetDamageSource, LVar5) + Switch(LVar5) + CaseOrEq(DMG_SRC_NEXT_SLAP_LEFT) + CaseOrEq(DMG_SRC_NEXT_FAN_SMACK_LEFT) + CaseOrEq(DMG_SRC_LAST_SLAP_LEFT) + CaseOrEq(DMG_SRC_LAST_FAN_SMACK_LEFT) + CaseOrEq(DMG_SRC_NEXT_SLAP_RIGHT) + CaseOrEq(DMG_SRC_NEXT_FAN_SMACK_RIGHT) + CaseOrEq(DMG_SRC_LAST_SLAP_RIGHT) + CaseOrEq(DMG_SRC_LAST_FAN_SMACK_RIGHT) + CaseOrEq(DMG_SRC_SPIN_SMASH) + EndCaseGroup + CaseDefault + Set(LVar2, 0) + Loop(24) + Call(SetActorYaw, ACTOR_SELF, LVar2) + Add(LVar2, 30) + Wait(1) + EndLoop + Call(SetActorYaw, ACTOR_SELF, 0) + EndSwitch + Thread + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar1, 10) + Add(LVar2, 10) + Loop(3) + PlayEffect(EFFECT_BIG_SMOKE_PUFF, LVar0, LVar1, LVar2, 0, 0, 0, 0, 0) + Wait(3) + EndLoop + EndThread + Call(SetPartFlagBits, ACTOR_SELF, PRT_MAGE, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_INVISIBLE, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_DefeatedBegin) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Sub(LVar0, 5) + Call(SetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Wait(15) + Call(PlaySound, SOUND_ACTOR_DEATH) + Call(DropStarPoints, ACTOR_SELF) + Call(SetActorYaw, ACTOR_SELF, 0) + Call(UseBattleCamPreset, BTL_CAM_PRESET_14) + Call(SetBattleCamZoom, 260) + Call(SetBattleCamOffsetZ, 15) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(MoveBattleCamOver, 30) + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_KNOCKOUT_CHIRPING) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Defeated) + Call(SetIdleAnimations, ACTOR_SELF, PRT_BASE, Ref(N(DefeatedAnims))) + Wait(60) + Call(SetActorFlagBits, ACTOR_SELF, ACTOR_FLAG_NO_DMG_APPLY, TRUE) + Return + CaseDefault + Set(LVar1, FORM_ANIM_HURT) + ExecWait(N(EVS_GetFormAnims)) + ExecWait(N(EVS_JrTroopa_BaseDeath)) + Return + EndSwitch + Return + End +}; + + +EvtScript N(EVS_TakeTurn) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(GetActorVar, ACTOR_SELF, AVAR_TURNS_UNTIL_SECOND_PHASE, LVar4) + IfEq(LVar4, 0) + Call(SetActorVar, ACTOR_SELF, AVAR_TURNS_UNTIL_SECOND_PHASE, -1) + Call(SetActorVar, ACTOR_SELF, AVAR_TROOPA_DAMAGE, 2) + Call(SetActorVar, ACTOR_SELF, AVAR_TROOPA_STATE, 1) + // ExecWait(N(EVS_Transform)) + Else + Call(GetActorVar, ACTOR_SELF, AVAR_TROOPA_STATE, LVar5) + IfEq(LVar5, 2) + // ExecWait(N(EVS_Regular_Attack)) + Else + Sub(LVar6, 1) + Call(SetActorVar, ACTOR_SELF, AVAR_TURNS_UNTIL_SECOND_PHASE, LVar6) + Call(GetActorVar, ACTOR_SELF, AVAR_TROOPA_STATE, LVar7) + IfEq(LVar7, 0) + // ExecWait(N(EVS_Attack_Shape_Spell)) + Else + // ExecWait(N(EVS_Flying_Attack_Shape_Spell)) + EndIf + Call(GetActorVar, ACTOR_SELF, AVAR_TROOPA_STATE, LVar7) + IfEq(LVar7, 1) + Call(GetActorVar, ACTOR_SELF, AVAR_TURNS_UNTIL_SPARK_FLY_AWAY, LVar8) + Sub(LVar8, 1) + Call(SetActorVar, ACTOR_SELF, AVAR_TURNS_UNTIL_SPARK_FLY_AWAY, LVar8) + IfEq(LVar8, 0) + Wait(16) + ExecWait(N(EVS_Spark_Fly_Away)) + EndIf + IfEq(LVar8, -1) + Wait(16) + // ExecWait(N(EVS_Defense_Jab)) + EndIf + IfEq(LVar8, -2) + Wait(16) + // ExecWait(N(EVS_Spark_Fly_Back)) + EndIf + Else + // ExecWait(N(EVS_Flying_Attack_Shape_Spell)) + EndIf + EndIf + EndIf + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Return + End +}; + +EvtScript N(EVS_Move_Charge) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Return + End +}; + +EvtScript N(EVS_Attack_Slam) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + + Return + End +}; + +EvtScript N(EVS_Spark_Fly_Away) = { + Call(UseBattleCamPreset, BTL_CAM_PRESET_13) + Call(BattleCamTargetActor, 0) + Call(SetBattleCamTarget, -114, 0, 0) + Call(SetBattleCamZoom, 320) + Call(SetBattleCamOffsetZ, 50) + Call(MoveBattleCamOver, 20) + //Call(SpeakToPlayer, ACTOR_SELF, NPC_ANIM_spark_normal_idle_nb, NPC_ANIM_spark_normal_idle_nb, 0, MESSAGE_ID(0x1D, 0x00C0)) + //Call(SetNpcAnimation, 0, NPC_ANIM_spark_normal_idle_nb) + Call(GetNpcPos, 0, LVar0, LVar1, LVar2) + Sub(LVar0, 90) + Add(LVar1, 30) + Call(NpcFlyTo, 0, LVar0, LVar1, LVar2, 25, -6, EASING_COS_IN_OUT) + Call(SetActorVar, ACTOR_SELF, AVAR_TROOPA_DAMAGE, 1) + // Remove Boots + Call(SetActorFlags, ACTOR_SELF, ACTOR_FLAG_UPSIDE_DOWN, TRUE) + Return + End +}; + +EvtScript N(EVS_Lose_Flying_Mode) = { + Thread + Wait(10) + //Call(ActorSpeak, MSG_ID, ACTOR_SELF, PRT_FLYING, ANIM_ParaJrTroopa_Talk, ANIM_ParaJrTroopa_Talk) + EndThread + Call(UseBattleCamPreset, BTL_CAM_DEFAULT) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + IfEq(LVar1, 0) + Goto(0) + EndIf + Call(PlaySoundAtActor, ACTOR_SELF, 0x301) + Call(SetActorSounds, ACTOR_SELF, 2, 0, 0) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2)) + Call(FallToGoal, ACTOR_SELF, 10) + Call(SetActorJumpGravity, ACTOR_SELF, Float(0.8)) + Call(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE) + Call(SetGoalPos, ACTOR_SELF, LVar0, 0, LVar2) + Call(HPBarToCurrent, ACTOR_SELF) + Label(0) + Thread + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar1, 10) + Add(LVar2, 10) + Loop(3) + PlayEffect(EFFECT_BIG_SMOKE_PUFF, LVar0, LVar1, LVar2, 0, 0, 0, 0, 0) + Wait(3) + EndLoop + EndThread + Call(SetPartFlagBits, ACTOR_SELF, PRT_FLYING, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_INVISIBLE, FALSE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_FLYING, ACTOR_PART_FLAG_NO_TARGET, TRUE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_NO_TARGET, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Defeated) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Sub(LVar0, 5) + Call(SetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(PlaySoundAtActor, ACTOR_SELF, 0x20E5) + Call(SetActorYaw, ACTOR_SELF, 0) + Call(UseBattleCamPreset, BTL_CAM_PRESET_14) + Call(SetBattleCamZoom, 260) + Call(SetBattleCamOffsetZ, 15) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(MoveBattleCamOver, 30) + Wait(35) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Jump) + Wait(2) + Call(JumpPartTo, ACTOR_SELF, PRT_BASE, LVar0, LVar1, LVar2, 2, TRUE) + Wait(4) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Midair) + Wait(4) + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Idle) // Angry Idle + Wait(6) + // Call(ActorSpeak, MSG_ID, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Talk, ANIM_JrTroopa_Talk) // Angry Idle + Call(SetAnimation, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_LandAlt) + Set(LVar3, 0) + Loop(12) + Add(LVar3, 15) + Call(SetActorYaw, ACTOR_SELF, LVar3) + Wait(1) + EndLoop + Wait(20) + Loop(12) + Sub(LVar3, 15) + Call(SetActorYaw, ACTOR_SELF, LVar3) + Wait(1) + EndLoop + Wait(20) + Call(ActorSpeak, MSG_NONE, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Talk, ANIM_JrTroopa_Talk) // Angry Idle + Call(ActorSpeak, MSG_NONE, ACTOR_SELF, PRT_BASE, ANIM_JrTroopa_Talk, ANIM_JrTroopa_Talk) // Point Anims + Call(SetPartFlagBits, ACTOR_SELF, PRT_MAGE, ACTOR_PART_FLAG_INVISIBLE, FALSE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_MAGE, ACTOR_PART_FLAG_NO_TARGET, FALSE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_BASE, ACTOR_PART_FLAG_NO_TARGET, TRUE) + Call(SetAnimation, ACTOR_SELF, PRT_MAGE, ANIM_MageJrTroopa_Idle) + Call(SetActorVar, ACTOR_SELF, AVAR_TROOPA_DAMAGE, 1) + Call(SetActorVar, ACTOR_SELF, AVAR_TROOPA_STATE, 2) + // Add Boots + Call(SetActorFlags, ACTOR_SELF, ACTOR_FLAG_UPSIDE_DOWN, TRUE) + Return + End +}; + +EvtScript N(EVS_HandlePhase) = { + Call(GetActorVar, ACTOR_SELF, AVAR_FIRST_TIME_TALKING, LVarB) + IfEq(LVarB, 0) + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(UseBattleCamPreset, BTL_CAM_PRESET_13) + Call(SetBattleCamTarget, -114, 0, 0) + Call(SetBattleCamZoom, 320) + Call(SetBattleCamOffsetZ, 50) + Call(MoveBattleCamOver, 20) + // Call(SpeakToPlayer, 0, ANIM_Spark_Talk_Neutral_NB, ANIM_Spark_Idle_Neutral_NB, 0, MESSAGE_ID(0x1A, 0x00C0)) + Call(SetActorVar, ACTOR_SELF, AVAR_FIRST_TIME_TALKING, 1) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + EndIf + Return + End +}; diff --git a/src/battle/common/newactor/reznor.inc.c b/src/battle/common/newactor/reznor.inc.c new file mode 100644 index 00000000000..9aafa24b6d6 --- /dev/null +++ b/src/battle/common/newactor/reznor.inc.c @@ -0,0 +1,496 @@ +#include "battle/battle.h" +#include "script_api/battle.h" +#include "sprite/npc/Reznor.h" + +#define NAMESPACE A(reznor) + +extern EvtScript N(EVS_Init); +extern s32 N(DefaultAnims)[]; +extern s32 N(FireballAnims)[]; +extern EvtScript N(EVS_Idle); +extern EvtScript N(EVS_TakeTurn); +extern EvtScript N(EVS_HandleEvent); +extern EvtScript N(EVS_Attack_TackleCharge); +extern EvtScript N(EVS_Attack_FireBall); + +enum N(ActorPartIDs) { + PRT_MAIN = 1, + PRT_FIREBALL = 2, +}; + +enum N(ActorParams) { + DMG_TACKLE = 3, + DMG_TACKLEPARTNER = 2, + DMG_FIREBALL = 4, +}; + +s32 N(DefaultAnims)[] = { + STATUS_KEY_NORMAL, ANIM_Reznor_Idle, + STATUS_KEY_STONE, ANIM_Reznor_Still, + STATUS_KEY_SLEEP, ANIM_Reznor_Sleep, + STATUS_KEY_POISON, ANIM_Reznor_Idle, + STATUS_KEY_STOP, ANIM_Reznor_Still, + STATUS_KEY_STATIC, ANIM_Reznor_Idle, + STATUS_KEY_PARALYZE, ANIM_Reznor_Still, + STATUS_KEY_DIZZY, ANIM_Reznor_Dizzy, + STATUS_KEY_FEAR, ANIM_Reznor_Still, + STATUS_END, +}; + +s32 N(FireballAnims)[] = { + STATUS_KEY_NORMAL, ANIM_Reznor_Fireball, + STATUS_END, +}; + +s32 N(DefenseTable)[] = { + ELEMENT_NORMAL, 0, + ELEMENT_END, +}; + +s32 N(StatusTable)[] = { + STATUS_KEY_NORMAL, 0, + STATUS_KEY_DEFAULT, 0, + STATUS_KEY_SLEEP, 100, + STATUS_KEY_POISON, 100, + STATUS_KEY_FROZEN, 100, + STATUS_KEY_DIZZY, 100, + STATUS_KEY_FEAR, 100, + STATUS_KEY_STATIC, 100, + STATUS_KEY_PARALYZE, 100, + STATUS_KEY_SHRINK, 100, + STATUS_KEY_STOP, 100, + STATUS_TURN_MOD_DEFAULT, 0, + STATUS_TURN_MOD_SLEEP, 0, + STATUS_TURN_MOD_POISON, 0, + STATUS_TURN_MOD_FROZEN, 0, + STATUS_TURN_MOD_DIZZY, 0, + STATUS_TURN_MOD_FEAR, 0, + STATUS_TURN_MOD_STATIC, 0, + STATUS_TURN_MOD_PARALYZE, 0, + STATUS_TURN_MOD_SHRINK, 0, + STATUS_TURN_MOD_STOP, 0, + STATUS_END, +}; + +ActorPartBlueprint N(ActorParts)[] = { + { + .flags = ACTOR_PART_FLAG_PRIMARY_TARGET, + .index = PRT_MAIN, + .posOffset = { 0, 0, 0 }, + .targetOffset = { -9, 46 }, + .opacity = 255, + .idleAnimations = N(DefaultAnims), + .defenseTable = N(DefenseTable), + .eventFlags = 0, + .elementImmunityFlags = 0, + .projectileTargetOffset = { -1, -10 }, + }, + { + .flags = ACTOR_PART_FLAG_INVISIBLE | ACTOR_PART_FLAG_NO_TARGET | ACTOR_PART_FLAG_USE_ABSOLUTE_POSITION, + .index = PRT_FIREBALL, + .posOffset = { 0, 0, 0 }, + .targetOffset = { 0, 0 }, + .opacity = 255, + .idleAnimations = N(FireballAnims), + .defenseTable = N(DefenseTable), + .eventFlags = 0, + .elementImmunityFlags = 0, + .projectileTargetOffset = { 0, 0 }, + }, +}; + +ActorBlueprint NAMESPACE = { + .flags = 0, + .type = ACTOR_TYPE_REZNOR, + .level = ACTOR_LEVEL_REZNOR, + .maxHP = 12, + .partCount = ARRAY_COUNT(N(ActorParts)), + .partsData = N(ActorParts), + .initScript = &N(EVS_Init), + .statusTable = N(StatusTable), + .escapeChance = 75, + .airLiftChance = 0, + .hurricaneChance = 0, + .spookChance = 0, + .upAndAwayChance = 0, + .spinSmashReq = 0, + .powerBounceChance = 100, + .coinReward = 0, + .size = { 64, 56 }, + .healthBarOffset = { 0, 0 }, + .statusIconOffset = { -22, 24 }, + .statusTextOffset = { 11, 40 }, +}; + +EvtScript N(EVS_Init) = { + Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn))) + Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle))) + Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent))) + Return + End +}; + +EvtScript N(EVS_Idle) = { + Return + End +}; + +EvtScript N(EVS_ReturnHome) = { + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Run) + Call(SetGoalToHome, ACTOR_SELF) + Call(SetActorSpeed, ACTOR_SELF, Float(8.0)) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Idle) + Return + End +}; + +EvtScript N(EVS_HandleEvent) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(GetLastEvent, ACTOR_SELF, LVar0) + Switch(LVar0) + CaseOrEq(EVENT_HIT_COMBO) + CaseOrEq(EVENT_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_Hit) + EndCaseGroup + CaseEq(EVENT_BURN_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_BurnPain) + SetConst(LVar2, ANIM_Reznor_BurnDead) + ExecWait(EVS_Enemy_BurnHit) + CaseEq(EVENT_BURN_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_BurnPain) + SetConst(LVar2, ANIM_Reznor_BurnDead) + ExecWait(EVS_Enemy_BurnHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_BurnDead) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_SPIN_SMASH_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_SpinSmashHit) + CaseEq(EVENT_SPIN_SMASH_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_SpinSmashHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Dead) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_SHOCK_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_ShockHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_Knockback) + ExecWait(N(EVS_ReturnHome)) + CaseEq(EVENT_SHOCK_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_ShockHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Dead) + ExecWait(EVS_Enemy_Death) + Return + CaseOrEq(EVENT_ZERO_DAMAGE) + CaseOrEq(EVENT_IMMUNE) + CaseOrEq(EVENT_AIR_LIFT_FAILED) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Idle) + ExecWait(EVS_Enemy_NoDamageHit) + EndCaseGroup + CaseEq(EVENT_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_Hit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Dead) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_RECOVER_STATUS) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Idle) + ExecWait(EVS_Enemy_Recover) + CaseEq(EVENT_SCARE_AWAY) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Run) + SetConst(LVar2, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_ScareAway) + Return + CaseEq(EVENT_BEGIN_AIR_LIFT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Run) + ExecWait(EVS_Enemy_AirLift) + CaseEq(EVENT_BLOW_AWAY) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Reznor_Pain) + ExecWait(EVS_Enemy_BlowAway) + Return + CaseDefault + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_AddWalkQuakeFX) = { + Set(LVarA, 0) + Label(0) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(GetActorYaw, ACTOR_SELF, LVar3) + IfEq(LVar3, 0) + Add(LVar0, 20) + Else + Add(LVar0, -20) + EndIf + PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 25, 8, 45, 20, 0) + IfGt(LVarA, 3) + Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.2)) + Set(LVarA, 0) + EndIf + Add(LVarA, 1) + Wait(2) + Goto(0) + Return + End +}; + +EvtScript N(EVS_TakeTurn) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, FALSE) + Call(RandInt, 100, LVar1) + Switch(LVar1) + CaseLt(60) + Set(LVar0, 0) // 60% chance + CaseDefault + Set(LVar0, 1) // 40% chance + EndSwitch + // Set(LVar0, 1) // Set Attack + Switch(LVar0) + CaseEq(0) + ExecWait(N(EVS_Attack_TackleCharge)) + CaseEq(1) + ExecWait(N(EVS_Attack_FireBall)) + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_Attack_TackleCharge) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, FALSE) + Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER) + Call(func_8024ECF8, BTL_CAM_MODEY_MINUS_1, BTL_CAM_MODEX_1, FALSE) + ExecGetTID(N(EVS_AddWalkQuakeFX), LVar9) + Thread + Loop(3) + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_ALBINO_DINO_STEP_A) + Wait(4) + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_ALBINO_DINO_STEP_B) + Wait(4) + EndLoop + EndThread + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Run) + Wait(20) + Call(EnemyTestTarget, ACTOR_SELF, LVarF, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS) + Switch(LVarF) + CaseOrEq(HIT_RESULT_MISS) + CaseOrEq(HIT_RESULT_LUCKY) + Thread + Call(SetGoalToTarget, ACTOR_SELF) + //Call(AddGoalPos, ACTOR_SELF, -100, 0, 0) + Call(SetActorSpeed, ACTOR_SELF, Float(12.0)) + //Call(RunToGoal, ACTOR_SELF, 0, FALSE) + EndThread + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Wait(15) + IfEq(LVarF, HIT_RESULT_LUCKY) + Call(SetGoalToTarget, ACTOR_SELF) + Call(EnemyTestTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetGoalPos, ACTOR_SELF, -240, 0, LVar2) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(MoveBattleCamOver, 20) + Call(SetActorPos, ACTOR_SELF, 240, 0, LVar2) + Call(SetGoalToHome, ACTOR_SELF) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Run) + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + EndIf + Wait(40) + Call(YieldTurn) + ExecWait(N(EVS_ReturnHome)) + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + EndCaseGroup + EndSwitch + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetStatusFlags, ACTOR_SELF, LVarA) + IfFlag(LVarA, STATUS_FLAG_SHRINK) + Call(AddGoalPos, ACTOR_SELF, 12, 0, 0) + Else + Call(AddGoalPos, ACTOR_SELF, 30, 0, 0) + EndIf + Call(SetActorSpeed, ACTOR_SELF, Float(12.0)) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Thread + Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.5)) + EndThread + KillThread(LVar9) + Wait(2) + Call(SetGoalToTarget, ACTOR_SELF) + Call(EnemyDamageTarget, ACTOR_SELF, LVar0, 0, SUPPRESS_EVENT_ALL, 0, DMG_TACKLE, BS_FLAGS1_TRIGGER_EVENTS) + Set(LVarA, 0) + Call(GetBattleFlags, LVar0) + IfNotFlag(LVar0, BS_FLAGS1_ATK_BLOCKED) + Call(GetStatusFlags, ACTOR_PLAYER, LVar0) + IfNotFlag(LVar0, STATUS_FLAG_STONE) + Set(LVarA, 1) + EndIf + EndIf + IfNe(LVarA, 0) + Call(SetTargetActor, ACTOR_SELF, ACTOR_PARTNER) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 32) + Call(SetActorSpeed, ACTOR_SELF, Float(12.0)) + Call(SetGoalPos, ACTOR_SELF, LVar0, 0, LVar2) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetGoalToTarget, ACTOR_SELF) + Call(SetDamageSource, DMG_SRC_CRUSH_PARTNER) + Call(EnemyDamageTarget, ACTOR_SELF, LVar0, 0, SUPPRESS_EVENT_ALL, 0, DMG_TACKLEPARTNER, BS_FLAGS1_TRIGGER_EVENTS) + Call(GetBattleFlags, LVar0) + IfNotFlag(LVar0, BS_FLAGS1_ATK_BLOCKED) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetGoalPos, ACTOR_SELF, -240, 0, LVar2) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetActorPos, ACTOR_SELF, 240, 0, LVar2) + Call(SetGoalToHome, ACTOR_SELF) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Run) + Wait(8) + Call(YieldTurn) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Idle) + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + Else + Call(UseBattleCamPreset, BTL_CAM_PRESET_19) + Call(SetBattleCamTarget, -45, 60, 0) + Call(SetBattleCamZoom, 460) + Call(SetBattleCamOffsetZ, 0) + Call(MoveBattleCamOver, 30) + EndIf + EndIf + Switch(LVarF) + CaseOrEq(HIT_RESULT_HIT) + CaseOrEq(HIT_RESULT_NO_DAMAGE) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 40) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.0)) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(JumpToGoal, ACTOR_SELF, 15, FALSE, TRUE, FALSE) + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_ALBINO_DINO_STEP_B) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Idle) + Wait(10) + Call(YieldTurn) + ExecWait(N(EVS_ReturnHome)) + EndCaseGroup + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_Attack_FireBall) = { + Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetStatusFlags, ACTOR_SELF, LVar0) + Call(UseBattleCamPreset, BTL_CAM_PRESET_19) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Walk) +// Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) +// Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) +// Add(LVar0, 100) +// Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) +// Call(SetActorSpeed, ACTOR_SELF, Float(6.0)) +// Call(RunToGoal, ACTOR_SELF, 15, FALSE) +// Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) +// Sub(LVar0, 30) +// Add(LVar1, 65) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Shoot) + Wait(10) + Call(SetAnimation, ACTOR_SELF, PRT_FIREBALL, ANIM_Reznor_Fireball) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Sub(LVar0, 20) + Set(LVar1, 10) + Call(SetPartPos, ACTOR_SELF, PRT_FIREBALL, LVar0, LVar1, LVar2) + Call(SetPartScale, ACTOR_SELF, PRT_FIREBALL, Float(1.0), Float(1.0), Float(1.0)) + Wait(15) + /* + Call(SetBattleCamTarget, LVar0, LVar1, LVar2) + Call(SetBattleCamZoom, 400) + Call(MoveBattleCamOver, 40) + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(MoveBattleCamOver, 55) + Add(LVar2, 20) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar3, LVar4, -100) + */ + Call(EnemyTestTarget, ACTOR_SELF, LVarA, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS) + Switch(LVarA) + CaseOrEq(HIT_RESULT_MISS) + CaseOrEq(HIT_RESULT_LUCKY) + Wait(15) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Idle) + Wait(15) + IfEq(LVarA, HIT_RESULT_LUCKY) + Call(EnemyTestTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0) + EndIf + Wait(30) + Return + EndCaseGroup + CaseDefault + EndSwitch + Call(SetPartFlagBits, ACTOR_SELF, PRT_FIREBALL, ACTOR_PART_FLAG_INVISIBLE, FALSE) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Set(LVar1, 10) + Call(SetPartMoveSpeed, ACTOR_SELF, PRT_FIREBALL, Float(6.0)) + //Call(FlyPartTo, ACTOR_SELF, PRT_FIREBALL, LVar0, LVar1, LVar2, 0, 0, EASING_LINEAR) + //Call(SetPartFlagBits, ACTOR_SELF, PRT_FIREBALL, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Call(SetPartJumpGravity, ACTOR_SELF, PRT_FIREBALL, Float(0.01)) + Call(SetPartSounds, ACTOR_SELF, PRT_FIREBALL, ACTOR_SOUND_JUMP, SOUND_EMBER_SPIT, SOUND_NONE) + Call(JumpPartTo, ACTOR_SELF, PRT_FIREBALL, LVar0, LVar1, LVar2, 0, FALSE) + Call(SetPartFlagBits, ACTOR_SELF, PRT_FIREBALL, ACTOR_PART_FLAG_INVISIBLE, TRUE) + Wait(2) + Call(EnemyDamageTarget, ACTOR_SELF, LVarF, (DAMAGE_TYPE_FIRE | DAMAGE_TYPE_NO_CONTACT), 0, 0, DMG_FIREBALL, BS_FLAGS1_TRIGGER_EVENTS) + Switch(LVarF) + CaseOrEq(HIT_RESULT_HIT) + CaseOrEq(HIT_RESULT_NO_DAMAGE) + Wait(20) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Reznor_Idle) + Wait(20) + //Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(YieldTurn) + //ExecWait(N(EVS_ReturnHome)) + EndCaseGroup + EndSwitch + Return + End +}; diff --git a/src/battle/common/newactor/smoke_puff.inc.c b/src/battle/common/newactor/smoke_puff.inc.c new file mode 100644 index 00000000000..29db639d6eb --- /dev/null +++ b/src/battle/common/newactor/smoke_puff.inc.c @@ -0,0 +1,584 @@ +#include "common.h" +#include "battle/battle.h" +#include "script_api/battle.h" +#include "sprite/npc/SmokePuff.h" + +#define NAMESPACE A(smoke_puff) + +enum N(ActorPartIDs) { + PRT_MAIN = 1, +}; + +enum N(ActorVars) { + AVAR_MISS = 0, + AVAR_POS = 1, + AVAR_SMOG = 2, +}; + +extern EvtScript N(EVS_Init); +extern s32 N(DefaultAnims)[]; +extern EvtScript N(EVS_HandlePhase); +extern EvtScript N(EVS_Switch_Position); +extern EvtScript N(EVS_Switch_Home); +extern EvtScript N(EVS_Idle); +extern EvtScript N(EVS_HandleEvent); +extern EvtScript N(EVS_TakeTurn); +extern EvtScript N(EVS_Move_Smog); +extern EvtScript N(EVS_Smog_State); +extern EvtScript N(EVS_Attack_Slam); +extern EvtScript N(EVS_Attack_Shifty_Slam); + +s32 N(DefaultAnimations)[] = { + STATUS_KEY_NORMAL, ANIM_SmokePuff_Idle, + STATUS_KEY_STONE, ANIM_SmokePuff_Still, + STATUS_KEY_SLEEP, ANIM_SmokePuff_Sleep, + STATUS_KEY_POISON, ANIM_SmokePuff_Idle, + STATUS_KEY_STOP, ANIM_SmokePuff_Still, + STATUS_KEY_STATIC, ANIM_SmokePuff_Idle, + STATUS_KEY_PARALYZE, ANIM_SmokePuff_Still, + STATUS_KEY_DIZZY, ANIM_SmokePuff_Dizzy, + STATUS_END, +}; + +s32 N(DefenseTable)[] = { + ELEMENT_NORMAL, 0, + ELEMENT_MYSTERY, 0, + ELEMENT_END, +}; + +s32 N(StatusTable)[] = { + STATUS_KEY_NORMAL, 0, + STATUS_KEY_DEFAULT, 0, + STATUS_KEY_SLEEP, 50, + STATUS_KEY_POISON, 90, + STATUS_KEY_FROZEN, 0, + STATUS_KEY_DIZZY, 100, + STATUS_KEY_FEAR, 0, + STATUS_KEY_STATIC, 70, + STATUS_KEY_PARALYZE, 40, + STATUS_KEY_SHRINK, 75, + STATUS_KEY_STOP, 80, + STATUS_TURN_MOD_DEFAULT, 0, + STATUS_TURN_MOD_SLEEP, 0, + STATUS_TURN_MOD_POISON, 0, + STATUS_TURN_MOD_FROZEN, 0, + STATUS_TURN_MOD_DIZZY, 0, + STATUS_TURN_MOD_FEAR, 0, + STATUS_TURN_MOD_STATIC, 0, + STATUS_TURN_MOD_PARALYZE, 0, + STATUS_TURN_MOD_SHRINK, 0, + STATUS_TURN_MOD_STOP, -1, + STATUS_END, +}; + +ActorPartBlueprint N(ActorParts)[] = { + { + .flags = ACTOR_PART_FLAG_PRIMARY_TARGET, + .index = PRT_MAIN, + .posOffset = { 0, 0, 0 }, + .targetOffset = { -2, 26 }, + .opacity = 255, + .idleAnimations = N(DefaultAnimations), + .defenseTable = N(DefenseTable), + .eventFlags = 0, + .elementImmunityFlags = 0, + .projectileTargetOffset = { 0, -13 }, + }, +}; + +ActorBlueprint NAMESPACE = { + .flags = ACTOR_FLAG_FLYING, + .type = ACTOR_TYPE_SMOKE_PUFF, + .level = ACTOR_LEVEL_SMOKE_PUFF, + .maxHP = 4, + .partCount = ARRAY_COUNT(N(ActorParts)), + .partsData = N(ActorParts), + .initScript = &N(EVS_Init), + .statusTable = N(StatusTable), + .escapeChance = 50, + .airLiftChance = 90, + .hurricaneChance = 90, + .spookChance = 40, + .upAndAwayChance = 95, + .spinSmashReq = 0, + .powerBounceChance = 80, + .coinReward = 2, + .size = { 32, 32 }, + .healthBarOffset = { 0, 0 }, + .statusIconOffset = { -10, 20 }, + .statusTextOffset = { 10, 20 }, +}; + +EvtScript N(EVS_Init) = { + Call(BindHandlePhase, ACTOR_SELF, Ref(N(EVS_HandlePhase))) + Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle))) + Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent))) + Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn))) + Call(SetActorVar, ACTOR_SELF, AVAR_MISS, 0) + Call(SetActorVar, ACTOR_SELF, AVAR_POS, FALSE) + Call(SetActorVar, ACTOR_SELF, AVAR_SMOG, 2) + Return + End +}; + +EvtScript N(EVS_HandlePhase) = { +/* Call(GetBattlePhase, LVar4) + Switch(LVar4) + CaseEq(PHASE_PLAYER_BEGIN) + CaseEq(PHASE_ENEMY_BEGIN) + CaseEq(PHASE_ENEMY_END) + EndSwitch +*/ + Return + End +}; + +/* +EvtScript N(EVS_Smog_State) = { + Thread + Call(SetActorVar, ACTOR_SELF, AVAR_SMOG, 2) + Call(SetPartEventBits, ACTOR_SELF, 1, ACTOR_EVENT_FLAG_ILLUSORY, TRUE) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(UseBattleCamPreset, BTL_CAM_PRESET_19) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar1, 30) + Call(SetBattleCamTarget, LVar0, LVar1, LVar2) + Call(SetBattleCamZoom, 300) + Call(SetBattleCamOffsetZ, -10) + Wait(15) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + PlayEffect(EFFECT_SMOKE_BURST, 0, LVar0, LVar1, LVar2, Float(1.0), 10, 0) + Loop(4) + Call(SetActorFlagBits, ACTOR_SELF, ACTOR_FLAG_BLUR_ENABLED, TRUE) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 18) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(10.0)) + Call(FlyToGoal, ACTOR_SELF, 0, 0, EASING_COS_IN_OUT) + Sub(LVar0, 18) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(10.0)) + Call(FlyToGoal, ACTOR_SELF, 0, 0, EASING_LINEAR) + Sub(LVar0, 18) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(10.0)) + Call(FlyToGoal, ACTOR_SELF, 0, 0, EASING_LINEAR) + Add(LVar0, 18) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(10.0)) + Call(FlyToGoal, ACTOR_SELF, 0, 0, EASING_COS_IN_OUT) + Call(SetPartAlpha, ACTOR_SELF, 1, 0) + Wait(5) + Call(SetPartAlpha, ACTOR_SELF, 1, 255) + EndLoop + Call(SetPartAlpha, ACTOR_SELF, 1, 0) + Wait(5) + Call(SetPartAlpha, ACTOR_SELF, 1, 255) + Call(SetPartEventBits, ACTOR_SELF, 1, ACTOR_EVENT_FLAG_ILLUSORY, FALSE) + Return + End +}; +*/ + +EvtScript N(EVS_Switch_Position) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, FALSE) + Call(SetGoalToHome, ACTOR_SELF) + Call(SetActorSpeed, ACTOR_SELF, Float(6.0)) + Call(SetAnimation, ACTOR_SELF, 1, ANIM_SmokePuff_Run) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + IfEq(LVar1, 0) + Add(LVar1, 40) + Else + Sub(LVar1, 40) + EndIf + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(FlyToGoal, ACTOR_SELF, 15, 0, EASING_COS_IN_OUT) + Call(ForceHomePos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(HPBarToHome, ACTOR_SELF) + Call(SetActorFlagBits, ACTOR_SELF, ACTOR_FLAG_TYPE_CHANGED, TRUE) + Wait(5) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_Switch_Home) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE ) + Call(EnableIdleScript, ACTOR_SELF, FALSE) + Call(GetActorVar, ACTOR_SELF, AVAR_POS, LVar3) + Call(SetAnimation, ACTOR_SELF, 1, ANIM_SmokePuff_Run) + Wait(2) + Switch (LVar3) + CaseEq(0) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar1, 40) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorFlagBits, ACTOR_SELF, ACTOR_FLAG_TYPE_CHANGED, TRUE) + Call(HPBarToHome, ACTOR_SELF) + Call(FlyToGoal, ACTOR_SELF, 15, 0, EASING_COS_IN_OUT) + Call(SetActorVar, AVAR_POS, TRUE) + CaseEq(1) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Sub(LVar1, 40) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorFlagBits, ACTOR_SELF, 0, TRUE) + Call(HPBarToHome, ACTOR_SELF) + Call(FlyToGoal, ACTOR_SELF, 15, 0, EASING_COS_IN_OUT) + Call(SetActorVar, AVAR_POS, FALSE) + EndSwitch + Wait(13) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Return + End +}; + +#include "common/CosInterpMinMax.inc.c" + +EvtScript N(EVS_Idle) = { + Set(LVarF, 0) + Loop(0) + Call(N(CosInterpMinMax), LVarF, LVar0, Float(0.97), Float(1.03), 15, 0, 0) + Call(N(CosInterpMinMax), LVarF, LVar1, Float(1.03), Float(0.97), 15, 0, 0) + Add(LVarF, 1) + Call(SetActorScale, ACTOR_SELF, LVar1, LVar0, Float(1.0)) + IfGe(LVarF, 30) + Set(LVarF, 0) + EndIf + Wait(1) + EndLoop + Return + End +}; + +EvtScript N(EVS_ReturnHome) = { + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_SmokePuff_Run) + Call(SetActorSpeed, ACTOR_SELF, Float(6.0)) + Call(SetGoalToHome, ACTOR_SELF) + Call(FlyToGoal, ACTOR_SELF, 0, 0, EASING_LINEAR) + Return + End +}; + +EvtScript N(EVS_HandleEvent) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(GetLastEvent, ACTOR_SELF, LVar0) + Switch(LVar0) + CaseOrEq(EVENT_HIT_COMBO) + CaseOrEq(EVENT_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_Hit) + EndCaseGroup + CaseEq(EVENT_BURN_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Burn_Pain) + SetConst(LVar2, ANIM_SmokePuff_Burn_Dead) + ExecWait(EVS_Enemy_BurnHit) + CaseEq(EVENT_BURN_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Burn_Pain) + SetConst(LVar2, ANIM_SmokePuff_Burn_Dead) + ExecWait(EVS_Enemy_BurnHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Burn_Dead) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_SPIN_SMASH_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_SpinSmashHit) + CaseEq(EVENT_SPIN_SMASH_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_SpinSmashHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_SHOCK_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_ShockHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_Knockback) + ExecWait(N(EVS_ReturnHome)) + CaseEq(EVENT_SHOCK_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_ShockHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_Death) + Return + CaseOrEq(EVENT_ZERO_DAMAGE) + CaseOrEq(EVENT_IMMUNE) + CaseOrEq(EVENT_AIR_LIFT_FAILED) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Idle) + ExecWait(EVS_Enemy_NoDamageHit) + EndCaseGroup + CaseEq(EVENT_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_Hit) + Wait(10) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_BEGIN_FIRST_STRIKE) + Call(SetActorPos, ACTOR_SELF, 20, 0, 0) + Call(HPBarToCurrent, ACTOR_SELF) + CaseEq(EVENT_END_FIRST_STRIKE) + ExecWait(N(EVS_ReturnHome)) + Call(HPBarToHome, ACTOR_SELF) + CaseEq(EVENT_RECOVER_STATUS) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Idle) + ExecWait(EVS_Enemy_Recover) + CaseEq(EVENT_SCARE_AWAY) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Run) + SetConst(LVar2, ANIM_SmokePuff_Pain) + ExecWait(EVS_Enemy_ScareAway) + Return + CaseEq(EVENT_BEGIN_AIR_LIFT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Run) + ExecWait(EVS_Enemy_AirLift) + CaseEq(EVENT_BLOW_AWAY) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_SmokePuff_Run) + ExecWait(EVS_Enemy_BlowAway) + Return + CaseDefault + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_TakeTurn) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + // Call(GetStatusFlags, ACTOR_SELF, LVar3) + // IfFlag(LVar3, STATUS_FLAG_DODGY) + // Call(RandInt, 100, LVar4) + // IfLt(LVar4, 50) + // ExecWait(N(EVS_Move_Smog)) + // Else + // ExecWait(N(EVS_Attack_Slam)) + // Else + // ExecWait(N(EVS_Attack_Shifty_Slam)) + // EndIf + ExecWait(N(EVS_Switch_Position)) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_Move_Smog) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) +// Exec(N(EVS_Smog_State)) + ExecWait(N(EVS_ReturnHome)) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_Attack_Slam) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER) + Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(func_8024ECF8, -1, 1, 0) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_SmokePuff_Run) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 45) + Add(LVar1, 40) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(4.5)) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_SmokePuff_Idle_Mad) + Call(FlyToGoal, ACTOR_SELF, 25, -10, EASING_COS_IN_OUT) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(7.0)) + Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_COS_IN) + //Wait(10) + //Call(AddGoalPos, ACTOR_SELF, 50, 0, 0) + //Call(SetActorSpeed, ACTOR_SELF, Float(6.0)) + //Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_SIN_OUT) + Wait(5) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_SmokePuff_Dash) + Wait(5) + Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS) + Switch(LVar0) + CaseOrEq(HIT_RESULT_MISS) + CaseOrEq(HIT_RESULT_LUCKY) + Set(LVarA, LVar0) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2)) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetGoalPos, ACTOR_SELF, LVar0, 0, LVar2) + Thread + Call(SetActorRotationOffset, ACTOR_SELF, 0, 16, 0) + SetF(LVar0, Float(0.0)) + Loop(15) + AddF(LVar0, Float(12.0)) + Call(SetActorRotation, ACTOR_SELF, 0, 0, LVar0) + Wait(1) + EndLoop + EndThread + Call(AddGoalPos, ACTOR_SELF, -10, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 20, FALSE, TRUE, FALSE) + IfEq(LVarA, HIT_RESULT_LUCKY) + Call(EnemyTestTarget, ACTOR_SELF, LVarA, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0) + EndIf + Call(AddGoalPos, ACTOR_SELF, -30, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 15, FALSE, TRUE, FALSE) + Call(AddGoalPos, ACTOR_SELF, -20, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE) + Call(AddGoalPos, ACTOR_SELF, -10, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE) + Wait(15) + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(YieldTurn) + Call(SetActorYaw, ACTOR_SELF, 180) + Call(AddActorDecoration, ACTOR_SELF, 1, 0, ACTOR_DECORATION_SWEAT) + ExecWait(N(EVS_ReturnHome)) + Call(RemoveActorDecoration, ACTOR_SELF, 1, 0) + Call(SetActorYaw, ACTOR_SELF, 0) + Call(EnableIdleScript, ACTOR_SELF, 1) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + EndCaseGroup + EndSwitch + Call(SetGoalToTarget, ACTOR_SELF) + Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_COS_IN) + Wait(2) + Call(EnemyDamageTarget, ACTOR_SELF, LVar0, 0, SUPPRESS_EVENT_ALL, 0, 4, BS_FLAGS1_TRIGGER_EVENTS) + Switch(LVar0) + CaseOrEq(HIT_RESULT_HIT) + CaseOrEq(HIT_RESULT_NO_DAMAGE) + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(SetGoalToTarget, ACTOR_SELF) + Call(AddGoalPos, ACTOR_SELF, 30, 0, 0) + Call(SetActorJumpGravity, ACTOR_SELF, Float(0.8)) + Call(JumpWithBounce, ACTOR_SELF, 10, Float(5.0)) + Wait(10) + Call(YieldTurn) + ExecWait(N(EVS_ReturnHome)) + EndCaseGroup + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + + +EvtScript N(EVS_Attack_Shifty_Slam) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER) + Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(func_8024ECF8, -1, 1, 0) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_SmokePuff_Run) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 45) + Add(LVar1, 40) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(4.5)) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_SmokePuff_Idle_Mad) + Call(FlyToGoal, ACTOR_SELF, 25, -10, EASING_COS_IN_OUT) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorSpeed, ACTOR_SELF, Float(7.0)) + Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_COS_IN) + //Wait(10) + //Call(AddGoalPos, ACTOR_SELF, 50, 0, 0) + //Call(SetActorSpeed, ACTOR_SELF, Float(6.0)) + //Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_SIN_OUT) + Wait(5) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_SmokePuff_Dash) + Wait(5) + Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS) + Switch(LVar0) + CaseOrEq(HIT_RESULT_MISS) + CaseOrEq(HIT_RESULT_LUCKY) + Set(LVarA, LVar0) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2)) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetGoalPos, ACTOR_SELF, LVar0, 0, LVar2) + Thread + Call(SetActorRotationOffset, ACTOR_SELF, 0, 16, 0) + SetF(LVar0, Float(0.0)) + Loop(15) + AddF(LVar0, Float(12.0)) + Call(SetActorRotation, ACTOR_SELF, 0, 0, LVar0) + Wait(1) + EndLoop + EndThread + Call(AddGoalPos, ACTOR_SELF, -10, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 20, FALSE, TRUE, FALSE) + IfEq(LVarA, HIT_RESULT_LUCKY) + Call(EnemyTestTarget, ACTOR_SELF, LVarA, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0) + EndIf + Call(AddGoalPos, ACTOR_SELF, -30, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 15, FALSE, TRUE, FALSE) + Call(AddGoalPos, ACTOR_SELF, -20, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE) + Call(AddGoalPos, ACTOR_SELF, -10, 0, 0) + Call(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE) + Wait(15) + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(YieldTurn) + Call(SetActorYaw, ACTOR_SELF, 180) + Call(AddActorDecoration, ACTOR_SELF, 1, 0, ACTOR_DECORATION_SWEAT) + ExecWait(N(EVS_ReturnHome)) + Call(RemoveActorDecoration, ACTOR_SELF, 1, 0) + Call(SetActorYaw, ACTOR_SELF, 0) + Call(EnableIdleScript, ACTOR_SELF, 1) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + EndCaseGroup + EndSwitch + Call(SetGoalToTarget, ACTOR_SELF) + Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_COS_IN) + Wait(2) + Call(EnemyDamageTarget, ACTOR_SELF, LVar0, 0, SUPPRESS_EVENT_ALL, 0, 4, BS_FLAGS1_TRIGGER_EVENTS) + Switch(LVar0) + CaseOrEq(HIT_RESULT_HIT) + CaseOrEq(HIT_RESULT_NO_DAMAGE) + Call(UseBattleCamPreset, BTL_CAM_PRESET_12) + Call(SetGoalToTarget, ACTOR_SELF) + Call(AddGoalPos, ACTOR_SELF, 30, 0, 0) + Call(SetActorJumpGravity, ACTOR_SELF, Float(0.8)) + Call(JumpWithBounce, ACTOR_SELF, 10, Float(5.0)) + Wait(10) + Call(YieldTurn) + ExecWait(N(EVS_ReturnHome)) + EndCaseGroup + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; diff --git a/src/battle/common/newactor/uproot.inc.c b/src/battle/common/newactor/uproot.inc.c new file mode 100644 index 00000000000..fdc5d7d4799 --- /dev/null +++ b/src/battle/common/newactor/uproot.inc.c @@ -0,0 +1,442 @@ +#include "battle/battle.h" +#include "script_api/battle.h" +#include "sprite/npc/Uproot.h" + +#define NAMESPACE A(uproot) + +#include "common/CalculateArcsinDeg.inc.c" + +extern EvtScript N(EVS_Init); +extern s32 N(DefaultAnims)[]; +extern s32 N(FidgetAnims)[]; +extern EvtScript N(EVS_Idle); +extern EvtScript N(EVS_TakeTurn); +extern EvtScript N(EVS_HandleEvent); +extern EvtScript N(EVS_Attack_Vault); + +enum N(ActorPartIDs) { + PRT_MAIN = 1, +}; + +enum N(ActorVars) { + AVAR_FIDGET_CHECK = 0, +}; + +enum N(ActorParams) { + DMG_VAULT = 2, +}; + +s32 N(DefaultAnims)[] = { + STATUS_KEY_NORMAL, ANIM_Uproot_Idle, + STATUS_KEY_STONE, ANIM_Uproot_Still, + STATUS_KEY_SLEEP, ANIM_Uproot_Sleep, + STATUS_KEY_POISON, ANIM_Uproot_Idle, + STATUS_KEY_STOP, ANIM_Uproot_Still, + STATUS_KEY_STATIC, ANIM_Uproot_Idle, + STATUS_KEY_PARALYZE, ANIM_Uproot_Still, + STATUS_KEY_DIZZY, ANIM_Uproot_Dizzy, + STATUS_KEY_FEAR, ANIM_Uproot_Dizzy, + STATUS_END, +}; + +s32 N(FidgetAnims)[] = { + STATUS_KEY_NORMAL, ANIM_Uproot_Fidget, + STATUS_KEY_STONE, ANIM_Uproot_Still, + STATUS_KEY_SLEEP, ANIM_Uproot_Sleep, + STATUS_KEY_POISON, ANIM_Uproot_Idle, + STATUS_KEY_STOP, ANIM_Uproot_Still, + STATUS_KEY_STATIC, ANIM_Uproot_Idle, + STATUS_KEY_PARALYZE, ANIM_Uproot_Still, + STATUS_KEY_DIZZY, ANIM_Uproot_Dizzy, + STATUS_KEY_FEAR, ANIM_Uproot_Dizzy, + STATUS_END, +}; + +s32 N(DefenseTable)[] = { + ELEMENT_NORMAL, 0, + ELEMENT_FIRE, -1, + ELEMENT_END, +}; + +s32 N(StatusTable)[] = { + STATUS_KEY_NORMAL, 0, + STATUS_KEY_DEFAULT, 0, + STATUS_KEY_SLEEP, 100, + STATUS_KEY_POISON, 0, + STATUS_KEY_FROZEN, 0, + STATUS_KEY_DIZZY, 80, + STATUS_KEY_FEAR, 0, + STATUS_KEY_STATIC, 0, + STATUS_KEY_PARALYZE, 80, + STATUS_KEY_SHRINK, 100, + STATUS_KEY_STOP, 50, + STATUS_TURN_MOD_DEFAULT, 0, + STATUS_TURN_MOD_SLEEP, 0, + STATUS_TURN_MOD_POISON, 0, + STATUS_TURN_MOD_FROZEN, 0, + STATUS_TURN_MOD_DIZZY, 0, + STATUS_TURN_MOD_FEAR, 0, + STATUS_TURN_MOD_STATIC, 0, + STATUS_TURN_MOD_PARALYZE, 0, + STATUS_TURN_MOD_SHRINK, 0, + STATUS_TURN_MOD_STOP, 0, + STATUS_END, +}; + +ActorPartBlueprint N(ActorParts)[] = { + { + .flags = ACTOR_PART_FLAG_PRIMARY_TARGET, + .index = PRT_MAIN, + .posOffset = { 0, 0, 0 }, + .targetOffset = { 0, 24 }, + .opacity = 255, + .idleAnimations = N(DefaultAnims), + .defenseTable = N(DefenseTable), + .eventFlags = 0, + .elementImmunityFlags = 0, + .projectileTargetOffset = { -1, -10 }, + }, +}; + +ActorBlueprint NAMESPACE = { + .flags = 0, + .type = ACTOR_TYPE_UPROOT, + .level = ACTOR_LEVEL_UPROOT, + .maxHP = 6, + .partCount = ARRAY_COUNT(N(ActorParts)), + .partsData = N(ActorParts), + .initScript = &N(EVS_Init), + .statusTable = N(StatusTable), + .escapeChance = 25, + .airLiftChance = 0, + .hurricaneChance = 0, + .spookChance = 0, + .upAndAwayChance = 0, + .spinSmashReq = 0, + .powerBounceChance = 50, + .coinReward = 2, + .size = { 32, 32 }, + .healthBarOffset = { 0, 0 }, + .statusIconOffset = { -10, 20 }, + .statusTextOffset = { 8, 25 }, +}; + +EvtScript N(EVS_Init) = { + Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn))) + Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle))) + Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent))) + Call(SetActorVar, ACTOR_SELF, AVAR_FIDGET_CHECK, 0) + Return + End +}; + +EvtScript N(EVS_Idle) = { + + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 5) + Call(SetIdleAnimations, ACTOR_SELF, PRT_MAIN, Ref(N(FidgetAnims))) + + Add(LVar0, 4) + Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Sub(LVar0, 5) + + Call(SetIdleAnimations, ACTOR_SELF, PRT_MAIN, Ref(N(DefaultAnims))) + Return + End +}; + +EvtScript N(EVS_ReturnHome) = { + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Run) + Call(SetGoalToHome, ACTOR_SELF) + Call(SetActorSpeed, ACTOR_SELF, Float(8.0)) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Idle) + Return + End +}; + +EvtScript N(EVS_HandleEvent) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE) + Call(GetLastEvent, ACTOR_SELF, LVar0) + Switch(LVar0) + CaseOrEq(EVENT_HIT_COMBO) + CaseOrEq(EVENT_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_Hit) + EndCaseGroup + CaseEq(EVENT_BURN_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_BurnHurt) + SetConst(LVar2, ANIM_Uproot_BurnHurt) + ExecWait(EVS_Enemy_BurnHit) + CaseEq(EVENT_BURN_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_BurnHurt) + SetConst(LVar2, ANIM_Uproot_BurnHurt) + ExecWait(EVS_Enemy_BurnHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_BurnHurt) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_SPIN_SMASH_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_SpinSmashHit) + CaseEq(EVENT_SPIN_SMASH_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_SpinSmashHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_SHOCK_HIT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_ShockHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_Knockback) + ExecWait(N(EVS_ReturnHome)) + CaseEq(EVENT_SHOCK_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_ShockHit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_Death) + Return + CaseOrEq(EVENT_ZERO_DAMAGE) + CaseOrEq(EVENT_IMMUNE) + CaseOrEq(EVENT_AIR_LIFT_FAILED) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Idle) + ExecWait(EVS_Enemy_NoDamageHit) + EndCaseGroup + CaseEq(EVENT_DEATH) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_Hit) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_Death) + Return + CaseEq(EVENT_RECOVER_STATUS) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Idle) + ExecWait(EVS_Enemy_Recover) + CaseEq(EVENT_SCARE_AWAY) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Run) + SetConst(LVar2, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_ScareAway) + Return + CaseEq(EVENT_BEGIN_AIR_LIFT) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Run) + ExecWait(EVS_Enemy_AirLift) + CaseEq(EVENT_BLOW_AWAY) + SetConst(LVar0, PRT_MAIN) + SetConst(LVar1, ANIM_Uproot_Hurt) + ExecWait(EVS_Enemy_BlowAway) + Return + CaseDefault + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_TakeTurn) = { + Call(GetActorVar, ACTOR_SELF, AVAR_FIDGET_CHECK, LVar8) + Add(LVar8, 4) + Wait(LVar8) + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, FALSE) + ExecWait(N(EVS_Attack_Vault)) + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; + +EvtScript N(EVS_Attack_Vault) = { + Call(UseIdleAnimation, ACTOR_SELF, FALSE) + Call(EnableIdleScript, ACTOR_SELF, FALSE) + Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER) + Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH) + Call(BattleCamTargetActor, ACTOR_SELF) + Call(func_8024ECF8, BTL_CAM_MODEY_MINUS_1, BTL_CAM_MODEX_1, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Run) + Call(SetGoalToTarget, ACTOR_SELF) + Call(AddGoalPos, ACTOR_SELF, 50, 0, 0) + Call(SetActorSpeed, ACTOR_SELF, Float(6.0)) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Idle) + Call(SetActorDispOffset, ACTOR_SELF, 0, -1, 0) + Wait(1) + Call(SetActorDispOffset, ACTOR_SELF, 0, -2, 0) + Wait(5) + Call(SetActorDispOffset, ACTOR_SELF, 0, 0, 0) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Rise) + Call(PlaySoundAtPart, ACTOR_SELF, PRT_MAIN, SOUND_DRY_BONES_RATTLE) + Wait(13) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_BuildUp) + Wait(18) + Call(GetActorPos, ACTOR_SELF, LVar5, LVar6, LVar7) + Add(LVar6, 75) + Call(SetActorPos, ACTOR_SELF, LVar5, LVar6, LVar7) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_PreVault) + Call(PlaySoundAtActor, ACTOR_SELF, SOUND_POKEY_SWAY) + Wait(4) + Call(PlaySoundAtActor, ACTOR_SELF, 0x125) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Vault) + Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS) + Switch(LVar0) + CaseOrEq(HIT_RESULT_MISS) + CaseOrEq(HIT_RESULT_LUCKY) + Set(LVarA, LVar0) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Sub(LVar0, 10) + Set(LVar1, 0) + Add(LVar2, 3) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2)) + Thread + Call(GetActorPos, ACTOR_SELF, LVar1, LVar2, LVar3) + Set(LVar0, 0) + Loop(16) + Call(GetActorPos, ACTOR_SELF, LVar4, LVar5, LVar6) + Call(N(CalculateArcsinDeg), LVar1, LVar2, LVar4, LVar5, LVar0) + Set(LVar1, LVar4) + Set(LVar2, LVar5) + Set(LVar3, LVar6) + Wait(1) + EndLoop + EndThread + Thread + Wait(6) + EndThread + Call(JumpToGoal, ACTOR_SELF, 16, FALSE, TRUE, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Sleep) + Call(SetActorScale, ACTOR_SELF, Float(1.1), Float(0.8), Float(1.0)) + Wait(1) + Call(SetActorScale, ACTOR_SELF, Float(1.3), Float(0.5), Float(1.0)) + Wait(1) + Call(SetActorScale, ACTOR_SELF, Float(1.0), Float(1.0), Float(1.0)) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Hurt) + Wait(5) + IfEq(LVarA, HIT_RESULT_LUCKY) + Call(EnemyTestTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0) + EndIf + Wait(5) + Call(SetGoalToTarget, ACTOR_SELF) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 20) + Set(LVar1, 0) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(SetActorJumpGravity, ACTOR_SELF, Float(2.0)) + Thread + Wait(4) + Set(LVar0, 180) + Loop(4) + Sub(LVar0, 45) + Wait(1) + EndLoop + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Vault) + EndThread + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 0) + Set(LVar1, 0) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(JumpToGoal, ACTOR_SELF, 12, FALSE, TRUE, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Dizzy) + Wait(5) + Call(UseBattleCamPreset, BTL_CAM_DEFAULT) + Call(YieldTurn) + Call(SetActorYaw, ACTOR_SELF, 180) + Call(AddActorDecoration, ACTOR_SELF, PRT_MAIN, 0, ACTOR_DECORATION_SWEAT) + Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(2.0)) + Call(SetGoalToHome, ACTOR_SELF) + Call(SetActorSpeed, ACTOR_SELF, Float(8.0)) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(1.0)) + Call(SetActorYaw, ACTOR_SELF, 0) + Wait(5) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Idle) + Call(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE) + Call(RemoveActorDecoration, ACTOR_SELF, PRT_MAIN, 0) + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + EndCaseGroup + CaseDefault + Call(SetGoalToTarget, ACTOR_SELF) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2)) + Thread + Call(GetActorPos, ACTOR_SELF, LVar1, LVar2, LVar3) + Set(LVar0, 0) + Loop(16) + Call(GetActorPos, ACTOR_SELF, LVar4, LVar5, LVar6) + Call(N(CalculateArcsinDeg), LVar1, LVar2, LVar4, LVar5, LVar0) + Set(LVar1, LVar4) + Set(LVar2, LVar5) + Set(LVar3, LVar6) + Wait(1) + EndLoop + EndThread + Thread + Wait(6) + EndThread + Call(JumpToGoal, ACTOR_SELF, 14, FALSE, TRUE, FALSE) + Call(SetActorScale, ACTOR_SELF, Float(1.1), Float(0.8), Float(1.0)) + Wait(1) + Call(SetActorScale, ACTOR_SELF, Float(1.3), Float(0.5), Float(1.0)) + Wait(1) + Call(SetActorScale, ACTOR_SELF, Float(1.0), Float(1.0), Float(1.0)) + EndSwitch + Wait(2) + Call(EnemyDamageTarget, ACTOR_SELF, LVar0, 0, SUPPRESS_EVENT_ALL, 0, DMG_VAULT, BS_FLAGS1_TRIGGER_EVENTS) + Switch(LVar0) + CaseOrEq(HIT_RESULT_HIT) + CaseOrEq(HIT_RESULT_NO_DAMAGE) + Call(UseBattleCamPreset, BTL_CAM_DEFAULT) + Call(SetActorScale, ACTOR_SELF, Float(1.1), Float(0.8), Float(1.0)) + Wait(1) + Call(SetActorScale, ACTOR_SELF, Float(1.0), Float(1.0), Float(1.0)) + Wait(1) + Call(SetActorRotation, ACTOR_SELF, 0, 0, 0) + Call(SetActorDispOffset, ACTOR_SELF, 0, 0, 0) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Idle) + Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Add(LVar0, 40) + Set(LVar1, 0) + Call(SetActorJumpGravity, ACTOR_SELF, Float(1.8)) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE) + Add(LVar0, 30) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE) + Add(LVar0, 20) + Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2) + Call(JumpToGoal, ACTOR_SELF, 6, FALSE, TRUE, FALSE) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Idle) + Wait(3) + Call(YieldTurn) + Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(2.0)) + Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Uproot_Still) + Call(SetGoalToHome, ACTOR_SELF) + Call(SetActorSpeed, ACTOR_SELF, Float(8.0)) + Call(RunToGoal, ACTOR_SELF, 0, FALSE) + Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(1.0)) + EndCaseGroup + EndSwitch + Call(EnableIdleScript, ACTOR_SELF, TRUE) + Call(UseIdleAnimation, ACTOR_SELF, TRUE) + Return + End +}; diff --git a/src/battle/common/stage/area_drd/drd_02.inc.c b/src/battle/common/stage/area_drd/drd_02.inc.c new file mode 100644 index 00000000000..7509cc9c815 --- /dev/null +++ b/src/battle/common/stage/area_drd/drd_02.inc.c @@ -0,0 +1,30 @@ +#include "battle/battle.h" +#include "mapfs/drd_bt02_shape.h" +#include "mapfs/drd_bt02_hit.h" + +#define NAMESPACE A(drd_02) + +EvtScript N(EVS_PreBattle) = { + Call(SetSpriteShading, SHADING_NONE) + Call(SetCamBGColor, CAM_BATTLE, 0, 0, 0) + Return + End +}; + +EvtScript N(EVS_PostBattle) = { + Return + End +}; + +s32 N(ForegroundModels)[] = { + STAGE_MODEL_LIST_END +}; + +Stage NAMESPACE = { + .texture = "dgb_tex", //"drd_tex" + .shape = "drd_bt02_shape", + .hit = "drd_bt02_hit", + .preBattle = &N(EVS_PreBattle), + .postBattle = &N(EVS_PostBattle), + .foregroundModelList = N(ForegroundModels), +}; diff --git a/src/battle/common/stage/area_lmn/lmn_00.inc.c b/src/battle/common/stage/area_lmn/lmn_00.inc.c new file mode 100644 index 00000000000..67282a22fc8 --- /dev/null +++ b/src/battle/common/stage/area_lmn/lmn_00.inc.c @@ -0,0 +1,33 @@ +/* +#include "battle/battle.h" +#include "mapfs/lmn_bt00_shape.h" +#include "mapfs/lmn_bt00_hit.h" + +#define NAMESPACE A(lmn_00) + +EvtScript N(EVS_PreBattle) = { + Call(SetSpriteShading, SHADING_NONE) + Call(SetCamBGColor, CAM_BATTLE, 0, 0, 0) + Return + End +}; + +EvtScript N(EVS_PostBattle) = { + Return + End +}; + +s32 N(ForegroundModels)[] = { + STAGE_MODEL_LIST_END +}; + +Stage NAMESPACE = { + .texture = "lmn_tex", + .shape = "lmn_bt00_shape", + .hit = "lmn_bt00_hit", + .bg = "lmn_bg", + .preBattle = &N(EVS_PreBattle), + .postBattle = &N(EVS_PostBattle), + .foregroundModelList = N(ForegroundModels), +}; +*/ diff --git a/src/battle/common/stage/area_mod/mod_00.inc.c b/src/battle/common/stage/area_mod/mod_00.inc.c new file mode 100644 index 00000000000..38fd45a931f --- /dev/null +++ b/src/battle/common/stage/area_mod/mod_00.inc.c @@ -0,0 +1,30 @@ +#include "battle/battle.h" +#include "mapfs/mod_bt00_shape.h" +#include "mapfs/mod_bt00_hit.h" + +#define NAMESPACE A(mod_00) + +EvtScript N(EVS_PreBattle) = { + Call(SetSpriteShading, SHADING_NONE) + Call(SetCamBGColor, CAM_BATTLE, 0, 0, 0) + Return + End +}; + +EvtScript N(EVS_PostBattle) = { + Return + End +}; + +s32 N(ForegroundModels)[] = { + STAGE_MODEL_LIST_END +}; + +Stage NAMESPACE = { + .texture = "aaa_tex", //"aaa_tex" + .shape = "mod_bt00_shape", + .hit = "mod_bt00_hit", + .preBattle = &N(EVS_PreBattle), + .postBattle = &N(EVS_PostBattle), + .foregroundModelList = N(ForegroundModels), +}; diff --git a/src/battle/common/stage/area_stz/stz_00.inc.c b/src/battle/common/stage/area_stz/stz_00.inc.c new file mode 100644 index 00000000000..ba7c79281a0 --- /dev/null +++ b/src/battle/common/stage/area_stz/stz_00.inc.c @@ -0,0 +1,33 @@ + +/* +#include "battle/battle.h" +#include "mapfs/mod_bt00_shape.h" +#include "mapfs/mod_bt00_hit.h" + +#define NAMESPACE A(mod_00) + +EvtScript N(EVS_PreBattle) = { + Call(SetSpriteShading, SHADING_NONE) + Call(SetCamBGColor, CAM_BATTLE, 0, 0, 0) + Return + End +}; + +EvtScript N(EVS_PostBattle) = { + Return + End +}; + +s32 N(ForegroundModels)[] = { + STAGE_MODEL_LIST_END +}; + +Stage NAMESPACE = { + .texture = "aaa_tex", + .shape = "mod_bt00_shape", + .hit = "mod_bt00_hit", + .preBattle = &N(EVS_PreBattle), + .postBattle = &N(EVS_PostBattle), + .foregroundModelList = N(ForegroundModels), +}; +*/ diff --git a/src/battle/common/stage/lib/WaterEffects.inc.c b/src/battle/common/stage/lib/WaterEffects.inc.c index 4c87f25ee98..fb980707aea 100644 --- a/src/battle/common/stage/lib/WaterEffects.inc.c +++ b/src/battle/common/stage/lib/WaterEffects.inc.c @@ -9,15 +9,9 @@ enum { API_CALLABLE(N(UpdateAnimatedFish)) { Bytecode* args = script->ptrReadPos; - #ifdef AVOID_UB f32 vt0 = 0.0f; f32 vt1 = 0.0f; f32 vt2 = 0.0f; - #else - f32 vt0; - f32 vt1; - f32 vt2; - #endif f32 vt3; f32 vt4; f32 vt5; diff --git a/src/battle/dmg_item.c b/src/battle/dmg_item.c index 3b7f820c060..8f837dea522 100644 --- a/src/battle/dmg_item.c +++ b/src/battle/dmg_item.c @@ -343,12 +343,10 @@ HitResult calc_item_damage_enemy(void) { // Using this macro because it's nicer to look at, and it also is necessary to wrap the first 5 of these in a // do-while-0 OR to wrap each one individually. It's more likely that it's a macro instead, and much cleaner #define INFLICT_STATUS(STATUS_TYPE) \ - do { \ - if ((battleStatus->curAttackStatus & STATUS_FLAG_##STATUS_TYPE) && \ - try_inflict_status(target, STATUS_KEY_##STATUS_TYPE, STATUS_TURN_MOD_##STATUS_TYPE)) { \ - wasStatusInflicted = TRUE; \ - } \ - } while (0); + if ((battleStatus->curAttackStatus & STATUS_FLAG_##STATUS_TYPE) && \ + try_inflict_status(target, STATUS_KEY_##STATUS_TYPE, STATUS_TURN_MOD_##STATUS_TYPE)) { \ + wasStatusInflicted = TRUE; \ + } \ INFLICT_STATUS(SHRINK); INFLICT_STATUS(POISON); diff --git a/src/battle/dmg_partner.c b/src/battle/dmg_partner.c index 903263cf3af..88705b09151 100644 --- a/src/battle/dmg_partner.c +++ b/src/battle/dmg_partner.c @@ -1,6 +1,7 @@ #include "battle/battle.h" #include "script_api/battle.h" #include "effects.h" +#include "dx/debug_menu.h" s32 dispatch_damage_event_partner_1(s32, s32); @@ -249,7 +250,7 @@ HitResult calc_partner_damage_enemy(void) { } sfx_play_sound_at_position(SOUND_HIT_FIRE, SOUND_SPACE_DEFAULT, state->goalPos.x, state->goalPos.y, state->goalPos.z); - + if (gBattleStatus.flags1 & (BS_FLAGS1_NICE_HIT | BS_FLAGS1_SUPER_HIT)) { return HIT_RESULT_NICE; } else { @@ -644,82 +645,80 @@ HitResult calc_partner_damage_enemy(void) { isFireDamage = TRUE; } - do { // TODO remove this do while - if (gBattleStatus.flags1 & BS_FLAGS1_TRIGGER_EVENTS - && battleStatus->lastAttackDamage >= 0 - && dispatchEvent != EVENT_DEATH - && dispatchEvent != EVENT_SPIN_SMASH_DEATH - && dispatchEvent != EVENT_EXPLODE_TRIGGER - && !(targetPart->targetFlags & ACTOR_PART_TARGET_NO_DAMAGE) - ) { - #define INFLICT_STATUS(STATUS_TYPE) \ - if ((battleStatus->curAttackStatus & STATUS_FLAG_##STATUS_TYPE) && \ - try_inflict_status(target, STATUS_KEY_##STATUS_TYPE, STATUS_TURN_MOD_##STATUS_TYPE)) { \ - wasSpecialHit = TRUE; \ - wasStatusInflicted = TRUE; \ - } \ - - INFLICT_STATUS(SHRINK); - INFLICT_STATUS(POISON); - INFLICT_STATUS(STONE); - INFLICT_STATUS(SLEEP); - INFLICT_STATUS(STOP); - INFLICT_STATUS(STATIC); - INFLICT_STATUS(FEAR); - INFLICT_STATUS(PARALYZE); - INFLICT_STATUS(DIZZY); - - #undef INFLICT_STATUS - - statusChanceOrDefense = target->actorBlueprint->spookChance; - - if (statusChanceOrDefense > 0) { - statusChanceOrDefense = 100; - } + if (gBattleStatus.flags1 & BS_FLAGS1_TRIGGER_EVENTS + && battleStatus->lastAttackDamage >= 0 + && dispatchEvent != EVENT_DEATH + && dispatchEvent != EVENT_SPIN_SMASH_DEATH + && dispatchEvent != EVENT_EXPLODE_TRIGGER + && !(targetPart->targetFlags & ACTOR_PART_TARGET_NO_DAMAGE) + ) { + #define INFLICT_STATUS(STATUS_TYPE) \ + if ((battleStatus->curAttackStatus & STATUS_FLAG_##STATUS_TYPE) && \ + try_inflict_status(target, STATUS_KEY_##STATUS_TYPE, STATUS_TURN_MOD_##STATUS_TYPE)) { \ + wasSpecialHit = TRUE; \ + wasStatusInflicted = TRUE; \ + } \ + + INFLICT_STATUS(SHRINK); + INFLICT_STATUS(POISON); + INFLICT_STATUS(STONE); + INFLICT_STATUS(SLEEP); + INFLICT_STATUS(STOP); + INFLICT_STATUS(STATIC); + INFLICT_STATUS(FEAR); + INFLICT_STATUS(PARALYZE); + INFLICT_STATUS(DIZZY); + + #undef INFLICT_STATUS + + statusChanceOrDefense = target->actorBlueprint->spookChance; + + if (statusChanceOrDefense > 0) { + statusChanceOrDefense = 100; + } - statusChanceOrDefense = (battleStatus->statusChance * statusChanceOrDefense) / 100; - - if (battleStatus->curAttackStatus & STATUS_FLAG_400000) { - if (rand_int(99) < statusChanceOrDefense) { - if (!(target->debuff == STATUS_KEY_FEAR - || target->debuff == STATUS_KEY_DIZZY - || target->debuff == STATUS_KEY_PARALYZE - || target->debuff == STATUS_KEY_SLEEP - || target->debuff == STATUS_KEY_FROZEN - || target->debuff == STATUS_KEY_STOP) - && !(target->flags & ACTOR_FLAG_FLIPPED) - ) { - dispatchEvent = EVENT_SCARE_AWAY; - wasStatusInflicted = TRUE; - hitResult = HIT_RESULT_HIT; - wasSpecialHit = TRUE; - gBattleStatus.flags1 |= BS_FLAGS1_NICE_HIT; - gBattleStatus.flags1 |= BS_FLAGS1_TRIGGER_EVENTS; - gBattleStatus.flags1 |= BS_FLAGS1_INCLUDE_POWER_UPS; - gBattleStatus.flags1 |= BS_FLAGS1_SHOW_PLAYER_DECORATIONS; - gBattleStatus.flags1 |= BS_FLAGS1_ACTORS_VISIBLE; - sfx_play_sound_at_position(SOUND_DAMAGE_STARS, SOUND_SPACE_DEFAULT, state->goalPos.x, state->goalPos.y, state->goalPos.z); - } else { - dispatchEvent = EVENT_IMMUNE; - hitResult = HIT_RESULT_NO_DAMAGE; - } + statusChanceOrDefense = (battleStatus->statusChance * statusChanceOrDefense) / 100; + + if (battleStatus->curAttackStatus & STATUS_FLAG_400000) { + if (rand_int(99) < statusChanceOrDefense) { + if (!(target->debuff == STATUS_KEY_FEAR + || target->debuff == STATUS_KEY_DIZZY + || target->debuff == STATUS_KEY_PARALYZE + || target->debuff == STATUS_KEY_SLEEP + || target->debuff == STATUS_KEY_FROZEN + || target->debuff == STATUS_KEY_STOP) + && !(target->flags & ACTOR_FLAG_FLIPPED) + ) { + dispatchEvent = EVENT_SCARE_AWAY; + wasStatusInflicted = TRUE; + hitResult = HIT_RESULT_HIT; + wasSpecialHit = TRUE; + gBattleStatus.flags1 |= BS_FLAGS1_NICE_HIT; + gBattleStatus.flags1 |= BS_FLAGS1_TRIGGER_EVENTS; + gBattleStatus.flags1 |= BS_FLAGS1_INCLUDE_POWER_UPS; + gBattleStatus.flags1 |= BS_FLAGS1_SHOW_PLAYER_DECORATIONS; + gBattleStatus.flags1 |= BS_FLAGS1_ACTORS_VISIBLE; + sfx_play_sound_at_position(SOUND_DAMAGE_STARS, SOUND_SPACE_DEFAULT, state->goalPos.x, state->goalPos.y, state->goalPos.z); } else { dispatchEvent = EVENT_IMMUNE; hitResult = HIT_RESULT_NO_DAMAGE; } + } else { + dispatchEvent = EVENT_IMMUNE; + hitResult = HIT_RESULT_NO_DAMAGE; } + } - if (wasStatusInflicted) { - if (dispatchEvent == EVENT_ZERO_DAMAGE) { - dispatchEvent = EVENT_HIT_COMBO; - } + if (wasStatusInflicted) { + if (dispatchEvent == EVENT_ZERO_DAMAGE) { + dispatchEvent = EVENT_HIT_COMBO; + } - if (dispatchEvent == EVENT_IMMUNE) { - dispatchEvent = EVENT_HIT; - } + if (dispatchEvent == EVENT_IMMUNE) { + dispatchEvent = EVENT_HIT; } } - } while (0); + } } statusChanceOrDefense = target->actorBlueprint->spookChance; @@ -1065,6 +1064,12 @@ API_CALLABLE(PartnerDamageEnemy) { gBattleStatus.powerBounceCounter = 0; flags = *args++; + #if DX_DEBUG_MENU + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_GOD_MODE)) { + battleStatus->curAttackDamage = 99; + } + #endif + if ((flags & BS_FLAGS1_INCLUDE_POWER_UPS) && (flags & BS_FLAGS1_TRIGGER_EVENTS)) { battleStatus->flags1 |= BS_FLAGS1_INCLUDE_POWER_UPS; battleStatus->flags1 |= BS_FLAGS1_TRIGGER_EVENTS; diff --git a/src/battle/dmg_player.c b/src/battle/dmg_player.c index b5faaeea7c5..0634300a8e9 100644 --- a/src/battle/dmg_player.c +++ b/src/battle/dmg_player.c @@ -3,6 +3,7 @@ #include "battle/battle.h" #include "script_api/battle.h" #include "sprite/player.h" +#include "dx/debug_menu.h" b32 dispatch_damage_event_player(s32 damageAmount, s32 event, b32 noHitSound); b32 dispatch_hazard_event_player(s32 damageAmount, s32 event); @@ -1547,6 +1548,12 @@ API_CALLABLE(PlayerDamageEnemy) { battleStatus->powerBounceCounter = 0; flags = *args++; + #if DX_DEBUG_MENU + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_GOD_MODE)) { + battleStatus->curAttackDamage = 99; + } + #endif + if ((flags & BS_FLAGS1_INCLUDE_POWER_UPS) && (flags & BS_FLAGS1_TRIGGER_EVENTS)) { gBattleStatus.flags1 |= BS_FLAGS1_INCLUDE_POWER_UPS; gBattleStatus.flags1 |= BS_FLAGS1_TRIGGER_EVENTS; diff --git a/src/battle/formation_names.h b/src/battle/formation_names.h index c54aec8e131..b84498441b8 100644 --- a/src/battle/formation_names.h +++ b/src/battle/formation_names.h @@ -1,3 +1,5 @@ +#pragma once + enum BattleNames { BTL_KMR_1_FORMATION_00 = 0x0000, BTL_KMR_1_FORMATION_01 = 0x0001, @@ -562,4 +564,5 @@ enum BattleNames { BTL_DIG_FORMATION_07 = 0x2707, BTL_DIG_FORMATION_08 = 0x2708, BTL_DIG_FORMATION_09 = 0x2709, + BTL_MOD_FORMATION_00 = 0x2F00, }; diff --git a/src/battle/level_up.c b/src/battle/level_up.c index 9cbcc64aaf4..3c3f8a652d9 100644 --- a/src/battle/level_up.c +++ b/src/battle/level_up.c @@ -47,15 +47,12 @@ enum { BSS HudElemID LevelUpStatEmblemIDs[4]; BSS HudElemID LevelUpStatTextIDs[3][7]; -BSS s32 D_8029FAE4; // unused? BSS HudElemID LevelUpSpotlightID; -BSS s32 D_8029FAEC[23]; // unused? - BSS HudElemID LevelUpSelectTextID; + BSS s32 CelebrateSubstateTime; BSS s32 D_8029FB50; BSS s32 EndBattleRewardStep; -BSS s32 D_8029FB58[2]; // unused? BSS s32 CantLevelUpStat[3]; BSS s32 EndBattleRewardTotal; BSS s32 EndBattleRewardIncrement; diff --git a/src/battle/move/item/electro_pop.c b/src/battle/move/item/electro_pop.c index 1cc407e0061..12c9945929e 100644 --- a/src/battle/move/item/electro_pop.c +++ b/src/battle/move/item/electro_pop.c @@ -62,8 +62,7 @@ API_CALLABLE(N(AddFP)) { PlayerData* playerData = &gPlayerData; s32 amt = evt_get_variable(script, *script->ptrReadPos); - /// @bug Should be playerData->curFP - s32 newFP = playerData->curHP + amt; + s32 newFP = playerData->curFP + amt; if (newFP > playerData->curMaxFP) { newFP = playerData->curMaxFP; diff --git a/src/battle/move/item/please_come_back.c b/src/battle/move/item/please_come_back.c index 215bcc17c9e..4d1f14fbad3 100644 --- a/src/battle/move/item/please_come_back.c +++ b/src/battle/move/item/please_come_back.c @@ -8,7 +8,7 @@ #include "battle/common/move/UseItem.inc.c" EvtScript N(EVS_UseItem) = { - SetConst(LVarA, ITEM_DIZZY_DIAL) //@bug should be ITEM_PLEASE_COME_BACK + SetConst(LVarA, ITEM_PLEASE_COME_BACK) ExecWait(N(UseItemWithEffect)) Call(SetGoalToHome, ACTOR_PLAYER) Call(SetJumpAnimations, ACTOR_PLAYER, 0, ANIM_Mario1_Jump, ANIM_Mario1_Fall, ANIM_Mario1_Land) diff --git a/src/battle/partner/goombario.c b/src/battle/partner/goombario.c index 992e62e2aa9..2957f701007 100644 --- a/src/battle/partner/goombario.c +++ b/src/battle/partner/goombario.c @@ -66,7 +66,6 @@ API_CALLABLE(N(AdjustMultibonkChance)) { script->varTable[0] = 99; - /// @bug this value is not reset between Multibonk uses N(MultibonkChance) *= targetActor->actorBlueprint->powerBounceChance; N(MultibonkChance) /= 100; if (N(MultibonkChance) < rand_int(100)) { @@ -76,6 +75,11 @@ API_CALLABLE(N(AdjustMultibonkChance)) { return ApiStatus_DONE2; } +API_CALLABLE(N(ResetMultibonkChance)) { + N(MultibonkChance) = 200; + return ApiStatus_DONE2; +} + API_CALLABLE(N(JumpOnTarget)) { Bytecode* args = script->ptrReadPos; BattleStatus* battleStatus = &gBattleStatus; @@ -727,6 +731,7 @@ EvtScript N(EVS_RunAwayFail) = { }; EvtScript N(EVS_HandlePhase) = { + /* Call(GetBattlePhase, LVar0) Switch(LVar0) CaseEq(PHASE_PLAYER_BEGIN) @@ -765,6 +770,7 @@ EvtScript N(EVS_HandlePhase) = { Call(UseIdleAnimation, ACTOR_PARTNER, TRUE) EndIf EndSwitch + */ Return End }; diff --git a/src/battle/player_events.c b/src/battle/player_events.c index c0e2bc6a8f6..dbdf1b5fee3 100644 --- a/src/battle/player_events.c +++ b/src/battle/player_events.c @@ -77,7 +77,7 @@ API_CALLABLE(TryPlayerLucky) { show_action_rating(ACTION_RATING_LUCKY, player, player->curPos.x, player->curPos.y + 20.0f, player->curPos.z); sfx_play_sound(SOUND_LUCKY); - + script->varTable[0] = FALSE; if (player->debuff == STATUS_KEY_FEAR || player->debuff == STATUS_KEY_DIZZY @@ -241,7 +241,7 @@ API_CALLABLE(LifeShroomShroudWorld) { if (script->functionTemp[0] == 0) { return ApiStatus_DONE2; } - + return ApiStatus_BLOCK; } @@ -258,7 +258,7 @@ API_CALLABLE(LifeShroomRevealWorld) { mdl_set_shroud_tint_params(0, 0, 0, 0); return ApiStatus_DONE2; } - + return ApiStatus_BLOCK; } @@ -271,7 +271,7 @@ API_CALLABLE(ConsumeLifeShroom) { playerData->curHP = playerData->curMaxHP; } playerData->invItems[find_item(ITEM_LIFE_SHROOM)] = ITEM_NONE; - sort_items(); + sort_consumables(); script->varTable[3] = item->potencyA; return ApiStatus_DONE2; @@ -289,6 +289,23 @@ API_CALLABLE(RestorePreDefeatState) { battleStatus->rushFlags = RUSH_FLAG_NONE; battleStatus->flags2 &= ~BS_FLAGS2_HAS_RUSH; + // set rush flags based on danger/peril status + if (!(battleStatus->flags2 & BS_FLAGS2_PEACH_BATTLE)) { + if (playerData->curHP <= PERIL_THRESHOLD && is_ability_active(ABILITY_MEGA_RUSH)) { + gBattleStatus.flags2 |= BS_FLAGS2_HAS_RUSH; + battleStatus->rushFlags |= RUSH_FLAG_MEGA; + } + + if (playerData->curHP <= DANGER_THRESHOLD && is_ability_active(ABILITY_POWER_RUSH)) { + gBattleStatus.flags2 |= BS_FLAGS2_HAS_RUSH; + battleStatus->rushFlags |= RUSH_FLAG_POWER; + } + } + /* + // clear rush flags to initialize + battleStatus->rushFlags = RUSH_FLAG_NONE; + battleStatus->flags2 &= ~BS_FLAGS2_HAS_RUSH; + // set rush flags based on danger/peril status if (!(battleStatus->flags2 & BS_FLAGS2_PEACH_BATTLE)) { if (playerData->curHP <= PERIL_THRESHOLD && is_ability_active(ABILITY_MEGA_RUSH)) { @@ -303,6 +320,7 @@ API_CALLABLE(RestorePreDefeatState) { } } } + */ return ApiStatus_DONE2; } diff --git a/src/battle/stage_names.h b/src/battle/stage_names.h index cab4fca3265..4e4fdca10dd 100644 --- a/src/battle/stage_names.h +++ b/src/battle/stage_names.h @@ -1,3 +1,5 @@ +#pragma once + #define BTL_STAGE_DEFAULT -1 enum StageNames { @@ -245,4 +247,6 @@ enum StageNames { BTL_DIG_STAGE_02 = 0x02, BTL_DIG_STAGE_03 = 0x03, BTL_DIG_STAGE_04 = 0x04, + BTL_MOD_STAGE_00 = 0x00, + BTL_MOD_STAGE_01 = 0x01, }; diff --git a/src/battle/use_items.c b/src/battle/use_items.c index 639859a6fbb..b2765c4e1f8 100644 --- a/src/battle/use_items.c +++ b/src/battle/use_items.c @@ -125,7 +125,7 @@ API_CALLABLE(LoadItemScript) { } i++; } - sort_items(); + sort_consumables(); if (battleStatus->selectedMoveID == MOVE_DOUBLE_DIP) { if (battleStatus->itemUsesLeft == 2) { diff --git a/src/battle/use_star_powers.c b/src/battle/use_star_powers.c index 118dbe4f729..665a265792c 100644 --- a/src/battle/use_star_powers.c +++ b/src/battle/use_star_powers.c @@ -85,7 +85,7 @@ s32 PartnerWishAnims[][5] = { [PARTNER_WISH_ANIM_PRAY] ANIM_BattleWatt_Sleep, [PARTNER_WISH_ANIM_UNUSED] ANIM_BattleWatt_Sleep, [PARTNER_WISH_ANIM_RETURN] ANIM_BattleWatt_Run, - [PARTNER_WISH_ANIM_IDLE] ANIM_BattleParakarry_Idle, /// @bug uses wrong sprite! + [PARTNER_WISH_ANIM_IDLE] ANIM_BattleWatt_Idle, }, [PARTNER_SUSHIE] { [PARTNER_WISH_ANIM_WALK] ANIM_BattleSushie_Run, diff --git a/src/cam_main.c b/src/cam_main.c index df9ac8dfcd3..b96b4952afd 100644 --- a/src/cam_main.c +++ b/src/cam_main.c @@ -3,6 +3,8 @@ #include "nu/nusys.h" #include "hud_element.h" #include "camera.h" +#include "dx/profiling.h" +#include "dx/debug_menu.h" void render_models(void); void execute_render_tasks(void); @@ -198,16 +200,35 @@ void render_frame(s32 isSecondPass) { if (!(camera->flags & CAMERA_FLAG_ORTHO)) { if (gCurrentCamID != CAM_3) { if (!(camera->flags & CAMERA_FLAG_RENDER_ENTITIES)) { + GFX_PROFILER_START(PROFILER_TIME_SUB_GFX_ENTITIES); render_entities(); + GFX_PROFILER_COMPLETE(PROFILER_TIME_SUB_GFX_ENTITIES); } if (!(camera->flags & CAMERA_FLAG_RENDER_MODELS)) { + GFX_PROFILER_START(PROFILER_TIME_SUB_GFX_MODELS); + #if DX_DEBUG_MENU + if (!dx_debug_should_hide_models()) { + render_models(); + } + #else render_models(); + #endif + GFX_PROFILER_COMPLETE(PROFILER_TIME_SUB_GFX_MODELS); } + GFX_PROFILER_START(PROFILER_TIME_SUB_GFX_PLAYER); render_player(); + GFX_PROFILER_SWITCH(PROFILER_TIME_SUB_GFX_PLAYER, PROFILER_TIME_SUB_GFX_NPCS); render_npcs(); + GFX_PROFILER_SWITCH(PROFILER_TIME_SUB_GFX_NPCS, PROFILER_TIME_SUB_GFX_WORKERS); render_workers_world(); + GFX_PROFILER_SWITCH(PROFILER_TIME_SUB_GFX_WORKERS, PROFILER_TIME_SUB_GFX_EFFECTS); render_effects_world(); + GFX_PROFILER_SWITCH(PROFILER_TIME_SUB_GFX_EFFECTS, PROFILER_TIME_SUB_GFX_RENDER_TASKS); execute_render_tasks(); + #if DX_DEBUG_MENU + dx_debug_draw_collision(); + #endif + GFX_PROFILER_SWITCH(PROFILER_TIME_SUB_GFX_RENDER_TASKS, PROFILER_TIME_SUB_GFX_HUD_ELEMENTS); render_transformed_hud_elements(); } else { guOrthoF(camera->perspectiveMatrix, 0.0f, SCREEN_WIDTH, -SCREEN_HEIGHT, 0.0f, -1000.0f, 1000.0f, diff --git a/src/cam_math.c b/src/cam_math.c index 98fa50159a6..4af729fbf9a 100644 --- a/src/cam_math.c +++ b/src/cam_math.c @@ -466,15 +466,13 @@ void func_80032C64(Camera* camera) { ) { minDistSq = intDistSq; } - do { - if (calculate_line_segment_intersection(settings2->points.two.Bx, settings2->points.two.Bz, - settings2->points.two.Bx - deltaPosZ, settings2->points.two.Bz + deltaPosX, - camera->targetPos.x, camera->targetPos.z, newPosX, newPosZ, &intX, &intZ, &intDistSq) - && intDistSq < minDistSq - ) { - minDistSq = intDistSq; - } - } while (0); // TODO find better match + if (calculate_line_segment_intersection(settings2->points.two.Bx, settings2->points.two.Bz, + settings2->points.two.Bx - deltaPosZ, settings2->points.two.Bz + deltaPosX, + camera->targetPos.x, camera->targetPos.z, newPosX, newPosZ, &intX, &intZ, &intDistSq) + && intDistSq < minDistSq + ) { + minDistSq = intDistSq; + } } if (constrainToZoneTriangles) { for (i = 0; i < zone->numTriangles; i++) { diff --git a/src/cam_mode_zone_interp.c b/src/cam_mode_zone_interp.c index 90538af89f3..ffb519a3971 100644 --- a/src/cam_mode_zone_interp.c +++ b/src/cam_mode_zone_interp.c @@ -526,12 +526,11 @@ void update_camera_from_controller( configuration->targetPos.z = z; break; case CAM_CONTROL_FIXED_POS_AND_ORIENTATION: - do { dx = controller->points.two.Bx - controller->points.two.Ax; dz = controller->points.two.Bz - controller->points.two.Az; configuration->boomYaw = atan2(0.0f, 0.0f, dx, dz); - } while (0); + boomLength = controller->boomLength; if (boomLength < 0.0f) { boomLength = -boomLength; diff --git a/src/common/UnkFloatFunc005.inc.c b/src/common/UnkFloatFunc005.inc.c index 324f14e5894..06f6ec5e0bc 100644 --- a/src/common/UnkFloatFunc005.inc.c +++ b/src/common/UnkFloatFunc005.inc.c @@ -2,15 +2,9 @@ API_CALLABLE(N(UnkFloatFunc005)) { Bytecode* args = script->ptrReadPos; - #ifdef AVOID_UB f32 vt0 = 0.0f; f32 vt1 = 0.0f; f32 vt2 = 0.0f; - #else - f32 vt0; - f32 vt1; - f32 vt2; - #endif f32 vt3; f32 vt4; f32 vt5; diff --git a/src/crash_screen.c b/src/crash_screen.c index 6c6278d91f7..e549aa1abc6 100644 --- a/src/crash_screen.c +++ b/src/crash_screen.c @@ -3,6 +3,7 @@ #include "PR/os_internal_thread.h" #include "libc/xstdio.h" #include "gcc/string.h" +#include "dx/backtrace.h" #include "include_asset.h" typedef struct { @@ -26,20 +27,10 @@ u8 gCrashScreencharToGlyph[128] = { 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, }; -#if VERSION_US INCLUDE_IMG("crash_screen/font.png", gCrashScreenFont); -#else -u32 gCrashScreenFont[] = { - 0x70871C30, 0x8988A250, 0x88808290, 0x88831C90, 0x888402F8, 0x88882210, 0x71CF9C10, 0xF9CF9C70, 0x8228A288, - 0xF200A288, 0x0BC11C78, 0x0A222208, 0x8A222288, 0x71C21C70, 0x23C738F8, 0x5228A480, 0x8A282280, 0x8BC822F0, - 0xFA282280, 0x8A28A480, 0x8BC738F8, 0xF9C89C08, 0x82288808, 0x82088808, 0xF2EF8808, 0x82288888, 0x82288888, - 0x81C89C70, 0x8A08A270, 0x920DA288, 0xA20AB288, 0xC20AAA88, 0xA208A688, 0x9208A288, 0x8BE8A270, 0xF1CF1CF8, - 0x8A28A220, 0x8A28A020, 0xF22F1C20, 0x82AA0220, 0x82492220, 0x81A89C20, 0x8A28A288, 0x8A28A288, 0x8A289488, - 0x8A2A8850, 0x894A9420, 0x894AA220, 0x70852220, 0xF8011000, 0x08020800, 0x10840400, 0x20040470, 0x40840400, - 0x80020800, 0xF8011000, 0x70800000, 0x88822200, 0x08820400, 0x108F8800, 0x20821000, 0x00022200, 0x20800020, - 0x00000000, -}; -#endif + +// The font image is on 6x7 grid +#define GLYPH(x, y) (x + (y * 5)) const char* gFaultCauses[18] = { "Interrupt", @@ -71,6 +62,24 @@ const char* gFPCSRFaultCauses[6] = { "Inexact operation", }; +char crashScreenAssertMessage[0x30] = {0}; +char crashScreenAssertLocation[0x30] = {0}; + +void crash_screen_set_assert_info(const char* message, const char* file, u32 line, const char* func) { + strncpy(crashScreenAssertMessage, message, sizeof(crashScreenAssertMessage)); + crashScreenAssertMessage[sizeof(crashScreenAssertMessage) - 1] = '\0'; + + // To make file consistent with standard exceptions, grab only the filename, not the full path. + const char* slash; + while (slash = strchr(file, '/')) { + if (slash[1] == '\0') { + break; + } + file = slash + 1; + } + sprintf(crashScreenAssertLocation, "%s (%s:%d)", func, file, line); +} + void crash_screen_sleep(s32 ms) { u64 cycles = ms * 1000LL * 46875000LL / 1000000ULL; @@ -105,13 +114,27 @@ void crash_screen_draw_rect(s32 x, s32 y, s32 width, s32 height) { } } -void crash_screen_draw_glyph(s32 x, s32 y, s32 glyph) { +/** @returns X advance */ +s32 crash_screen_draw_glyph(s32 x, s32 y, s32 glyph) { s32 shift = ((glyph % 5) * 6); u16 width = gCrashScreen.width; const u32* data = &((u32*)gCrashScreenFont)[glyph / 5 * 7]; s32 i; s32 j; + switch (glyph) { + case GLYPH(3, 10): // ; + case GLYPH(4, 10): // , + y += 1; + break; + case GLYPH(1, 14): // g + case GLYPH(0, 16): // p + case GLYPH(1, 16): // q + case GLYPH(4, 17): // y + y += 2; + break; + } + if (width == SCREEN_WIDTH) { u16* ptr = gCrashScreen.frameBuf + (gCrashScreen.width) * y + x; @@ -120,7 +143,11 @@ void crash_screen_draw_glyph(s32 x, s32 y, s32 glyph) { u32 rowMask = *data++; for (j = 0; j < 6; j++) { - *ptr++ = (bit & rowMask) ? 0xFFFF : 1; + if (bit & rowMask) { + *ptr++ = 0xFFFF; // white + } else { + ptr++; // dont draw + } bit >>= 1; } @@ -147,6 +174,24 @@ void crash_screen_draw_glyph(s32 x, s32 y, s32 glyph) { ptr += (0x9E8 / 2); } } + + // Calculate x advance by counting the width of the glyph + 1 pixel of padding + if (glyph == GLYPH(2, 15)) return 7; // m - fucked up hack + s32 xAdvance = 0; + data = &((u32*)gCrashScreenFont)[glyph / 5 * 7]; + for (i = 0; i < 7; i++) { // 7 rows + u32 bit = 0x80000000U >> shift; + u32 rowMask = *data++; + for (j = 1; j < 6; j++) { // 6 columns + if (bit & rowMask) { + if (xAdvance < j) { + xAdvance = j; + } + } + bit >>= 1; + } + } + return xAdvance + 1; } char* crash_screen_copy_to_buf(char* dest, const char* src, size_t size) { @@ -160,6 +205,7 @@ void crash_screen_printf(s32 x, s32 y, const char* fmt, ...) { s32 size; u8 buf[0x100]; va_list args; + s32 ox = x; va_start(args, fmt); @@ -178,6 +224,51 @@ void crash_screen_printf(s32 x, s32 y, const char* fmt, ...) { } x += 6; + + if (*ptr == '\n') { + x = ox; + y += 10; + } + + size--; + ptr++; + } + } + + va_end(args); +} + +void crash_screen_printf_proportional(s32 x, s32 y, const char* fmt, ...) { + u8* ptr; + u32 glyph; + s32 size; + u8 buf[0x100]; + va_list args; + s32 ox = x; + + va_start(args, fmt); + + size = _Printf(crash_screen_copy_to_buf, buf, fmt, args); + + if (size > 0) { + ptr = buf; + + while (size > 0) { + u8* charToGlyph = gCrashScreencharToGlyph; + + glyph = charToGlyph[*ptr & 0x7F]; + + if (glyph != 0xFF) { + x += crash_screen_draw_glyph(x, y, glyph); + } else { + x += 4; + } + + if (*ptr == '\n') { + x = ox; + y += 10; + } + size--; ptr++; } @@ -207,8 +298,6 @@ void crash_screen_print_fpcsr(u32 value) { if (value & flag) { crash_screen_printf(132, 155, "(%s)", gFPCSRFaultCauses[i]); break; - - do {} while (0); } i++; @@ -220,6 +309,11 @@ void crash_screen_draw(OSThread* faultedThread) { s16 causeIndex; __OSThreadContext* ctx; + s32 bt[8]; + s32 max = backtrace_thread((void**)bt, ARRAY_COUNT(bt), faultedThread); + s32 i = 0; + char buf[128]; + ctx = &faultedThread->context; causeIndex = ((faultedThread->context.cause >> 2) & 0x1F); @@ -233,20 +327,39 @@ void crash_screen_draw(OSThread* faultedThread) { osWritebackDCacheAll(); - crash_screen_draw_rect(25, 20, 270, 25); - crash_screen_printf(30, 25, "THREAD:%d (%s)", faultedThread->id, gFaultCauses[causeIndex]); - crash_screen_printf(30, 35, "PC:%08XH SR:%08XH VA:%08XH", ctx->pc, ctx->sr, ctx->badvaddr); + s32 x = 10; + s32 y = 0; + + crash_screen_draw_rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); + + if (crashScreenAssertMessage[0] == '\0' || crashScreenAssertLocation[0] == '\0') { + crash_screen_printf_proportional(x, y += 10, "Exception in thread %d: %s", faultedThread->id, gFaultCauses[causeIndex]); + } else { + crash_screen_printf_proportional(x, y += 10, crashScreenAssertMessage); + crash_screen_printf_proportional(x + 10, y += 10, "at %s", crashScreenAssertLocation); + i = 2; // Don't include is_debug_panic and ASSERT line in backtrace. + } + + for (; i < max; i++) { + backtrace_address_to_string(bt[i], buf); + crash_screen_printf_proportional(x + 10, y += 10, "at %s", buf); + } - crash_screen_sleep(2000); + y += 5; +#ifndef DEBUG + crash_screen_printf_proportional(x, y += 15, "Build with `./configure --debug` for file/line numbers", buf); +#endif osViBlack(0); osViRepeatLine(0); osViSwapBuffer(gCrashScreen.frameBuf); - crash_screen_draw_rect(25, 45, 270, 185); + /* + crash_screen_draw_rect(0, 30, SCREEN_WIDTH, SCREEN_HEIGHT - 30); + crash_screen_printf(30, 35, "PC:%08XH SR:%08XH VA:%08XH", ctx->pc, ctx->sr, ctx->badvaddr); crash_screen_printf(30, 50, "AT:%08XH V0:%08XH V1:%08XH", (u32)ctx->at, (u32)ctx->v0, (u32)ctx->v1); - crash_screen_printf(30, 60, "A0:%08XH A1:%08XH A2:%08XH", (u32)ctx->a0, (u32)ctx->a1, (u32)ctx->a2); + crash_screen_printf(30, 45, "A0: %08X A1: %08X A2: %08X", (u32)ctx->a0, (u32)ctx->a1, (u32)ctx->a2); crash_screen_printf(30, 70, "A3:%08XH T0:%08XH T1:%08XH", (u32)ctx->a3, (u32)ctx->t0, (u32)ctx->t1); crash_screen_printf(30, 80, "T2:%08XH T3:%08XH T4:%08XH", (u32)ctx->t2, (u32)ctx->t3, (u32)ctx->t4); crash_screen_printf(30, 90, "T5:%08XH T6:%08XH T7:%08XH", (u32)ctx->t5, (u32)ctx->t6, (u32)ctx->t7); @@ -280,6 +393,7 @@ void crash_screen_draw(OSThread* faultedThread) { // all of these null terminators needed to pad the rodata section for this file // can potentially fix this problem in another way? crash_screen_printf(210, 140, "MM:%08XH\0\0\0\0\0\0\0\0", *(u32*)ctx->pc); + */ } OSThread* crash_screen_get_faulted_thread(void) { @@ -328,6 +442,23 @@ void crash_screen_init(void) { osCreateThread(&gCrashScreen.thread, 2, crash_screen_thread_entry, NULL, gCrashScreen.stack + sizeof(gCrashScreen.stack), 0x80); osStartThread(&gCrashScreen.thread); + + // gCrashScreencharToGlyph is hard to modify, so we'll just do it here + char chars[] = + "_[]<>" + "|{};," + "\"#$&'" + "/=@\\`" + "abcde" + "fghij" + "klmno" + "pqrst" + "uvwxy" + "z"; + s32 i; + for (i = 0; i < ARRAY_COUNT(chars); i++) { + gCrashScreencharToGlyph[chars[i]] = GLYPH(0, 9) + i; + } } // unused diff --git a/src/draw_box.c b/src/draw_box.c index 141972cdcf0..97981643975 100644 --- a/src/draw_box.c +++ b/src/draw_box.c @@ -176,6 +176,42 @@ DefaultWindowStyle gBoxDefaultStyles[] = { .combineModeIndex = 1, .color1 = { .r = 126, .g = 125, .b = 216, .a = 255 }, .color2 = { .r = 217, .g = 108, .b = 201, .a = 255 } + }, + //new window entries + { //index 23 + .bgIndex = 1, + .cornersIndex = 8, + .combineModeIndex = 1, + .color1 = { .r = 0xA6, .g = 0xD7, .b = 0x95, .a = 255 }, + .color2 = { .r = 0x39, .g = 0x78, .b = 0x21, .a = 255 } + }, + { //index 24 + .bgIndex = 1, + .cornersIndex = 8, + .combineModeIndex = 1, + .color1 = { .r = 0x9B, .g = 0xC9, .b = 0xEF, .a = 255 }, + .color2 = { .r = 0x24, .g = 0x62, .b = 0x92, .a = 255 } + }, + { //index 25 + .bgIndex = 1, + .cornersIndex = 8, + .combineModeIndex = 1, + .color1 = { .r = 0x9B, .g = 0xC9, .b = 0xEF, .a = 255 }, + .color2 = { .r = 0x24, .g = 0x62, .b = 0x92, .a = 255 } + }, + { //index 26 + .bgIndex = 1, + .cornersIndex = 8, + .combineModeIndex = 1, + .color1 = { .r = 252, .g = 105, .b = 130, .a = 255 }, + .color2 = { .r = 0x39, .g = 0x48, .b = 0x21, .a = 255 } + }, + { //index 27 + .bgIndex = 1, + .cornersIndex = 8, + .combineModeIndex = 1, + .color1 = { .r = 0xEF, .g = 0xFA, .b = 0x0C, .a = 255 }, + .color2 = { .r = 0x99, .g = 0x68, .b = 0x21, .a = 255 } } }; @@ -399,8 +435,6 @@ s32 draw_box(s32 flags, WindowStyle windowStyle, s32 posX, s32 posY, s32 posZ, s bgFmt = background->fmt; cornersImage = corners->imgData; - do {} while (0); - bgWidth = background->width; bgImage = background->imgData; bgHeight = background->height; diff --git a/src/dx/backtrace.c b/src/dx/backtrace.c new file mode 100644 index 00000000000..b3b67a5eaf8 --- /dev/null +++ b/src/dx/backtrace.c @@ -0,0 +1,564 @@ +// Backtrace (call stack) support. +// Heavily based on libdragon: https://github.com/DragonMinded/libdragon/blob/trunk/src/backtrace.c + +#include "common.h" +#include "gcc/string.h" +#include "nu/nusys.h" +#include "backtrace.h" + +/** @brief Enable to debug why a backtrace is wrong */ +#define BACKTRACE_DEBUG 0 + +/** @brief Function alignment enfored by the compiler (-falign-functions). */ +#define FUNCTION_ALIGNMENT 32 + +typedef s64 int64_t; +typedef s32 int32_t; +typedef s16 int16_t; +typedef s8 int8_t; +typedef u64 uint64_t; +typedef u32 uint32_t; +typedef u16 uint16_t; +typedef u8 uint8_t; + +typedef s32 bool; +#define true 1 +#define false 0 + +/** @brief The "type" of funciton as categorized by the backtrace heuristic (__bt_analyze_func) */ +typedef enum { + BT_FUNCTION, ///< Regular function with a stack frame + BT_FUNCTION_FRAMEPOINTER, ///< The function uses the register fp as frame pointer (normally, this happens only when the function uses alloca) + BT_EXCEPTION, ///< This is an exception handler (inthandler.S) + BT_LEAF ///< Leaf function (no calls), no stack frame allocated, sp/ra not modified +} bt_func_type; + +/** @brief Description of a function for the purpose of backtracing (filled by __bt_analyze_func) */ +typedef struct { + bt_func_type type; ///< Type of the function + int stack_size; ///< Size of the stack frame + int ra_offset; ///< Offset of the return address from the top of the stack frame + int fp_offset; ///< Offset of the saved fp from the top of the stack frame; this is != 0 only if the function modifies fp (maybe as a frame pointer, but not necessarily) +} bt_func_t; + +#define MIPS_OP_ADDIU_SP(op) (((op) & 0xFFFF0000) == 0x27BD0000) ///< Matches: addiu $sp, $sp, imm +#define MIPS_OP_DADDIU_SP(op) (((op) & 0xFFFF0000) == 0x67BD0000) ///< Matches: daddiu $sp, $sp, imm +#define MIPS_OP_JR_RA(op) (((op) & 0xFFFFFFFF) == 0x03E00008) ///< Matches: jr $ra +#define MIPS_OP_SD_RA_SP(op) (((op) & 0xFFFF0000) == 0xFFBF0000) ///< Matches: sd $ra, imm($sp) +#define MIPS_OP_SW_RA_SP(op) (((op) & 0xFFFF0000) == 0xAFBF0000) ///< Matches: sw $ra, imm($sp) +#define MIPS_OP_SD_FP_SP(op) (((op) & 0xFFFF0000) == 0xFFBE0000) ///< Matches: sd $fp, imm($sp) +#define MIPS_OP_SW_FP_SP(op) (((op) & 0xFFFF0000) == 0xAFBE0000) ///< Matches: sw $fp, imm($sp) +#define MIPS_OP_LUI_GP(op) (((op) & 0xFFFF0000) == 0x3C1C0000) ///< Matches: lui $gp, imm +#define MIPS_OP_NOP(op) ((op) == 0x00000000) ///< Matches: nop +#define MIPS_OP_MOVE_FP_SP(op) ((op) == 0x03A0F025) ///< Matches: move $fp, $sp + +#define debugf osSyncPrintf + +bool __bt_analyze_func(bt_func_t *func, uint32_t *ptr, uint32_t func_start, bool from_exception); + +/** @brief Check if addr is a valid PC address */ +static bool is_valid_address(uint32_t addr) { + // TODO: for now we only handle RAM (cached access). This should be extended to handle + // TLB-mapped addresses for instance. + return addr >= 0x80000400 && addr < 0x80800000 && (addr & 3) == 0; +} + +static void backtrace_foreach(void (*cb)(void *arg, void *ptr), void *arg) { + /* + * This function is called in very risky contexts, for instance as part of an exception + * handler or during an assertion. We try to always provide as much information as + * possible in these cases, with graceful degradation if something more elaborate cannot + * be extracted. Thus, this function: + * + * * Must not use malloc(). The heap might be corrupted or empty. + * * Must not use assert(), because that might trigger recursive assertions. + * * Must avoid raising exceptions. Specifically, it must avoid risky memory accesses + * to wrong addresses. + */ + + uint32_t* exception_ra; + uint32_t func_start; + + // Current value of SP/RA/FP registers. + uint32_t *sp, *ra, *fp; + asm volatile ( + "move %0, $ra\n" + "move %1, $sp\n" + "move %2, $fp\n" + : "=r"(ra), "=r"(sp), "=r"(fp) + ); + + #if BACKTRACE_DEBUG + debugf("backtrace: start\n"); + #endif + + exception_ra = NULL; // If != NULL, + func_start = 0; // Start of the current function (when known) + + // Start from the backtrace function itself. Put the start pointer somewhere after the initial + // prolog (eg: 64 instructions after start), so that we parse the prolog itself to find sp/fp/ra offsets. + ra = (uint32_t*)backtrace_foreach + 64; + + while (1) { + // Analyze the function pointed by ra, passing information about the previous exception frame if any. + // If the analysis fail (for invalid memory accesses), stop right away. + bt_func_t func; + if (!__bt_analyze_func(&func, ra, func_start, (bool)exception_ra)) + return; + + #if BACKTRACE_DEBUG + debugf("backtrace: %s, ra=%p, sp=%p, fp=%p ra_offset=%d, fp_offset=%d, stack_size=%d\n", + func.type == BT_FUNCTION ? "BT_FUNCTION" : (func.type == BT_EXCEPTION ? "BT_EXCEPTION" : (func.type == BT_FUNCTION_FRAMEPOINTER ? "BT_FRAMEPOINTER" : "BT_LEAF")), + ra, sp, fp, func.ra_offset, func.fp_offset, func.stack_size); + #endif + + switch (func.type) { + case BT_FUNCTION_FRAMEPOINTER: + if (!func.fp_offset) { + debugf("backtrace: framepointer used but not saved onto stack at %p\n", ra); + } else { + // Use the frame pointer to refer to the current frame. + sp = fp; + if (!is_valid_address((uint32_t)sp)) { + debugf("backtrace: interrupted because of invalid frame pointer 0x%08lx\n", (uint32_t)sp); + return; + } + } + // FALLTHROUGH! + case BT_FUNCTION: + if (func.fp_offset) + fp = *(uint32_t**)((uint32_t)sp + func.fp_offset); + ra = *(uint32_t**)((uint32_t)sp + func.ra_offset) - 2; + sp = (uint32_t*)((uint32_t)sp + func.stack_size); + exception_ra = NULL; + func_start = 0; + break; + /* + case BT_EXCEPTION: { + // Exception frame. We must return back to EPC, but let's keep the + // RA value. If the interrupted function is a leaf function, we + // will need it to further walk back. + // Notice that FP is a callee-saved register so we don't need to + // recover it from the exception frame (also, it isn't saved there + // during interrupts). + exception_ra = *(uint32_t**)((uint32_t)sp + func.ra_offset); + + // reg_block_t = __OSThreadContext ? + + // Read EPC from exception frame and adjust it with CAUSE BD bit + ra = *(uint32_t**)((uint32_t)sp + offsetof(reg_block_t, epc) + 32); + uint32_t cause = *(uint32_t*)((uint32_t)sp + offsetof(reg_block_t, cr) + 32); + if (cause & C0_CAUSE_BD) ra++; + + sp = (uint32_t*)((uint32_t)sp + func.stack_size); + + // Special case: if the exception is due to an invalid EPC + // (eg: a null function pointer call), we can rely on RA to get + // back to the caller. This assumes that we got there via a function call + // rather than a raw jump, but that's a reasonable assumption. It's anyway + // the best we can do. + if ((C0_GET_CAUSE_EXC_CODE(cause) == EXCEPTION_CODE_TLB_LOAD_I_MISS || + C0_GET_CAUSE_EXC_CODE(cause) == EXCEPTION_CODE_LOAD_I_ADDRESS_ERROR) && + !is_valid_address((uint32_t)ra)) { + + // Store the invalid address in the backtrace, so that it will appear in dumps. + // This makes it easier for the user to understand the reason for the exception. + cb(arg, ra); + #if BACKTRACE_DEBUG + debugf("backtrace: %s, ra=%p, sp=%p, fp=%p ra_offset=%d, fp_offset=%d, stack_size=%d\n", + "BT_INVALID", ra, sp, fp, func.ra_offset, func.fp_offset, func.stack_size); + #endif + + ra = exception_ra - 2; + + // The function that jumped into an invalid PC was not interrupted by the exception: it + // is a regular function + // call now. + exception_ra = NULL; + break; + } + + // The next frame might be a leaf function, for which we will not be able + // to find a stack frame. It is useful to try finding the function start. + // Try to open the symbol table: if we find it, we can search for the start + // address of the function. + symtable_header_t symt = symt_open(); + if (symt.head[0]) { + int idx; + addrtable_entry_t entry = symt_addrtab_search(&symt, (uint32_t)ra, &idx); + while (!ADDRENTRY_IS_FUNC(entry)) + entry = symt_addrtab_entry(&symt, --idx); + func_start = ADDRENTRY_ADDR(entry); + #if BACKTRACE_DEBUG + debugf("Found interrupted function start address: %08lx\n", func_start); + #endif + } + } break; + */ + case BT_LEAF: + ra = exception_ra - 2; + // A leaf function has no stack. On the other hand, an exception happening at the + // beginning of a standard function (before RA is saved), does have a stack but + // will be marked as a leaf function. In this case, we mus update the stack pointer. + sp = (uint32_t*)((uint32_t)sp + func.stack_size); + exception_ra = NULL; + func_start = 0; + break; + } + + if (is_valid_address((uint32_t)ra)) { + // Call the callback with this stack frame + cb(arg, ra); + } + } +} + +static void backtrace_foreach_foreign(void (*cb)(void *arg, void *ptr), void *arg, uint32_t *sp, uint32_t *ra, uint32_t *fp) { + uint32_t* exception_ra; + uint32_t func_start; + + exception_ra = NULL; // If != NULL, + func_start = 0; // Start of the current function (when known) + + while (1) { + // Analyze the function pointed by ra, passing information about the previous exception frame if any. + // If the analysis fail (for invalid memory accesses), stop right away. + bt_func_t func; + if (!__bt_analyze_func(&func, ra, func_start, (bool)exception_ra)) + return; + + #if BACKTRACE_DEBUG + debugf("backtrace: %s, ra=%p, sp=%p, fp=%p ra_offset=%d, fp_offset=%d, stack_size=%d\n", + func.type == BT_FUNCTION ? "BT_FUNCTION" : (func.type == BT_EXCEPTION ? "BT_EXCEPTION" : (func.type == BT_FUNCTION_FRAMEPOINTER ? "BT_FRAMEPOINTER" : "BT_LEAF")), + ra, sp, fp, func.ra_offset, func.fp_offset, func.stack_size); + #endif + + switch (func.type) { + case BT_FUNCTION_FRAMEPOINTER: + if (!func.fp_offset) { + debugf("backtrace: framepointer used but not saved onto stack at %p\n", ra); + } else { + // Use the frame pointer to refer to the current frame. + sp = fp; + if (!is_valid_address((uint32_t)sp)) { + debugf("backtrace: interrupted because of invalid frame pointer 0x%08lx\n", (uint32_t)sp); + return; + } + } + // FALLTHROUGH! + case BT_FUNCTION: + if (func.fp_offset) + fp = *(uint32_t**)((uint32_t)sp + func.fp_offset); + ra = *(uint32_t**)((uint32_t)sp + func.ra_offset) - 2; + sp = (uint32_t*)((uint32_t)sp + func.stack_size); + exception_ra = NULL; + func_start = 0; + break; + case BT_LEAF: + ra = exception_ra - 2; + // A leaf function has no stack. On the other hand, an exception happening at the + // beginning of a standard function (before RA is saved), does have a stack but + // will be marked as a leaf function. In this case, we mus update the stack pointer. + sp = (uint32_t*)((uint32_t)sp + func.stack_size); + exception_ra = NULL; + func_start = 0; + break; + } + + if (is_valid_address((uint32_t)ra)) { + // Call the callback with this stack frame + cb(arg, ra); + } + } +} + +struct backtrace_cb_ctx { + void **buffer; + int size; + int i; +}; + +static void backtrace_cb(void *arg, void *ptr) { + struct backtrace_cb_ctx *ctx = arg; + if (ctx->i >= 0 && ctx->i < ctx->size) + ctx->buffer[ctx->i] = ptr; + if (ctx->i < ctx->size) + ctx->i++; +} + +int backtrace(void **buffer, int size) { + struct backtrace_cb_ctx ctx = { + buffer, + size, + -1, // skip backtrace itself + }; + backtrace_foreach(backtrace_cb, &ctx); + return ctx.i; +} + +int backtrace_thread(void **buffer, int size, OSThread *thread) { + struct backtrace_cb_ctx ctx = { + buffer, + size, + 0, + }; + u32 sp = (u32)thread->context.sp; + u32 pc = (u32)thread->context.pc; + u32 fp = (u32)thread->context.s8; + backtrace_cb(&ctx, (void*)pc); + backtrace_foreach_foreign(backtrace_cb, &ctx, (uint32_t*)sp, (uint32_t*)pc, (uint32_t*)fp); + return ctx.i; +} + +/** + * @brief Uses the symbol table to look up the symbol corresponding to the given address. + * + * The address should be inside some function, otherwise an incorrect symbol will be returned. + * + * @param address Address to look up + * @param out Output symbol + * @return Offset into out->address, -1 if not found + */ +s32 address2symbol(u32 address, Symbol* out) { + #define symbolsPerChunk 0x1000 + #define chunkSize ((sizeof(Symbol) * symbolsPerChunk)) + + static u32 romHeader[0x10]; + nuPiReadRom(0, &romHeader, sizeof(romHeader)); + + u32 symbolTableRomAddr = romHeader[SYMBOL_TABLE_PTR_ROM_ADDR / sizeof(*romHeader)]; + if (symbolTableRomAddr == NULL) { + osSyncPrintf("address2symbol: no symbols available (SYMBOL_TABLE_PTR is NULL)\n"); + return -1; + } + + // Read the header + SymbolTable symt; + nuPiReadRom(symbolTableRomAddr, &symt, sizeof(SymbolTable)); + if (symt.magic[0] != 'S' || symt.magic[1] != 'Y' || symt.magic[2] != 'M' || symt.magic[3] != 'S') { + osSyncPrintf("address2symbol: no symbols available (invalid magic '%c%c%c%c')\n", symt.magic[0], symt.magic[1], symt.magic[2], symt.magic[3]); + return -1; + } + if (symt.symbolCount <= 0) { + osSyncPrintf("address2symbol: no symbols available (symbolCount=%d)\n", symt.symbolCount); + return -1; + } + + // Read symbols in chunks + static Symbol chunk[chunkSize]; + s32 i; + for (i = 0; i < symt.symbolCount; i++) { + // Do we need to load the next chunk? + if (i % symbolsPerChunk == 0) { + u32 chunkAddr = symbolTableRomAddr + sizeof(SymbolTable) + (i / symbolsPerChunk) * chunkSize; + nuPiReadRom(chunkAddr, chunk, chunkSize); + } + + Symbol sym = chunk[i % symbolsPerChunk]; + + if (sym.address == address) { + *out = sym; + return 0; + } else if (address < sym.address) { + // Symbols are sorted by address, so if we passed the address, we can stop + break; + } else { + // Keep searching, but remember this as the last symbol + // incase we don't find an exact match + *out = sym; + } + } + return address - out->address; +} + +char* load_symbol_string(char* dest, u32 addr, int n) { + if (addr == NULL) { + return NULL; + } + + u32 aligned = addr & ~3; + nuPiReadRom(aligned, dest, n); + dest[n-1] = '\0'; // Ensure null-termination + + // Shift to start of string + return (char*)((u32)dest + (addr & 3)); +} + +void backtrace_address_to_string(u32 address, char* dest) { + Symbol sym; + s32 offset = address2symbol(address, &sym); + + if (offset >= 0 && offset < 0x1000) { // 0x1000 = arbitrary func size limit + char name[32]; + char file[32]; + char* namep = load_symbol_string(name, sym.nameOffset, ARRAY_COUNT(name)); + char* filep = load_symbol_string(file, sym.fileOffset, ARRAY_COUNT(file)); + + if (filep == NULL) + if (offset == 0) + sprintf(dest, "%s", namep); + else + sprintf(dest, "%s+0x%X", namep, offset); + else + if (offset == 0) + sprintf(dest, "%s (%s)", namep, filep); + else + sprintf(dest, "%s (%s+0x%X)", namep, filep, offset); + } else { + sprintf(dest, "0x%08X", address); + } +} + +void debug_backtrace(void) { + s32 bt[32]; + s32 max = backtrace((void**)bt, ARRAY_COUNT(bt)); + s32 i; + char buf[128]; + + osSyncPrintf("Backtrace:\n"); + for (i = 0; i < max; i++) { + backtrace_address_to_string(bt[i], buf); + osSyncPrintf(" %s\n", buf); + } +} + +/** + * @brief Analyze a function to find out its stack frame layout and properties (useful for backtracing). + * + * This function implements the core heuristic used by the backtrace engine. It analyzes the actual + * code of a function in memory instruction by instruction, trying to find out whether the function + * uses a stack frame or not, whether it uses a frame pointer, and where the return address is stored. + * + * Since we do not have DWARF informations or similar metadata, we can just do educated guesses. A + * mistake in the heuristic will result probably in a wrong backtrace from this point on. + * + * The heuristic works as follows: + * + * * Most functions do have a stack frame. In fact, 99.99% of the functions you can find in a call stack + * must have a stack frame, because the only functions without a stack frame are leaf functions (functions + * that do not call other functions), which in turns can never be part of a stack trace. + * * The heuristic walks the function code backwards, looking for the stack frame. Specifically, it looks + * for an instruction saving the RA register to the stack (eg: `sd $ra, nn($sp)`), and an instruction + * creating the stack frame (eg: `addiu $sp, $sp, -nn`). Once both are found, the heuristic knows how to + * fill in `.stack_size` and `.ra_offset` fields of the function description structure, and it can stop. + * * Some functions also modify $fp (the frame pointer register): sometimes, they just use it as one additional + * free register, and other times they really use it as frame pointer. If the heuristic finds the + * instruction `move $fp, $sp`, it knows that the function uses $fp as frame pointer, and will mark + * the function as BT_FUNCTION_FRAMEPOINTER. In any case, the field `.fp_offset` will be filled in + * with the offset in the stack where $fp is stored, so that the backtrace engine can track the + * current value of the register in any case. + * * The 0.01% of the functions that do not have a stack frame but appear in the call stack are leaf + * functions interrupted by exceptions. Leaf functions pose two important problems: first, $ra is + * not saved into the stack so there is no way to know where to go back. Second, there is no clear + * indication where the function begins (as we normally stops analysis when we see the stack frame + * creation). So in this case the heuristic would fail. We rely thus on two hints coming from the caller: + * * First, we expect the caller to set from_exception=true, so that we know that we might potentially + * deal with a leaf function. + * * Second, the caller should provide the function start address, so that we stop the analysis when + * we reach it, and mark the function as BT_LEAF. + * * If the function start address is not provided (because e.g. the symbol table was not found and + * thus we have no information about function starts), the last ditch heuristic is to look for + * the nops that are normally used to align the function start to the FUNCTION_ALIGNMENT boundary. + * Obviously this is a very fragile heuristic (it will fail if the function required no nops to be + * properly aligned), but it is the best we can do. Worst case, in this specific case of a leaf + * function interrupted by the exception, the stack trace will be wrong from this point on. + * + * @param func Output function description structure + * @param ptr Pointer to the function code at the point where the backtrace starts. + * This is normally the point where a JAL opcode is found, as we are walking + * up the call stack. + * @param func_start Start of the function being analyzed. This is optional: the heuristic can work + * without this hint, but it is useful in certain situations (eg: to better + * walk up after an exception). + * @param from_exception If true, this function was interrupted by an exception. This is a hint that + * the function *might* even be a leaf function without a stack frame, and that + * we must use special heuristics for it. + * + * @return true if the backtrace can continue, false if must be aborted (eg: we are within invalid memory) + */ +bool __bt_analyze_func(bt_func_t *func, uint32_t *ptr, uint32_t func_start, bool from_exception) { + // exceptasm.s + #define inthandler ((uint32_t*)0x8006A9F0) + #define inthandler_end ((uint32_t*)0x8006B35C) + + uint32_t addr; + + *func = (bt_func_t){ + .type = (ptr >= inthandler && ptr < inthandler_end) ? BT_EXCEPTION : BT_FUNCTION, + .stack_size = 0, .ra_offset = 0, .fp_offset = 0 + }; + + addr = (uint32_t)ptr; + while (1) { + uint32_t op; + + // Validate that we can dereference the virtual address without raising an exception + // TODO: enhance this check with more valid ranges. + if (!is_valid_address(addr)) { + // This address is invalid, probably something is corrupted. Avoid looking further. + osSyncPrintf("backtrace: interrupted because of invalid return address 0x%08x\n", addr); + return false; + } + op = *(uint32_t*)addr; + if (MIPS_OP_ADDIU_SP(op) || MIPS_OP_DADDIU_SP(op)) { + // Extract the stack size only from the start of the function, where the + // stack is allocated (negative value). This is important because the RA + // could point to a leaf basis block at the end of the function (like in the + // assert case), and if we picked the positive ADDIU SP at the end of the + // proper function body, we might miss a fp_offset. + if (op & 0x8000) + func->stack_size = -(int16_t)(op & 0xFFFF); + } else if (MIPS_OP_SD_RA_SP(op)) { + func->ra_offset = (int16_t)(op & 0xFFFF) + 4; // +4 = load low 32 bit of RA + // If we found a stack size, it might be a red herring (an alloca); we need one + // happening "just before" sd ra,xx(sp) + func->stack_size = 0; + } else if (MIPS_OP_SW_RA_SP(op)) { + // 32-bit version of above + func->ra_offset = (int16_t)(op & 0xFFFF); + func->stack_size = 0; + } else if (MIPS_OP_SD_FP_SP(op)) { + func->fp_offset = (int16_t)(op & 0xFFFF) + 4; // +4 = load low 32 bit of FP + } else if (MIPS_OP_SW_FP_SP(op)) { + // 32-bit version of above + func->fp_offset = (int16_t)(op & 0xFFFF); + } else if (MIPS_OP_LUI_GP(op)) { + // Loading gp is commonly done in _start, so it's useless to go back more + return false; + } else if (MIPS_OP_MOVE_FP_SP(op)) { + // This function uses the frame pointer. Uses that as base of the stack. + // Even with -fomit-frame-pointer (default on our toolchain), the compiler + // still emits a framepointer for functions using a variable stack size + // (eg: using alloca() or VLAs). + func->type = BT_FUNCTION_FRAMEPOINTER; + } + // We found the stack frame size and the offset of the return address in the stack frame + // We can stop looking and process the frame + if (func->stack_size != 0 && func->ra_offset != 0) + break; + if (from_exception) { + // The function we are analyzing was interrupted by an exception, so it might + // potentially be a leaf function (no stack frame). We need to make sure to stop + // at the beginning of the function and mark it as leaf function. Use + // func_start if specified, or try to guess using the nops used to align the function + // (crossing fingers that they're there). + if (addr == func_start) { + // The frame that was interrupted by an interrupt handler is a special case: the + // function could be a leaf function with no stack. If we were able to identify + // the function start (via the symbol table) and we reach it, it means that + // we are in a real leaf function. + func->type = BT_LEAF; + break; + } else if (!func_start && MIPS_OP_NOP(op) && (addr + 4) % FUNCTION_ALIGNMENT == 0) { + // If we are in the frame interrupted by an interrupt handler, and we does not know + // the start of the function (eg: no symbol table), then try to stop by looking for + // a NOP that pads between functions. Obviously the NOP we find can be either a false + // positive or a false negative, but we can't do any better without symbols. + func->type = BT_LEAF; + break; + } + } + addr -= 4; + } + return true; +} diff --git a/src/dx/backtrace.h b/src/dx/backtrace.h new file mode 100644 index 00000000000..9cca5f79539 --- /dev/null +++ b/src/dx/backtrace.h @@ -0,0 +1,58 @@ +#ifndef BACKTRACE_H +#define BACKTRACE_H + +#include "common.h" + +/** + * @brief ROM address of the pointer to the symbol table. + * + * This particular location is an unused part of the header lol. + * Don't modify this without also updating append_symbol_table.py. + */ +#define SYMBOL_TABLE_PTR_ROM_ADDR 0x18 + +typedef struct Symbol { + u32 address; ///< RAM address. + u32 nameOffset; ///< Offset of the symbol name string. + u32 fileOffset; ///< Offset of the file name and line string. +} Symbol; + +typedef struct SymbolTable { + char magic[4]; // "SYMS" + u32 symbolCount; + struct Symbol symbols[0]; + // then lots of strings +} SymbolTable; + +/** + * @brief Walk the stack and return the current call stack + * + * This function will analyze the current execution context, + * walking the stack and returning informations on the active + * call frames. + * + * This function adheres to POSIX specification. It does not + * allocate memory so it is safe to be called even in the + * context of low memory conditions or possibly corrupted heap. + * + * If called within an interrupt or exception handler, the function + * is able to correctly walk backward the interrupt handler and + * show the context even before the exception was triggered. + * + * @param buffer Empty array of pointers. This will be populated with pointers + * to the return addresses for each call frame. + * @param size Size of the buffer, that is, maximum number of call frames + * that will be walked by the function. + * @return Number of call frames walked (at most, size). + */ +int backtrace(void **buffer, int size); + +int backtrace_thread(void **buffer, int size, OSThread *thread); + +/** @brief Print a backtrace. */ +void debug_backtrace(void); + +/** @brief Converts a function address to a string representation using its name, offset, and file. */ +void backtrace_address_to_string(u32 address, char* dest); + +#endif diff --git a/src/dx/config.h b/src/dx/config.h new file mode 100644 index 00000000000..9fe09382085 --- /dev/null +++ b/src/dx/config.h @@ -0,0 +1,55 @@ +#ifndef DX +#define DX + +#include "world/entrances.h" +#include "battle/formation_names.h" +#include "battle/stage_names.h" + +/// Creates the version string that appears on the file select menu. +/// Also used to sign save files created with this mod. +/// WARNING: name must not exceed 27 characters! +#define DX_MOD_NAME "Wish Upon Abyss" +#define DX_MOD_VER_MAJOR 1 /// Increase this when you make breaking changes to the savefile format (like reordering items) +#define DX_MOD_VER_MINOR 0 /// Increase this when adding new features or other enchancements +#define DX_MOD_VER_PATCH 0 /// Increase this when fixing bugs + +/// Enables the debug menu. +#define DX_DEBUG_MENU 1 + +/// Loads last used save file. +#define DX_QUICK_LAUNCH 1 + +/// Quick launch into this battle. +/// Comment out to disable, +//#define DX_QUICK_LAUNCH_BATTLE BTL_NOK_FORMATION_00, BTL_NOK_STAGE_00 + +/// Skips logos (Nintendo, Intelligent Systems, etc.). +#define DX_SKIP_LOGOS 1 + +/// Skips the introductory storybook. +#define DX_SKIP_STORY 1 + +/// Skips the demo reel playing while waiting for the player to 'Press Start'. +#define DX_SKIP_DEMO 1 + +/// Map to load when starting a new game. +#define NEW_GAME_MAP_ID "ham_01" + +/// Entry to use when starting a new game. +#define NEW_GAME_ENTRY_ID ham_01_ENTRY_West + +/// Story progress when starting a new game. +#define NEW_GAME_STORY_PROGRESS STORY_CH1_MADE_FIRST_BRIDGE + +/// Enables the profiler, which shows lots of performance info on screen. +/// Press L + D-Pad Up to show/hide the profiler. +#define USE_PROFILER 1 + +#define GIVE_ALL_PARTNERS 0 +#define GIVE_GOOMBARIO 1 + + +/// Skip laggy blur operations when opening the pause menu on emulator +#define DX_PAUSE_LAG_FIX 1 + +#endif diff --git a/src/dx/debug_menu.c b/src/dx/debug_menu.c new file mode 100644 index 00000000000..d2860e5c964 --- /dev/null +++ b/src/dx/debug_menu.c @@ -0,0 +1,2152 @@ +#include "dx/debug_menu.h" +#if DX_DEBUG_MENU || defined(DX_QUICK_LAUNCH_BATTLE) +#include "game_modes.h" +#include "battle/battle.h" +#include "hud_element.h" +#include "qsort.h" + +// layout + +const s32 MainMenuPosX = 26; +const s32 MainMenuPosY = 60; + +const s32 RowHeight = 15; +const s32 BottomRowY = 222; + +const s32 SubmenuPosX = 140; +const s32 SubmenuPosY = MainMenuPosY; + +const s32 SubBoxPosX = SubmenuPosX - 10; +const s32 SubBoxPosY = SubmenuPosY - 4; + +// which menu or submenu is open, only one is displayed at a time +// pressing ACCEPT (R) or CANCEL (L) usually moves between these states +enum DebugMenuStates { + DBM_NONE, + DBM_MAIN_MENU, + DBM_QUICK_SAVE, + DBM_SELECT_AREA, + DBM_SELECT_MAP, + DBM_SELECT_ENTRY, + DBM_SELECT_BATTLE, + DBM_SET_STORY, + DBM_SOUND_PLAYER, + DBM_SELECT_SOUND, + DBM_EDIT_PARTNERS, + DBM_EDIT_INVENTORY, + DBM_INV_EDIT_ITEMS, + DBM_INV_EDIT_BADGES, + DBM_INV_EDIT_KEYS, + DBM_INV_EDIT_GEAR, + DBM_INV_EDIT_STATS, + DBM_INV_EDIT_COINS, + DBM_INV_EDIT_STAR_POINTS, + DBM_INV_EDIT_STAR_PIECES, + DBM_EDIT_MEMORY, + DBM_VIEW_COLLISION, + DBM_CHEAT_MENU, +}; + +s32 DebugMenuState = DBM_NONE; +b32 DebugStateChanged = FALSE; + +const s32 DefaultColor = MSG_PAL_WHITE; +const s32 HoverColor = MSG_PAL_GREEN; +const s32 SelectColor = MSG_PAL_PURPLE; +s32 HighlightColor; + +// data grabbed during map or battle load + +char LastMapName[16]; +char LastStageName[16]; +s32 LastMapEntry; +s32 LastBattleID; + +void dx_debug_set_map_info(char* mapName, s32 entryID) { + strcpy(LastMapName, mapName); + LastMapEntry = entryID; +} + +void dx_debug_set_battle_info(s32 battleID, char* stageName) { + s32 len = strlen(stageName); + + strcpy(LastStageName, stageName); + if (len > 6) { + // trim "_shape" from name + LastStageName[len - 6] = '\0'; + } + LastBattleID = battleID; +} + +// input + +u32 DebugButtonsCur; +u32 DebugButtonsPrev; +u32 DebugButtonsPress; +u32 DebugButtonsHold; +u32 DebugButtonsRelease; + +typedef struct DebugHold { + s16 delay; + u16 triggers; +} DebugHold; + +DebugHold DebugHoldU = { 0 }; +DebugHold DebugHoldD = { 0 }; +DebugHold DebugHoldL = { 0 }; +DebugHold DebugHoldR = { 0 }; + +#define PRESSED(but) (DebugButtonsPress & (but)) +#define RELEASED(but) (DebugButtonsRelease & (but)) +#define HELD(but) (DebugButtonsHold & (but)) + +#define INIT_HOLD_RATE 6 // slight start-up delay +#define SLOW_HOLD_RATE 4 +#define FAST_HOLD_RATE 2 + +void dx_debug_update_hold_frames(DebugHold* hold, u32 but) { + if (PRESSED(but)) { + hold->delay = INIT_HOLD_RATE; + hold->triggers = 0; + } else if (HELD(but)) { + hold->delay--; + if (hold->delay < 0) { + hold->triggers++; + + if (hold->triggers < 5) { + hold->delay = SLOW_HOLD_RATE; + } else if (hold->triggers < 15) { + hold->delay = FAST_HOLD_RATE; + } else { + hold->delay = 1; + } + } + } else { + hold->delay = 999; + hold->triggers = 0; + } +} + +void dx_debug_update_buttons() { + DebugButtonsPrev = DebugButtonsCur; + DebugButtonsCur = gGameStatus.curButtons[0]; + DebugButtonsHold = DebugButtonsCur & DebugButtonsPrev; + DebugButtonsPress = DebugButtonsCur & (DebugButtonsCur ^ DebugButtonsPrev); + DebugButtonsRelease = DebugButtonsPrev & (DebugButtonsCur ^ DebugButtonsPrev); + + dx_debug_update_hold_frames(&DebugHoldU, BUTTON_D_UP); + dx_debug_update_hold_frames(&DebugHoldD, BUTTON_D_DOWN); + dx_debug_update_hold_frames(&DebugHoldL, BUTTON_D_LEFT); + dx_debug_update_hold_frames(&DebugHoldR, BUTTON_D_RIGHT); +}; + +#define NAV_UP (PRESSED(BUTTON_D_UP) || DebugHoldU.delay == 0) +#define NAV_DOWN (PRESSED(BUTTON_D_DOWN) || DebugHoldD.delay == 0) +#define NAV_LEFT (PRESSED(BUTTON_D_LEFT) || DebugHoldL.delay == 0) +#define NAV_RIGHT (PRESSED(BUTTON_D_RIGHT) || DebugHoldR.delay == 0) + +// utility functions for drawing menus + +void dx_debug_draw_box(s32 posX, s32 posY, s32 sizeX, s32 sizeY, int style, s32 opacity) { + draw_box(0, (WindowStyle)style, posX, posY, 0, sizeX, sizeY, opacity, + 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, 0, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL); +} + +void dx_debug_draw_ascii(char* text, s32 color, s32 posX, s32 posY) { + char buf[128] = { + MSG_CHAR_READ_FUNCTION, MSG_READ_FUNC_SIZE, 12, 12 + }; + dx_string_to_msg(&buf[4], text); + draw_msg((s32)buf, posX, posY, 255, color, 0); +} + +void dx_debug_draw_ascii_with_effect(char* text, s32 color, s32 posX, s32 posY, s32 effect) { + char buf[128] = { + MSG_CHAR_READ_FUNCTION, MSG_READ_FUNC_SIZE, 12, 12 + }; + dx_string_to_msg(&buf[4], text); + draw_msg((s32)buf, posX, posY, 255, color, effect); +} + +void dx_debug_draw_msg(s32 msgID, s32 color, s32 alpha, s32 posX, s32 posY) { + char buf[128] = { + MSG_CHAR_READ_FUNCTION, MSG_READ_FUNC_SIZE, 12, 12 + }; + dma_load_msg(msgID, &buf[4]); + draw_msg((s32)buf, posX, posY, alpha, color, 0); +} + +void dx_debug_draw_number(s32 number, char* fmt, s32 color, s32 alpha, s32 posX, s32 posY) { + char fmtBuf[16]; + char buf[16] = { + MSG_CHAR_READ_FUNCTION, MSG_READ_FUNC_SIZE, 12, 12 + }; + sprintf(fmtBuf, fmt, number); + dx_string_to_msg(&buf[4], fmtBuf); + draw_msg((s32)buf, posX, posY, alpha, color, 0); +} + +// efficiently renders an number with (optionally) a digit highlighted using a single draw_msg call +void dx_debug_draw_editable_number(s32 number, char* fmt, s32 selectedDigit, b32 hasSelected, s32 posX, s32 posY) { + char msgBuf[32] = { + MSG_CHAR_READ_FUNCTION, MSG_READ_FUNC_SIZE, 12, 12, + MSG_CHAR_READ_FUNCTION, MSG_READ_FUNC_SPACING, 8 + }; + s32 pos = 7; // writePos to msgBuf + + char fmtBuf[16]; + s32 len = sprintf(fmtBuf, fmt, number); + s32 idx; // readPos from fmtBuf + + for (idx = 0; idx < len; idx++) { + if (hasSelected && selectedDigit == idx) { + msgBuf[pos++] = MSG_CHAR_READ_FUNCTION; + msgBuf[pos++] = MSG_READ_FUNC_SAVE_COLOR; + msgBuf[pos++] = MSG_CHAR_READ_FUNCTION; + msgBuf[pos++] = MSG_READ_FUNC_COLOR; + msgBuf[pos++] = HighlightColor; + } + msgBuf[pos++] = dx_ascii_char_to_msg(fmtBuf[idx]); + if (hasSelected && selectedDigit == idx) { + msgBuf[pos++] = MSG_CHAR_READ_FUNCTION; + msgBuf[pos++] = MSG_READ_FUNC_RESTORE_COLOR; + } + } + msgBuf[pos] = MSG_CHAR_READ_END; + + if (hasSelected && selectedDigit == -1) { + draw_msg((s32)msgBuf, posX, posY, 255, HighlightColor, 0); + } else { + draw_msg((s32)msgBuf, posX, posY, 255, DefaultColor, 0); + } +} + +// utility functions for menu navigation + +s32 dx_debug_clamp(s32 v, s32 min, s32 max) { + const s32 u = v < min ? min : v; + return u > max ? max : u; +} + +s32 dx_debug_wrap(s32 v, s32 min, s32 max) { + const s32 u = v < min ? v + (max - min + 1) : v; + return u > max ? u - (max - min + 1) : u; +} + +// range from [min, max] with min < max +s32 dx_debug_menu_nav_1D_vertical(s32 cur, s32 min, s32 max, b32 flip) { + if (NAV_UP) { + if(flip) { + cur++; + } else { + cur--; + } + } + if (NAV_DOWN) { + if(flip) { + cur--; + } else { + cur++; + } + } + // wrap + if (cur < min) { + cur += (1 + max - min); + } + if (cur > max) { + cur -= (1 + max - min); + } + return cur; +} + +// range from [min, max] with min < max +s32 dx_debug_menu_nav_1D_horizontal(s32 cur, s32 min, s32 max, b32 flip) { + if (NAV_LEFT) { + if(flip) { + cur++; + } else { + cur--; + } + } + if (NAV_RIGHT) { + if(flip) { + cur--; + } else { + cur++; + } + } + // wrap + if (cur < min) { + cur += (1 + max - min); + } + if (cur > max) { + cur -= (1 + max - min); + } + return cur; +} + +s32 dx_debug_menu_nav_2D(s32 cur, s32 max, s32 nrows) { + s32 ncols = max / nrows; + if ((max % nrows) != 0) { + ncols++; + } + + if (NAV_UP) { + cur--; + if (cur < 0) { + cur += nrows; + } + else if (cur % nrows == nrows - 1) { + cur += nrows; + } + while (cur >= max) { + cur--; + } + } + if (NAV_DOWN) { + cur++; + if (cur >= max) { + cur = (cur / nrows) * nrows; + } + else if (cur % nrows == 0) { + cur -= nrows; + } + } + if (NAV_LEFT) { + cur -= nrows; + if (cur < 0) { + cur += (nrows * ncols); + while (cur >= max) { + cur -= nrows; + } + } + } + if (NAV_RIGHT) { + cur += nrows; + if (cur >= max) { + cur -= (nrows * ncols); + while (cur < 0) { + cur += nrows; + } + } + } + return cur; +} + +// utility functions for number input fields + +typedef struct DebugEditableNumber { + b8 isHex; + s8 pos; + s8 size; + s8 digits[]; +} DebugEditableNumber; + +void dx_debug_nav_editable_num(DebugEditableNumber* num) { + s32 max = num->isHex ? 0xF : 9; + + if (num->size > 1) { + num->pos = dx_debug_menu_nav_1D_horizontal(num->pos, 0, num->size - 1, FALSE); + } + num->digits[num->pos] = dx_debug_menu_nav_1D_vertical(num->digits[num->pos], 0, max, TRUE); +} + +void dx_debug_draw_editable_num(DebugEditableNumber* num, s32 posX, s32 posY) { + char* fmt = num->isHex ? "%X" : "%d"; + s32 idx; + + for (idx = 0; idx < num->size; idx++) { + s32 color = (num->pos == idx) ? HighlightColor : DefaultColor; + dx_debug_draw_number(num->digits[idx], fmt, color, 255, posX + (7 * idx), posY); + } +} + +s32 dx_debug_get_editable_num(DebugEditableNumber* num) { + s32 idx; + s32 out = 0; + + if (num->isHex) { + for (idx = 0; idx < num->size; idx++) { + out <<= 4; + out |= (num->digits[idx] & 0xF); + } + } else { + for (idx = 0; idx < num->size; idx++) { + out *= 10; + out += num->digits[idx]; + } + } + + return out; +} + +void dx_debug_set_editable_num(DebugEditableNumber* num, s32 in) { + s32 idx; + + if (num->isHex) { + for (idx = num->size - 1; idx >= 0; idx--) { + num->digits[idx] = (in & 0xF); + in >>= 4; + } + } else { + for (idx = num->size - 1; idx >= 0; idx--) { + num->digits[idx] = in % 10; + in /= 10; + } + } +} + +// menus + +void dx_debug_draw_main_menu(); + +b32 dx_debug_menu_is_open() { + return DebugMenuState != DBM_NONE; +} + +void dx_debug_exec_full_restore() { + gPlayerData.curHP = gPlayerData.curMaxHP; + gPlayerData.curFP = gPlayerData.curMaxFP; + gPlayerData.starPower = gPlayerData.maxStarPower * SP_PER_BAR; + sfx_play_sound(SOUND_UNUSED_STAR_SPIRIT_APPEARS); +} + +typedef struct DebugMenuEntry { + char* text; + void (*onSelect)(); + s32 nextState; +} DebugMenuEntry; + +DebugMenuEntry DebugMainMenu[] = { + { "Full Restore", dx_debug_exec_full_restore }, + { "Save/Load", NULL, DBM_QUICK_SAVE }, + { "Map Select", NULL, DBM_SELECT_AREA }, + { "Battle Select", NULL, DBM_SELECT_BATTLE }, + { "Set Story Byte", NULL, DBM_SET_STORY }, + { "Sound Player", NULL, DBM_SOUND_PLAYER }, + { "Edit Partners", NULL, DBM_EDIT_PARTNERS }, + { "Edit Inventory", NULL, DBM_EDIT_INVENTORY }, +// { "Edit Memory", NULL, DBM_EDIT_MEMORY }, + { "View Collision", NULL, DBM_VIEW_COLLISION }, + { "Cheats", NULL, DBM_CHEAT_MENU }, +}; +s32 MainMenuPos = 0; + +// position of the blue box containing the main menu options +const s32 MainBoxPosX = MainMenuPosX - 10; +const s32 MainBoxPosY = MainMenuPosY - 4; +const s32 MainBoxWidth = 96; +const s32 MainBoxHeight = ARRAY_COUNT(DebugMainMenu) * RowHeight + 8; + +f32 ArrowAnimOffset = 0; +f32 DebugArrowPhase = 0.0f; +#define DEBUG_ARROW_ANIM_RATE 6 + +void dx_debug_menu_main() { + s32 initialMenuState = DebugMenuState; + + dx_debug_update_buttons(); + + HighlightColor = HELD(BUTTON_R) ? SelectColor : HoverColor; + + DebugArrowPhase += DEBUG_ARROW_ANIM_RATE; + if (DebugArrowPhase >= 360.0f) { + DebugArrowPhase -= 360.0f; + } + ArrowAnimOffset = cos_deg(DebugArrowPhase); + + dx_debug_update_banner(); + + // check input for menu open/close + if (DebugMenuState == DBM_NONE) { + if (PRESSED(BUTTON_D_LEFT)) { + DebugMenuState = DBM_MAIN_MENU; + } + } else if (DebugMenuState == DBM_MAIN_MENU) { + if (PRESSED(BUTTON_D_LEFT | BUTTON_L)) { + DebugMenuState = DBM_NONE; + } + } + + if (DebugMenuState != DBM_NONE) { + // main menu is always drawn if the debug menu is open at all + dx_debug_draw_main_menu(); + + switch(DebugMenuState) { + case DBM_MAIN_MENU: + dx_debug_update_main_menu(); + break; + case DBM_QUICK_SAVE: + dx_debug_update_quick_save(); + break; + case DBM_SELECT_AREA: + dx_debug_update_select_area(); + break; + case DBM_SELECT_MAP: + dx_debug_update_select_map(); + break; + case DBM_SELECT_ENTRY: + dx_debug_update_select_entry(); + break; + case DBM_SELECT_BATTLE: + dx_debug_update_select_battle(); + break; + case DBM_SET_STORY: + dx_debug_update_edit_progress(); + break; + case DBM_SOUND_PLAYER: + dx_debug_update_sound_player(); + break; + case DBM_SELECT_SOUND: + dx_debug_update_select_sound(); + break; + case DBM_EDIT_PARTNERS: + dx_debug_update_edit_partners(); + break; + case DBM_EDIT_INVENTORY: + dx_debug_update_edit_inventory(); + break; + case DBM_INV_EDIT_ITEMS: + dx_debug_update_edit_items(); + break; + case DBM_INV_EDIT_BADGES: + dx_debug_update_edit_items(); + break; + case DBM_INV_EDIT_KEYS: + dx_debug_update_edit_items(); + break; + case DBM_INV_EDIT_GEAR: + dx_debug_update_edit_gear(); + break; + case DBM_INV_EDIT_STATS: + dx_debug_update_edit_stats(); + break; + case DBM_INV_EDIT_COINS: + dx_debug_update_edit_coins(); + break; + case DBM_INV_EDIT_STAR_POINTS: + dx_debug_update_edit_star_points(); + break; + case DBM_INV_EDIT_STAR_PIECES: + dx_debug_update_edit_star_pieces(); + break; + case DBM_EDIT_MEMORY: + break; + case DBM_VIEW_COLLISION: + dx_debug_update_view_collision(); + break; + case DBM_CHEAT_MENU: + dx_debug_update_cheat_menu(); + break; + } + } + + DebugStateChanged = (initialMenuState != DebugMenuState); +} + +void dx_debug_update_main_menu() { + MainMenuPos = dx_debug_menu_nav_1D_vertical(MainMenuPos, 0, ARRAY_COUNT(DebugMainMenu) - 1, FALSE); + if (RELEASED(BUTTON_R | BUTTON_D_RIGHT)) { + if (DebugMainMenu[MainMenuPos].onSelect != NULL) { + DebugMainMenu[MainMenuPos].onSelect(); + } else { + DebugMenuState = DebugMainMenu[MainMenuPos].nextState; + } + } +} + +void dx_debug_draw_main_menu() { + s32 idx; + + dx_debug_draw_box(MainBoxPosX, MainBoxPosY, MainBoxWidth, MainBoxHeight, WINDOW_STYLE_4, 192); + + for (idx = 0; idx < ARRAY_COUNT(DebugMainMenu); idx++) { + s32 color = DefaultColor; + if (MainMenuPos == idx) { + color = (DebugMenuState == DBM_MAIN_MENU) ? HighlightColor : HoverColor; + } + dx_debug_draw_ascii(DebugMainMenu[idx].text, color, MainMenuPosX, MainMenuPosY + idx * RowHeight); + } +} + +// ---------------------------------------------------------------------------- +// quick save +// only restores previous player position on maps with save points, otherwise enters through most recent entry + +void dx_debug_exec_quick_save() { + sfx_play_sound(SOUND_MENU_SHOW_CHOICE); + gGameStatusPtr->savedPos.x = gPlayerStatusPtr->pos.x; + gGameStatusPtr->savedPos.y = gPlayerStatusPtr->pos.y; + gGameStatusPtr->savedPos.z = gPlayerStatusPtr->pos.z; + fio_save_game(gGameStatusPtr->saveSlot); + DebugMenuState = DBM_MAIN_MENU; +} + +void dx_debug_exec_quick_load() { + fio_load_game(gGameStatus.saveSlot); + set_map_transition_effect(TRANSITION_STANDARD); + set_game_mode(GAME_MODE_ENTER_WORLD); + DebugMenuState = DBM_MAIN_MENU; +} + +DebugMenuEntry DebugQuickSaveMenu[] = { + { "Cancel", NULL, DBM_MAIN_MENU }, + { "Quick Save", dx_debug_exec_quick_save }, + { "Quick Load", dx_debug_exec_quick_load }, +}; +s32 QuickSaveMenuPos = 0; + +void dx_debug_update_quick_save() { + s32 idx; + + // handle input + QuickSaveMenuPos = dx_debug_menu_nav_1D_vertical(QuickSaveMenuPos, 0, ARRAY_COUNT(DebugQuickSaveMenu) - 1, FALSE); + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } else if (RELEASED(BUTTON_R)) { + if (DebugQuickSaveMenu[QuickSaveMenuPos].onSelect != NULL) { + DebugQuickSaveMenu[QuickSaveMenuPos].onSelect(); + } else { + DebugMenuState = DebugQuickSaveMenu[QuickSaveMenuPos].nextState; + } + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 75, ARRAY_COUNT(DebugQuickSaveMenu) * RowHeight + 8, WINDOW_STYLE_20, 192); + + for (idx = 0; idx < ARRAY_COUNT(DebugQuickSaveMenu); idx++) { + s32 color = (QuickSaveMenuPos == idx) ? HighlightColor : DefaultColor; + dx_debug_draw_ascii(DebugQuickSaveMenu[idx].text, color, SubmenuPosX, SubmenuPosY + (idx + 1) * RowHeight); + } +} + +// ---------------------------------------------------------------------------- +// map select + +s32 SelectAreaMenuPos = 0; +s32 SelectMapMenuPos = 0; +s32 SelectedEntryValue = 0; + +const s32 AreaSizeX = 30; +const s32 MapSizeX = 50; + +void dx_debug_update_select_area() { + s32 i, j, idx; + s32 nrows, ncols; + s32 numAreas = ARRAY_COUNT(gAreas) - 1; + s32 prev = SelectAreaMenuPos; + + // select optimal shape for the menu based on numAreas + // maximum supported size is 9 x 5 (45 areas) + + if (numAreas <= 6) { + nrows = numAreas; + ncols = 1; + } else if (numAreas <= 12) { + nrows = 6; + ncols = 2; + } else if (numAreas <= 18) { + nrows = 6; + ncols = 3; + } else if (numAreas <= 24) { + nrows = 6; + ncols = 4; + } else if (numAreas <= 30) { + nrows = 6; + ncols = 5; + } else if (numAreas <= 35) { + nrows = 7; + ncols = 5; + } else if (numAreas <= 40) { + nrows = 8; + ncols = 5; + } else { + nrows = 9; + ncols = 5; + } + + // handle input + + SelectAreaMenuPos = dx_debug_menu_nav_2D(SelectAreaMenuPos, numAreas, nrows); + if (SelectAreaMenuPos != prev) { + SelectMapMenuPos = 0; + SelectedEntryValue = 0; + } + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } else if (RELEASED(BUTTON_R)) { + DebugMenuState = DBM_SELECT_MAP; + } + + // draw + + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, AreaSizeX * ncols + 8, RowHeight * nrows + 8, WINDOW_STYLE_20, 192); + + idx = 0; + for (i = 0; i < ncols; i++) { + for (j = 0; j < nrows; j++) { + if (idx < numAreas) { + s32 color = (SelectAreaMenuPos == idx) ? HighlightColor : DefaultColor; + char* name = &(gAreas[idx].id)[5]; // trim "area_" prefix + dx_debug_draw_ascii(name, color, SubmenuPosX + i * AreaSizeX, SubmenuPosY + (j + 1) * RowHeight); + } + idx++; + } + } +} + +void dx_debug_update_select_map() { + s32 i, j, idx; + s32 numRows, numCols; + s32 curCol, maxCol, startCol; + MapConfig* maps = gAreas[SelectAreaMenuPos].maps; + s32 numMaps = gAreas[SelectAreaMenuPos].mapCount; + s32 prev = SelectMapMenuPos; + + // select optimal shape for the menu based on numMaps + + if (numMaps <= 6) { + numRows = numMaps; + numCols = 1; + } else if (numMaps <= 12) { + numRows = 6; + numCols = 2; + } else { + numRows = 6; + numCols = 3; + } + + // handle input + + SelectMapMenuPos = dx_debug_menu_nav_2D(SelectMapMenuPos, numMaps, numRows); + if (SelectMapMenuPos != prev) { + SelectedEntryValue = 0; + } + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_SELECT_AREA; + } else if (RELEASED(BUTTON_R)) { + DebugMenuState = DBM_SELECT_ENTRY; + } + + // draw + + curCol = SelectMapMenuPos / numRows; + maxCol = numMaps / numRows; + + if (maxCol > 3) { + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, MapSizeX * numCols + 8, RowHeight * (numRows + 1) + 8, WINDOW_STYLE_20, 192); + } else { + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, MapSizeX * numCols + 8, RowHeight * numRows + 8, WINDOW_STYLE_20, 192); + } + + if (maxCol <= 3) { + startCol = 0; + } else if (curCol == 0) { + startCol = 0; + } else if (curCol == maxCol) { + startCol = maxCol - 2; + } else { + startCol = curCol - 1; + } + + idx = numRows * startCol; + for (i = startCol; i <= startCol + 2; i++) { + for (j = 0; j < numRows; j++) { + if (idx < numMaps) { + s32 color = (SelectMapMenuPos == idx) ? HighlightColor : DefaultColor; + char* name = maps[idx].id; + dx_debug_draw_ascii(name, color, SubmenuPosX + (i - startCol) * MapSizeX, SubmenuPosY + (j + 1) * RowHeight); + } + idx++; + } + } + + if (maxCol > 3) { + // left arrow + if (curCol > 1) { + char msgLeftArrow[] = { + MSG_CHAR_LEFT, MSG_CHAR_READ_END + }; + draw_msg((s32)msgLeftArrow, SubmenuPosX - 2 - round(3.0f * ArrowAnimOffset), SubmenuPosY + 104, 255, DefaultColor, 0); + } + // right arrow + if (curCol < maxCol - 1) { + char msgRightArrow[] = { + MSG_CHAR_RIGHT, MSG_CHAR_READ_END + }; + draw_msg((s32)msgRightArrow, SubmenuPosX + 128 + round(3.0f * ArrowAnimOffset), SubmenuPosY + 104, 255, DefaultColor, 0); + } + } +} + +void dx_debug_update_select_entry() { + s32 idx, areaID, mapID; + MapConfig map = gAreas[SelectAreaMenuPos].maps[SelectMapMenuPos]; + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_SELECT_MAP; + } else if (RELEASED(BUTTON_R)) { + gGameStatusPtr->areaID = SelectAreaMenuPos; + gGameStatusPtr->mapID = SelectMapMenuPos; + gGameStatusPtr->entryID = SelectedEntryValue; + set_map_transition_effect(TRANSITION_STANDARD); + set_game_mode(GAME_MODE_CHANGE_MAP); + play_ambient_sounds(AMBIENT_SILENCE, 1); + DebugMenuState = DBM_NONE; + } + + if (NAV_UP) { + SelectedEntryValue++; + } + if (NAV_DOWN) { + SelectedEntryValue--; + } + + if (SelectedEntryValue < 0) { + SelectedEntryValue = 0; + } + if (SelectedEntryValue > 0x7F) { + SelectedEntryValue = 0x7F; + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 80, 2 * RowHeight + 8, WINDOW_STYLE_20, 192); + + for (idx = 0; idx < ARRAY_COUNT(DebugQuickSaveMenu); idx++) { + char fmtBuf[16]; + dx_debug_draw_ascii(map.id, DefaultColor, SubmenuPosX, SubmenuPosY + RowHeight); + dx_debug_draw_ascii("Entry:", DefaultColor, SubmenuPosX, SubmenuPosY + 2 * RowHeight); + sprintf(fmtBuf, "%2X", SelectedEntryValue); + dx_debug_draw_ascii(fmtBuf, HighlightColor, SubmenuPosX + 40, SubmenuPosY + 2 * RowHeight); + } +} + +// ---------------------------------------------------------------------------- +// battle select + +enum DebugBattleValues { + DEBUG_BATTLE_AREA_TENS, + DEBUG_BATTLE_AREA_ONES, + DEBUG_BATTLE_FORMATION_TENS, + DEBUG_BATTLE_FORMATION_ONES, + DEBUG_BATTLE_STAGE, +}; + +s32 DebugBattleNum[] = { + [DEBUG_BATTLE_AREA_TENS] 0, + [DEBUG_BATTLE_AREA_ONES] 0, + [DEBUG_BATTLE_FORMATION_TENS] 0, + [DEBUG_BATTLE_FORMATION_ONES] 0, + [DEBUG_BATTLE_STAGE] -1, +}; + +s32 BattleDigitOffsets[] = { + [DEBUG_BATTLE_AREA_TENS] 10, + [DEBUG_BATTLE_AREA_ONES] 17, + [DEBUG_BATTLE_FORMATION_TENS] 35, + [DEBUG_BATTLE_FORMATION_ONES] 42, + [DEBUG_BATTLE_STAGE] 63, +}; + +s32 DebugBattleColumn = 0; + +EnemyDrops DebugDummyDrops = NO_DROPS; + +Enemy DebugDummyEnemy = { + .npcID = DX_DEBUG_DUMMY_ID, + .drops = &DebugDummyDrops, +}; + +Encounter DebugDummyEncounter = { + .encounterID = DX_DEBUG_DUMMY_ID, + .enemy = &DebugDummyEnemy, + .count = 0, + .battle = 0, + .stage = 0, +}; + +void dx_debug_begin_battle_with_IDs(s16 battle, s16 stage) { + EncounterStatus* es = &gCurrentEncounter; + + DebugDummyEncounter.battle = battle; + DebugDummyEncounter.stage = stage; + + es->curEncounter = &DebugDummyEncounter; + es->curEnemy = &DebugDummyEnemy; + es->hitType = ENCOUNTER_TRIGGER_NONE; + es->firstStrikeType = FIRST_STRIKE_NONE; + es->forbidFleeing = FALSE; + es->scriptedBattle = TRUE; + es->songID = -1; + es->unk_18 = -1; + es->fadeOutAmount = 0; + es->unk_94 = 0; + + disable_player_input(); + partner_disable_input(); + + gEncounterState = ENCOUNTER_STATE_PRE_BATTLE; + gEncounterSubState = ENCOUNTER_SUBSTATE_PRE_BATTLE_INIT; + D_8009A678 = 1; +} + +void dx_debug_begin_battle() { + s16 battle = (DebugBattleNum[DEBUG_BATTLE_AREA_TENS] & 0xF) << 12 + | (DebugBattleNum[DEBUG_BATTLE_AREA_ONES] & 0xF) << 8 + | (DebugBattleNum[DEBUG_BATTLE_FORMATION_TENS] & 0xF) << 4 + | (DebugBattleNum[DEBUG_BATTLE_FORMATION_ONES] & 0xF); + s16 stage = DebugBattleNum[DEBUG_BATTLE_STAGE] & 0xFFFF; + + dx_debug_begin_battle_with_IDs(battle, stage); +} + +void dx_debug_update_select_battle() { + s32 idx; + char fmtBuf[16]; + s32 maxAreaTens = ARRAY_COUNT(gBattleAreas) >> 4; + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } else if (RELEASED(BUTTON_R)) { + dx_debug_begin_battle(); + DebugMenuState = DBM_NONE; + } + + DebugBattleColumn = dx_debug_menu_nav_1D_horizontal(DebugBattleColumn, 0, 4, FALSE); + if (NAV_UP) { + s32 value = DebugBattleNum[DebugBattleColumn] + 1; + if (DebugBattleColumn == DEBUG_BATTLE_STAGE) { + value = dx_debug_clamp(value, -1, 0x7F); + } else if (DebugBattleColumn == DEBUG_BATTLE_AREA_TENS) { + value = dx_debug_wrap(value, 0, maxAreaTens); + } else { + value = dx_debug_wrap(value, 0, 0xF); + } + DebugBattleNum[DebugBattleColumn] = value; + } + if (NAV_DOWN) { + s32 value = DebugBattleNum[DebugBattleColumn] - 1; + if (DebugBattleColumn == DEBUG_BATTLE_STAGE) { + value = dx_debug_clamp(value, -1, 0x7F); + } else if (DebugBattleColumn == DEBUG_BATTLE_AREA_TENS) { + value = dx_debug_wrap(value, 0, maxAreaTens); + } else { + value = dx_debug_wrap(value, 0, 0xF); + } + DebugBattleNum[DebugBattleColumn] = value; + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 104, 2 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Start Battle:", DefaultColor, SubmenuPosX, SubmenuPosY + 1 * RowHeight); + dx_debug_draw_ascii("-", DefaultColor, SubmenuPosX + 26, SubmenuPosY + 2 * RowHeight); + dx_debug_draw_ascii("(", DefaultColor, SubmenuPosX + 55, SubmenuPosY + 2 * RowHeight); + dx_debug_draw_ascii(")", DefaultColor, SubmenuPosX + 77, SubmenuPosY + 2 * RowHeight); + + for (idx = 0; idx < 5; idx++) { + s32 color = (DebugBattleColumn == idx) ? HighlightColor : DefaultColor; + s32 offset = BattleDigitOffsets[idx]; + char* fmt = (idx == 4) ? "%02X" : "%X"; + + dx_debug_draw_number(DebugBattleNum[idx] & 0xFF, fmt, color, 255, SubmenuPosX + offset, SubmenuPosY + 2 * RowHeight); + } +} + +// ---------------------------------------------------------------------------- +// set story byte + +DebugEditableNumber DebugStoryProgress = { + .isHex = TRUE, + .digits = { 0, 0 }, + .size = 2, + .pos = 0, +}; + +void dx_debug_update_edit_progress() { + if (DebugStateChanged) { + s32 val = evt_get_variable(NULL, GB_StoryProgress); + dx_debug_set_editable_num(&DebugStoryProgress, val); + } + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } else if (RELEASED(BUTTON_R)) { + s32 val = dx_debug_get_editable_num(&DebugStoryProgress); + evt_set_variable(NULL, GB_StoryProgress, val); + sfx_play_sound(SOUND_MENU_BADGE_EQUIP); + } + + dx_debug_nav_editable_num(&DebugStoryProgress); + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 104, 2 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Set Progress:", DefaultColor, SubmenuPosX, SubmenuPosY + RowHeight); + dx_debug_draw_editable_num(&DebugStoryProgress, SubmenuPosX + 35, SubmenuPosY + 2 * RowHeight); +} + +// ---------------------------------------------------------------------------- +// sound player + +DebugMenuEntry DebugSoundPlayerMenu[] = { + { "Play Sound", NULL, DBM_SELECT_SOUND }, + { "Stop Sound", NULL, DBM_SELECT_SOUND }, +}; +s32 SoundPlayerMenuPos = 0; + +void dx_debug_draw_sound_player(b32 activeMenu) { + s32 idx; + + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 75, ARRAY_COUNT(DebugSoundPlayerMenu) * RowHeight + 8, WINDOW_STYLE_20, 192); + + for (idx = 0; idx < ARRAY_COUNT(DebugSoundPlayerMenu); idx++) { + s32 color; + if (activeMenu) { + color = (SoundPlayerMenuPos == idx) ? HighlightColor : DefaultColor; + } else { + color = (SoundPlayerMenuPos == idx) ? HoverColor : DefaultColor; + } + dx_debug_draw_ascii(DebugSoundPlayerMenu[idx].text, color, SubmenuPosX, SubmenuPosY + (idx + 1) * RowHeight); + } +} + +void dx_debug_update_sound_player() { + // handle input + SoundPlayerMenuPos = dx_debug_menu_nav_1D_vertical(SoundPlayerMenuPos, 0, ARRAY_COUNT(DebugSoundPlayerMenu) - 1, FALSE); + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } else if (RELEASED(BUTTON_R)) { + DebugMenuState = DBM_SELECT_SOUND; + } + + dx_debug_draw_sound_player(TRUE); +} + +DebugEditableNumber DebugSoundID = { + .isHex = TRUE, + .digits = { 0, 0, 0, 0 }, + .size = 4, + .pos = 0, +}; + +void dx_debug_update_select_sound() { + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_SOUND_PLAYER; + } else if (RELEASED(BUTTON_R)) { + if (SoundPlayerMenuPos == 0) { + sfx_play_sound(dx_debug_get_editable_num(&DebugSoundID) & 0xFFFF); + } else { + sfx_stop_sound(dx_debug_get_editable_num(&DebugSoundID) & 0xFFFF); + } + } + + dx_debug_nav_editable_num(&DebugSoundID); + + dx_debug_draw_sound_player(FALSE); + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + (4 * RowHeight), 75, 2 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Sound ID:", DefaultColor, SubmenuPosX, SubmenuPosY + 4 * RowHeight); + dx_debug_draw_editable_num(&DebugSoundID, SubmenuPosX, SubmenuPosY + 5 * RowHeight); +} + +// ---------------------------------------------------------------------------- +// edit partners + +s8 DebugPartnerLevels[ARRAY_COUNT(gPlayerData.partners)]; +s32 SelectPartnerMenuPos = 1; + +void dx_debug_update_edit_partners() { + s32 idx; + + if (DebugStateChanged) { + for (idx = 1; idx < ARRAY_COUNT(gPlayerData.partners); idx++) { + DebugPartnerLevels[idx] = gPlayerData.partners[idx].enabled + gPlayerData.partners[idx].level - 1; + } + } + + // handle input + SelectPartnerMenuPos = dx_debug_menu_nav_1D_vertical(SelectPartnerMenuPos, 1, ARRAY_COUNT(gPlayerData.partners) - 1, FALSE); + DebugPartnerLevels[SelectPartnerMenuPos] = dx_debug_menu_nav_1D_horizontal(DebugPartnerLevels[SelectPartnerMenuPos], -1, 2, FALSE); + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } else if (RELEASED(BUTTON_R)) { + for (idx = 1; idx < ARRAY_COUNT(gPlayerData.partners); idx++) { + s32 val = DebugPartnerLevels[idx]; + if (val >= 0) { + gPlayerData.partners[idx].enabled = TRUE; + gPlayerData.partners[idx].level = val; + } else { + gPlayerData.partners[idx].enabled = FALSE; + gPlayerData.partners[idx].level = 0; + } + } + sfx_play_sound(SOUND_MENU_BADGE_EQUIP); + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY, 120, 14 * 11 + 8, WINDOW_STYLE_20, 192); + + for (idx = 1; idx < ARRAY_COUNT(gPlayerData.partners); idx++) { + b32 isSelected = (SelectPartnerMenuPos == idx); + s32 color = isSelected ? HighlightColor : DefaultColor; + s32 posY = SubmenuPosY + (idx - 1) * 14; + s32 level = DebugPartnerLevels[idx]; + s32 alpha = (isSelected || level >= 0) ? 254 : 120; + + if (level < 0) { + dx_debug_draw_number(level, "%d", color, alpha, SubmenuPosX - 3, posY); + } else { + dx_debug_draw_number(level, "%d", color, alpha, SubmenuPosX + 3, posY); + } + + dx_debug_draw_msg(gPartnerPopupProperties[idx].nameMsg, color, alpha, SubmenuPosX + 15, posY); + + if (level == 1) { + char msg[] = { MSG_CHAR_CIRCLE, MSG_CHAR_READ_END }; + draw_msg((s32)msg, SubmenuPosX + 82, posY - 1, 255, MSG_PAL_BLUE, 0); + } else if (level == 2) { + char msg[] = { MSG_CHAR_CIRCLE, MSG_CHAR_CIRCLE, MSG_CHAR_READ_END }; + draw_msg((s32)msg, SubmenuPosX + 82, posY - 1, 255, MSG_PAL_BLUE, 0); + } + } +} + +// ---------------------------------------------------------------------------- +// edit inventory + +DebugMenuEntry DebugInventoryMenu[] = { + { "Items", NULL, DBM_INV_EDIT_ITEMS }, + { "Badges", NULL, DBM_INV_EDIT_BADGES }, + { "Key Items", NULL, DBM_INV_EDIT_KEYS }, + { "Equipment", NULL, DBM_INV_EDIT_GEAR }, + { "Stats", NULL, DBM_INV_EDIT_STATS }, + { "Coins", NULL, DBM_INV_EDIT_COINS }, + { "Star Points", NULL, DBM_INV_EDIT_STAR_POINTS }, + { "Star Pieces", NULL, DBM_INV_EDIT_STAR_PIECES }, +}; +s32 InventoryMenuPos = 0; + +void dx_debug_update_edit_inventory() { + s32 idx; + + // handle input + InventoryMenuPos = dx_debug_menu_nav_1D_vertical(InventoryMenuPos, 0, ARRAY_COUNT(DebugInventoryMenu) - 1, FALSE); + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } else if (RELEASED(BUTTON_R)) { + if (DebugInventoryMenu[InventoryMenuPos].onSelect != NULL) { + DebugInventoryMenu[InventoryMenuPos].onSelect(); + } else { + DebugMenuState = DebugInventoryMenu[InventoryMenuPos].nextState; + } + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 75, ARRAY_COUNT(DebugInventoryMenu) * RowHeight + 8, WINDOW_STYLE_20, 192); + + for (idx = 0; idx < ARRAY_COUNT(DebugInventoryMenu); idx++) { + s32 color = (InventoryMenuPos == idx) ? HighlightColor : DefaultColor; + dx_debug_draw_ascii(DebugInventoryMenu[idx].text, color, SubmenuPosX, SubmenuPosY + (idx + 1) * RowHeight); + } +} + +b32 DebugEditingItem = FALSE; + +#define _MAX_INV_SIZE(a,b,c) MAX(MAX(ARRAY_COUNT(a), ARRAY_COUNT(b)), ARRAY_COUNT(c)) +s8 DebugItemDigits[_MAX_INV_SIZE(gPlayerData.invItems, gPlayerData.keyItems, gPlayerData.badges)][3]; + +typedef struct DebugItemsMenu { + s16 pos; + s16 startPos; + s8 col; +} DebugItemsMenu; + +DebugItemsMenu DebugItems = { + .pos = 0, + .startPos = 0, + .col = 0, +}; + +DebugItemsMenu DebugKeys = { + .pos = 0, + .startPos = 0, + .col = 0, +}; + +DebugItemsMenu DebugBadges = { + .pos = 0, + .startPos = 0, + .col = 0, +}; + +void dx_debug_set_item_id(s32 idx, s16 itemID) { + s32 j; + + for (j = 2; j >= 0; j--) { + DebugItemDigits[idx][j] = (itemID & 0xF); + itemID >>= 4; + } +} + +s16 dx_debug_get_item_id(s32 idx) { + s32 j; + s16 val = 0; + + for (j = 0; j < 3; j++) { + val <<= 4; + val |= (DebugItemDigits[idx][j] & 0xF); + } + return val; +} + +void dx_debug_update_edit_items() { + DebugItemsMenu* menu; + s16* invItems; + s32 invSize; + s32 i, j; + + switch (DebugMenuState) { + case DBM_INV_EDIT_ITEMS: + menu = &DebugItems; + invItems = gPlayerData.invItems; + invSize = ARRAY_COUNT(gPlayerData.invItems); + break; + case DBM_INV_EDIT_KEYS: + menu = &DebugKeys; + invItems = gPlayerData.keyItems; + invSize = ARRAY_COUNT(gPlayerData.keyItems); + break; + case DBM_INV_EDIT_BADGES: + menu = &DebugBadges; + invItems = gPlayerData.badges; + invSize = ARRAY_COUNT(gPlayerData.badges); + break; + } + + if (DebugStateChanged) { + for (i = 0; i < invSize; i++) { + dx_debug_set_item_id(i, invItems[i]); + } + } + + if (RELEASED(BUTTON_L)) { + if (DebugEditingItem) { + DebugEditingItem = FALSE; + } else { + DebugMenuState = DBM_EDIT_INVENTORY; + } + } else if (RELEASED(BUTTON_R)) { + if (!DebugEditingItem) { + DebugEditingItem = TRUE; + } else { + for (i = 0; i < invSize; i++) { + invItems[i] = dx_debug_get_item_id(i); + } + sfx_play_sound(SOUND_MENU_BADGE_EQUIP); + } + } + + if (DebugEditingItem) { + s32 digit; + menu->col = dx_debug_menu_nav_1D_horizontal(menu->col, 0, 2, FALSE); + digit = DebugItemDigits[menu->pos][menu->col]; + digit = dx_debug_menu_nav_1D_vertical(digit, 0, 9, TRUE); + DebugItemDigits[menu->pos][menu->col] = digit; + } else { + if (NAV_UP) { + menu->pos--; + if (menu->pos < 0) { + menu->pos = invSize - 1; + menu->startPos = menu->pos - 9; + } else { + menu->startPos = MIN(menu->startPos, menu->pos); + } + } + if (NAV_DOWN) { + menu->pos++; + if (menu->pos >= invSize) { + menu->pos = 0; + menu->startPos = 0; + } else { + menu->startPos = MAX(menu->startPos, menu->pos - 9); + } + } + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY, 160, 10 * RowHeight + 8, WINDOW_STYLE_20, 192); + + for (i = menu->startPos; i <= menu->startPos + 9; i++) { + s32 posY = SubmenuPosY + (i - menu->startPos) * RowHeight; + s32 itemID = dx_debug_get_item_id(i); + b32 isSelectedRow = (menu->pos == i); + + if (DebugEditingItem) { + dx_debug_draw_editable_number(i, "%02X", -1, FALSE, SubmenuPosX, posY); + dx_debug_draw_editable_number(itemID, "%03X", menu->col, isSelectedRow, SubmenuPosX + 20, posY); + } else { + dx_debug_draw_editable_number(i, "%02X", -1, isSelectedRow, SubmenuPosX, posY); + dx_debug_draw_editable_number(itemID, "%03X", -1, FALSE, SubmenuPosX + 20, posY); + } + + s32 itemMsg = MSG_NONE; + if (itemID > 0 && itemID < NUM_ITEMS) { + itemMsg = gItemTable[itemID].nameMsg; + } + if (itemMsg != MSG_NONE) { + dx_debug_draw_msg(itemMsg, DefaultColor, 255, SubmenuPosX + 50, posY); + } else { + char msgBuf[] = { + MSG_CHAR_READ_FUNCTION, MSG_READ_FUNC_SIZE, 12, 12, + MSG_CHAR_LOWER_E, MSG_CHAR_LOWER_M, MSG_CHAR_LOWER_P, MSG_CHAR_LOWER_T, MSG_CHAR_LOWER_Y, + MSG_CHAR_READ_END, + }; + draw_msg((s32)msgBuf, SubmenuPosX + 50, posY, 255, DefaultColor, 0); + } + } + + // up arrow + if (menu->startPos > 0) { + char msgArrow[] = { + MSG_CHAR_UP, MSG_CHAR_READ_END + }; + draw_msg((s32)msgArrow, SubmenuPosX + 132, SubmenuPosY + round(3.0f * ArrowAnimOffset), 255, DefaultColor, 0); + } + // down arrow + if (menu->startPos + 10 < invSize) { + char msgArrow[] = { + MSG_CHAR_DOWN, MSG_CHAR_READ_END + }; + draw_msg((s32)msgArrow, SubmenuPosX + 132, SubmenuPosY + 134 - round(3.0f * ArrowAnimOffset), 255, DefaultColor, 0); + } +} + +enum { + DEBUG_GEAR_BOOTS, + DEBUG_GEAR_HAMMER, + DEBUG_GEAR_LUCKY_STAR, + DEBUG_GEAR_STAR_BEAM, +}; + +s32 DebugGearValues[] = { + [DEBUG_GEAR_BOOTS] 0, + [DEBUG_GEAR_HAMMER] 0, + [DEBUG_GEAR_LUCKY_STAR] 0, + [DEBUG_GEAR_STAR_BEAM] 0, +}; +s32 DebugGearPos = 0; + +void dx_debug_update_edit_gear() { + s32 idx; + s32 val, dx; + + if (DebugStateChanged) { + DebugGearValues[DEBUG_GEAR_BOOTS] = gPlayerData.bootsLevel; + DebugGearValues[DEBUG_GEAR_HAMMER] = gPlayerData.hammerLevel; + DebugGearValues[DEBUG_GEAR_LUCKY_STAR] = gPlayerData.hasActionCommands; + DebugGearValues[DEBUG_GEAR_STAR_BEAM] = gPlayerData.starBeamLevel; + } + + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_EDIT_INVENTORY; + } else if (RELEASED(BUTTON_R)) { + gPlayerData.bootsLevel = DebugGearValues[DEBUG_GEAR_BOOTS]; + gPlayerData.hammerLevel = DebugGearValues[DEBUG_GEAR_HAMMER]; + gPlayerData.hasActionCommands = DebugGearValues[DEBUG_GEAR_LUCKY_STAR]; + gPlayerData.starBeamLevel = DebugGearValues[DEBUG_GEAR_STAR_BEAM]; + + //TODO functions do not exist yet + /* + if (gPlayerData.hasActionCommands && !has_key_item(ITEM_LUCKY_STAR)) { + add_key_item(ITEM_LUCKY_STAR); + } + if (!gPlayerData.hasActionCommands && has_key_item(ITEM_LUCKY_STAR)) { + remove_key_item(ITEM_LUCKY_STAR); + } + */ + + sfx_play_sound(SOUND_MENU_BADGE_EQUIP); + } + + DebugGearPos = dx_debug_menu_nav_1D_vertical(DebugGearPos, 0, ARRAY_COUNT(DebugGearValues) - 1, FALSE); + + dx = 0; + if (NAV_RIGHT) { + dx++; + } + if (NAV_LEFT) { + dx--; + } + if (dx != 0) { + s32 min = 0; + s32 max = 0; + + switch (DebugGearPos) { + case DEBUG_GEAR_BOOTS: + min = -1; + max = 2; + break; + case DEBUG_GEAR_HAMMER: + min = -1; + max = 2; + break; + case DEBUG_GEAR_LUCKY_STAR: + min = 0; + max = 1; + break; + case DEBUG_GEAR_STAR_BEAM: + min = 0; + max = 2; + break; + } + + DebugGearValues[DebugGearPos] = dx_debug_clamp(DebugGearValues[DebugGearPos] + dx, min, max); + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 95, 5 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Gear:", DefaultColor, SubmenuPosX, SubmenuPosY + RowHeight); + dx_debug_draw_ascii("Boots", DefaultColor, SubmenuPosX, SubmenuPosY + 2 * RowHeight); + dx_debug_draw_ascii("Hammer", DefaultColor, SubmenuPosX, SubmenuPosY + 3 * RowHeight); + dx_debug_draw_ascii("Lucky Star", DefaultColor, SubmenuPosX, SubmenuPosY + 4 * RowHeight); + dx_debug_draw_ascii("Star Beam", DefaultColor, SubmenuPosX, SubmenuPosY + 5 * RowHeight); + + for (idx = 0; idx < ARRAY_COUNT(DebugGearValues); idx++) { + s32 color = (DebugGearPos == idx) ? HighlightColor : DefaultColor; + dx_debug_draw_number(DebugGearValues[idx], "%2d", color, 255, SubmenuPosX + 63, SubmenuPosY + (idx + 2) * RowHeight); + } +} + +enum { + DEBUG_STAT_HP, + DEBUG_STAT_FP, + DEBUG_STAT_BP, + DEBUG_STAT_LEVEL, + DEBUG_STAT_SPIRITS, +}; + +s32 DebugStatValues[] = { + [DEBUG_STAT_HP] 0, + [DEBUG_STAT_FP] 0, + [DEBUG_STAT_BP] 0, + [DEBUG_STAT_LEVEL] 0, + [DEBUG_STAT_SPIRITS] 0, +}; +s32 DebugStatPos = 0; + +void dx_debug_update_edit_stats() { + s32 idx; + s32 val, dx; + + if (DebugStateChanged) { + DebugStatValues[DEBUG_STAT_HP] = gPlayerData.hardMaxHP; + DebugStatValues[DEBUG_STAT_FP] = gPlayerData.hardMaxFP; + DebugStatValues[DEBUG_STAT_BP] = gPlayerData.maxBP; + DebugStatValues[DEBUG_STAT_LEVEL] = gPlayerData.level; + DebugStatValues[DEBUG_STAT_SPIRITS] = gPlayerData.maxStarPower; + } + + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_EDIT_INVENTORY; + } else if (RELEASED(BUTTON_R)) { + gPlayerData.curHP = gPlayerData.curMaxHP = gPlayerData.hardMaxHP = DebugStatValues[DEBUG_STAT_HP]; + gPlayerData.curFP = gPlayerData.curMaxFP = gPlayerData.hardMaxFP = DebugStatValues[DEBUG_STAT_FP]; + gPlayerData.maxBP = DebugStatValues[DEBUG_STAT_BP]; + gPlayerData.level = DebugStatValues[DEBUG_STAT_LEVEL]; + gPlayerData.maxStarPower = DebugStatValues[DEBUG_STAT_SPIRITS]; + gPlayerData.starPower = gPlayerData.maxStarPower * SP_PER_BAR; + sfx_play_sound(SOUND_MENU_BADGE_EQUIP); + } + + DebugStatPos = dx_debug_menu_nav_1D_vertical(DebugStatPos, 0, ARRAY_COUNT(DebugStatValues) - 1, FALSE); + + dx = 0; + if (NAV_RIGHT) { + dx++; + } + if (NAV_LEFT) { + dx--; + } + if (dx != 0) { + switch (DebugStatPos) { + case DEBUG_STAT_HP: + val = DebugStatValues[DEBUG_STAT_HP] + 5 * dx; + DebugStatValues[DEBUG_STAT_HP] = dx_debug_clamp(val, 5, 50); + break; + case DEBUG_STAT_FP: + val = DebugStatValues[DEBUG_STAT_FP] + 5 * dx; + DebugStatValues[DEBUG_STAT_FP] = dx_debug_clamp(val, 0, 50); + break; + case DEBUG_STAT_BP: + val = DebugStatValues[DEBUG_STAT_BP] + 3 * dx; + DebugStatValues[DEBUG_STAT_BP] = dx_debug_clamp(val, 3, 30); + break; + case DEBUG_STAT_LEVEL: + val = DebugStatValues[DEBUG_STAT_LEVEL] + dx; + DebugStatValues[DEBUG_STAT_LEVEL] = dx_debug_clamp(val, 1, 27); + break; + case DEBUG_STAT_SPIRITS: + val = DebugStatValues[DEBUG_STAT_SPIRITS] + dx; + DebugStatValues[DEBUG_STAT_SPIRITS] = dx_debug_clamp(val, 0, 7); + break; + } + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 88, 6 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Stats:", DefaultColor, SubmenuPosX, SubmenuPosY + RowHeight); + dx_debug_draw_ascii("Max HP", DefaultColor, SubmenuPosX, SubmenuPosY + 2 * RowHeight); + dx_debug_draw_ascii("Max FP", DefaultColor, SubmenuPosX, SubmenuPosY + 3 * RowHeight); + dx_debug_draw_ascii("Max BP", DefaultColor, SubmenuPosX, SubmenuPosY + 4 * RowHeight); + dx_debug_draw_ascii("Level", DefaultColor, SubmenuPosX, SubmenuPosY + 5 * RowHeight); + dx_debug_draw_ascii("Spirits", DefaultColor, SubmenuPosX, SubmenuPosY + 6 * RowHeight); + + for (idx = 0; idx < ARRAY_COUNT(DebugStatValues); idx++) { + s32 color = (DebugStatPos == idx) ? HighlightColor : DefaultColor; + dx_debug_draw_number(DebugStatValues[idx], "%2d", color, 255, SubmenuPosX + 55, SubmenuPosY + (idx + 2) * RowHeight); + } +} + +DebugEditableNumber DebugCoins = { + .isHex = FALSE, + .digits = { 0, 0, 0 }, + .size = 3, + .pos = 0, +}; + +void dx_debug_update_edit_coins() { + if (DebugStateChanged) { + dx_debug_set_editable_num(&DebugCoins, gPlayerData.coins); + } + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_EDIT_INVENTORY; + } else if (RELEASED(BUTTON_R)) { + gPlayerData.coins = dx_debug_get_editable_num(&DebugCoins); + open_status_bar_quickly(); + sfx_play_sound(SOUND_COIN_PICKUP); + } + dx_debug_nav_editable_num(&DebugCoins); + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 50, 2 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Coins:", DefaultColor, SubmenuPosX, SubmenuPosY + RowHeight); + dx_debug_draw_editable_num(&DebugCoins, SubmenuPosX, SubmenuPosY + 2 * RowHeight); +} + +DebugEditableNumber DebugStarPoints = { + .isHex = FALSE, + .digits = { 0, 0 }, + .size = 2, + .pos = 0, +}; + +void dx_debug_update_edit_star_points() { + if (DebugStateChanged) { + dx_debug_set_editable_num(&DebugStarPoints, gPlayerData.starPoints); + } + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_EDIT_INVENTORY; + } else if (RELEASED(BUTTON_R)) { + gPlayerData.starPoints = dx_debug_get_editable_num(&DebugStarPoints); + open_status_bar_quickly(); + sfx_play_sound(SOUND_STAR_POINT_PICKUP); + } + dx_debug_nav_editable_num(&DebugStarPoints); + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 86, 2 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Star Points:", DefaultColor, SubmenuPosX, SubmenuPosY + RowHeight); + dx_debug_draw_editable_num(&DebugStarPoints, SubmenuPosX, SubmenuPosY + 2 * RowHeight); +} + +DebugEditableNumber DebugStarPieces = { + .isHex = FALSE, + .digits = { 0, 0, 0 }, + .size = 3, + .pos = 0, +}; + +void dx_debug_update_edit_star_pieces() { + if (DebugStateChanged) { + dx_debug_set_editable_num(&DebugStarPieces, gPlayerData.starPieces); + } + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_EDIT_INVENTORY; + } else if (RELEASED(BUTTON_R)) { + gPlayerData.starPieces = dx_debug_get_editable_num(&DebugStarPieces); + open_status_bar_quickly(); + sfx_play_sound(SOUND_STAR_PIECE_BOUNCE); + } + dx_debug_nav_editable_num(&DebugStarPieces); + + // clamp maximum + if (dx_debug_get_editable_num(&DebugStarPieces) > 255) { + dx_debug_set_editable_num(&DebugStarPieces, 255); + } + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 86, 2 * RowHeight + 8, WINDOW_STYLE_20, 192); + dx_debug_draw_ascii("Star Pieces:", DefaultColor, SubmenuPosX, SubmenuPosY + RowHeight); + dx_debug_draw_editable_num(&DebugStarPieces, SubmenuPosX, SubmenuPosY + 2 * RowHeight); +} + +// ---------------------------------------------------------------------------- +// view collision + +typedef struct DebugCollisionEntry { + char* text; + s32 state; +} DebugCollisionEntry; + +enum { + DBC_SHOW_COLLISION, + DBC_CULL_BACK, + DBC_SHOW_DISABLED, + DBC_HIDE_MODELS, + DBC_EXTRUDE_FACES, + DBC_HIGHLIGHT_FLOOR, + DBC_HIGHLIGHT_WALL, + DBC_FADE_DIST, +}; + +DebugCollisionEntry DebugCollisionMenu[] = { + [DBC_SHOW_COLLISION] { "Show Collision", FALSE }, + [DBC_CULL_BACK] { "Cull Back", TRUE }, + [DBC_SHOW_DISABLED] { "Show Disabled", TRUE }, + [DBC_HIDE_MODELS] { "Hide Models", FALSE }, + [DBC_EXTRUDE_FACES] { "Extrude Faces", FALSE }, + [DBC_HIGHLIGHT_FLOOR] { "Highlight Floor", FALSE }, + [DBC_HIGHLIGHT_WALL] { "Highlight Wall", FALSE }, + [DBC_FADE_DIST] { "Near Fade Dist", 1 }, +}; + +s32 DebugCollisionPos = 0; + +void dx_debug_update_view_collision() { + s32 idx; + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } + + if (DebugCollisionPos != DBC_FADE_DIST) { + if (NAV_LEFT || NAV_RIGHT) { + DebugCollisionMenu[DebugCollisionPos].state = !DebugCollisionMenu[DebugCollisionPos].state; + } + } else { + s32 fadeDist = DebugCollisionMenu[DebugCollisionPos].state; + fadeDist = dx_debug_menu_nav_1D_horizontal(fadeDist, 0, 9, FALSE); + DebugCollisionMenu[DebugCollisionPos].state = fadeDist; + } + DebugCollisionPos = dx_debug_menu_nav_1D_vertical(DebugCollisionPos, 0, ARRAY_COUNT(DebugCollisionMenu) - 1, FALSE); + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 120, 8 * RowHeight + 8, WINDOW_STYLE_20, 192); + + for (idx = 0; idx < ARRAY_COUNT(DebugCollisionMenu); idx++) { + s32 color = (DebugCollisionPos == idx) ? HighlightColor : DefaultColor; + if (idx != DBC_FADE_DIST) { + char* onoff = DebugCollisionMenu[idx].state ? "On" : "Off"; + dx_debug_draw_ascii(onoff, color, SubmenuPosX, SubmenuPosY + (idx + 1) * RowHeight); + } else { + s32 fadeDist = DebugCollisionMenu[idx].state; + dx_debug_draw_number(fadeDist, "%d", color, 255, SubmenuPosX, SubmenuPosY + (idx + 1) * RowHeight); + } + dx_debug_draw_ascii(DebugCollisionMenu[idx].text, DefaultColor, SubmenuPosX + 28, SubmenuPosY + (idx + 1) * RowHeight); + } +} + +void dx_debug_add_collision_vtx(Vtx_t* vtxBuffer, Vec3f* vert, Vec3f* normal, s32 r, s32 g, s32 b, s32 a) { + if (DebugCollisionMenu[DBC_EXTRUDE_FACES].state) { + vtxBuffer->ob[0] = vert->x + normal->x; + vtxBuffer->ob[1] = vert->y + normal->y; + vtxBuffer->ob[2] = vert->z + normal->z; + } else { + vtxBuffer->ob[0] = vert->x; + vtxBuffer->ob[1] = vert->y; + vtxBuffer->ob[2] = vert->z; + } + vtxBuffer->tc[0] = 0; + vtxBuffer->tc[1] = 0; + vtxBuffer->cn[0] = r; + vtxBuffer->cn[1] = g; + vtxBuffer->cn[2] = b; + vtxBuffer->cn[3] = a; +} + +#define MAX_DEBUG_TRIS 1024 + +typedef struct DebugTriangle { + ColliderTriangle* tri; + s16 depth; + s16 colliderID; +} DebugTriangle; + +DebugTriangle DebugTris[MAX_DEBUG_TRIS]; +s32 DebugTriPos; + +Vtx_t DebugVtxBuf[3 * MAX_DEBUG_TRIS]; +s32 DebugVtxPos; + +void dx_debug_draw_collision() { + DebugTriangle temp; + s32 rdpBufPos; + b32 culling; + s32 fadeDist; + s32 i, j; + s32 dist; + + Camera* camera = &gCameras[gCurrentCameraID]; + + if (!DebugCollisionMenu[DBC_SHOW_COLLISION].state) { + return; + } + + // find all collider trianges + DebugTriPos = 0; + for (i = 0; i < gCollisionData.numColliders; i++) { + Collider* collider = &gCollisionData.colliderList[i]; + + if (collider->flags & COLLIDER_FLAG_IGNORE_PLAYER && !DebugCollisionMenu[DBC_SHOW_DISABLED].state) { + continue; + } + + for (j = 0; j < collider->numTriangles; j++) { + if (DebugTriPos < MAX_DEBUG_TRIS) { + ColliderTriangle* tri = &collider->triangleTable[j]; + f32 outX, outY, outZ, outW; + f32 cX = (tri->v1->x + tri->v2->x + tri->v3->x) / 3; + f32 cY = (tri->v1->y + tri->v2->y + tri->v3->y) / 3; + f32 cZ = (tri->v1->z + tri->v2->z + tri->v3->z) / 3; + + transform_point(camera->perspectiveMatrix, cX, cY, cZ, 1.0f, &outX, &outY, &outZ, &outW); + + if (outZ < -100) { + // dont draw triangles sufficiently far behind the camera + DebugTriPos--; + } else { + DebugTris[DebugTriPos].tri = tri; + DebugTris[DebugTriPos].depth = outZ; + DebugTris[DebugTriPos].colliderID = i; + } + } + DebugTriPos++; + } + } + + ASSERT(DebugTriPos < MAX_DEBUG_TRIS) + + // sort triangles by depth +#define LESS(i, j) DebugTris[i].depth > DebugTris[j].depth +#define SWAP(i, j) temp = DebugTris[i], DebugTris[i] = DebugTris[j], DebugTris[j] = temp + QSORT(DebugTriPos, LESS, SWAP); + + gDPPipeSync(gMainGfxPos++); + gDPSetCycleType(gMainGfxPos++, G_CYC_1CYCLE); + gDPSetRenderMode(gMainGfxPos++, G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2); + gDPSetCombineMode(gMainGfxPos++, G_CC_SHADE, G_CC_SHADE); + gSPTexture(gMainGfxPos++, 0x0080, 0x0080, 0, G_TX_RENDERTILE, G_OFF); + gSPClearGeometryMode(gMainGfxPos++, G_LIGHTING | G_CULL_BACK); + + if (DebugCollisionMenu[DBC_CULL_BACK].state) { + gSPSetGeometryMode(gMainGfxPos++, G_CULL_BACK | G_SHADING_SMOOTH); + culling = TRUE; + } else { + gSPSetGeometryMode(gMainGfxPos++, G_SHADING_SMOOTH); + culling = FALSE; + } + + DebugVtxPos = 0; + rdpBufPos = 0; + + // build the display list and fill DebugVtxBuf at the same time + for (i = 0; i < DebugTriPos; i++) { + DebugTriangle* debugTri = &DebugTris[i]; + ColliderTriangle* tri = debugTri->tri; + s32 r, g, b, a; + + b32 highlight = FALSE; + if (DebugCollisionMenu[DBC_HIGHLIGHT_FLOOR].state && debugTri->colliderID == gCollisionStatus.curFloor) { + highlight = TRUE; + } + if (DebugCollisionMenu[DBC_HIGHLIGHT_WALL].state && debugTri->colliderID == gCollisionStatus.curWall) { + highlight = TRUE; + } + + if (rdpBufPos == 0) { + // always load vertices 30 at a time + gSPVertex(gMainGfxPos++, &DebugVtxBuf[DebugVtxPos], 30, 0); + } + + // manage culling state for two-sided triangles + if (DebugCollisionMenu[DBC_CULL_BACK].state) { + if (!tri->oneSided && culling) { + gDPPipeSync(gMainGfxPos++); + gSPClearGeometryMode(gMainGfxPos++, G_CULL_BACK); + culling = FALSE; + } else if (tri->oneSided && !culling) { + gDPPipeSync(gMainGfxPos++); + gSPSetGeometryMode(gMainGfxPos++, G_CULL_BACK); + culling = TRUE; + } + } + + // would be more efficient to pack these into gSP2Triangles ad hoc + // but it becomes difficult to manage once RDP state changes enter the mix due to two-sided triangles + gSP1Triangle(gMainGfxPos++, rdpBufPos, rdpBufPos + 1, rdpBufPos + 2, 0); + + // update rdp buffer pos for next triangle draw + rdpBufPos += 3; + if (rdpBufPos == 30) { + rdpBufPos = 0; + } + + if (highlight) { + r = g = b = 196; + } else { + r = round(fabs(tri->normal.x) * 245.0); + g = round(fabs(tri->normal.y) * 245.0); + b = round(fabs(tri->normal.z) * 245.0); + } + a = 180; + + // fade triangles too close to the camera + fadeDist = DebugCollisionMenu[DBC_FADE_DIST].state; + if(fadeDist > 0) { + dist = debugTri->depth - (fadeDist - 1) * 25; + if (dist < 20) { + // from a=20 at d=40 to a=0 at d=-100 + a = dx_debug_clamp((dist + 100) / 6, 0, 20); + } else { + a = dx_debug_clamp(dist, 20, 180); + } + } + + // build vertices for this triangle + dx_debug_add_collision_vtx(&DebugVtxBuf[DebugVtxPos++], tri->v1, &tri->normal, r, g, b, a); + dx_debug_add_collision_vtx(&DebugVtxBuf[DebugVtxPos++], tri->v2, &tri->normal, r, g, b, a); + dx_debug_add_collision_vtx(&DebugVtxBuf[DebugVtxPos++], tri->v3, &tri->normal, r, g, b, a); + } + + // done + gDPPipeSync(gMainGfxPos++); +} + +b32 dx_debug_should_hide_models() { + return DebugCollisionMenu[DBC_HIDE_MODELS].state; +} + +// ---------------------------------------------------------------------------- +// cheat menu + +typedef struct DebugCheatEntry { + char* text; + b32 enabled; +} DebugCheatEntry; + +DebugCheatEntry DebugCheatMenu[] = { + [DEBUG_CHEAT_GOD_MODE] { "God Mode", FALSE }, + [DEBUG_CHEAT_SPEED_MODE] { "Speed Mode", FALSE }, +// [DEBUG_CHEAT_FLY] { "Fly With L", FALSE }, + [DEBUG_CHEAT_HIGH_JUMP] { "High Jump", FALSE }, + [DEBUG_CHEAT_IGNORE_WALLS] { "Ignore Walls", FALSE }, +}; + +s32 DebugCheatPos = 0; + +void dx_debug_update_cheat_menu() { + s32 idx; + + // handle input + if (RELEASED(BUTTON_L)) { + DebugMenuState = DBM_MAIN_MENU; + } + if (NAV_LEFT || NAV_RIGHT) { + DebugCheatMenu[DebugCheatPos].enabled = !DebugCheatMenu[DebugCheatPos].enabled; + + // actions to execute on state change + switch (DebugCheatPos) { + case DEBUG_CHEAT_GOD_MODE: + // case DEBUG_CHEAT_FLY: + case DEBUG_CHEAT_HIGH_JUMP: + case DEBUG_CHEAT_IGNORE_WALLS: + break; + case DEBUG_CHEAT_SPEED_MODE: + if (!DebugCheatMenu[DebugCheatPos].enabled) { + gPlayerStatus.walkSpeed = 2.0f; + gPlayerStatus.runSpeed = 4.0f; + gGameStatusPtr->debugEnemyContact = DEBUG_CONTACT_NONE; + } else { + gPlayerStatus.walkSpeed = 6.0f; + gPlayerStatus.runSpeed = 12.0f; + gGameStatusPtr->debugEnemyContact = DEBUG_CONTACT_CANT_TOUCH; + } + break; + } + + } + DebugCheatPos = dx_debug_menu_nav_1D_vertical(DebugCheatPos, 0, ARRAY_COUNT(DebugCheatMenu) - 1, FALSE); + + // draw + dx_debug_draw_box(SubBoxPosX, SubBoxPosY + RowHeight, 120, ARRAY_COUNT(DebugCheatMenu) * RowHeight + 8, WINDOW_STYLE_20, 192); + + for (idx = 0; idx < ARRAY_COUNT(DebugCheatMenu); idx++) { + s32 color = (DebugCheatPos == idx) ? HighlightColor : DefaultColor; + char* onoff = DebugCheatMenu[idx].enabled ? "On" : "Off"; + + dx_debug_draw_ascii(onoff, color, SubmenuPosX, SubmenuPosY + (idx + 1) * RowHeight); + dx_debug_draw_ascii(DebugCheatMenu[idx].text, DefaultColor, SubmenuPosX + 28, SubmenuPosY + (idx + 1) * RowHeight); + } +} + +b32 dx_debug_is_cheat_enabled(DebugCheat cheat) { + return DebugCheatMenu[cheat].enabled; +} + +// ---------------------------------------------------------------------------- +// banner info + +void dx_debug_update_banner() { + char fmtBuf[128]; + s32 effect; + + if (gGameStatus.isBattle == 0) { + sprintf(fmtBuf, "Map: %7s (%X)", LastMapName, LastMapEntry); + dx_debug_draw_ascii(fmtBuf, DefaultColor, 220, BottomRowY); + + dx_debug_draw_ascii("Pos:", DefaultColor, 20, BottomRowY); + + effect = dx_debug_is_cheat_enabled(DEBUG_CHEAT_SPEED_MODE) ? DRAW_MSG_STYLE_RAINBOW : 0; + + sprintf(fmtBuf, "%5d", round(gPlayerStatus.pos.x)); + dx_debug_draw_ascii_with_effect(fmtBuf, DefaultColor, 48, BottomRowY, effect); + + sprintf(fmtBuf, "%5d", round(gPlayerStatus.pos.y)); + dx_debug_draw_ascii_with_effect(fmtBuf, DefaultColor, 80, BottomRowY, effect); + + sprintf(fmtBuf, "%5d", round(gPlayerStatus.pos.z)); + dx_debug_draw_ascii_with_effect(fmtBuf, DefaultColor, 112, BottomRowY, effect); + + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_GOD_MODE)) { + dx_debug_draw_ascii("(GOD MODE)", MSG_PAL_YELLOW, 151, BottomRowY); + } + } else { + s32 areaID = (LastBattleID >> 24) & 0xFF; + s32 battleID = (LastBattleID >> 16) & 0xFF; + s32 stageID = LastBattleID & 0xFFFF; + + sprintf(fmtBuf, "Battle: %02X-%02X (%X)", areaID, battleID, stageID); + dx_debug_draw_ascii(fmtBuf, DefaultColor, 200, BottomRowY); + + sprintf(fmtBuf, "Stage: %-15s", LastStageName); + dx_debug_draw_ascii(fmtBuf, DefaultColor, 20, BottomRowY); + + if (dx_debug_is_cheat_enabled(DEBUG_CHEAT_GOD_MODE)) { + dx_debug_draw_ascii("(GOD MODE)", MSG_PAL_YELLOW, 128, BottomRowY); + } + } +} + +// ---------------------------------------------------------------------------- +// console printing + +#define DEBUG_CONSOLE_DEFAULT_TIMELEFT 60 +#define DEBUG_CONSOLE_MSG_BUF_SIZE 85 + +typedef struct DebugConsoleLine { + u32 hash; + s32 timeLeft; + u8 buf[DEBUG_CONSOLE_MSG_BUF_SIZE]; +} DebugConsoleLine; + +DebugConsoleLine DebugConsoleLine0 = { 0 }; +DebugConsoleLine DebugConsoleLine1 = { 0 }; +DebugConsoleLine DebugConsoleLine2 = { 0 }; +DebugConsoleLine DebugConsoleLine3 = { 0 }; +DebugConsoleLine DebugConsoleLine4 = { 0 }; +DebugConsoleLine DebugConsoleLine5 = { 0 }; +DebugConsoleLine DebugConsoleLine6 = { 0 }; +DebugConsoleLine DebugConsoleLine7 = { 0 }; + +DebugConsoleLine *DebugConsole[8] = { + &DebugConsoleLine0, + &DebugConsoleLine1, + &DebugConsoleLine2, + &DebugConsoleLine3, + &DebugConsoleLine4, + &DebugConsoleLine5, + &DebugConsoleLine6, + &DebugConsoleLine7, +}; + +u32 dx_debug_hash_location(char* filename, s32 line) { + u32 hash = 5381; + s32 c; + + while (c = *filename++) { + hash = ((hash << 5) + hash) + c; + } + + hash = ((hash << 5) + hash) + line; + + return hash; +} + +static char *proutSprintf(char *dst, const char *src, size_t count) { + return (char *)memcpy((u8 *)dst, (u8 *)src, count) + count; +} + +void dx_hashed_debug_printf(char* filename, s32 line, char* fmt, ...) { + char fmtBuf[128]; + va_list args; + va_start(args, fmt); + s32 len = _Printf(&proutSprintf, fmtBuf, fmt, args); + if (len >= 0) { + fmtBuf[len] = 0; + } + ASSERT(len < 85); + + // Also print to serial + _Printf(is_debug_print, NULL, fmt, args); + + u32 hash = dx_debug_hash_location(filename, line); + s32 matchedLine = -1; + s32 idx; + + // find a line with the matching hash + for (idx = 0; idx < ARRAY_COUNT(DebugConsole); idx++) { + if (DebugConsole[idx]->hash == hash) { + matchedLine = idx; + break; + } + } + + // find the oldest line + if (matchedLine == -1) { + s32 minTimeLeft = DEBUG_CONSOLE_DEFAULT_TIMELEFT; + + for (idx = 0; idx < ARRAY_COUNT(DebugConsole); idx++) { + if (DebugConsole[idx]->timeLeft == 0) { + matchedLine = idx; + break; + } + if (DebugConsole[idx]->timeLeft < minTimeLeft) { + minTimeLeft = DebugConsole[idx]->timeLeft; + matchedLine = idx; + } + } + } + + // update the ConsoleLine entry + if (matchedLine != -1) { + DebugConsole[matchedLine]->buf[0] = MSG_CHAR_READ_FUNCTION; + DebugConsole[matchedLine]->buf[1] = MSG_READ_FUNC_SIZE; + DebugConsole[matchedLine]->buf[2] = 12; + DebugConsole[matchedLine]->buf[3] = 12; + + dx_string_to_msg(&DebugConsole[matchedLine]->buf[4], fmtBuf); + + DebugConsole[matchedLine]->hash = hash; + DebugConsole[matchedLine]->timeLeft = DEBUG_CONSOLE_DEFAULT_TIMELEFT; + } +} + +API_CALLABLE(_dxDebugIntPrintf) { + Bytecode* args = script->ptrReadPos; + s32 i[8]; + s32 nargs = 0; + s32 idx; + + char* filename = *args++; + s32 line = *args++; + char* fmt = *args++; + + for (idx = 0; idx < 8; idx++) { + s32 var = *args++; + if (var == 0) { + break; + } + i[idx] = evt_get_variable(script, var); + nargs++; + } + + switch (nargs) { + case 0: dx_hashed_debug_printf(filename, line, fmt); break; + case 1: dx_hashed_debug_printf(filename, line, fmt, i[0]); break; + case 2: dx_hashed_debug_printf(filename, line, fmt, i[0], i[1]); break; + case 3: dx_hashed_debug_printf(filename, line, fmt, i[0], i[1], i[2]); break; + case 4: dx_hashed_debug_printf(filename, line, fmt, i[0], i[1], i[2], i[3]); break; + case 5: dx_hashed_debug_printf(filename, line, fmt, i[0], i[1], i[2], i[3], i[4]); break; + case 6: dx_hashed_debug_printf(filename, line, fmt, i[0], i[1], i[2], i[3], i[4], i[5]); break; + case 7: dx_hashed_debug_printf(filename, line, fmt, i[0], i[1], i[2], i[3], i[4], i[5], i[6]); break; + } + + return ApiStatus_DONE2; +} + +API_CALLABLE(_dxDebugFloatPrintf) { + Bytecode* args = script->ptrReadPos; + f32 f[8]; + s32 nargs = 0; + s32 idx; + + char* filename = *args++; + s32 line = *args++; + char* fmt = *args++; + + for (idx = 0; idx < 8; idx++) { + s32 var = *args++; + if (var == 0) { + break; + } + f[idx] = evt_get_float_variable(script, var); + nargs++; + } + + switch (nargs) { + case 0: dx_hashed_debug_printf(filename, line, fmt); break; + case 1: dx_hashed_debug_printf(filename, line, fmt, f[0]); break; + case 2: dx_hashed_debug_printf(filename, line, fmt, f[0], f[1]); break; + case 3: dx_hashed_debug_printf(filename, line, fmt, f[0], f[1], f[2]); break; + case 4: dx_hashed_debug_printf(filename, line, fmt, f[0], f[1], f[2], f[3]); break; + case 5: dx_hashed_debug_printf(filename, line, fmt, f[0], f[1], f[2], f[3], f[4]); break; + case 6: dx_hashed_debug_printf(filename, line, fmt, f[0], f[1], f[2], f[3], f[4], f[5]); break; + case 7: dx_hashed_debug_printf(filename, line, fmt, f[0], f[1], f[2], f[3], f[4], f[5], f[6]); break; + } + + return ApiStatus_DONE2; +} + +void dx_debug_console_main() { + DebugConsoleLine* temp; + s32 idx; + +#define LESS(i, j) DebugConsole[i]->timeLeft > DebugConsole[j]->timeLeft +#define SWAP(i, j) temp = DebugConsole[i], DebugConsole[i] = DebugConsole[j], DebugConsole[j] = temp + QSORT(ARRAY_COUNT(DebugConsole), LESS, SWAP); + + for (idx = 0; idx < ARRAY_COUNT(DebugConsole); idx++) { + s32 timeLeft = DebugConsole[idx]->timeLeft; + + if (timeLeft > 0) { + s32 alpha = 254; + if (timeLeft < 20) { + alpha = round(254 * (timeLeft / 20.0f)); + } + + draw_msg(DebugConsole[idx]->buf, 32, 200 - 15 * idx, alpha, DefaultColor, 0); + DebugConsole[idx]->timeLeft--; + } + } +} + +#endif diff --git a/src/dx/debug_menu.h b/src/dx/debug_menu.h new file mode 100644 index 00000000000..e857297215e --- /dev/null +++ b/src/dx/debug_menu.h @@ -0,0 +1,71 @@ +#include "common.h" +#include "dx/config.h" +#if DX_DEBUG_MENU || defined(DX_QUICK_LAUNCH_BATTLE) + +#define DX_DEBUG_DUMMY_ID 0xDEAD + +typedef enum DebugCheat { + DEBUG_CHEAT_GOD_MODE, + DEBUG_CHEAT_SPEED_MODE, +// DEBUG_CHEAT_FLY, + DEBUG_CHEAT_IGNORE_WALLS, + DEBUG_CHEAT_HIGH_JUMP, +} DebugCheat; + +void dx_debug_menu_main(); +void dx_debug_console_main(); +void dx_debug_draw_collision(); + +b32 dx_debug_menu_is_open(); +b32 dx_debug_should_hide_models(); +b32 dx_debug_is_cheat_enabled(DebugCheat cheat); + +void dx_debug_set_map_info(char* mapName, s32 entryID); +void dx_debug_set_battle_info(s32 battleID, char* stageName); + +void dx_debug_begin_battle_with_IDs(s16 battle, s16 stage); + +#define debug_print(text) dx_hashed_debug_printf(__FILE__,__LINE__,text) +#define debug_printf(fmt, args...) dx_hashed_debug_printf(__FILE__,__LINE__,fmt,##args) + +#define DebugPrint(text) Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), 0) +#define DebugPrintf(args...) VFUNC(DebugPrintf, args) +#define DebugFloatPrintf(args...) VFUNC(DebugFloatPrintf, args) + +API_CALLABLE(_dxDebugIntPrintf); +#define DebugPrintf1(text) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), 0, 0, 0, 0, 0, 0, 0) +#define DebugPrintf2(text, a) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), a, 0, 0, 0, 0, 0, 0) +#define DebugPrintf3(text, a, b) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, 0, 0, 0, 0, 0) +#define DebugPrintf4(text, a, b, c) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, 0, 0, 0, 0) +#define DebugPrintf5(text, a, b, c, d) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, 0, 0, 0) +#define DebugPrintf6(text, a, b, c, d, e) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, e, 0, 0) +#define DebugPrintf7(text, a, b, c, d, e, f) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, e, f, 0) +#define DebugPrintf8(text, a, b, c, d, e, f, g) \ + Call(_dxDebugIntPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, e, f, g) + +API_CALLABLE(_dxDebugFloatPrintf); +#define DebugFloatPrintf1(text) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), 0, 0, 0, 0, 0, 0, 0) +#define DebugFloatPrintf2(text, a) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), a, 0, 0, 0, 0, 0, 0) +#define DebugFloatPrintf3(text, a, b) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, 0, 0, 0, 0, 0) +#define DebugFloatPrintf4(text, a, b, c) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, 0, 0, 0, 0) +#define DebugFloatPrintf5(text, a, b, c, d) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, 0, 0, 0) +#define DebugFloatPrintf6(text, a, b, c, d, e) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, e, 0, 0) +#define DebugFloatPrintf7(text, a, b, c, d, e, f) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, e, f, 0) +#define DebugFloatPrintf8(text, a, b, c, d, e, f, g) \ + Call(_dxDebugFloatPrintf, Ref(__FILE__), __LINE__, Ref(text), a, b, c, d, e, f, g) + +#endif diff --git a/src/dx/profiling.c b/src/dx/profiling.c new file mode 100644 index 00000000000..27c61980d86 --- /dev/null +++ b/src/dx/profiling.c @@ -0,0 +1,432 @@ +// Stolen from HackerSM64 + +#include "profiling.h" +#include "dx/utils.h" +#include "game_modes.h" + +#ifdef USE_PROFILER + +#define RDP_CYCLE_CONV(x) ((10 * (x)) / 625) // 62.5 million cycles per frame + +ProfileTimeData all_profiling_data[PROFILER_TIME_COUNT]; + +int profile_buffer_index = -1; +int rsp_buffer_indices[PROFILER_RSP_COUNT]; +// Holds either the start time if the task is running, or the amount of time the task has run for so far if yielded +u32 rsp_pending_times[PROFILER_RSP_COUNT]; +u32 prev_start; +u32 cur_start; +u32 prev_time; +u32 gfx_start; +u32 gfx_buffer_index; +u32 audio_start; +u32 audio_buffer_index; +u32 preempted_time; +u32 collision_time = 0; + +#ifdef GFX_PROFILING +u32 gfx_subset_starts[GFX_SUBSET_SIZE]; +u32 gfx_subset_tallies[GFX_SUBSET_SIZE]; +#endif +#ifdef AUDIO_PROFILING +u32 audio_subset_starts[AUDIO_SUBSET_SIZE]; +u32 audio_subset_tallies[AUDIO_SUBSET_SIZE]; +#endif + +static void buffer_update(ProfileTimeData* data, u32 new, int buffer_index) { + u32 old = data->counts[buffer_index]; + data->total -= old; + data->total += new; + data->counts[buffer_index] = new; +} + +void profiler_update(enum ProfilerTime which, u32 delta) { + u32 cur_time = osGetCount(); + u32 diff; + ProfileTimeData* cur_data = &all_profiling_data[which]; + + diff = cur_time - prev_time - delta; + + u32 saved = __osDisableInt(); + u32 cur_preempted_time = preempted_time; + preempted_time = 0; + __osRestoreInt(saved); + if (cur_preempted_time > 0) { + diff -= cur_preempted_time; + cur_start += cur_preempted_time; + } + + buffer_update(cur_data, diff, profile_buffer_index); + prev_time = cur_time; +} + +void profiler_rsp_started(enum ProfilerRSPTime which) { + rsp_pending_times[which] = osGetCount(); +} + +void profiler_rsp_completed(enum ProfilerRSPTime which) { + ProfileTimeData* cur_data = &all_profiling_data[PROFILER_TIME_RSP_GFX + which]; + int cur_index = rsp_buffer_indices[which]; + u32 time = osGetCount() - rsp_pending_times[which]; + rsp_pending_times[which] = 0; + + buffer_update(cur_data, time, cur_index); + cur_index++; + if (cur_index >= PROFILING_BUFFER_SIZE) { + cur_index = 0; + } + rsp_buffer_indices[which] = cur_index; +} + +void profiler_rsp_resumed() { + rsp_pending_times[PROFILER_RSP_GFX] = osGetCount() - rsp_pending_times[PROFILER_RSP_GFX]; +} + +// This ends up being the same math as resumed, so we just use resumed for both +// void profiler_rsp_yielded() { +// rsp_pending_times[PROFILER_RSP_GFX] = osGetCount() - rsp_pending_times[PROFILER_RSP_GFX]; +// } + +void profiler_gfx_started() { + gfx_start = osGetCount(); + +#ifdef GFX_PROFILING + for (s32 i = 0; i < GFX_SUBSET_SIZE; i++) { + gfx_subset_tallies[i] = 0; + } + + gfx_subset_starts[PROFILER_TIME_SUB_GFX_UPDATE - PROFILER_TIME_SUB_GFX_START] = gfx_start; +#endif +} + +void profiler_audio_started() { + audio_start = osGetCount(); + +#ifdef AUDIO_PROFILING + for (s32 i = 0; i < AUDIO_SUBSET_SIZE; i++) { + audio_subset_tallies[i] = 0; + } + + audio_subset_starts[PROFILER_TIME_SUB_AUDIO_UPDATE - PROFILER_TIME_SUB_AUDIO_START] = audio_start; +#endif +} + +#ifdef PUPPYPRINT_DEBUG + +void profiler_collision_reset() { + collision_time = 0; +} + +void profiler_collision_update(u32 time) { + collision_time += osGetCount() - time; +} + +void profiler_collision_completed() { + ProfileTimeData* cur_data = &all_profiling_data[PROFILER_TIME_COLLISION]; + buffer_update(cur_data, collision_time, profile_buffer_index); +} + +#endif + +u32 profiler_get_delta(enum ProfilerDeltaTime which) { + if (which == PROFILER_DELTA_COLLISION) { + return collision_time; + } else { + return 0; + } +} + +void profiler_gfx_completed() { + ProfileTimeData* cur_data = &all_profiling_data[PROFILER_TIME_GFX]; + u32 time = osGetCount(); + u32 cur_index = gfx_buffer_index; + + preempted_time = time - gfx_start; + buffer_update(cur_data, time - gfx_start, cur_index); + +#ifdef GFX_PROFILING + gfx_subset_tallies[PROFILER_TIME_SUB_GFX_UPDATE - PROFILER_TIME_SUB_GFX_START] += time - gfx_subset_starts[PROFILER_TIME_SUB_GFX_UPDATE - PROFILER_TIME_SUB_GFX_START]; + + for (s32 i = 0; i < GFX_SUBSET_SIZE; i++) { + cur_data = &all_profiling_data[i + PROFILER_TIME_SUB_GFX_START]; + buffer_update(cur_data, gfx_subset_tallies[i], cur_index); + } +#endif + + cur_index++; + if (cur_index >= PROFILING_BUFFER_SIZE) { + cur_index = 0; + } + + gfx_buffer_index = cur_index; +} + + +void profiler_audio_completed() { + ProfileTimeData* cur_data = &all_profiling_data[PROFILER_TIME_AUDIO]; + u32 time = osGetCount(); + u32 cur_index = audio_buffer_index; + + preempted_time = time - audio_start; + buffer_update(cur_data, time - audio_start, cur_index); + +#ifdef AUDIO_PROFILING + audio_subset_tallies[PROFILER_TIME_SUB_AUDIO_UPDATE - PROFILER_TIME_SUB_AUDIO_START] += time - audio_subset_starts[PROFILER_TIME_SUB_AUDIO_UPDATE - PROFILER_TIME_SUB_AUDIO_START]; + + for (s32 i = 0; i < AUDIO_SUBSET_SIZE; i++) { + cur_data = &all_profiling_data[i + PROFILER_TIME_SUB_AUDIO_START]; + buffer_update(cur_data, audio_subset_tallies[i], cur_index); + } +#endif + + cur_index++; + if (cur_index >= PROFILING_BUFFER_SIZE) { + cur_index = 0; + } + + audio_buffer_index = cur_index; +} + +static void update_fps_timer() { + u32 diff = cur_start - prev_start; + + buffer_update(&all_profiling_data[PROFILER_TIME_FPS], diff, profile_buffer_index); + prev_start = cur_start; +} + +static void update_total_timer() { + u32 saved = __osDisableInt(); + u32 cur_preempted_time = preempted_time; + preempted_time = 0; + __osRestoreInt(saved); + + prev_time = cur_start + cur_preempted_time; + profiler_update(PROFILER_TIME_TOTAL, PROFILER_TIME_PUPPYPRINT1 + PROFILER_DELTA_PUPPYPRINT2); +} + +#ifdef PUPPYPRINT_DEBUG +extern u8 sPPDebugPage; +extern u8 fDebug; +#endif + +static void update_rdp_timers() { + u32 tmem = IO_READ(DPC_TMEM_REG); + u32 cmd = IO_READ(DPC_BUFBUSY_REG); + u32 pipe = IO_READ(DPC_PIPEBUSY_REG); + + if (gGameStatus.frameCounter > 5) { + IO_WRITE(DPC_STATUS_REG, (DPC_CLR_CLOCK_CTR | DPC_CLR_CMD_CTR | DPC_CLR_PIPE_CTR | DPC_CLR_TMEM_CTR)); + } + + buffer_update(&all_profiling_data[PROFILER_TIME_TMEM], tmem, profile_buffer_index); + buffer_update(&all_profiling_data[PROFILER_TIME_CMD], cmd, profile_buffer_index); + buffer_update(&all_profiling_data[PROFILER_TIME_PIPE], pipe, profile_buffer_index); +} + +float profiler_get_fps() { + return (1000000.0f * PROFILING_BUFFER_SIZE) / (OS_CYCLES_TO_USEC(all_profiling_data[PROFILER_TIME_FPS].total)); +} + +u32 profiler_get_cpu_cycles() { + u32 cpu_normal_time = all_profiling_data[PROFILER_TIME_TOTAL].total / PROFILING_BUFFER_SIZE; + u32 cpu_audio_time = all_profiling_data[PROFILER_TIME_AUDIO].total / PROFILING_BUFFER_SIZE; + return cpu_normal_time + cpu_audio_time * 2; +} + +u32 profiler_get_rsp_cycles() { + u32 rsp_graphics_time = all_profiling_data[PROFILER_TIME_RSP_GFX].total / PROFILING_BUFFER_SIZE; + u32 rsp_audio_time = all_profiling_data[PROFILER_TIME_RSP_AUDIO].total / PROFILING_BUFFER_SIZE; + return rsp_graphics_time + rsp_audio_time; +} + +u32 profiler_get_rdp_cycles() { + u32 rdp_pipe_cycles = all_profiling_data[PROFILER_TIME_PIPE].total; + u32 rdp_tmem_cycles = all_profiling_data[PROFILER_TIME_TMEM].total; + u32 rdp_cmd_cycles = all_profiling_data[PROFILER_TIME_CMD].total; + + u32 rdp_max_cycles = MAX(MAX(rdp_pipe_cycles, rdp_tmem_cycles), rdp_cmd_cycles); + + return rdp_max_cycles / PROFILING_BUFFER_SIZE; +} + +u32 profiler_get_cpu_microseconds() { + u32 cpu_normal_time = OS_CYCLES_TO_USEC(all_profiling_data[PROFILER_TIME_TOTAL].total / PROFILING_BUFFER_SIZE); + u32 cpu_audio_time = OS_CYCLES_TO_USEC(all_profiling_data[PROFILER_TIME_AUDIO].total / PROFILING_BUFFER_SIZE); + return cpu_normal_time + cpu_audio_time * 2; +} + +u32 profiler_get_rsp_microseconds() { + u32 rsp_graphics_time = OS_CYCLES_TO_USEC(all_profiling_data[PROFILER_TIME_RSP_GFX].total / PROFILING_BUFFER_SIZE); + u32 rsp_audio_time = OS_CYCLES_TO_USEC(all_profiling_data[PROFILER_TIME_RSP_AUDIO].total / PROFILING_BUFFER_SIZE); + return rsp_graphics_time + rsp_audio_time; +} + +u32 profiler_get_rdp_microseconds() { + u32 rdp_pipe_cycles = all_profiling_data[PROFILER_TIME_PIPE].total; + u32 rdp_tmem_cycles = all_profiling_data[PROFILER_TIME_TMEM].total; + u32 rdp_cmd_cycles = all_profiling_data[PROFILER_TIME_CMD].total; + + u32 rdp_max_cycles = MAX(MAX(rdp_pipe_cycles, rdp_tmem_cycles), rdp_cmd_cycles); + + return RDP_CYCLE_CONV(rdp_max_cycles / PROFILING_BUFFER_SIZE); +} + +void profiler_print_times() { + u32 microseconds[PROFILER_TIME_COUNT]; + char text_buffer[196]; + + update_fps_timer(); + update_total_timer(); + update_rdp_timers(); + +#ifndef PUPPYPRINT_DEBUG + static u8 show_profiler = 0; + if ((gPlayerStatus.pressedButtons & (L_TRIG | U_JPAD)) && (gPlayerStatus.curButtons & L_TRIG) && (gPlayerStatus.curButtons & U_JPAD)) { + show_profiler ^= 1; + } +#endif + +#ifdef PUPPYPRINT_DEBUG + if (fDebug && sPPDebugPage == PUPPYPRINT_PAGE_PROFILER) { +#else + if (show_profiler) { +#endif + for (int i = 0; i < PROFILER_TIME_COUNT; i++) { + if (i < PROFILER_TIME_TMEM) { + microseconds[i] = OS_CYCLES_TO_USEC(all_profiling_data[i].total / PROFILING_BUFFER_SIZE); + } else { + microseconds[i] = RDP_CYCLE_CONV(all_profiling_data[i].total / PROFILING_BUFFER_SIZE); + } + } + + // audio time is removed from the main thread profiling, so add it back here + u32 total_cpu = microseconds[PROFILER_TIME_TOTAL] + microseconds[PROFILER_TIME_AUDIO] * 2; + u32 total_rsp = microseconds[PROFILER_TIME_RSP_GFX] + microseconds[PROFILER_TIME_RSP_AUDIO] * 2; + u32 max_rdp = MAX(MAX(microseconds[PROFILER_TIME_TMEM], microseconds[PROFILER_TIME_CMD]), microseconds[PROFILER_TIME_PIPE]); + + s32 text_buffer_len = sprintf(text_buffer, + " " // space for prepend + "FPS: %5.2f\n" + "CPU\t\t%d (%d%%)\n" + " Input\t\t%d\n" + " Workers\t\t%d\n" + " Triggers\t\t\t%d\n" + " EVT\t\t%d\n" + " Messages\t\t%d\n" + " HUD elements\t\t\t%d\n" + " Entities\t\t%d\n" + " Gfx\t\t\t%d\n" + " Audio\t\t\t%d\n", + 1000000.0f / microseconds[PROFILER_TIME_FPS], + total_cpu, total_cpu / 333, + microseconds[PROFILER_TIME_CONTROLLERS], + microseconds[PROFILER_TIME_WORKERS], + microseconds[PROFILER_TIME_TRIGGERS], + microseconds[PROFILER_TIME_EVT], + microseconds[PROFILER_TIME_MESSAGES], + microseconds[PROFILER_TIME_HUD_ELEMENTS], + microseconds[PROFILER_TIME_ENTITIES], + microseconds[PROFILER_TIME_GFX], + microseconds[PROFILER_TIME_AUDIO] * 2 // audio is 60Hz, so double the average + ); + + switch (get_game_mode()) { + case GAME_MODE_WORLD: + sprintf(&text_buffer[text_buffer_len], + " Encounters %d\n" + " NPCs %d\n" + " Player %d\n" + " Item entities %d\n" + " Effects %d\n" + " Cameras %d\n", + microseconds[PROFILE_TIME_WORLD_ENCOUNTERS], + microseconds[PROFILE_TIME_WORLD_NPCS], + microseconds[PROFILE_TIME_WORLD_PLAYER], + microseconds[PROFILE_TIME_WORLD_ITEM_ENTITIES], + microseconds[PROFILE_TIME_WORLD_EFFECTS], + microseconds[PROFILE_TIME_WORLD_CAMERAS] + ); + break; + default: + sprintf(&text_buffer[text_buffer_len], + " Game mode step %d\n", + microseconds[PROFILER_TIME_STEP_GAME_MODE] + ); + break; + } + + dx_string_to_msg(&text_buffer, &text_buffer); + text_buffer[0] = MSG_CHAR_READ_FUNCTION; + text_buffer[1] = MSG_READ_FUNC_SIZE; + text_buffer[2] = 14; + text_buffer[3] = 14; + draw_msg((s32)&text_buffer, 3, 0, 255, 0, 0); + +#ifdef GFX_PROFILING + sprintf(text_buffer, + " " // space for prepend + "\n" + "Gfx breakdown\n" + " Entities\t\t\t%d\n" + " Models\t\t\t%d\n" + " Player\t\t\t%d\n" + " Workers\t\t\t%d\n" + " NPCs\t\t\t%d\n" + " Effects\t\t\t%d\n" + " Render tasks\t\t\t%d\n" + " Hud elements\t\t\t%d\n" + " Back UI\t\t\t%d\n" + " Front UI\t\t\t%d\n", + microseconds[PROFILER_TIME_SUB_GFX_ENTITIES], + microseconds[PROFILER_TIME_SUB_GFX_MODELS], + microseconds[PROFILER_TIME_SUB_GFX_PLAYER], + microseconds[PROFILER_TIME_SUB_GFX_WORKERS], + microseconds[PROFILER_TIME_SUB_GFX_NPCS], + microseconds[PROFILER_TIME_SUB_GFX_EFFECTS], + microseconds[PROFILER_TIME_SUB_GFX_RENDER_TASKS], + microseconds[PROFILER_TIME_SUB_GFX_HUD_ELEMENTS], + microseconds[PROFILER_TIME_SUB_GFX_BACK_UI], + microseconds[PROFILER_TIME_SUB_GFX_FRONT_UI] + ); +#else + sprintf(text_buffer, + " " // space for prepend + "\n" + "RDP\t\t\t%d (%d%%)\n" + " Tmem\t\t\t%d\n" + " Cmd\t\t\t%d\n" + " Pipe\t\t\t%d\n" + "\n" + "RSP\t\t%d (%d%%)\n" + " Gfx\t\t\t%d\n" + " Audio\t\t\t%d\n", + max_rdp, max_rdp / 333, + microseconds[PROFILER_TIME_TMEM], + microseconds[PROFILER_TIME_CMD], + microseconds[PROFILER_TIME_PIPE], + total_rsp, total_rsp / 333, + microseconds[PROFILER_TIME_RSP_GFX], + microseconds[PROFILER_TIME_RSP_AUDIO] * 2 + ); +#endif + dx_string_to_msg(&text_buffer, &text_buffer); + text_buffer[0] = MSG_CHAR_READ_FUNCTION; + text_buffer[1] = MSG_READ_FUNC_SIZE; + text_buffer[2] = 14; + text_buffer[3] = 14; + draw_msg((s32)&text_buffer, SCREEN_WIDTH/2, 0, 255, 0, 0); + } +} + +void profiler_frame_setup() { + profile_buffer_index++; + preempted_time = 0; + + if (profile_buffer_index >= PROFILING_BUFFER_SIZE) { + profile_buffer_index = 0; + } + + prev_time = cur_start = osGetCount(); +} + +#endif diff --git a/src/dx/profiling.h b/src/dx/profiling.h new file mode 100644 index 00000000000..7066f43e4f2 --- /dev/null +++ b/src/dx/profiling.h @@ -0,0 +1,287 @@ +// Stolen from HackerSM64 + +#ifndef __PROFILING_H__ +#define __PROFILING_H__ + +#include "common.h" +#include "dx/config.h" + +#if defined(USE_PROFILER) && defined(PUPPYPRINT_DEBUG) +/** + * Toggle this define to enable verbose audio profiling with Pupprprint Debug. +*/ +#define AUDIO_PROFILING +#endif + +/// Toggle this define to enable verbose graphics profiling. +#define GFX_PROFILING + +#define OS_GET_COUNT_INLINE(x) asm volatile("mfc0 %0, $9" : "=r"(x): ) + +#define PROFILING_BUFFER_SIZE 64 + +#define AUDIO_SUBSET_ENTRIES \ + PROFILER_TIME_SUB_AUDIO_START, \ + PROFILER_TIME_SUB_AUDIO_SEQUENCES = PROFILER_TIME_SUB_AUDIO_START, \ + PROFILER_TIME_SUB_AUDIO_SEQUENCES_SCRIPT, \ + PROFILER_TIME_SUB_AUDIO_SEQUENCES_RECLAIM, \ + PROFILER_TIME_SUB_AUDIO_SEQUENCES_PROCESSING, \ + PROFILER_TIME_SUB_AUDIO_SYNTHESIS, \ + PROFILER_TIME_SUB_AUDIO_SYNTHESIS_PROCESSING, \ + PROFILER_TIME_SUB_AUDIO_SYNTHESIS_ENVELOPE_REVERB, \ + PROFILER_TIME_SUB_AUDIO_SYNTHESIS_DMA, \ + PROFILER_TIME_SUB_AUDIO_UPDATE, \ + PROFILER_TIME_SUB_AUDIO_END + +#define GFX_SUBSET_ENTRIES \ + PROFILER_TIME_SUB_GFX_START, \ + PROFILER_TIME_SUB_GFX_UPDATE, \ + PROFILER_TIME_SUB_GFX__DUMMY, /* fixes entities for some reason */ \ + PROFILER_TIME_SUB_GFX_ENTITIES, \ + PROFILER_TIME_SUB_GFX_MODELS, \ + PROFILER_TIME_SUB_GFX_PLAYER, \ + PROFILER_TIME_SUB_GFX_NPCS, \ + PROFILER_TIME_SUB_GFX_WORKERS, \ + PROFILER_TIME_SUB_GFX_EFFECTS, \ + PROFILER_TIME_SUB_GFX_RENDER_TASKS, \ + PROFILER_TIME_SUB_GFX_HUD_ELEMENTS, \ + PROFILER_TIME_SUB_GFX_BACK_UI, \ + PROFILER_TIME_SUB_GFX_FRONT_UI, \ + PROFILER_TIME_SUB_GFX_END + +enum ProfilerTime { + PROFILER_TIME_FPS, + PROFILER_TIME_CONTROLLERS, + PROFILER_TIME_WORKERS, + PROFILER_TIME_TRIGGERS, + PROFILER_TIME_EVT, + PROFILER_TIME_MESSAGES, + PROFILER_TIME_HUD_ELEMENTS, + PROFILER_TIME_STEP_GAME_MODE, + PROFILER_TIME_ENTITIES, +#ifdef PUPPYPRINT_DEBUG + PROFILER_TIME_PUPPYPRINT1, + PROFILER_TIME_PUPPYPRINT2, +#endif +#ifdef GFX_PROFILING + GFX_SUBSET_ENTRIES, + PROFILER_TIME_GFX = PROFILER_TIME_SUB_GFX_END, +#else + PROFILER_TIME_GFX, +#endif +#ifdef AUDIO_PROFILING + AUDIO_SUBSET_ENTRIES, + + PROFILER_TIME_AUDIO = PROFILER_TIME_SUB_AUDIO_END, +#else + PROFILER_TIME_AUDIO, +#endif + PROFILER_TIME_TOTAL, + PROFILER_TIME_RSP_GFX, + PROFILER_TIME_RSP_AUDIO, + PROFILER_TIME_TMEM, + PROFILER_TIME_PIPE, + PROFILER_TIME_CMD, + + // state_world + PROFILE_TIME_WORLD_ENCOUNTERS, + PROFILE_TIME_WORLD_NPCS, + PROFILE_TIME_WORLD_PLAYER, + PROFILE_TIME_WORLD_ITEM_ENTITIES, + PROFILE_TIME_WORLD_EFFECTS, + PROFILE_TIME_WORLD_CAMERAS, + + PROFILER_TIME_COUNT // Must be last! +}; + +enum ProfilerRSPTime { + PROFILER_RSP_GFX, + PROFILER_RSP_AUDIO, + PROFILER_RSP_COUNT +}; + +enum ProfilerDeltaTime { + PROFILER_DELTA_COLLISION, +#ifdef PUPPYPRINT_DEBUG + PROFILER_DELTA_PUPPYPRINT1, + PROFILER_DELTA_PUPPYPRINT2 +#endif +}; + +#ifndef PUPPYPRINT_DEBUG +#define PROFILER_TIME_PUPPYPRINT1 0 +#define PROFILER_TIME_PUPPYPRINT2 0 +#define PROFILER_DELTA_PUPPYPRINT1 0 +#define PROFILER_DELTA_PUPPYPRINT2 0 +#endif + +#ifdef USE_PROFILER +typedef struct { + u32 counts[PROFILING_BUFFER_SIZE]; + u32 total; +} ProfileTimeData; +extern ProfileTimeData all_profiling_data[PROFILER_TIME_COUNT]; + +void profiler_update(enum ProfilerTime which, u32 delta); +void profiler_print_times(); +void profiler_frame_setup(); +void profiler_rsp_started(enum ProfilerRSPTime which); +void profiler_rsp_completed(enum ProfilerRSPTime which); +void profiler_rsp_resumed(); +void profiler_gfx_started(); +void profiler_gfx_completed(); +void profiler_audio_started(); +void profiler_audio_completed(); +#ifdef PUPPYPRINT_DEBUG +void profiler_collision_reset(); +void profiler_collision_completed(); +void profiler_collision_update(u32 time); +#else +#define profiler_collision_reset() +#define profiler_collision_completed() +#define profiler_collision_update(time) +#endif +u32 profiler_get_delta(enum ProfilerDeltaTime which); +u32 profiler_get_cpu_microseconds(); +u32 profiler_get_rsp_microseconds(); +u32 profiler_get_rdp_microseconds(); +// See profiling.c to see why profiler_rsp_yielded isn't its own function +static ALWAYS_INLINE void profiler_rsp_yielded() { + profiler_rsp_resumed(); +#define PROFILER_GET_SNAPSHOT() u32 first = osGetCount() +#define PROFILER_GET_SNAPSHOT_TYPE(type) u32 first = profiler_get_delta(type) +} +#else +#define PROFILER_GET_SNAPSHOT() +#define PROFILER_GET_SNAPSHOT_TYPE(type) +#define profiler_update(which, delta) +#define profiler_print_times() +#define profiler_frame_setup() +#define profiler_rsp_started(which) +#define profiler_rsp_completed(which) +#define profiler_rsp_resumed() +#define profiler_audio_started() +#define profiler_audio_completed() +#define profiler_rsp_yielded() +#define profiler_collision_reset() +#define profiler_collision_completed() +#define profiler_collision_update(time) +#define profiler_get_delta(which) 0 +#define profiler_get_cpu_microseconds() 0 +#define profiler_get_rsp_microseconds() 0 +#define profiler_get_rdp_microseconds() 0 +#endif + +#ifdef GFX_PROFILING +#define GFX_SUBSET_SIZE PROFILER_TIME_SUB_GFX_END - PROFILER_TIME_SUB_GFX_START +extern u32 gfx_subset_starts[GFX_SUBSET_SIZE]; +extern u32 gfx_subset_tallies[GFX_SUBSET_SIZE]; + +static ALWAYS_INLINE void profiler_gfx_subset_switch_func(enum ProfilerTime complete, enum ProfilerTime start) { + u32 time; + OS_GET_COUNT_INLINE(time); + + gfx_subset_tallies[complete] += time - gfx_subset_starts[complete]; + gfx_subset_starts[start] = time; +} + +static ALWAYS_INLINE void profiler_gfx_subset_complete_and_switch_func(enum ProfilerTime complete1, enum ProfilerTime complete2, enum ProfilerTime start) { + u32 time; + OS_GET_COUNT_INLINE(time); + + gfx_subset_tallies[complete1] += time - gfx_subset_starts[complete1]; + gfx_subset_tallies[complete2] += time - gfx_subset_starts[complete2]; + gfx_subset_starts[start] = time; +} + +static ALWAYS_INLINE void profiler_gfx_subset_start_shared_func(enum ProfilerTime first, enum ProfilerTime new) { + gfx_subset_starts[new] = gfx_subset_starts[first]; +} + +static ALWAYS_INLINE void profiler_gfx_subset_start_func(enum ProfilerTime index) { + OS_GET_COUNT_INLINE(gfx_subset_starts[index]); +} + +static ALWAYS_INLINE void profiler_gfx_subset_complete_func(enum ProfilerTime index) { + u32 time; + OS_GET_COUNT_INLINE(time); + + gfx_subset_tallies[index] += time - gfx_subset_starts[index]; +} + +#define GFX_PROFILER_SWITCH(complete, begin) profiler_gfx_subset_switch_func(complete - PROFILER_TIME_SUB_GFX_START, begin - PROFILER_TIME_SUB_GFX_START) +#define GFX_PROFILER_COMPLETE_AND_SWITCH(complete1, complete2, begin) profiler_gfx_subset_complete_and_switch_func(complete1 - PROFILER_TIME_SUB_GFX_START, \ + complete2 - PROFILER_TIME_SUB_GFX_START, begin - PROFILER_TIME_SUB_GFX_START) +#define GFX_PROFILER_START_SHARED(first, new) profiler_gfx_subset_start_shared_func(first - PROFILER_TIME_SUB_GFX_START, new - PROFILER_TIME_SUB_GFX_START) +#define GFX_PROFILER_START(which) profiler_gfx_subset_start_func(which - PROFILER_TIME_SUB_GFX_START) +#define GFX_PROFILER_COMPLETE(which) profiler_gfx_subset_complete_func(which - PROFILER_TIME_SUB_GFX_START) +#else +enum ProfilerTimeGFXUnused { + GFX_SUBSET_ENTRIES +}; +#define GFX_PROFILER_SWITCH(complete, begin) +#define GFX_PROFILER_COMPLETE_AND_SWITCH(complete1, complete2, begin) +#define GFX_PROFILER_START_SHARED(first, new) +#define GFX_PROFILER_START(which) +#define GFX_PROFILER_COMPLETE(which) +#endif + +#ifdef AUDIO_PROFILING +#define AUDIO_SUBSET_SIZE PROFILER_TIME_SUB_AUDIO_END - PROFILER_TIME_SUB_AUDIO_START +extern u32 audio_subset_starts[AUDIO_SUBSET_SIZE]; +extern u32 audio_subset_tallies[AUDIO_SUBSET_SIZE]; + +static ALWAYS_INLINE void profiler_audio_subset_switch_func(enum ProfilerTime complete, enum ProfilerTime start) { + u32 time; + OS_GET_COUNT_INLINE(time); + + audio_subset_tallies[complete] += time - audio_subset_starts[complete]; + audio_subset_starts[start] = time; +} + +static ALWAYS_INLINE void profiler_audio_subset_complete_and_switch_func(enum ProfilerTime complete1, enum ProfilerTime complete2, enum ProfilerTime start) { + u32 time; + OS_GET_COUNT_INLINE(time); + + audio_subset_tallies[complete1] += time - audio_subset_starts[complete1]; + audio_subset_tallies[complete2] += time - audio_subset_starts[complete2]; + audio_subset_starts[start] = time; +} + +static ALWAYS_INLINE void profiler_audio_subset_start_shared_func(enum ProfilerTime first, enum ProfilerTime new) { + audio_subset_starts[new] = audio_subset_starts[first]; +} + +static ALWAYS_INLINE void profiler_audio_subset_start_func(enum ProfilerTime index) { + OS_GET_COUNT_INLINE(audio_subset_starts[index]); +} + +static ALWAYS_INLINE void profiler_audio_subset_complete_func(enum ProfilerTime index) { + u32 time; + OS_GET_COUNT_INLINE(time); + + audio_subset_tallies[index] += time - audio_subset_starts[index]; +} + +#define AUDIO_PROFILER_SWITCH(complete, begin) profiler_audio_subset_switch_func(complete - PROFILER_TIME_SUB_AUDIO_START, begin - PROFILER_TIME_SUB_AUDIO_START) +#define AUDIO_PROFILER_COMPLETE_AND_SWITCH(complete1, complete2, begin) profiler_audio_subset_complete_and_switch_func(complete1 - PROFILER_TIME_SUB_AUDIO_START, \ + complete2 - PROFILER_TIME_SUB_AUDIO_START, begin - PROFILER_TIME_SUB_AUDIO_START) +#define AUDIO_PROFILER_START_SHARED(first, new) profiler_audio_subset_start_shared_func(first - PROFILER_TIME_SUB_AUDIO_START, new - PROFILER_TIME_SUB_AUDIO_START) + +// These two are unused by the default audio profiler; left in for cases of manual profiling of smaller functions as needed +#define AUDIO_PROFILER_START(which) profiler_audio_subset_start_func(which - PROFILER_TIME_SUB_AUDIO_START) +#define AUDIO_PROFILER_COMPLETE(which) profiler_audio_subset_complete_func(which - PROFILER_TIME_SUB_AUDIO_START) +#else // AUDIO_PROFILING +enum ProfilerTimeAudioUnused { + AUDIO_SUBSET_ENTRIES +}; +#define AUDIO_PROFILER_SWITCH(complete, begin) +#define AUDIO_PROFILER_COMPLETE_AND_SWITCH(complete1, complete2, begin) +#define AUDIO_PROFILER_START_SHARED(first, new) + +// These two are unused by the default audio profiler; left in for cases of manual profiling of smaller functions as needed +#define AUDIO_PROFILER_START(which) +#define AUDIO_PROFILER_COMPLETE(which) +#endif // AUDIO_PROFILING + +#endif diff --git a/src/dx/utils.c b/src/dx/utils.c new file mode 100644 index 00000000000..235bac9e00e --- /dev/null +++ b/src/dx/utils.c @@ -0,0 +1,23 @@ +#include "dx/utils.h" + +u8 dx_ascii_char_to_msg(u8 in) { + switch (in) { + case '\0': return MSG_CHAR_READ_END; + case ' ': case '\t': return MSG_CHAR_READ_SPACE; + case '\n': return MSG_CHAR_READ_ENDL; + default: + if (in < 0x20) { + return MSG_CHAR_NOTE; + } + return in - 0x20; + } +} + +u8* dx_string_to_msg(u8* msg, const u8* str) { + while (*str) { + *msg++ = dx_ascii_char_to_msg(*str++); + } + + *msg = MSG_CHAR_READ_END; + return msg; +} diff --git a/src/dx/utils.h b/src/dx/utils.h new file mode 100644 index 00000000000..fd0ed3e8da4 --- /dev/null +++ b/src/dx/utils.h @@ -0,0 +1,5 @@ +#include "common.h" + +u8* dx_string_to_msg(u8* msg, const u8* str); + +u8 dx_ascii_char_to_msg(u8 in); diff --git a/src/dx/versioning.c b/src/dx/versioning.c new file mode 100644 index 00000000000..5abbcbcf8a8 --- /dev/null +++ b/src/dx/versioning.c @@ -0,0 +1,624 @@ +#include "dx/versioning.h" +#include "dx/config.h" +#include "gcc/string.h" +#include "dx/debug_menu.h" + +void ver_deserialize_vanilla_save(SaveData* save); + +/// Store current game data to gCurrentSaveFile +void fio_serialize_state() { + SaveData* saveData = &gCurrentSaveFile; + s32 i, j; + + saveData->player = gPlayerData; + + saveData->areaID = gGameStatus.areaID; + saveData->mapID = gGameStatus.mapID; + saveData->entryID = gGameStatus.entryID; + saveData->savePos.x = gGameStatus.savedPos.x; + saveData->savePos.y = gGameStatus.savedPos.y; + saveData->savePos.z = gGameStatus.savedPos.z; + + for (i = 0; i < ARRAY_COUNT(gCurrentEncounter.defeatFlags[0]); i++) { + for (j = 0; j < ARRAY_COUNT(gCurrentEncounter.defeatFlags); j++) { + saveData->enemyDefeatFlags[j][i] = gCurrentEncounter.defeatFlags[j][i]; + } + } + + saveData->debugEnemyContact = gGameStatus.debugEnemyContact; + saveData->debugUnused1 = gGameStatus.debugUnused1; + saveData->debugUnused2 = gGameStatus.debugUnused2; + saveData->musicEnabled = gGameStatus.musicEnabled; +} + +/// Load game data from gCurrentSaveFile +/// Performs version checking and supports potential migration between versions. +/// @returns TRUE if successful, FALSE otherwise +b32 fio_deserialize_state() { + SaveData* saveData = &gCurrentSaveFile; + + if (saveData->modName[0] == '\0') { + // normally a mod should not be able to load a normal Paper Mario save + // however, if you would like your mod to support this, remove these lines + debug_printf("Cannot load unmodded save"); + return FALSE; + + ver_deserialize_vanilla_save(saveData); + } else if (strcmp(saveData->modName, DX_MOD_NAME) != 0) { + // always prevent loading data from other mods + char error[0x40] = "Cannot load save from: "; + strcat(error, saveData->modName); + debug_printf(error); + return FALSE; + } else if (saveData->majorVersion != DX_MOD_VER_MAJOR) { + // handle breaking changes between major versions here + ver_deserialize_standard(saveData); + } else { + ver_deserialize_standard(saveData); + } + + gGameStatus.debugEnemyContact = DEBUG_CONTACT_NONE; + gGameStatus.debugUnused1 = FALSE; + gGameStatus.debugUnused2 = FALSE; + gGameStatus.musicEnabled = TRUE; + + return TRUE; +} + +/// Load save file data from a supported save version +/// Assumes no changes in the SaveData, PlayerData, or PartnerData structs and no remapped item IDs. +void ver_deserialize_standard() { + SaveData* saveData = &gCurrentSaveFile; + s32 i, j; + + // simply copy the saved player data + gPlayerData = saveData->player; + + // copy saved game status fields to GameStatus + gGameStatus.areaID = saveData->areaID; + gGameStatus.mapID = saveData->mapID; + gGameStatus.entryID = saveData->entryID; + gGameStatus.savedPos.x = saveData->savePos.x; + gGameStatus.savedPos.y = saveData->savePos.y; + gGameStatus.savedPos.z = saveData->savePos.z; + + // copy saved enemy defeat flags + for (i = 0; i < ARRAY_COUNT(gCurrentEncounter.defeatFlags[0]); i++) { + for (j = 0; j < ARRAY_COUNT(gCurrentEncounter.defeatFlags); j++) { + gCurrentEncounter.defeatFlags[j][i] = saveData->enemyDefeatFlags[j][i]; + } + } +} + +void ver_copy_s8_array(s8* dest, s8* src, s32 srcMax, s32 destMax) { + s32 i; + for (i = 0; i < srcMax; i++) { + dest[i] = src[i]; + } + for (; i < destMax; i++) { + dest[i] = 0; + } +} + +void ver_copy_s16_array(s16* dest, s16* src, s32 srcMax, s32 destMax) { + s32 i; + for (i = 0; i < srcMax; i++) { + dest[i] = src[i]; + } + for (; i < destMax; i++) { + dest[i] = 0; + } +} + +void ver_copy_s32_array(s32* dest, s32* src, s32 srcMax, s32 destMax) { + s32 i; + for (i = 0; i < srcMax; i++) { + dest[i] = src[i]; + } + for (; i < destMax; i++) { + dest[i] = 0; + } +} + +void ver_port_item_ids(s16* array, s16* mapping, s32 size, s32 mapMax) { + s32 i; + + for (i = 0; i < size; i++) { + s16 old = array[i]; + if (old < mapMax) { + array[i] = mapping[old]; + } else { + array[i] = ITEM_NONE; + } + } +} + +#define COPY_S8_ARRAY(new, old) ver_copy_s8_array(new, old, ARRAY_COUNT(old), ARRAY_COUNT(new)); +#define COPY_S16_ARRAY(new, old) ver_copy_s16_array(new, old, ARRAY_COUNT(old), ARRAY_COUNT(new)); +#define COPY_S32_ARRAY(new, old) ver_copy_s32_array(new, old, ARRAY_COUNT(old), ARRAY_COUNT(new)); + +#define PORT_ITEM_IDS(array, map) ver_copy_s32_array(array, map, ARRAY_COUNT(array), ARRAY_COUNT(map)); + +// Maps vanilla itemIDs to enum values which may have changed in the mod +// If your mod removes an item, you can remap it to ITEM_NONE or something else here. +s16 VanillaItemIDs[] = { + [0x000] ITEM_NONE, + [0x001] ITEM_BOOTS, + [0x002] ITEM_SUPER_BOOTS, + [0x003] ITEM_ULTRA_BOOTS, + [0x004] ITEM_HAMMER, + [0x005] ITEM_SUPER_HAMMER, + [0x006] ITEM_ULTRA_HAMMER, + [0x007] ITEM_LUCKY_STAR, + [0x008] ITEM_MAP, + [0x009] ITEM_BIG_MAP, + [0x00A] ITEM_FIRST_DEGREE_CARD, + [0x00B] ITEM_SECOND_DEGREE_CARD, + [0x00C] ITEM_THIRD_DEGREE_CARD, + [0x00D] ITEM_FOURTH_DEGREE_CARD, + [0x00E] ITEM_DIPLOMA, + [0x00F] ITEM_ULTRA_STONE, + [0x010] ITEM_KOOPA_FORTRESS_KEY, + [0x011] ITEM_RUINS_KEY, + [0x012] ITEM_PULSE_STONE, + [0x013] ITEM_TUBBA_CASTLE_KEY, + [0x014] ITEM_CRYSTAL_PALACE_KEY, + [0x015] ITEM_LUNAR_STONE, + [0x016] ITEM_PYRAMID_STONE, + [0x017] ITEM_DIAMOND_STONE, + [0x018] ITEM_GOLDEN_JAR, + [0x019] ITEM_KOOPER_SHELL, + [0x01A] ITEM_BOWSER_CASTLE_KEY, + [0x01B] ITEM_FOREST_PASS, + [0x01C] ITEM_BOO_WEIGHT, + [0x01D] ITEM_BOO_PORTRAIT, + [0x01E] ITEM_CRYSTAL_BERRY, + [0x01F] ITEM_MYSTICAL_KEY, + [0x020] ITEM_STOREROOM_KEY, + [0x021] ITEM_TOY_TRAIN, + [0x022] ITEM_BOO_RECORD, + [0x023] ITEM_FRYING_PAN, + [0x024] ITEM_DICTIONARY, + [0x025] ITEM_MYSTERY_NOTE, + [0x026] ITEM_SUSPICIOUS_NOTE, + [0x027] ITEM_CRYSTAL_BALL, + [0x028] ITEM_SCREWDRIVER, + [0x029] ITEM_COOKBOOK, + [0x02A] ITEM_JADE_RAVEN, + [0x02B] ITEM_MAGICAL_SEED1, + [0x02C] ITEM_MAGICAL_SEED2, + [0x02D] ITEM_MAGICAL_SEED3, + [0x02E] ITEM_MAGICAL_SEED4, + [0x02F] ITEM_TOAD_DOLL, + [0x030] ITEM_CALCULATOR, + [0x031] ITEM_SNOWMAN_BUCKET, + [0x032] ITEM_SNOWMAN_SCARF, + [0x033] ITEM_RED_KEY, + [0x034] ITEM_BLUE_KEY, + [0x035] ITEM_UNUSED_LETTER_1, + [0x036] ITEM_LETTER_TO_MERLON, + [0x037] ITEM_LETTER_TO_GOOMPA, + [0x038] ITEM_LETTER_TO_MORT_T, + [0x039] ITEM_LETTER_TO_RUSS_T, + [0x03A] ITEM_LETTER_TO_MAYOR_PENGUIN, + [0x03B] ITEM_LETTER_TO_MERLOW, + [0x03C] ITEM_LETTER_TO_FICE_T, + [0x03D] ITEM_LETTER_TO_NOMADIMOUSE, + [0x03E] ITEM_LETTER_TO_MINH_T, + [0x03F] ITEM_UNUSED_LETTER_2, + [0x040] ITEM_LETTER_CHAIN_GOOMPAPA_1, + [0x041] ITEM_LETTER_TO_IGOR, + [0x042] ITEM_UNUSED_LETTER_3, + [0x043] ITEM_UNUSED_LETTER_4, + [0x044] ITEM_UNUSED_LETTER_5, + [0x045] ITEM_LETTER_CHAIN_FRANKY, + [0x046] ITEM_LETTER_CHAIN_MUSS_T, + [0x047] ITEM_LETTER_CHAIN_KOOVER_1, + [0x048] ITEM_LETTER_CHAIN_FISHMAEL, + [0x049] ITEM_LETTER_CHAIN_KOOVER_2, + [0x04A] ITEM_LETTER_CHAIN_MR_E, + [0x04B] ITEM_LETTER_CHAIN_MISS_T, + [0x04C] ITEM_LETTER_CHAIN_LITTLE_MOUSER, + [0x04D] ITEM_UNUSED_LETTER_6, + [0x04E] ITEM_LETTER_CHAIN_DANE_T_1, + [0x04F] ITEM_LETTER_CHAIN_YOSHI_KID, + [0x050] ITEM_LETTER_CHAIN_DANE_T_2, + [0x051] ITEM_LETTER_CHAIN_FROST_T, + [0x052] ITEM_LETTER_CHAIN_GOOMPAPA_2, + [0x053] ITEM_ARTIFACT, + [0x054] ITEM_LETTER_TO_KOLORADO, + [0x055] ITEM_UNUSED_LETTER_7, + [0x056] ITEM_DOLLY, + [0x057] ITEM_WATER_STONE, + [0x058] ITEM_MAGICAL_BEAN, + [0x059] ITEM_FERTILE_SOIL, + [0x05A] ITEM_MIRACLE_WATER, + [0x05B] ITEM_VOLCANO_VASE, + [0x05C] ITEM_KOOT_THE_TAPE, + [0x05D] ITEM_BAKING_SUGAR, + [0x05E] ITEM_BAKING_SALT, + [0x05F] ITEM_BAKING_EGG, + [0x060] ITEM_BAKING_CREAM, + [0x061] ITEM_BAKING_STRAWBERRY, + [0x062] ITEM_BAKING_BUTTER, + [0x063] ITEM_BAKING_CLEANSER, + [0x064] ITEM_BAKING_WATER, + [0x065] ITEM_BAKING_FLOUR, + [0x066] ITEM_BAKING_MILK, + [0x067] ITEM_LYRICS, + [0x068] ITEM_MELODY, + [0x069] ITEM_MAILBAG, + [0x06A] ITEM_PEACH_KEY1, + [0x06B] ITEM_ODD_KEY, + [0x06C] ITEM_STAR_STONE, + [0x06D] ITEM_SNEAKY_PARASOL, + [0x06E] ITEM_KOOT_KOOPA_LEGENDS, + [0x06F] ITEM_KOOT_LUIGI_AUTOGRAPH, + [0x070] ITEM_KOOT_EMPTY_WALLET, + [0x071] ITEM_KOOT_MERLUVLEE_AUTOGRAPH, + [0x072] ITEM_KOOT_SHELL, + [0x073] ITEM_KOOT_OLD_PHOTO, + [0x074] ITEM_KOOT_GLASSES, + [0x075] ITEM_KOOT_ALT_PHOTO, + [0x076] ITEM_KOOT_PACKAGE, + [0x077] ITEM_KOOT_RED_JAR, + [0x078] ITEM_PEACH_KEY2, + [0x079] ITEM_WAREHOUSE_KEY, + [0x07A] ITEM_PRISON_KEY1, + [0x07B] ITEM_SILVER_CREDIT, + [0x07C] ITEM_GOLD_CREDIT, + [0x07D] ITEM_PRISON_KEY2, + [0x07E] ITEM_PRISON_KEY3, + [0x07F] ITEM_PRISON_KEY4, + [0x080] ITEM_FIRE_FLOWER, + [0x081] ITEM_SNOWMAN_DOLL, + [0x082] ITEM_THUNDER_RAGE, + [0x083] ITEM_SHOOTING_STAR, + [0x084] ITEM_THUNDER_BOLT, + [0x085] ITEM_PEBBLE, + [0x086] ITEM_DUSTY_HAMMER, + [0x087] ITEM_INSECTICIDE_HERB, + [0x088] ITEM_STONE_CAP, + [0x089] ITEM_TASTY_TONIC, + [0x08A] ITEM_MUSHROOM, + [0x08B] ITEM_VOLT_SHROOM, + [0x08C] ITEM_SUPER_SHROOM, + [0x08D] ITEM_DRIED_SHROOM, + [0x08E] ITEM_ULTRA_SHROOM, + [0x08F] ITEM_SLEEPY_SHEEP, + [0x090] ITEM_POW_BLOCK, + [0x091] ITEM_HUSTLE_DRINK, + [0x092] ITEM_STOP_WATCH, + [0x093] ITEM_WHACKAS_BUMP, + [0x094] ITEM_APPLE, + [0x095] ITEM_LIFE_SHROOM, + [0x096] ITEM_MYSTERY, + [0x097] ITEM_REPEL_GEL, + [0x098] ITEM_FRIGHT_JAR, + [0x099] ITEM_PLEASE_COME_BACK, + [0x09A] ITEM_DIZZY_DIAL, + [0x09B] ITEM_SUPER_SODA, + [0x09C] ITEM_LEMON, + [0x09D] ITEM_LIME, + [0x09E] ITEM_BLUE_BERRY, + [0x09F] ITEM_RED_BERRY, + [0x0A0] ITEM_YELLOW_BERRY, + [0x0A1] ITEM_BUBBLE_BERRY, + [0x0A2] ITEM_JAMMIN_JELLY, + [0x0A3] ITEM_MAPLE_SYRUP, + [0x0A4] ITEM_HONEY_SYRUP, + [0x0A5] ITEM_GOOMNUT, + [0x0A6] ITEM_KOOPA_LEAF, + [0x0A7] ITEM_DRIED_PASTA, + [0x0A8] ITEM_DRIED_FRUIT, + [0x0A9] ITEM_STRANGE_LEAF, + [0x0AA] ITEM_CAKE_MIX, + [0x0AB] ITEM_EGG, + [0x0AC] ITEM_COCONUT, + [0x0AD] ITEM_MELON, + [0x0AE] ITEM_STINKY_HERB, + [0x0AF] ITEM_ICED_POTATO, + [0x0B0] ITEM_SPICY_SOUP, + [0x0B1] ITEM_APPLE_PIE, + [0x0B2] ITEM_HONEY_ULTRA, + [0x0B3] ITEM_MAPLE_ULTRA, + [0x0B4] ITEM_JELLY_ULTRA, + [0x0B5] ITEM_KOOPASTA, + [0x0B6] ITEM_FRIED_SHROOM, + [0x0B7] ITEM_SHROOM_CAKE, + [0x0B8] ITEM_SHROOM_STEAK, + [0x0B9] ITEM_HOT_SHROOM, + [0x0BA] ITEM_SWEET_SHROOM, + [0x0BB] ITEM_YUMMY_MEAL, + [0x0BC] ITEM_HEALTHY_JUICE, + [0x0BD] ITEM_BLAND_MEAL, + [0x0BE] ITEM_DELUXE_FEAST, + [0x0BF] ITEM_SPECIAL_SHAKE, + [0x0C0] ITEM_BIG_COOKIE, + [0x0C1] ITEM_CAKE, + [0x0C2] ITEM_MISTAKE, + [0x0C3] ITEM_KOOPA_TEA, + [0x0C4] ITEM_HONEY_SUPER, + [0x0C5] ITEM_MAPLE_SUPER, + [0x0C6] ITEM_JELLY_SUPER, + [0x0C7] ITEM_SPAGHETTI, + [0x0C8] ITEM_EGG_MISSILE, + [0x0C9] ITEM_FRIED_EGG, + [0x0CA] ITEM_HONEY_SHROOM, + [0x0CB] ITEM_HONEY_CANDY, + [0x0CC] ITEM_ELECTRO_POP, + [0x0CD] ITEM_FIRE_POP, + [0x0CE] ITEM_LIME_CANDY, + [0x0CF] ITEM_COCO_POP, + [0x0D0] ITEM_LEMON_CANDY, + [0x0D1] ITEM_JELLY_POP, + [0x0D2] ITEM_STRANGE_CAKE, + [0x0D3] ITEM_KOOKY_COOKIE, + [0x0D4] ITEM_FROZEN_FRIES, + [0x0D5] ITEM_POTATO_SALAD, + [0x0D6] ITEM_NUTTY_CAKE, + [0x0D7] ITEM_MAPLE_SHROOM, + [0x0D8] ITEM_BOILED_EGG, + [0x0D9] ITEM_YOSHI_COOKIE, + [0x0DA] ITEM_JELLY_SHROOM1, + [0x0DB] ITEM_JELLY_SHROOM2, + [0x0DC] ITEM_JELLY_SHROOM3, + [0x0DD] ITEM_JELLY_SHROOM4, + [0x0DE] ITEM_JELLY_SHROOM5, + [0x0DF] ITEM_JELLY_SHROOM6, + [0x0E0] ITEM_SPIN_SMASH, + [0x0E1] ITEM_MULTIBOUNCE, + [0x0E2] ITEM_POWER_PLUS_A, + [0x0E3] ITEM_DODGE_MASTER, + [0x0E4] ITEM_POWER_BOUNCE, + [0x0E5] ITEM_SPIKE_SHIELD, + [0x0E6] ITEM_FIRST_ATTACK, + [0x0E7] ITEM_HP_PLUS_A, + [0x0E8] ITEM_QUAKE_HAMMER, + [0x0E9] ITEM_DOUBLE_DIP, + [0x0EA] ITEM_MYSTERY_SCROLL, + [0x0EB] ITEM_SLEEP_STOMP, + [0x0EC] ITEM_FIRE_SHIELD, + [0x0ED] ITEM_QUICK_CHANGE, + [0x0EE] ITEM_D_DOWN_POUND, + [0x0EF] ITEM_DIZZY_STOMP, + [0x0F0] ITEM_SMASH_CHARGE0, + [0x0F1] ITEM_PRETTY_LUCKY, + [0x0F2] ITEM_FEELING_FINE, + [0x0F3] ITEM_ATTACK_FX_A, + [0x0F4] ITEM_ALLOR_NOTHING, + [0x0F5] ITEM_HP_DRAIN, + [0x0F6] ITEM_JUMP_CHARGE0, + [0x0F7] ITEM_SLOW_GO, + [0x0F8] ITEM_FP_PLUS_A, + [0x0F9] ITEM_MEGA_RUSH, + [0x0FA] ITEM_ICE_POWER, + [0x0FB] ITEM_DEFEND_PLUS_A, + [0x0FC] ITEM_PAY_OFF, + [0x0FD] ITEM_MONEY_MONEY, + [0x0FE] ITEM_CHILL_OUT, + [0x0FF] ITEM_HAPPY_HEART_A, + [0x100] ITEM_ZAP_TAP, + [0x101] ITEM_BERSERKER, + [0x102] ITEM_RIGHT_ON, + [0x103] ITEM_RUNAWAY_PAY, + [0x104] ITEM_REFUND, + [0x105] ITEM_FLOWER_SAVER_A, + [0x106] ITEM_TRIPLE_DIP, + [0x107] ITEM_HAMMER_THROW, + [0x108] ITEM_MEGA_QUAKE, + [0x109] ITEM_SMASH_CHARGE, + [0x10A] ITEM_JUMP_CHARGE, + [0x10B] ITEM_S_SMASH_CHG, + [0x10C] ITEM_S_JUMP_CHG, + [0x10D] ITEM_POWER_RUSH, + [0x10E] ITEM_AUTO_JUMP, + [0x10F] ITEM_AUTO_SMASH, + [0x110] ITEM_CRAZY_HEART, + [0x111] ITEM_LAST_STAND, + [0x112] ITEM_CLOSE_CALL, + [0x113] ITEM_P_UP_D_DOWN, + [0x114] ITEM_LUCKY_DAY, + [0x115] ITEM_MEGA_HP_DRAIN, + [0x116] ITEM_P_DOWN_D_UP, + [0x117] ITEM_POWER_QUAKE, + [0x118] ITEM_AUTO_MULTIBOUNCE, + [0x119] ITEM_FLOWER_FANATIC, + [0x11A] ITEM_HEART_FINDER, + [0x11B] ITEM_FLOWER_FINDER, + [0x11C] ITEM_SPIN_ATTACK, + [0x11D] ITEM_DIZZY_ATTACK, + [0x11E] ITEM_I_SPY, + [0x11F] ITEM_SPEEDY_SPIN, + [0x120] ITEM_BUMP_ATTACK, + [0x121] ITEM_POWER_JUMP, + [0x122] ITEM_SUPER_JUMP, + [0x123] ITEM_MEGA_JUMP, + [0x124] ITEM_POWER_SMASH1, + [0x125] ITEM_SUPER_SMASH, + [0x126] ITEM_MEGA_SMASH, + [0x127] ITEM_POWER_SMASH2, + [0x128] ITEM_POWER_SMASH3, + [0x129] ITEM_DEEP_FOCUS1, + [0x12A] ITEM_SUPER_FOCUS, + [0x12B] ITEM_SHRINK_SMASH, + [0x12C] ITEM_SHELL_CRACK, + [0x12D] ITEM_KAIDEN, + [0x12E] ITEM_D_DOWN_JUMP, + [0x12F] ITEM_SHRINK_STOMP, + [0x130] ITEM_DAMAGE_DODGE_A, + [0x131] ITEM_EARTHQUAKE_JUMP, + [0x132] ITEM_DEEP_FOCUS2, + [0x133] ITEM_DEEP_FOCUS3, + [0x134] ITEM_HP_PLUS_B, + [0x135] ITEM_FP_PLUS_B, + [0x136] ITEM_HAPPY_HEART_B, + [0x137] ITEM_HAPPY_HEART_X, + [0x138] ITEM_FLOWER_SAVER_B, + [0x139] ITEM_FLOWER_SAVER_X, + [0x13A] ITEM_DAMAGE_DODGE_B, + [0x13B] ITEM_DAMAGE_DODGE_X, + [0x13C] ITEM_POWER_PLUS_B, + [0x13D] ITEM_POWER_PLUS_X, + [0x13E] ITEM_DEFEND_PLUS_X, + [0x13F] ITEM_DEFEND_PLUS_Y, + [0x140] ITEM_HAPPY_FLOWER_A, + [0x141] ITEM_HAPPY_FLOWER_B, + [0x142] ITEM_HAPPY_FLOWER_X, + [0x143] ITEM_GROUP_FOCUS, + [0x144] ITEM_PEEKABOO, + [0x145] ITEM_ATTACK_FX_D, + [0x146] ITEM_ATTACK_FX_B, + [0x147] ITEM_ATTACK_FX_E, + [0x148] ITEM_ATTACK_FX_C, + [0x149] ITEM_ATTACK_FX_F, + [0x14A] ITEM_HP_PLUS_C, + [0x14B] ITEM_HP_PLUS_X, + [0x14C] ITEM_HP_PLUS_Y, + [0x14D] ITEM_FP_PLUS_C, + [0x14E] ITEM_FP_PLUS_X, + [0x14F] ITEM_FP_PLUS_Y, + [0x150] ITEM_HEALTHY_HEALTHY, + [0x151] ITEM_ATTACK_FX_F2, + [0x152] ITEM_ATTACK_FX_F3, + [0x153] ITEM_ATTACK_FX_F4, + [0x154] ITEM_ATTACK_FX_F5, + [0x155] ITEM_PARTNER_ATTACK, + [0x156] ITEM_HEART, + [0x157] ITEM_COIN, + [0x158] ITEM_HEART_PIECE, + [0x159] ITEM_STAR_POINT, + [0x15A] ITEM_HEART_POINT, + [0x15B] ITEM_FLOWER_POINT, + [0x15C] ITEM_STAR_PIECE, + [0x15D] ITEM_PRESENT, + [0x15E] ITEM_CAKE_DONE, + [0x15F] ITEM_CAKE_BARE, + [0x160] ITEM_CAKE_PAN, + [0x161] ITEM_CAKE_BATTER, + [0x162] ITEM_CAKE_BOWL, + [0x163] ITEM_CAKE_MIXED, + [0x164] ITEM_CAKE_WITH_ICING, + [0x165] ITEM_CAKE_WITH_BERRIES, + [0x166] ITEM_MENU_HAMMER1, + [0x167] ITEM_MENU_HAMMER2, + [0x168] ITEM_MENU_HAMMER3, + [0x169] ITEM_MENU_BOOTS1, + [0x16A] ITEM_MENU_BOOTS2, + [0x16B] ITEM_MENU_BOOTS3, + [0x16C] ITEM_MENU_ITEMS, +}; + +void ver_deserialize_vanilla_save(SaveData* newSave) { + VanillaSaveData oldSave; + s32 i, j; + + memcpy(&oldSave, newSave, sizeof(VanillaSaveData)); + memset(newSave, 0, sizeof(SaveData)); + + strcpy(newSave->magicString, oldSave.magicString); + + // copy metadata + newSave->saveSlot = oldSave.saveSlot; + newSave->saveCount = oldSave.saveCount; + newSave->metadata = oldSave.metadata; + + // copy world location + newSave->areaID = oldSave.areaID; + newSave->mapID = oldSave.mapID; + newSave->entryID = oldSave.entryID; + newSave->savePos = oldSave.savePos; + + // defeat flags are unchanged + for (i = 0; i < ARRAY_COUNT(gCurrentEncounter.defeatFlags[0]); i++) { + for (j = 0; j < ARRAY_COUNT(gCurrentEncounter.defeatFlags); j++) { + gCurrentEncounter.defeatFlags[j][i] = newSave->enemyDefeatFlags[j][i]; + } + } + + // saved variable arrays may have been expanded + COPY_S32_ARRAY(newSave->globalFlags, oldSave.globalFlags); + COPY_S32_ARRAY(newSave->areaFlags, oldSave.areaFlags); + COPY_S8_ARRAY(newSave->globalBytes, oldSave.globalBytes); + COPY_S8_ARRAY(newSave->areaBytes, oldSave.areaBytes); + + PlayerData* newPlayer = &newSave->player; + VanillaPlayerData* oldPlayer = &oldSave.player; + + newPlayer->curHP = oldPlayer->curHP; + newPlayer->curMaxHP = oldPlayer->curMaxHP; + newPlayer->hardMaxHP = oldPlayer->hardMaxHP; + newPlayer->curFP = oldPlayer->curFP; + newPlayer->curMaxFP = oldPlayer->curMaxFP; + newPlayer->hardMaxFP = oldPlayer->hardMaxFP; + newPlayer->maxBP = oldPlayer->maxBP; + + newPlayer->level = oldPlayer->level; + newPlayer->starPoints = oldPlayer->starPoints; + + newPlayer->bootsLevel = oldPlayer->bootsLevel; + newPlayer->hammerLevel = oldPlayer->hammerLevel; + newPlayer->hasActionCommands = oldPlayer->hasActionCommands; + + newPlayer->coins = oldPlayer->coins; + newPlayer->starPieces = oldPlayer->starPieces; + + newPlayer->curPartner = oldPlayer->curPartner; + for (i = 0; i < ARRAY_COUNT(oldPlayer->partners); i++) { + newPlayer->partners[i].enabled = oldPlayer->partners[i].enabled; + newPlayer->partners[i].level = oldPlayer->partners[i].level; + } + + COPY_S16_ARRAY(newPlayer->keyItems, oldPlayer->keyItems); + COPY_S16_ARRAY(newPlayer->badges, oldPlayer->badges); + COPY_S16_ARRAY(newPlayer->invItems, oldPlayer->invItems); + COPY_S16_ARRAY(newPlayer->storedItems, oldPlayer->storedItems); + COPY_S16_ARRAY(newPlayer->equippedBadges, oldPlayer->equippedBadges); + + PORT_ITEM_IDS(newPlayer->keyItems, VanillaItemIDs); + PORT_ITEM_IDS(newPlayer->badges, VanillaItemIDs); + PORT_ITEM_IDS(newPlayer->invItems, VanillaItemIDs); + PORT_ITEM_IDS(newPlayer->storedItems, VanillaItemIDs); + PORT_ITEM_IDS(newPlayer->equippedBadges, VanillaItemIDs); + + newPlayer->merleeSpellType = oldPlayer->merleeSpellType; + newPlayer->merleeCastsLeft = oldPlayer->merleeCastsLeft; + newPlayer->merleeTurnCount = oldPlayer->merleeTurnCount; + + newPlayer->starPower = oldPlayer->starPower; + newPlayer->maxStarPower = oldPlayer->maxStarPower; + newPlayer->starBeamLevel = oldPlayer->starBeamLevel; + + newPlayer->actionCommandAttempts = oldPlayer->actionCommandAttempts; + newPlayer->actionCommandSuccesses = oldPlayer->actionCommandSuccesses; + newPlayer->hitsTaken = oldPlayer->hitsTaken; + newPlayer->hitsBlocked = oldPlayer->hitsBlocked; + newPlayer->playerFirstStrikes = oldPlayer->playerFirstStrikes; + newPlayer->enemyFirstStrikes = oldPlayer->enemyFirstStrikes; + newPlayer->powerBounces = oldPlayer->powerBounces; + newPlayer->battlesCount = oldPlayer->battlesCount; + newPlayer->battlesWon = oldPlayer->battlesWon; + newPlayer->fleeAttempts = oldPlayer->fleeAttempts; + newPlayer->battlesFled = oldPlayer->battlesFled; + newPlayer->trainingsDone = oldPlayer->trainingsDone; + newPlayer->walkingStepsTaken = oldPlayer->walkingStepsTaken; + newPlayer->runningStepsTaken = oldPlayer->runningStepsTaken; + newPlayer->totalCoinsEarned = oldPlayer->totalCoinsEarned; + newPlayer->idleFrameCounter = oldPlayer->idleFrameCounter; + newPlayer->frameCounter = oldPlayer->frameCounter; + newPlayer->quizzesAnswered = oldPlayer->quizzesAnswered; + newPlayer->quizzesCorrect = oldPlayer->quizzesCorrect; + + COPY_S32_ARRAY(newPlayer->partnerUnlockedTime, oldPlayer->partnerUnlockedTime); + COPY_S32_ARRAY(newPlayer->partnerUsedTime, oldPlayer->partnerUsedTime); + + newPlayer->tradeEventStartTime = oldPlayer->tradeEventStartTime; + newPlayer->droTreeHintTime = oldPlayer->droTreeHintTime; + newPlayer->starPiecesCollected = oldPlayer->starPiecesCollected; + newPlayer->jumpGamePlays = oldPlayer->jumpGamePlays; + newPlayer->jumpGameTotal = oldPlayer->jumpGameTotal; + newPlayer->jumpGameRecord = oldPlayer->jumpGameRecord; + newPlayer->smashGamePlays = oldPlayer->smashGamePlays; + newPlayer->smashGameTotal = oldPlayer->smashGameTotal; + newPlayer->smashGameRecord = oldPlayer->smashGameRecord; +} diff --git a/src/dx/versioning.h b/src/dx/versioning.h new file mode 100644 index 00000000000..cdb7e0d48d9 --- /dev/null +++ b/src/dx/versioning.h @@ -0,0 +1,115 @@ +#ifndef _VERSIONING_H_ +#define _VERSIONING_H_ + +#include "common.h" + +b32 fio_deserialize_state(); +void fio_serialize_state(); + +/// PartnerData struct from unmodified Paper Mario +typedef struct VanillaPartnerData { + /* 0x00 */ u8 enabled; + /* 0x01 */ s8 level; + /* 0x02 */ s16 unk_02[3]; +} VanillaPartnerData; // size = 0x08 + +/// PlayerData struct from unmodified Paper Mario +typedef struct VanillaPlayerData { + /* 0x000 */ s8 bootsLevel; + /* 0x001 */ s8 hammerLevel; + /* 0x002 */ s8 curHP; + /* 0x003 */ s8 curMaxHP; + /* 0x004 */ s8 hardMaxHP; + /* 0x005 */ s8 curFP; + /* 0x006 */ s8 curMaxFP; + /* 0x007 */ s8 hardMaxFP; + /* 0x008 */ s8 maxBP; + /* 0x009 */ s8 level; + /* 0x00A */ b8 hasActionCommands; + /* 0x00B */ char pad_00B; + /* 0x00C */ s16 coins; + /* 0x00E */ s8 fortressKeyCount; + /* 0x00F */ u8 starPieces; + /* 0x010 */ s8 starPoints; + /* 0x011 */ s8 unused_011; + /* 0x012 */ s8 curPartner; + /* 0x013 */ char pad_013; + /* 0x014 */ VanillaPartnerData partners[12]; + /* 0x074 */ s16 keyItems[32]; + /* 0x0B4 */ s16 badges[128]; + /* 0x1B4 */ s16 invItems[10]; + /* 0x1C8 */ s16 storedItems[32]; + /* 0x208 */ s16 equippedBadges[64]; + /* 0x288 */ s8 unused_288; + /* 0x289 */ s8 merleeSpellType; + /* 0x28A */ s8 merleeCastsLeft; + /* 0x28B */ char pad_28B; + /* 0x28C */ s16 merleeTurnCount; + /* 0x28E */ s8 maxStarPower; + /* 0x28F */ char pad_28F; + /* 0x290 */ s16 starPower; + /* 0x292 */ s8 starBeamLevel; + /* 0x293 */ char pad_293; + /* 0x294 */ u16 actionCommandAttempts; + /* 0x296 */ u16 actionCommandSuccesses; + /* 0x298 */ u16 hitsTaken; + /* 0x29A */ u16 hitsBlocked; + /* 0x29C */ u16 playerFirstStrikes; + /* 0x29E */ u16 enemyFirstStrikes; + /* 0x2A0 */ u16 powerBounces; + /* 0x2A2 */ u16 battlesCount; + /* 0x2A4 */ u16 battlesWon; + /* 0x2A6 */ u16 fleeAttempts; + /* 0x2A8 */ u16 battlesFled; + /* 0x2AA */ u16 trainingsDone; + /* 0x2AC */ s32 walkingStepsTaken; + /* 0x2B0 */ s32 runningStepsTaken; + /* 0x2B4 */ u32 totalCoinsEarned; + /* 0x2B8 */ s16 idleFrameCounter; + /* 0x2BA */ char pad_2BA[2]; + /* 0x2BC */ u32 frameCounter; + /* 0x2C0 */ u16 quizzesAnswered; + /* 0x2C2 */ u16 quizzesCorrect; + /* 0x2C4 */ s32 partnerUnlockedTime[12]; + /* 0x2F4 */ s32 partnerUsedTime[12]; + /* 0x324 */ s32 tradeEventStartTime; + /* 0x328 */ s32 droTreeHintTime; + /* 0x32C */ u16 starPiecesCollected; + /* 0x32E */ u16 jumpGamePlays; + /* 0x330 */ u32 jumpGameTotal; + /* 0x334 */ u16 jumpGameRecord; + /* 0x336 */ u16 smashGamePlays; + /* 0x338 */ u32 smashGameTotal; + /* 0x33C */ u16 smashGameRecord; + /* 0x340 */ char pad_33E[0xEA]; +} VanillaPlayerData; // size = 0x428 + +/// SaveData struct from unmodified Paper Mario +typedef struct VanillaSaveData { + /* 0x0000 */ char magicString[16]; /* "Mario Story 006" string */ + /* 0x0010 */ char version[32]; /* always zero for vanilla saves */ + /* 0x0030 */ s32 crc1; + /* 0x0034 */ s32 crc2; + /* 0x0038 */ s32 saveSlot; + /* 0x003C */ s32 saveCount; + /* 0x0040 */ VanillaPlayerData player; + /* 0x0468 */ s16 areaID; + /* 0x046A */ s16 mapID; + /* 0x046C */ s16 entryID; + /* 0x046E */ char unk_46E[2]; + /* 0x0470 */ s32 enemyDefeatFlags[60][12]; + /* 0x0FB0 */ s32 globalFlags[64]; + /* 0x10B0 */ s8 globalBytes[512]; + /* 0x12B0 */ s32 areaFlags[8]; + /* 0x12D0 */ s8 areaBytes[16]; + /* 0x12E0 */ s8 debugEnemyContact; + /* 0x12E0 */ b8 debugUnused1; + /* 0x12E0 */ b8 debugUnused2; + /* 0x12E0 */ b8 musicEnabled; + /* 0x12E4 */ char unk_12E4[0x2]; + /* 0x12E6 */ Vec3s savePos; + /* 0x12EC */ FileDisplayData metadata; + /* 0x1304 */ char unk_1304[0x7C]; +} VanillaSaveData; // size = 0x1380 + +#endif diff --git a/src/effect_shims.yaml b/src/effect_shims.yaml index f8acc6294f9..81a5675f31a 100644 --- a/src/effect_shims.yaml +++ b/src/effect_shims.yaml @@ -38,3 +38,4 @@ - shim_get_msg_width - shim_mdl_get_shroud_tint_params - shim_sfx_play_sound_at_position +- shim_is_debug_panic diff --git a/src/effects.c b/src/effects.c index 69b10fa9697..3fcc9cf3fac 100644 --- a/src/effects.c +++ b/src/effects.c @@ -221,13 +221,12 @@ EffectInstance* create_effect_instance(EffectBlueprint* effectBp) { if (effectGraphics->instanceCounter == 0) { effectGraphics->update = effectBp->update; if (effectGraphics->update == NULL) { - effectGraphics->renderWorld = stub_effect_delegate; + effectGraphics->update = stub_effect_delegate; } effectGraphics->renderWorld = effectBp->renderWorld; - /// @bug? null check for renderUI instead of renderWorld - if (effectGraphics->renderUI == NULL) { - effectGraphics->renderUI = stub_effect_delegate; + if (effectGraphics->renderWorld == NULL) { + effectGraphics->renderWorld = stub_effect_delegate; } effectGraphics->renderUI = effectBp->renderUI; diff --git a/src/effects/stat_change.c b/src/effects/stat_change.c index 47b7f1f288a..21505ec90da 100644 --- a/src/effects/stat_change.c +++ b/src/effects/stat_change.c @@ -219,8 +219,6 @@ void stat_change_update(EffectInstance* effect) { part->unk_3C = 0; part->unk_40 = 0; - do {} while (0); // required to match - part->pos.x += part->unk_30; part->pos.y += part->unk_38; part->pos.z += part->unk_34; diff --git a/src/encounter.c b/src/encounter.c index 459f69985a4..13670364754 100644 --- a/src/encounter.c +++ b/src/encounter.c @@ -8,6 +8,7 @@ #include "sprite/npc/BattleMerlee.h" #include "sprite/player.h" #include "model.h" +#include "dx/debug_menu.h" API_CALLABLE(ShowMerleeCoinMessage); API_CALLABLE(ShowMerleeRanOutMessage); @@ -84,7 +85,7 @@ EnemyDrops DefaultEnemyDrops = { { .item = ITEM_MUSHROOM, .weight = 50, - .unk_04 = -1, + .flagIdx = -1, }, }, .heartDrops = { @@ -513,7 +514,7 @@ void update_encounters_neutral(void) { currentEncounter->songID = -1; currentEncounter->unk_18 = -1; currentEncounter->hitType = 0; - currentEncounter->allowFleeing = FALSE; + currentEncounter->forbidFleeing = FALSE; currentEncounter->dropWhackaBump = FALSE; currentEncounter->flags &= ~ENCOUNTER_STATUS_FLAG_1; currentEncounter->flags &= ~ENCOUNTER_STATUS_FLAG_2; @@ -1455,9 +1456,17 @@ void update_encounters_pre_battle(void) { void draw_encounters_pre_battle(void) { EncounterStatus* encounter = &gCurrentEncounter; - Npc* npc = get_npc_unsafe(encounter->curEnemy->npcID); PlayerStatus* playerStatus = &gPlayerStatus; +#if DX_DEBUG_MENU + Npc* npc = NULL; + if (encounter->curEnemy->npcID != (s16) DX_DEBUG_DUMMY_ID) { + npc = get_npc_unsafe(encounter->curEnemy->npcID); + } +#else + Npc* npc = get_npc_unsafe(encounter->curEnemy->npcID); +#endif + if (encounter->unk_94 != 0) { f32 playerX, playerY, playerZ; f32 otherX, otherY, otherZ; @@ -1479,9 +1488,21 @@ void draw_encounters_pre_battle(void) { playerY = playerStatus->pos.y; playerZ = playerStatus->pos.z; + #if DX_DEBUG_MENU + if (npc != NULL) { + otherX = npc->pos.x; + otherY = npc->pos.y; + otherZ = npc->pos.z; + } else { + otherX = playerX; + otherY = playerY; + otherZ = playerZ; + } + #else otherX = npc->pos.x; otherY = npc->pos.y; otherZ = npc->pos.z; + #endif if (otherY < -990.0f) { otherX = playerX; otherY = playerY; diff --git a/src/encounter_api.c b/src/encounter_api.c index e2f67f6a141..a5471f2fb74 100644 --- a/src/encounter_api.c +++ b/src/encounter_api.c @@ -206,7 +206,7 @@ void start_battle(Evt* script, s32 songID) { currentEncounter->curEnemy = enemy; currentEncounter->curEncounter = currentEncounter->encounterList[enemy->encounterIndex]; currentEncounter->firstStrikeType = FIRST_STRIKE_NONE; - currentEncounter->allowFleeing = FALSE; + currentEncounter->forbidFleeing = FALSE; currentEncounter->songID = songID; currentEncounter->unk_18 = -1; @@ -277,7 +277,7 @@ API_CALLABLE(StartBossBattle) { currentEncounter->curEnemy = enemy; currentEncounter->curEncounter = currentEncounter->encounterList[enemy->encounterIndex]; currentEncounter->firstStrikeType = FIRST_STRIKE_NONE; - currentEncounter->allowFleeing = TRUE; + currentEncounter->forbidFleeing = TRUE; currentEncounter->songID = songID; currentEncounter->unk_18 = -1; @@ -326,7 +326,7 @@ API_CALLABLE(SetBattleMusic) { Bytecode songID = evt_get_variable(script, *args++); EncounterStatus* currentEncounter = &gCurrentEncounter; - currentEncounter->allowFleeing = TRUE; + currentEncounter->forbidFleeing = TRUE; currentEncounter->songID = songID; currentEncounter->unk_18 = -1; return ApiStatus_DONE2; diff --git a/src/entity.c b/src/entity.c index 9ab7ee5867d..6774ae107c5 100644 --- a/src/entity.c +++ b/src/entity.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "ld_addrs.h" #include "entity.h" #include "model.h" @@ -1452,7 +1453,7 @@ API_CALLABLE(AssignSwitchFlag) { SwitchData* data = entity->dataBuf.swtch; data->areaFlagIndex = areaFlag; - if (get_area_flag(areaFlag) != 0) { + if (get_area_flag(areaFlag)) { entity->flags |= ENTITY_FLAG_PENDING_INSTANCE_DELETE; } return ApiStatus_DONE2; diff --git a/src/entity/Block.c b/src/entity/Block.c index ac44dcaed40..3775168c71a 100644 --- a/src/entity/Block.c +++ b/src/entity/Block.c @@ -1,5 +1,6 @@ #include "common.h" #include "effects.h" +#include "vars_access.h" #include "ld_addrs.h" #include "entity.h" @@ -154,7 +155,6 @@ void entity_base_block_update_slow_sinking(Entity* entity) { data->sinkingTimer = 1; return; } - do {} while (0); // needed to match } else { Shadow* shadow = get_shadow_by_index(entity->shadowIndex); if (shadow != NULL) { @@ -357,7 +357,18 @@ s32 entity_block_handle_collision(Entity* entity) { } return TRUE; } + if (entity->collisionFlags & ENTITY_COLLISION_PARTNER) { + // partner collision means either kooper shell toss or bombette explosion + if (gPlayerData.curPartner == PARTNER_BOMBETTE) { + switch (get_entity_type(entity->listIndex)) { + case ENTITY_TYPE_HAMMER1_BLOCK: + case ENTITY_TYPE_HAMMER1_BLOCK_TINY: + set_entity_commandlist(entity, Entity_BreakingBlock_Script); + sfx_play_sound_at_position(SOUND_SMASH_HAMER_BLOCK_1, SOUND_SPACE_DEFAULT, entity->pos.x, entity->pos.y, entity->pos.z); + return TRUE; + } + } exec_entity_commandlist(entity); return TRUE; } diff --git a/src/entity/BlueWarpPipe.c b/src/entity/BlueWarpPipe.c index becd7cbf642..e97b36fc1c8 100644 --- a/src/entity/BlueWarpPipe.c +++ b/src/entity/BlueWarpPipe.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "npc.h" #include "sprite.h" #include "ld_addrs.h" diff --git a/src/entity/Chest.c b/src/entity/Chest.c index 61c417487e4..f2f1d0c8041 100644 --- a/src/entity/Chest.c +++ b/src/entity/Chest.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "effects.h" #include "ld_addrs.h" #include "entity.h" diff --git a/src/entity/HeartBlock.c b/src/entity/HeartBlock.c index 42d6effded8..0f317c9e802 100644 --- a/src/entity/HeartBlock.c +++ b/src/entity/HeartBlock.c @@ -1,5 +1,7 @@ #include "common.h" #include "effects.h" +#include "inventory.h" +#include "vars_access.h" #include "message_ids.h" #include "ld_addrs.h" #include "entity.h" diff --git a/src/entity/HiddenPanel.c b/src/entity/HiddenPanel.c index 1f234451fd4..9c90c5eb83d 100644 --- a/src/entity/HiddenPanel.c +++ b/src/entity/HiddenPanel.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "ld_addrs.h" #include "entity.h" diff --git a/src/entity/ItemBlock.c b/src/entity/ItemBlock.c index f68c45cd72a..452551d33e0 100644 --- a/src/entity/ItemBlock.c +++ b/src/entity/ItemBlock.c @@ -1,5 +1,6 @@ #include "common.h" #include "effects.h" +#include "vars_access.h" #include "ld_addrs.h" #include "animation_script.h" #include "entity.h" diff --git a/src/entity/SaveBlock.c b/src/entity/SaveBlock.c index 364ca3e831c..e60d5fff588 100644 --- a/src/entity/SaveBlock.c +++ b/src/entity/SaveBlock.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "fio.h" #include "ld_addrs.h" #include "entity.h" diff --git a/src/entity/SuperBlock.c b/src/entity/SuperBlock.c index 8e6c968b727..e87c2127619 100644 --- a/src/entity/SuperBlock.c +++ b/src/entity/SuperBlock.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "effects.h" #include "ld_addrs.h" #include "entity.h" diff --git a/src/entity/Switch.c b/src/entity/Switch.c index 1883764d987..6f5525f3b2d 100644 --- a/src/entity/Switch.c +++ b/src/entity/Switch.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "effects.h" #include "ld_addrs.h" #include "entity.h" diff --git a/src/entity/WoodenCrate.c b/src/entity/WoodenCrate.c index b695241b912..412818ebfc8 100644 --- a/src/entity/WoodenCrate.c +++ b/src/entity/WoodenCrate.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" #include "npc.h" #include "ld_addrs.h" #include "entity.h" diff --git a/src/evt/demo_api.c b/src/evt/demo_api.c index 2f1f61267c4..c0ff7119fa8 100644 --- a/src/evt/demo_api.c +++ b/src/evt/demo_api.c @@ -105,31 +105,23 @@ API_CALLABLE(DemoSetButtons) { } API_CALLABLE(DemoJoystickRadial) { - GameStatus** gameStatus = &gGameStatusPtr; - f32 a; - f32 b; - s32* thisPos = script->ptrReadPos; - - a = evt_get_float_variable(script, *thisPos++); - b = evt_get_float_variable(script, *thisPos++); + Bytecode* args = script->ptrReadPos; + f32 mag = evt_get_float_variable(script, *args++); + f32 ang = evt_get_float_variable(script, *args++); - (*gameStatus)->demoStickX = a * sin_deg(b); - (*gameStatus)->demoStickY = a * cos_deg(b); + gGameStatus.demoStickX = mag * sin_deg(ang); + gGameStatus.demoStickY = mag * cos_deg(ang); return ApiStatus_DONE2; } API_CALLABLE(DemoJoystickXY) { - GameStatus** gameStatus = &gGameStatusPtr; - f32 x; - f32 y; - s32* thisPos = script->ptrReadPos; - - x = evt_get_float_variable(script, *thisPos++); - y = evt_get_float_variable(script, *thisPos++); + Bytecode* args = script->ptrReadPos; + f32 x = evt_get_float_variable(script, *args++); + f32 y = evt_get_float_variable(script, *args++); - (*gameStatus)->demoStickX = x; - (*gameStatus)->demoStickY = y; + gGameStatus.demoStickX = x; + gGameStatus.demoStickY = y; return ApiStatus_DONE2; } diff --git a/src/evt/evt.c b/src/evt/evt.c index beea879858e..f2990778e51 100644 --- a/src/evt/evt.c +++ b/src/evt/evt.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" extern u32* gMapFlags; extern s32* gMapVars; @@ -1243,8 +1244,6 @@ s32 evt_handle_print_debug_var(Evt* script) { s32 var = *args++; s32 flagBitPos; - do {} while (0); - if (var <= EVT_LIMIT) { sprintf(evtDebugPrintBuffer, "ADDR [%08X]", var); } else if (var <= EVT_FIXED_CUTOFF) { @@ -1329,8 +1328,6 @@ s32 evt_handle_print_debug_var(Evt* script) { var = EVT_INDEX_OF_LOCAL_VAR(var); tableVar = script->varTable[var]; - do {} while (0); - if (tableVar <= EVT_LIMIT) { sprintf(evtDebugPrintBuffer, "LW(%3d) [%08X]", tableVar); } else if (tableVar <= EVT_FIXED_CUTOFF) { @@ -1366,11 +1363,16 @@ ApiStatus func_802C73B8(Evt* script) { } s32 evt_execute_next_command(Evt* script) { + s32 commandsExecuted = 0; + while (TRUE) { s32 status = ApiStatus_DONE2; s32* lines; s32 nargs; + commandsExecuted++; + ASSERT_MSG(commandsExecuted < 10000, "Script %x is blocking for ages (infinite loop?)", script->ptrFirstLine); + switch (script->curOpcode) { case EVT_OP_INTERNAL_FETCH: script->ptrCurLine = script->ptrNextLine; diff --git a/src/evt/item_api.c b/src/evt/item_api.c index ea813432f6a..3bdc15f5cff 100644 --- a/src/evt/item_api.c +++ b/src/evt/item_api.c @@ -1,24 +1,23 @@ #include "common.h" +#include "inventory.h" #include "pause/pause_common.h" #include "hud_element.h" #include "world/partners.h" -extern PopupMenu D_802DB830; +extern PopupMenu gItemChoicePopupMenu; API_CALLABLE(ShowKeyChoicePopup) { PlayerData* playerData = &gPlayerData; - PopupMenu* menu = &D_802DB830; + PopupMenu* menu = &gItemChoicePopupMenu; Trigger* trigger = script->owner2.trigger; s32 numEntries; - s32 t; // TODO required in both places to match s32 i; if (isInitialCall) { script->functionTemp[0] = 0; } - t = script->functionTemp[0]; - switch (t) { + switch (script->functionTemp[0]) { case 0: disable_player_input(); disable_player_static_collisions(); @@ -82,14 +81,12 @@ API_CALLABLE(ShowKeyChoicePopup) { if (script->functionTemp[2] == 0xFF) { script->varTable[0] = -1; - return ApiStatus_DONE1; } else { - t = menu->userIndex[script->functionTemp[2] - 1]; - - script->varTable[1] = t; - script->varTable[0] = playerData->keyItems[t]; - return ApiStatus_DONE1; + s32 invIndex = menu->userIndex[script->functionTemp[2] - 1]; + script->varTable[1] = invIndex; + script->varTable[0] = playerData->keyItems[invIndex]; } + return ApiStatus_DONE1; } break; } @@ -98,18 +95,16 @@ API_CALLABLE(ShowKeyChoicePopup) { API_CALLABLE(ShowConsumableChoicePopup) { PlayerData* playerData = &gPlayerData; - PopupMenu* menu = &D_802DB830; + PopupMenu* menu = &gItemChoicePopupMenu; Trigger* trigger = script->owner2.trigger; s32 numEntries; - s32 t; // TODO required in both places to match s32 i; if (isInitialCall) { script->functionTemp[0] = 0; } - t = script->functionTemp[0]; - switch (t) { + switch (script->functionTemp[0]) { case 0: disable_player_input(); disable_player_static_collisions(); @@ -173,60 +168,32 @@ API_CALLABLE(ShowConsumableChoicePopup) { if (script->functionTemp[2] == 0xFF) { script->varTable[0] = -1; - return ApiStatus_DONE1; } else { - t = menu->userIndex[script->functionTemp[2] - 1]; - - script->varTable[1] = t; - script->varTable[0] = playerData->invItems[t]; - return ApiStatus_DONE1; + s32 invIdx = menu->userIndex[script->functionTemp[2] - 1]; + script->varTable[1] = invIdx; + script->varTable[0] = playerData->invItems[invIdx]; } + return ApiStatus_DONE1; } break; } return ApiStatus_BLOCK; } -API_CALLABLE(RemoveKeyItemAt) { - Bytecode* args = script->ptrReadPos; - s32 index = evt_get_variable(script, *args++); - s16* ptrKeyItems = gPlayerData.keyItems; - - ptrKeyItems[index] = ITEM_NONE; - return ApiStatus_DONE2; -} - API_CALLABLE(RemoveItemAt) { Bytecode* args = script->ptrReadPos; s32 index = evt_get_variable(script, *args++); - s16* ptrInvItems = gPlayerData.invItems; - ptrInvItems[index] = ITEM_NONE; - sort_items(); + gPlayerData.invItems[index] = ITEM_NONE; + sort_consumables(); return ApiStatus_DONE2; } -API_CALLABLE(AddKeyItem) { +API_CALLABLE(RemoveKeyItemAt) { Bytecode* args = script->ptrReadPos; - s32 value = *args++; - PlayerData* playerData = &gPlayerData; - s32 itemID = evt_get_variable(script, value); - s32 i; - - if (itemID == ITEM_KOOPA_FORTRESS_KEY) { - playerData->fortressKeyCount++; - return ApiStatus_DONE2; - } - - for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) { - if (playerData->keyItems[i] == ITEM_NONE) { - break; - } - } + s32 index = evt_get_variable(script, *args++); - if (i < ARRAY_COUNT(playerData->keyItems)) { - playerData->keyItems[i] = itemID; - } + gPlayerData.keyItems[index] = ITEM_NONE; return ApiStatus_DONE2; } @@ -238,123 +205,58 @@ API_CALLABLE(CloseChoicePopup) { return ApiStatus_DONE2; } -API_CALLABLE(HasKeyItem) { - Bytecode* args = script->ptrReadPos; - s32 itemID = evt_get_variable(script, *args++); - s32 value = *args++; - PlayerData* playerData = &gPlayerData; - s32 i; - - for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) { - if (playerData->keyItems[i] == itemID) { - break; - } - } - evt_set_variable(script, value, i < ARRAY_COUNT(playerData->keyItems)); - return ApiStatus_DONE2; -} - -API_CALLABLE(FindKeyItem) { +API_CALLABLE(AddItem) { Bytecode* args = script->ptrReadPos; s32 itemID = evt_get_variable(script, *args++); - s32 value = *args++; - PlayerData* playerData = &gPlayerData; - s32 i; - s32 itemIndex; + Bytecode outVar = *args++; - for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) { - if (playerData->keyItems[i] == itemID) { - break; - } - } + s32 addedIdx = add_item(itemID); - itemIndex = -1; - if (i != ARRAY_COUNT(playerData->keyItems)) { - itemIndex = i; - } - - evt_set_variable(script, value, itemIndex); + evt_set_variable(script, outVar, addedIdx); return ApiStatus_DONE2; } -API_CALLABLE(AddItem) { +API_CALLABLE(RemoveItem) { Bytecode* args = script->ptrReadPos; s32 itemID = evt_get_variable(script, *args++); - Bytecode outItemIdx = *args++; + Bytecode outVar = *args++; - evt_set_variable(script, outItemIdx, add_item(itemID)); - return ApiStatus_DONE2; -} + s32 removedIdx = remove_item(itemID); -API_CALLABLE(ClearVariable) { - evt_set_variable(script, *script->ptrReadPos, 0); + evt_set_variable(script, outVar, removedIdx); return ApiStatus_DONE2; } API_CALLABLE(FindItem) { Bytecode* args = script->ptrReadPos; s32 itemID = evt_get_variable(script, *args++); - s32 value = *args++; - PlayerData* playerData = &gPlayerData; - s32 i; - s32 itemIndex; - - for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) { - if (playerData->invItems[i] == itemID) { - break; - } - } + Bytecode outVar = *args++; - itemIndex = -1; - if (i != ARRAY_COUNT(playerData->invItems)) { - itemIndex = i; - } + s32 foundIdx = find_item(itemID); - evt_set_variable(script, value, itemIndex); + evt_set_variable(script, outVar, foundIdx); return ApiStatus_DONE2; } -API_CALLABLE(RemoveItem) { +API_CALLABLE(CountItem) { Bytecode* args = script->ptrReadPos; s32 itemID = evt_get_variable(script, *args++); - s32 value = *args++; - PlayerData* playerData = &gPlayerData; - s32 i; - s32 itemIndex; - - for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) { - if (playerData->invItems[i] == itemID) { - break; - } - } - - itemIndex = -1; - if (i != ARRAY_COUNT(playerData->invItems)) { - itemIndex = i; - } + Bytecode outVar = *args++; - if (itemIndex >= 0) { - // This is `playerData->invItems[i]`, but we have to do weird - // pointer math to get the output asm to exactly match :/ - *(playerData->invItems + i) = ITEM_NONE; - } - sort_items(); + b32 count = count_item(itemID); - evt_set_variable(script, value, itemIndex); + evt_set_variable(script, outVar, count); return ApiStatus_DONE2; } -API_CALLABLE(CountFortessKeys) { - s32 outVar = *script->ptrReadPos; - - evt_set_variable(script, outVar, get_fortress_key_count()); - return ApiStatus_DONE2; -} +API_CALLABLE(HasItem) { + Bytecode* args = script->ptrReadPos; + s32 itemID = evt_get_variable(script, *args++); + Bytecode outVar = *args++; -API_CALLABLE(RemoveFortressKeys) { - s32 num = evt_get_variable(script, *script->ptrReadPos); + b32 hasItem = has_item(itemID); - subtract_fortress_keys(num); + evt_set_variable(script, outVar, hasItem); return ApiStatus_DONE2; } @@ -406,35 +308,6 @@ API_CALLABLE(RemoveItemEntity) { return ApiStatus_DONE2; } -API_CALLABLE(AddBadge) { - Bytecode* args = script->ptrReadPos; - s32 badgeID = evt_get_variable(script, *args++); - Bytecode outBadgeIdx = *args++; - - evt_set_variable(script, outBadgeIdx, add_badge(badgeID)); - return ApiStatus_DONE2; -} - -API_CALLABLE(RemoveBadge) { - Bytecode* args = script->ptrReadPos; - PlayerData* playerData = &gPlayerData; - s32 badge = evt_get_variable(script, *args++); - s32 i; - - for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) { - if (playerData->badges[i] == badge) { - playerData->badges[i] = ITEM_NONE; - } - } - - for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) { - if (playerData->equippedBadges[i] == badge) { - playerData->equippedBadges[i] = ITEM_NONE; - } - } - return ApiStatus_DONE2; -} - API_CALLABLE(SetItemPos) { Bytecode* args = script->ptrReadPos; ItemEntity* ptrItemEntity; @@ -457,10 +330,10 @@ API_CALLABLE(SetItemFlags) { Bytecode* args = script->ptrReadPos; s32 itemEntityIndex = evt_get_variable(script, *args++); s32 flagBits = *args++; - s32 var2 = evt_get_variable(script, *args++); + s32 mode = evt_get_variable(script, *args++); ItemEntity* itemEntity = get_item_entity(itemEntityIndex); - if (var2 != 0) { + if (mode != 0) { itemEntity->flags |= flagBits; } else { itemEntity->flags &= ~flagBits; @@ -506,25 +379,22 @@ API_CALLABLE(GetItemPower) { API_CALLABLE(ShowGotItem) { Bytecode* args = script->ptrReadPos; - s32 itemID, category, pickupMsgFlags; + s32 itemID, unkCond, pickupMsgFlags; if (isInitialCall) { - script->functionTemp[0] = 0; + script->functionTemp[0] = FALSE; } - switch (script->functionTemp[0]) { - case 0: - itemID = evt_get_variable(script, *args++); - category = evt_get_variable(script, *args++); - pickupMsgFlags = *args++; - script->functionTemp[1] = make_item_entity_at_player(itemID, category, pickupMsgFlags); - script->functionTemp[0] = 1; - break; - case 1: - if (get_item_entity(script->functionTemp[1]) == NULL) { - return ApiStatus_DONE2; - } - break; + if (script->functionTemp[0]) { + if (get_item_entity(script->functionTemp[1]) == NULL) { + return ApiStatus_DONE2; + } + } else { + itemID = evt_get_variable(script, *args++); + unkCond = evt_get_variable(script, *args++); + pickupMsgFlags = *args++; + script->functionTemp[1] = make_item_entity_at_player(itemID, unkCond, pickupMsgFlags); + script->functionTemp[0] = TRUE; } return ApiStatus_BLOCK; } diff --git a/src/evt/map_api.c b/src/evt/map_api.c index 1d54022383b..1d0fbcd673e 100644 --- a/src/evt/map_api.c +++ b/src/evt/map_api.c @@ -710,7 +710,7 @@ void goto_map(Evt* script, s32 mode) { areaID = evt_get_variable(script, *args++); mapID = evt_get_variable(script, *args++); } else { - get_map_IDs_by_name((char*)evt_get_variable(script, *args++), &areaID, &mapID); + get_map_IDs_by_name_checked((char*)evt_get_variable(script, *args++), &areaID, &mapID); } gGameStatusPtr->areaID = areaID; diff --git a/src/evt/script_list.c b/src/evt/script_list.c index 7203cd43ed0..de60b1006a1 100644 --- a/src/evt/script_list.c +++ b/src/evt/script_list.c @@ -1,23 +1,20 @@ #include "common.h" #include "hud_element.h" -s32 gStaticScriptCounter = 1; -s32 gIsUpdatingScripts = 0; -f32 gGlobalTimeSpace = 1.0f; +s32 UniqueScriptCounter = 1; +s32 IsUpdatingScripts = FALSE; +f32 GlobalTimeRate = 1.0f; // script_list BSS u32* gMapFlags; BSS s32* gMapVars; BSS s32 gNumScripts; -BSS s32 D_802DA48C; // unused? BSS ScriptList gWorldScriptList; BSS ScriptList gBattleScriptList; BSS ScriptList* gCurrentScriptListPtr; -BSS s32 D_802DA894; // unused? BSS s32 gScriptIndexList[MAX_SCRIPTS]; BSS s32 gScriptIdList[MAX_SCRIPTS]; BSS s32 gScriptListCount; -BSS s32 D_802DAC9C; // unused? // evt BSS char evtDebugPrintBuffer[0x100]; @@ -25,67 +22,53 @@ BSS char evtDebugPrintBuffer[0x100]; // map_api BSS struct LavaReset* gLavaResetList; BSS s32 LastSafeFloor; -BSS s32 D_802DADA8[2]; // unused? // model_api BSS AnimatedModelList gBattleMeshAnimationList; BSS AnimatedModelList gWorldMeshAnimationList; BSS AnimatedModelList* gCurrentMeshAnimationListPtr; -BSS s32 D_802DAE34[3]; // unused? // npc_api BSS s32 wExtraPartnerID; BSS s32 wExtraPartnerNpcID; -BSS s32 D_802DAE4C[2]; // unused? // msg_api BSS s32 ShowMessageScreenOffsetX; BSS s32 ShowMessageScreenOffsetY; -BSS s32 D_802DAE58[2]; // unused? -BSS char D_802DAE60[0x400]; // unused? BSS MessagePrintState* gCurrentPrintContext; -BSS s32 D_802DB264; BSS MessagePrintState* D_802DB268; -BSS s32 D_802DB26C; // unused? +BSS s32 D_802DB264; // player_api BSS Npc playerNpcData; BSS u16 PlayerImgFXFlags; -BSS s32 D_802DB5B4[3]; // unused BSS VirtualEntityList bBattleVirtualEntityList; BSS VirtualEntityList wWorldVirtualEntityList; BSS VirtualEntityList* gCurrentVirtualEntityListPtr; -BSS s32 D_802DB7C4[3]; // unused // audio_api BSS MusicEvent* MusicEventList; -BSS s32 D_802DB7D4; // unused? BSS Evt* RunningMusicEvents[10]; BSS s32 RunningMusicEventIDs[10]; -BSS s32 D_802DB828[2]; // unused? // item_api -BSS PopupMenu D_802DB830; - -#if VERSION_PAL -BSS s32 D_PAL_BSS_802E1E34[0x3]; // TODO: probably just alignment -#endif +BSS PopupMenu gItemChoicePopupMenu; // demo_api BSS s32 gSpriteShadingHeader; -BSS s32 D_802DBB64; // unused? BSS s32 gSpriteShadingData; -BSS s32 D_802DB8B6C; // unused? -BSS char D_802DBB70[0x100]; // why is this at the end? com section vs bss? BSS u32 gWorldMapFlags[MAX_MAPFLAGS]; -BSS s32 DoorModelsSwingCW[3]; -BSS PushBlockGrid* wPushBlockGrids[8]; +BSS u32 gBattleMapFlags[MAX_MAPFLAGS]; + BSS u32 gWorldMapVars[MAX_MAPVARS]; BSS u32 gBattleMapVars[MAX_MAPVARS]; + +BSS PushBlockGrid* wPushBlockGrids[8]; + +BSS s32 DoorModelsSwingCW[3]; BSS s32 DoorModelsSwingCCW[3]; -BSS u32 gBattleMapFlags[MAX_MAPFLAGS]; s32 evt_execute_next_command(Evt* script); @@ -186,7 +169,7 @@ void clear_script_list(void) { gNumScripts = 0; gScriptListCount = 0; - gIsUpdatingScripts = 0; + IsUpdatingScripts = FALSE; for (i = 0; i < MAX_MAPVARS; i++) { gMapVars[i] = 0; @@ -212,7 +195,7 @@ void init_script_list(void) { } gNumScripts = 0; - gIsUpdatingScripts = 0; + IsUpdatingScripts = FALSE; init_virtual_entity_list(); init_model_animators(); @@ -266,7 +249,7 @@ Evt* start_script(EvtScript* source, s32 priority, s32 flags) { newScript->blockingParent = NULL; newScript->childScript = NULL; newScript->parentScript = NULL; - newScript->id = gStaticScriptCounter++; + newScript->id = UniqueScriptCounter++; newScript->owner1.actorID = -1; newScript->owner2.npcID = -1; newScript->loopDepth = -1; @@ -275,7 +258,7 @@ Evt* start_script(EvtScript* source, s32 priority, s32 flags) { newScript->ptrSavedPos = NULL; newScript->frameCounter = 0.0f; newScript->unk_158 = 0; - newScript->timeScale = gGlobalTimeSpace; + newScript->timeScale = GlobalTimeRate; scriptListCount = 0; @@ -289,7 +272,7 @@ Evt* start_script(EvtScript* source, s32 priority, s32 flags) { find_script_labels(newScript); - if (gIsUpdatingScripts && (newScript->stateFlags & EVT_FLAG_RUN_IMMEDIATELY)) { + if (IsUpdatingScripts && (newScript->stateFlags & EVT_FLAG_RUN_IMMEDIATELY)) { scriptListCount = gScriptListCount++; gScriptIndexList[scriptListCount] = curScriptIndex; gScriptIdList[scriptListCount] = newScript->id; @@ -297,8 +280,8 @@ Evt* start_script(EvtScript* source, s32 priority, s32 flags) { suspend_frozen_scripts(newScript); - if (gStaticScriptCounter == 0) { - gStaticScriptCounter = 1; + if (UniqueScriptCounter == 0) { + UniqueScriptCounter = 1; } return newScript; @@ -331,7 +314,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 flags, u8 groupFla newScript->stateFlags = flags | EVT_FLAG_ACTIVE; newScript->curOpcode = EVT_OP_INTERNAL_FETCH; newScript->priority = priority; - newScript->id = gStaticScriptCounter++; + newScript->id = UniqueScriptCounter++; newScript->ptrNextLine = (Bytecode*)source; newScript->ptrFirstLine = (Bytecode*)source; newScript->ptrCurLine = (Bytecode*)source; @@ -347,7 +330,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 flags, u8 groupFla newScript->ptrSavedPos = 0; newScript->frameCounter = 0.0f; newScript->unk_158 = 0; - newScript->timeScale = gGlobalTimeSpace; + newScript->timeScale = GlobalTimeRate; scriptListCount = 0; for (i = 0; i < ARRAY_COUNT(newScript->varTable); i++) { @@ -359,7 +342,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 flags, u8 groupFla find_script_labels(newScript); - if (gIsUpdatingScripts && (newScript->stateFlags & EVT_FLAG_RUN_IMMEDIATELY)) { + if (IsUpdatingScripts && (newScript->stateFlags & EVT_FLAG_RUN_IMMEDIATELY)) { scriptListCount = gScriptListCount++; gScriptIndexList[scriptListCount] = curScriptIndex; gScriptIdList[scriptListCount] = newScript->id; @@ -368,7 +351,7 @@ Evt* start_script_in_group(EvtScript* source, u8 priority, u8 flags, u8 groupFla suspend_frozen_scripts(newScript); - tempCounter = &gStaticScriptCounter; + tempCounter = &UniqueScriptCounter; if (*tempCounter == 0) { *tempCounter = 1; } @@ -407,7 +390,7 @@ Evt* start_child_script(Evt* parentScript, EvtScript* source, s32 flags) { child->childScript = NULL; child->parentScript = NULL; child->priority = parentScript->priority + 1; - child->id = gStaticScriptCounter++; + child->id = UniqueScriptCounter++; child->owner1 = parentScript->owner1; child->owner2 = parentScript->owner2; child->loopDepth = -1; @@ -416,7 +399,7 @@ Evt* start_child_script(Evt* parentScript, EvtScript* source, s32 flags) { child->ptrSavedPos = NULL; child->array = parentScript->array; child->flagArray = parentScript->flagArray; - child->timeScale = gGlobalTimeSpace; + child->timeScale = GlobalTimeRate; child->frameCounter = 0.0f; child->unk_158 = 0; @@ -431,7 +414,7 @@ Evt* start_child_script(Evt* parentScript, EvtScript* source, s32 flags) { } find_script_labels(child); - if (gIsUpdatingScripts) { + if (IsUpdatingScripts) { scriptListCount = gScriptListCount++; gScriptIndexList[scriptListCount] = curScriptIndex; gScriptIdList[scriptListCount] = child->id; @@ -439,8 +422,8 @@ Evt* start_child_script(Evt* parentScript, EvtScript* source, s32 flags) { suspend_frozen_scripts(child); - if (gStaticScriptCounter == 0) { - gStaticScriptCounter = 1; + if (UniqueScriptCounter == 0) { + UniqueScriptCounter = 1; } return child; @@ -475,7 +458,7 @@ Evt* func_802C39F8(Evt* parentScript, Bytecode* nextLine, s32 newState) { child->parentScript = parentScript; child->childScript = NULL; child->priority = parentScript->priority; - child->id = gStaticScriptCounter++; + child->id = UniqueScriptCounter++; child->owner1.actorID = parentScript->owner1.actorID; child->owner2.npcID = parentScript->owner2.npcID; child->loopDepth = -1; @@ -484,7 +467,7 @@ Evt* func_802C39F8(Evt* parentScript, Bytecode* nextLine, s32 newState) { child->ptrSavedPos = NULL; child->array = parentScript->array; child->flagArray = parentScript->flagArray; - child->timeScale = gGlobalTimeSpace; + child->timeScale = GlobalTimeRate; child->frameCounter = 0.0f; child->unk_158 = 0; @@ -499,14 +482,14 @@ Evt* func_802C39F8(Evt* parentScript, Bytecode* nextLine, s32 newState) { } find_script_labels(child); - if (gIsUpdatingScripts) { + if (IsUpdatingScripts) { scriptListCount = gScriptListCount++; gScriptIndexList[scriptListCount] = curScriptIndex; gScriptIdList[scriptListCount] = child->id; } - if (gStaticScriptCounter == 0) { - gStaticScriptCounter = 1; + if (UniqueScriptCounter == 0) { + UniqueScriptCounter = 1; } suspend_frozen_scripts(child); @@ -547,7 +530,7 @@ Evt* func_802C3C10(Evt* script, Bytecode* line, s32 arg2) { script->childScript = NULL; script->frameCounter = 0.0f; script->unk_158 = 0; - script->timeScale = gGlobalTimeSpace; + script->timeScale = GlobalTimeRate; find_script_labels(script); suspend_frozen_scripts(script); @@ -569,7 +552,7 @@ Evt* restart_script(Evt* script) { script->frameCounter = 0; script->unk_158 = 0; - script->timeScale = gGlobalTimeSpace; + script->timeScale = GlobalTimeRate; find_script_labels(script); suspend_frozen_scripts(script); @@ -584,7 +567,7 @@ void update_scripts(void) { return; } - gIsUpdatingScripts = TRUE; + IsUpdatingScripts = TRUE; sort_scripts(); for (i = 0; i < gScriptListCount; i++) { @@ -603,7 +586,6 @@ void update_scripts(void) { do { if (script->frameCounter < 1.0) { // Continue to next script - do {} while (0); // TODO required to match break; }; @@ -620,7 +602,7 @@ void update_scripts(void) { } } } - gIsUpdatingScripts = FALSE; + IsUpdatingScripts = FALSE; } // Does nothing, is cursed @@ -744,15 +726,15 @@ void set_script_priority(Evt* script, s32 priority) { } void set_script_timescale(Evt* script, f32 timescale) { - script->timeScale = timescale * gGlobalTimeSpace; + script->timeScale = timescale * GlobalTimeRate; } void set_global_timespace(f32 timeScale) { - gGlobalTimeSpace = timeScale; + GlobalTimeRate = timeScale; } f32 get_global_timespace(void) { - return gGlobalTimeSpace; + return GlobalTimeRate; } void set_script_group(Evt* script, s32 groupFlags) { diff --git a/src/filemenu/filemenu_common.c b/src/filemenu/filemenu_common.c index 5e587c615d4..c88c7df3611 100644 --- a/src/filemenu/filemenu_common.c +++ b/src/filemenu/filemenu_common.c @@ -1087,7 +1087,7 @@ void filemenu_init(s32 arg0) { if (!fio_load_game(i)) { gSaveSlotHasData[i] = FALSE; } else { - gSaveSlotMetadata[i] = gCurrentSaveFile.metadata; + gFilesDisplayData[i] = gCurrentSaveFile.metadata; gSaveSlotHasData[i] = TRUE; } } @@ -1103,10 +1103,10 @@ void filemenu_init(s32 arg0) { filemenu_set_selected(menu, (gGameStatusPtr->saveSlot & 1) * 2, gGameStatusPtr->saveSlot >> 1); - panelIt = filemenu_menus; - for (i = 0; i < ARRAY_COUNT(filemenu_menus); i++, panelIt++) { - if ((*panelIt)->fpInit != NULL) { - (*panelIt)->fpInit((*panelIt)); + for (i = 0; i < ARRAY_COUNT(filemenu_menus); i++) { + osSyncPrintf("filemenu_init: i %d\n", i); // FIXME: this printf is required to avoid a crash for some nasty reason + if (filemenu_menus[i]->fpInit != NULL) { + filemenu_menus[i]->fpInit(filemenu_menus[i]); } } update_window_hierarchy(WINDOW_ID_PAUSE_DECRIPTION, 64); diff --git a/src/filemenu/filemenu_main.c b/src/filemenu/filemenu_main.c index 4dc2a2a8247..1e2c3ae8341 100644 --- a/src/filemenu/filemenu_main.c +++ b/src/filemenu/filemenu_main.c @@ -4,6 +4,8 @@ #include "audio/public.h" #include "fio.h" #include "game_modes.h" +#include "dx/config.h" +#include "dx/utils.h" extern HudScript HES_Spirit1; extern HudScript HES_Spirit2; @@ -345,6 +347,9 @@ void filemenu_draw_contents_title( s32 width, s32 height, s32 opacity, s32 darkening ) { + char strBuf[64]; + u8 msgBuf[64]; + s32 msgWidth; s32 msgIdx; s32 xOffset; s32 yOffset; @@ -381,6 +386,11 @@ void filemenu_draw_contents_title( } filemenu_draw_message(filemenu_get_menu_message(msgIdx), baseX + xOffset, baseY + yOffset, 255, 0, 0); + + sprintf(strBuf, "%s (v%d.%d.%d)", DX_MOD_NAME, DX_MOD_VER_MAJOR, DX_MOD_VER_MINOR, DX_MOD_VER_PATCH); + dx_string_to_msg(msgBuf, strBuf); + msgWidth = get_msg_width(msgBuf, 0); + filemenu_draw_message(msgBuf, (SCREEN_WIDTH - msgWidth) / 2, 245 - baseY, 255, 0, 0); } void filemenu_draw_contents_stereo( @@ -555,7 +565,7 @@ void filemenu_draw_contents_file_info(s32 fileIdx, return; } - if (gSaveSlotMetadata[fileIdx].timePlayed == 0) { + if (gFilesDisplayData[fileIdx].timePlayed == 0) { #if VERSION_PAL xOffset = D_filemenu_802508E4[gCurrentLanguage]; #else @@ -571,7 +581,7 @@ void filemenu_draw_contents_file_info(s32 fileIdx, xOffset = 34; #endif filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_LEVEL), baseX + xOffset, baseY + 10, 255, 0xA, 1); - temp_s3_2 = gSaveSlotMetadata[fileIdx].level; + temp_s3_2 = gFilesDisplayData[fileIdx].level; temp_s3 = temp_s3_2; draw_number(temp_s3 / 10, baseX + 79, baseY + 10 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_THIN, MSG_PAL_STANDARD, 255, DRAW_NUMBER_STYLE_MONOSPACE); draw_number(temp_s3 % 10, baseX + 88, baseY + 10 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_THIN, MSG_PAL_STANDARD, 255, DRAW_NUMBER_STYLE_MONOSPACE); @@ -582,7 +592,7 @@ void filemenu_draw_contents_file_info(s32 fileIdx, #endif filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PLAY_TIME), baseX + xOffset, baseY + 24, 255, 0xA, 1); - temp_s3_2 = gSaveSlotMetadata[fileIdx].timePlayed; + temp_s3_2 = gFilesDisplayData[fileIdx].timePlayed; if (temp_s3_2 > MAX_DISPLAYED_TIME) { temp_s3_2 = MAX_DISPLAYED_TIME; } @@ -597,7 +607,7 @@ void filemenu_draw_contents_file_info(s32 fileIdx, draw_number((temp_s3_2 / 3600) - (temp_s0_3 * 10), baseX + 109, baseY + 24 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_THIN, MSG_PAL_STANDARD, 255, DRAW_NUMBER_STYLE_MONOSPACE); for (i = 0; i < 7; i++) { - if (i < gSaveSlotMetadata[fileIdx].spiritsRescued) { + if (i < gFilesDisplayData[fileIdx].spiritsRescued) { id = filemenu_hudElemIDs[i]; } else { id = filemenu_hudElemIDs[i + 7]; @@ -637,8 +647,8 @@ void filemenu_draw_contents_file_title( tmp += D_filemenu_802508D4[gCurrentLanguage]; tmp += 6; filemenu_draw_file_name( - gSaveSlotMetadata[fileIdx].filename, - ARRAY_COUNT(gSaveSlotMetadata[fileIdx].filename), + gFilesDisplayData[fileIdx].filename, + ARRAY_COUNT(gFilesDisplayData[fileIdx].filename), baseX + tmp, baseY + 1, 255, 0, 1, 9); } @@ -662,8 +672,8 @@ void filemenu_draw_contents_file_title( } else { draw_number(fileIdx + 1, baseX + FILE_NUMBER_X, baseY + 1 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_THIN, MSG_PAL_WHITE, 255, DRAW_NUMBER_STYLE_MONOSPACE); filemenu_draw_file_name( - gSaveSlotMetadata[fileIdx].filename, - ARRAY_COUNT(gSaveSlotMetadata[fileIdx].filename), + gFilesDisplayData[fileIdx].filename, + ARRAY_COUNT(gFilesDisplayData[fileIdx].filename), baseX + FILE_NAME_X, baseY + 1, 255, 0, 1, 9); } } @@ -1149,7 +1159,7 @@ void filemenu_main_handle_input(MenuPanel* menu) { set_window_update(WINDOW_ID_FILEMENU_INFO, WINDOW_UPDATE_SHOW); set_window_update(WINDOW_ID_FILEMENU_YESNO_OPTIONS, WINDOW_UPDATE_HIDE); fio_load_game(filemenu_loadedFileIdx); - gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx]; + gFilesDisplayData[filemenu_iterFileIdx] = gFilesDisplayData[filemenu_loadedFileIdx]; fio_save_game(filemenu_iterFileIdx); gSaveSlotHasData[filemenu_iterFileIdx] = TRUE; } else { diff --git a/src/filemenu/filemenu_yesno.c b/src/filemenu/filemenu_yesno.c index 16e9deac884..cbf794d1a77 100644 --- a/src/filemenu/filemenu_yesno.c +++ b/src/filemenu/filemenu_yesno.c @@ -2,6 +2,7 @@ #include "filemenu.h" #include "fio.h" #include "game_modes.h" +#include "dx/config.h" #if VERSION_IQUE #define DELETE_FILE_DELETE_X 20 @@ -269,12 +270,12 @@ void filemenu_yesno_handle_input(MenuPanel* menu) { set_window_update(WINDOW_ID_FILEMENU_YESNO_OPTIONS, (s32)filemenu_update_hidden_name_confirm); slot = filemenu_menus[0]->selected; - for (i = 0; i < ARRAY_COUNT(gSaveSlotMetadata->filename); i++) { - gSaveSlotMetadata[slot].filename[i] = 0xF7; + for (i = 0; i < ARRAY_COUNT(gFilesDisplayData->filename); i++) { + gFilesDisplayData[slot].filename[i] = 0xF7; } - gSaveSlotMetadata[slot].level = 0; - gSaveSlotMetadata[slot].timePlayed = 0; - gSaveSlotMetadata[slot].spiritsRescued = 0; + gFilesDisplayData[slot].level = 0; + gFilesDisplayData[slot].timePlayed = 0; + gFilesDisplayData[slot].spiritsRescued = 0; fio_erase_game(slot); gSaveSlotHasData[slot] = FALSE; break; @@ -292,7 +293,7 @@ void filemenu_yesno_handle_input(MenuPanel* menu) { set_window_update(WINDOW_ID_FILEMENU_INFO, WINDOW_UPDATE_SHOW); set_window_update(WINDOW_ID_FILEMENU_YESNO_OPTIONS, (s32)filemenu_update_hidden_name_confirm); fio_load_game(filemenu_loadedFileIdx); - gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx]; + gFilesDisplayData[filemenu_iterFileIdx] = gFilesDisplayData[filemenu_loadedFileIdx]; fio_save_game(filemenu_iterFileIdx); gSaveSlotHasData[filemenu_iterFileIdx] = TRUE; break; @@ -309,21 +310,20 @@ void filemenu_yesno_handle_input(MenuPanel* menu) { : SCREEN_HEIGHT / 2) - gWindows[WINDOW_ID_FILEMENU_INFO].height / 2; set_window_update(WINDOW_ID_FILEMENU_INFO, WINDOW_UPDATE_SHOW); set_window_update(WINDOW_ID_FILEMENU_YESNO_OPTIONS, (s32)filemenu_update_hidden_name_confirm); - gSaveSlotMetadata[filemenu_menus[0]->selected] = gSaveSlotMetadata[gGameStatusPtr->saveSlot]; + gFilesDisplayData[filemenu_menus[0]->selected] = gFilesDisplayData[gGameStatusPtr->saveSlot]; fio_save_game(filemenu_menus[0]->selected); gSaveSlotHasData[filemenu_menus[0]->selected] = TRUE; break; case 2: clear_player_data(); clear_saved_variables(); - gGameStatusPtr->areaID = AREA_KMR; - gGameStatusPtr->mapID = 11; //TODO hardcoded area/map IDs - gGameStatusPtr->entryID = 0; - evt_set_variable(NULL, GB_StoryProgress, STORY_INTRO); + get_map_IDs_by_name_checked(NEW_GAME_MAP_ID, &gGameStatusPtr->areaID, &gGameStatusPtr->mapID); + gGameStatusPtr->entryID = NEW_GAME_ENTRY_ID; + evt_set_variable(NULL, GB_StoryProgress, NEW_GAME_STORY_PROGRESS); slot2 = filemenu_menus[0]->selected; - for (i = 0; i < ARRAY_COUNT(gSaveSlotMetadata->filename); i++) { - gSaveSlotMetadata[slot2].filename[i] = filemenu_filename[i]; + for (i = 0; i < ARRAY_COUNT(gFilesDisplayData->filename); i++) { + gFilesDisplayData[slot2].filename[i] = filemenu_filename[i]; } fio_save_game(slot2); gSaveSlotHasData[slot2] = TRUE; diff --git a/src/fio.c b/src/fio.c index 8fdde87ec8a..5c9ad7e0d3e 100644 --- a/src/fio.c +++ b/src/fio.c @@ -1,6 +1,9 @@ #include "fio.h" #include "PR/os_flash.h" #include "gcc/string.h" +#include "dx/versioning.h" +#include "dx/config.h" +#include "dx/debug_menu.h" typedef struct SaveInfo { /* 0x08 */ s32 slot; @@ -19,8 +22,6 @@ SHIFT_BSS SaveData gCurrentSaveFile; char MagicSaveString[] = "Mario Story 006"; -void fio_deserialize_state(void); -void fio_serialize_state(void); b32 fio_read_flash(s32 pageNum, void* readBuffer, u32 numBytes); b32 fio_write_flash(s32 pageNum, s8* readBuffer, u32 numBytes); void fio_erase_flash(s32 pageNum); @@ -49,12 +50,12 @@ s32 get_spirits_rescued(void) { } s32 fio_calc_globals_checksum(void) { - u32 sum = 0; s32* it = (s32*)&gSaveGlobals; + u32 sum = 0; u32 i; - for (i = 0; i < sizeof(gSaveGlobals) / sizeof(*it); i++, it++) { - sum += *it; + for (i = 0; i < sizeof(gSaveGlobals) / sizeof(*it); i++) { + sum += *it++; } return sum; } @@ -103,12 +104,12 @@ b32 fio_save_globals(void) { } s32 fio_calc_file_checksum(SaveData* saveData) { - u32 sum = 0; s32* it = (s32*)saveData; + u32 sum = 0; u32 i; - for (i = 0; i < sizeof(*saveData) / sizeof(*it); i++, it++) { - sum += *it; + for (i = 0; i < sizeof(*saveData) / sizeof(*it); i++) { + sum += *it++; } return sum; } @@ -163,17 +164,40 @@ b32 fio_fetch_saved_file_info(void) { return TRUE; } +void print_save_data(SaveData* save) { + debug_printf("SaveData:\n"); + debug_printf(" magicString: %s\n", save->magicString); + debug_printf(" modName: %s\n", save->modName); + debug_printf(" crc1: %x\n", save->crc1); + debug_printf(" crc2: %x\n", save->crc2); + debug_printf(" saveSlot: %d\n", save->saveSlot); + debug_printf(" saveCount: %d\n", save->saveCount); + debug_printf(" areaID: %d\n", save->areaID); + debug_printf(" mapID: %d\n", save->mapID); + debug_printf(" entryID: %d\n", save->entryID); + debug_printf(" ...\n"); + debug_printf(" savePos: %d, %d, %d\n", save->savePos.x, save->savePos.y, save->savePos.z); + debug_printf(" metadata:\n"); + debug_printf(" spiritsRescued: %d\n", save->metadata.spiritsRescued); + debug_printf(" timePlayed: %d\n", save->metadata.timePlayed); + debug_printf(" level: %d\n", save->metadata.level); + debug_printf(" filename: %s\n", save->metadata.filename); +} + b32 fio_load_game(s32 saveSlot) { gGameStatusPtr->saveSlot = saveSlot; fio_fetch_saved_file_info(); - fio_read_flash(LogicalSaveInfo[saveSlot].slot, &gCurrentSaveFile, sizeof(SaveData)); + fio_read_flash(LogicalSaveInfo[saveSlot].slot, &gCurrentSaveFile, MAX(sizeof(VanillaSaveData), sizeof(SaveData))); if (strcmp(gCurrentSaveFile.magicString, MagicSaveString) == 0) { if (gGameStatusPtr->saveCount < gCurrentSaveFile.saveCount) { gGameStatusPtr->saveCount = gCurrentSaveFile.saveCount; } - fio_deserialize_state(); + if (!fio_deserialize_state()) { + return FALSE; + } + gFilesDisplayData[gGameStatusPtr->saveSlot] = gCurrentSaveFile.metadata; return TRUE; } return FALSE; @@ -186,8 +210,22 @@ void fio_save_game(s32 saveSlot) { fio_serialize_state(); + gFilesDisplayData[gGameStatusPtr->saveSlot].level = gPlayerData.level; + gFilesDisplayData[gGameStatusPtr->saveSlot].spiritsRescued = get_spirits_rescued(); + gFilesDisplayData[gGameStatusPtr->saveSlot].timePlayed = gPlayerData.frameCounter; + + gCurrentSaveFile.metadata = gFilesDisplayData[gGameStatusPtr->saveSlot]; + strcpy(gCurrentSaveFile.magicString, MagicSaveString); + // adding 1 accounts for null terminator + ASSERT(1 + strlen(DX_MOD_NAME) < ARRAY_COUNT(gCurrentSaveFile.modName)); + + strcpy(gCurrentSaveFile.modName, DX_MOD_NAME); + gCurrentSaveFile.majorVersion = DX_MOD_VER_MAJOR; + gCurrentSaveFile.minorVersion = DX_MOD_VER_MINOR; + gCurrentSaveFile.patchVersion = DX_MOD_VER_PATCH; + gCurrentSaveFile.saveSlot = saveSlot; gGameStatusPtr->saveCount++; gCurrentSaveFile.saveCount = gGameStatusPtr->saveCount; @@ -213,69 +251,6 @@ void fio_erase_game(s32 saveSlot) { } } -void fio_deserialize_state(void) { - SaveData* saveData = &gCurrentSaveFile; - s32 i, j; - - gPlayerData = saveData->player; - - gGameStatusPtr->areaID = saveData->areaID; - gGameStatusPtr->mapID = saveData->mapID; - gGameStatusPtr->entryID = saveData->entryID; - gGameStatusPtr->savedPos.x = saveData->savePos.x; - gGameStatusPtr->savedPos.y = saveData->savePos.y; - gGameStatusPtr->savedPos.z = saveData->savePos.z; - - for (i = 0; i < ARRAY_COUNT(gCurrentEncounter.defeatFlags[0]); i++) { - for (j = 0; j < ARRAY_COUNT(gCurrentEncounter.defeatFlags); j++) { - gCurrentEncounter.defeatFlags[j][i] = saveData->enemyDefeatFlags[j][i]; - } - } - - gGameStatusPtr->debugEnemyContact = DEBUG_CONTACT_NONE; - gGameStatusPtr->debugUnused1 = FALSE; - gGameStatusPtr->debugUnused2 = FALSE; - gGameStatusPtr->musicEnabled = TRUE; - - gSaveSlotMetadata[gGameStatusPtr->saveSlot] = saveData->metadata; -} - -void func_8002B608(void) { - gGameStatusPtr->entryID = 10; - fio_serialize_state(); -} - -void fio_serialize_state(void) { - SaveData* saveData = &gCurrentSaveFile; - s32 i, j; - - saveData->player = gPlayerData; - - saveData->areaID = gGameStatusPtr->areaID; - saveData->mapID = gGameStatusPtr->mapID; - saveData->entryID = gGameStatusPtr->entryID; - saveData->savePos.x = gGameStatusPtr->savedPos.x; - saveData->savePos.y = gGameStatusPtr->savedPos.y; - saveData->savePos.z = gGameStatusPtr->savedPos.z; - - for (i = 0; i < ARRAY_COUNT(gCurrentEncounter.defeatFlags[0]); i++) { - for (j = 0; j < ARRAY_COUNT(gCurrentEncounter.defeatFlags); j++) { - saveData->enemyDefeatFlags[j][i] = gCurrentEncounter.defeatFlags[j][i]; - } - } - - saveData->debugEnemyContact = gGameStatusPtr->debugEnemyContact; - saveData->debugUnused1 = gGameStatusPtr->debugUnused1; - saveData->debugUnused2 = gGameStatusPtr->debugUnused2; - saveData->musicEnabled = gGameStatusPtr->musicEnabled; - - gSaveSlotMetadata[gGameStatusPtr->saveSlot].level = gPlayerData.level; - gSaveSlotMetadata[gGameStatusPtr->saveSlot].spiritsRescued = get_spirits_rescued(); - gSaveSlotMetadata[gGameStatusPtr->saveSlot].timePlayed = gPlayerData.frameCounter; - - saveData->metadata = gSaveSlotMetadata[gGameStatusPtr->saveSlot]; -} - void fio_init_flash(void) { osFlashInit(); } diff --git a/src/fio.h b/src/fio.h index 78319d94118..ae179a913a7 100644 --- a/src/fio.h +++ b/src/fio.h @@ -9,7 +9,7 @@ b32 fio_load_game(s32 saveSlot); void fio_save_game(s32 saveSlot); void fio_erase_game(s32 saveSlot); -extern SaveMetadata gSaveSlotMetadata[4]; +extern FileDisplayData gFilesDisplayData[4]; extern u8 gSaveSlotHasData[4]; extern SaveGlobals gSaveGlobals; diff --git a/src/game_modes.c b/src/game_modes.c index db9fa8e8ad4..52c0b4454ae 100644 --- a/src/game_modes.c +++ b/src/game_modes.c @@ -1,241 +1,168 @@ #include "game_modes.h" -s32 D_80077420[] = { - 0x000000E4, 0x000000E1, 0x000000EB, 0x000000EF, 0x000000F6, 0x0000010A, 0x0000010C, 0x00000121, 0x00000122, - 0x00000123, 0x00000118, 0x0000010E, 0x00000131, 0x0000012E, 0x0000012F, 0x000000E0, 0x000000EE, 0x000000F0, - 0x00000109, 0x0000010B, 0x00000107, 0x000000E8, 0x00000117, 0x00000108, 0x00000124, 0x00000125, 0x00000126, - 0x0000010F, 0x0000012B, 0x0000012C, 0x000000E9, 0x00000106, 0x00000143, 0x000000ED, 0x00000129, 0x0000012A, - 0x000000E7, 0x000000F8, 0x000000FF, 0x00000140, 0x00000105, 0x00000110, 0x00000119, 0x000000E3, 0x00000116, - 0x00000113, 0x000000F4, 0x000000E2, 0x000000F5, 0x00000115, 0x00000101, 0x00000102, 0x0000012D, 0x00000111, - 0x0000010D, 0x00000112, 0x000000F9, 0x00000130, 0x000000FB, 0x000000FA, 0x000000EC, 0x000000E5, 0x00000150, - 0x000000F2, 0x00000100, 0x000000F1, 0x00000114, 0x000000F7, 0x000000F3, 0x00000145, 0x00000146, 0x00000147, - 0x00000148, 0x00000149, 0x00000104, 0x000000FC, 0x00000103, 0x0000011A, 0x0000011B, 0x000000FD, 0x00000144, - 0x0000011E, 0x000000FE, 0x0000011F, 0x0000011D, 0x0000011C, 0x000000E6, 0x00000120, 0x00000080, 0x00000081, - 0x00000082, 0x00000084, 0x00000083, 0x00000086, 0x00000085, 0x00000088, 0x0000008B, 0x0000008A, 0x0000008C, - 0x0000008E, 0x00000095, 0x0000008D, 0x00000089, 0x0000009B, 0x0000009E, 0x0000009F, 0x000000A0, 0x000000A1, - 0x0000009D, 0x0000009C, 0x000000A4, 0x000000A3, 0x000000A2, 0x00000093, 0x00000094, 0x000000A5, 0x000000A6, - 0x000000A7, 0x000000A8, 0x000000A9, 0x000000AA, 0x000000AB, 0x000000AC, 0x000000AD, 0x000000AE, 0x000000AF, - 0x0000008F, 0x00000090, 0x00000091, 0x00000092, 0x0000009A, 0x00000098, 0x00000096, 0x00000097, 0x00000087, - 0x000000B0, 0x000000B1, 0x000000B2, 0x000000B3, 0x000000B4, 0x000000B5, 0x000000B6, 0x000000B9, 0x000000B8, - 0x000000B7, 0x000000BA, 0x000000BD, 0x000000BB, 0x000000BE, 0x000000BF, 0x000000BC, 0x000000C0, 0x000000C1, - 0x000000C2, 0x000000C3, 0x000000C4, 0x000000C5, 0x000000C6, 0x000000C7, 0x000000C8, 0x000000C9, 0x000000CA, - 0x000000CB, 0x000000CC, 0x000000CD, 0x000000CE, 0x000000CF, 0x000000D0, 0x000000D1, 0x000000D2, 0x000000D3, - 0x000000D4, 0x000000D5, 0x000000D6, 0x000000D7, 0x000000D8, 0x000000D9, 0x000000DA, -}; - -// These GameModeIncomplete are used as the struct GameMode. As GameModeIncomplete is 0x14 long and GameMode is 0x18 long, the last element -// and first element of the next struct are shared in data. - -typedef struct GameModeIncomplete { - /* 0x00 */ u16 flags; - /* 0x04 */ void (*init)(void); - /* 0x08 */ void (*step)(void); - /* 0x0C */ UNK_FUN_PTR(unusedFunc); - /* 0x10 */ void (*render)(void); - #ifdef AVOID_UB - /* 0x14 */ void (*renderAux)(void); ///< @see state_render_frontUI - #endif -} GameModeIncomplete; // size = 0x14 - -GameModeIncomplete GameModeStartup = { - MODE_FLAG_NONE, - state_init_startup, - state_step_startup, - NULL, - state_drawUI_startup, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeLogos = { - MODE_FLAG_NONE, - state_init_logos, - state_step_logos, - NULL, - state_drawUI_logos, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeTitleScreen = { - MODE_FLAG_NONE, - state_init_title_screen, - state_step_title_screen, - NULL, - state_drawUI_title_screen, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeEnterDemoWorld = { - MODE_FLAG_NONE, - state_init_enter_demo, - state_step_enter_world, - NULL, - state_drawUI_enter_world, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeChangeMap = { - MODE_FLAG_NONE, - state_init_change_map, - state_step_change_map, - NULL, - state_drawUI_change_map, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeGameOver = { - MODE_FLAG_NONE, - state_init_game_over, - state_step_game_over, - NULL, - state_drawUI_game_over, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeEnterWorld = { - MODE_FLAG_NONE, - state_init_enter_world, - state_step_enter_world, - NULL, - state_drawUI_enter_world, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeWorld = { - MODE_FLAG_NONE, - state_init_world, - state_step_world, - NULL, - state_drawUI_world, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeBattle = { - MODE_FLAG_NONE, - state_init_battle, - state_step_battle, - NULL, - state_drawUI_battle, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeEndBattle = { - MODE_FLAG_NONE, - state_init_end_battle, - state_step_end_battle, - NULL, - state_drawUI_end_battle, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModePause = { - MODE_FLAG_NONE, - state_init_pause, - state_step_pause, - NULL, - state_drawUI_pause, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeUnpause = { - MODE_FLAG_NONE, - state_init_unpause, - state_step_unpause, - NULL, - state_drawUI_unpause, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeLanguageSelect = { - MODE_FLAG_NONE, - state_init_language_select, - state_step_language_select, - NULL, - state_drawUI_language_select, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeEndLanguageSelect = { - MODE_FLAG_NONE, - state_init_exit_language_select, - state_step_exit_language_select, - NULL, - state_drawUI_exit_language_select, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeFileSelect = { - MODE_FLAG_NONE, - state_init_file_select, - state_step_file_select, - NULL, - state_drawUI_file_select, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeEndFileSelect = { - MODE_FLAG_NONE, - state_init_exit_file_select, - state_step_exit_file_select, - NULL, - state_drawUI_exit_file_select, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeIntro = { - MODE_FLAG_NONE, - state_init_intro, - state_step_intro, - NULL, - state_drawUI_intro, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameModeIncomplete GameModeDemo = { - MODE_FLAG_NONE, - state_init_demo, - state_step_demo, - NULL, - state_drawUI_demo, - #ifdef AVOID_UB - NULL, - #endif -}; - -GameMode* gameModeMap[] = { +GameMode GameModeStartup = { + .flags = MODE_FLAG_NONE, + .init = state_init_startup, + .step = state_step_startup, + .render = state_drawUI_startup, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeLogos = { + .flags = MODE_FLAG_NONE, + .init = state_init_logos, + .step = state_step_logos, + .render = state_drawUI_logos, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeTitleScreen = { + .flags = MODE_FLAG_NONE, + .init = state_init_title_screen, + .step = state_step_title_screen, + .render = state_drawUI_title_screen, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeEnterDemoWorld = { + .flags = MODE_FLAG_NONE, + .init = state_init_enter_demo, + .step = state_step_enter_world, + .render = state_drawUI_enter_world, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeChangeMap = { + .flags = MODE_FLAG_NONE, + .init = state_init_change_map, + .step = state_step_change_map, + .render = state_drawUI_change_map, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeGameOver = { + .flags = MODE_FLAG_NONE, + .init = state_init_game_over, + .step = state_step_game_over, + .render = state_drawUI_game_over, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeEnterWorld = { + .flags = MODE_FLAG_NONE, + .init = state_init_enter_world, + .step = state_step_enter_world, + .render = state_drawUI_enter_world, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeWorld = { + .flags = MODE_FLAG_NONE, + .init = state_init_world, + .step = state_step_world, + .render = state_drawUI_world, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeBattle = { + .flags = MODE_FLAG_NONE, + .init = state_init_battle, + .step = state_step_battle, + .render = state_drawUI_battle, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeEndBattle = { + .flags = MODE_FLAG_NONE, + .init = state_init_end_battle, + .step = state_step_end_battle, + .render = state_drawUI_end_battle, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModePause = { + .flags = MODE_FLAG_NONE, + .init = state_init_pause, + .step = state_step_pause, + .render = state_drawUI_pause, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeUnpause = { + .flags = MODE_FLAG_NONE, + .init = state_init_unpause, + .step = state_step_unpause, + .render = state_drawUI_unpause, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeLanguageSelect = { + .flags = MODE_FLAG_NONE, + .init = state_init_language_select, + .step = state_step_language_select, + .render = state_drawUI_language_select, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeEndLanguageSelect = { + .flags = MODE_FLAG_NONE, + .init = state_init_exit_language_select, + .step = state_step_exit_language_select, + .render = state_drawUI_exit_language_select, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeFileSelect = { + .flags = MODE_FLAG_NONE, + .init = state_init_file_select, + .step = state_step_file_select, + .render = state_drawUI_file_select, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeEndFileSelect = { + .flags = MODE_FLAG_NONE, + .init = state_init_exit_file_select, + .step = state_step_exit_file_select, + .render = state_drawUI_exit_file_select, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeIntro = { + .flags = MODE_FLAG_NONE, + .init = state_init_intro, + .step = state_step_intro, + .render = state_drawUI_intro, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode GameModeDemo = { + .flags = MODE_FLAG_NONE, + .init = state_init_demo, + .step = state_step_demo, + .render = state_drawUI_demo, + .renderAux = NULL, + .unusedFunc = NULL, +}; + +GameMode* GameModeMap[] = { [GAME_MODE_STARTUP] (GameMode*) &GameModeStartup, [GAME_MODE_LOGOS] (GameMode*) &GameModeLogos, [GAME_MODE_TITLE_SCREEN] (GameMode*) &GameModeTitleScreen, @@ -260,7 +187,7 @@ SHIFT_BSS s16 CurGameMode; void set_game_mode(s16 mode) { CurGameMode = mode; - set_game_mode_slot(0, gameModeMap[mode]); + set_game_mode_slot(0, GameModeMap[mode]); } s16 get_game_mode(void) { diff --git a/src/global_hud_scripts.c b/src/global_hud_scripts.c index b22a8d44c24..6ef6a23de76 100644 --- a/src/global_hud_scripts.c +++ b/src/global_hud_scripts.c @@ -1973,27 +1973,27 @@ HudScript HES_PartnerBDisabled = HES_TEMPLATE_CI_ENUM_SIZE(ui_partner11_disabled HudScript HES_StatusTimes = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_times, 8, 8); -HudScript HES_StatusSlash = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_slash, 8, 16); +extern HudScript HES_StatusSlash; -HudScript HES_StatusDigit0 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_0, 16, 16); +extern HudScript HES_StatusDigit0; -HudScript HES_StatusDigit1 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_1, 16, 16); +extern HudScript HES_StatusDigit1; -HudScript HES_StatusDigit2 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_2, 16, 16); +extern HudScript HES_StatusDigit2; -HudScript HES_StatusDigit3 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_3, 16, 16); +extern HudScript HES_StatusDigit3; -HudScript HES_StatusDigit4 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_4, 16, 16); +extern HudScript HES_StatusDigit4; -HudScript HES_StatusDigit5 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_5, 16, 16); +extern HudScript HES_StatusDigit5; -HudScript HES_StatusDigit6 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_6, 16, 16); +extern HudScript HES_StatusDigit6; -HudScript HES_StatusDigit7 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_7, 16, 16); +extern HudScript HES_StatusDigit7; -HudScript HES_StatusDigit8 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_8, 16, 16); +extern HudScript HES_StatusDigit8; -HudScript HES_StatusDigit9 = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_9, 16, 16); +extern HudScript HES_StatusDigit9; HudScript HES_StatusHP = HES_TEMPLATE_CI_ENUM_SIZE(ui_status_text_hp, 16, 16); diff --git a/src/hud_element.c b/src/hud_element.c index ee0ab4dfb71..4fda47150fb 100644 --- a/src/hud_element.c +++ b/src/hud_element.c @@ -1159,10 +1159,7 @@ s32 hud_element_update(HudElement* hudElement) { hudElement->readPos = (HudScript*)nextPos; if (hudElement->flags & HUD_ELEMENT_FLAG_TRANSFORM) { hudTransform->pivot.x = arg1; - // TODO find better match - do { - hudTransform->pivot.y = arg2; - } while (0); + hudTransform->pivot.y = arg2; } return TRUE; case HUD_ELEMENT_OP_op_16: @@ -1235,14 +1232,10 @@ void render_hud_elements_backUI(void) { offsetX = -drawSizeX / 2; offsetY = -drawSizeY / 2; } else { - // TODO find better match - do { drawSizeX = hudElement->customDrawSize.x; drawSizeY = hudElement->customDrawSize.y; offsetX = -drawSizeX / 2; - } while (0); offsetY = -drawSizeY / 2; - } } else { drawSizeX = hudElement->sizeX; @@ -1350,14 +1343,10 @@ void render_hud_elements_frontUI(void) { offsetX = -drawSizeX / 2; offsetY = -drawSizeY / 2; } else { - // TODO find better match - do { drawSizeX = hudElement->customDrawSize.x; drawSizeY = hudElement->customDrawSize.y; offsetX = -drawSizeX / 2; - } while (0); offsetY = -drawSizeY / 2; - } } else { drawSizeX = hudElement->sizeX; @@ -1621,135 +1610,130 @@ void render_transformed_hud_elements(void) { s32 flags; s32 z1, z2; - // TODO fix this terrible match - do { - do { - count = 0; - if (gCurrentCamID == CAM_3) { - for (i = 0; i < ARRAY_COUNT(*gHudElements); i++) { - hudElement = (*gHudElements)[i]; - if (hudElement == NULL) { - continue; - } + count = 0; + if (gCurrentCamID == CAM_3) { + for (i = 0; i < ARRAY_COUNT(*gHudElements); i++) { + hudElement = (*gHudElements)[i]; + if (hudElement == NULL) { + continue; + } - flags = hudElement->flags; - if (flags == 0 || flags & HUD_ELEMENT_FLAG_DISABLED) { - continue; - } + flags = hudElement->flags; + if (flags == 0 || flags & HUD_ELEMENT_FLAG_DISABLED) { + continue; + } - if (flags & (HUD_ELEMENT_FLAG_200000 | HUD_ELEMENT_FLAG_10000000)) { - continue; - } + if (flags & (HUD_ELEMENT_FLAG_200000 | HUD_ELEMENT_FLAG_10000000)) { + continue; + } - if (!(flags & HUD_ELEMENT_FLAG_TRANSFORM)) { - continue; - } + if (!(flags & HUD_ELEMENT_FLAG_TRANSFORM)) { + continue; + } - if (flags & HUD_ELEMENT_FLAG_40000000) { - continue; - } + if (flags & HUD_ELEMENT_FLAG_40000000) { + continue; + } - if (flags & HUD_ELEMENT_FLAG_FRONTUI || hudElement->drawSizePreset < 0 || flags & HUD_ELEMENT_FLAG_80) { - continue; - } + if (flags & HUD_ELEMENT_FLAG_FRONTUI || hudElement->drawSizePreset < 0 || flags & HUD_ELEMENT_FLAG_80) { + continue; + } - // add element to list - sortedElements[count++] = i; - } + // add element to list + sortedElements[count++] = i; + } - if (count != 0) { - for (i = 0; i < count - 1; i++) { - for (j = i + 1; j < count; j++) { - el1 = sortedElements[i]; - el2 = sortedElements[j]; - tempOffsetZ = (*gHudElements)[el1]->worldPosOffset.z; - do {} while (0); - if (tempOffsetZ < (*gHudElements)[el2]->worldPosOffset.z) { - sortedElements[i] = el2; - sortedElements[j] = el1; - } - } - } + if (count != 0) { + for (i = 0; i < count - 1; i++) { + for (j = i + 1; j < count; j++) { + el1 = sortedElements[i]; + el2 = sortedElements[j]; + tempOffsetZ = (*gHudElements)[el1]->worldPosOffset.z; - gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, 12, 20, 308, 220); - gDPPipeSync(gMainGfxPos++); - gSPClearGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH); - gSPSetGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH); - gSPSetLights1(gMainGfxPos++, HudElementLights); - gSPTexture(gMainGfxPos++, -1, -1, 0, G_TX_RENDERTILE, G_ON); - gDPSetAlphaCompare(gMainGfxPos++, G_AC_NONE); - gSPSetOtherMode(gMainGfxPos++, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE); - - for (i = 0; i < count; i++) { - render_hud_element((*gHudElements)[sortedElements[i]]); + if (tempOffsetZ < (*gHudElements)[el2]->worldPosOffset.z) { + sortedElements[i] = el2; + sortedElements[j] = el1; } } } - count = 0; - if (gCurrentCamID == CAM_BATTLE) { - for (i = 0; i < ARRAY_COUNT(*gHudElements); i++) { - hudElement = (*gHudElements)[i]; - if (hudElement == NULL) { - continue; - } + gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, 12, 20, 308, 220); + gDPPipeSync(gMainGfxPos++); + gSPClearGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH); + gSPSetGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH); + gSPSetLights1(gMainGfxPos++, HudElementLights); + gSPTexture(gMainGfxPos++, -1, -1, 0, G_TX_RENDERTILE, G_ON); + gDPSetAlphaCompare(gMainGfxPos++, G_AC_NONE); + gSPSetOtherMode(gMainGfxPos++, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE); + + for (i = 0; i < count; i++) { + render_hud_element((*gHudElements)[sortedElements[i]]); + } + } + } - flags = hudElement->flags; - if (flags == 0 || flags & HUD_ELEMENT_FLAG_DISABLED) { - continue; - } + count = 0; + if (gCurrentCamID == CAM_BATTLE) { + for (i = 0; i < ARRAY_COUNT(*gHudElements); i++) { + hudElement = (*gHudElements)[i]; + if (hudElement == NULL) { + continue; + } - if (flags & (HUD_ELEMENT_FLAG_200000 | HUD_ELEMENT_FLAG_10000000)) { - continue; - } + flags = hudElement->flags; + if (flags == 0 || flags & HUD_ELEMENT_FLAG_DISABLED) { + continue; + } - if (!(flags & HUD_ELEMENT_FLAG_TRANSFORM)) { - continue; - } + if (flags & (HUD_ELEMENT_FLAG_200000 | HUD_ELEMENT_FLAG_10000000)) { + continue; + } - // different from CAM_3 pass - if (!(flags & HUD_ELEMENT_FLAG_40000000)) { - continue; - } + if (!(flags & HUD_ELEMENT_FLAG_TRANSFORM)) { + continue; + } - if (flags & HUD_ELEMENT_FLAG_FRONTUI || hudElement->drawSizePreset < 0 || flags & HUD_ELEMENT_FLAG_80) { - continue; - } + // different from CAM_3 pass + if (!(flags & HUD_ELEMENT_FLAG_40000000)) { + continue; + } - // add element to list - sortedElements[count++] = i; - } + if (flags & HUD_ELEMENT_FLAG_FRONTUI || hudElement->drawSizePreset < 0 || flags & HUD_ELEMENT_FLAG_80) { + continue; + } - if (count != 0) { - for (i = 0; i < count - 1; i++) { - for (j = i + 1; j < count; j++) { - el1 = sortedElements[i]; - el2 = sortedElements[j]; - tempOffsetZ = (*gHudElements)[el1]->worldPosOffset.z; - do {} while (0); - if ((*gHudElements)[el1]->worldPosOffset.z < (*gHudElements)[el2]->worldPosOffset.z) { - sortedElements[i] = el2; - sortedElements[j] = el1; - } - } - } + // add element to list + sortedElements[count++] = i; + } + + if (count != 0) { + for (i = 0; i < count - 1; i++) { + for (j = i + 1; j < count; j++) { + el1 = sortedElements[i]; + el2 = sortedElements[j]; + tempOffsetZ = (*gHudElements)[el1]->worldPosOffset.z; - gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, 12, 20, 308, 220); - gDPPipeSync(gMainGfxPos++); - gSPClearGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH); - gSPSetGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH); - gSPSetLights1(gMainGfxPos++, HudElementLights); - gSPTexture(gMainGfxPos++, -1, -1, 0, G_TX_RENDERTILE, G_ON); - gDPSetAlphaCompare(gMainGfxPos++, G_AC_NONE); - gSPSetOtherMode(gMainGfxPos++, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE); - - for (i = 0; i < count; i++) { - render_hud_element((*gHudElements)[sortedElements[i]]); + if ((*gHudElements)[el1]->worldPosOffset.z < (*gHudElements)[el2]->worldPosOffset.z) { + sortedElements[i] = el2; + sortedElements[j] = el1; } } } - } while (0); - } while (0); + + gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, 12, 20, 308, 220); + gDPPipeSync(gMainGfxPos++); + gSPClearGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH); + gSPSetGeometryMode(gMainGfxPos++, G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH); + gSPSetLights1(gMainGfxPos++, HudElementLights); + gSPTexture(gMainGfxPos++, -1, -1, 0, G_TX_RENDERTILE, G_ON); + gDPSetAlphaCompare(gMainGfxPos++, G_AC_NONE); + gSPSetOtherMode(gMainGfxPos++, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 18, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE); + + for (i = 0; i < count; i++) { + render_hud_element((*gHudElements)[sortedElements[i]]); + } + } + } } void func_80143C48(s32 elemID, s32 arg1, s32 camID) { @@ -1903,10 +1887,8 @@ void draw_hud_element_internal(s32 id, s32 clipMode) { drawSizeY = elem->sizeY; } - do { - offsetX = -drawSizeX / 2; - offsetY = -drawSizeY / 2; - } while (0); // required to match + offsetX = -drawSizeX / 2; + offsetY = -drawSizeY / 2; if (!(elem->flags & HUD_ELEMENT_FLAG_REPEATED)) { if (elem->flags & HUD_ELEMENT_FLAG_DROP_SHADOW) { diff --git a/src/imgfx.c b/src/imgfx.c index cd5f7b045ef..a6be3805f5f 100644 --- a/src/imgfx.c +++ b/src/imgfx.c @@ -1872,15 +1872,15 @@ void imgfx_mesh_make_wavy(ImgFXState* state) { //TODO find better match v1 = (Vtx*)((state->firstVtxIdx + i) * sizeof(Vtx) + (s32)imgfx_vtxBuf); vx = v1->v.ob[0]; - v1->v.ob[0] = (vx + (sin_rad(angle1) * state->ints.wavy.mag.x)); /// @bug? should be sin_deg? + v1->v.ob[0] = (vx + (sin_deg(angle1) * state->ints.wavy.mag.x)); v2 = (Vtx*)((state->firstVtxIdx + i) * sizeof(Vtx) + (s32)imgfx_vtxBuf); vy = v2->v.ob[1]; - v2->v.ob[1] = (vy + (sin_rad(angle2) * state->ints.wavy.mag.y)); + v2->v.ob[1] = (vy + (sin_deg(angle2) * state->ints.wavy.mag.y)); v3 = (Vtx*)((state->firstVtxIdx + i) * sizeof(Vtx) + (s32)imgfx_vtxBuf); vz = v3->v.ob[2]; - v3->v.ob[2] = (vz + (sin_rad(angle3) * state->ints.wavy.mag.z)); + v3->v.ob[2] = (vz + (sin_deg(angle3) * state->ints.wavy.mag.z)); angleInc++; if (i % (state->subdivX + 1) == 0) { diff --git a/src/input.c b/src/input.c index 07e53963018..36b903a8789 100644 --- a/src/input.c +++ b/src/input.c @@ -210,35 +210,34 @@ void update_input(void) { gGameStatusPtr->curButtons[0] = buttons; gGameStatusPtr->pressedButtons[0] = gGameStatusPtr->curButtons[0] ^ gGameStatusPtr->prevButtons[0]; gGameStatusPtr->pressedButtons[0] &= gGameStatusPtr->curButtons[0]; - do { - if (gGameStatusPtr->curButtons[0] == 0) { - gGameStatusPtr->heldButtons[0] = 0; - } else if (gGameStatusPtr->prevButtons[0] != gGameStatusPtr->curButtons[0]) { - gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0]; - gGameStatusPtr->unk_60 = -1; - gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0] ^ gGameStatusPtr->prevButtons[0]; - gGameStatusPtr->heldButtons[0] &= gGameStatusPtr->curButtons[0]; - gGameStatusPtr->unk_58 = gGameStatusPtr->unk_48[0]; + + if (gGameStatusPtr->curButtons[0] == 0) { + gGameStatusPtr->heldButtons[0] = 0; + } else if (gGameStatusPtr->prevButtons[0] != gGameStatusPtr->curButtons[0]) { + gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0]; + gGameStatusPtr->unk_60 = -1; + gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0] ^ gGameStatusPtr->prevButtons[0]; + gGameStatusPtr->heldButtons[0] &= gGameStatusPtr->curButtons[0]; + gGameStatusPtr->unk_58 = gGameStatusPtr->unk_48[0]; + } else { + if (gGameStatusPtr->unk_60 >= 0) { + gGameStatusPtr->unk_60--; + if (gGameStatusPtr->unk_60 != 0) { + gGameStatusPtr->heldButtons[0] = 0; + } else { + gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0]; + gGameStatusPtr->unk_60 = gGameStatusPtr->unk_50[0]; + } } else { - if (gGameStatusPtr->unk_60 >= 0) { - gGameStatusPtr->unk_60--; - if (gGameStatusPtr->unk_60 != 0) { - gGameStatusPtr->heldButtons[0] = 0; - } else { - gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0]; - gGameStatusPtr->unk_60 = gGameStatusPtr->unk_50[0]; - } + gGameStatusPtr->unk_58--; + if (gGameStatusPtr->unk_58 != 0) { + gGameStatusPtr->heldButtons[0] = 0; } else { - gGameStatusPtr->unk_58--; - if (gGameStatusPtr->unk_58 != 0) { - gGameStatusPtr->heldButtons[0] = 0; - } else { - gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0]; - gGameStatusPtr->unk_60 = gGameStatusPtr->unk_50[0]; - } + gGameStatusPtr->heldButtons[0] = gGameStatusPtr->curButtons[0]; + gGameStatusPtr->unk_60 = gGameStatusPtr->unk_50[0]; } } - } while (0); + } gGameStatusPtr->prevButtons[0] = gGameStatusPtr->curButtons[0]; } diff --git a/src/inspect_icon.c b/src/inspect_icon.c index 9c4842e5d5f..2152a49e00e 100644 --- a/src/inspect_icon.c +++ b/src/inspect_icon.c @@ -1,6 +1,8 @@ #include "common.h" #include "include_asset.h" +extern s32 D_8010C950; //TODO never read, consider removing + #define NAMESPACE inspect_icon typedef struct InspectIconData { diff --git a/src/inventory.c b/src/inventory.c index b3cde7f3143..1a515fbc551 100644 --- a/src/inventory.c +++ b/src/inventory.c @@ -1,5 +1,8 @@ -#include "common.h" +#include "inventory.h" #include "hud_element.h" +#include "dx/config.h" +#include "inventory_data.c" +#include "dx/debug_menu.h" #define FULLY_EXTENDED_Y 18 #define FULLY_RETRACTED_Y -100 @@ -11,9 +14,7 @@ enum BlinkModes { BSS b16 D_8010CD10; BSS b16 D_8010CD12; -BSS char D_8010CD14[0xA]; BSS s32 D_8010CD20; -BSS char D_8010CD24[0xC]; SHIFT_BSS StatusBar gStatusBar; @@ -21,6 +22,7 @@ extern HudScript* TimesHudScript; extern HudScript* SPIncrementHudScripts[]; extern HudScript* SPStarHudScripts[]; extern s32 StatusBarSPIncrementOffsets[]; +extern IconHudScriptPair gPartnerIconHudScripts[]; extern HudScript* DigitHudScripts[10]; @@ -54,7 +56,18 @@ void clear_player_data(void) { D_8010CD10 = FALSE; D_8010CD12 = FALSE; - playerData->hammerLevel = -1; + playerData->hammerLevel = 1; + playerData->curHP = 15; + playerData->curMaxHP = 15; + playerData->hardMaxHP = 15; + playerData->curFP = 15; + playerData->curMaxFP = 15; + playerData->hardMaxFP = 15; + playerData->maxBP = 9; + playerData->level = 6; + playerData->bootsLevel = 1; + playerData->hasActionCommands = TRUE; + /* playerData->curHP = 10; playerData->curMaxHP = 10; playerData->hardMaxHP = 10; @@ -64,27 +77,42 @@ void clear_player_data(void) { playerData->maxBP = 3; playerData->level = 1; playerData->bootsLevel = 0; + playerData->hammerLevel = -1; playerData->hasActionCommands = FALSE; + */ playerData->coins = 0; - playerData->fortressKeyCount = 0; playerData->starPieces = 0; playerData->starPoints = 0; playerData->unused_011 = 0; playerData->unused_288 = 0; + playerData->merleeSpellType = MERLEE_SPELL_NONE; playerData->merleeCastsLeft = 0; playerData->merleeTurnCount = -1; + playerData->maxStarPower = 0; playerData->starPower = 0; playerData->starBeamLevel = 0; - playerData->curPartner = 0; + playerData->curPartner = PARTNER_GOOMBARIO; + //playerData->curPartner = PARTNER_NONE; + + // for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) { + // playerData->partners[i].enabled = FALSE; + // playerData->partners[i].level = PARTNER_RANK_NORMAL; + // } for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) { - playerData->partners[i].enabled = FALSE; + if (i == PARTNER_GOOMPA || i == PARTNER_GOOMBARIA || i == PARTNER_TWINK) { + continue; + } + #if GIVE_ALL_PARTNERS == 1 + playerData->partners[i].enabled = TRUE; + #elif GIVE_GOOMBARIO == 1 + playerData->partners[PARTNER_GOOMBARIO].enabled = TRUE; + #else + playerData->partners[i].enabled = FALSE; + #endif playerData->partners[i].level = PARTNER_RANK_NORMAL; - playerData->partners[i].unk_02[0] = 0; - playerData->partners[i].unk_02[1] = 0; - playerData->partners[i].unk_02[2] = 0; } for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) { @@ -93,6 +121,7 @@ void clear_player_data(void) { for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) { playerData->badges[i] = ITEM_NONE; + playerData->badges[1] = ITEM_PEEKABOO; } for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) { @@ -101,6 +130,7 @@ void clear_player_data(void) { for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) { playerData->equippedBadges[i] = ITEM_NONE; + playerData->equippedBadges[1] = ITEM_PEEKABOO; } for (i = 0; i < ARRAY_COUNT(playerData->storedItems); i++) { @@ -142,154 +172,306 @@ void clear_player_data(void) { playerData->smashGameRecord = 0; } -PlayerData* get_player_data(void) { - return &gPlayerData; -} - s32 add_item(s32 itemID) { - PlayerData* playerData = &gPlayerData; - s32 i; + s32 idx; + + // handle key items + if (item_is_key(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.keyItems); idx++) { + if (gPlayerData.keyItems[idx] == ITEM_NONE) { + break; + } + } + + if (idx >= ARRAY_COUNT(gPlayerData.keyItems)) { + return -1; + } + + gPlayerData.keyItems[idx] = itemID; + return idx; + } + + // handle badges + if (item_is_badge(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.badges); idx++) { + if (gPlayerData.badges[idx] == ITEM_NONE) { + break; + } + } + + if (idx >= ARRAY_COUNT(gPlayerData.badges)) { + return -1; + } + + gPlayerData.badges[idx] = itemID; + return idx; + } - sort_items(); + // handle consumables + sort_consumables(); - for (i = 0; i < ARRAY_COUNT(gPlayerData.invItems); i++) { - if (playerData->invItems[i] == ITEM_NONE) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.invItems); idx++) { + if (gPlayerData.invItems[idx] == ITEM_NONE) { break; } } - if (i == ARRAY_COUNT(gPlayerData.invItems)) { + if (idx == ARRAY_COUNT(gPlayerData.invItems)) { return -1; } - playerData->invItems[i] = itemID; - return i; + gPlayerData.invItems[idx] = itemID; + return idx; } -s32 get_item_count(void) { - PlayerData* playerData = &gPlayerData; - s32 i = 0; - s32 sum = 0; +s32 remove_item(s32 itemID) { + s32 idx; - for (i; i < ARRAY_COUNT(gPlayerData.invItems); i++) { - if (playerData->invItems[i] != ITEM_NONE) { - sum++; + // handle key items + if (item_is_key(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.keyItems); idx++) { + if (gPlayerData.keyItems[idx] == itemID) { + break; + } + } + + if (idx >= ARRAY_COUNT(gPlayerData.keyItems)) { + return -1; } + + gPlayerData.keyItems[idx] = ITEM_NONE; + return idx; } - return sum; -} + // handle badges + if (item_is_badge(itemID)) { + // unequip + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.equippedBadges); idx++) { + if (gPlayerData.equippedBadges[idx] == itemID) { + gPlayerData.equippedBadges[idx] = ITEM_NONE; + } + } + + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.badges); idx++) { + if (gPlayerData.badges[idx] == itemID) { + break; + } + } + + if (idx >= ARRAY_COUNT(gPlayerData.badges)) { + return -1; + } -s32 get_item_empty_count(void) { - return ARRAY_COUNT(gPlayerData.invItems) - get_item_count(); + gPlayerData.badges[idx] = ITEM_NONE; + return idx; + } + + // handle consumables + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.invItems); idx++) { + if (gPlayerData.invItems[idx] == itemID) { + break; + } + } + + if (idx == ARRAY_COUNT(gPlayerData.invItems)) { + return -1; + } + + gPlayerData.invItems[idx] = ITEM_NONE; + sort_consumables(); + return idx; } +/// Search player inventory for `itemID` and return first matching array index. /// @returns the index of the given item in the player's inventory, or -1 if not found s32 find_item(s32 itemID) { - PlayerData* playerData = &gPlayerData; - ItemData* item = &gItemTable[itemID]; - s32 i; + s32 idx; - if (item->typeFlags & ITEM_TYPE_FLAG_KEY) { - // check key items - for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) { - if (playerData->keyItems[i] == itemID) { + // handle key items + if (item_is_key(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.keyItems); idx++) { + if (gPlayerData.keyItems[idx] == itemID) { break; } } - if (i >= ARRAY_COUNT(playerData->keyItems)) { + if (idx >= ARRAY_COUNT(gPlayerData.keyItems)) { return -1; } + return idx; + } - return i; - } else { - // check consumable items - for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) { - if (playerData->invItems[i] == itemID) { + // handle badges + if (item_is_badge(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.badges); idx++) { + if (gPlayerData.badges[idx] == itemID) { break; } } - if (i == ARRAY_COUNT(playerData->invItems)) { + if (idx >= ARRAY_COUNT(gPlayerData.badges)) { return -1; } + return idx; + } + + // handle consumables + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.invItems); idx++) { + if (gPlayerData.invItems[idx] == itemID) { + break; + } + } - return i; + if (idx == ARRAY_COUNT(gPlayerData.invItems)) { + return -1; } + return idx; } -/// Bubbles up player inventory items such that all ITEM_NONE values are at the bottom. -void sort_items(void) { - PlayerData* playerData = &gPlayerData; - s32 j; - s32 i; +/// Search player inventory for `itemID` and count the number matches. +/// @returns the number of items matching `itemID` +s32 count_item(s32 itemID) { + s32 idx; + s32 sum = 0; - for (i = ARRAY_COUNT(playerData->invItems) - 2; i >= 0; i--) { - // leave ITEM_NONE at the end of the list alone - if (playerData->invItems[i] == ITEM_NONE) { - continue; + // handle key items + if (item_is_key(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.keyItems); idx++) { + if (gPlayerData.keyItems[idx] == itemID) { + sum++; + } } - // swap any other ITEM_NONE to the end of the list - for (j = ARRAY_COUNT(playerData->invItems) - 1; i < j; j--) { - if (playerData->invItems[j] == ITEM_NONE) { - playerData->invItems[j] = playerData->invItems[i]; - playerData->invItems[i] = ITEM_NONE; - break; + return sum; + } + + // handle badges + if (item_is_badge(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.badges); idx++) { + if (gPlayerData.badges[idx] == itemID) { + sum++; } } + return sum; + } + + // handle consumables + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.invItems); idx++) { + if (gPlayerData.invItems[idx] == itemID) { + sum++; + } } + return sum; } -s32 add_badge(s32 itemID) { - PlayerData* playerData = &gPlayerData; - ItemData* item = &gItemTable[itemID]; - s32 i; +b32 has_item(s32 itemID) { + s32 idx; - if ((item->typeFlags & ITEM_TYPE_FLAG_BADGE) == 0) { - return add_item(itemID); + // handle key items + if (item_is_key(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.keyItems); idx++) { + if (gPlayerData.keyItems[idx] == itemID) { + return TRUE; + } + } + return FALSE; } - for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) { - if (playerData->badges[i] == ITEM_NONE) { - break; + // handle badges + if (item_is_badge(itemID)) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.badges); idx++) { + if (gPlayerData.badges[idx] == itemID) { + return TRUE; + } } + return FALSE; } - if (i >= ARRAY_COUNT(playerData->badges)) { - return 0; + // handle consumables + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.invItems); idx++) { + if (gPlayerData.invItems[idx] == itemID) { + return TRUE; + } } - - playerData->badges[i] = itemID; - return i; + return FALSE; } s32 store_item(s32 itemID) { - PlayerData* playerData = &gPlayerData; - s32 i; + s32 idx; - for (i = 0; i < ARRAY_COUNT(gPlayerData.storedItems); i++) { - if (playerData->storedItems[i] == ITEM_NONE) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.storedItems); idx++) { + if (gPlayerData.storedItems[idx] == ITEM_NONE) { break; } } - if (i == ARRAY_COUNT(gPlayerData.storedItems)) { + if (idx == ARRAY_COUNT(gPlayerData.storedItems)) { return -1; } else { - playerData->storedItems[i] = itemID; + gPlayerData.storedItems[idx] = itemID; + } + + return idx; +} + +b32 is_badge_equipped(s32 itemID) { + s32 idx; + + if (!item_is_badge(itemID)) { + return FALSE; + } + + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.equippedBadges); idx++) { + if (gPlayerData.equippedBadges[idx] == itemID) { + return TRUE; + } + } + + return FALSE; +} + +/// Bubbles up player inventory items such that all ITEM_NONE values are at the bottom. +void sort_consumables(void) { + s32 i, j; + + for (i = ARRAY_COUNT(gPlayerData.invItems) - 2; i >= 0; i--) { + // leave ITEM_NONE at the end of the list alone + if (gPlayerData.invItems[i] == ITEM_NONE) { + continue; + } + // swap any other ITEM_NONE to the end of the list + for (j = ARRAY_COUNT(gPlayerData.invItems) - 1; i < j; j--) { + if (gPlayerData.invItems[j] == ITEM_NONE) { + gPlayerData.invItems[j] = gPlayerData.invItems[i]; + gPlayerData.invItems[i] = ITEM_NONE; + break; + } + } + } +} + +s32 get_consumables_count(void) { + s32 idx; + s32 sum = 0; + + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.invItems); idx++) { + if (gPlayerData.invItems[idx] != ITEM_NONE) { + sum++; + } } - return i; + return sum; +} + +s32 get_consumables_empty(void) { + return ARRAY_COUNT(gPlayerData.invItems) - get_consumables_count(); } s32 get_stored_count(void) { - PlayerData* playerData = &gPlayerData; - s32 i = 0; + s32 idx; s32 sum = 0; - for (; i < ARRAY_COUNT(gPlayerData.storedItems); i++) { - if (playerData->storedItems[i] != ITEM_NONE) { + for (idx = 0; idx < ARRAY_COUNT(gPlayerData.storedItems); idx++) { + if (gPlayerData.storedItems[idx] != ITEM_NONE) { sum++; } } @@ -297,10 +479,22 @@ s32 get_stored_count(void) { return sum; } -s32 get_stored_empty_count(void) { +s32 get_stored_empty(void) { return ARRAY_COUNT(gPlayerData.storedItems) - get_stored_count(); } +ALWAYS_INLINE b32 item_is_consumable(s32 itemID) { + return gItemTable[itemID].typeFlags & ITEM_TYPE_FLAG_CONSUMABLE; +} + +ALWAYS_INLINE b32 item_is_badge(s32 itemID) { + return gItemTable[itemID].typeFlags & ITEM_TYPE_FLAG_BADGE; +} + +ALWAYS_INLINE b32 item_is_key(s32 itemID) { + return gItemTable[itemID].typeFlags & ITEM_TYPE_FLAG_KEY; +} + void enforce_hpfp_limits(void) { PlayerData* playerData = &gPlayerData; @@ -468,7 +662,7 @@ void status_bar_draw_number(s32 iconID, s32 startX, s32 startY, s32 value, s32 n b32 keepDrawing; s32 digit; s32 i; - + hud_element_set_script(iconID, TimesHudScript); drawX = startX + 8; drawY = startY + 8; @@ -511,7 +705,7 @@ void status_bar_draw_stat(s32 id, s32 startX, s32 startY, s32 currentValue, s32 s32 baseX = startX + 8; s32 baseY = startY + 8; - hud_element_set_script(id, SlashHudScript); + hud_element_set_script(id, HES_StatusSlash); hud_element_set_render_pos(id, baseX + 14, baseY + 1); hud_element_clear_flags(id, HUD_ELEMENT_FLAG_DISABLED); hud_element_draw_next(id); @@ -572,6 +766,10 @@ void update_status_bar(void) { s32 s1; s32 spBars; s32 maxStarPower; + s32 hp_bar_offset_x = 3; + s32 hp_bar_offset_y = -1; + s32 hp_bar_width = 100; + s32 hp_bar_height = 28; if (gGameStatusPtr->introPart >= INTRO_PART_0 || gGameStatusPtr->demoState != DEMO_STATE_NONE @@ -740,9 +938,20 @@ void update_status_bar(void) { gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, 12, 20, SCREEN_WIDTH - 12, SCREEN_HEIGHT - 20); x = statusBar->drawPosX; y = statusBar->drawPosY; + // Original c-up menu code draw_box(0, WINDOW_STYLE_5, x, y, 0, 174, 35, 255, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL); draw_box(0, WINDOW_STYLE_6, x + 174, y, 0, 122, 25, 255, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL); + // draw custom hp bars + // DRAW_BOX(0, (WindowStyle)WINDOW_STYLE_26, x + hp_bar_offset_x, y + hp_bar_offset_y, hp_bar_width, hp_bar_height, 255); + // DRAW_BOX(0, (WindowStyle)WINDOW_STYLE_26, x + hp_bar_offset_x, y + hp_bar_offset_y + 0x15, hp_bar_width, hp_bar_height, 255); + + // draw custom fp bar + // DRAW_BOX(0, (WindowStyle)WINDOW_STYLE_23, x + hp_bar_offset_x + 92, y + hp_bar_offset_y, 91, 28, 255); + + // draw custom coins/exp box + // DRAW_BOX(0, (WindowStyle)WINDOW_STYLE_25, x + hp_bar_offset_x + 178, y + hp_bar_offset_y, 116, hp_bar_height, 255); + if (statusBar->hpBlinkTimer > 0) { statusBar->hpBlinkTimer--; if (statusBar->hpBlinkTimer == 0) { @@ -762,6 +971,7 @@ void update_status_bar(void) { statusBar->hpBlinkCounter++; } + // Vanilla HP bar if (showStat) { id = statusBar->hpIconHIDs[0]; x = statusBar->drawPosX + 22; @@ -780,6 +990,48 @@ void update_status_bar(void) { status_bar_draw_stat(statusBar->hpTimesHID, x, y, statusBar->displayHP, playerData->curMaxHP); } + // Custom HP bar + // if (showStat) { //draw new HP icon + // s32 hpXPosBase = x + 18; + // s32 hpYPosBase = y + 13; + + // //ReplaceHeartIconPalette(HeartCI4PaletteBlue); //make blue always currently + // //draw player heart icon + // id = statusBar->hpIconHIDs[1]; + // hud_element_set_render_pos(id, hpXPosBase + 8, hpYPosBase - 2); + // hud_element_draw_next(id); + + // //draw partner heart icon + // id = statusBar->hpIconHIDs[1]; + // hud_element_set_render_pos(id, hpXPosBase + 8, hpYPosBase + 19); + // hud_element_draw_next(id); + + // //draw player icon + // id = statusBar->hpIconHIDs[0]; + // hud_element_set_render_pos(id, hpXPosBase, hpYPosBase); + // hud_element_draw_next(id); + + // //draw partner icon icon + // id = statusBar->fpIconHIDs[1]; + // hud_element_set_script(id, gPartnerIconHudScripts[gPlayerData.curPartner].enabled); + // hud_element_set_scale(id, 0.5f); + // hud_element_set_render_pos(id, hpXPosBase - 1, hpYPosBase + 21); + // hud_element_draw_next(id); + + // //draw player curHp / maxHp + // x = statusBar->drawPosX + 42; + // y = statusBar->drawPosY + 7; + // status_bar_draw_stat(statusBar->hpTimesHID, x, y, statusBar->displayHP, playerData->curMaxHP); + + // //draw partner curHp / maxHp + // x = statusBar->drawPosX + 42; + // y = statusBar->drawPosY + 28; + // { + // s32 curPartner = playerData->curPartner; + // status_bar_draw_stat(statusBar->hpTimesHID, x, y, playerData->partners[curPartner].curHp, playerData->partners[curPartner].maxHp); + // } + // } + if (statusBar->fpBlinkTimer > 0) { statusBar->fpBlinkTimer--; if (statusBar->fpBlinkTimer == 0) { @@ -799,6 +1051,7 @@ void update_status_bar(void) { statusBar->fpBlinkCounter++; } + // Vanilla FP bar if (showStat) { id = statusBar->fpIconHIDs[0]; x = statusBar->drawPosX + 110; @@ -817,21 +1070,34 @@ void update_status_bar(void) { status_bar_draw_stat(statusBar->fpTimesHID, x, y, statusBar->displayFP, playerData->curMaxFP); } - if (playerData->level >= 27) { - playerData->starPoints = 0; - } - - showStat = TRUE; - if (statusBar->starpointsBlinking != BLINK_OFF) { - if (statusBar->starpointsBlinkCounter > 8) { - if (statusBar->starpointsBlinkCounter <= 12) { - showStat = FALSE; - } else { - statusBar->starpointsBlinkCounter = 0; - } - } - statusBar->starpointsBlinkCounter++; - } + // Custom FP bar + // if (showStat) { + // id = statusBar->fpIconHIDs[0]; + // x = statusBar->drawPosX + 110; + // y = statusBar->drawPosY + 13; + // hud_element_set_render_pos(id, x, y); + // hud_element_draw_next(id); + + // x = statusBar->drawPosX + 125; + // y = statusBar->drawPosY + 8; + // status_bar_draw_stat(statusBar->fpTimesHID, x, y, statusBar->displayFP, playerData->curMaxFP); + // } + + // if (playerData->level >= 27) { + // playerData->starPoints = 0; + // } + + // showStat = TRUE; + // if (statusBar->starpointsBlinking != BLINK_OFF) { + // if (statusBar->starpointsBlinkCounter > 8) { + // if (statusBar->starpointsBlinkCounter <= 12) { + // showStat = FALSE; + // } else { + // statusBar->starpointsBlinkCounter = 0; + // } + // } + // statusBar->starpointsBlinkCounter++; + // } if (showStat) { id = statusBar->spIconHID; @@ -1156,9 +1422,6 @@ void coin_counter_draw_content(UNK_TYPE arg0, s32 posX, s32 posY) { void update_coin_counter(void) { StatusBar* statusBar = &gStatusBar; - PlayerData* playerData = &gPlayerData; - - do {} while (0); // Needed to match if (statusBar->unk_6D != 0) { statusBar->unk_6D--; @@ -1174,11 +1437,11 @@ void update_coin_counter(void) { return; } - if ((statusBar->displayCoins == playerData->coins) && (statusBar->coinCounterHideTime > 30)) { + if ((statusBar->displayCoins == gPlayerData.coins) && (statusBar->coinCounterHideTime > 30)) { statusBar->coinCounterHideTime = 30; } - if ((statusBar->displayCoins == playerData->coins) || (statusBar->coinCounterHideTime <= 30)) { + if ((statusBar->displayCoins == gPlayerData.coins) || (statusBar->coinCounterHideTime <= 30)) { statusBar->coinCounterHideTime--; if (statusBar->coinCounterHideTime == 0) { set_window_update(WINDOW_ID_CURRENCY_COUNTER, (s32)basic_hidden_window_update); @@ -1187,7 +1450,7 @@ void update_coin_counter(void) { D_8010CD12 = TRUE; statusBar->iconIndex12 = statusBar->coinCountTimesHID; statusBar->iconIndex13 = statusBar->coinCountIconHID; - statusBar->displayCoins = playerData->coins; + statusBar->displayCoins = gPlayerData.coins; if (statusBar->unk_6E > -1) { statusBar->ignoreChanges = statusBar->unk_6E; statusBar->unk_6E = -1; @@ -1262,6 +1525,10 @@ API_CALLABLE(ShowCoinCounter) { void draw_status_ui(void) { update_status_bar(); update_coin_counter(); + + #if DX_DEBUG_MENU + dx_debug_menu_main(); + #endif } void open_status_bar_slowly(void) { @@ -1326,17 +1593,19 @@ void disable_status_bar_input(void) { // determine whether the player can open or close the status bar via button press b32 can_control_status_bar(void) { - StatusBar* statusBar = &gStatusBar; - - s32 ret = 1 - statusBar->openInputDisabled; + if (gStatusBar.openInputDisabled) { + return FALSE; + } - if (statusBar->alwaysShown) { - ret = FALSE; + if (gStatusBar.alwaysShown) { + return FALSE; } - if (statusBar->ignoreChanges) { - ret = FALSE; + + if (gStatusBar.ignoreChanges) { + return FALSE; } - return ret; + + return TRUE; } void status_bar_ignore_changes(void) { @@ -1978,20 +2247,18 @@ void set_max_star_power(s8 newMax) { } void add_star_power(s32 amt) { - // TODO cleanup PlayerData* playerData = &gPlayerData; StatusBar* statusBar = &gStatusBar; - s32 phi_v1; s32 maxPower; statusBar->unk_57 = 1; statusBar->unk_58 = 60; - phi_v1 = playerData->starPower; if (playerData->starPower < 0) { - phi_v1 = playerData->starPower + 31; + statusBar->unk_59 = (playerData->starPower + 31) / SP_PER_SEG; + } else { + statusBar->unk_59 = playerData->starPower / SP_PER_SEG; } - statusBar->unk_59 = phi_v1 >> 5; // same as / SP_PER_SEG playerData->starPower += amt; @@ -2004,47 +2271,37 @@ void add_star_power(s32 amt) { } s32 recover_fp(s32 amt) { - PlayerData* playerData = &gPlayerData; - s32 newFP = playerData->curFP; - s32 ret; - if (amt == -2) { - playerData->curMaxFP++; - playerData->curFP = playerData->curMaxFP; - return playerData->curMaxFP; - } - - if (amt > 0) { - newFP += amt; - } - if ((amt == -1) || (ret = newFP, (playerData->curMaxFP < newFP))) { - ret = playerData->curMaxFP; + gPlayerData.curMaxFP++; + gPlayerData.curFP = gPlayerData.curMaxFP; + } else if (amt == -1) { + gPlayerData.curFP = gPlayerData.curMaxFP; + } else { + if (amt > 0) { + gPlayerData.curFP += amt; + } + if (gPlayerData.curMaxFP < gPlayerData.curFP) { + gPlayerData.curFP = gPlayerData.curMaxFP; + } } - - playerData->curFP = ret; - return ret; + return gPlayerData.curFP; } s32 recover_hp(s32 amt) { - PlayerData* playerData = &gPlayerData; - s32 newHP = playerData->curHP; - s32 ret; - if (amt == -2) { - playerData->curMaxHP++; - playerData->curHP = playerData->curMaxHP; - return playerData->curMaxHP; - } - - if (amt > 0) { - newHP += amt; - } - if ((amt == -1) || (ret = newHP, (playerData->curMaxHP < newHP))) { - ret = playerData->curMaxHP; + gPlayerData.curMaxHP++; + gPlayerData.curHP = gPlayerData.curMaxHP; + } else if (amt == -1) { + gPlayerData.curHP = gPlayerData.curMaxHP; + } else { + if (amt > 0) { + gPlayerData.curHP += amt; + } + if (gPlayerData.curMaxHP < gPlayerData.curHP) { + gPlayerData.curHP = gPlayerData.curMaxHP; + } } - - playerData->curHP = ret; - return ret; + return gPlayerData.curHP; } void subtract_hp(s32 amt) { @@ -2067,23 +2324,3 @@ s8 has_full_hp(void) { s8 has_full_fp(void) { return gPlayerData.curMaxFP == gPlayerData.curFP; } - -s8 add_fortress_keys(s32 amt) { - gPlayerData.fortressKeyCount += amt; - return gPlayerData.fortressKeyCount; -} - -s32 subtract_fortress_keys(s32 amt) { - PlayerData* playerData = &gPlayerData; - - playerData->fortressKeyCount -= amt; - if (playerData->fortressKeyCount < 0) { - playerData->fortressKeyCount = 0; - } - - return playerData->fortressKeyCount; -} - -s32 get_fortress_key_count(void) { - return gPlayerData.fortressKeyCount; -} diff --git a/src/inventory_data.c b/src/inventory_data.c new file mode 100644 index 00000000000..af3ca8fb3bf --- /dev/null +++ b/src/inventory_data.c @@ -0,0 +1,338 @@ +#include "common.h" +#include "hud_element.h" +#include "dx/config.h" + +s32 hp_bar_offset_x = 3; +s32 hp_bar_offset_y = -1; +s32 hp_bar_width = 100; +s32 hp_bar_height = 28; + +#define DRAW_BOX(flags, style, xPos, yPos, width, height, opacity) draw_box(flags, style, xPos, yPos, 0, width, height, opacity, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL) + +s32 HeartCI4Raster[] = { +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x01111100, 0x00011111, 0x00000000, +0x00000001, 0x11111110, 0x00111111, 0x11000000, +0x00000011, 0x12332111, 0x01112332, 0x11100000, +0x00000111, 0x34444321, 0x11234444, 0x51110000, +0x00000113, 0x46776684, 0x33486644, 0x35110000, +0x00001124, 0x67766668, 0x88866664, 0x35211000, +0x00001134, 0x77644488, 0x88844444, 0x55511000, +0x00001146, 0x76842288, 0x88842233, 0x55511000, +0x00001146, 0x68841144, 0x44441133, 0x55511000, +0x00001146, 0x68841144, 0x44441133, 0x55511000, +0x00001138, 0x68841144, 0x44441133, 0x55511000, +0x00000124, 0x68841144, 0x44441133, 0x55210000, +0x00000113, 0x88842244, 0x44442233, 0x55110000, +0x00000012, 0x48844444, 0x44444333, 0x52100000, +0x00000011, 0x34444444, 0x44444335, 0x51100000, +0x00000001, 0x13444444, 0x44444335, 0x11000000, +0x00000000, 0x11333333, 0x33333351, 0x10000000, +0x00000000, 0x01153333, 0x33333511, 0x00000000, +0x00000000, 0x00112555, 0x55552110, 0x00000000, +0x00000000, 0x00011925, 0x55291100, 0x00000000, +0x00000000, 0x00001119, 0x29111000, 0x00000000, +0x00000000, 0x00000011, 0x11100000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000 +}; + +s32 HeartCI4Palette[] = { + 0x00006907, 0xC1C9E24B, 0xE2CFE987, 0xEC59ED5F, + 0xE3D5A107, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 HeartCI4PaletteBlue[] = { + 0x000011D9, 0x1B3123B9, 0x3439137B, 0x5CFB757B, + 0x4CB912E9, 0x00010001, 0x00010001, 0x00010001, +}; + +s32 FlowerCI4Raster[] = { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000111, 0x11100000, 0x00000000, + 0x00000000, 0x00011122, 0x22111000, 0x00000000, + 0x00000000, 0x00112333, 0x33321100, 0x00000000, + 0x00000000, 0x01143333, 0x33334110, 0x00000000, + 0x00000000, 0x11133333, 0x33333111, 0x00000000, + 0x00000011, 0x11143355, 0x55334111, 0x11000000, + 0x00000112, 0x33422666, 0x66621433, 0x21100000, + 0x00001143, 0x33326777, 0x77762333, 0x34110000, + 0x00001233, 0x33586677, 0x77668533, 0x33210000, + 0x00001433, 0x33679977, 0x77997633, 0x33410000, + 0x00001433, 0x35679977, 0x77997653, 0x33410000, + 0x00001433, 0x35679977, 0x77997653, 0x33410000, + 0x00001133, 0x35976677, 0x77667953, 0x33110000, + 0x00001112, 0x42987777, 0x77778924, 0x21110000, + 0x00000111, 0x12967777, 0x77776921, 0x11100000, + 0x00000011, 0x43496877, 0x77869434, 0x11000000, + 0x00000114, 0x33349666, 0x66694333, 0x41100000, + 0x00000114, 0x33333499, 0x99433333, 0x41100000, + 0x00000112, 0x33333332, 0x23333333, 0x21100000, + 0x0000AA11, 0x24333341, 0x14333342, 0x11AA0000, + 0x0000AAB1, 0x11244411, 0x11444211, 0x1BAA0000, + 0x0000AABB, 0xA111111B, 0xB111111A, 0xBBAA0000, + 0x00000AAA, 0xABCCBBAA, 0xAABBCCBA, 0xAAA00000, + 0x000000AA, 0xCDDBCCAA, 0xAACCBDDC, 0xAA000000, + 0x0000AAAC, 0xDDDDDCAA, 0xAACDDDDD, 0xCAAA0000, + 0x0000AACD, 0xDDDDCBAA, 0xAABCDDDD, 0xDCAA0000, + 0x0000AABB, 0xCCCBBAA0, 0x0AABBCCC, 0xBBAA0000, + 0x00000AAA, 0xAAAAAA00, 0x00AAAAAA, 0xAAA00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 +}; + +s32 FlowerCI4Palette[] = { + 0x000011D3, 0x6C2BE7FB, 0x8E39F6A3, 0xDCC9FE41, + 0xF543A341, 0x01C12B85, 0x3CC57E07, 0x00000000, +}; + + +HudScript HeartIconScript = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_32x32) + hs_SetScale(0.50) + hs_Loop + HUD_ELEMENT_OP_SetCI, 3, HeartCI4Raster, HeartCI4Palette, + hs_Restart + hs_End +}; + + +HudScript FlowerIconScript = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_32x32) + hs_SetScale(0.50) + hs_Loop + HUD_ELEMENT_OP_SetCI, 3, FlowerCI4Raster, FlowerCI4Palette, + hs_Restart + hs_End +}; + +s32 fontDivisionSymbolRaster[] = { +0x00000000, 0x00000BB4, 0x0000BDA4, 0x000BED44, +0x00ADE845, 0x00CEA450, 0x0CEC4400, 0xBEE74500, +0xCEA44000, 0xBA440000, 0x54400000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font0Raster[] = { +0x00000000, 0x00000000, 0x000AC750, 0x00000000, +0x005EFE75, 0x00000000, 0x05CFCFE7, 0x30000000, +0x05FE2AFA, 0x10000000, 0x5CFA14FA, 0x10000000, +0x7FD114FA, 0x10000000, 0xCFE51AFA, 0x10000000, +0x5CFCAFD3, 0x10000000, 0x35CFFD41, 0x10000000, +0x03577211, 0x00000000, 0x00311110, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font1Raster[] = { +0x00000000, 0x00000000, 0x000ACE72, 0x00000000, +0x05CEFFA1, 0x30000000, 0x0AFFDF51, 0x30000000, +0x00AADD12, 0x00000000, 0x0025EA12, 0x00000000, +0x000CF713, 0x00000000, 0x005FE213, 0x00000000, +0x00CFD120, 0x00000000, 0x00CFA130, 0x00000000, +0x003A3130, 0x00000000, 0x00111230, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font2Raster[] = { +0x00000000, 0x00000000, 0x057CDC00, 0x00000000, +0x5ADFFFC0, 0x00000000, 0xCEFEAFF5, 0x20000000, +0x7FD4CFE4, 0x20000000, 0x211AFE41, 0x20000000, +0x00AFD412, 0x00000000, 0x0AFD3155, 0x30000000, +0x7FE7ACFA, 0x10000000, 0xDEDEFEEA, 0x10000000, +0x2DDCA533, 0x10000000, 0x01111111, 0x30000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font3Raster[] = { +0x00000000, 0x00000000, 0x07CEFD53, 0x00000000, +0x7DFFFFD5, 0x30000000, 0xEFC2AFC2, 0x10000000, +0x5A17FD51, 0x30000000, 0x213DF512, 0x00000000, +0x5723DF70, 0x00000000, 0xAFC23DFA, 0x20000000, +0xEFFCADFA, 0x10000000, 0x2CEFFE71, 0x10000000, +0x025AA511, 0x00000000, 0x00211113, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font4Raster[] = { +0x00000000, 0x00000000, 0x005DD750, 0x00000000, +0x00DFE512, 0x00000000, 0x0AFE7313, 0x00000000, +0x5EFAFC10, 0x00000000, 0xAFA2ED23, 0x00000000, +0xCF23EEE7, 0x20000000, 0xEFEEFFEA, 0x10000000, +0x7CADFA23, 0x10000000, 0x211FF511, 0x30000000, +0x03377310, 0x00000000, 0x00311120, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font5Raster[] = { +0x00000000, 0x00000000, 0x007EFFF5, 0x10000000, +0x05EFDDD5, 0x10000000, 0x07FD2222, 0x30000000, +0x0CFAACC2, 0x00000000, 0x7EFFEEFA, 0x20000000, +0xADA517ED, 0x13000000, 0x3212AFD7, 0x10000000, +0x00AEFE71, 0x20000000, 0x00DFE512, 0x30000000, +0x00575123, 0x00000000, 0x00311230, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font6Raster[] = { +0x00000000, 0x00000000, 0x005DE723, 0x00000000, +0x00AFF513, 0x00000000, 0x07DF7130, 0x00000000, +0x0AEECA30, 0x00000000, 0x7EFCCFA3, 0x50000000, +0xAEC22DFA, 0x10000000, 0xCF712AFA, 0x10000000, +0x5DFCAFD2, 0x10000000, 0x05DFFD21, 0x20000000, +0x03357212, 0x30000000, 0x00311120, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font7Raster[] = { +0x00000000, 0x00000000, 0x07DFFFFC, 0x00000000, +0x0CFDACFD, 0x10000000, 0x7EF31AE5, 0x10000000, +0x7F517FC1, 0x20000000, 0x0213EE31, 0x30000000, +0x032CFA12, 0x00000000, 0x007FE413, 0x00000000, +0x007FE210, 0x00000000, 0x007FD210, 0x00000000, +0x00373110, 0x00000000, 0x00311100, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font8Raster[] = { +0x00000000, 0x00000000, 0x0ADFFD00, 0x00000000, +0xAED3AFD3, 0x10000000, 0xCF111DF3, 0x10000000, +0x0DD5FFC1, 0x20000000, 0x07FFFE52, 0x00000000, +0x7EFA7DF7, 0x10000000, 0xDFA117FD, 0x10000000, +0xAEFAAFE5, 0x10000000, 0x07EFFE51, 0x10000000, +0x02577411, 0x00000000, 0x00211110, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 font9Raster[] = { +0x00000000, 0x00000000, 0x5DFFFFA0, 0x00000000, +0xCFEAAEE7, 0x20000000, 0xDF7115E5, 0x10000000, +0xDFE57E51, 0x20000000, 0x5DEEEE71, 0x00000000, +0x023AEC12, 0x00000000, 0x007CE413, 0x00000000, +0x00AEE220, 0x00000000, 0x00EED120, 0x00000000, +0x00575130, 0x00000000, 0x00011100, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +0x00000000, 0x00000000, 0x00000000, 0x00000000, +}; + +s32 fontPalette[] = { +0x00006B5B, 0x739D739D, 0x8C6394A5, 0xB801A529, +0xA529A529, 0xAD6BBDEF, 0xD6B5E739, 0xEF7BFFFF, +}; + +HudScript HES_StatusSlash = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_8x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, fontDivisionSymbolRaster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit0 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font0Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit1 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font1Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit2 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font2Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit3 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font3Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit4 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font4Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit5 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font5Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit6 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font6Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit7 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font7Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit8 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font8Raster, fontPalette, + hs_Restart + hs_End +}; + +HudScript HES_StatusDigit9 = { + hs_SetVisible + hs_SetTileSize(HUD_ELEMENT_SIZE_16x16) + hs_Loop + HUD_ELEMENT_OP_SetCI, 60, font9Raster, fontPalette, + hs_Restart + hs_End +}; diff --git a/src/is_debug.c b/src/is_debug.c index e23e9bc3c87..d10349be3b9 100644 --- a/src/is_debug.c +++ b/src/is_debug.c @@ -2,6 +2,7 @@ #include "stdlib/stdarg.h" #include "nu/nusys.h" +void crash_screen_set_assert_info(const char* message, const char* file, u32 line, const char* func); typedef struct { /* 0x00 */ u32 magic; /* 0x04 */ u32 get; @@ -13,8 +14,6 @@ typedef struct { #define gISVDbgPrnAdrs ((ISVDbg*) 0xb3ff0000) -char* is_debug_print(char* arg0, const char* str, size_t count); - void is_debug_init(void) { osEPiWriteIo(nuPiCartHandle, (u32) &gISVDbgPrnAdrs->put, 0); osEPiWriteIo(nuPiCartHandle, (u32) &gISVDbgPrnAdrs->get, 0); @@ -89,7 +88,7 @@ char* is_debug_print(char* arg0, const char* str, size_t count) { return (char*) 1; } -void is_debug_panic(const char* message, char* file, s32 line) { - osSyncPrintf("File:%s Line:%d %s \n", file, line, message); - do {} while (TRUE); +void is_debug_panic(const char* message, const char* file, u32 line, const char* func) { + crash_screen_set_assert_info(message, file, line, func); + *(volatile u32*)0 = 0; // Crash so we can see the crash screen } diff --git a/src/item_entity.c b/src/item_entity.c index e69371135fa..8db5d9f1725 100644 --- a/src/item_entity.c +++ b/src/item_entity.c @@ -1,4 +1,6 @@ #include "common.h" +#include "inventory.h" +#include "vars_access.h" #include "effects.h" #include "hud_element.h" #include "pause/pause_common.h" @@ -1629,7 +1631,7 @@ void update_item_entity_collectable(ItemEntity* item) { physData->collisionRadius = 24.0f; physData->constVel = 24.0f; if (item->spawnAngle < 0) { - if (IS_ITEM(item->itemID)) { + if (item_is_consumable(item->itemID) || item_is_key(item->itemID)) { if (rand_int(10000) < 5000) { physData->moveAngle = clamp_angle(gCameras[camID].curYaw + 105.0f + rand_int(30) - 15.0f); } else { @@ -1899,9 +1901,9 @@ void update_item_entity_collectable(ItemEntity* item) { physData->velZ = 0.0f; item->flags |= ITEM_ENTITY_FLAG_DONE_FALLING; } else { - if (IS_BADGE(item->itemID)) { + if (item_is_badge(item->itemID)) { sfx_play_sound_at_position(SOUND_BADGE_BOUNCE, SOUND_SPACE_DEFAULT, item->pos.x, item->pos.y, item->pos.z); - } else if (IS_ITEM(item->itemID)) { + } else if (item_is_consumable(item->itemID) || item_is_key(item->itemID)) { sfx_play_sound_at_position(SOUND_ITEM_BOUNCE, SOUND_SPACE_DEFAULT, item->pos.x, item->pos.y, item->pos.z); } else { switch (item->itemID) { @@ -1952,9 +1954,7 @@ void update_item_entity_collectable(ItemEntity* item) { fx_small_gold_sparkle(0, item->pos.x, item->pos.y + 16.0f, item->pos.z, 1.0f, 0); - if (IS_ITEM(item->itemID)) { - item->state = ITEM_PHYSICS_STATE_PICKUP; - } else if (IS_BADGE(item->itemID)) { + if (item_is_consumable(item->itemID) || item_is_key(item->itemID) || item_is_badge(item->itemID)) { item->state = ITEM_PHYSICS_STATE_PICKUP; } else if (item->itemID == ITEM_STAR_PIECE) { playerData->starPiecesCollected++; @@ -2001,7 +2001,6 @@ void update_item_entity_collectable(ItemEntity* item) { } break; case ITEM_KOOPA_FORTRESS_KEY: - playerData->fortressKeyCount = playerData->fortressKeyCount + 1; sfx_play_sound_at_position(SOUND_COIN_PICKUP, SOUND_SPACE_DEFAULT, item->pos.x, item->pos.y, item->pos.z); break; case ITEM_STAR_POINT: @@ -2368,7 +2367,7 @@ void update_item_entity_pickup(ItemEntity* item) { } hud_element_free(ItemPickupIconID); remove_item_entity_by_reference(item); - sort_items(); + sort_consumables(); decrement_status_bar_disabled(); isPickingUpItem = FALSE; break; @@ -2441,7 +2440,7 @@ void update_item_entity_pickup(ItemEntity* item) { if (ThrowAwayMenuIdx >= 2) { playerData->invItems[ThrowAwayMenuIdx - 2] = ITEM_NONE; - sort_items(); + sort_consumables(); add_item(item->itemID); } suggest_player_anim_always_forward(ANIM_MarioW1_Lift); @@ -2473,7 +2472,7 @@ void update_item_entity_pickup(ItemEntity* item) { gOverrideFlags &= ~GLOBAL_OVERRIDES_40; hud_element_free(ItemPickupIconID); remove_item_entity_by_reference(item); - sort_items(); + sort_consumables(); decrement_status_bar_disabled(); isPickingUpItem = FALSE; break; diff --git a/src/main.c b/src/main.c index 972d05c34b9..e5e0f9c65e2 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,6 @@ #include "common.h" #include "nu/nusys.h" +#include "dx/profiling.h" // // Start of libultra BSS @@ -123,6 +124,10 @@ extern IMG_BIN ResetTilesImg[]; SHIFT_BSS u16* ResetFrameBufferArray; SHIFT_BSS u16* nuGfxZBuffer; +void gfx_task_end_callback(void* unk) { + profiler_rsp_completed(PROFILER_RSP_GFX); +} + void boot_main(void* data) { #if VERSION_JP if (osTvType == OS_TV_NTSC) { @@ -162,6 +167,7 @@ void boot_main(void* data) { nuGfxFuncSet((NUGfxFunc) gfxRetrace_Callback); nuGfxPreNMIFuncSet(gfxPreNMI_Callback); + nuGfxTaskEndFunc = gfx_task_end_callback; gRandSeed += osGetCount(); nuGfxDisplayOn(); @@ -169,6 +175,7 @@ void boot_main(void* data) { } void gfxRetrace_Callback(s32 gfxTaskNum) { + profiler_rsp_started(PROFILER_RSP_GFX); if (ResetGameState != RESET_STATE_NONE) { if (ResetGameState == RESET_STATE_INIT) { nuGfxTaskAllEndWait(); diff --git a/src/main_loop.c b/src/main_loop.c index 3ad3c51fafc..f7495d1f80f 100644 --- a/src/main_loop.c +++ b/src/main_loop.c @@ -5,6 +5,8 @@ #include "sprite.h" #include "overlay.h" #include "game_modes.h" +#include "dx/profiling.h" +#include "dx/debug_menu.h" SHIFT_BSS s32 gOverrideFlags; SHIFT_BSS s32 timeFreezeMode; @@ -49,11 +51,14 @@ void gfx_init_state(void); void gfx_draw_background(void); void step_game_loop(void) { + profiler_frame_setup(); + PlayerData* playerData = &gPlayerData; const int MAX_GAME_TIME = 1000*60*60*60 - 1; // 1000 hours minus one frame at 60 fps #if !VERSION_JP update_input(); + profiler_update(PROFILER_TIME_CONTROLLERS, 0); #endif gGameStatusPtr->frameCounter++; @@ -65,6 +70,7 @@ void step_game_loop(void) { #if VERSION_JP update_input(); + profiler_update(PROFILER_TIME_CONTROLLERS, 0); #endif update_max_rumble_duration(); @@ -81,12 +87,19 @@ void step_game_loop(void) { mdl_reset_transform_flags(); npc_iter_no_op(); update_workers(); + profiler_update(PROFILER_TIME_WORKERS, 0); update_triggers(); + profiler_update(PROFILER_TIME_TRIGGERS, 0); update_scripts(); + profiler_update(PROFILER_TIME_EVT, 0); update_messages(); + profiler_update(PROFILER_TIME_MESSAGES, 0); update_hud_elements(); + profiler_update(PROFILER_TIME_HUD_ELEMENTS, 0); step_current_game_mode(); + profiler_update(PROFILER_TIME_STEP_GAME_MODE, 0); update_entities(); + profiler_update(PROFILER_TIME_ENTITIES, 0); func_80138198(); bgm_update_music_settings(); update_ambient_sounds(); @@ -172,6 +185,8 @@ void gfx_task_background(void) { } void gfx_draw_frame(void) { + profiler_gfx_started(); + gMatrixListPos = 0; gMainGfxPos = &gDisplayContext->mainGfx[0]; @@ -184,12 +199,16 @@ void gfx_draw_frame(void) { spr_render_init(); + GFX_PROFILER_COMPLETE(PROFILER_TIME_SUB_GFX_UPDATE); // dummy + if (!(gOverrideFlags & GLOBAL_OVERRIDES_DISABLE_RENDER_WORLD)) { render_frame(FALSE); } player_render_interact_prompts(); func_802C3EE4(); + + GFX_PROFILER_SWITCH(PROFILER_TIME_SUB_GFX_HUD_ELEMENTS, PROFILER_TIME_SUB_GFX_BACK_UI); render_screen_overlay_backUI(); render_workers_backUI(); render_hud_elements_backUI(); @@ -200,6 +219,8 @@ void gfx_draw_frame(void) { render_window_root(); } + GFX_PROFILER_SWITCH(PROFILER_TIME_SUB_GFX_BACK_UI, PROFILER_TIME_SUB_GFX_FRONT_UI); + if (!(gOverrideFlags & GLOBAL_OVERRIDES_DISABLE_RENDER_WORLD) && gGameStatusPtr->debugScripts == DEBUG_SCRIPTS_NONE) { render_frame(TRUE); } @@ -241,6 +262,15 @@ void gfx_draw_frame(void) { } } + GFX_PROFILER_COMPLETE(PROFILER_TIME_SUB_GFX_FRONT_UI); + + profiler_gfx_completed(); + profiler_print_times(); + + #if DX_DEBUG_MENU + dx_debug_console_main(); + #endif + ASSERT((s32)(((u32)(gMainGfxPos - gDisplayContext->mainGfx) << 3) >> 3) < ARRAY_COUNT(gDisplayContext->mainGfx)); gDPFullSync(gMainGfxPos++); diff --git a/src/main_pre.c b/src/main_pre.c index 946383cc39a..375f5130130 100644 --- a/src/main_pre.c +++ b/src/main_pre.c @@ -6,6 +6,4 @@ u16* ResetSavedFrameImg = NULL; s16 D_80073E08 = 0; s16 D_80073E0A = 0; -s32 D_80073E0C = 0; // unused? - INCLUDE_IMG("reset_tiles.png", ResetTilesImg); diff --git a/src/model.c b/src/model.c index ef5b1065b70..52b11307d5b 100644 --- a/src/model.c +++ b/src/model.c @@ -5,6 +5,8 @@ #include "hud_element.h" #include "model_clear_render_tasks.h" #include "nu/nusys.h" +#include "qsort.h" +#include "dx/debug_menu.h" // models are rendered in two stages by the RDP: // (1) main and aux textures are combined in the color combiner @@ -91,8 +93,14 @@ enum { RENDER_CLASS_2CYC_DEPTH = 11, }; -#define WORLD_TEXTURE_MEMORY_SIZE 0x20000 -#define BATTLE_TEXTURE_MEMORY_SIZE 0x8000 +enum { + RENDER_TASK_LIST_NEAR, // dist < 800K + RENDER_TASK_LIST_MID, + RENDER_TASK_LIST_FAR, // dist >= 3M +}; + +#define WORLD_TEXTURE_MEMORY_SIZE 0x40000 +#define BATTLE_TEXTURE_MEMORY_SIZE 0x16000 SHIFT_BSS u8* gBackgroundTintModePtr; // NOTE: the type for this u8 is TintMode, as shown in SetModelTintMode SHIFT_BSS ModelList* gCurrentModels; @@ -336,7 +344,7 @@ Gfx SolidCombineModes[][5] = { [TINT_COMBINE_DEPTH] gsDPSetCombineMode(PM_CC_ALT_INTERFERENCE, G_CC_MODULATEIA2), [TINT_COMBINE_REMAP] gsDPSetCombineMode(PM_CC_ALT_INTERFERENCE, PM_CC_TINT_REMAP_SHADE_ALPHA), }, - + // shaded color multiplied main/aux textures for alpha [TEX_COMBINE_3] { [TINT_COMBINE_NONE] gsDPSetCombineMode(PM_CC_26, PM_CC_27), @@ -1341,11 +1349,10 @@ SHIFT_BSS ModelNode* mtg_FoundModelNode; SHIFT_BSS u16 mtg_MinChild; SHIFT_BSS u16 mtg_MaxChild; SHIFT_BSS u16 mtg_SearchModelID; -SHIFT_BSS RenderTask* RenderTaskLists[3]; -SHIFT_BSS s32 RenderTaskListIdx; -SHIFT_BSS s32 RenderTaskCount; +SHIFT_BSS RenderTask* RenderTaskLists[NUM_RENDER_TASK_LISTS]; +SHIFT_BSS s32 RenderTaskCount[NUM_RENDER_TASK_LISTS]; -SHIFT_BSS TextureHandle TextureHandles[128]; +SHIFT_BSS TextureHandle TextureHandles[256]; SHIFT_BSS u16 DepthCopyBuffer[16]; @@ -1404,7 +1411,7 @@ void appendGfx_model(void* data) { renderMode = model->renderMode; tintCombineType = 0; - + if (textureHeader != NULL) { switch (extraTileType) { case EXTRA_TILE_NONE: @@ -1422,7 +1429,7 @@ void appendGfx_model(void* data) { } else { renderClass = RENDER_CLASS_1CYC; } - + if (textureHeader != NULL || renderMode <= RENDER_MODES_LAST_OPAQUE) { if (gFogSettings->enabled && !(flags & MODEL_FLAG_IGNORE_FOG)) { renderClass = RENDER_CLASS_FOG; @@ -2062,6 +2069,12 @@ void load_texture_by_name(ModelNodeProperty* propertyName, s32 romOffset, s32 si dma_copy((u8*)romOffset, (u8*)romOffset + sizeof(gCurrentTextureHeader), &gCurrentTextureHeader); header = &gCurrentTextureHeader; + if (strcmp(header->name, "end_of_textures") == 0) { + debug_printf("could not find texture '%s'\n", textureName); + (*gCurrentModelTreeNodeInfo)[TreeIterPos].textureID = 0; + return; + } + rasterSize = header->mainW * header->mainH; // compute mipmaps size @@ -2143,18 +2156,25 @@ void load_texture_by_name(ModelNodeProperty* propertyName, s32 romOffset, s32 si break; } + // try appending "tif" - this is a common issue with textures ported from Star Rod mods + char tifName[32]; + strcpy(tifName, textureName); + strcat(tifName, "tif"); + if (strcmp(tifName, header->name) == 0) { + break; + } + + // try without the area prefix + if (strcmp(textureName, &header->name[4]) == 0) { + break; + } + textureIdx++; mainSize = rasterSize + paletteSize + sizeof(*header); romOffset += mainSize; romOffset += auxRasterSize + auxPaletteSize; } - if (romOffset >= startOffset + 0x40000) { - // did not find the texture with `textureName` - (*gCurrentModelTreeNodeInfo)[TreeIterPos].textureID = 0; - return; - } - (*gCurrentModelTreeNodeInfo)[TreeIterPos].textureID = textureIdx + 1; textureHandle = &TextureHandles[(*gCurrentModelTreeNodeInfo)[TreeIterPos].textureID]; romOffset += sizeof(*header); @@ -4392,7 +4412,7 @@ s32 is_model_center_visible(u16 modelID, s32 depthQueryID, f32* screenX, f32* sc // Every nonnegative value of `depthQueryID` must be unique within a frame, otherwise the result will corrupt the data // of the previous query that shared the same ID. // Occlusion visibility checks are always one frame out of date, as they reference the previous frame's depth buffer. -s32 is_point_visible(f32 x, f32 y, f32 z, s32 depthQueryID, f32* screenX, f32* screenY) { +OPTIMIZE_OFAST s32 is_point_visible(f32 x, f32 y, f32 z, s32 depthQueryID, f32* screenX, f32* screenY) { Camera* camera = &gCameras[gCurrentCameraID]; f32 outX; f32 outY; @@ -4548,27 +4568,22 @@ void clear_render_tasks(void) { RenderTaskLists[i] = ClearRenderTaskLists[i]; } - RenderTaskListIdx = 0; - RenderTaskCount = 0; -} - -void clear_render_tasks_alt(void) { - s32 i; - - for (i = 0; i < ARRAY_COUNT(ClearRenderTaskLists); i++) { - RenderTaskLists[i] = ClearRenderTaskLists[i]; + for (i = 0; i < ARRAY_COUNT(RenderTaskCount); i++) { + RenderTaskCount[i] = 0; } - - RenderTaskListIdx = 0; - RenderTaskCount = 0; } RenderTask* queue_render_task(RenderTask* task) { - RenderTask* ret = RenderTaskLists[RenderTaskListIdx]; + s32 dist = RenderTaskBasePriorities[task->renderMode] - task->dist; + s32 listIdx = RENDER_TASK_LIST_MID; + if (dist >= 3000000) listIdx = RENDER_TASK_LIST_FAR; + else if (dist < 800000) listIdx = RENDER_TASK_LIST_NEAR; + + RenderTask* ret = RenderTaskLists[listIdx]; - ASSERT(RenderTaskCount < ARRAY_COUNT(*ClearRenderTaskLists)); + ASSERT(RenderTaskCount[listIdx] < ARRAY_COUNT(*ClearRenderTaskLists)); - ret = &ret[RenderTaskCount++]; + ret = &ret[RenderTaskCount[listIdx]++]; ret->renderMode = RENDER_TASK_FLAG_ENABLED; if (task->renderMode == RENDER_MODE_CLOUD_NO_ZCMP) { @@ -4577,85 +4592,47 @@ RenderTask* queue_render_task(RenderTask* task) { ret->appendGfxArg = task->appendGfxArg; ret->appendGfx = task->appendGfx; - ret->dist = RenderTaskBasePriorities[task->renderMode] - task->dist; + ret->dist = dist; return ret; } -void execute_render_tasks(void) { - s32 i, j, taskCount; - s32 sorted[ARRAY_COUNT(*ClearRenderTaskLists)]; +OPTIMIZE_OFAST void execute_render_tasks(void) { + s32 i, j; + s32 sorteds[NUM_RENDER_TASK_LISTS][ARRAY_COUNT(*ClearRenderTaskLists)]; + s32* sorted; RenderTask* taskList; RenderTask* task; RenderTask* task2; Matrix4f mtxFlipY; void (*appendGfx)(void*); + s32 tmp; - if (RenderTaskCount == 0) { - return; - } - - for (i = taskCount = 0; i < RenderTaskCount; i++) { - sorted[taskCount++] = i; - } - - // sort in ascending order - taskList = RenderTaskLists[RenderTaskListIdx]; - for (i = 0; i < taskCount - 1; i++) { - for (j = i + 1; j < taskCount; j++) { - s32 t1 = sorted[i]; - s32 t2 = sorted[j]; - task = &taskList[t1]; - task2 = &taskList[t2]; - if (task->dist > task2->dist) { - sorted[i] = t2; - sorted[j] = t1; - } + for (s32 j = 0; j < ARRAY_COUNT(RenderTaskCount); j++) { + for (i = 0; i < RenderTaskCount[j]; i++) { + sorteds[j][i] = i; } } + // sort in ascending order of dist + taskList = RenderTaskLists[RENDER_TASK_LIST_MID]; + sorted = &sorteds[RENDER_TASK_LIST_MID]; +#define LESS(i, j) taskList[sorted[i]].dist < taskList[sorted[j]].dist +#define SWAP(i, j) tmp = sorted[i], sorted[i] = sorted[j], sorted[j] = tmp + QSORT(RenderTaskCount[RENDER_TASK_LIST_MID], LESS, SWAP); + // tasks with dist >= 3M sort in descending order - taskList = RenderTaskLists[RenderTaskListIdx]; - for (i = 0; i < taskCount - 1; i++) { - task = &taskList[sorted[i]]; - if (task->dist >= 3000000) { - for (j = i + 1; j < taskCount; j++) { - s32 t1 = sorted[i]; - s32 t2 = sorted[j]; - task = &taskList[t1]; - task2 = &taskList[t2]; - if (task->dist < task2->dist) { - sorted[i] = t2; - sorted[j] = t1; - } - } - } - } + taskList = RenderTaskLists[RENDER_TASK_LIST_FAR]; + sorted = &sorteds[RENDER_TASK_LIST_FAR]; +#define LESS(i, j) taskList[sorted[i]].dist > taskList[sorted[j]].dist + QSORT(RenderTaskCount[RENDER_TASK_LIST_FAR], LESS, SWAP); // tasks with dist <= 800k sort in descending order - taskList = RenderTaskLists[RenderTaskListIdx]; - for (i = 0; i < taskCount - 1; i++) { - task = &taskList[sorted[i]]; - if (task->dist > 800000) { - break; - } - for (j = i + 1; j < taskCount; j++) { - s32 t1 = sorted[i]; - s32 t2 = sorted[j]; - task = &taskList[t1]; - task2 = &taskList[t2]; - if (task2->dist > 800000) { - break; - } - if (task->dist < task2->dist) { - sorted[i] = t2; - sorted[j] = t1; - } - } - } + taskList = RenderTaskLists[RENDER_TASK_LIST_NEAR]; + sorted = &sorteds[RENDER_TASK_LIST_NEAR]; + QSORT(RenderTaskCount[RENDER_TASK_LIST_NEAR], LESS, SWAP); - gLastRenderTaskCount = taskCount; - taskList = RenderTaskLists[RenderTaskListIdx]; + gLastRenderTaskCount = RenderTaskCount[RENDER_TASK_LIST_MID] + RenderTaskCount[RENDER_TASK_LIST_FAR] + RenderTaskCount[RENDER_TASK_LIST_NEAR]; if (gOverrideFlags & GLOBAL_OVERRIDES_ENABLE_FLOOR_REFLECTION) { Mtx* dispMtx; Gfx* savedGfxPos = NULL; @@ -4663,36 +4640,38 @@ void execute_render_tasks(void) { guScaleF(mtxFlipY, 1.0f, -1.0f, 1.0f); guMtxF2L(mtxFlipY, &gDisplayContext->matrixStack[gMatrixListPos]); dispMtx = &gDisplayContext->matrixStack[gMatrixListPos++]; - for (i = 0; i < taskCount; i++) { - task = &taskList[sorted[i]]; - appendGfx = task->appendGfx; + for (j = 0; j < NUM_RENDER_TASK_LISTS; j++) { + for (i = 0; i < RenderTaskCount[j]; i++) { + task = &RenderTaskLists[j][sorteds[j][i]]; + appendGfx = task->appendGfx; - if (task->renderMode & RENDER_TASK_FLAG_REFLECT_FLOOR) { - savedGfxPos = gMainGfxPos++; - } + if (task->renderMode & RENDER_TASK_FLAG_REFLECT_FLOOR) { + savedGfxPos = gMainGfxPos++; + } - appendGfx(task->appendGfxArg); + appendGfx(task->appendGfxArg); - if (task->renderMode & RENDER_TASK_FLAG_REFLECT_FLOOR) { - gSPEndDisplayList(gMainGfxPos++); - gSPBranchList(savedGfxPos, gMainGfxPos); - gSPDisplayList(gMainGfxPos++, savedGfxPos + 1); - gSPMatrix(gMainGfxPos++, dispMtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); - gSPDisplayList(gMainGfxPos++, savedGfxPos + 1); - gSPMatrix(gMainGfxPos++, &gDisplayContext->camPerspMatrix[gCurrentCamID], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + if (task->renderMode & RENDER_TASK_FLAG_REFLECT_FLOOR) { + gSPEndDisplayList(gMainGfxPos++); + gSPBranchList(savedGfxPos, gMainGfxPos); + gSPDisplayList(gMainGfxPos++, savedGfxPos + 1); + gSPMatrix(gMainGfxPos++, dispMtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + gSPDisplayList(gMainGfxPos++, savedGfxPos + 1); + gSPMatrix(gMainGfxPos++, &gDisplayContext->camPerspMatrix[gCurrentCamID], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + } } } } else { - for (i = 0; i < taskCount; i++) { - task = &taskList[sorted[i]]; - appendGfx = task->appendGfx; - appendGfx(task->appendGfxArg); + for (j = 0; j < NUM_RENDER_TASK_LISTS; j++) { + for (i = 0; i < RenderTaskCount[j]; i++) { + task = &RenderTaskLists[j][sorteds[j][i]]; + appendGfx = task->appendGfx; + appendGfx(task->appendGfxArg); + } } } - RenderTaskListIdx++; - if (RenderTaskListIdx > ARRAY_COUNT(RenderTaskLists) - 1) { - RenderTaskListIdx = 0; - } - RenderTaskCount = 0; + RenderTaskCount[RENDER_TASK_LIST_MID] = 0; + RenderTaskCount[RENDER_TASK_LIST_FAR] = 0; + RenderTaskCount[RENDER_TASK_LIST_NEAR] = 0; } diff --git a/src/msg.c b/src/msg.c index 1e027a30e01..a077777ef8a 100644 --- a/src/msg.c +++ b/src/msg.c @@ -2001,10 +2001,6 @@ void get_msg_properties(s32 msgID, s32* height, s32* width, s32* maxLineChars, s } } -#if !VERSION_JP -static const f32 padding = 0.0f; -#endif - s32 get_msg_width(s32 msgID, u16 charset) { s32 width; @@ -2259,7 +2255,7 @@ void draw_digit(IMG_PTR img, s32 charset, s32 posX, s32 posY) { void draw_number(s32 value, s32 x, s32 y, s32 charset, s32 palette, s32 opacity, u16 style) { u8 valueStr[24]; - u8 digits[24]; + s8 digits[24]; s32 digitPosX[24]; s32 i; s32 count; @@ -2282,6 +2278,12 @@ void draw_number(s32 value, s32 x, s32 y, s32 charset, s32 palette, s32 opacity, break; } + // handle negative numbers + if (valueStr[i] == '-') { + digits[i] = MSG_CHAR_MINUS - MSG_CHAR_DIGIT_0; + continue; + } + digit = valueStr[i] - '0'; if (digit < 10){ digits[i] = digit; @@ -2294,7 +2296,7 @@ void draw_number(s32 value, s32 x, s32 y, s32 charset, s32 palette, s32 opacity, if (style & DRAW_NUMBER_STYLE_ALIGN_RIGHT) { for (i = count - 1; i >= 0; i--) { - if (style & DRAW_NUMBER_STYLE_MONOSPACE) { + if ((style & DRAW_NUMBER_STYLE_MONOSPACE) || digits[i] < 0) { posX -= gMsgNumbers[charset].fixedWidth; } else { posX -= gMsgNumbers[charset].digitWidth[digits[i]]; @@ -2304,7 +2306,7 @@ void draw_number(s32 value, s32 x, s32 y, s32 charset, s32 palette, s32 opacity, } else { for (i = 0; i < count; i++) { digitPosX[i] = posX; - if (style & DRAW_NUMBER_STYLE_MONOSPACE) { + if ((style & DRAW_NUMBER_STYLE_MONOSPACE) || digits[i] < 0) { posX += gMsgNumbers[charset].fixedWidth; } else { posX += gMsgNumbers[charset].digitWidth[digits[i]]; diff --git a/src/msg_draw.c b/src/msg_draw.c index b36df2b671e..68f64ad6356 100644 --- a/src/msg_draw.c +++ b/src/msg_draw.c @@ -6,6 +6,11 @@ #include "charset/postcard.png.h" #include "charset/letter_content_1.png.h" +//TODO get a real ceil +s32 my_ceil(f32 f) { + return (s32)(f + 0.999f); +} + extern IMG_BIN ui_msg_bubble_left_png[]; extern IMG_BIN ui_msg_bubble_mid_png[]; extern IMG_BIN ui_msg_bubble_right_png[]; @@ -2087,9 +2092,14 @@ void msg_draw_frame(s32 posX, s32 posY, s32 sizeX, s32 sizeY, s32 style, s32 pal do {} while (0); switch (style) { case MSG_STYLE_CHOICE: - r = UNPACK_PAL_R(((u16*)ui_msg_palettes)[4]) * 8; - g = UNPACK_PAL_G(((u16*)ui_msg_palettes)[4]) * 8; - b = UNPACK_PAL_B(((u16*)ui_msg_palettes)[4]) * 8; + r = UNPACK_PAL_R(((u16*)ui_msg_palettes)[4]); + g = UNPACK_PAL_G(((u16*)ui_msg_palettes)[4]); + b = UNPACK_PAL_B(((u16*)ui_msg_palettes)[4]); + // BUGFIX: properly remap colors to full range [0, 255] + r = my_ceil(255 * r / 31.0); + g = my_ceil(255 * g / 31.0); + b = my_ceil(255 * b / 31.0); + gDPPipeSync(gMainGfxPos++); if (fading != 0 && bgAlpha < 255) { gDPSetRenderMode(gMainGfxPos++, IM_RD | CVG_DST_SAVE | ZMODE_XLU | FORCE_BL | GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), IM_RD | CVG_DST_SAVE | ZMODE_XLU | FORCE_BL | GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)); diff --git a/src/npc.c b/src/npc.c index f99c5d528e0..53b1939517c 100644 --- a/src/npc.c +++ b/src/npc.c @@ -5,6 +5,7 @@ #include "sprite.h" #include "world/partners.h" #include "sprite/npc/WorldWatt.h" +#include "dx/debug_menu.h" SHIFT_BSS s16 gNpcCount; SHIFT_BSS NpcList gWorldNpcList; @@ -2656,7 +2657,13 @@ void kill_enemy(Enemy* enemy) { enemy->auxBytecode = NULL; enemy->defeatBytecode = NULL; + #if DX_DEBUG_MENU + if (enemy->npcID != (s16) DX_DEBUG_DUMMY_ID) { + free_npc(get_npc_unsafe(enemy->npcID)); + } + #else free_npc(get_npc_unsafe(enemy->npcID)); + #endif if (enemy->unk_64 != NULL) { heap_free(enemy->unk_64); diff --git a/src/npc_collision.c b/src/npc_collision.c index 38cb2d41236..ec8d0365f99 100644 --- a/src/npc_collision.c +++ b/src/npc_collision.c @@ -7,7 +7,7 @@ SHIFT_BSS s32 NpcHitQueryAheadY; SHIFT_BSS s32 NpcHitQueryBehindLeftY; SHIFT_BSS s32 NpcHitQueryColliderID; -PlayerStatus* gPlayerStatusPtr = &gPlayerStatus; // maybe wPlayerStatus +PlayerStatus* gPlayerStatusPtr = &gPlayerStatus; s32 npc_raycast_down(s32 ignoreFlags, f32* startX, f32* startY, f32* startZ, f32* hitDepth) { f32 cHitX; diff --git a/src/os/_getcount.c b/src/os/_getcount.c index 045c55fb2e2..938ae78e556 100644 --- a/src/os/_getcount.c +++ b/src/os/_getcount.c @@ -2,7 +2,6 @@ #include "macros.h" #include "PR/os_internal.h" -#ifdef BBPLAYER u32 __osBbLastRCount; u32 __osBbRCountWraps; u32 __osBbLastVCount; @@ -32,4 +31,3 @@ u32 osGetCount(void) { return count; } -#endif diff --git a/src/os/strcpy.c b/src/os/strcpy.c index ad7944e55ee..a36f5a49946 100644 --- a/src/os/strcpy.c +++ b/src/os/strcpy.c @@ -10,3 +10,15 @@ char* strcpy(char* dest, const char* src) { *var_v1 = 0; return dest; } + +char* strncpy(char* dest, const char* src, size_t n) { + const unsigned char* var_a1 = src; + unsigned char* var_v1 = dest; + + while (n > 0 && *var_a1 != 0) { + *var_v1++ = *var_a1++; + n--; + } + *var_v1 = 0; + return dest; +} diff --git a/src/os/string.c b/src/os/string.c index ae02a3db327..0821361fd65 100644 --- a/src/os/string.c +++ b/src/os/string.c @@ -18,6 +18,18 @@ size_t strlen(const char* s) { return sc - s; } +char* strcat(char* dest, const char* src) { + char* d = dest; + while (*d) { + d++; + } + while (*src) { + *d++ = *src++; + } + *d = 0; + return dest; +} + void* memcpy(void* s1, const void* s2, size_t n) { char* su1 = (char*)s1; const char *su2 = (const char*)s2; diff --git a/src/os/xprintf.c b/src/os/xprintf.c index 3a18c2e2710..6588f192541 100644 --- a/src/os/xprintf.c +++ b/src/os/xprintf.c @@ -212,7 +212,7 @@ static void _Putfld(_Pft *x, va_list *args, char type, char *buff) { break; case 'p': - x->v.ll = (long)va_arg(*args, void *); + x->v.ll = (unsigned int)va_arg(*args, void *); x->s = (char *)&buff[x->n0]; _Litob(x, 'x'); break; diff --git a/src/pause/pause_badges.c b/src/pause/pause_badges.c index 1d21ba2231f..9d2fbd31120 100644 --- a/src/pause/pause_badges.c +++ b/src/pause/pause_badges.c @@ -36,6 +36,9 @@ static s32 gPauseBadgesIconIDs[22]; // Invalid badge ID filled in unused slots of gPauseBadgesItemIds #define BADGE_INVALID 0x7FFF +// return value of pause_badges_try_remove if the player tried to remove a negative bp badge while not having enough remaining bp +#define TRY_REMOVE_NOT_ENOUGH_BP_RESULT -1 + #if VERSION_IQUE #define OFFSET_1_X 47 #define OFFSET_1_Y 82 @@ -216,11 +219,18 @@ s32 pause_badges_try_remove(s16 badgeID) { s16 *slotToRemove = currentSlot; s32 result = 0; s32 i; + s32 bpCost; if (badgeID == BADGE_INVALID) { return 0; } + // handle negative bp cost badges + bpCost = gMoveTable[gItemTable[badgeID].moveID].costBP; + if (bpCost < 0 && gPlayerData.maxBP < pause_get_total_equipped_bp_cost() - bpCost) { + return TRY_REMOVE_NOT_ENOUGH_BP_RESULT; + } + for (i = 0; i < ARRAY_COUNT(gPlayerData.equippedBadges); i++, currentSlot++) { if (badgeID == *currentSlot) { slotToRemove = currentSlot; @@ -827,10 +837,8 @@ void pause_badges_load_badges(s32 onlyEquipped) { for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) { s16 badgeItemID = playerData->badges[i]; - if (badgeItemID == 0) { + if (badgeItemID == ITEM_NONE) { continue; - } else if (badgeItemID > ITEM_LAST_BADGE) { - break; } else { gPauseBadgesItemIds[numItems] = badgeItemID; numItems += 1; @@ -953,8 +961,15 @@ void pause_badges_handle_input(MenuPanel* panel) { badgeID = gPauseBadgesItemIds[selectedIndex]; switch (pause_badges_try_equip(badgeID)) { case EQUIP_RESULT_ALREADY_EQUIPPED: - sfx_play_sound(SOUND_MENU_BADGE_UNEQUIP); - pause_badges_try_remove(badgeID); + switch (pause_badges_try_remove(badgeID)) { + case TRY_REMOVE_NOT_ENOUGH_BP_RESULT: + sfx_play_sound(SOUND_MENU_ERROR); + gPauseBadgesShowNotEnoughBP = 1; + break; + default: + sfx_play_sound(SOUND_MENU_BADGE_UNEQUIP); + break; + } break; case EQUIP_RESULT_NOT_ENOUGH_BP: sfx_play_sound(SOUND_MENU_ERROR); diff --git a/src/pause/pause_partners.c b/src/pause/pause_partners.c index c20d1e09f63..a9deffe7ade 100644 --- a/src/pause/pause_partners.c +++ b/src/pause/pause_partners.c @@ -472,7 +472,7 @@ void pause_partners_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 wid void pause_partners_draw_title(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening) { s32 msgID = gPartnerPopupProperties[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].nameMsg; - s32 level = get_player_data()->partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; + s32 level = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; s32 msgWidth = get_msg_width(msgID, 0); s32 offset; @@ -507,7 +507,7 @@ void pause_partners_draw_movelist(MenuPanel* menu, s32 baseX, s32 baseY, s32 wid s32 costFP; s32 msgX, msgY; s32 style; - s32 level = get_player_data()->partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; + s32 level = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; if (level == PARTNER_RANK_ULTRA) { @@ -589,11 +589,10 @@ void pause_partners_draw_movelist_flower(MenuPanel* menu, s32 baseX, s32 baseY, void pause_partners_init(MenuPanel* panel) { s32 i; - PlayerData* playerData = get_player_data(); gPausePartnersNumPartners = 0; for (i = 0; i < ARRAY_COUNT(gPausePartnersPartnerIDs); i++) { - if (playerData->partners[gPausePartnersPartnerIDs[i]].enabled) { + if (gPlayerData.partners[gPausePartnersPartnerIDs[i]].enabled) { gPausePartnersPartnerIdx[gPausePartnersNumPartners] = i; gPausePartnersNumPartners++; } @@ -629,7 +628,7 @@ void pause_partners_init(MenuPanel* panel) { gPausePartnersCurrentPartnerIdx = 0; for (i = 0; i < gPausePartnersNumPartners; i++) { - if (playerData->curPartner == gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[i]]) { + if (gPlayerData.curPartner == gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[i]]) { gPausePartnersCurrentPartnerIdx = i; break; } @@ -687,7 +686,7 @@ void pause_partners_handle_input(MenuPanel* panel) { } } - level = get_player_data()->partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; + level = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; if (level == PARTNER_RANK_ULTRA) { level = 4; } else if (level == PARTNER_RANK_SUPER) { @@ -701,7 +700,7 @@ void pause_partners_handle_input(MenuPanel* panel) { if (gPausePartnersLevel == 1) { oldPos = gPausePartnersSelectedMove; - level2 = get_player_data()->partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; + level2 = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level; if (level2 == 2) { level2 = 4; } else if (level2 == 1) { diff --git a/src/pause/pause_spirits.c b/src/pause/pause_spirits.c index 815f600a647..cd208ca2834 100644 --- a/src/pause/pause_spirits.c +++ b/src/pause/pause_spirits.c @@ -155,7 +155,6 @@ void pause_spirits_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 widt s32 x1, y1, x2, y2; f32 frameCounter; f32 scale; - PlayerData* playerData = get_player_data(); gDPPipeSync(gMainGfxPos++); gSPViewport(gMainGfxPos++, &gPauseSpiritsViewport); @@ -183,7 +182,7 @@ void pause_spirits_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 widt x = gPauseSpiritsPositions[index].x; y = gPauseSpiritsPositions[index].y; - if (playerData->maxStarPower < index + 1) { + if (gPlayerData.maxStarPower < index + 1) { color = 0; alpha = 128; offsetY = 0.0f; @@ -246,10 +245,9 @@ void pause_spirits_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 widt void pause_spirits_draw_title(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening) { s32 msgID; - PlayerData* playerData = get_player_data(); if (gPauseMenuCurrentTab == 5) { - if (playerData->maxStarPower > gPauseSpiritsIndexes[menu->selected]) { + if (gPlayerData.maxStarPower > gPauseSpiritsIndexes[menu->selected]) { msgID = gPauseSpiritsIndexes[menu->selected] + MSG_Menus_SpiritName_Eldstar; } else { msgID = pause_get_menu_msg(PAUSE_MSG_UNKNOWN_SPIRIT); @@ -261,7 +259,6 @@ void pause_spirits_draw_title(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, void pause_spirits_init(MenuPanel* panel) { s32 i; - get_player_data(); gPauseSpiritsNumSpirits = 0; for (i = 0; i < ARRAY_COUNT(gPauseSpiritsIndexes); i++) { @@ -372,7 +369,7 @@ void pause_spirits_handle_input(MenuPanel* panel) { gPauseCurrentDescIconScript = 0; - if (get_player_data()->maxStarPower <= gPauseSpiritsIndexes[panel->selected]) { + if (gPlayerData.maxStarPower <= gPauseSpiritsIndexes[panel->selected]) { gPauseCurrentDescMsg = pause_get_menu_msg(PAUSE_MSG_UNKNOWN_SPIRIT); } else { gPauseCurrentDescMsg = MSG_Menus_SpiritDesc_Eldstar + gPauseSpiritsIndexes[panel->selected]; @@ -380,15 +377,13 @@ void pause_spirits_handle_input(MenuPanel* panel) { } void pause_spirits_update(MenuPanel* panel) { - PlayerData* playerData = get_player_data(); s32 i; for (i = 0; i < gPauseSpiritsNumSpirits; i++) { - if (i < playerData->maxStarPower && gPauseMenuCurrentTab == 5 && i == panel->selected) { + if (i < gPlayerData.maxStarPower && gPauseMenuCurrentTab == 5 && i == panel->selected) { spr_update_sprite(gPauseSpiritsSpriteIDs[i], gPauseSpiritsSpriteAnims[i][1], 1.0f); } else { - //TODO find better match - do { spr_update_sprite(gPauseSpiritsSpriteIDs[i], gPauseSpiritsSpriteAnims[i][0], 1.0f); } while (0); + spr_update_sprite(gPauseSpiritsSpriteIDs[i], gPauseSpiritsSpriteAnims[i][0], 1.0f); } } } diff --git a/src/pulse_stone.c b/src/pulse_stone.c index 4bcf346d7f9..fd483e45b69 100644 --- a/src/pulse_stone.c +++ b/src/pulse_stone.c @@ -33,15 +33,17 @@ s32 should_cancel_pulse_stone(void) { PartnerStatus* partnerStatus = &gPartnerStatus; s8 actionState = playerStatus->actionState; - // could be written more clearly if these two condtions were inverted - if (actionState != ACTION_STATE_USE_TWEESTER) { - if (!(partnerStatus->partnerActionState == PARTNER_ACTION_USE - && (partnerStatus->actingPartner == PARTNER_BOW || partnerStatus->actingPartner == PARTNER_PARAKARRY)) - ) { - return FALSE; - } + if (actionState == ACTION_STATE_USE_TWEESTER) { + return TRUE; + } + + if (partnerStatus->partnerActionState == PARTNER_ACTION_USE + && (partnerStatus->actingPartner == PARTNER_BOW || partnerStatus->actingPartner == PARTNER_PARAKARRY) + ) { + return TRUE; } - return TRUE; + + return FALSE; } s32 should_continue_pulse_stone(void) { @@ -53,13 +55,12 @@ s32 should_continue_pulse_stone(void) { && !has_valid_conversation_npc() && !func_800E06D8() ) { + // hardcoded map IDs assuming first 49 maps (in sbk) are a 7x7 grid s32 dx = abs((gGameStatusPtr->mapID % 7) - 2); s32 dy = gGameStatusPtr->mapID / 7; if ((dx + dy) < 6) { if (!should_cancel_pulse_stone()) { - dy = TRUE; // TODO required to set dy to 1 and return that - return TRUE; } } diff --git a/src/sprite.c b/src/sprite.c index a0feb7fec3e..63249e66d3e 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -1,27 +1,20 @@ #include "sprite.h" #include "sprite/player.h" -#define MAX_SPRITE_ID 0xEA // todo generate this +#define MAX_SPRITE_ID 0xFF // todo generate this extern HeapNode heap_generalHead; extern HeapNode heap_spriteHead; -BSS s32 D_802DF520; // unused? BSS s32 spr_allocateBtlComponentsOnWorldHeap; -BSS s32 D_802DF528[2]; // unused? BSS s32 MaxLoadedSpriteInstanceID; -BSS s32 D_802DF534[3]; // unused? BSS s32 D_802DF540; -BSS s32 D_802DF544; // unused? BSS SpriteAnimData* spr_playerSprites[13]; BSS s32 D_802DF57C; BSS s32 spr_playerMaxComponents; -BSS s32 D_802DF584; // unused? BSS PlayerCurrentAnimInfo spr_playerCurrentAnimInfo[3]; -BSS s32 D_802DF5AC; // unused? BSS SpriteAnimData* NpcSpriteData[MAX_SPRITE_ID]; BSS u8 NpcSpriteInstanceCount[MAX_SPRITE_ID]; -BSS s32 D_802DFA44; // unused? BSS SpriteInstance SpriteInstances[51]; BSS Quad* D_802DFE44; BSS s32 D_802DFE48[22]; @@ -147,28 +140,27 @@ Quad* spr_get_cached_quad(s32 quadIndex) { void spr_make_quad_for_size(Quad* quad, s32 width, s32 height) { Vtx* vtx = &quad->v[0]; - s32 w = width; // required to match *quad = spr_defaultQuad; - vtx->v.ob[0] = -w / 2; + vtx->v.ob[0] = -width / 2; vtx->v.ob[1] = height; vtx->v.tc[0] = 0x2000; vtx->v.tc[1] = 0x2000; vtx++; - vtx->v.ob[0] = w / 2; + vtx->v.ob[0] = width / 2; vtx->v.ob[1] = height; - vtx->v.tc[0] = (w + 256) * 32; + vtx->v.tc[0] = (width + 256) * 32; vtx->v.tc[1] = 0x2000; vtx++; - vtx->v.tc[0] = (w + 256) * 32; - vtx->v.ob[0] = w / 2; + vtx->v.tc[0] = (width + 256) * 32; + vtx->v.ob[0] = width / 2; vtx->v.tc[1] = (height + 256) * 32; vtx++; - vtx->v.ob[0] = -w / 2; + vtx->v.ob[0] = -width / 2; vtx->v.tc[0] = 0x2000; vtx->v.tc[1] = (height + 256) * 32; } @@ -774,7 +766,7 @@ void spr_init_sprites(s32 playerSpriteSet) { s32 i; spr_allocateBtlComponentsOnWorldHeap = FALSE; - _heap_create(&heap_spriteHead, 0x40000); + _heap_create(&heap_spriteHead, SPRITE_HEAP_SIZE); imgfx_init(); for (i = 0; i < ARRAY_COUNT(spr_playerSprites); i++) { @@ -1087,6 +1079,8 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) { s32 i = spriteInstanceID & 0xFF; s32 animIndex = animID & 0xFF; + ASSERT_MSG(i <= MaxLoadedSpriteInstanceID, "Invalid sprite instance ID %x", spriteInstanceID); + compList = SpriteInstances[i].componentList; spriteData = (u32*)SpriteInstances[i].spriteData; @@ -1097,6 +1091,7 @@ s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale) { palID = (animID >> 8) & 0xFF; spr_set_anim_timescale(timeScale); if ((spriteInstanceID & DRAW_SPRITE_OVERRIDE_ALPHA) || ((SpriteInstances[i].curAnimID & 0xFF) != animIndex)) { + ASSERT_MSG(animList != -1, "Anim %x is not loaded", animID); spr_init_anim_state(compList, animList); SpriteInstances[i].curAnimID = (palID << 8) | animIndex; SpriteInstances[i].notifyValue = 0; diff --git a/src/state_demo.c b/src/state_demo.c index 22041b3c7cf..efdbfe9ea61 100644 --- a/src/state_demo.c +++ b/src/state_demo.c @@ -225,7 +225,7 @@ void state_step_demo(void) { } return; case DEMO_SCENE_WORLD: - get_map_IDs_by_name(demoSceneData->mapName, &areaID, &mapID); + get_map_IDs_by_name_checked(demoSceneData->mapName, &areaID, &mapID); gGameStatusPtr->areaID = areaID; gGameStatusPtr->mapID = mapID; gGameStatusPtr->entryID = demoSceneData->index; @@ -243,7 +243,7 @@ void state_step_demo(void) { set_game_mode(GAME_MODE_ENTER_DEMO_WORLD); break; case DEMO_SCENE_PEACH: - get_map_IDs_by_name(demoSceneData->mapName, &areaID, &mapID); + get_map_IDs_by_name_checked(demoSceneData->mapName, &areaID, &mapID); gGameStatusPtr->areaID = areaID; gGameStatusPtr->mapID = mapID; gGameStatusPtr->entryID = demoSceneData->index; diff --git a/src/state_intro.c b/src/state_intro.c index a2de9ad8980..31e77f4fe84 100644 --- a/src/state_intro.c +++ b/src/state_intro.c @@ -2,6 +2,7 @@ #include "hud_element.h" #include "sprite.h" #include "game_modes.h" +#include "dx/config.h" enum IntroStates { INTRO_INIT = 0x00000000, @@ -9,7 +10,7 @@ enum IntroStates { INTRO_LOAD_MAP = 0x00000002, INTRO_AWAIT_MAIN = 0x00000003, INTRO_FADE_IN = 0x00000004, - INTRO_ENABLE_DRAW_FRAME = 0x00000015, // unused + INTRO_ENABLE_DRAW_FRAME = 0x00000015, // unused }; SHIFT_BSS s32 IntroEnableDrawFrameDelay; @@ -23,16 +24,13 @@ SHIFT_BSS s32 IntroOverlayType; SHIFT_BSS s32 D_800A0964; // related to skipping the intro void state_init_intro(void) { - s8 viewportMode; - gGameStatusPtr->startupState = INTRO_INIT; set_curtain_scale_goal(1.0f); set_curtain_fade_goal(0.3f); - viewportMode = gGameStatusPtr->introPart; - switch (viewportMode) { - case 0: + switch (gGameStatusPtr->introPart) { + case INTRO_PART_0: startup_set_fade_screen_alpha(0); IntroOverlayAlpha = 255; @@ -49,7 +47,7 @@ void state_init_intro(void) { gGameStatusPtr->mapID = 5; //TODO hard-coded map ID gGameStatusPtr->entryID = 3; break; - case 1: + case INTRO_PART_1: startup_set_fade_screen_alpha(0); IntroOverlayAlpha = 0; @@ -96,6 +94,11 @@ void state_step_intro(void) { u32 pressedButtons = gGameStatusPtr->pressedButtons[0]; s32 i; + #if DX_SKIP_STORY + // immediately quit out of the state when skipping story + pressedButtons = BUTTON_START; + #endif + if (gGameStatusPtr->introPart != INTRO_PART_NONE) { if (D_800A0964 == 0 && pressedButtons & (BUTTON_A | BUTTON_B | BUTTON_START | BUTTON_Z)) { D_800A0964 = 1; @@ -200,7 +203,6 @@ void state_step_intro(void) { playerData->maxBP = 2; playerData->bootsLevel = 0; playerData->hammerLevel = -1; - playerData->fortressKeyCount = 0; playerData->level = 0; for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) { diff --git a/src/state_logos.c b/src/state_logos.c index 6198540b54e..026b96f764e 100644 --- a/src/state_logos.c +++ b/src/state_logos.c @@ -4,6 +4,7 @@ #include "hud_element.h" #include "sprite.h" #include "nu/nusys.h" +#include "fio.h" #include "game_modes.h" void appendGfx_intro_logos(void); @@ -125,10 +126,7 @@ void state_init_logos(void) { } void state_step_logos(void) { -#if VERSION_JP int pressedButtons = gGameStatusPtr->pressedButtons[0]; -#endif - if (gGameStatusPtr->skipLogos) { if (startup_fade_screen_out(10)) { set_curtain_scale(1.0f); @@ -136,7 +134,6 @@ void state_step_logos(void) { set_game_mode(GAME_MODE_TITLE_SCREEN); } } else { -#if VERSION_JP if ((gGameStatusPtr->startupState == LOGOS_STATE_N64_HOLD || gGameStatusPtr->startupState == LOGOS_STATE_N64_FADE_OUT || gGameStatusPtr->startupState == LOGOS_STATE_NINTENDO_FADE_IN @@ -152,7 +149,6 @@ void state_step_logos(void) { startup_set_fade_screen_color(208); gGameStatusPtr->skipLogos = TRUE; } -#endif switch (gGameStatusPtr->startupState) { case LOGOS_STATE_N64_FADE_IN: diff --git a/src/state_startup.c b/src/state_startup.c index faeef48878b..efae18e5592 100644 --- a/src/state_startup.c +++ b/src/state_startup.c @@ -3,34 +3,34 @@ #include "fio.h" #include "sprite.h" #include "game_modes.h" +#include "dx/config.h" void state_init_startup(void) { gOverrideFlags |= GLOBAL_OVERRIDES_DISABLE_DRAW_FRAME; - gGameStatusPtr->startupState = 3; + gGameStatus.startupState = 3; } void state_step_startup(void) { - GameStatus* gameStatus = gGameStatusPtr; s32 i; - if (gameStatus->startupState != 0) { - gameStatus->startupState--; + if (gGameStatus.startupState != 0) { + gGameStatus.startupState--; return; } gOverrideFlags = 0; - gGameStatusPtr->areaID = 0; - gGameStatusPtr->isBattle = 0; - gameStatus->prevArea = -1; - gameStatus->mapID = 0; - gameStatus->entryID = 0; - gGameStatusPtr->debugUnused1 = FALSE; - gGameStatusPtr->debugScripts = DEBUG_SCRIPTS_NONE; - gGameStatusPtr->keepUsingPartnerOnMapChange = FALSE; - gGameStatusPtr->introPart = INTRO_PART_NONE; - gGameStatusPtr->demoBattleFlags = 0; - gGameStatusPtr->unk_A9 = -1; - gGameStatusPtr->demoState = DEMO_STATE_NONE; + gGameStatus.areaID = 0; + gGameStatus.isBattle = 0; + gGameStatus.prevArea = -1; + gGameStatus.mapID = 0; + gGameStatus.entryID = 0; + gGameStatus.debugUnused1 = FALSE; + gGameStatus.debugScripts = DEBUG_SCRIPTS_NONE; + gGameStatus.keepUsingPartnerOnMapChange = FALSE; + gGameStatus.introPart = INTRO_PART_NONE; + gGameStatus.demoBattleFlags = 0; + gGameStatus.unk_A9 = -1; + gGameStatus.demoState = DEMO_STATE_NONE; general_heap_create(); clear_render_tasks(); @@ -65,23 +65,49 @@ void state_step_startup(void) { bgm_reset_volume(); initialize_curtains(); - for (i = 0; i < ARRAY_COUNT(gGameStatusPtr->unk_50); i++) { - gGameStatusPtr->unk_50[i] = 4; - gGameStatusPtr->unk_48[i] = 15; + for (i = 0; i < ARRAY_COUNT(gGameStatus.unk_50); i++) { + gGameStatus.unk_50[i] = 4; + gGameStatus.unk_48[i] = 15; } fio_load_globals(); if (gSaveGlobals.useMonoSound == 0) { - gGameStatusPtr->soundOutputMode = SOUND_OUT_STEREO; + gGameStatus.soundOutputMode = SOUND_OUT_STEREO; audio_set_stereo(); } else { - gGameStatusPtr->soundOutputMode = SOUND_OUT_MONO; + gGameStatus.soundOutputMode = SOUND_OUT_MONO; audio_set_mono(); } gOverrideFlags &= ~GLOBAL_OVERRIDES_DISABLE_DRAW_FRAME; - set_game_mode(GAME_MODE_LOGOS); + + #if DX_QUICK_LAUNCH + // immediately jump into the world using last-used save file + gGameStatus.saveSlot = gSaveGlobals.lastFileSelected; + if (fio_load_game(gGameStatus.saveSlot)) { + set_game_mode(GAME_MODE_ENTER_WORLD); + gOverrideFlags &= ~GLOBAL_OVERRIDES_DISABLE_RENDER_WORLD; + return; + } + #endif + + #if DX_SKIP_LOGOS + // go right to the story book or file select + #if DX_SKIP_STORY + set_curtain_scale(1.0f); + set_curtain_fade(0.0f); + set_game_mode(GAME_MODE_TITLE_SCREEN); + #else + set_curtain_scale(1.0f); + set_curtain_fade(0.3f); + gGameStatus.introPart = INTRO_PART_0; + set_game_mode(GAME_MODE_INTRO); + #endif + #else + // use vanilla startup process + set_game_mode(GAME_MODE_LOGOS); + #endif } void state_drawUI_startup(void) { diff --git a/src/state_title_screen.c b/src/state_title_screen.c index 4d2b41dbd0e..ff79a727397 100644 --- a/src/state_title_screen.c +++ b/src/state_title_screen.c @@ -3,6 +3,8 @@ #include "hud_element.h" #include "sprite.h" #include "game_modes.h" +#include "fio.h" +#include "dx/config.h" #if VERSION_JP #define TITLE_WIDTH 272 @@ -44,7 +46,7 @@ enum { s16 TitleScreenNextState = NEXT_STATE_NONE; -SaveMetadata gSaveSlotMetadata[4] = { +FileDisplayData gFilesDisplayData[4] = { { .filename = { FILENAME_ERROR } }, { .filename = { FILENAME_ERROR } }, { .filename = { FILENAME_ERROR } }, @@ -57,7 +59,7 @@ s32 PressStart_Alpha = 0; // the opacity of "PRESS START" text b32 PressStart_IsVisible = FALSE; // toggles the visibility of "PRESS START" s32 PressStart_BlinkCounter = 0; // counts to 16, then toggles PressStart_IsVisible -// controls whether the intro story or the demo will player after TITLE_STATE_HOLD is done +// controls whether the intro story or the demo will player after TITLE_STATE_HOLD is done // since this state is reached for the first time after the intro has already played once or was skipped, // this is initially false and the demo is will play first. s32 PlayIntroNext = FALSE; @@ -225,6 +227,29 @@ void state_step_title_screen(void) { startup_fade_screen_update(); break; case TITLE_STATE_HOLD: + + #if DX_SKIP_DEMO && DX_SKIP_STORY + // play neither demo nor story + TitleScreen_TimeLeft = 200; + #elif DX_SKIP_DEMO + // only the story may play + if (TitleScreen_TimeLeft == 120) { + bgm_set_song(0, -1, 0, 3900, 8); + } + if (TitleScreen_TimeLeft == 0) { + gGameStatusPtr->startupState = TITLE_STATE_BEGIN_DISMISS; + TitleScreenNextState = NEXT_STATE_INTRO; + return; + } + #elif DX_SKIP_STORY + // only the demo may play + if (TitleScreen_TimeLeft == 0) { + gGameStatusPtr->startupState = TITLE_STATE_BEGIN_DISMISS; + TitleScreenNextState = NEXT_STATE_DEMO; + return; + } + #else + // allow either demo or story to play if (PlayIntroNext && TitleScreen_TimeLeft == 120) { bgm_set_song(0, -1, 0, 3900, 8); } @@ -238,6 +263,7 @@ void state_step_title_screen(void) { PlayIntroNext ^= 1; return; } + #endif if (pressedButtons & (BUTTON_A | BUTTON_START)) { gGameStatusPtr->startupState = TITLE_STATE_BEGIN_DISMISS; TitleScreenNextState = NEXT_STATE_FILE_SELECT; diff --git a/src/state_world.c b/src/state_world.c index e9f0935a07f..4ca707d4ef5 100644 --- a/src/state_world.c +++ b/src/state_world.c @@ -1,21 +1,36 @@ #include "functions.h" #include "npc.h" #include "game_modes.h" +#include "dx/config.h" +#include "dx/profiling.h" +#include "dx/debug_menu.h" void state_world_draw_aux_ui(void); void state_init_world(void) { game_mode_set_fpDrawAuxUI(0, state_world_draw_aux_ui); + +#ifdef DX_QUICK_LAUNCH_BATTLE + if (gGameStatus.loadType == LOAD_FROM_FILE_SELECT) { + dx_debug_begin_battle_with_IDs(DX_QUICK_LAUNCH_BATTLE); + } +#endif } void state_step_world(void) { update_encounters(); + profiler_update(PROFILE_TIME_WORLD_ENCOUNTERS, 0); update_npcs(); + profiler_update(PROFILE_TIME_WORLD_NPCS, 0); update_player(); + profiler_update(PROFILE_TIME_WORLD_PLAYER, 0); update_item_entities(); + profiler_update(PROFILE_TIME_WORLD_ITEM_ENTITIES, 0); update_effects(); - iterate_models(); + profiler_update(PROFILE_TIME_WORLD_EFFECTS, 0); + iterate_models(); // no-op update_cameras(); + profiler_update(PROFILE_TIME_WORLD_CAMERAS, 0); } void state_drawUI_world(void) { diff --git a/src/texture_memory.c b/src/texture_memory.c index 362e652f633..e77c74ba446 100644 --- a/src/texture_memory.c +++ b/src/texture_memory.c @@ -1,6 +1,6 @@ #include "common.h" -#define WORLD_TEXTURE_MEMORY_SIZE 0x20000 -#define BATTLE_TEXTURE_MEMORY_SIZE 0x8000 +#define WORLD_TEXTURE_MEMORY_SIZE 0x40000 +#define BATTLE_TEXTURE_MEMORY_SIZE 0x16000 BSS u8 TextureHeap[WORLD_TEXTURE_MEMORY_SIZE + BATTLE_TEXTURE_MEMORY_SIZE]; diff --git a/src/trigger.c b/src/trigger.c index 5499619aff0..b16a1756a5a 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" SHIFT_BSS s16 gTriggerCount; SHIFT_BSS TriggerList wTriggerList; diff --git a/src/vars_access.c b/src/vars_access.c index 2ea34811576..1b5cf3c73fa 100644 --- a/src/vars_access.c +++ b/src/vars_access.c @@ -1,4 +1,5 @@ #include "common.h" +#include "vars_access.h" void clear_saved_variables(void) { SaveData* saveFile = &gCurrentSaveFile; @@ -104,17 +105,79 @@ s32 get_global_flag(s32 index) { } s8 set_global_byte(s32 index, s32 value) { - SaveData* saveFile = &gCurrentSaveFile; - s32 ret = saveFile->globalBytes[index]; + if (index <= EVT_GAME_BYTE_CUTOFF) { + index = EVT_INDEX_OF_GAME_BYTE(index); + } - saveFile->globalBytes[index] = value; + s32 ret = gCurrentSaveFile.globalBytes[index]; + gCurrentSaveFile.globalBytes[index] = value; return ret; } s32 get_global_byte(s32 index) { + if (index <= EVT_GAME_BYTE_CUTOFF) { + index = EVT_INDEX_OF_GAME_BYTE(index); + } + return gCurrentSaveFile.globalBytes[index]; } +s16 set_global_short(s32 index, s32 value) { + if (index <= EVT_GAME_BYTE_CUTOFF) { + index = EVT_INDEX_OF_GAME_BYTE(index); + } + + s32 b1 = gCurrentSaveFile.globalBytes[index] & 0xFF; + s32 b2 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + s16 ret = (b2 << 8) | b1; + + gCurrentSaveFile.globalBytes[index] = value & 0xFF; + gCurrentSaveFile.globalBytes[index + 1] = (value >> 8) & 0xFF; + return ret; +} + +s16 get_global_short(s32 index) { + if (index <= EVT_GAME_BYTE_CUTOFF) { + index = EVT_INDEX_OF_GAME_BYTE(index); + } + + s32 b1 = gCurrentSaveFile.globalBytes[index] & 0xFF; + s32 b2 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + + return (b2 << 8) | b1; +} + +s32 set_global_word(s32 index, s32 value) { + if (index <= EVT_GAME_BYTE_CUTOFF) { + index = EVT_INDEX_OF_GAME_BYTE(index); + } + + s32 b1 = gCurrentSaveFile.globalBytes[index] & 0xFF; + s32 b2 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + s32 b3 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + s32 b4 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + s16 ret = (b4 << 24) | (b3 << 16) | (b2 << 8) | b1; + + gCurrentSaveFile.globalBytes[index] = value & 0xFF; + gCurrentSaveFile.globalBytes[index + 1] = (value >> 8) & 0xFF; + gCurrentSaveFile.globalBytes[index + 2] = (value >> 16) & 0xFF; + gCurrentSaveFile.globalBytes[index + 3] = (value >> 24) & 0xFF; + return ret; +} + +s32 get_global_word(s32 index) { + if (index <= EVT_GAME_BYTE_CUTOFF) { + index = EVT_INDEX_OF_GAME_BYTE(index); + } + + s32 b1 = gCurrentSaveFile.globalBytes[index] & 0xFF; + s32 b2 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + s32 b3 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + s32 b4 = gCurrentSaveFile.globalBytes[index + 1] & 0xFF; + + return (b4 << 24) | (b3 << 16) | (b2 << 8) | b1; +} + s32 clear_area_flag(s32 index) { s32 wordIdx = index / 32; s32 bitIdx = index % 32; diff --git a/src/world/action/idle.c b/src/world/action/idle.c index 8f0b714a0a8..8b7e19d42b7 100644 --- a/src/world/action/idle.c +++ b/src/world/action/idle.c @@ -1,5 +1,5 @@ #include "common.h" -#include "../actions.h" +#include "world/disguise.h" #include "sprite/player.h" AnimID IdlePeachAnims[] = { @@ -83,7 +83,7 @@ void action_update_idle(void) { } return; } - + if (!firstFrame && check_input_hammer()) { return; } diff --git a/src/world/action/jump.c b/src/world/action/jump.c index 95e95ba3654..849ef58bea5 100644 --- a/src/world/action/jump.c +++ b/src/world/action/jump.c @@ -72,6 +72,10 @@ void action_update_jump(void) { suggest_player_anim_allow_backward(anim); playerStatus->timeInAir++; + + f32 moveAngle, moveMag; + player_input_to_move_vector(&moveAngle, &moveMag); + playerStatus->targetYaw = moveAngle; } void action_update_landing_on_switch(void) { @@ -137,6 +141,10 @@ void action_update_falling(void) { gCameras[CAM_DEFAULT].moveFlags |= CAMERA_MOVE_IGNORE_PLAYER_Y; } playerStatus->timeInAir++; + + f32 moveAngle, moveMag; + player_input_to_move_vector(&moveAngle, &moveMag); + playerStatus->targetYaw = moveAngle; } void action_update_step_down(void) { diff --git a/src/world/action/misc.c b/src/world/action/misc.c index a9a4892f3c4..4440e88df4b 100644 --- a/src/world/action/misc.c +++ b/src/world/action/misc.c @@ -1,5 +1,5 @@ #include "common.h" -#include "world/actions.h" +#include "world/disguise.h" #include "world/partner/sushie.h" #include "world/partner/lakilester.h" #include "sprite/player.h" diff --git a/src/world/action/sneaky_parasol.c b/src/world/action/sneaky_parasol.c index 91493fc44f6..6735dc620a6 100644 --- a/src/world/action/sneaky_parasol.c +++ b/src/world/action/sneaky_parasol.c @@ -43,41 +43,41 @@ TransformationData* D_802B6D80_E2B430 = &ParasolTransformation; void parasol_update_spin(void); Npc* parasol_get_npc(void) { - PlayerStatus* playerStatus = &gPlayerStatus; + Npc* npc = NULL; f32 angle; - Npc* ret = NULL; - do { // TODO fix this do...while - if (playerStatus->availableDisguiseType != PEACH_DISGUISE_NONE) { - if (gGameStatusPtr->peachFlags & PEACH_FLAG_BLOCK_NEXT_DISGUISE) { - gGameStatusPtr->peachFlags &= ~PEACH_FLAG_BLOCK_NEXT_DISGUISE; - } else { - ret = npc_find_closest(playerStatus->pos.x, playerStatus->pos.y, playerStatus->pos.z, 100.0f); - if (ret != 0) { - if (fabs(ret->pos.y - playerStatus->pos.y) - 1.0 > 0.0) { - ret = NULL; - } else { - angle = clamp_angle(atan2(playerStatus->pos.x, playerStatus->pos.z, ret->pos.x, ret->pos.z)); - if (fabs(angle - func_800E5348()) > 30.0) { - ret = NULL; - } - } - } - } - } - return ret; - } while (0); + + if (gPlayerStatus.availableDisguiseType == PEACH_DISGUISE_NONE) { + return NULL; + } + + if (gGameStatusPtr->peachFlags & PEACH_FLAG_BLOCK_NEXT_DISGUISE) { + gGameStatusPtr->peachFlags &= ~PEACH_FLAG_BLOCK_NEXT_DISGUISE; + return NULL; + } + + npc = npc_find_closest(gPlayerStatus.pos.x, gPlayerStatus.pos.y, gPlayerStatus.pos.z, 100.0f); + if (npc == NULL) { + return NULL; + } + + if (fabs(npc->pos.y - gPlayerStatus.pos.y) > 1.0) { + return NULL; + } + + angle = clamp_angle(atan2(gPlayerStatus.pos.x, gPlayerStatus.pos.z, npc->pos.x, npc->pos.z)); + if (fabs(angle - func_800E5348()) > 30.0) { + return NULL; + } + + return npc; } void action_update_parasol(void) { PlayerStatus* playerStatus = &gPlayerStatus; TransformationData* transformation = &ParasolTransformation; Camera* cam = &gCameras[gCurrentCameraID]; - GameStatus* gameStatus; - GameStatus* gameStatus2; Npc* disguiseNpc; - f32* tempUnk_1C; f32 prevFacingAngle; - f32 phi_f4; s32 reachedTangentAngle; f32 angle; f32 radius; @@ -86,18 +86,17 @@ void action_update_parasol(void) { playerStatus->flags &= ~PS_FLAG_ACTION_STATE_CHANGED; mem_clear(&ParasolTransformation, sizeof(ParasolTransformation)); disable_player_static_collisions(); - tempUnk_1C = &transformation->playerRotationRate; + playerStatus->timeInAir = 0; playerStatus->peakJumpTime = 0; playerStatus->curSpeed = 0; playerStatus->pitch = 0; if (playerStatus->spriteFacingAngle >= 90 && playerStatus->spriteFacingAngle < 270) { - phi_f4 = 2; + transformation->playerRotationRate = 2; } else { - phi_f4 = -2; + transformation->playerRotationRate = -2; } - *tempUnk_1C = phi_f4; if (!(playerStatus->animFlags & PA_FLAG_INVISIBLE)) { playerStatus->curStateTime = 20; @@ -187,9 +186,8 @@ void action_update_parasol(void) { } break; case SUBSTATE_DISGUISE_MAKE_NPC: - gameStatus = gGameStatusPtr; playerStatus->animFlags |= PA_FLAG_INVISIBLE; - gameStatus->peachFlags |= PEACH_FLAG_DISGUISED; + gGameStatus.peachFlags |= PEACH_FLAG_DISGUISED; playerStatus->actionSubstate++; // SUBSTATE_DISGUISE_SPIN_DOWN case SUBSTATE_DISGUISE_SPIN_DOWN: if (--playerStatus->curStateTime == 0) { @@ -263,9 +261,8 @@ void action_update_parasol(void) { if (reachedTangentAngle) { playerStatus->curStateTime = 2; playerStatus->actionSubstate++; // SUBSTATE_SPIN_DOWN - gameStatus2 = gGameStatusPtr; playerStatus->animFlags &= ~PA_FLAG_INVISIBLE; - gameStatus2->peachFlags &= ~PEACH_FLAG_DISGUISED; + gGameStatus.peachFlags &= ~PEACH_FLAG_DISGUISED; playerStatus->peachDisguise = 0; free_npc_by_index(PeachDisguiseNpcIndex); playerStatus->colliderHeight = 55; @@ -348,29 +345,15 @@ void action_update_parasol(void) { transformation->pos.y = playerStatus->pos.y - 20; } if (transformation->disguiseTime <= 10 && transformation->disguiseTime & 1) { - f64 tempX, tempZ; - fx_sparkles(FX_SPARKLES_3, transformation->pos.x - 8, transformation->pos.y + 50, transformation->pos.z, 2); - /* - TODO something like: angle = DEG_TO_RAD((cam->curYaw + playerStatus->spriteFacingAngle) - 90); transformation->pos.x += (10.0 * sin_rad(angle)); transformation->pos.z -= (10.0 * cos_rad(angle)); - */ - - angle = DEG_TO_RAD((cam->curYaw + playerStatus->spriteFacingAngle) - 90); - - tempX = transformation->pos.x; - tempX += 10.0 * sin_rad(angle); - transformation->pos.x = tempX; - - tempZ = transformation->pos.z; - transformation->pos.z = tempZ - (10.0 * cos_rad(angle)); } } else if (transformation->disguiseTime == 0) { transformation->disguiseTime = -1; diff --git a/src/world/action/spin.c b/src/world/action/spin.c index 994c0c4880e..bea399ff753 100644 --- a/src/world/action/spin.c +++ b/src/world/action/spin.c @@ -1,6 +1,7 @@ #include "common.h" #include "effects.h" #include "sprite/player.h" +#include "dx/debug_menu.h" extern s32 gSpinHistoryBufferPos; extern s32 gSpinHistoryPosY[5]; @@ -152,7 +153,7 @@ void action_update_spin(void) { } // check for buffered next spin - if (playerSpinState->spinCountdown < 11 && playerStatus->pressedButtons & BUTTON_Z) { + if (playerSpinState->spinCountdown < 15 && playerStatus->curButtons & BUTTON_Z) { playerSpinState->hasBufferedSpin = TRUE; playerSpinState->prevActionState = playerStatus->prevActionState; playerSpinState->bufferedStickAxis.x = playerStatus->stickAxis[0]; @@ -239,7 +240,11 @@ void action_update_spin(void) { } if (playerStatus->actionSubstate == SUBSTATE_SPIN_0) { playerSpinState->spinCountdown--; - if (playerSpinState->spinCountdown > 0) { + // debug_printf("spinCountdown = %d\n", playerSpinState->spinCountdown); + // debug_printf("curSpeed = %f\n", playerStatus->curSpeed); + player_input_to_move_vector(&angle, &magnitude); + b32 breakIntoRun = magnitude > 0.1f && playerSpinState->spinCountdown < 15; + if (playerSpinState->spinCountdown > 0 && !breakIntoRun) { if (playerStatus->curStateTime >= 2) { playerStatus->spriteFacingAngle = clamp_angle(playerStatus->spriteFacingAngle + playerStatus->spinRate); } diff --git a/src/world/action/step_up.c b/src/world/action/step_up.c index 4a8705ba974..f674be58f5a 100644 --- a/src/world/action/step_up.c +++ b/src/world/action/step_up.c @@ -1,5 +1,5 @@ #include "common.h" -#include "world/actions.h" +#include "world/disguise.h" #include "sprite/player.h" AnimID StepUpPeachAnims[] = { diff --git a/src/world/action/walk.c b/src/world/action/walk.c index 70229c28c30..76f9402e7a4 100644 --- a/src/world/action/walk.c +++ b/src/world/action/walk.c @@ -1,5 +1,5 @@ #include "common.h" -#include "world/actions.h" +#include "world/disguise.h" #include "sprite/player.h" AnimID WalkPeachAnims[] = { @@ -249,41 +249,33 @@ static void action_update_walk_peach(void) { } static void action_update_run_peach(void) { - PlayerStatus* playerStatus = &gPlayerStatus; - GameStatus* gameStatus; - f32 moveX; - f32 moveY; + f32 moveX, moveY; - if (playerStatus->flags & PS_FLAG_ACTION_STATE_CHANGED) { - playerStatus->flags &= ~PS_FLAG_ACTION_STATE_CHANGED; - playerStatus->unk_60 = 0; - if (!(playerStatus->flags & PS_FLAG_CUTSCENE_MOVEMENT)) { - playerStatus->curSpeed = playerStatus->runSpeed; + if (gPlayerStatus.flags & PS_FLAG_ACTION_STATE_CHANGED) { + gPlayerStatus.flags &= ~PS_FLAG_ACTION_STATE_CHANGED; + gPlayerStatus.unk_60 = 0; + if (!(gPlayerStatus.flags & PS_FLAG_CUTSCENE_MOVEMENT)) { + gPlayerStatus.curSpeed = gPlayerStatus.runSpeed; } - if (!(playerStatus->animFlags & PA_FLAG_INVISIBLE)) { - gameStatus = gGameStatusPtr; - if (!(gameStatus->peachFlags & PEACH_FLAG_DEPRESSED)) { - if (!gameStatus->peachBakingIngredient) { - suggest_player_anim_allow_backward(ANIM_Peach1_Run); - } else { - suggest_player_anim_allow_backward(WalkPeachAnims[gameStatus->peachBakingIngredient]); - } - } else { - suggest_player_anim_allow_backward(ANIM_Peach3_WalkSad); - } + if (gPlayerStatus.animFlags & PA_FLAG_INVISIBLE) { + peach_set_disguise_anim(BasicPeachDisguiseAnims[gPlayerStatus.peachDisguise].run); + } else if (gGameStatus.peachFlags & PEACH_FLAG_DEPRESSED) { + suggest_player_anim_allow_backward(ANIM_Peach3_WalkSad); + } else if (gGameStatus.peachBakingIngredient) { + suggest_player_anim_allow_backward(WalkPeachAnims[gGameStatus.peachBakingIngredient]); } else { - peach_set_disguise_anim(BasicPeachDisguiseAnims[playerStatus->peachDisguise].run); + suggest_player_anim_allow_backward(ANIM_Peach1_Run); } } - if (playerStatus->flags & PS_FLAG_CUTSCENE_MOVEMENT) { - playerStatus->targetYaw = playerStatus->heading; + if (gPlayerStatus.flags & PS_FLAG_CUTSCENE_MOVEMENT) { + gPlayerStatus.targetYaw = gPlayerStatus.heading; try_player_footstep_sounds(4); return; } - playerStatus->curSpeed = playerStatus->runSpeed; + gPlayerStatus.curSpeed = gPlayerStatus.runSpeed; player_input_to_move_vector(&moveX, &moveY); phys_update_interact_collider(); if (moveY == 0.0f) { @@ -291,8 +283,8 @@ static void action_update_run_peach(void) { return; } - playerStatus->targetYaw = moveX; - if (sqrtf(SQ(playerStatus->stickAxis[0]) + SQ(playerStatus->stickAxis[1])) < 55.0f) { + gPlayerStatus.targetYaw = moveX; + if (sqrtf(SQ(gPlayerStatus.stickAxis[0]) + SQ(gPlayerStatus.stickAxis[1])) < 55.0f) { set_action_state(ACTION_STATE_WALK); return; } else { diff --git a/src/world/actions.c b/src/world/actions.c index 9e7e68fa1f1..368f35387a3 100644 --- a/src/world/actions.c +++ b/src/world/actions.c @@ -1,10 +1,6 @@ #include "common.h" -#include "ld_addrs.h" #include "actions.h" - -#include "sprite/npc/WorldClubba.h" -#include "sprite/npc/WorldKoopatrol.h" -#include "sprite/npc/HammerBros.h" +#include "ld_addrs.h" void action_update_idle(void); void action_update_walk(void); @@ -76,109 +72,6 @@ extern Addr world_action_use_tweester_ROM_START; extern Addr world_action_use_tweester_ROM_END; #endif -s32 PrevPlayerCamRelativeYaw = 0; -s32 D_800F7B44 = 0; -f32 D_800F7B48 = 0.0f; -s32 D_800F7B4C = 0; - -f32 GravityParamsStartJump[] = { 15.7566404343f, -7.38624f, 3.44693994522f, -0.75f }; -f32 GravityParamsStartFall[] = { 0.154342994094f, -0.350080013275f, -0.182262003422f, 0.0115200001746f }; - - // default move speeds -f32 D_800F7B70 = 2.0f; // walk -f32 D_800F7B74 = 4.0f; // run -f32 D_800F7B78 = 32.0f; // max jump -f32 D_800F7B7C = -32.0f; // ??? - -s16 FootstepSoundSelector = 0; -s32 D_800F7B84[] = { 0, 0, 0}; -f32 LastMidairPlayerVelY = 0.0; - -AnimID ClubbaDisguiseExtraAnims[] = { - ANIM_WorldClubba_Anim00, - ANIM_WorldClubba_Anim02, - ANIM_WorldClubba_Anim03, - ANIM_WorldClubba_Anim04, - ANIM_WorldClubba_Anim05, - ANIM_WorldClubba_Anim08, - ANIM_WorldClubba_Anim07, - ANIM_WorldClubba_Anim13, - ANIM_WorldClubba_Anim14, - ANIM_LIST_END -}; - -AnimID HammerBroDisguiseExtraAnims[] = { - ANIM_HammerBros_Anim00, - ANIM_HammerBros_Anim02, - ANIM_HammerBros_Anim03, - ANIM_HammerBros_Anim04, - ANIM_HammerBros_Anim06, - ANIM_HammerBros_Anim07, - ANIM_HammerBros_Anim09, - ANIM_HammerBros_Anim0A, - ANIM_HammerBros_Anim0B, - ANIM_HammerBros_Anim1A, - ANIM_LIST_END -}; - -AnimID KoopatrolDisguiseExtraAnims[] = { - ANIM_WorldKoopatrol_Anim00, - ANIM_WorldKoopatrol_Anim01, - ANIM_WorldKoopatrol_Anim02, - ANIM_WorldKoopatrol_Anim04, - ANIM_WorldKoopatrol_Anim05, - ANIM_WorldKoopatrol_Anim06, - ANIM_WorldKoopatrol_Anim07, - ANIM_WorldKoopatrol_Anim08, - ANIM_WorldKoopatrol_Anim09, - ANIM_WorldKoopatrol_Anim12, - ANIM_WorldKoopatrol_Anim14, - ANIM_WorldKoopatrol_Anim1B, - ANIM_LIST_END -}; - -DisguiseAnims BasicPeachDisguiseAnims[] = { - [PEACH_DISGUISE_NONE] { - ANIM_WorldKoopatrol_Anim01, - ANIM_WorldKoopatrol_Anim04, - ANIM_WorldKoopatrol_Anim06, - ANIM_WorldKoopatrol_Anim08, - ANIM_WorldKoopatrol_Anim00, - ANIM_WorldKoopatrol_Anim1B - }, - [PEACH_DISGUISE_KOOPATROL] { - ANIM_WorldKoopatrol_Anim01, - ANIM_WorldKoopatrol_Anim04, - ANIM_WorldKoopatrol_Anim06, - ANIM_WorldKoopatrol_Anim08, - ANIM_WorldKoopatrol_Anim00, - ANIM_WorldKoopatrol_Anim1B - }, - [PEACH_DISGUISE_HAMMER_BROS] { - ANIM_HammerBros_Anim03, - ANIM_HammerBros_Anim06, - ANIM_HammerBros_Anim09, - ANIM_HammerBros_Anim0B, - ANIM_HammerBros_Anim00, - ANIM_HammerBros_Anim1A - }, - [PEACH_DISGUISE_CLUBBA] { - ANIM_WorldClubba_Anim02, - ANIM_WorldClubba_Anim03, - ANIM_WorldClubba_Anim04, - ANIM_WorldClubba_Anim05, - ANIM_WorldClubba_Anim00, - ANIM_WorldClubba_Anim14 - }, -}; - -AnimID* PeachDisguiseExtraAnims[] = { - [PEACH_DISGUISE_NONE] KoopatrolDisguiseExtraAnims, - [PEACH_DISGUISE_KOOPATROL] KoopatrolDisguiseExtraAnims, - [PEACH_DISGUISE_HAMMER_BROS] HammerBroDisguiseExtraAnims, - [PEACH_DISGUISE_CLUBBA] ClubbaDisguiseExtraAnims -}; - #define ACTION_FILE(name) world_action_##name##_ROM_START, world_action_##name##_ROM_END Action PlayerActionsTable[] = { diff --git a/src/world/actions.h b/src/world/actions.h index 33ff535d990..8ee56b28840 100644 --- a/src/world/actions.h +++ b/src/world/actions.h @@ -10,19 +10,6 @@ typedef struct Action { /* 0x0C */ s8 flag; } Action; // size = 0x10 -typedef struct DisguiseAnims { - /* 0x00 */ s32 idle; - /* 0x04 */ s32 walk; - /* 0x08 */ s32 run; - /* 0x0C */ s32 talk; - /* 0x10 */ s32 still; - /* 0x14 */ s32 hold; -} DisguiseAnims; // size = 0x18 - -extern f32 LastMidairPlayerVelY; extern Action PlayerActionsTable[39]; -extern DisguiseAnims BasicPeachDisguiseAnims[4]; -extern AnimID* PeachDisguiseExtraAnims[4]; - #endif diff --git a/src/world/area_arn/arn_03/arn_03_3_npc.c b/src/world/area_arn/arn_03/arn_03_3_npc.c index 292bcf20b8e..45c7e2ad23c 100644 --- a/src/world/area_arn/arn_03/arn_03_3_npc.c +++ b/src/world/area_arn/arn_03/arn_03_3_npc.c @@ -121,10 +121,7 @@ EvtScript N(EVS_NpcInteract_Boo_02) = { IfNe(MV_Unk_00, 0) IfGe(MV_Unk_00, MV_Unk_01) Call(SpeakToPlayer, NPC_SELF, ANIM_Boo_Tan_Talk, ANIM_Boo_Tan_Idle, 0, MSG_CH3_0081) - Set(LVar0, 118) - Set(LVar1, 1) - ExecWait(N(GiveItemReward)) - Call(AddKeyItem, ITEM_KOOT_PACKAGE) + EVT_GIVE_REWARD(ITEM_KOOT_PACKAGE) Set(MV_Unk_00, 0) Set(GF_ARN03_RecievedPackage, TRUE) Set(GF_ARN03_WaitingForPackage, FALSE) diff --git a/src/world/area_arn/arn_07/arn_07_4_entity.c b/src/world/area_arn/arn_07/arn_07_4_entity.c index e61017240c9..4174ab9ab35 100644 --- a/src/world/area_arn/arn_07/arn_07_4_entity.c +++ b/src/world/area_arn/arn_07/arn_07_4_entity.c @@ -21,8 +21,7 @@ EvtScript N(EVS_UnlockDoor) = { Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) Return EndIf - Call(FindKeyItem, ITEM_MYSTICAL_KEY, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, ITEM_MYSTICAL_KEY) Call(CloseChoicePopup) Set(GB_StoryProgress, STORY_CH3_UNLOCKED_WINDY_MILL) Call(N(GetEntityPosition), MV_Unk_00, LVar0, LVar1, LVar2) diff --git a/src/world/area_dgb/dgb_01/dgb_01_4_entity.c b/src/world/area_dgb/dgb_01/dgb_01_4_entity.c index 6cb09d56669..729aec4ca87 100644 --- a/src/world/area_dgb/dgb_01/dgb_01_4_entity.c +++ b/src/world/area_dgb/dgb_01/dgb_01_4_entity.c @@ -19,8 +19,7 @@ EvtScript N(EVS_UnlockPrompt_Door) = { ResumeGroup(EVT_GROUP_01) Return EndIf - Call(FindKeyItem, ITEM_TUBBA_CASTLE_KEY, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, ITEM_TUBBA_CASTLE_KEY) Call(CloseChoicePopup) Set(GF_DGB01_UnlockedEastWing, TRUE) Call(N(GetEntityPosition), MV_PadlockEntityID, LVar0, LVar1, LVar2) diff --git a/src/world/area_dgb/dgb_03/dgb_03_4_entity.c b/src/world/area_dgb/dgb_03/dgb_03_4_entity.c index 9e1b728d8e4..4736992ef5e 100644 --- a/src/world/area_dgb/dgb_03/dgb_03_4_entity.c +++ b/src/world/area_dgb/dgb_03/dgb_03_4_entity.c @@ -19,8 +19,7 @@ EvtScript N(EVS_UnlockPrompt_UpperDoor) = { ResumeGroup(EVT_GROUP_01) Return EndIf - Call(FindKeyItem, ITEM_TUBBA_CASTLE_KEY, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, ITEM_TUBBA_CASTLE_KEY) Call(CloseChoicePopup) Set(GF_DGB03_UnlockedThirdFloor, TRUE) Call(N(GetEntityPosition), MV_PadlockEntityID, LVar0, LVar1, LVar2) diff --git a/src/world/area_dgb/dgb_06/dgb_06_3_entity.c b/src/world/area_dgb/dgb_06/dgb_06_3_entity.c index ebdd7c0b96a..93d5a02c882 100644 --- a/src/world/area_dgb/dgb_06/dgb_06_3_entity.c +++ b/src/world/area_dgb/dgb_06/dgb_06_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_TubbaKey) = EVT_OPEN_CHEST_KEY(ITEM_TUBBA_CASTLE_KEY, GF_DGB06_Chest_CastleKey1); +EvtScript N(EVS_OpenChest_TubbaKey) = EVT_OPEN_CHEST(ITEM_TUBBA_CASTLE_KEY, GF_DGB06_Chest_CastleKey1); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), -300, 50, -200, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_dgb/dgb_12/dgb_12_4_entity.c b/src/world/area_dgb/dgb_12/dgb_12_4_entity.c index bde177159c3..1aef00d5ece 100644 --- a/src/world/area_dgb/dgb_12/dgb_12_4_entity.c +++ b/src/world/area_dgb/dgb_12/dgb_12_4_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_Chest_Interact) = EVT_OPEN_CHEST_KEY(ITEM_TUBBA_CASTLE_KEY, GF_DGB12_Chest_CastleKey1); +EvtScript N(EVS_Chest_Interact) = EVT_OPEN_CHEST(ITEM_TUBBA_CASTLE_KEY, GF_DGB12_Chest_CastleKey1); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), -225, 0, -245, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_dgb/dgb_15/dgb_15_4_entity.c b/src/world/area_dgb/dgb_15/dgb_15_4_entity.c index a1e2c487c4d..2f4af0d6105 100644 --- a/src/world/area_dgb/dgb_15/dgb_15_4_entity.c +++ b/src/world/area_dgb/dgb_15/dgb_15_4_entity.c @@ -19,8 +19,7 @@ EvtScript N(EVS_UnlockPrompt_Door) = { ResumeGroup(EVT_GROUP_01) Return EndIf - Call(FindKeyItem, ITEM_TUBBA_CASTLE_KEY, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, ITEM_TUBBA_CASTLE_KEY) Call(CloseChoicePopup) Set(GF_DGB15_UnlockedUpperFoyer, TRUE) Call(N(GetEntityPosition), MV_PadlockEntityID, LVar0, LVar1, LVar2) diff --git a/src/world/area_dgb/dgb_18/dgb_18_4_entity.c b/src/world/area_dgb/dgb_18/dgb_18_4_entity.c index 6473581e98d..310f1ef06b0 100644 --- a/src/world/area_dgb/dgb_18/dgb_18_4_entity.c +++ b/src/world/area_dgb/dgb_18/dgb_18_4_entity.c @@ -5,7 +5,7 @@ EvtScript N(EVS_OpenChest_MysticalKey) = { Set(GF_DGB18_Chest_MysticalKey, TRUE) - Call(AddKeyItem, ITEM_MYSTICAL_KEY) + Call(AddItem, ITEM_MYSTICAL_KEY, EVT_IGNORE_ARG) Call(SetNpcVar, NPC_Yakkey, 0, 1) Return End diff --git a/src/world/area_drd/drd.h b/src/world/area_drd/drd.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/world/area_drd/drd_bt02/drd_bt02.h b/src/world/area_drd/drd_bt02/drd_bt02.h new file mode 100644 index 00000000000..c2a2a4c235c --- /dev/null +++ b/src/world/area_drd/drd_bt02/drd_bt02.h @@ -0,0 +1,8 @@ +#include "common.h" +#include "message_ids.h" +#include "map.h" +#include "../drd.h" +#include "mapfs/drd_bt02_shape.h" +#include "mapfs/drd_bt02_hit.h" +#define NAMESPACE drd_bt02 + \ No newline at end of file diff --git a/src/world/area_drd/drd_bt02/drd_bt02_entrances.c b/src/world/area_drd/drd_bt02/drd_bt02_entrances.c new file mode 100644 index 00000000000..216d8db92e9 --- /dev/null +++ b/src/world/area_drd/drd_bt02/drd_bt02_entrances.c @@ -0,0 +1,12 @@ +#include "drd_bt02.h" +extern EvtScript N(EVS_Main); +EntryList N(Entrances) = { + [ENTRY_drd_bt02_Entry_0] { 0,0,0, 0.000000 }, +}; +MapSettings N(settings) = { + .main = &N(EVS_Main), + .entryList = &N(Entrances), + .entryCount = ENTRY_COUNT(N(Entrances)), + .background = &gBackgroundImage, + .tattle = { MSG_NONE }, +}; \ No newline at end of file diff --git a/src/world/area_drd/drd_bt02/drd_bt02_main.c b/src/world/area_drd/drd_bt02/drd_bt02_main.c new file mode 100644 index 00000000000..4428b65858a --- /dev/null +++ b/src/world/area_drd/drd_bt02/drd_bt02_main.c @@ -0,0 +1,20 @@ +#include "drd_bt02.h" +extern EvtScript N(EVS_Main); +extern char wMapHitName[0x18]; +extern char wMapShapeName[0x18]; +extern char wMapTexName[0x18]; +extern char wMapBgName[0x18]; +s32 N(map_init)(void) { + sprintf(wMapHitName, "%s", "drd_bt02_hit"); + sprintf(wMapShapeName, "%s", "drd_bt02_shape"); + + sprintf(wMapTexName, "%s", "drd_tex"); + return FALSE; +} +EvtScript N(EVS_Main) = { + Set(GB_WorldLocation, LOCATION_TESTING) + Call(SetSpriteShading, SHADING_NONE) + SetUP_CAMERA_DEFAULT() + Return + End +}; \ No newline at end of file diff --git a/src/world/area_dro/dro_01/dro_01_3_npc.c b/src/world/area_dro/dro_01/dro_01_3_npc.c index edc8ea824a3..3a92759ccd7 100644 --- a/src/world/area_dro/dro_01/dro_01_3_npc.c +++ b/src/world/area_dro/dro_01/dro_01_3_npc.c @@ -11,14 +11,12 @@ #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" -MAP_STATIC_PAD(1,post_quizmo); // or pre_key_item? #include "world/common/complete/KeyItemChoice.inc.c" +#include "world/common/complete/LetterDelivery.inc.c" #include "world/common/util/MonitorPlayerOrbiting.inc.c" -#include "world/common/complete/LetterDelivery.inc.c" - s32 N(LetterList)[] = { ITEM_LETTER_CHAIN_LITTLE_MOUSER, ITEM_NONE @@ -141,11 +139,11 @@ EvtScript N(EVS_NpcInit_Toadette) = { }; EvtScript N(EVS_NpcInteract_DojoGrad) = { - Call(FindKeyItem, ITEM_FIRST_DEGREE_CARD, LVar1) - Call(FindKeyItem, ITEM_SECOND_DEGREE_CARD, LVar2) - Call(FindKeyItem, ITEM_THIRD_DEGREE_CARD, LVar3) - Call(FindKeyItem, ITEM_FOURTH_DEGREE_CARD, LVar4) - Call(FindKeyItem, ITEM_DIPLOMA, LVar5) + Call(FindItem, ITEM_FIRST_DEGREE_CARD, LVar1) + Call(FindItem, ITEM_SECOND_DEGREE_CARD, LVar2) + Call(FindItem, ITEM_THIRD_DEGREE_CARD, LVar3) + Call(FindItem, ITEM_FOURTH_DEGREE_CARD, LVar4) + Call(FindItem, ITEM_DIPLOMA, LVar5) IfNe(LVar1, -1) Call(SpeakToPlayer, NPC_SELF, ANIM_Dryite_Brown_Talk, ANIM_Dryite_Brown_Idle, 0, MSG_CH2_009A) Return diff --git a/src/world/area_dro/dro_01/dro_01_4_shop.c b/src/world/area_dro/dro_01/dro_01_4_shop.c index e752a4c4853..40836e64665 100644 --- a/src/world/area_dro/dro_01/dro_01_4_shop.c +++ b/src/world/area_dro/dro_01/dro_01_4_shop.c @@ -85,7 +85,6 @@ EvtScript N(EVS_SecretPurcahseOrder_Moustafa) = { Set(GB_StoryProgress, STORY_CH2_BOUGHT_SECRET_ITEMS) Call(func_802D2C14, 0) ExecWait(N(EVS_JumpAway)) - EndIf /// @bug unmatched endif in script Return End }; @@ -96,7 +95,7 @@ EvtScript N(EVS_SecretPurcahseOrder_RedJar) = { Call(func_802D2C14, 1) ExecWait(N(EVS_JumpToPlayer)) Call(SpeakToPlayer, NPC_Mouser_ShopOwner, ANIM_Mouser_Purple_Talk, ANIM_Mouser_Purple_Idle, 0, MSG_CH2_008D) - EVT_GIVE_KEY_REWARD(ITEM_KOOT_RED_JAR) + EVT_GIVE_REWARD(ITEM_KOOT_RED_JAR) Set(GF_DRO01_Gift_RedJar, TRUE) Wait(20) Call(func_802D2C14, 0) diff --git a/src/world/area_dro/dro_01/npc_composer.c b/src/world/area_dro/dro_01/npc_composer.c index 772ce651014..746119ef90d 100644 --- a/src/world/area_dro/dro_01/npc_composer.c +++ b/src/world/area_dro/dro_01/npc_composer.c @@ -8,7 +8,7 @@ s32 N(LyricsList)[] = { EvtScript N(EVS_NpcInteract_Composer) = { IfEq(GF_DRO01_Gift_Melody, TRUE) - Call(FindKeyItem, ITEM_MELODY, LVar0) + Call(FindItem, ITEM_MELODY, LVar0) IfNe(LVar0, -1) Call(SpeakToPlayer, NPC_SELF, ANIM_Musician_Composer_Talk, ANIM_Musician_Composer_Idle, 0, MSG_CH2_0084) Return @@ -64,7 +64,7 @@ EvtScript N(EVS_NpcInteract_Composer) = { Wait(60) Call(SetNpcAnimation, NPC_SELF, ANIM_Musician_Composer_Idle) Call(SpeakToPlayer, NPC_SELF, ANIM_Musician_Composer_Talk, ANIM_Musician_Composer_Idle, 0, MSG_CH2_0083) - EVT_GIVE_KEY_REWARD(ITEM_MELODY) + EVT_GIVE_REWARD(ITEM_MELODY) Set(GF_DRO01_Gift_Melody, TRUE) Return EndSwitch diff --git a/src/world/area_dro/dro_02/dro_02_5_npc.c b/src/world/area_dro/dro_02/dro_02_5_npc.c index ca3baefdba4..71ff454d90f 100644 --- a/src/world/area_dro/dro_02/dro_02_5_npc.c +++ b/src/world/area_dro/dro_02/dro_02_5_npc.c @@ -53,15 +53,13 @@ NpcSettings N(NpcSettings_Archeologist) = { #include "npc_merlee.c" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" +#include "world/common/complete/LetterDelivery.inc.c" #include "world/common/complete/ToadHouseBlanketAnim.inc.c" #include "world/common/atomic/ToadHouse.inc.c" #include "world/common/atomic/ToadHouse.data.inc.c" -#include "world/common/complete/LetterDelivery.inc.c" - s32 N(LetterList)[] = { ITEM_LETTER_CHAIN_MR_E, ITEM_NONE diff --git a/src/world/area_dro/dro_02/npc_merlee.c b/src/world/area_dro/dro_02/npc_merlee.c index 332c5542817..4f3852a646a 100644 --- a/src/world/area_dro/dro_02/npc_merlee.c +++ b/src/world/area_dro/dro_02/npc_merlee.c @@ -51,7 +51,6 @@ enum { }; BSS RitualCard N(RitualCards)[3]; -MAP_STATIC_PAD(1,merlee); s8 N(MerleeSpellCasts)[] = { 20, 10, 5, 0, @@ -778,10 +777,7 @@ EvtScript N(EVS_NpcInteract_Merlee) = { EndIf IfEq(LVar0, 3) Call(SpeakToPlayer, NPC_SELF, ANIM_WorldMerlee_Talk, ANIM_WorldMerlee_Idle, 0, MSG_CH2_00DC) - Set(LVar0, ITEM_CRYSTAL_BALL) - Set(LVar1, 1) - ExecWait(N(GiveItemReward)) - Call(AddKeyItem, ITEM_CRYSTAL_BALL) + EVT_GIVE_REWARD(ITEM_CRYSTAL_BALL) Set(GF_DRO01_Gift_CrystalBall, 1) Wait(20) Call(func_802D2C14, 0) diff --git a/src/world/area_dro/dro_02/npc_moustafa.c b/src/world/area_dro/dro_02/npc_moustafa.c index 3a35824c3aa..9be16307bdf 100644 --- a/src/world/area_dro/dro_02/npc_moustafa.c +++ b/src/world/area_dro/dro_02/npc_moustafa.c @@ -218,7 +218,7 @@ EvtScript N(EVS_NpcInteract_Moustafa) = { Call(SetNpcJumpscale, NPC_Moustafa, Float(1.0)) Call(NpcJump0, NPC_Moustafa, -335, 163, -260, 20 * DT) Call(SpeakToPlayer, NPC_Moustafa, ANIM_Moustafa_Shout, ANIM_Moustafa_Idle, 0, MSG_CH2_00C9) - EVT_GIVE_KEY_REWARD(ITEM_PULSE_STONE) + EVT_GIVE_REWARD(ITEM_PULSE_STONE) Set(GB_StoryProgress, STORY_CH2_GOT_PULSE_STONE) Call(SpeakToPlayer, NPC_Moustafa, ANIM_Moustafa_Shout, ANIM_Moustafa_Idle, 0, MSG_CH2_00CA) KillThread(LVarA) diff --git a/src/world/area_flo/common/ItemChoice_FlowerGuard.inc.c b/src/world/area_flo/common/ItemChoice_FlowerGuard.inc.c index af966ff89b8..c9cd060b503 100644 --- a/src/world/area_flo/common/ItemChoice_FlowerGuard.inc.c +++ b/src/world/area_flo/common/ItemChoice_FlowerGuard.inc.c @@ -1,5 +1,7 @@ #include "common.h" +BSS s32 N(FlowerGuard_ItemChoiceList)[ITEM_NUM_CONSUMABLES + 1]; + API_CALLABLE(N(FlowerGuard_SetItemEntityPosition)) { Bytecode* args = script->ptrReadPos; s32 itemIdx = evt_get_variable(script, *args++); @@ -31,12 +33,15 @@ API_CALLABLE(N(FlowerGuard_JudgeItemTastiness)) { } API_CALLABLE(N(FlowerGuard_MakeItemList)) { - s32 i; + s32 pos = 0; + s32 itemID; - for (i = 0; i < ITEM_NUM_CONSUMABLES; i++) { - N(FlowerGuard_ItemChoiceList)[i] = ITEM_FIRST_CONSUMABLE + i; + for (itemID = 0; itemID < NUM_ITEMS; itemID++) { + if (item_is_consumable(itemID)) { + N(FlowerGuard_ItemChoiceList)[pos++] = itemID; + } } + N(FlowerGuard_ItemChoiceList)[pos] = ITEM_NONE; - N(FlowerGuard_ItemChoiceList)[ITEM_NUM_CONSUMABLES] = ITEM_NONE; return ApiStatus_DONE2; } diff --git a/src/world/area_flo/flo_03/flo_03_3_npc.c b/src/world/area_flo/flo_03/flo_03_3_npc.c index b42b820b70d..a3c78248110 100644 --- a/src/world/area_flo/flo_03/flo_03_3_npc.c +++ b/src/world/area_flo/flo_03/flo_03_3_npc.c @@ -254,7 +254,7 @@ EvtScript N(EVS_NpcInteract_Petunia) = { Call(SetNpcAnimation, NPC_SELF, ANIM_Petunia_GiveItem) Wait(20 * DT) Call(SetNpcAnimation, NPC_SELF, ANIM_Petunia_Idle) - EVT_GIVE_KEY_REWARD(ITEM_MAGICAL_BEAN) + EVT_GIVE_REWARD(ITEM_MAGICAL_BEAN) Wait(20 * DT) Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0, MSG_CH6_005A) Call(EndSpeech, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0) diff --git a/src/world/area_flo/flo_07/flo_07_3_npc.c b/src/world/area_flo/flo_07/flo_07_3_npc.c index cfcb3a29951..37285b5b38d 100644 --- a/src/world/area_flo/flo_07/flo_07_3_npc.c +++ b/src/world/area_flo/flo_07/flo_07_3_npc.c @@ -92,7 +92,7 @@ EvtScript N(EVS_NpcInteract_Posie) = { Call(SetNpcAnimation, NPC_SELF, ANIM_Posie_GiveItem) Wait(20 * DT) Call(SetNpcAnimation, NPC_SELF, ANIM_Posie_Still) - EVT_GIVE_KEY_REWARD(ITEM_FERTILE_SOIL) + EVT_GIVE_REWARD(ITEM_FERTILE_SOIL) Set(GB_StoryProgress, STORY_CH6_GOT_FERTILE_SOIL) Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0066) IfEq(GF_FLO12_RosieRequestedSomethingBeautiful, TRUE) diff --git a/src/world/area_flo/flo_08/flo_08_4_npc.c b/src/world/area_flo/flo_08/flo_08_4_npc.c index 2c740151b9b..fd2290ce141 100644 --- a/src/world/area_flo/flo_08/flo_08_4_npc.c +++ b/src/world/area_flo/flo_08/flo_08_4_npc.c @@ -2,12 +2,10 @@ #include "sprite/player.h" #include "world/common/enemy/AmazyDayzee.inc.c" -#include "world/common/npc/GateFlower.inc.c" #include "world/common/enemy/CrazyDayzee.inc.c" -#include "world/common/complete/NormalItemChoice.inc.c" - -BSS s32 N(FlowerGuard_ItemChoiceList)[ITEM_NUM_CONSUMABLES + 1]; +#include "world/common/npc/GateFlower.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "../common/ItemChoice_FlowerGuard.inc.c" EvtScript N(EVS_NpcInteract_GateFlower) = { diff --git a/src/world/area_flo/flo_10/flo_10_4_fountain.c b/src/world/area_flo/flo_10/flo_10_4_fountain.c index f1fc5c2bbfd..3ab0999c1e0 100644 --- a/src/world/area_flo/flo_10/flo_10_4_fountain.c +++ b/src/world/area_flo/flo_10/flo_10_4_fountain.c @@ -233,7 +233,7 @@ EvtScript N(EVS_Scene_PostReleaseFountain) = { Call(SetNpcAnimation, NPC_Lily, ANIM_Lily_GiveItem) Wait(20 * DT) Call(SetNpcAnimation, NPC_Lily, ANIM_Lily_Idle) - EVT_GIVE_KEY_REWARD(ITEM_MIRACLE_WATER) + EVT_GIVE_REWARD(ITEM_MIRACLE_WATER) Call(SpeakToPlayer, NPC_Lily, ANIM_Lily_TalkHappy, ANIM_Lily_IdleHappy, 0, MSG_CH6_0084) Call(EndSpeech, NPC_Lily, ANIM_Lily_Talk, ANIM_Lily_Idle, 0) Call(SetNpcAnimation, NPC_Lily, ANIM_Lily_Idle) diff --git a/src/world/area_flo/flo_12/flo_12_3_npc.c b/src/world/area_flo/flo_12/flo_12_3_npc.c index f0fbd6ca573..fbbab45c4cd 100644 --- a/src/world/area_flo/flo_12/flo_12_3_npc.c +++ b/src/world/area_flo/flo_12/flo_12_3_npc.c @@ -119,7 +119,7 @@ EvtScript N(EVS_NpcInteract_Rosie) = { EndSwitch EndSwitch CaseLt(STORY_CH6_GOT_WATER_STONE) - Call(FindKeyItem, ITEM_CRYSTAL_BERRY, LVar0) + Call(FindItem, ITEM_CRYSTAL_BERRY, LVar0) IfNe(LVar0, -1) Exec(N(EVS_PlayerApproachRosieAndItem)) Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) @@ -135,7 +135,7 @@ EvtScript N(EVS_NpcInteract_Rosie) = { Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0095) Call(RemoveItemEntity, LVar7) Call(MakeItemEntity, ITEM_CRYSTAL_BERRY, -33, 14, 19, ITEM_SPAWN_MODE_DECORATION, EVT_INDEX_OF_GAME_FLAG(GF_FLO12_HeldItemPickup)) - EVT_GIVE_KEY_REWARD(ITEM_WATER_STONE) + EVT_GIVE_REWARD(ITEM_WATER_STONE) Wait(10) Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0096) Set(AF_FLO_GivenCrystalBerry, TRUE) @@ -165,7 +165,7 @@ EvtScript N(EVS_NpcInit_Rosie) = { Add(LVar0, 35) Call(SetNpcPos, NPC_Dummy, LVar0, LVar1, LVar2) Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_INVISIBLE, TRUE) - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_HAS_SHADOW, TRUE) + Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_HAS_SHADOW, FALSE) Switch(GB_StoryProgress) CaseLt(STORY_CH6_GOT_CRYSTAL_BERRY) IfEq(GF_FLO12_Met_Rosie, TRUE) diff --git a/src/world/area_flo/flo_14/flo_14_4_npc.c b/src/world/area_flo/flo_14/flo_14_4_npc.c index d9d4d61ca44..10f760d5614 100644 --- a/src/world/area_flo/flo_14/flo_14_4_npc.c +++ b/src/world/area_flo/flo_14/flo_14_4_npc.c @@ -12,7 +12,7 @@ NpcSettings N(NpcSettings_BubbleFlower) = { #include "world/common/npc/Dummy.inc.c" -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" s32 N(KeyList)[] = { ITEM_BUBBLE_BERRY, diff --git a/src/world/area_flo/flo_23/flo_23_3_npc.c b/src/world/area_flo/flo_23/flo_23_3_npc.c index 23747b68290..9bd591457ce 100644 --- a/src/world/area_flo/flo_23/flo_23_3_npc.c +++ b/src/world/area_flo/flo_23/flo_23_3_npc.c @@ -1,13 +1,10 @@ #include "flo_23.h" #include "sprite/player.h" -#include "world/common/npc/GateFlower.inc.c" - -#include "world/common/complete/NormalItemChoice.inc.c" - #include "world/common/enemy/Spiny.inc.c" -BSS s32 N(FlowerGuard_ItemChoiceList)[ITEM_NUM_CONSUMABLES + 1]; +#include "world/common/npc/GateFlower.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "../common/ItemChoice_FlowerGuard.inc.c" EvtScript N(EVS_NpcInteract_GateFlower) = { diff --git a/src/world/area_flo/flo_24/flo_24_4_water.c b/src/world/area_flo/flo_24/flo_24_4_water.c index 42894671ba8..6be32e72294 100644 --- a/src/world/area_flo/flo_24/flo_24_4_water.c +++ b/src/world/area_flo/flo_24/flo_24_4_water.c @@ -14,7 +14,6 @@ EvtScript N(EVS_Scene_FillWithWater) = { Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) Call(PanToTarget, CAM_DEFAULT, 0, 1) Call(PlaySound, SOUND_LOOP_FLO_FILL_WATER_POOL) - //@bug thread is never terminated Thread Call(MakeLerp, 80, 90, 10, EASING_LINEAR) Label(0) @@ -25,8 +24,7 @@ EvtScript N(EVS_Scene_FillWithWater) = { Wait(1) Goto(0) EndIf - // should end thread here - //@bug thread is never terminated + EndThread Thread Call(MakeLerp, 45, 100, 150, EASING_LINEAR) Loop(0) @@ -37,7 +35,7 @@ EvtScript N(EVS_Scene_FillWithWater) = { BreakLoop EndIf EndLoop - // should end thread here + EndThread Wait(30) Set(GB_StoryProgress, STORY_CH6_FILLED_SPRING_WITH_WATER) Call(GotoMap, Ref("flo_10"), flo_10_ENTRY_2) diff --git a/src/world/area_flo/flo_25/flo_25_3_npc.c b/src/world/area_flo/flo_25/flo_25_3_npc.c index 177f7e60ad3..715aee76551 100644 --- a/src/world/area_flo/flo_25/flo_25_3_npc.c +++ b/src/world/area_flo/flo_25/flo_25_3_npc.c @@ -1,13 +1,11 @@ #include "flo_25.h" #include "sprite/player.h" -#include "world/common/npc/GateFlower.inc.c" #include "world/common/enemy/RuffPuff.inc.c" #include "world/common/enemy/Bzzap.inc.c" -#include "world/common/complete/NormalItemChoice.inc.c" - -BSS s32 N(FlowerGuard_ItemChoiceList)[ITEM_NUM_CONSUMABLES + 1]; +#include "world/common/npc/GateFlower.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "../common/ItemChoice_FlowerGuard.inc.c" EvtScript N(EVS_NpcInteract_GateFlower) = { diff --git a/src/world/area_gv/gv_01/gv_01_1_main.c b/src/world/area_gv/gv_01/gv_01_1_main.c index 237988a96dd..505a724e4e0 100644 --- a/src/world/area_gv/gv_01/gv_01_1_main.c +++ b/src/world/area_gv/gv_01/gv_01_1_main.c @@ -32,7 +32,7 @@ EvtScript N(EVS_DropLetter) = { Wait(1) EndLoop Return - //@bug not terminated! + End }; EvtScript N(EVS_DropLastLetter) = { @@ -43,7 +43,7 @@ EvtScript N(EVS_DropLastLetter) = { Wait(1) EndLoop Return - //@bug not terminated! + End }; #if VERSION_PAL diff --git a/src/world/area_ham/ham.h b/src/world/area_ham/ham.h new file mode 100644 index 00000000000..96395ff5c14 --- /dev/null +++ b/src/world/area_ham/ham.h @@ -0,0 +1,28 @@ +#ifndef _WORLD_AREA_HAM_HAM_H_ +#define _WORLD_AREA_HAM_HAM_H_ + +enum { + AB_HAM_Unused_0 = AreaByte(0), + AB_HAM_Unused_1 = AreaByte(1), + AB_HAM_Unused_2 = AreaByte(2), + AB_HAM_Unused_3 = AreaByte(3), + AB_HAM_Unused_4 = AreaByte(4), + AB_HAM_Unused_5 = AreaByte(5), + AB_HAM_Unused_6 = AreaByte(6), + AB_HAM_Unused_7 = AreaByte(7), + AB_HAM_Unused_8 = AreaByte(8), + AB_HAM_Unused_9 = AreaByte(9), + AB_HAM_Unused_A = AreaByte(10), + AB_HAM_Unused_B = AreaByte(11), + AB_HAM_Unused_C = AreaByte(12), + AB_HAM_Unused_D = AreaByte(13), + AB_HAM_Unused_E = AreaByte(14), + AB_HAM_Unused_F = AreaByte(15), +}; + +#define AF_HAM(index) AreaFlag(index) + +extern MapSettings ham_01_settings; +s32 ham_01_map_init(void); + +#endif diff --git a/src/world/area_ham/ham_01/ham_01.h b/src/world/area_ham/ham_01/ham_01.h new file mode 100644 index 00000000000..8df40f2c500 --- /dev/null +++ b/src/world/area_ham/ham_01/ham_01.h @@ -0,0 +1,12 @@ +#include "common.h" +#include "message_ids.h" +#include "map.h" +#include "../ham.h" +#include "mapfs/ham_01_shape.h" +#include "mapfs/ham_01_hit.h" + +#define NAMESPACE ham_01 + +extern EvtScript N(EVS_Main); +extern EvtScript N(EVS_BindExitTriggers); +extern EvtScript N(EVS_StartTexPanners); diff --git a/src/world/area_ham/ham_01/ham_01_entrances.c b/src/world/area_ham/ham_01/ham_01_entrances.c new file mode 100644 index 00000000000..16f5aab438e --- /dev/null +++ b/src/world/area_ham/ham_01/ham_01_entrances.c @@ -0,0 +1,24 @@ +#include "ham_01.h" + +EntryList N(Entrances) = { + [ham_01_ENTRY_West] { 28, -1, 206, 90.000000 }, + [ham_01_ENTRY_East] { 1023, 39, -28, -90.000000 }, +}; + +MapSettings N(settings) = { + .main = &N(EVS_Main), + .entryList = &N(Entrances), + .entryCount = ENTRY_COUNT(N(Entrances)), + .background = &gBackgroundImage, + .tattle = { MSG_NONE }, +}; + +//EvtScript N(EVS_ExitWalk_West) = EVT_EXIT_WALK(60, ham_01_ENTRY_West, "ncv_04", ncv_04_ENTRY_East); +//EvtScript N(EVS_ExitWalk_East) = EVT_EXIT_WALK(60, ham_01_ENTRY_East, "ham_02", ham_02_ENTRY_West); + +EvtScript N(EVS_BindExitTriggers) = { + //BindTrigger(Ref(N(EVS_ExitWalk_West)), TRIGGER_FLOOR_ABOVE, Collider_LZWest, 1, 0) + //BindTrigger(Ref(N(EVS_ExitWalk_East)), TRIGGER_FLOOR_ABOVE, Collider_LZEast, 1, 0) + Return + End +}; diff --git a/src/world/area_ham/ham_01/ham_01_main.c b/src/world/area_ham/ham_01/ham_01_main.c new file mode 100644 index 00000000000..34d86ca358d --- /dev/null +++ b/src/world/area_ham/ham_01/ham_01_main.c @@ -0,0 +1,18 @@ +#include "ham_01.h" + +EvtScript N(EVS_EnterMap) = { + Set(LVar0, Ref(N(EVS_BindExitTriggers))) + Exec(EnterWalk) + Return + End +}; + +EvtScript N(EVS_Main) = { + Set(GB_WorldLocation, LOCATION_HAMMER_HILLS) + Call(SetSpriteShading, SHADING_NONE) + EVT_SETUP_CAMERA_DEFAULT() + Exec(N(EVS_EnterMap)) + Exec(N(EVS_StartTexPanners)) + Return + End +}; diff --git a/src/world/area_ham/ham_01/ham_01_tex_panners.c b/src/world/area_ham/ham_01/ham_01_tex_panners.c new file mode 100644 index 00000000000..ae612948824 --- /dev/null +++ b/src/world/area_ham/ham_01/ham_01_tex_panners.c @@ -0,0 +1,37 @@ +#include "ham_01.h" +#include "common.h" +#include "world/common/atomic/TexturePan.inc.c" + +EvtScript N(EVS_StartTexPanners) = { + Call(SetTexPanner, MODEL_ham_01_Waterfallback, TEX_PANNER_0) + Call(EnableTexPanning, MODEL_ham_01_Waterfallback, TRUE) + + Call(SetTexPanner, MODEL_ham_01_Water, TEX_PANNER_0) + Call(EnableTexPanning, MODEL_ham_01_Water, TRUE) + + Call(SetTexPanner, MODEL_ham_01_Waterfall, TEX_PANNER_1) + Call(EnableTexPanning, MODEL_ham_01_Waterfall, TRUE) + + Call(SetTexPanner, MODEL_ham_01_WaterfallFront, TEX_PANNER_1) + Call(EnableTexPanning, MODEL_ham_01_WaterfallFront, TRUE) + + Thread + TEX_PAN_PARAMS_ID(TEX_PANNER_0) + TEX_PAN_PARAMS_STEP(0,150,0,0) + TEX_PAN_PARAMS_FREQ(0,0,0,0) + TEX_PAN_PARAMS_INIT(0,0,0,0) + Exec(N(EVS_UpdateTexturePan)) + EndThread + + Thread + TEX_PAN_PARAMS_ID(TEX_PANNER_1) + TEX_PAN_PARAMS_STEP(0,-750,0,0) + TEX_PAN_PARAMS_FREQ(0,0,0,0) + TEX_PAN_PARAMS_INIT(0,0,0,0) + Exec(N(EVS_UpdateTexturePan)) + EndThread + + + Return + End +}; diff --git a/src/world/area_hos/hos_00/hos_00_6_scenes.c b/src/world/area_hos/hos_00/hos_00_6_scenes.c index f7cf5812d9f..6fcdd03bdd0 100644 --- a/src/world/area_hos/hos_00/hos_00_6_scenes.c +++ b/src/world/area_hos/hos_00/hos_00_6_scenes.c @@ -61,15 +61,6 @@ API_CALLABLE(N(EnableActionCommands)) { return ApiStatus_DONE2; } -API_CALLABLE(N(UnusedTrigFunc)) { - Bytecode* args = script->ptrReadPos; - f32 magnitude = evt_get_float_variable(script, *args++); - f32 angle = evt_get_float_variable(script, *args++); - - evt_set_float_variable(script, *args++, magnitude * sin_deg(angle)); - return ApiStatus_DONE2; -} - f32 N(LastTwinkPosX) = 0; f32 N(LastTwinkPosZ) = 0; @@ -334,10 +325,7 @@ EvtScript N(EVS_Scene_MeetingTwink) = { Call(SetNpcAnimation, NPC_Twink, ANIM_Twink_TossItem) Wait(11) Call(SetNpcAnimation, NPC_Twink, ANIM_Twink_Pleased) - Set(LVar0, 7) - Set(LVar1, 4) - Call(ShowGotItem, LVar0, TRUE, 0) - Call(AddKeyItem, LVar0) + EVT_GIVE_REWARD(ITEM_LUCKY_STAR) Call(N(EnableActionCommands)) Call(SetNpcAnimation, NPC_Twink, ANIM_Twink_Idle) Wait(20 * DT) diff --git a/src/world/area_hos/hos_01/hos_01_2_main.c b/src/world/area_hos/hos_01/hos_01_2_main.c index 1d3ef882034..fc67c066a4b 100644 --- a/src/world/area_hos/hos_01/hos_01_2_main.c +++ b/src/world/area_hos/hos_01/hos_01_2_main.c @@ -4,11 +4,12 @@ #include "world/common/todo/GetFloorCollider.inc.c" -//@bug malformed script is missing Return and End, only works because another EvtScript follows EvtScript N(EVS_GotoMap_kmr_24_0) = { Call(FadeOutMusic, 0, 1500) Call(GotoMapSpecial, Ref("kmr_24"), kmr_24_ENTRY_0, TRANSITION_AFTER_SAVE_PROMPT) Wait(100) + Return + End }; EvtScript N(EVS_ExitWalk_hos_00_1) = EVT_EXIT_WALK(60, hos_01_ENTRY_0, "hos_00", hos_00_ENTRY_1); diff --git a/src/world/area_hos/hos_05/hos_05_5_intro.c b/src/world/area_hos/hos_05/hos_05_5_intro.c index 20c30fa9301..a6b63a630eb 100644 --- a/src/world/area_hos/hos_05/hos_05_5_intro.c +++ b/src/world/area_hos/hos_05/hos_05_5_intro.c @@ -265,8 +265,7 @@ API_CALLABLE(N(SetWorldColorParams)) { } void N(adjust_cam_vfov)(s32 camID, f32 fov) { - Camera* camera = &gCameras[camID]; - camera->vfov = fov * 1.1; + gCameras[camID].vfov = fov * 1.1; } API_CALLABLE(N(AdjustCamVfov)) { @@ -279,9 +278,8 @@ API_CALLABLE(N(AdjustCamVfov)) { } API_CALLABLE(N(ResumeIntro)) { - GameStatus* gameStatus = gGameStatusPtr; - if (gameStatus->introPart > INTRO_PART_NONE && gameStatus->introPart < INTRO_PART_5) { - gameStatus->introPart++; + if (gGameStatus.introPart > INTRO_PART_NONE && gGameStatus.introPart < INTRO_PART_5) { + gGameStatus.introPart++; state_init_intro(); } return ApiStatus_DONE1; diff --git a/src/world/area_hos/hos_06/hos_06_3_merlow.c b/src/world/area_hos/hos_06/hos_06_3_merlow.c index 2eba36b9a4f..388b8883c44 100644 --- a/src/world/area_hos/hos_06/hos_06_3_merlow.c +++ b/src/world/area_hos/hos_06/hos_06_3_merlow.c @@ -215,7 +215,7 @@ EvtScript N(EVS_NpcInteract_Merlow) = { Call(N(Merlow_SetBadgePurchased), LVar2) // awkward #define NAME_SUFFIX _Merlow - EVT_GIVE_BADGE_REWARD_ALT(LVar3, LVar1) + EVT_GIVE_REWARD(LVar3) #define NAME_SUFFIX IfGe(GB_HOS06_Merlow_PurchaseCount, MERLOW_BADGE_COUNT) Call(SpeakToPlayer, NPC_Merlow, ANIM_Merlow_Talk, ANIM_Merlow_Idle, 0, MSG_HOS_0055) diff --git a/src/world/area_hos/hos_06/hos_06_5_merluvlee.c b/src/world/area_hos/hos_06/hos_06_5_merluvlee.c index bf55c016868..39bdcc03cf2 100644 --- a/src/world/area_hos/hos_06/hos_06_5_merluvlee.c +++ b/src/world/area_hos/hos_06/hos_06_5_merluvlee.c @@ -682,14 +682,14 @@ EvtScript N(EVS_KootCheckBall_Merluvlee) = { IfEq(GF_HOS06_Gift_MerluvleesAutograph, TRUE) Return EndIf - Call(FindKeyItem, ITEM_CRYSTAL_BALL, LVar0) + Call(FindItem, ITEM_CRYSTAL_BALL, LVar0) IfEq(LVar0, -1) Call(SpeakToPlayer, NPC_Merluvlee, ANIM_Merluvlee_Talk, ANIM_Merluvlee_Idle, 0, MSG_HOS_0048) Else EVT_CHOOSE_KEY_ITEM_FROM(N(CrystalBallItems)) IfNe(LVar0, -1) Call(SpeakToPlayer, NPC_Merluvlee, ANIM_Merluvlee_Talk, ANIM_Merluvlee_Idle, 0, MSG_HOS_0049) - EVT_GIVE_KEY_REWARD(ITEM_KOOT_MERLUVLEE_AUTOGRAPH) + EVT_GIVE_REWARD(ITEM_KOOT_MERLUVLEE_AUTOGRAPH) Set(GF_HOS06_Gift_MerluvleesAutograph, TRUE) Else Call(SpeakToPlayer, NPC_Merluvlee, ANIM_Merluvlee_Talk, ANIM_Merluvlee_Idle, 0, MSG_HOS_0048) diff --git a/src/world/area_hos/hos_06/hos_06_6_chest.c b/src/world/area_hos/hos_06/hos_06_6_chest.c index 6ce3311b369..84ceb50d100 100644 --- a/src/world/area_hos/hos_06/hos_06_6_chest.c +++ b/src/world/area_hos/hos_06/hos_06_6_chest.c @@ -3,21 +3,6 @@ extern IconHudScriptPair gItemHudScripts[]; -// ------------------------------------------------------ -// begin modified Chest.inc.c -// differences are: -// - inclusion of N(ChestItems) -// - removal of N(EVS_Chest_GetItem) - -#define NAME_SUFFIX _MagicChest -#include "world/common/todo/StashVars.inc.c" -#include "world/common/todo/GetItemName.inc.c" -#include "world/common/todo/SomeItemEntityFunc.inc.c" -#include "world/common/todo/IsItemBadge.inc.c" - -s32** N(varStash) = NULL; -#define NAME_SUFFIX - EvtScript N(EVS_Chest_ShowGotItem) = { SetGroup(EVT_GROUP_00) Call(SetTimeFreezeMode, TIME_FREEZE_FULL) @@ -37,10 +22,7 @@ s32 N(ChestItems)[] = { ITEM_JAMMIN_JELLY, }; -// end modified Chest.inc.c -// ------------------------------------------------------ - -//TODO this whole file is probably an include shared with kkj_17, but the temp required in this function prevents deduplication +// this file is mostly the same as in kkj_17 API_CALLABLE(N(ChestItemPrompt)) { PopupMenu *menu; s32 menuIdx; @@ -54,7 +36,6 @@ API_CALLABLE(N(ChestItemPrompt)) { script->functionTempPtr[2] = menu; script->varTable[10] = script->varTable[0]; - // NOTE: identical to ChestItemPrompt in kkj_17 EXCEPT here, where varTable[10] is required instead of varTable[0] if (script->varTable[10] == 0) { // storing items script->varTable[1] = GF_KKJ16_Item_PowerRush; @@ -146,7 +127,10 @@ API_CALLABLE(N(SetItemRetrieved)) { return ApiStatus_DONE2; } -#include "world/common/todo/GetItemEmptyCount.inc.c" +API_CALLABLE(N(GetItemEmptyCount)) { + script->varTable[1] = get_consumables_empty(); + return ApiStatus_DONE2; +} EvtScript N(EVS_OpenChest) = { Call(PlaySoundAtCollider, COLLIDER_o207, SOUND_OPEN_MAGIC_CHEST, 0) @@ -185,7 +169,7 @@ EvtScript N(EVS_Interact_MagicChest_Mario) = { Call(N(ChestItemPrompt)) Switch(LVar0) CaseEq(-1) - CaseEq(0) + CaseEq(ITEM_NONE) Call(ShowMessageAtScreenPos, MSG_Menus_00D4, 160, 40) CaseOrEq(ITEM_POWER_RUSH) CaseOrEq(ITEM_DEEP_FOCUS1) @@ -194,7 +178,7 @@ EvtScript N(EVS_Interact_MagicChest_Mario) = { Call(SetTimeFreezeMode, TIME_FREEZE_FULL) Call(ShowGotItem, LVar0, FALSE, 0) Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Call(AddBadge, LVar0, LVar1) + Call(AddItem, LVar0, LVar1) Call(N(SetItemRetrieved)) EndCaseGroup CaseDefault diff --git a/src/world/area_isk/isk_09/isk_09_3_entity.c b/src/world/area_isk/isk_09/isk_09_3_entity.c index 5152c624319..c195dc9b7b8 100644 --- a/src/world/area_isk/isk_09/isk_09_3_entity.c +++ b/src/world/area_isk/isk_09/isk_09_3_entity.c @@ -59,7 +59,7 @@ EvtScript N(EVS_SetupGiantChest_SuperHammer) = { End }; -EvtScript N(EVS_OpenChest_SlowGo) = EVT_OPEN_CHEST_BADGE(ITEM_SLOW_GO, GF_ISK09_Chest_SlowGo); +EvtScript N(EVS_OpenChest_SlowGo) = EVT_OPEN_CHEST(ITEM_SLOW_GO, GF_ISK09_Chest_SlowGo); EvtScript N(EVS_SmashBlock_Stone) = { Set(GF_ISK09_Hammer2Block, TRUE) diff --git a/src/world/area_isk/isk_11/isk_11_5_puzzle.c b/src/world/area_isk/isk_11/isk_11_5_puzzle.c index a96d7c27574..170a55c456d 100644 --- a/src/world/area_isk/isk_11/isk_11_5_puzzle.c +++ b/src/world/area_isk/isk_11/isk_11_5_puzzle.c @@ -10,7 +10,7 @@ API_CALLABLE(N(GetItemNameInSocket)) { Bytecode* args = script->ptrReadPos; s32 itemID = evt_get_variable(script, *args++); - evt_set_variable(script, *args++, gItemTable[itemID & 0xFFF0FFFF].nameMsg); + evt_set_variable(script, *args++, gItemTable[itemID & ~0xF0000].nameMsg); return ApiStatus_DONE2; } @@ -74,7 +74,7 @@ EvtScript N(EVS_ItemPrompt_Socket1) = { Call(CloseMessage) IfEq(LVar0, 0) Call(PlaySoundAtCollider, COLLIDER_o2087, SOUND_ISK_PLACE_IN_SOCKET, SOUND_SPACE_DEFAULT) - Call(AddKeyItem, GB_ISK11_ItemSocket1) + Call(AddItem, GB_ISK11_ItemSocket1, EVT_IGNORE_ARG) Set(LVar0, GB_ISK11_ItemSocket1) Set(GB_ISK11_ItemSocket1, 0) Call(RemoveItemEntity, MV_Socket1_ItemEntity) @@ -125,7 +125,7 @@ EvtScript N(EVS_ItemPrompt_Socket2) = { Call(CloseMessage) IfEq(LVar0, 0) Call(PlaySoundAtCollider, COLLIDER_o2091, SOUND_ISK_PLACE_IN_SOCKET, SOUND_SPACE_DEFAULT) - Call(AddKeyItem, GB_ISK11_ItemSocket2) + Call(AddItem, GB_ISK11_ItemSocket2, EVT_IGNORE_ARG) Set(LVar0, GB_ISK11_ItemSocket2) Set(GB_ISK11_ItemSocket2, 0) Call(RemoveItemEntity, MV_Socket2_ItemEntity) @@ -176,7 +176,7 @@ EvtScript N(EVS_ItemPrompt_Socket3) = { Call(CloseMessage) IfEq(LVar0, 0) Call(PlaySoundAtCollider, COLLIDER_o2090, SOUND_ISK_PLACE_IN_SOCKET, SOUND_SPACE_DEFAULT) - Call(AddKeyItem, GB_ISK11_ItemSocket3) + Call(AddItem, GB_ISK11_ItemSocket3, EVT_IGNORE_ARG) Set(LVar0, GB_ISK11_ItemSocket3) Set(GB_ISK11_ItemSocket3, 0) Call(RemoveItemEntity, MV_Socket3_ItemEntity) @@ -227,7 +227,7 @@ EvtScript N(EVS_ItemPrompt_Socket4) = { Call(CloseMessage) IfEq(LVar0, 0) Call(PlaySoundAtCollider, COLLIDER_o2089, SOUND_ISK_PLACE_IN_SOCKET, SOUND_SPACE_DEFAULT) - Call(AddKeyItem, GB_ISK11_ItemSocket4) + Call(AddItem, GB_ISK11_ItemSocket4, EVT_IGNORE_ARG) Set(LVar0, GB_ISK11_ItemSocket4) Set(GB_ISK11_ItemSocket4, 0) Call(RemoveItemEntity, MV_Socket4_ItemEntity) @@ -278,7 +278,7 @@ EvtScript N(EVS_ItemPrompt_Socket5) = { Call(CloseMessage) IfEq(LVar0, 0) Call(PlaySoundAtCollider, COLLIDER_o2088, SOUND_ISK_PLACE_IN_SOCKET, SOUND_SPACE_DEFAULT) - Call(AddKeyItem, GB_ISK11_ItemSocket5) + Call(AddItem, GB_ISK11_ItemSocket5, EVT_IGNORE_ARG) Set(LVar0, GB_ISK11_ItemSocket5) Set(GB_ISK11_ItemSocket5, 0) Call(RemoveItemEntity, MV_Socket5_ItemEntity) diff --git a/src/world/area_iwa/iwa_02/iwa_02_3_npc.c b/src/world/area_iwa/iwa_02/iwa_02_3_npc.c index d31a9fa2223..e672ebcf416 100644 --- a/src/world/area_iwa/iwa_02/iwa_02_3_npc.c +++ b/src/world/area_iwa/iwa_02/iwa_02_3_npc.c @@ -146,7 +146,7 @@ EvtScript N(EVS_NpcInteract_Bubulb) = { Call(SetNpcCollisionSize, NPC_SELF, 45, 26) Call(AdjustCam, CAM_DEFAULT, Float(10.0), 0, 350, Float(15.0), Float(-6.5)) Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH2_001F) - EVT_GIVE_KEY_REWARD(ITEM_MAGICAL_SEED2) + EVT_GIVE_REWARD(ITEM_MAGICAL_SEED2) Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH2_0020) Call(ResetCam, CAM_DEFAULT, Float(10.0)) Set(GF_IWA02_Gift_MagicalSeed2, TRUE) diff --git a/src/world/area_iwa/iwa_03/iwa_03_2_entity.c b/src/world/area_iwa/iwa_03/iwa_03_2_entity.c index 99a6b95d34e..444d36762d3 100644 --- a/src/world/area_iwa/iwa_03/iwa_03_2_entity.c +++ b/src/world/area_iwa/iwa_03/iwa_03_2_entity.c @@ -51,7 +51,7 @@ EvtScript N(EVS_UseSpring) = { End }; -EvtScript N(EVS_OpenChest) = EVT_OPEN_CHEST_BADGE(ITEM_DAMAGE_DODGE_B, GF_IWA03_Chest_DamageDodgeB); +EvtScript N(EVS_OpenChest) = EVT_OPEN_CHEST(ITEM_DAMAGE_DODGE_B, GF_IWA03_Chest_DamageDodgeB); EvtScript N(EVS_MakeEntities) = { Thread diff --git a/src/world/area_iwa/iwa_10/iwa_10_6_parakarry.c b/src/world/area_iwa/iwa_10/iwa_10_6_parakarry.c index 390d4e7b0c1..aec9a46643a 100644 --- a/src/world/area_iwa/iwa_10/iwa_10_6_parakarry.c +++ b/src/world/area_iwa/iwa_10/iwa_10_6_parakarry.c @@ -255,9 +255,9 @@ EvtScript N(EVS_NpcInteract_Parakarry) = { Exec(N(EVS_PopSong)) Wait(10 * DT) Call(SpeakToPlayer, NPC_PARTNER, ANIM_WorldParakarry_Talk, ANIM_WorldParakarry_Idle, 0, MSG_CH2_001E) - Call(AddKeyItem, ITEM_LETTER_TO_MERLON) - Call(AddKeyItem, ITEM_LETTER_TO_KOLORADO) - Call(AddKeyItem, ITEM_LETTER_CHAIN_GOOMPAPA_1) + Call(AddItem, ITEM_LETTER_TO_MERLON, EVT_IGNORE_ARG) + Call(AddItem, ITEM_LETTER_TO_KOLORADO, EVT_IGNORE_ARG) + Call(AddItem, ITEM_LETTER_CHAIN_GOOMPAPA_1, EVT_IGNORE_ARG) EndIf Call(ResetCam, CAM_DEFAULT, Float(4.0 / DT)) Call(EnablePartnerAI) diff --git a/src/world/area_jan/jan_02/jan_02_3_npc.c b/src/world/area_jan/jan_02/jan_02_3_npc.c index b3c15973315..83a72e426ec 100644 --- a/src/world/area_jan/jan_02/jan_02_3_npc.c +++ b/src/world/area_jan/jan_02/jan_02_3_npc.c @@ -7,7 +7,6 @@ #include "world/common/complete/KeyItemChoice.inc.c" #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo -#define QUIZMO_PRE_STATIC_PAD #include "world/common/complete/Quizmo.inc.c" #include "world/common/todo/SwitchToPartner.inc.c" @@ -55,7 +54,7 @@ EvtScript N(EVS_Scene_GetJadeRaven) = { Wait(60 * DT) Call(SetNpcAnimation, NPC_SELF, ANIM_VillageLeader_Idle) Call(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Talk, ANIM_VillageLeader_Idle, 0, MSG_CH5_0026) - EVT_GIVE_KEY_REWARD(ITEM_JADE_RAVEN) + EVT_GIVE_REWARD(ITEM_JADE_RAVEN) Call(SpeakToPlayer, NPC_SELF, ANIM_VillageLeader_Talk, ANIM_VillageLeader_Idle, 0, MSG_CH5_0027) Set(GB_StoryProgress, STORY_CH5_GOT_JADE_RAVEN) Wait(15 * DT) diff --git a/src/world/area_jan/jan_03/jan_03_4_npc.c b/src/world/area_jan/jan_03/jan_03_4_npc.c index 4503b738c82..e7757aa9c37 100644 --- a/src/world/area_jan/jan_03/jan_03_4_npc.c +++ b/src/world/area_jan/jan_03/jan_03_4_npc.c @@ -9,10 +9,7 @@ #include "world/common/npc/YoshiKid.inc.c" #include "world/common/npc/YoshiKid_Patrol.inc.c" -#define NAME_SUFFIX _Unused -// included again later in this file; this copy is not used #include "world/common/npc/Raven.inc.c" -#define NAME_SUFFIX #include "world/common/npc/Sushie.inc.c" #include "world/common/npc/Kolorado.inc.c" @@ -22,8 +19,7 @@ #include "world/common/atomic/ToadHouse.data.inc.c" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" @@ -336,10 +332,7 @@ EvtScript N(EVS_NpcInteract_Yoshi_03) = { Call(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Yellow_Talk, ANIM_Yoshi_Yellow_Idle, 0, MSG_CH5_006E) Else Call(SpeakToPlayer, NPC_SELF, ANIM_Yoshi_Yellow_Talk, ANIM_Yoshi_Yellow_Idle, 0, MSG_CH5_006D) - Set(LVar0, ITEM_MELON) - Set(LVar1, ITEM_TYPE_CONSUMABLE) - ExecWait(N(GiveItemReward)) // misuse? - Call(AddItem, ITEM_MELON, LVar0) + EVT_GIVE_REWARD(ITEM_MELON) EndIf Return EndIf @@ -644,7 +637,7 @@ EvtScript N(EVS_NpcInteract_Kolorado) = { ExecWait(N(EVS_LetterPrompt_Kolorado)) ExecWait(N(EVS_LetterReward_Kolorado)) CaseEq(STORY_CH5_STAR_SPRIT_DEPARTED) - Call(FindKeyItem, ITEM_VOLCANO_VASE, LVar0) + Call(FindItem, ITEM_VOLCANO_VASE, LVar0) IfEq(LVar0, -1) Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH5_0016) ExecWait(N(EVS_LetterPrompt_Kolorado)) @@ -672,7 +665,7 @@ EvtScript N(EVS_NpcInteract_Kolorado) = { Call(ShowEmote, NPC_SELF, EMOTE_EXCLAMATION, 0, 20, EMOTER_NPC, 0, 0, 0, 0) Wait(25) Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH5_001A) - EVT_GIVE_KEY_REWARD(ITEM_MAGICAL_SEED4) + EVT_GIVE_REWARD(ITEM_MAGICAL_SEED4) Set(GF_JAN03_Gift_MagicalSeed4, TRUE) Wait(20) Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) @@ -743,8 +736,6 @@ EvtScript N(EVS_NpcInit_Sushie) = { End }; -#include "world/common/npc/Raven.inc.c" - AnimID N(ExtraAnims_VillageLeader)[] = { ANIM_VillageLeader_Idle, ANIM_VillageLeader_IdleSad, diff --git a/src/world/area_jan/jan_04/jan_04_2_main.c b/src/world/area_jan/jan_04/jan_04_2_main.c index 3c1ff168bfa..60f4ad00429 100644 --- a/src/world/area_jan/jan_04/jan_04_2_main.c +++ b/src/world/area_jan/jan_04/jan_04_2_main.c @@ -6,7 +6,9 @@ EvtScript N(EVS_GotoMap_kmr_24_0) = { Call(FadeOutMusic, 0, 1500) Call(GotoMapSpecial, Ref("kmr_24"), kmr_24_ENTRY_0, TRANSITION_MARIO_WHITE) Wait(100) -}; //@bug script not terminated + Return + End +}; EvtScript N(EVS_ExitWalk_jan_05_2) = { SetGroup(EVT_GROUP_1B) diff --git a/src/world/area_jan/jan_04/jan_04_3_entity.c b/src/world/area_jan/jan_04/jan_04_3_entity.c index 1a88d49bd6d..d2fdd39e4b9 100644 --- a/src/world/area_jan/jan_04/jan_04_3_entity.c +++ b/src/world/area_jan/jan_04/jan_04_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_VolcanoVase) = EVT_OPEN_CHEST_KEY(ITEM_VOLCANO_VASE, GF_JAN04_Chest_VolcanoVase); +EvtScript N(EVS_OpenChest_VolcanoVase) = EVT_OPEN_CHEST(ITEM_VOLCANO_VASE, GF_JAN04_Chest_VolcanoVase); EvtScript N(EVS_MakeEntities) = { Switch(GB_StoryProgress) diff --git a/src/world/area_jan/jan_22/jan_22_3_npc.c b/src/world/area_jan/jan_22/jan_22_3_npc.c index df1acf7b24b..9fcfeb18cdd 100644 --- a/src/world/area_jan/jan_22/jan_22_3_npc.c +++ b/src/world/area_jan/jan_22/jan_22_3_npc.c @@ -524,7 +524,7 @@ EvtScript N(EVS_ManageRavens) = { Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-7.0)) Call(SetCamSpeed, CAM_DEFAULT, Float(10.0 / DT)) Call(PanToTarget, CAM_DEFAULT, 0, 1) - EVT_GIVE_KEY_REWARD(ITEM_ULTRA_STONE) + EVT_GIVE_REWARD(ITEM_ULTRA_STONE) Wait(20 * DT) Call(SetCamDistance, CAM_DEFAULT, 400) Call(SetCamPitch, CAM_DEFAULT, Float(20.0), Float(-11.5)) diff --git a/src/world/area_kkj/common/PreventNextPeachDisguise.inc.c b/src/world/area_kkj/common/PreventNextPeachDisguise.inc.c index b410dfe4da3..28efe51e2d3 100644 --- a/src/world/area_kkj/common/PreventNextPeachDisguise.inc.c +++ b/src/world/area_kkj/common/PreventNextPeachDisguise.inc.c @@ -1,8 +1,6 @@ #include "common.h" API_CALLABLE(N(PreventNextPeachDisguise)) { - GameStatus* gameStatus = gGameStatusPtr; - - gameStatus->peachFlags |= PEACH_FLAG_BLOCK_NEXT_DISGUISE; + gGameStatus.peachFlags |= PEACH_FLAG_BLOCK_NEXT_DISGUISE; return ApiStatus_DONE2; } diff --git a/src/world/area_kkj/kkj_12/kkj_12_2_npc.c b/src/world/area_kkj/kkj_12/kkj_12_2_npc.c index cc1fe18f190..382c4624ad4 100644 --- a/src/world/area_kkj/kkj_12/kkj_12_2_npc.c +++ b/src/world/area_kkj/kkj_12/kkj_12_2_npc.c @@ -99,7 +99,7 @@ EvtScript N(EVS_NpcInteract_Koopatrol_02) = { Wait(10 * DT) Set(LVar0, ITEM_PEACH_KEY1) Call(ShowGotItem, LVar0, TRUE, 0) - Call(AddKeyItem, LVar0) + Call(AddItem, LVar0, EVT_IGNORE_ARG) Set(GF_KKJ11_TrickedGuard, TRUE) Call(SpeakToPlayer, NPC_SELF, ANIM_WorldKoopatrol_Anim09, ANIM_WorldKoopatrol_Anim02, 0, MSG_Peach_0145) Call(InterpNpcYaw, NPC_SELF, 270, 0) diff --git a/src/world/area_kkj/kkj_15/kkj_15_2_main.c b/src/world/area_kkj/kkj_15/kkj_15_2_main.c index c987277d69d..0df1179846a 100644 --- a/src/world/area_kkj/kkj_15/kkj_15_2_main.c +++ b/src/world/area_kkj/kkj_15/kkj_15_2_main.c @@ -28,7 +28,9 @@ EvtScript N(EVS_EndPeachChapter0) = { Call(PlaySound, SOUND_SLIDE_WHISTLE_OUT) Call(GotoMapSpecial, Ref("kmr_10"), kmr_10_ENTRY_0, TRANSITION_END_PEACH_INTERLUDE) Wait(100) -}; //@bug script not properly terminated + Return + End +}; EvtScript N(EVS_EndPeachChapter1) = { Set(LVar0, GB_KKJ_LastPartner) @@ -36,7 +38,9 @@ EvtScript N(EVS_EndPeachChapter1) = { Call(PlaySound, SOUND_SLIDE_WHISTLE_OUT) Call(GotoMapSpecial, Ref("trd_00"), trd_00_ENTRY_5, TRANSITION_END_PEACH_INTERLUDE) Wait(100) -}; //@bug script not properly terminated + Return + End +}; EvtScript N(EVS_EndPeachChapter3) = { Set(LVar0, GB_KKJ_LastPartner) @@ -44,7 +48,9 @@ EvtScript N(EVS_EndPeachChapter3) = { Call(PlaySound, SOUND_SLIDE_WHISTLE_OUT) Call(GotoMapSpecial, Ref("arn_07"), arn_07_ENTRY_3, TRANSITION_END_PEACH_INTERLUDE) Wait(100) -}; //@bug script not properly terminated + Return + End +}; EvtScript N(EVS_ExitDoor_kkj_11_3) = { SetGroup(EVT_GROUP_1B) diff --git a/src/world/area_kkj/kkj_16/kkj_16_1_main.c b/src/world/area_kkj/kkj_16/kkj_16_1_main.c index 8cc2178deea..20d24eb47bd 100644 --- a/src/world/area_kkj/kkj_16/kkj_16_1_main.c +++ b/src/world/area_kkj/kkj_16/kkj_16_1_main.c @@ -9,7 +9,9 @@ EvtScript N(EVS_EndPeachChapter2) = { Call(PlaySound, SOUND_SLIDE_WHISTLE_OUT) Call(GotoMapSpecial, Ref("sbk_02"), sbk_02_ENTRY_5, TRANSITION_END_PEACH_INTERLUDE) Wait(100) -}; //@bug script not properly terminated + Return + End +}; EvtScript N(EVS_ExitDoor_kkj_11_2) = { SetGroup(EVT_GROUP_1B) diff --git a/src/world/area_kkj/kkj_16/kkj_16_5_entity.c b/src/world/area_kkj/kkj_16/kkj_16_5_entity.c index abae8a4a9db..61ce9228214 100644 --- a/src/world/area_kkj/kkj_16/kkj_16_5_entity.c +++ b/src/world/area_kkj/kkj_16/kkj_16_5_entity.c @@ -10,7 +10,7 @@ EvtScript N(EVS_AutoRemovePowerRush) = { Wait(1) EndLoop Wait(10) - Call(RemoveBadge, ITEM_POWER_RUSH) + Call(RemoveItem, ITEM_POWER_RUSH) Return End }; diff --git a/src/world/area_kkj/kkj_17/kkj_17_2_entity.c b/src/world/area_kkj/kkj_17/kkj_17_2_entity.c index e8f3cfc5fb1..7f343944822 100644 --- a/src/world/area_kkj/kkj_17/kkj_17_2_entity.c +++ b/src/world/area_kkj/kkj_17/kkj_17_2_entity.c @@ -9,7 +9,7 @@ EvtScript N(EVS_AutoRemoveDeepFocus) = { Wait(1) EndLoop Wait(10) - Call(RemoveBadge, ITEM_DEEP_FOCUS1) + Call(RemoveItem, ITEM_DEEP_FOCUS1) Return End }; diff --git a/src/world/area_kkj/kkj_17/kkj_17_3_chest.c b/src/world/area_kkj/kkj_17/kkj_17_3_chest.c index 9cb7bd01b34..41deed18b50 100644 --- a/src/world/area_kkj/kkj_17/kkj_17_3_chest.c +++ b/src/world/area_kkj/kkj_17/kkj_17_3_chest.c @@ -4,29 +4,7 @@ extern IconHudScriptPair gItemHudScripts[]; -// ------------------------------------------------------ -// begin modified Chest.inc.c -// differences are: -// - inclusion of N(ChestItems) -// - removal of N(EVS_Chest_GetItem) - -#include "world/common/todo/StashVars.inc.c" #include "world/common/todo/GetItemName.inc.c" -#include "world/common/todo/SomeItemEntityFunc.inc.c" -#include "world/common/todo/IsItemBadge.inc.c" - -s32** N(varStash) = NULL; - -EvtScript N(EVS_Chest_ShowGotItem) = { - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_FULL) - Wait(40) - Call(ShowGotItem, LVar0, FALSE, 0) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Return - Return - End -}; s32 N(ChestItems)[] = { ITEM_POWER_RUSH, @@ -36,10 +14,7 @@ s32 N(ChestItems)[] = { ITEM_JAMMIN_JELLY, }; -// end modified Chest.inc.c -// ------------------------------------------------------ - -//TODO this whole file is probably an include shared with kkj_17, but the temp required in this function prevents deduplication +// this file is mostly the same as in hos_06 API_CALLABLE(N(ChestItemPrompt)) { PopupMenu *menu; s32 menuIdx; @@ -53,8 +28,7 @@ API_CALLABLE(N(ChestItemPrompt)) { script->functionTempPtr[2] = menu; script->varTable[10] = script->varTable[0]; - // NOTE: identical to ChestItemPrompt in hos_06 EXCEPT here, where varTable[0] is required instead of varTable[10] - if (script->varTable[0] == 0) { + if (script->varTable[10] == 0) { // storing items script->varTable[1] = GF_KKJ16_Item_PowerRush; script->varTable[2] = GF_KKJ_Stored_PowerRush; @@ -145,7 +119,10 @@ API_CALLABLE(N(SetItemRetrieved)) { return ApiStatus_DONE2; } -#include "world/common/todo/GetItemEmptyCount.inc.c" +API_CALLABLE(N(GetItemEmptyCount)) { + script->varTable[1] = get_consumables_empty(); + return ApiStatus_DONE2; +} EvtScript N(EVS_OpenChest) = { Call(PlaySoundAtCollider, COLLIDER_o89, SOUND_OPEN_MAGIC_CHEST, 0) @@ -231,16 +208,16 @@ EvtScript N(EVS_UseMagicChest_Mario) = { Call(N(ChestItemPrompt)) Switch(LVar0) CaseEq(-1) - CaseEq(0) + CaseEq(ITEM_NONE) Call(ShowMessageAtScreenPos, MSG_Menus_00D4, 160, 40) - CaseOrEq(269) - CaseOrEq(297) - CaseOrEq(273) + CaseOrEq(ITEM_POWER_RUSH) + CaseOrEq(ITEM_DEEP_FOCUS1) + CaseOrEq(ITEM_LAST_STAND) SetGroup(EVT_GROUP_00) Call(SetTimeFreezeMode, TIME_FREEZE_FULL) Call(ShowGotItem, LVar0, FALSE, 0) Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Call(AddBadge, LVar0, LVar1) + Call(AddItem, LVar0, LVar1) Call(N(SetItemRetrieved)) EndCaseGroup CaseDefault diff --git a/src/world/area_kkj/kkj_18/kkj_18_4_gourmet.c b/src/world/area_kkj/kkj_18/kkj_18_4_gourmet.c index e31b951724d..a8ebd77c125 100644 --- a/src/world/area_kkj/kkj_18/kkj_18_4_gourmet.c +++ b/src/world/area_kkj/kkj_18/kkj_18_4_gourmet.c @@ -2,8 +2,7 @@ #include "sprite/player.h" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" API_CALLABLE(N(SetHeldBakingItem)) { Bytecode* args = script->ptrReadPos; @@ -449,7 +448,7 @@ EvtScript N(EVS_Scene_GiveKitchenKey) = { Wait(30 * DT) Set(LVar0, ITEM_PEACH_KEY1) Call(ShowGotItem, LVar0, TRUE, 0) - Call(AddKeyItem, LVar0) + Call(AddItem, LVar0, EVT_IGNORE_ARG) Set(GF_KKJ18_GourmetGuy_GaveKey, TRUE) Call(SetNpcAnimation, NPC_GourmetGuy, ANIM_GourmetGuy_Walk) Call(SetNpcJumpscale, NPC_GourmetGuy, 0) diff --git a/src/world/area_kkj/kkj_19/kkj_19_5_baking.c b/src/world/area_kkj/kkj_19/kkj_19_5_baking.c index 4888d649cab..16560a47261 100644 --- a/src/world/area_kkj/kkj_19/kkj_19_5_baking.c +++ b/src/world/area_kkj/kkj_19/kkj_19_5_baking.c @@ -5,8 +5,7 @@ #include "battle/action_cmd.h" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #define MIXING_TIME_IN_FRAMES 10 * 30 * DT #define MIXING_REQUIRED_INPUTS 27 @@ -376,8 +375,7 @@ EvtScript N(EVS_UpdatePeachMixingAnimations) = { EvtScript N(EVS_ReturnHeldIngredient) = { IfNe(AB_KKJ19_HeldIngredient, PEACH_BAKING_NONE) - Call(FindKeyItem, AB_KKJ19_HeldIngredient, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, AB_KKJ19_HeldIngredient) Set(AB_KKJ19_HeldIngredient, PEACH_BAKING_NONE) Call(N(SetHeldBakingItem), PEACH_BAKING_NONE) Call(SetPlayerActionState, ACTION_STATE_IDLE) @@ -451,11 +449,11 @@ EvtScript N(EVS_TakeIngredient) = { Call(N(SetHeldBakingItem), LVar0) Call(SetPlayerActionState, ACTION_STATE_IDLE) Set(AB_KKJ19_HeldIngredient, LVarB) - Call(AddKeyItem, LVarB) + Call(AddItem, LVarB, EVT_IGNORE_ARG) Call(ShowMessageAtScreenPos, MSG_Peach_00E7, 160, 40) Else // exchanging held ingredient for current station - Call(FindKeyItem, LVar0, LVar1) + Call(FindItem, LVar0, LVar1) IfEq(LVar1, -1) Set(LVar9, AB_KKJ19_HeldIngredient) Call(N(GetItemNameRaw), LVar9) @@ -492,7 +490,7 @@ EvtScript N(EVS_TakeIngredient) = { Call(N(SetHeldBakingItem), LVar0) Call(SetPlayerActionState, ACTION_STATE_IDLE) Set(AB_KKJ19_HeldIngredient, LVarB) - Call(AddKeyItem, LVarB) + Call(AddItem, LVarB, EVT_IGNORE_ARG) Call(SwitchMessage, MSG_Peach_00EA) Else Call(CloseMessage) diff --git a/src/world/area_kkj/kkj_20/kkj_20_3_entity.c b/src/world/area_kkj/kkj_20/kkj_20_3_entity.c index 9ec79e07a77..1cfa6c39deb 100644 --- a/src/world/area_kkj/kkj_20/kkj_20_3_entity.c +++ b/src/world/area_kkj/kkj_20/kkj_20_3_entity.c @@ -9,7 +9,7 @@ EvtScript N(EVS_OpenChest_LastStand) = { Set(LVar0, LVarA) ExecWait(N(EVS_Chest_ShowGotItem)) IfGe(GB_StoryProgress, STORY_CH8_REACHED_PEACHS_CASTLE) - Call(AddBadge, LVarA, LVar0) + Call(AddItem, LVarA, LVar0) EndIf Set(GF_KKJ20_Chest_LastStand, TRUE) Wait(15) diff --git a/src/world/area_kkj/kkj_23/kkj_23_2_main.c b/src/world/area_kkj/kkj_23/kkj_23_2_main.c index ba4ef7e837d..2b7eebe70c8 100644 --- a/src/world/area_kkj/kkj_23/kkj_23_2_main.c +++ b/src/world/area_kkj/kkj_23/kkj_23_2_main.c @@ -9,7 +9,9 @@ EvtScript N(EVS_EndPeachChapter6) = { Call(PlaySound, SOUND_SLIDE_WHISTLE_OUT) Call(GotoMapSpecial, Ref("flo_00"), flo_00_ENTRY_A, TRANSITION_END_PEACH_INTERLUDE) Wait(100) -}; //@bug script not properly terminated + Return + End +}; EvtScript N(EVS_ExitDoors_kkj_22_1) = { SetGroup(EVT_GROUP_1B) diff --git a/src/world/area_kkj/kkj_25/kkj_25_8_bowser_defeated.c b/src/world/area_kkj/kkj_25/kkj_25_8_bowser_defeated.c index c9da3a254fd..5b0dab93c18 100644 --- a/src/world/area_kkj/kkj_25/kkj_25_8_bowser_defeated.c +++ b/src/world/area_kkj/kkj_25/kkj_25_8_bowser_defeated.c @@ -140,7 +140,7 @@ EvtScript N(EVS_ManageShaking) = { Set(MV_DestructState, DESTRUCT_STATE_TREMBLE) CaseEq(DESTRUCT_STATE_4) UseBuf(Ref(N(ArenaExplosions))) - Loop(1 + ARRAY_COUNT(N(ArenaExplosions))) //@bug extra iteration reads garbage + Loop(ARRAY_COUNT(N(ArenaExplosions))) BufRead4(LVar0, LVar1, LVar2, LVar3) FBufRead2(LVar4, LVar5) Call(PlaySoundAt, SOUND_SEQ_FINALE_EXPLOSION, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) diff --git a/src/world/area_kkj/kkj_29/kkj_29_1_main.c b/src/world/area_kkj/kkj_29/kkj_29_1_main.c index 47dacb9c59f..1d5c7d4be3e 100644 --- a/src/world/area_kkj/kkj_29/kkj_29_1_main.c +++ b/src/world/area_kkj/kkj_29/kkj_29_1_main.c @@ -8,7 +8,9 @@ EvtScript N(EVS_EndPeachChapter5) = { Call(PlaySound, SOUND_SLIDE_WHISTLE_OUT) Call(GotoMapSpecial, Ref("jan_22"), jan_22_ENTRY_3, TRANSITION_END_PEACH_INTERLUDE) Wait(100) -}; //@bug script not properly terminated + Return + End +}; EvtScript N(EVS_ExitDoor_kkj_10_2) = { SetGroup(EVT_GROUP_1B) diff --git a/src/world/area_kmr/kmr_02/kmr_02_3_npc.c b/src/world/area_kmr/kmr_02/kmr_02_3_npc.c index c0bc0645354..5b7d46ba082 100644 --- a/src/world/area_kmr/kmr_02/kmr_02_3_npc.c +++ b/src/world/area_kmr/kmr_02/kmr_02_3_npc.c @@ -15,7 +15,6 @@ BSS u8 N(savedColA); // a BSS u8 oldPrimR, oldPrimG, oldPrimB; BSS u8 oldEnvR, oldEnvG, oldEnvB; -#define QUIZMO_PRE_STATIC_PAD TRUE #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" @@ -36,17 +35,15 @@ API_CALLABLE(N(func_80242014_8B2084)) { #include "world/common/enemy/Kammy_Guard.inc.c" #include "world/common/npc/StarSpirit.inc.c" -MAP_STATIC_PAD(1,key_choice); #include "world/common/complete/KeyItemChoice.inc.c" +#include "world/common/complete/LetterDelivery.inc.c" + +#include "world/common/atomic/MarioSalute.inc.c" #define NAME_SUFFIX _Npc #include "wander_territories.inc.c" #define NAME_SUFFIX -#include "world/common/atomic/MarioSalute.inc.c" - -#include "world/common/complete/LetterDelivery.inc.c" - s32 N(LetterList_GoompapaTrade)[] = { ITEM_LETTER_CHAIN_GOOMPAPA_1, ITEM_NONE @@ -81,7 +78,7 @@ EvtScript N(EVS_LetterPrompt_Goompapa) = { EvtScript N(EVS_LetterReward_Goompapa) = { IfEq(LVarC, DELIVERY_ACCEPTED) - EVT_GIVE_BADGE_REWARD(ITEM_LUCKY_DAY) + EVT_GIVE_REWARD(ITEM_LUCKY_DAY) EndIf Return End @@ -219,8 +216,7 @@ EvtScript N(EVS_Goombaria_RequestDolly) = { Call(ShowChoice, MSG_Choice_0011) Wait(10) IfEq(LVar0, 0) - Call(FindKeyItem, ITEM_DOLLY, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, ITEM_DOLLY) ExecWait(N(EVS_HandOverDolly)) Call(ContinueSpeech, NPC_Goombaria, ANIM_Goombaria_Talk, ANIM_Goombaria_Idle, 0, MSG_CH0_009A) Wait(10) @@ -249,7 +245,7 @@ EvtScript N(EVS_Goombaria_RequestDolly) = { }; EvtScript N(EVS_NpcInteract_Goombaria) = { - Call(HasKeyItem, ITEM_DOLLY, LVar0) + Call(HasItem, ITEM_DOLLY, LVar0) IfNe(LVar0, 0) ExecWait(N(EVS_Goombaria_RequestDolly)) Return @@ -537,8 +533,7 @@ EvtScript N(EVS_ReturnToVillage) = { Switch(LVar0) CaseEq(0) Call(CloseMessage) - Call(FindKeyItem, ITEM_DOLLY, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, ITEM_DOLLY) Call(PlayerFaceNpc, NPC_Goombaria, TRUE) Call(PlayerMoveTo, -50, -24, 0) Call(InterpPlayerYaw, 94, 0) @@ -639,7 +634,7 @@ EvtScript N(EVS_ReturnToVillage) = { Call(SetNpcAnimation, NPC_PARTNER, ANIM_Goompa_Idle) Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_IGNORE_WORLD_COLLISION, FALSE) Wait(10 * DT) - EVT_GIVE_BADGE_REWARD(ITEM_POWER_JUMP) + EVT_GIVE_REWARD(ITEM_POWER_JUMP) Call(SetNpcAnimation, NPC_PARTNER, ANIM_Goompa_Walk) Call(NpcMoveTo, NPC_PARTNER, 3, 9, 0) Call(SetNpcAnimation, NPC_PARTNER, ANIM_Goompa_Idle) @@ -800,7 +795,7 @@ EvtScript N(EVS_KootFavorCheck_Goompa) = { Call(SetNpcPos, NPC_Goompa, LVar0, LVar1, LVar2) Call(SetNpcFlagBits, NPC_Goompa, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) Call(SpeakToPlayer, NPC_Goompa, ANIM_Goompa_Talk, ANIM_Goompa_Idle, 0, MSG_CH0_004B) - EVT_GIVE_KEY_REWARD(ITEM_KOOT_THE_TAPE) + EVT_GIVE_REWARD(ITEM_KOOT_THE_TAPE) Call(SpeakToPlayer, NPC_Goompa, ANIM_Goompa_Talk, ANIM_Goompa_Idle, 0, MSG_CH0_004C) EndIf EndIf diff --git a/src/world/area_kmr/kmr_04/kmr_04_3_npc.c b/src/world/area_kmr/kmr_04/kmr_04_3_npc.c index 25bed3bad42..e4e80a89235 100644 --- a/src/world/area_kmr/kmr_04/kmr_04_3_npc.c +++ b/src/world/area_kmr/kmr_04/kmr_04_3_npc.c @@ -24,7 +24,7 @@ EvtScript N(EVS_NpcAux_Goompa) = { #include "world/common/todo/CheckPartnerFlags1000.inc.c" API_CALLABLE(N(GetPlayerHP)) { - script->varTable[0] = get_player_data()->curHP; + script->varTable[0] = gPlayerData.curHP; return ApiStatus_DONE2; } diff --git a/src/world/area_kmr/kmr_09/kmr_09_3_npc.c b/src/world/area_kmr/kmr_09/kmr_09_3_npc.c index 88e8bb4a00e..0dfc0062360 100644 --- a/src/world/area_kmr/kmr_09/kmr_09_3_npc.c +++ b/src/world/area_kmr/kmr_09/kmr_09_3_npc.c @@ -73,8 +73,8 @@ EvtScript N(EVS_OnReadBillboard) = { IfEq(LFlag0, TRUE) Unbind EndIf + Return End - Return //@bug wrong order for END/RETURN }; EvtScript N(EVS_NpcIdle_Goomba_Ambush) = { diff --git a/src/world/area_kmr/kmr_10/kmr_10_4_entity.c b/src/world/area_kmr/kmr_10/kmr_10_4_entity.c index d3926a2b2d4..dcca9090275 100644 --- a/src/world/area_kmr/kmr_10/kmr_10_4_entity.c +++ b/src/world/area_kmr/kmr_10/kmr_10_4_entity.c @@ -72,7 +72,7 @@ EvtScript N(EVS_UseSpring) = { End }; -EvtScript N(EVS_OpenChest_HammerThrow) = EVT_OPEN_CHEST_BADGE(ITEM_HAMMER_THROW, GF_KMR10_Chest_HammerThrow); +EvtScript N(EVS_OpenChest_HammerThrow) = EVT_OPEN_CHEST(ITEM_HAMMER_THROW, GF_KMR10_Chest_HammerThrow); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_YellowBlock), -190, 75, 220, 0, ITEM_SLEEPY_SHEEP, MAKE_ENTITY_END) diff --git a/src/world/area_kmr/kmr_11/kmr_11_2_main.c b/src/world/area_kmr/kmr_11/kmr_11_2_main.c index 7bcddcfbbbf..64e29245e38 100644 --- a/src/world/area_kmr/kmr_11/kmr_11_2_main.c +++ b/src/world/area_kmr/kmr_11/kmr_11_2_main.c @@ -34,11 +34,12 @@ EvtScript N(EVS_PlayBridgeAnimation) = { End }; -//@bug exit to 'Save and Continue?' map is not properly terminated! EvtScript N(EVS_BadExit_kmr_24_0) = { Call(FadeOutMusic, 0, 1500) Call(GotoMapSpecial, Ref("kmr_24"), kmr_24_ENTRY_0, TRANSITION_MARIO_BLACK) Wait(100) + Return + End }; EvtScript N(EVS_ExitWalk_kmr_12_1) = { diff --git a/src/world/area_kmr/kmr_12/kmr_12_3_npc.c b/src/world/area_kmr/kmr_12/kmr_12_3_npc.c index 6dbd593f335..e772dcc8c1c 100644 --- a/src/world/area_kmr/kmr_12/kmr_12_3_npc.c +++ b/src/world/area_kmr/kmr_12/kmr_12_3_npc.c @@ -28,8 +28,8 @@ EvtScript N(EVS_OnReadBillboard) = { IfEq(LFlag0, TRUE) Unbind EndIf + Return End - Return //@bug wrong order for END/RETURN }; EvtScript N(EVS_NpcIdle_Goomba) = { diff --git a/src/world/area_kmr/kmr_20/kmr_20_10_npc.c b/src/world/area_kmr/kmr_20/kmr_20_10_npc.c index 60c4fb890d9..50ad4c5656f 100644 --- a/src/world/area_kmr/kmr_20/kmr_20_10_npc.c +++ b/src/world/area_kmr/kmr_20/kmr_20_10_npc.c @@ -49,10 +49,7 @@ EvtScript N(EVS_KootFavorCheck_Luigi) = { Wait(10) Call(SpeakToPlayer, NPC_SELF, ANIM_Luigi_Talk, ANIM_Luigi_Idle, 0, MSG_CH0_0105) Wait(10) - Set(LVar0, ITEM_KOOT_LUIGI_AUTOGRAPH) - Set(LVar1, 1) - ExecWait(N(GiveItemReward)) - Call(AddKeyItem, LVar0) + EVT_GIVE_REWARD(ITEM_KOOT_LUIGI_AUTOGRAPH) Set(GF_KMR20_Gift_LuigisAutograph, TRUE) IfGe(GB_StoryProgress, STORY_CH3_STAR_SPRIT_DEPARTED) IfLt(GB_StoryProgress, STORY_CH4_DEFEATED_GENERAL_GUY) diff --git a/src/world/area_kmr/kmr_20/kmr_20_4_documents.c b/src/world/area_kmr/kmr_20/kmr_20_4_documents.c index 4299604e424..ae156a7b0fc 100644 --- a/src/world/area_kmr/kmr_20/kmr_20_4_documents.c +++ b/src/world/area_kmr/kmr_20/kmr_20_4_documents.c @@ -1,5 +1,6 @@ #include "kmr_20.h" #include "hud_element.h" +#include "vars_access.h" #include "ld_addrs.h" #define PACKED_BYTE(base, i) \ @@ -19,7 +20,6 @@ extern HudScript HES_Item_Unused_08C_disabled; BSS PopupMenu N(ChooseDocumentPopupMenu); BSS IMG_BIN N(LetterBackgroundImg)[0x3D86] ALIGNED(16); BSS PAL_BIN N(LetterBackgroundPal)[0x100]; -BSS char N(static_pad)[0x8]; // padding BSS IMG_BIN N(LetterPhotoImg)[0x3D86]; BSS PAL_BIN N(N(LetterPhotoPal))[0x100]; BSS s32 N(LetterWorkerID); diff --git a/src/world/area_kmr/kmr_24/kmr_24_1_main.c b/src/world/area_kmr/kmr_24/kmr_24_1_main.c index 0b2c4366954..fd0e79b5964 100644 --- a/src/world/area_kmr/kmr_24/kmr_24_1_main.c +++ b/src/world/area_kmr/kmr_24/kmr_24_1_main.c @@ -30,7 +30,7 @@ API_CALLABLE(N(SaveAndContinue)) { u16 curEntry = gGameStatusPtr->entryID; // save with map being osr_03, entry 4 u16 areaID, mapID; - get_map_IDs_by_name("osr_03", &areaID, &mapID); + get_map_IDs_by_name_checked("osr_03", &areaID, &mapID); gGameStatusPtr->areaID = areaID; gGameStatusPtr->mapID = mapID; gGameStatusPtr->entryID = osr_03_ENTRY_4; diff --git a/src/world/area_kpa/kpa_08/kpa_08_0_header.c b/src/world/area_kpa/kpa_08/kpa_08_0_header.c index fd4654018f1..0cd1fc07a43 100644 --- a/src/world/area_kpa/kpa_08/kpa_08_0_header.c +++ b/src/world/area_kpa/kpa_08/kpa_08_0_header.c @@ -8,6 +8,6 @@ EntryList N(Entrances) = { MapSettings N(settings) = { .main = &N(EVS_Main), .entryList = &N(Entrances), - .entryCount = 11, //@bug -- should be 2 + .entryCount = 2, .tattle = { MSG_MapTattle_kpa_08 }, }; diff --git a/src/world/area_kpa/kpa_09/kpa_09_0_header.c b/src/world/area_kpa/kpa_09/kpa_09_0_header.c index d63b165e6fb..fd6a767b63b 100644 --- a/src/world/area_kpa/kpa_09/kpa_09_0_header.c +++ b/src/world/area_kpa/kpa_09/kpa_09_0_header.c @@ -8,6 +8,6 @@ EntryList N(Entrances) = { MapSettings N(settings) = { .main = &N(EVS_Main), .entryList = &N(Entrances), - .entryCount = 11, //@bug -- should be 2 + .entryCount = 2, .tattle = { MSG_MapTattle_kpa_09 }, }; diff --git a/src/world/area_kpa/kpa_14/kpa_14_3_entity.c b/src/world/area_kpa/kpa_14/kpa_14_3_entity.c index f986c8a540b..823691e21be 100644 --- a/src/world/area_kpa/kpa_14/kpa_14_3_entity.c +++ b/src/world/area_kpa/kpa_14/kpa_14_3_entity.c @@ -2,25 +2,6 @@ #include "kpa_14.h" #include "entity.h" -// similar to Chest.inc.c, except a script is missing... -#include "world/common/todo/StashVars.inc.c" -#include "world/common/todo/GetItemName.inc.c" -#include "world/common/todo/SomeItemEntityFunc.inc.c" -#include "world/common/todo/IsItemBadge.inc.c" - -s32** N(varStash) = NULL; - -EvtScript N(EVS_Chest_ShowGotItem) = { - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_FULL) - Wait(40) - Call(ShowGotItem, LVar0, FALSE, 0) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Return - Return - End -}; - #include "world/common/todo/RemovePadlock.inc.c" #include "world/common/todo/GetEntityPosition.inc.c" diff --git a/src/world/area_kpa/kpa_15/kpa_15_3_entity.c b/src/world/area_kpa/kpa_15/kpa_15_3_entity.c index 330d8d8beda..72dafd1217a 100644 --- a/src/world/area_kpa/kpa_15/kpa_15_3_entity.c +++ b/src/world/area_kpa/kpa_15/kpa_15_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_CastleKey) = EVT_OPEN_CHEST_KEY(ITEM_BOWSER_CASTLE_KEY, GF_KPA15_Chest_CastleKey2); +EvtScript N(EVS_OpenChest_CastleKey) = EVT_OPEN_CHEST(ITEM_BOWSER_CASTLE_KEY, GF_KPA15_Chest_CastleKey2); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 220, 30, -100, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_kpa/kpa_81/kpa_81_3_npc.c b/src/world/area_kpa/kpa_81/kpa_81_3_npc.c index 3ad41e78af7..484e955eb23 100644 --- a/src/world/area_kpa/kpa_81/kpa_81_3_npc.c +++ b/src/world/area_kpa/kpa_81/kpa_81_3_npc.c @@ -4,8 +4,7 @@ #include "world/common/npc/Toad_Stationary.inc.c" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" EvtScript N(EVS_EnsurePartnerNeutral) = { Call(GetPartnerInUse, LVar0) diff --git a/src/world/area_kpa/kpa_82/kpa_82_3_npc.c b/src/world/area_kpa/kpa_82/kpa_82_3_npc.c index 66a69eaee69..d14598b1133 100644 --- a/src/world/area_kpa/kpa_82/kpa_82_3_npc.c +++ b/src/world/area_kpa/kpa_82/kpa_82_3_npc.c @@ -89,8 +89,7 @@ NpcSettings N(NpcSettings_ShyGuy) = { }; #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" EvtScript N(EVS_SetCam_MeetingDoor) = { Call(SetCamType, CAM_DEFAULT, 4, FALSE) diff --git a/src/world/area_kpa/kpa_96/kpa_96_3_npc.c b/src/world/area_kpa/kpa_96/kpa_96_3_npc.c index 94118dd2dac..573f019d200 100644 --- a/src/world/area_kpa/kpa_96/kpa_96_3_npc.c +++ b/src/world/area_kpa/kpa_96/kpa_96_3_npc.c @@ -53,7 +53,6 @@ EvtScript N(EVS_OnBuy) = { CaseEq(SHOP_BUY_RESULT_CANCEL) CaseEq(SHOP_BUY_RESULT_4) CaseEq(SHOP_BUY_RESULT_OK) - CaseEq(SHOP_BUY_RESULT_OK) //@bug duplicate case EndSwitch Return End diff --git a/src/world/area_kzn/kzn_06/kzn_06_3_extra.c b/src/world/area_kzn/kzn_06/kzn_06_3_extra.c index 360030eec60..5fa0a045583 100644 --- a/src/world/area_kzn/kzn_06/kzn_06_3_extra.c +++ b/src/world/area_kzn/kzn_06/kzn_06_3_extra.c @@ -66,23 +66,6 @@ ModelIDList N(LavaModels) = { .list = { MODEL_g41 } }; - //@bug modelID 0x12 when it should be 12 -ModelIDList N(InvalidLavaModels) = { - .count = 1, - .list = { MODEL_o238 } -}; - -EvtScript N(EVS_8024137C) = { - Label(0) - Call(N(AdjustFog), Ref(N(InvalidLavaModels)), 0, 0, 255, 60, 1) - Wait(30) - Call(N(AdjustFog), Ref(N(InvalidLavaModels)), 0, 0, 255, 60, 0) - Wait(30) - Goto(0) - Return - End -}; - EvtScript N(EVS_LowerMainLavaLevel) = { Call(DisablePlayerInput, TRUE) Wait(3) diff --git a/src/world/area_kzn/kzn_08/kzn_08_2_entity.c b/src/world/area_kzn/kzn_08/kzn_08_2_entity.c index d75ad66861c..30664340109 100644 --- a/src/world/area_kzn/kzn_08/kzn_08_2_entity.c +++ b/src/world/area_kzn/kzn_08/kzn_08_2_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_DizzyStomp) = EVT_OPEN_CHEST_BADGE(ITEM_DIZZY_STOMP, GF_KZN08_Chest_DizzyStomp); +EvtScript N(EVS_OpenChest_DizzyStomp) = EVT_OPEN_CHEST(ITEM_DIZZY_STOMP, GF_KZN08_Chest_DizzyStomp); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 120, 100, -55, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_kzn/kzn_19/kzn_19_1_music.c b/src/world/area_kzn/kzn_19/kzn_19_1_music.c index 4b10dcc2263..4b607492f7a 100644 --- a/src/world/area_kzn/kzn_19/kzn_19_1_music.c +++ b/src/world/area_kzn/kzn_19/kzn_19_1_music.c @@ -9,7 +9,6 @@ EvtScript N(EVS_SetupMusic) = { Call(PlayAmbientSounds, AMBIENT_LAVA_1) Return EndIf - EndIf //@bug extra endif CaseGe(STORY_CH5_MT_LAVA_LAVA_ERUPTING) Call(PlaySound, SOUND_LOOP_RUMBLE) EndSwitch diff --git a/src/world/area_kzn/kzn_22/kzn_22_4_npc.c b/src/world/area_kzn/kzn_22/kzn_22_4_npc.c index 700b4939daa..dd3c69abc19 100644 --- a/src/world/area_kzn/kzn_22/kzn_22_4_npc.c +++ b/src/world/area_kzn/kzn_22/kzn_22_4_npc.c @@ -41,7 +41,6 @@ EvtScript N(EVS_NpcIdle_Kolorado) = { Wait(35) EndIf Wait(10) -EndIf //@bug unmatched endif Call(PlayerFaceNpc, NPC_Kolorado, FALSE) Set(AF_KZN23_SceneStarted, TRUE) Thread diff --git a/src/world/area_mac/mac_00/mac_00_10_shared_npc.c b/src/world/area_mac/mac_00/mac_00_10_shared_npc.c index 7b0936d5378..dd05cf9f07c 100644 --- a/src/world/area_mac/mac_00/mac_00_10_shared_npc.c +++ b/src/world/area_mac/mac_00/mac_00_10_shared_npc.c @@ -469,11 +469,11 @@ EvtScript N(EVS_NpcAux_FelissaT) = { }; EvtScript N(EVS_NpcInteract_Toad_09) = { - Call(FindKeyItem, ITEM_FIRST_DEGREE_CARD, LVar1) - Call(FindKeyItem, ITEM_SECOND_DEGREE_CARD, LVar2) - Call(FindKeyItem, ITEM_THIRD_DEGREE_CARD, LVar3) - Call(FindKeyItem, ITEM_FOURTH_DEGREE_CARD, LVar4) - Call(FindKeyItem, ITEM_DIPLOMA, LVar5) + Call(FindItem, ITEM_FIRST_DEGREE_CARD, LVar1) + Call(FindItem, ITEM_SECOND_DEGREE_CARD, LVar2) + Call(FindItem, ITEM_THIRD_DEGREE_CARD, LVar3) + Call(FindItem, ITEM_FOURTH_DEGREE_CARD, LVar4) + Call(FindItem, ITEM_DIPLOMA, LVar5) IfNe(LVar1, -1) Call(SpeakToPlayer, NPC_SELF, ANIM_Toad_Yellow_Talk, ANIM_Toad_Yellow_Idle, 0, MSG_MAC_Gate_0114) Return diff --git a/src/world/area_mac/mac_00/mac_00_5_npc.c b/src/world/area_mac/mac_00/mac_00_5_npc.c index 3dca6960687..e9cf61798e9 100644 --- a/src/world/area_mac/mac_00/mac_00_5_npc.c +++ b/src/world/area_mac/mac_00/mac_00_5_npc.c @@ -8,11 +8,8 @@ #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" -MAP_STATIC_PAD(1,key_choice); #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" - +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/complete/LetterDelivery.inc.c" #include "npc/russ_and_thief.inc.c" diff --git a/src/world/area_mac/mac_00/npc/dojo_members.inc.c b/src/world/area_mac/mac_00/npc/dojo_members.inc.c index 58b308224c8..5480bc56ac8 100644 --- a/src/world/area_mac/mac_00/npc/dojo_members.inc.c +++ b/src/world/area_mac/mac_00/npc/dojo_members.inc.c @@ -226,13 +226,12 @@ EvtScript N(EVS_NpcIdle_TheMaster) = { EndSwitch Add(GB_MAC00_DojoRank, 1) Call(SpeakToPlayer, NPC_TheMaster, ANIM_TheMaster_Talk, ANIM_TheMaster_Idle, 0, LVar1) - Call(FindKeyItem, LVar2, LVar1) + Call(FindItem, LVar2, LVar1) IfNe(LVar1, -1) Call(RemoveKeyItemAt, LVar1) EndIf - Set(LVar1, 1) ExecWait(N(GiveItemReward)) - Call(AddKeyItem, LVar0) + Call(AddItem, LVar0, EVT_IGNORE_ARG) IfLt(GB_MAC00_DojoRank, 5) Call(SpeakToPlayer, NPC_TheMaster, ANIM_TheMaster_Talk, ANIM_TheMaster_Idle, 0, MSG_MAC_Gate_0041) EndIf diff --git a/src/world/area_mac/mac_00/npc/trading_toad.inc.c b/src/world/area_mac/mac_00/npc/trading_toad.inc.c index 53d428ccdaa..e5834100c0e 100644 --- a/src/world/area_mac/mac_00/npc/trading_toad.inc.c +++ b/src/world/area_mac/mac_00/npc/trading_toad.inc.c @@ -4,7 +4,7 @@ API_CALLABLE(N(CheckTradeEventTime)) { } API_CALLABLE(N(GetTradeEventItemCount)) { - script->varTable[0] = get_item_count(); + script->varTable[0] = get_consumables_count(); return ApiStatus_DONE2; } @@ -34,7 +34,7 @@ EvtScript N(EVS_NpcInteract_TradingToad) = { Return CaseEq(ITEM_KOOPA_LEAF) Call(SpeakToPlayer, NPC_SELF, ANIM_Toad_Pink_Talk, ANIM_Toad_Pink_Idle, 0, MSG_MAC_Gate_011C) - EVT_GIVE_CONSUMABLE_REWARD(ITEM_MAPLE_SYRUP) + EVT_GIVE_REWARD(ITEM_MAPLE_SYRUP) Wait(10) Call(SpeakToPlayer, NPC_SELF, ANIM_Toad_Pink_Talk, ANIM_Toad_Pink_Idle, 0, MSG_MAC_Gate_011D) Wait(10) diff --git a/src/world/area_mac/mac_01/mac_01_9_npc.c b/src/world/area_mac/mac_01/mac_01_9_npc.c index 1100c5b3170..8045452c2be 100644 --- a/src/world/area_mac/mac_01/mac_01_9_npc.c +++ b/src/world/area_mac/mac_01/mac_01_9_npc.c @@ -37,9 +37,7 @@ NpcSettings N(NpcSettings_Parakarry) = { #include "world/common/atomic/ToadHouse.inc.c" #include "world/common/atomic/ToadHouse.data.inc.c" -MAP_STATIC_PAD(1,key_choice); #include "world/common/complete/KeyItemChoice.inc.c" - #include "world/common/complete/LetterDelivery.inc.c" #include "world/common/todo/GetPlayerCoins.inc.c" @@ -135,7 +133,7 @@ EvtScript N(EVS_ArtifactPrompt_Kolorado) = { IfEq(GF_SBK_GaveArtifactToKolorado, TRUE) Return EndIf - Call(FindKeyItem, ITEM_ARTIFACT, LVar0) + Call(FindItem, ITEM_ARTIFACT, LVar0) IfEq(LVar0, -1) Return EndIf diff --git a/src/world/area_mac/mac_01/npc/post_office.inc.c b/src/world/area_mac/mac_01/npc/post_office.inc.c index b765b21e4d4..487628f8884 100644 --- a/src/world/area_mac/mac_01/npc/post_office.inc.c +++ b/src/world/area_mac/mac_01/npc/post_office.inc.c @@ -228,7 +228,7 @@ s32 N(ItemList_Mailbag)[] = { }; EvtScript N(EVS_ItemPrompt_Mailbag) = { - Call(FindKeyItem, ITEM_MAILBAG, LVar0) + Call(FindItem, ITEM_MAILBAG, LVar0) IfEq(LVar0, -1) Call(SpeakToPlayer, NPC_Postmaster, ANIM_Postmaster_Talk, ANIM_Postmaster_Idle, 0, MSG_MAC_Plaza_0060) Else diff --git a/src/world/area_mac/mac_01/npc/rowf_and_rhuff.inc.c b/src/world/area_mac/mac_01/npc/rowf_and_rhuff.inc.c index 48641b780e5..4bbf22ad5a2 100644 --- a/src/world/area_mac/mac_01/npc/rowf_and_rhuff.inc.c +++ b/src/world/area_mac/mac_01/npc/rowf_and_rhuff.inc.c @@ -173,10 +173,7 @@ EvtScript N(EVS_NpcInteract_Rowf_C) = { CaseDefault Call(SpeakToPlayer, NPC_Rowf, ANIM_Rowf_Talk, ANIM_Rowf_Cheer, 0, MSG_MAC_Plaza_0009) Wait(10) - Set(LVar0, ITEM_I_SPY) - Set(LVar3, 2) - ExecWait(N(GiveItemReward)) - Call(AddBadge, LVar0, LVar1) + EVT_GIVE_REWARD(ITEM_I_SPY) Set(GF_MAC01_CalculatorReturned, TRUE) Wait(10) Call(SpeakToPlayer, NPC_Rhuff, ANIM_Rowf_Talk, ANIM_Rowf_Idle, 0, MSG_MAC_Plaza_0011) diff --git a/src/world/area_mac/mac_02/mac_02_6_npc.c b/src/world/area_mac/mac_02/mac_02_6_npc.c index fe37585272a..b9eacd5a3d2 100644 --- a/src/world/area_mac/mac_02/mac_02_6_npc.c +++ b/src/world/area_mac/mac_02/mac_02_6_npc.c @@ -10,15 +10,12 @@ #include "world/common/enemy/ShyGuy.h" -MAP_STATIC_PAD(1,key_choice); #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" +#include "world/common/complete/LetterDelivery.inc.c" #include "npc/tayce_t.inc.c" -#include "world/common/complete/LetterDelivery.inc.c" - #include "npc/fice_t.inc.c" #include "npc/bootler.inc.c" #include "npc/shyguy_thief.inc.c" diff --git a/src/world/area_mac/mac_02/npc/bubulb.inc.c b/src/world/area_mac/mac_02/npc/bubulb.inc.c index f47f7899523..9ef66472a0a 100644 --- a/src/world/area_mac/mac_02/npc/bubulb.inc.c +++ b/src/world/area_mac/mac_02/npc/bubulb.inc.c @@ -8,7 +8,7 @@ EvtScript N(EVS_NpcInteract_Bubulb) = { Call(SetNpcAnimation, NPC_SELF, ANIM_Bubulb_Pink_Idle) Call(SetNpcCollisionSize, NPC_SELF, 45, 26) Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_Talk, ANIM_Bubulb_Pink_Idle, 0, MSG_MAC_Bridge_0086) - EVT_GIVE_KEY_REWARD(ITEM_MAGICAL_SEED1) + EVT_GIVE_REWARD(ITEM_MAGICAL_SEED1) Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_Talk, ANIM_Bubulb_Pink_Idle, 0, MSG_MAC_Bridge_0087) Set(GF_MAC02_Gift_MagicalSeed1, TRUE) Call(SetTattleMessage, NPC_Bubulb, MSG_NpcTattle_MAC_Bubulb_Revealed) diff --git a/src/world/area_mac/mac_02/npc/tayce_t.inc.c b/src/world/area_mac/mac_02/npc/tayce_t.inc.c index 1e6af058903..b1254a233a1 100644 --- a/src/world/area_mac/mac_02/npc/tayce_t.inc.c +++ b/src/world/area_mac/mac_02/npc/tayce_t.inc.c @@ -4,6 +4,8 @@ #include "common.h" #include "gcc/string.h" +#include "world/common/todo/GetItemName.inc.c" + typedef struct CookingResult { /* 00 */ s32 quality; /* 04 */ s32 itemID; @@ -147,26 +149,29 @@ API_CALLABLE(N(SetRecipeDiscovered)) { API_CALLABLE(N(GetItemCount)) { Bytecode args = *script->ptrReadPos; - evt_set_variable(script, args++, get_item_count()); + evt_set_variable(script, args++, get_consumables_count()); return ApiStatus_DONE2; } API_CALLABLE(N(CheckItemsHasRoom)) { Bytecode args = *script->ptrReadPos; - evt_set_variable(script, args++, get_item_empty_count()); + evt_set_variable(script, args++, get_consumables_empty()); return ApiStatus_DONE2; } static s32 N(TayceT_ItemChoiceList)[ITEM_NUM_CONSUMABLES + 1]; API_CALLABLE(N(TayceT_MakeItemList)) { - s32 i; + s32 pos = 0; + s32 itemID; - for (i = 0; i < ITEM_NUM_CONSUMABLES; i++) { - N(TayceT_ItemChoiceList)[i] = i + ITEM_FIRST_CONSUMABLE; + for (itemID = 0; itemID < NUM_ITEMS; itemID++) { + if (item_is_consumable(itemID)) { + N(TayceT_ItemChoiceList)[pos++] = itemID; + } } - N(TayceT_ItemChoiceList)[i] = ITEM_NONE; + N(TayceT_ItemChoiceList)[pos] = ITEM_NONE; return ApiStatus_DONE2; } @@ -202,7 +207,7 @@ EvtScript N(EVS_TayceT_FryingPanAndCake) = { Call(N(CheckItemsHasRoom), LVar0) IfNe(LVar0, 0) Call(SpeakToPlayer, NPC_TayceT, ANIM_TayceT_Talk, ANIM_TayceT_Idle, 0, MSG_MAC_Bridge_001A) - EVT_GIVE_CONSUMABLE_REWARD_ALT(ITEM_CAKE) + EVT_GIVE_REWARD(ITEM_CAKE) Call(SpeakToPlayer, NPC_TayceT, ANIM_TayceT_Talk, ANIM_TayceT_Idle, 0, MSG_MAC_Bridge_001B) Set(GB_StoryProgress, STORY_CH4_GOT_TAYCE_TS_CAKE) Else @@ -223,7 +228,7 @@ EvtScript N(EVS_TayceT_FryingPanAndCake) = { Call(N(CheckItemsHasRoom), LVar0) IfNe(LVar0, 0) Call(SpeakToPlayer, NPC_TayceT, ANIM_TayceT_Talk, ANIM_TayceT_Idle, 0, MSG_MAC_Bridge_001A) - EVT_GIVE_CONSUMABLE_REWARD_ALT(ITEM_CAKE) + EVT_GIVE_REWARD(ITEM_CAKE) Call(SpeakToPlayer, NPC_TayceT, ANIM_TayceT_Talk, ANIM_TayceT_Idle, 0, MSG_MAC_Bridge_001B) Set(GB_StoryProgress, STORY_CH4_GOT_TAYCE_TS_CAKE) Else @@ -417,7 +422,7 @@ EvtScript N(EVS_TayceT_Cook) = { EndSwitch Call(ContinueSpeech, NPC_TayceT, ANIM_TayceT_Talk, ANIM_TayceT_Idle, 0, MSG_MAC_Bridge_0014) Call(N(SetRecipeDiscovered), LVar6) - EVT_GIVE_CONSUMABLE_REWARD_ALT(LVar6) + EVT_GIVE_REWARD(LVar6) Call(SpeakToPlayer, NPC_TayceT, ANIM_TayceT_Talk, ANIM_TayceT_Idle, 0, MSG_MAC_Bridge_0015) // end the script @@ -434,7 +439,7 @@ EvtScript N(EVS_NpcInteract_TayceT) = { Return EndIf EndIf - Call(FindKeyItem, ITEM_COOKBOOK, LVar0) + Call(FindItem, ITEM_COOKBOOK, LVar0) IfEq(LVar0, -1) ExecWait(N(EVS_TayceT_Cook)) Else diff --git a/src/world/area_mac/mac_03/mac_03_4_npc.c b/src/world/area_mac/mac_03/mac_03_4_npc.c index 2f6ef21f452..238bdbaf666 100644 --- a/src/world/area_mac/mac_03/mac_03_4_npc.c +++ b/src/world/area_mac/mac_03/mac_03_4_npc.c @@ -18,7 +18,6 @@ NpcSettings N(NpcSettings_ShyGuy) = { #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" -MAP_STATIC_PAD(1,post_quizmo); #include "world/common/complete/LetterDelivery.inc.c" @@ -69,7 +68,7 @@ EvtScript N(EVS_LetterPrompt_ToadKid1A) = { EvtScript N(EVS_LetterReward_ToadKid1A) = { IfEq(LVarC, DELIVERY_ACCEPTED) Call(SpeakToPlayer, NPC_ToadKid_02, ANIM_ToadKid_Yellow_Talk, ANIM_ToadKid_Yellow_Idle, 0, MSG_MAC_Station_004D) - EVT_GIVE_KEY_REWARD(ITEM_LETTER_CHAIN_YOSHI_KID) + EVT_GIVE_REWARD(ITEM_LETTER_CHAIN_YOSHI_KID) EndIf Return End @@ -95,11 +94,7 @@ EvtScript N(EVS_LetterPrompt_ToadKid1B) = { EvtScript N(EVS_LetterReward_ToadKid1B) = { IfEq(LVarC, DELIVERY_ACCEPTED) Call(SpeakToPlayer, NPC_ToadKid_02, ANIM_ToadKid_Yellow_Talk, ANIM_ToadKid_Yellow_Idle, 0, MSG_MAC_Station_0052) - // EVT_GIVE_KEY_REWARD(ITEM_LETTER_CHAIN_FROST_T), but LVar1/LVar0 are set in wrong order - Set(LVar1, 1) - Set(LVar0, ITEM_LETTER_CHAIN_FROST_T) - ExecWait(N(GiveItemReward)) - Call(AddKeyItem, ITEM_LETTER_CHAIN_FROST_T) + EVT_GIVE_REWARD(ITEM_LETTER_CHAIN_FROST_T) EndIf Return End diff --git a/src/world/area_mac/mac_03/mac_03_6_foliage.c b/src/world/area_mac/mac_03/mac_03_6_foliage.c index ef940a2f8ff..79a1f1cd1d1 100644 --- a/src/world/area_mac/mac_03/mac_03_6_foliage.c +++ b/src/world/area_mac/mac_03/mac_03_6_foliage.c @@ -103,9 +103,8 @@ ShakeTreeConfig N(ShakeTree_Tree3) = { .callback = &N(EVS_OnShakeTree3), }; -//@bug x-position should be -265 BombTrigger N(BombPos_Tree3) = { - .pos = { 265.0f, 20.0f, -535.0f }, + .pos = { -265.0f, 20.0f, -535.0f }, .radius = 0.0f }; diff --git a/src/world/area_mac/mac_04/mac_04_5_shop.c b/src/world/area_mac/mac_04/mac_04_5_shop.c index 219d8175323..d14e006cf9c 100644 --- a/src/world/area_mac/mac_04/mac_04_5_shop.c +++ b/src/world/area_mac/mac_04/mac_04_5_shop.c @@ -51,7 +51,6 @@ EvtScript N(EVS_OnBuy) = { CaseEq(SHOP_BUY_RESULT_CANCEL) CaseEq(SHOP_BUY_RESULT_4) CaseEq(SHOP_BUY_RESULT_OK) - CaseEq(SHOP_BUY_RESULT_OK) //@bug duplicate case EndSwitch Return End diff --git a/src/world/area_mac/mac_04/mac_04_6_npc.c b/src/world/area_mac/mac_04/mac_04_6_npc.c index ee8536c2708..f91ba2dff88 100644 --- a/src/world/area_mac/mac_04/mac_04_6_npc.c +++ b/src/world/area_mac/mac_04/mac_04_6_npc.c @@ -16,7 +16,6 @@ NpcSettings N(NpcSettings_ChetRippo) = { #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" -MAP_STATIC_PAD(1,key_choice); #include "world/common/complete/KeyItemChoice.inc.c" EvtScript N(EVS_TossTrainInToybox) = { diff --git a/src/world/area_mac/mac_04/npc_toadette_03.inc.c b/src/world/area_mac/mac_04/npc_toadette_03.inc.c index be9e6949eae..ed9bc589965 100644 --- a/src/world/area_mac/mac_04/npc_toadette_03.inc.c +++ b/src/world/area_mac/mac_04/npc_toadette_03.inc.c @@ -19,7 +19,7 @@ EvtScript N(EVS_NpcInteract_Toadette_03) = { CaseLt(STORY_CH4_GOT_TAYCE_TS_CAKE) Set(LVar0, MSG_MAC_Housing_0068) CaseLt(STORY_CH4_SOLVED_COLOR_PUZZLE) - Call(FindKeyItem, ITEM_MYSTERY_NOTE, LVar0) + Call(FindItem, ITEM_MYSTERY_NOTE, LVar0) IfEq(LVar0, -1) IfEq(GF_MAC00_DictionaryReturned, FALSE) Set(LVar0, MSG_MAC_Housing_0069) diff --git a/src/world/area_mac/mac_05/mac_05_4_npc.c b/src/world/area_mac/mac_05/mac_05_4_npc.c index 1193853b9de..60c3bc1d9a0 100644 --- a/src/world/area_mac/mac_05/mac_05_4_npc.c +++ b/src/world/area_mac/mac_05/mac_05_4_npc.c @@ -27,11 +27,8 @@ NpcSettings N(NpcSettings_Unused1) = { #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" -MAP_STATIC_PAD(1,key_choice); #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" - +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/complete/LetterDelivery.inc.c" s32 N(Fishmael_LetterList)[] = { @@ -92,7 +89,7 @@ EvtScript N(EVS_ArtifactPrompt_Kolorado) = { IfEq(GF_SBK_GaveArtifactToKolorado, TRUE) Return EndIf - Call(FindKeyItem, ITEM_ARTIFACT, LVar0) + Call(FindItem, ITEM_ARTIFACT, LVar0) IfEq(LVar0, -1) Return EndIf @@ -1770,7 +1767,7 @@ EvtScript N(EVS_NpcInteract_ArtistToad) = { Call(SpeakToPlayer, NPC_SELF, ANIM_Musician_Poet_Talk, ANIM_Musician_Poet_Idle, 0, MSG_MAC_Port_0073) Call(SpeakToPlayer, NPC_Chanterelle, ANIM_Chanterelle_Talk, ANIM_Chanterelle_Idle, 0, MSG_MAC_Port_0074) Call(SpeakToPlayer, NPC_SELF, ANIM_Musician_Poet_Talk, ANIM_Musician_Poet_Idle, 0, MSG_MAC_Port_0075) - EVT_GIVE_KEY_REWARD(ITEM_LYRICS) + EVT_GIVE_REWARD(ITEM_LYRICS) Set(GF_MAC05_SimonGaveLyrics, TRUE) Call(EnablePartnerAI) Return @@ -1785,7 +1782,7 @@ EvtScript N(EVS_NpcInteract_ArtistToad) = { EndIf Return EndIf - Call(FindKeyItem, ITEM_MELODY, LVar0) + Call(FindItem, ITEM_MELODY, LVar0) IfEq(LVar0, -1) IfEq(AF_MAC_3D, FALSE) Call(SpeakToPlayer, NPC_SELF, ANIM_Musician_Poet_Talk, ANIM_Musician_Poet_Idle, 0, MSG_MAC_Port_0076) @@ -1889,10 +1886,7 @@ EvtScript N(EVS_NpcInteract_ArtistToad) = { Call(SpeakToPlayer, NPC_SELF, ANIM_Musician_Poet_Talk, ANIM_Musician_Poet_Idle, 0, MSG_MAC_Port_007F) Call(SpeakToPlayer, NPC_Chanterelle, ANIM_Chanterelle_Talk, ANIM_Chanterelle_Idle, 0, MSG_MAC_Port_0080) Wait(10) - Set(LVar0, ITEM_ATTACK_FX_D) - Set(LVar3, ITEM_TYPE_BADGE) - ExecWait(N(GiveItemReward)) - Call(AddBadge, LVar0, LVar1) + EVT_GIVE_REWARD(ITEM_ATTACK_FX_D) Call(SetTattleMessage, NPC_Chanterelle, MSG_NpcTattle_PopDiva_CanSing) EndSwitch EndIf @@ -2001,7 +1995,7 @@ API_CALLABLE(N(CheckTradeEventTime)) { } API_CALLABLE(N(GetTradeEventItemCount)) { - script->varTable[0] = get_item_count(); + script->varTable[0] = get_consumables_count(); return ApiStatus_DONE2; } @@ -2033,7 +2027,7 @@ EvtScript N(EVS_NpcInteract_Toad_03) = { Return CaseEq(ITEM_COCONUT) Call(SpeakToPlayer, NPC_SELF, ANIM_Toad_Pink_Talk, ANIM_Toad_Pink_Idle, 0, MSG_MAC_Port_00C2) - EVT_GIVE_CONSUMABLE_REWARD(ITEM_YUMMY_MEAL) + EVT_GIVE_REWARD(ITEM_YUMMY_MEAL) Wait(10) Call(SpeakToPlayer, NPC_SELF, ANIM_Toad_Pink_Talk, ANIM_Toad_Pink_Idle, 0, MSG_MAC_Port_00C3) Wait(10) diff --git a/src/world/area_mac/machi/machi_5_npc.c b/src/world/area_mac/machi/machi_5_npc.c index 0afd692f79d..aad1580fc5a 100644 --- a/src/world/area_mac/machi/machi_5_npc.c +++ b/src/world/area_mac/machi/machi_5_npc.c @@ -54,7 +54,6 @@ API_CALLABLE(N(SetupChapter0)) { playerData->curMaxHP = 5; playerData->bootsLevel = 0; playerData->hammerLevel = -1; - playerData->fortressKeyCount = 0; for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) { playerData->partners[i].enabled = FALSE; @@ -80,7 +79,6 @@ API_CALLABLE(N(SetupChapter1)) { playerData->curMaxHP = 8; playerData->bootsLevel = 0; playerData->hammerLevel = 0; - playerData->fortressKeyCount = 0; playerData->partners[PARTNER_NONE].enabled = TRUE; for (i = 1; i < ARRAY_COUNT(playerData->partners); i++) { @@ -97,7 +95,6 @@ API_CALLABLE(N(SetupChapter2)) { playerData->curMaxHP = 11; playerData->bootsLevel = 0; playerData->hammerLevel = 0; - playerData->fortressKeyCount = 0; for (i = 0; i < ARRAY_COUNT(playerData->partners); i++) { playerData->partners[i].enabled = FALSE; diff --git a/src/world/area_mgm/mgm_02/mgm_02_2_npc.c b/src/world/area_mgm/mgm_02/mgm_02_2_npc.c index 121e38d647f..f77a817a8a3 100644 --- a/src/world/area_mgm/mgm_02/mgm_02_2_npc.c +++ b/src/world/area_mgm/mgm_02/mgm_02_2_npc.c @@ -1492,7 +1492,7 @@ EvtScript N(EVS_OnHitBox) = { End }; -EvtScript N(D_802441E4_E19F64) = { +EvtScript N(EVS_BindHammerTriggers) = { Set(LVar0, MODEL_a1) Set(LVar1, MODEL_a1) BindTrigger(Ref(N(EVS_OnHitBox)), TRIGGER_WALL_HAMMER, LVar1, 1, 0) @@ -1707,7 +1707,7 @@ EvtScript N(EVS_InitializeMinigame) = { Exec(N(EVS_HideAllBoxes)) Call(N(CreateSignpost)) Exec(N(EVS_CreateScoreDisplay)) - Exec(N(D_802441E4_E19F64)) + Exec(N(EVS_BindHammerTriggers)) Exec(N(EVS_HidePeachPanels)) Return End diff --git a/src/world/area_mim/mim_04/mim_04_6_npc.c b/src/world/area_mim/mim_04/mim_04_6_npc.c index e2667e57ff2..dfe31246c84 100644 --- a/src/world/area_mim/mim_04/mim_04_6_npc.c +++ b/src/world/area_mim/mim_04/mim_04_6_npc.c @@ -15,7 +15,7 @@ EvtScript N(EVS_NpcInteract_Bubulb) = { Call(SetNpcAnimation, NPC_SELF, ANIM_Bubulb_Green_Idle) Call(SetNpcCollisionSize, NPC_SELF, 45, 26) Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_Talk, ANIM_Bubulb_Green_Idle, 0, MSG_CH3_000F) - EVT_GIVE_KEY_REWARD(ITEM_MAGICAL_SEED3) + EVT_GIVE_REWARD(ITEM_MAGICAL_SEED3) Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_Talk, ANIM_Bubulb_Green_Idle, 0, MSG_CH3_0010) Set(GF_MIM04_Gift_MagicalSeed3, TRUE) Call(SetTattleMessage, NPC_Bubulb, MSG_NpcTattle_MIM_Bubulb_Revealed) diff --git a/src/world/area_mim/mim_11/mim_11_5_npc.c b/src/world/area_mim/mim_11/mim_11_5_npc.c index 3b2414542b7..a68c514b522 100644 --- a/src/world/area_mim/mim_11/mim_11_5_npc.c +++ b/src/world/area_mim/mim_11/mim_11_5_npc.c @@ -2,29 +2,8 @@ void increment_max_star_power(void); -NpcSettings N(NpcSettings_Bootler) = { - .height = 24, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - -NpcSettings N(NpcSettings_Skolar) = { - .height = 26, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - -NpcSettings N(NpcSettings_Unused1) = { - .height = 20, - .radius = 20, - .level = ACTOR_LEVEL_NONE, -}; - -NpcSettings N(NpcSettings_Unused2) = { - .height = 22, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; +#include "world/common/npc/Boo.inc.c" +#include "world/common/npc/StarSpirit.inc.c" API_CALLABLE(N(IncreaseMaxSP)) { increment_max_star_power(); @@ -80,7 +59,7 @@ NpcData N(NpcData_Bootler)[] = { .pos = { 68.0f, 60.0f, -145.0f }, .yaw = 0, .init = &N(EVS_NpcInit_Bootler), - .settings = &N(NpcSettings_Bootler), + .settings = &N(NpcSettings_Boo), .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, .drops = NO_DROPS, .animations = { @@ -107,7 +86,7 @@ NpcData N(NpcData_Bootler)[] = { .pos = { 68.0f, 60.0f, -145.0f }, .yaw = 135, .init = &N(EVS_NpcInit_Skolar), - .settings = &N(NpcSettings_Skolar), + .settings = &N(NpcSettings_StarSpirit), .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_FLYING, .drops = NO_DROPS, .animations = { diff --git a/src/world/area_nok/nok_01/nok_01_4_npc.c b/src/world/area_nok/nok_01/nok_01_4_npc.c index 8aa875957af..add8e0025b6 100644 --- a/src/world/area_nok/nok_01/nok_01_4_npc.c +++ b/src/world/area_nok/nok_01/nok_01_4_npc.c @@ -6,18 +6,6 @@ #include "world/common/npc/KoopaWithoutShell_Wander.inc.c" #include "world/common/npc/Koopa_Wander.inc.c" -NpcSettings N(NpcSettings_Unused2) = { - .height = 35, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - -NpcSettings N(NpcSettings_Unused3) = { - .height = 42, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - #include "world/common/npc/Koopa.inc.c" #include "world/common/enemy/Fuzzy.inc.c" #include "world/common/npc/Toad_Stationary.inc.c" @@ -30,9 +18,7 @@ NpcSettings N(NpcSettings_Unused3) = { #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" -MAP_STATIC_PAD(1,key_item); #include "world/common/complete/KeyItemChoice.inc.c" - #include "world/common/complete/LetterDelivery.inc.c" s32 N(LettersKoover1)[] = { diff --git a/src/world/area_nok/nok_02/nok_02_2_main.c b/src/world/area_nok/nok_02/nok_02_2_main.c index 166ac1bc1dd..0aa8d3c069b 100644 --- a/src/world/area_nok/nok_02/nok_02_2_main.c +++ b/src/world/area_nok/nok_02/nok_02_2_main.c @@ -2,12 +2,6 @@ #include "world/common/entity/Pipe.inc.c" -#define NAME_SUFFIX _Unused -#include "world/common/complete/GiveReward.inc.c" - -#include "world/common/complete/KeyItemChoice.inc.c" -#define NAME_SUFFIX - EvtScript N(EVS_ExitWalk_nok_01_1) = { Call(UseExitHeading, 60, nok_02_ENTRY_0) Exec(ExitWalk) diff --git a/src/world/area_nok/nok_02/nok_02_6_npc.c b/src/world/area_nok/nok_02/nok_02_6_npc.c index 95c69401d13..5cfb3d2a0d5 100644 --- a/src/world/area_nok/nok_02/nok_02_6_npc.c +++ b/src/world/area_nok/nok_02/nok_02_6_npc.c @@ -13,11 +13,9 @@ #define CHUCK_QUIZMO_NPC_ID NPC_ChuckQuizmo #include "world/common/complete/Quizmo.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/KeyItemChoice.inc.c" - #include "world/common/atomic/MarioSalute.inc.c" +#include "world/common/complete/KeyItemChoice.inc.c" #include "world/common/complete/LetterDelivery.inc.c" s32 N(LetterList_Kolorado)[] = { @@ -551,7 +549,7 @@ EvtScript N(EVS_KoloradoWife_FetchKoopaLegends) = { EndIf EndIf Call(SpeakToPlayer, NPC_KoloradoWife, ANIM_KoloradoWife_Talk, ANIM_KoloradoWife_Idle, 0, MSG_CH1_0091) - EVT_GIVE_KEY_REWARD(ITEM_KOOT_KOOPA_LEGENDS) + EVT_GIVE_REWARD(ITEM_KOOT_KOOPA_LEGENDS) Call(SpeakToPlayer, NPC_KoloradoWife, ANIM_KoloradoWife_Talk, ANIM_KoloradoWife_Idle, 0, MSG_CH1_0092) Call(SetNpcFlagBits, NPC_KoloradoWife, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) Return diff --git a/src/world/area_nok/nok_02/nok_02_8_koot_favors.c b/src/world/area_nok/nok_02/nok_02_8_koot_favors.c index dbfa5a96bc8..d7a1ef6d3d9 100644 --- a/src/world/area_nok/nok_02/nok_02_8_koot_favors.c +++ b/src/world/area_nok/nok_02/nok_02_8_koot_favors.c @@ -2,8 +2,7 @@ #define NAME_SUFFIX _Koot #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/complete/GiveReward.inc.c" #define NAME_SUFFIX @@ -390,7 +389,9 @@ EvtScript N(EVS_NpcInteract_KoopaKoot) = { Call(SpeakToPlayer, NPC_SELF, ANIM_KoopaKoot_Talk, ANIM_KoopaKoot_Idle, 0, LVar1) Call(ContinueSpeech, NPC_SELF, ANIM_KoopaKoot_Talk, ANIM_KoopaKoot_Idle, 0, MSG_CH1_00B1) #define NAME_SUFFIX _Koot - EVT_GIVE_COIN() + Set(LVar0, ITEM_COIN) + ExecWait(N(GiveCoinReward)) + Call(AddCoin, 1) #define NAME_SUFFIX Else Call(N(GetFavorMessages), GB_KootFavor_Current) @@ -403,12 +404,11 @@ EvtScript N(EVS_NpcInteract_KoopaKoot) = { #define NAME_SUFFIX _Koot CaseEq(1 + KOOT_FAVOR_CH1_2) Call(SpeakToPlayer, NPC_SELF, ANIM_KoopaKoot_Talk, ANIM_KoopaKoot_Idle, 0, MSG_CH1_00B2) - EVT_GIVE_KEY_REWARD(ITEM_SILVER_CREDIT) + EVT_GIVE_REWARD(ITEM_SILVER_CREDIT) CaseEq(1 + KOOT_FAVOR_CH4_2) Call(SpeakToPlayer, NPC_SELF, ANIM_KoopaKoot_Talk, ANIM_KoopaKoot_Idle, 0, MSG_CH1_00B3) - EVT_GIVE_KEY_REWARD(ITEM_GOLD_CREDIT) - Call(FindKeyItem, ITEM_SILVER_CREDIT, LVar1) - Call(RemoveKeyItemAt, LVar1) + EVT_GIVE_REWARD(ITEM_GOLD_CREDIT) + Call(RemoveItem, ITEM_SILVER_CREDIT) #define NAME_SUFFIX EndSwitch Set(GB_KootFavor_State, KOOT_FAVOR_STATE_0) diff --git a/src/world/area_nok/nok_02/npcs_normal.inc.c b/src/world/area_nok/nok_02/npcs_normal.inc.c index a095da42a97..e39d41e4714 100644 --- a/src/world/area_nok/nok_02/npcs_normal.inc.c +++ b/src/world/area_nok/nok_02/npcs_normal.inc.c @@ -347,7 +347,7 @@ EvtScript N(EVS_ArtifactPrompt_Kolorado) = { IfEq(GF_SBK_GaveArtifactToKolorado, TRUE) Return EndIf - Call(FindKeyItem, ITEM_ARTIFACT, LVar0) + Call(FindItem, ITEM_ARTIFACT, LVar0) IfEq(LVar0, -1) Return EndIf diff --git a/src/world/area_nok/nok_04/nok_04_4_npc.c b/src/world/area_nok/nok_04/nok_04_4_npc.c index c2560b2c8fd..cce725430fd 100644 --- a/src/world/area_nok/nok_04/nok_04_4_npc.c +++ b/src/world/area_nok/nok_04/nok_04_4_npc.c @@ -1348,7 +1348,7 @@ EvtScript N(EVS_HitTree_Correct) = { Call(ShowMessageAtScreenPos, MSG_Menus_GotKooperShell, 160, 40) Call(SetNpcPos, NPC_KoopersShell, NPC_DISPOSE_LOCATION) Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(AddKeyItem, ITEM_KOOPER_SHELL) + Call(AddItem, ITEM_KOOPER_SHELL, EVT_IGNORE_ARG) Wait(10 * DT) Call(SpeakToPlayer, NPC_BossFuzzy, ANIM_Fuzzy_Anim0C, ANIM_Fuzzy_Idle, 5, MSG_CH1_00C2) Call(SetNpcAnimation, NPC_BossFuzzy, ANIM_Fuzzy_Anim0B) diff --git a/src/world/area_nok/nok_11/nok_11.h b/src/world/area_nok/nok_11/nok_11.h index 89a73728c96..d8a10a26303 100644 --- a/src/world/area_nok/nok_11/nok_11.h +++ b/src/world/area_nok/nok_11/nok_11.h @@ -32,3 +32,4 @@ extern EvtScript N(EVS_MakeEntities); extern NpcGroupList N(DefaultNPCs); extern NpcGroupList N(JrTroopaNPCs); extern NpcGroupList N(KentCKoopaNPCs); +extern EvtScript N(EVS_AddBadges); diff --git a/src/world/area_nok/nok_11/nok_11_2_main.c b/src/world/area_nok/nok_11/nok_11_2_main.c index 3b2017a6bef..cbf50e69f10 100644 --- a/src/world/area_nok/nok_11/nok_11_2_main.c +++ b/src/world/area_nok/nok_11/nok_11_2_main.c @@ -77,6 +77,18 @@ EvtScript N(EVS_BindExitTriggers) = { End }; +EvtScript N(EVS_AddBadges) = { + Call(AddBadge, ITEM_POWER_RUSH, LVar0) + Call(AddBadge, ITEM_MEGA_RUSH, LVar1) + Call(AddBadge, ITEM_CLOSE_CALL, LVar2) + Call(AddBadge, ITEM_PRETTY_LUCKY, LVar3) + Call(AddBadge, ITEM_LUCKY_DAY, LVar4) + Call(AddBadge, ITEM_PEEKABOO, LVar5) + Wait(5) + Return + End +}; + EvtScript N(EVS_Main) = { Set(GB_WorldLocation, LOCATION_PLEASANT_PATH) Call(SetSpriteShading, SHADING_NONE) @@ -95,6 +107,8 @@ EvtScript N(EVS_Main) = { Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) EndIf EndIf + Set(GB_StoryProgress, STORY_CH1_MADE_FIRST_BRIDGE) + ExecWait(N(EVS_AddBadges)) ExecWait(N(EVS_MakeEntities)) Exec(N(EVS_TexPan_Flowers)) Exec(N(EVS_TexPan_Water)) diff --git a/src/world/area_nok/nok_11/nok_11_4_npc.c b/src/world/area_nok/nok_11/nok_11_4_npc.c index 5a52846b4e3..abb82956bfe 100644 --- a/src/world/area_nok/nok_11/nok_11_4_npc.c +++ b/src/world/area_nok/nok_11/nok_11_4_npc.c @@ -605,7 +605,7 @@ NpcData N(NpcData_KentCKoopa)[] = { }; NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_KoopaTroopa), BTL_NOK_FORMATION_08, BTL_NOK_STAGE_00), + NPC_GROUP(N(NpcData_KoopaTroopa), BTL_MOD_FORMATION_00, BTL_MOD_STAGE_00), // Was BTL_NOK_FORMATION_08, BTL_NOK_STAGE_00 NPC_GROUP(N(NpcData_Paragoomba), BTL_NOK_FORMATION_02, BTL_NOK_STAGE_00), NPC_GROUP(N(NpcData_SpikedGoomba), BTL_NOK_FORMATION_03, BTL_NOK_STAGE_01), {} diff --git a/src/world/area_obk/obk_01/obk_01_3_chandelier.c b/src/world/area_obk/obk_01/obk_01_3_chandelier.c index 5cdd6a42f10..286eea18b38 100644 --- a/src/world/area_obk/obk_01/obk_01_3_chandelier.c +++ b/src/world/area_obk/obk_01/obk_01_3_chandelier.c @@ -510,8 +510,7 @@ EvtScript N(EVS_LaunchFromCouch_GrabChandelier) = { EndThread Return Label(40) - Call(FindKeyItem, ITEM_BOO_WEIGHT, LVar1) - Call(RemoveKeyItemAt, LVar1) + Call(RemoveItem, ITEM_BOO_WEIGHT) Call(MakeItemEntity, LVar0, 447, -350, 278, ITEM_SPAWN_MODE_DECORATION, 0) Set(GB_StoryProgress, STORY_CH3_WEIGHED_DOWN_CHANDELIER) Call(CloseChoicePopup) diff --git a/src/world/area_obk/obk_01/obk_01_4_portrait.c b/src/world/area_obk/obk_01/obk_01_4_portrait.c index 7191a770604..ccc0e75ad63 100644 --- a/src/world/area_obk/obk_01/obk_01_4_portrait.c +++ b/src/world/area_obk/obk_01/obk_01_4_portrait.c @@ -243,14 +243,3 @@ EvtScript N(EVS_SetupPortrait) = { Return End }; - -s32 N(Unused_80243C7C_3C7C)[] = { - 0, 1, 0, 5, 1, 0, 5, 1, - 0, 5, 1, 1, 5, 1, 1, 5, - 2, 2, 5, 2, 2, 5, 2, 2, - 5, 2, 3, 5, 2, 3, 5, 3, - 4, 5, 3, 4, 5, 3, 4, 5, - 3, 5, 5, 3, 5, 5, 4, 6, - 5, 4, 6, 5, 4, 6, 5, 4, - 7, 5, 4, 7, 5, -}; diff --git a/src/world/area_obk/obk_01/obk_01_6_npc.c b/src/world/area_obk/obk_01/obk_01_6_npc.c index 23deb74cd1e..baa226d4466 100644 --- a/src/world/area_obk/obk_01/obk_01_6_npc.c +++ b/src/world/area_obk/obk_01/obk_01_6_npc.c @@ -163,7 +163,7 @@ EvtScript N(EVS_NpcInteract_Franky) = { Set(GF_OBK01_Gift_OldPhoto, TRUE) ExecWait(N(EVS_MarioSalute)) Call(SpeakToPlayer, NPC_SELF, ANIM_Boo_Talk, ANIM_Boo_Idle, 0, MSG_CH3_006B) - EVT_GIVE_KEY_REWARD(ITEM_KOOT_OLD_PHOTO) + EVT_GIVE_REWARD(ITEM_KOOT_OLD_PHOTO) EndIf EndIf Return diff --git a/src/world/area_obk/obk_07/obk_07_3_entity.c b/src/world/area_obk/obk_07/obk_07_3_entity.c index 871f63e9cdd..a9c8c5825f9 100644 --- a/src/world/area_obk/obk_07/obk_07_3_entity.c +++ b/src/world/area_obk/obk_07/obk_07_3_entity.c @@ -5,7 +5,6 @@ EvtScript N(EVS_OpenChest_BooWeight) = { Set(LVarA, ITEM_BOO_WEIGHT) - Set(LVarB, ITEM_TYPE_KEY) Set(GB_StoryProgress, STORY_CH3_GOT_WEIGHT) Set(GF_OBK07_Chest_Weight, TRUE) ExecWait(N(EVS_Chest_GetItem)) diff --git a/src/world/area_omo/omo_02/omo_02_4_gizmos.c b/src/world/area_omo/omo_02/omo_02_4_gizmos.c index 084c603a0e4..e3543fd150d 100644 --- a/src/world/area_omo/omo_02/omo_02_4_gizmos.c +++ b/src/world/area_omo/omo_02/omo_02_4_gizmos.c @@ -65,11 +65,6 @@ EvtScript N(EVS_Gizmos_Empty2) = { End }; -EvtScript N(EVS_Gizmos_Unused) = { - Return - End -}; - s32 N(RockingHorseModels)[] = { MODEL_o568, MODEL_o569, diff --git a/src/world/area_omo/omo_02/omo_02_6_npc.c b/src/world/area_omo/omo_02/omo_02_6_npc.c index 7f3f3f1f9cf..247b6ed3dba 100644 --- a/src/world/area_omo/omo_02/omo_02_6_npc.c +++ b/src/world/area_omo/omo_02/omo_02_6_npc.c @@ -424,11 +424,6 @@ NpcData N(NpcData_SpyGuy)[] = { SPY_GUY_ROCK_HITBOX(NPC_SpyGuy_Rock2), }; -// separated into its own NPC to make the group count match in DefaultNPCs -NpcData N(NpcData_SpyGuy_UnusedRock)[] = { - SPY_GUY_ROCK_HITBOX(NPC_SpyGuy_Rock3), -}; - NpcGroupList N(DefaultNPCs) = { NPC_GROUP(N(NpcData_ShyGuy_Loner)), NPC_GROUP(N(NpcData_ShyGuy_Crowd)), diff --git a/src/world/area_omo/omo_03/omo_03_5_npc.c b/src/world/area_omo/omo_03/omo_03_5_npc.c index 08983d68cfb..a39bee83f47 100644 --- a/src/world/area_omo/omo_03/omo_03_5_npc.c +++ b/src/world/area_omo/omo_03/omo_03_5_npc.c @@ -98,7 +98,7 @@ EvtScript N(EVS_NpcInteract_TrainToad) = { CaseLt(STORY_CH4_PULLED_SWITCH_SWITCH) Call(SpeakToPlayer, NPC_SELF, ANIM_TrainToad_Blue_Talk, ANIM_TrainToad_Blue_Idle, 0, MSG_CH4_001D) CaseLt(STORY_CH4_SOLVED_COLOR_PUZZLE) - Call(FindKeyItem, ITEM_MYSTERY_NOTE, LVar0) + Call(FindItem, ITEM_MYSTERY_NOTE, LVar0) IfEq(LVar0, -1) Call(SpeakToPlayer, NPC_SELF, ANIM_TrainToad_Blue_Talk, ANIM_TrainToad_Blue_Idle, 0, MSG_CH4_001E) Else diff --git a/src/world/area_omo/omo_04/omo_04_4_entity.c b/src/world/area_omo/omo_04/omo_04_4_entity.c index 7ae0b39d527..1b25ee5a30f 100644 --- a/src/world/area_omo/omo_04/omo_04_4_entity.c +++ b/src/world/area_omo/omo_04/omo_04_4_entity.c @@ -5,7 +5,6 @@ EvtScript N(EVS_OpenChest_StoreroomKey) = { Set(LVarA, ITEM_STOREROOM_KEY) - Set(LVarB, ITEM_TYPE_KEY) Set(GF_OMO04_Chest_StoreroomKey, TRUE) ExecWait(N(EVS_Chest_GetItem)) Set(GF_MAC04_StoreroomKeyStolen, TRUE) diff --git a/src/world/area_omo/omo_05/omo_05_4_npc.c b/src/world/area_omo/omo_05/omo_05_4_npc.c index a3bed591752..85542189fc8 100644 --- a/src/world/area_omo/omo_05/omo_05_4_npc.c +++ b/src/world/area_omo/omo_05/omo_05_4_npc.c @@ -7,7 +7,7 @@ #include "world/common/npc/GourmetGuy.inc.c" -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" API_CALLABLE(N(JudgeFoodQuality)) { Bytecode* args = script->ptrReadPos; @@ -44,16 +44,20 @@ API_CALLABLE(N(SpinCameraAround)) { BSS s32 N(AllConsumables)[ITEM_NUM_CONSUMABLES + 1]; API_CALLABLE(N(MakeAllConsumablesItemList)) { - s32 i; + s32 pos = 0; + s32 itemID; - for (i = 0; i < ITEM_NUM_CONSUMABLES; i++) { - N(AllConsumables)[i] = ITEM_FIRST_CONSUMABLE + i; + for (itemID = 0; itemID < NUM_ITEMS; itemID++) { + if (item_is_consumable(itemID)) { + N(AllConsumables)[pos++] = itemID; + } } - N(AllConsumables)[i] = ITEM_NONE; + N(AllConsumables)[pos] = ITEM_NONE; return ApiStatus_DONE2; } + EvtScript N(EVS_NpcInteract_GourmetGuy) = { Call(DisablePlayerInput, TRUE) Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) diff --git a/src/world/area_omo/omo_06/omo_06_6_entity.c b/src/world/area_omo/omo_06/omo_06_6_entity.c index dee6d2a0f22..03ff0d626c8 100644 --- a/src/world/area_omo/omo_06/omo_06_6_entity.c +++ b/src/world/area_omo/omo_06/omo_06_6_entity.c @@ -5,7 +5,6 @@ EvtScript N(EVS_OpenChest_Mailbag) = { Set(LVarA, ITEM_MAILBAG) - Set(LVarB, ITEM_TYPE_KEY) Set(GF_OMO06_Chest_Mailbag, TRUE) ExecWait(N(EVS_Chest_GetItem)) Set(GF_MAC01_MailbagStolen, TRUE) diff --git a/src/world/area_omo/omo_07/omo_07_5_entity.c b/src/world/area_omo/omo_07/omo_07_5_entity.c index bbf16712fd8..f4b5dd73f9a 100644 --- a/src/world/area_omo/omo_07/omo_07_5_entity.c +++ b/src/world/area_omo/omo_07/omo_07_5_entity.c @@ -5,7 +5,6 @@ EvtScript N(EVS_OpenChest_FryingPan) = { Set(LVarA, ITEM_FRYING_PAN) - Set(LVarB, ITEM_TYPE_KEY) Set(GF_OMO07_Chest_FryingPan, TRUE) Set(GB_StoryProgress, STORY_CH4_GOT_FRYING_PAN) ExecWait(N(EVS_Chest_GetItem)) @@ -13,9 +12,9 @@ EvtScript N(EVS_OpenChest_FryingPan) = { End }; -EvtScript N(EVS_OpenChest_DefendPlus) = EVT_OPEN_CHEST_BADGE(ITEM_DEFEND_PLUS_A, GF_OMO07_Chest_DefendPlusA); +EvtScript N(EVS_OpenChest_DefendPlus) = EVT_OPEN_CHEST(ITEM_DEFEND_PLUS_A, GF_OMO07_Chest_DefendPlusA); -EvtScript N(EVS_OpenChest_IcePower) = EVT_OPEN_CHEST_BADGE(ITEM_ICE_POWER, GF_OMO07_Chest_IcePower); +EvtScript N(EVS_OpenChest_IcePower) = EVT_OPEN_CHEST(ITEM_ICE_POWER, GF_OMO07_Chest_IcePower); #include "world/common/EnableCameraFollowPlayerY.inc.c" #include "world/common/DisableCameraFollowPlayerY.inc.c" diff --git a/src/world/area_omo/omo_08/omo_08_6_npc.c b/src/world/area_omo/omo_08/omo_08_6_npc.c index 7e55fd29c6f..5c61b8ee679 100644 --- a/src/world/area_omo/omo_08/omo_08_6_npc.c +++ b/src/world/area_omo/omo_08/omo_08_6_npc.c @@ -20,7 +20,7 @@ EvtScript N(EVS_NpcInit_Conductor) = { EvtScript N(EVS_NpcInteract_TrainToad) = { Switch(GB_StoryProgress) CaseLt(STORY_CH4_SOLVED_COLOR_PUZZLE) - Call(FindKeyItem, ITEM_MYSTERY_NOTE, LVar0) + Call(FindItem, ITEM_MYSTERY_NOTE, LVar0) IfEq(LVar0, -1) IfEq(GF_OMO09_SpawnedPeachChoice3, FALSE) Call(SpeakToPlayer, NPC_SELF, ANIM_TrainToad_Green_Talk, ANIM_TrainToad_Green_Idle, 0, MSG_CH4_002B) diff --git a/src/world/area_omo/omo_09/omo_09_6_entity.c b/src/world/area_omo/omo_09/omo_09_6_entity.c index 85f727182ad..a5cf82caa96 100644 --- a/src/world/area_omo/omo_09/omo_09_6_entity.c +++ b/src/world/area_omo/omo_09/omo_09_6_entity.c @@ -5,7 +5,6 @@ EvtScript N(EVS_OpenChest_Dictionary) = { Set(LVarA, ITEM_DICTIONARY) - Set(LVarB, ITEM_TYPE_KEY) Set(GF_OMO09_Chest_Dictionary, TRUE) ExecWait(N(EVS_Chest_GetItem)) Set(GF_MAC00_DictionaryStolen, TRUE) diff --git a/src/world/area_omo/omo_12/omo_12_3_npc.c b/src/world/area_omo/omo_12/omo_12_3_npc.c index 3b60013a1d6..10468813739 100644 --- a/src/world/area_omo/omo_12/omo_12_3_npc.c +++ b/src/world/area_omo/omo_12/omo_12_3_npc.c @@ -38,8 +38,6 @@ API_CALLABLE(N(SetLightOff)) { return ApiStatus_DONE2; } -MAP_STATIC_PAD(1, unk); - enum { LIGHT_FROM_DEFAULT = 0, LIGHT_FROM_GHOST = 1, @@ -186,11 +184,6 @@ Vec3f N(WattLeftFlightPath)[] = { { -60.0, 30.0, 0.0 }, }; -BombTrigger N(BombPos_Lantern_Unused) = { - .pos = { 0.0f, 0.0f, 20.0f }, - .radius = 0.0f -}; - EvtScript N(EVS_Scene_ReleaseWatt) = { Call(DisablePlayerInput, TRUE) Call(N(DisableCameraLeadingPlayer)) diff --git a/src/world/area_omo/omo_13/omo_13_4_npc.c b/src/world/area_omo/omo_13/omo_13_4_npc.c index dabc37bfe9f..fc7b9eab694 100644 --- a/src/world/area_omo/omo_13/omo_13_4_npc.c +++ b/src/world/area_omo/omo_13/omo_13_4_npc.c @@ -13,7 +13,7 @@ NpcSettings N(NpcSettings_AntiGuy) = { .actionFlags = AI_ACTION_JUMP_WHEN_SEE_PLAYER, }; -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" s32 N(BribeItemList)[] = { ITEM_LEMON_CANDY, diff --git a/src/world/area_omo/omo_13/omo_13_5_entity.c b/src/world/area_omo/omo_13/omo_13_5_entity.c index 0be8773b366..ed82b4b0059 100644 --- a/src/world/area_omo/omo_13/omo_13_5_entity.c +++ b/src/world/area_omo/omo_13/omo_13_5_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_PowerPlus) = EVT_OPEN_CHEST_BADGE(ITEM_POWER_PLUS_B, GF_OMO13_Chest_PowerPlusB); +EvtScript N(EVS_OpenChest_PowerPlus) = EVT_OPEN_CHEST(ITEM_POWER_PLUS_B, GF_OMO13_Chest_PowerPlusB); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 110, 0, -60, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_omo/omo_15/omo_15_3_npc.c b/src/world/area_omo/omo_15/omo_15_3_npc.c index d1a2751ff36..474a43cf418 100644 --- a/src/world/area_omo/omo_15/omo_15_3_npc.c +++ b/src/world/area_omo/omo_15/omo_15_3_npc.c @@ -159,7 +159,6 @@ s32 N(CrowdFleeScriptD)[] = { CS_MOVE( 25, 0) CS_MOVE( -31, -23) CS_MOVE( -97, 0) - -50, //@bug -- ignored by event running this script; previous op should probably be CS_JUMP with this as third arg CS_MOVE(-150, -75) CS_MOVE(-230, -90) CS_MOVE(-309, -55) diff --git a/src/world/area_osr/osr_00/osr_00_4_npc_epilogue.c b/src/world/area_osr/osr_00/osr_00_4_npc_epilogue.c index cae89afbef9..9deb50d3505 100644 --- a/src/world/area_osr/osr_00/osr_00_4_npc_epilogue.c +++ b/src/world/area_osr/osr_00/osr_00_4_npc_epilogue.c @@ -1,11 +1,5 @@ #include "osr_00.h" -NpcSettings N(NpcSettings_Unused) = { - .height = 24, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - #include "world/common/npc/Yoshi.inc.c" #include "world/common/npc/YoshiKid.inc.c" #include "world/common/npc/Penguin.inc.c" diff --git a/src/world/area_osr/osr_00/osr_00_5_scenes.c b/src/world/area_osr/osr_00/osr_00_5_scenes.c index 8a2ebe7f6c0..197b3d9d9ab 100644 --- a/src/world/area_osr/osr_00/osr_00_5_scenes.c +++ b/src/world/area_osr/osr_00/osr_00_5_scenes.c @@ -20,7 +20,7 @@ API_CALLABLE(N(func_80240678_AACEA8)) { BSS IMG_BIN N(PeachLetterImg)[charset_peach_letter_png_width * charset_peach_letter_png_height]; BSS PAL_BIN N(PeachLetterPal)[0x100]; -MAP_STATIC_PAD(2, letter); + BSS MessageImageData N(MsgImage); // TODO look into + 1 here... diff --git a/src/world/area_pra/pra_01/pra_01_3_npc.c b/src/world/area_pra/pra_01/pra_01_3_npc.c index 6c58a419123..e3488efaa3f 100644 --- a/src/world/area_pra/pra_01/pra_01_3_npc.c +++ b/src/world/area_pra/pra_01/pra_01_3_npc.c @@ -5,8 +5,7 @@ #include "world/common/npc/StarSpirit.inc.c" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" API_CALLABLE(N(UpgradeStarPowerCh7)) { set_max_star_power(7); diff --git a/src/world/area_pra/pra_02/pra_02_3_entity.c b/src/world/area_pra/pra_02/pra_02_3_entity.c new file mode 100644 index 00000000000..d5f64c97c53 --- /dev/null +++ b/src/world/area_pra/pra_02/pra_02_3_entity.c @@ -0,0 +1,270 @@ +#include "pra_02.h" +#include "entity.h" +#include "effects.h" + +s32 N(RedKeyList)[] = { + ITEM_RED_KEY, + ITEM_NONE +}; + +s32 N(BlueKeyList)[] = { + ITEM_BLUE_KEY, + ITEM_NONE +}; + +EvtScript N(EVS_RaisePoundableSwitch) = { + Call(MakeLerp, -10, 0, 10, EASING_LINEAR) + Loop(0) + Call(UpdateLerp) + Call(TranslateGroup, MODEL_g307, 0, LVar0, 0) + Call(TranslateGroup, MODEL_g308, 0, LVar0, 0) + Call(UpdateColliderTransform, COLLIDER_o1342) + Call(UpdateColliderTransform, COLLIDER_o1344) + Wait(1) + IfEq(LVar1, 0) + BreakLoop + EndIf + EndLoop + Return + End +}; + +EvtScript N(EVS_LowerPoundableSwitch) = { + Call(PlaySoundAtCollider, COLLIDER_o1344, SOUND_FLOOR_SWITCH_ACTIVATE, SOUND_SPACE_DEFAULT) + Call(MakeLerp, 0, -10, 10, EASING_LINEAR) + Loop(0) + Call(UpdateLerp) + Call(TranslateGroup, MODEL_g307, 0, LVar0, 0) + Call(TranslateGroup, MODEL_g308, 0, LVar0, 0) + Call(UpdateColliderTransform, COLLIDER_o1342) + Call(UpdateColliderTransform, COLLIDER_o1344) + Wait(1) + IfEq(LVar1, 0) + BreakLoop + EndIf + EndLoop + Return + End +}; + +#include "world/common/todo/IsPlayerPounding.inc.c" + +API_CALLABLE(N(UpdatePadlockPosition)) { + Bytecode* args = script->ptrReadPos; + s32 entityIdx = evt_get_variable(script, *args++); + f32 x = evt_get_float_variable(script, *args++); + f32 y = evt_get_float_variable(script, *args++); + f32 z = evt_get_float_variable(script, *args++); + f32 offset = evt_get_float_variable(script, MV_WallPosOffset); + Entity* entity; + + if (entityIdx == -1) { + return ApiStatus_DONE2; + } + + entity = get_entity_by_index(entityIdx); + entity->pos.x = x; + entity->pos.y = y + offset; + entity->pos.z = z; + return ApiStatus_DONE2; +} + +EvtScript N(EVS_ManagePoundableSwitch) = { + Call(N(IsPlayerPounding)) + IfEq(LVar0, FALSE) + Return + EndIf + Call(DisablePlayerInput, TRUE) + IfEq(GF_PRA02_DoorColorToggle, FALSE) + Call(MakeLerp, 0, -250, 250 * DT, EASING_LINEAR) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittse, COLLIDER_FLAGS_UPPER_MASK) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittne, COLLIDER_FLAGS_UPPER_MASK) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_deilittse2, COLLIDER_FLAGS_UPPER_MASK) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_deilittne2, COLLIDER_FLAGS_UPPER_MASK) + Set(GF_PRA02_DoorColorToggle, TRUE) + Exec(N(EVS_LowerPoundableSwitch)) + Else + Call(MakeLerp, -250, 0, 250 * DT, EASING_LINEAR) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittse2, COLLIDER_FLAGS_UPPER_MASK) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittne2, COLLIDER_FLAGS_UPPER_MASK) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_deilittse, COLLIDER_FLAGS_UPPER_MASK) + Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_deilittne, COLLIDER_FLAGS_UPPER_MASK) + Set(GF_PRA02_DoorColorToggle, FALSE) + Exec(N(EVS_LowerPoundableSwitch)) + EndIf + Wait(30) + Thread + PlayEffect(EFFECT_DUST, 0, 1000, 250, 60, 50) + PlayEffect(EFFECT_DUST, 0, 1000, 250, 120, 50) + PlayEffect(EFFECT_DUST, 0, 1000, 250, 180, 50) + PlayEffect(EFFECT_DUST, 0, 1000, 250, -60, 50) + PlayEffect(EFFECT_DUST, 0, 1000, 250, -120, 50) + PlayEffect(EFFECT_DUST, 0, 1000, 250, -180, 50) + EndThread + Thread + Call(PlaySound, SOUND_PRA_SHIFT_FLOORS_RUMBLE) + Call(ShakeCam, CAM_DEFAULT, 0, 250 * DT, Float(0.5)) + Call(ShakeCam, CAM_DEFAULT, 0, 10 * DT, Float(1.5)) + Call(PlaySound, SOUND_PRA_SHIFT_FLOORS_THUD) // ??? somehow this terminates the looping SOUND_PRA_SHIFT_FLOORS_RUMBLE + EndThread + Label(0) + Call(UpdateLerp) + Set(MV_WallPosOffset, LVar0) + ExecWait(N(EVS_UpdateShiftingWallPos)) + IfEq(LVar1, 1) + Goto(0) + EndIf + Wait(10 * DT) + IfEq(GF_PRA02_DoorColorToggle, TRUE) + Call(SetGroupVisibility, MODEL_g307, MODEL_GROUP_HIDDEN) + Call(SetGroupVisibility, MODEL_g308, MODEL_GROUP_VISIBLE) + ExecWait(N(EVS_RaisePoundableSwitch)) + Else + Call(SetGroupVisibility, MODEL_g307, MODEL_GROUP_VISIBLE) + Call(SetGroupVisibility, MODEL_g308, MODEL_GROUP_HIDDEN) + ExecWait(N(EVS_RaisePoundableSwitch)) + EndIf + Call(DisablePlayerInput, FALSE) + Return + End +}; + +EvtScript N(EVS_DoNothing) = { + Return + End +}; + +EvtScript N(EVS_UsePadlock_Dummy) = { + BindTrigger(Ref(N(EVS_DoNothing)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittse, 1, 0) + BindTrigger(Ref(N(EVS_DoNothing)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittne, 1, 0) + Return + End +}; + +EvtScript N(EVS_UpdatePadlockPositions) = { + Loop(0) + Call(N(UpdatePadlockPosition), MV_NearRedPadlock, 987, 8, 84) + Call(N(UpdatePadlockPosition), MV_FarRedPadlock, 987, 8, -84) + Call(N(UpdatePadlockPosition), MV_NearBluePadlock, 987, 258, 84) + Call(N(UpdatePadlockPosition), MV_FarBluePadlock, 987, 258, -84) + Wait(1) + EndLoop + Return + End +}; + +#include "world/common/todo/RemovePadlock.inc.c" +#include "world/common/todo/GetEntityPosition.inc.c" + +EvtScript N(EVS_ItemPrompt_RedPadlock) = { + SetGroup(EVT_GROUP_00) + Call(SetTimeFreezeMode, TIME_FREEZE_PARTIAL) + Call(ShowKeyChoicePopup) + IfEq(LVar0, 0) + Call(ShowMessageAtScreenPos, MSG_Menus_00D8, 160, 40) + Call(CloseChoicePopup) + Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) + Return + EndIf + IfEq(LVar0, -1) + Call(CloseChoicePopup) + Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) + Return + EndIf + Call(RemoveItem, ITEM_RED_KEY) + Call(CloseChoicePopup) + Set(GF_PRA02_UnlockedRedDoor, TRUE) + BindTrigger(Ref(N(EVS_ExitDoors_pra_16_0)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittse, 1, 0) + BindTrigger(Ref(N(EVS_ExitDoors_pra_16_3)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittne, 1, 0) + Call(N(GetEntityPosition), MV_NearRedPadlock, LVar0, LVar1, LVar2) + Call(PlaySoundAt, SOUND_USE_KEY, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) + Call(N(GetEntityPosition), MV_FarRedPadlock, LVar0, LVar1, LVar2) + Call(PlaySoundAt, SOUND_USE_KEY, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) + Set(LVar0, MV_NearRedPadlock) + Set(MV_NearRedPadlock, -1) + Call(N(RemovePadlock)) + Set(LVar0, MV_FarRedPadlock) + Set(MV_FarRedPadlock, -1) + Call(N(RemovePadlock)) + Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) + Unbind + Return + End +}; + +EvtScript N(EVS_ItemPrompt_BluePadlock) = { + SetGroup(EVT_GROUP_00) + Call(SetTimeFreezeMode, TIME_FREEZE_PARTIAL) + Call(ShowKeyChoicePopup) + IfEq(LVar0, 0) + Call(ShowMessageAtScreenPos, MSG_Menus_00D8, 160, 40) + Call(CloseChoicePopup) + Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) + Return + EndIf + IfEq(LVar0, -1) + Call(CloseChoicePopup) + Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) + Return + EndIf + Call(RemoveItem, ITEM_BLUE_KEY) + Call(CloseChoicePopup) + Set(GF_PRA02_UnlockedBlueDoor, TRUE) + BindTrigger(Ref(N(EVS_ExitDoors_pra_13_0)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittse2, 1, 0) + BindTrigger(Ref(N(EVS_ExitDoors_pra_13_3)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittne2, 1, 0) + Call(N(GetEntityPosition), MV_NearBluePadlock, LVar0, LVar1, LVar2) + Call(PlaySoundAt, SOUND_USE_KEY, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) + Call(N(GetEntityPosition), MV_FarBluePadlock, LVar0, LVar1, LVar2) + Call(PlaySoundAt, SOUND_USE_KEY, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) + Set(LVar0, MV_NearBluePadlock) + Set(MV_NearBluePadlock, -1) + Call(N(RemovePadlock)) + Set(LVar0, MV_FarBluePadlock) + Set(MV_FarBluePadlock, -1) + Call(N(RemovePadlock)) + Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) + Unbind + Return + End +}; + +EvtScript N(EVS_MakeEntities) = { + Set(MV_NearRedPadlock, -1) + Set(MV_FarRedPadlock, -1) + Set(MV_NearBluePadlock, -1) + Set(MV_FarBluePadlock, -1) + Set(LVar2, COLLISION_WITH_ENTITY_BIT) + IfEq(GF_PRA02_UnlockedRedDoor, FALSE) + Call(MakeEntity, Ref(Entity_Padlock), 987, 8, 84, -80, MAKE_ENTITY_END) + Call(AssignScript, Ref(N(EVS_UsePadlock_Dummy))) + Set(MV_NearRedPadlock, LVar0) + BindPadlock(Ref(N(EVS_ItemPrompt_RedPadlock)), TRIGGER_WALL_PRESS_A, LVar2, Ref(N(RedKeyList)), 0, 1) + Add(LVar2, 1) + Call(UseDynamicShadow, TRUE) + Call(MakeEntity, Ref(Entity_Padlock), 987, 8, -84, -80, MAKE_ENTITY_END) + Call(AssignScript, Ref(N(EVS_UsePadlock_Dummy))) + Set(MV_FarRedPadlock, LVar0) + BindPadlock(Ref(N(EVS_ItemPrompt_RedPadlock)), TRIGGER_WALL_PRESS_A, LVar2, Ref(N(RedKeyList)), 0, 1) + Add(LVar2, 1) + Call(UseDynamicShadow, TRUE) + EndIf + IfEq(GF_PRA02_UnlockedBlueDoor, FALSE) + Call(MakeEntity, Ref(Entity_Padlock), 987, 258, 84, -80, MAKE_ENTITY_END) + Call(AssignScript, Ref(N(EVS_UsePadlock_Dummy))) + Set(MV_NearBluePadlock, LVar0) + BindPadlock(Ref(N(EVS_ItemPrompt_BluePadlock)), TRIGGER_WALL_PRESS_A, LVar2, Ref(N(BlueKeyList)), 0, 1) + Add(LVar2, 1) + Call(UseDynamicShadow, TRUE) + Call(MakeEntity, Ref(Entity_Padlock), 987, 258, -84, -80, MAKE_ENTITY_END) + Call(AssignScript, Ref(N(EVS_UsePadlock_Dummy))) + Set(MV_FarBluePadlock, LVar0) + BindPadlock(Ref(N(EVS_ItemPrompt_BluePadlock)), TRIGGER_WALL_PRESS_A, LVar2, Ref(N(BlueKeyList)), 0, 1) + Add(LVar2, 1) + Call(UseDynamicShadow, TRUE) + EndIf + Exec(N(EVS_UpdatePadlockPositions)) + Call(ParentColliderToModel, COLLIDER_o1344, MODEL_o1222) + Call(ParentColliderToModel, COLLIDER_o1342, MODEL_o1228) + Return + End +}; diff --git a/src/world/area_pra/pra_05/pra_05_3_entity.c b/src/world/area_pra/pra_05/pra_05_3_entity.c index c0592d16525..69630fd2a2e 100644 --- a/src/world/area_pra/pra_05/pra_05_3_entity.c +++ b/src/world/area_pra/pra_05/pra_05_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_BlueKey) = EVT_OPEN_CHEST_KEY(ITEM_BLUE_KEY, GF_PRA05_Chest_BlueKey); +EvtScript N(EVS_OpenChest_BlueKey) = EVT_OPEN_CHEST(ITEM_BLUE_KEY, GF_PRA05_Chest_BlueKey); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 200, 20, 94, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_pra/pra_09/pra_09_3_npc.c b/src/world/area_pra/pra_09/pra_09_3_npc.c index f91113077ed..7def5a9feff 100644 --- a/src/world/area_pra/pra_09/pra_09_3_npc.c +++ b/src/world/area_pra/pra_09/pra_09_3_npc.c @@ -13,8 +13,7 @@ NpcSettings N(NpcSettings_Duplighost) = { #include "world/common/enemy/Bombette.inc.c" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/todo/PlayBigSmokePuff.inc.c" diff --git a/src/world/area_pra/pra_11/pra_11_3_entity.c b/src/world/area_pra/pra_11/pra_11_3_entity.c index bad64efaa33..438ff7d8818 100644 --- a/src/world/area_pra/pra_11/pra_11_3_entity.c +++ b/src/world/area_pra/pra_11/pra_11_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_RedKey) = EVT_OPEN_CHEST_KEY(ITEM_RED_KEY, GF_PRA11_Chest_RedKey); +EvtScript N(EVS_OpenChest_RedKey) = EVT_OPEN_CHEST(ITEM_RED_KEY, GF_PRA11_Chest_RedKey); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 200, 20, 94, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_pra/pra_12/pra_12_3_entity.c b/src/world/area_pra/pra_12/pra_12_3_entity.c index 26eeae21212..bce64f5d979 100644 --- a/src/world/area_pra/pra_12/pra_12_3_entity.c +++ b/src/world/area_pra/pra_12/pra_12_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_PDownDUp) = EVT_OPEN_CHEST_BADGE(ITEM_P_DOWN_D_UP, GF_PRA12_Chest_PDownDUp); +EvtScript N(EVS_OpenChest_PDownDUp) = EVT_OPEN_CHEST(ITEM_P_DOWN_D_UP, GF_PRA12_Chest_PDownDUp); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 200, 20, 94, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_pra/pra_13/pra_13_2_main.c b/src/world/area_pra/pra_13/pra_13_2_main.c index 5960015d6e6..b2bee4c1cd0 100644 --- a/src/world/area_pra/pra_13/pra_13_2_main.c +++ b/src/world/area_pra/pra_13/pra_13_2_main.c @@ -37,19 +37,8 @@ EvtScript N(EVS_ExitDoors_pra_02_2) = { }; EvtScript N(EVS_ExitWalk_pra_14_0) = EVT_EXIT_WALK(60, pra_13_ENTRY_1, "pra_14", pra_14_ENTRY_0); - -EvtScript N(EVS_Unused_1) = { - Return - End -}; - EvtScript N(EVS_ExitWalk_pra_14_1) = EVT_EXIT_WALK(60, pra_13_ENTRY_2, "pra_14", pra_14_ENTRY_1); -EvtScript N(EVS_Unused_2) = { - Return - End -}; - EvtScript N(EVS_ExitDoors_pra_02_3) = { SetGroup(EVT_GROUP_1B) Call(DisablePlayerInput, TRUE) diff --git a/src/world/area_pra/pra_13/pra_13_3_npc.c b/src/world/area_pra/pra_13/pra_13_3_npc.c index 9860e56ce6e..938fac04072 100644 --- a/src/world/area_pra/pra_13/pra_13_3_npc.c +++ b/src/world/area_pra/pra_13/pra_13_3_npc.c @@ -12,8 +12,7 @@ NpcSettings N(NpcSettings_Player) = { }; #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/todo/PlayBigSmokePuff.inc.c" diff --git a/src/world/area_pra/pra_19/pra_19_3_npc.c b/src/world/area_pra/pra_19/pra_19_3_npc.c index 6a2f6f52bcc..1dc1c31223f 100644 --- a/src/world/area_pra/pra_19/pra_19_3_npc.c +++ b/src/world/area_pra/pra_19/pra_19_3_npc.c @@ -34,8 +34,7 @@ NpcSettings N(NpcSettings_Duplighost) = { #include "world/common/npc/Luigi.h" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/todo/PlayBigSmokePuff.inc.c" diff --git a/src/world/area_pra/pra_27/pra_27_3_entity.c b/src/world/area_pra/pra_27/pra_27_3_entity.c index 40c70b9cd25..c40ab39ab72 100644 --- a/src/world/area_pra/pra_27/pra_27_3_entity.c +++ b/src/world/area_pra/pra_27/pra_27_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_PalaceKey) = EVT_OPEN_CHEST_KEY(ITEM_CRYSTAL_PALACE_KEY, GF_PRA27_Chest_PalaceKey); +EvtScript N(EVS_OpenChest_PalaceKey) = EVT_OPEN_CHEST(ITEM_CRYSTAL_PALACE_KEY, GF_PRA27_Chest_PalaceKey); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 200, 20, 94, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_pra/pra_28/pra_28_3_entity.c b/src/world/area_pra/pra_28/pra_28_3_entity.c index b710d508703..b07b3833ccd 100644 --- a/src/world/area_pra/pra_28/pra_28_3_entity.c +++ b/src/world/area_pra/pra_28/pra_28_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_PUpDDown) = EVT_OPEN_CHEST_BADGE(ITEM_P_UP_D_DOWN, GF_PRA28_Chest_PUpDDown); +EvtScript N(EVS_OpenChest_PUpDDown) = EVT_OPEN_CHEST(ITEM_P_UP_D_DOWN, GF_PRA28_Chest_PUpDDown); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 200, 20, 94, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_pra/pra_31/pra_31_2_npc.c b/src/world/area_pra/pra_31/pra_31_2_npc.c index 426766e43dc..5d9b1d09f51 100644 --- a/src/world/area_pra/pra_31/pra_31_2_npc.c +++ b/src/world/area_pra/pra_31/pra_31_2_npc.c @@ -3,8 +3,7 @@ #include "world/common/enemy/AlbinoDino.inc.c" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" API_CALLABLE(N(GetAngleToPlayer)) { Npc* npc = get_npc_safe(script->owner2.npcID); diff --git a/src/world/area_pra/pra_33/pra_33_2_main.c b/src/world/area_pra/pra_33/pra_33_2_main.c index 38a7f80b7e3..9ee5ecb49d1 100644 --- a/src/world/area_pra/pra_33/pra_33_2_main.c +++ b/src/world/area_pra/pra_33/pra_33_2_main.c @@ -43,11 +43,6 @@ EvtScript N(EVS_ExitDoors_pra_18_1) = { EvtScript N(EVS_ExitWalk_pra_35_2) = EVT_EXIT_WALK(60, pra_33_ENTRY_2, "pra_35", pra_35_ENTRY_2); -EvtScript N(EVS_Unused) = { - Return - End -}; - EvtScript N(EVS_BindExitTriggers) = { BindTrigger(Ref(N(EVS_ExitDoors_pra_35_0)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittse, 1, 0) BindTrigger(Ref(N(EVS_ExitDoors_pra_18_1)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittnw, 1, 0) diff --git a/src/world/area_pra/pra_35/pra_35_2_main.c b/src/world/area_pra/pra_35/pra_35_2_main.c index a5525367c67..e9dc1c1d824 100644 --- a/src/world/area_pra/pra_35/pra_35_2_main.c +++ b/src/world/area_pra/pra_35/pra_35_2_main.c @@ -43,11 +43,6 @@ EvtScript N(EVS_ExitWalk_pra_19_0) = { EvtScript N(EVS_ExitWalk_pra_33_2) = EVT_EXIT_WALK(60, pra_35_ENTRY_2, "pra_33", pra_33_ENTRY_2); -EvtScript N(EVS_Unused) = { - Return - End -}; - EvtScript N(EVS_BindExitTriggers) = { BindTrigger(Ref(N(EVS_ExitWalk_pra_33_0)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittsw, 1, 0) BindTrigger(Ref(N(EVS_ExitWalk_pra_19_0)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittse, 1, 0) diff --git a/src/world/area_pra/pra_35/pra_35_4_entity.c b/src/world/area_pra/pra_35/pra_35_4_entity.c index fb448bda2fa..de535388e7f 100644 --- a/src/world/area_pra/pra_35/pra_35_4_entity.c +++ b/src/world/area_pra/pra_35/pra_35_4_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_TripleDip) = EVT_OPEN_CHEST_BADGE(ITEM_TRIPLE_DIP, GF_PRA35_Chest_TripleDip); +EvtScript N(EVS_OpenChest_TripleDip) = EVT_OPEN_CHEST(ITEM_TRIPLE_DIP, GF_PRA35_Chest_TripleDip); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 435, 0, -70, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_sam/sam_01/sam_01_4_npc.c b/src/world/area_sam/sam_01/sam_01_4_npc.c index 2a310dd14f7..3fe038f3c12 100644 --- a/src/world/area_sam/sam_01/sam_01_4_npc.c +++ b/src/world/area_sam/sam_01/sam_01_4_npc.c @@ -1,8 +1,7 @@ #include "sam_01.h" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/complete/GiveReward.inc.c" #include "world/common/npc/Penguin_Wander.inc.c" @@ -147,7 +146,7 @@ EvtScript N(EVS_NpcInteract_MayorPenguin) = { KillThread(LVarA) ExecWait(N(EVS_Mayor_HandOverBucket)) Call(SetNpcAnimation, NPC_SELF, ANIM_MayorPenguin_Idle) - EVT_GIVE_KEY_REWARD(ITEM_SNOWMAN_BUCKET) + EVT_GIVE_REWARD(ITEM_SNOWMAN_BUCKET) Call(SpeakToPlayer, NPC_SELF, ANIM_MayorPenguin_Talk, ANIM_MayorPenguin_Idle, 0, MSG_CH7_003C) Call(GetNpcPos, NPC_MayorPenguin, LVar0, LVar1, LVar2) Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) diff --git a/src/world/area_sam/sam_01/sam_01_6_entity.c b/src/world/area_sam/sam_01/sam_01_6_entity.c index 99e6e252e62..458490b38ac 100644 --- a/src/world/area_sam/sam_01/sam_01_6_entity.c +++ b/src/world/area_sam/sam_01/sam_01_6_entity.c @@ -4,7 +4,7 @@ #define NAME_SUFFIX _Entity #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_AttackFXE) = EVT_OPEN_CHEST_BADGE(ITEM_ATTACK_FX_E, GF_SAM01_Chest_AttackFXE); +EvtScript N(EVS_OpenChest_AttackFXE) = EVT_OPEN_CHEST(ITEM_ATTACK_FX_E, GF_SAM01_Chest_AttackFXE); #define NAME_SUFFIX EvtScript N(EVS_MakeEntities) = { diff --git a/src/world/area_sam/sam_02/sam_02_2_main.c b/src/world/area_sam/sam_02/sam_02_2_main.c index 6a2d11f5a1a..99d462df8a5 100644 --- a/src/world/area_sam/sam_02/sam_02_2_main.c +++ b/src/world/area_sam/sam_02/sam_02_2_main.c @@ -20,9 +20,7 @@ BombTrigger N(BombPos_Tree1) = { .radius = 0.0f }; -//@bug model count is 2, but only one is supplied. the extra comma is needed. -// incidentally, the following word is 80243478, which is not a valid modelID. -FoliageModelList N(Tree2_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o186,); +FoliageModelList N(Tree2_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o186); ShakeTreeConfig N(ShakeTree_Tree2) = { .leaves = &N(Tree2_LeafModels), diff --git a/src/world/area_sam/sam_02/sam_02_4_npc.c b/src/world/area_sam/sam_02/sam_02_4_npc.c index 9f2f2c77d44..f8ea0523f4d 100644 --- a/src/world/area_sam/sam_02/sam_02_4_npc.c +++ b/src/world/area_sam/sam_02/sam_02_4_npc.c @@ -1,11 +1,7 @@ #include "sam_02.h" #include "sprite/player.h" -#if VERSION_PAL #include "sprite/npc/ShiverToad.h" -#define TOADHOUSE_ANIM_TALK ANIM_ShiverToad_Red_Talk -#define TOADHOUSE_ANIM_IDLE ANIM_ShiverToad_Red_Idle -#endif #include "world/common/complete/ToadHouseBlanketAnim.inc.c" #include "world/common/atomic/ToadHouse.inc.c" @@ -290,11 +286,11 @@ EvtScript N(EVS_NpcInteract_Penguin_06) = { }; EvtScript N(EVS_NpcInteract_Penguin_07) = { - Call(FindKeyItem, ITEM_FIRST_DEGREE_CARD, LVar1) - Call(FindKeyItem, ITEM_SECOND_DEGREE_CARD, LVar2) - Call(FindKeyItem, ITEM_THIRD_DEGREE_CARD, LVar3) - Call(FindKeyItem, ITEM_FOURTH_DEGREE_CARD, LVar4) - Call(FindKeyItem, ITEM_DIPLOMA, LVar5) + Call(FindItem, ITEM_FIRST_DEGREE_CARD, LVar1) + Call(FindItem, ITEM_SECOND_DEGREE_CARD, LVar2) + Call(FindItem, ITEM_THIRD_DEGREE_CARD, LVar3) + Call(FindItem, ITEM_FOURTH_DEGREE_CARD, LVar4) + Call(FindItem, ITEM_DIPLOMA, LVar5) IfNe(LVar1, -1) Call(SpeakToPlayer, NPC_SELF, ANIM_Penguin_Talk, ANIM_Penguin_Idle, 0, MSG_CH7_0091) Return diff --git a/src/world/area_sam/sam_04/sam_04_2_main.c b/src/world/area_sam/sam_04/sam_04_2_main.c index 3f603d728ca..b464470ad8f 100644 --- a/src/world/area_sam/sam_04/sam_04_2_main.c +++ b/src/world/area_sam/sam_04/sam_04_2_main.c @@ -40,10 +40,24 @@ EvtScript N(EVS_KnockAwayTreePart) = { End }; -// script causes a crash if player picks up the item before it is killed +API_CALLABLE(N(CheckItemExists)) { + Bytecode* args = script->ptrReadPos; + s32 itemIdx = evt_get_variable(script, *args++); + s32 outVar = *args++; + ItemEntity* itemEntity = get_item_entity(itemIdx); + + evt_set_variable(script, outVar, itemEntity); + return ApiStatus_DONE2; +} + EvtScript N(EVS_TetherItemToDummyNpc) = { Loop(0) Call(GetNpcPos, NPC_LetterDummy, LVar0, LVar1, LVar2) + Call(N(CheckItemExists), MV_LetterItemID, LVarA) + IfEq(LVarA, 0) + // prevent crash from player picking up the item before it is killed + BreakLoop + EndIf Call(SetItemPos, MV_LetterItemID, LVar0, LVar1, LVar2) Wait(1) EndLoop diff --git a/src/world/area_sam/sam_04/sam_04_4_npc.c b/src/world/area_sam/sam_04/sam_04_4_npc.c index 9da95430621..cf86086c2d2 100644 --- a/src/world/area_sam/sam_04/sam_04_4_npc.c +++ b/src/world/area_sam/sam_04/sam_04_4_npc.c @@ -10,8 +10,7 @@ NpcSettings N(NpcSettings_Snowman) = { }; #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,item_choice); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" s32 N(BucketList)[] = { ITEM_SNOWMAN_BUCKET, @@ -49,7 +48,7 @@ EvtScript N(EVS_NpcInteract_Snowman_05) = { EvtScript N(EVS_ItemPrompt_Scarf) = { Call(DisablePlayerInput, TRUE) - Call(FindKeyItem, ITEM_SNOWMAN_SCARF, LVar0) + Call(FindItem, ITEM_SNOWMAN_SCARF, LVar0) IfNe(LVar0, -1) Call(ShowKeyChoicePopup) Call(CloseChoicePopup) @@ -89,7 +88,7 @@ EvtScript N(EVS_NpcInteract_Snowman_03) = { EvtScript N(EVS_ItemPrompt_Bucket) = { Call(DisablePlayerInput, TRUE) - Call(FindKeyItem, ITEM_SNOWMAN_BUCKET, LVar0) + Call(FindItem, ITEM_SNOWMAN_BUCKET, LVar0) IfNe(LVar0, -1) Call(ShowKeyChoicePopup) Call(CloseChoicePopup) diff --git a/src/world/area_sam/sam_06/sam_06_4_npc.c b/src/world/area_sam/sam_06/sam_06_4_npc.c index d5895677ad4..f88e95bb2c3 100644 --- a/src/world/area_sam/sam_06/sam_06_4_npc.c +++ b/src/world/area_sam/sam_06/sam_06_4_npc.c @@ -64,16 +64,10 @@ NpcSettings N(NpcSettings_ShiverToad_Stationary) = { }; #include "world/common/complete/GiveReward.inc.c" - #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,key_item); -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" -#if VERSION_PAL #include "sprite/npc/ShiverToad.h" -#define TOADHOUSE_ANIM_TALK ANIM_ShiverToad_Red_Talk -#define TOADHOUSE_ANIM_IDLE ANIM_ShiverToad_Red_Idle -#endif #include "world/common/complete/ToadHouseBlanketAnim.inc.c" #include "world/common/atomic/ToadHouse.inc.c" @@ -429,7 +423,7 @@ EvtScript N(EVS_Scene_Merle_EnterHouse) = { Call(SetItemPos, MV_ScarfItemID, NPC_DISPOSE_LOCATION) Call(SetNpcAnimation, NPC_Merle, ANIM_Merle_Idle) Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - EVT_GIVE_KEY_REWARD(ITEM_SNOWMAN_SCARF) + EVT_GIVE_REWARD(ITEM_SNOWMAN_SCARF) Call(SpeakToPlayer, NPC_Merle, ANIM_Merle_Talk, ANIM_Merle_Idle, 0, MSG_CH7_00F1) Wait(10 * DT) Call(SetCamPosA, CAM_DEFAULT, Float(200.7), Float(-321.0)) diff --git a/src/world/area_sam/sam_07/sam_07_4_frozen_pit.c b/src/world/area_sam/sam_07/sam_07_4_frozen_pit.c index 78041a6114c..a9d0edcbb17 100644 --- a/src/world/area_sam/sam_07/sam_07_4_frozen_pit.c +++ b/src/world/area_sam/sam_07/sam_07_4_frozen_pit.c @@ -232,9 +232,9 @@ EvtScript N(EVS_UseGreenSwitch) = { End }; -BombTriggerF N(BombPos_Ice) = { +BombTrigger N(BombPos_Ice) = { .pos = { -940.0f, -130.0f, -75.0f }, - .radius = 60.0f + .radius = 60 }; EvtScript N(EVS_SetupPit) = { diff --git a/src/world/area_sam/sam_09/sam_09_4_sockets.c b/src/world/area_sam/sam_09/sam_09_4_sockets.c index 7916ff1b87c..25a261045ca 100644 --- a/src/world/area_sam/sam_09/sam_09_4_sockets.c +++ b/src/world/area_sam/sam_09/sam_09_4_sockets.c @@ -2,6 +2,7 @@ #include "effects.h" #include "world/common/complete/GiveReward.inc.c" +#include "world/common/todo/GetItemName.inc.c" API_CALLABLE(N(GetItemIDFromItemEntity)) { Bytecode* args = script->ptrReadPos; @@ -15,68 +16,46 @@ API_CALLABLE(N(SerializeItemIDs)) { s32 itemID; itemID = evt_get_variable(script, MV_Socket1_ItemID); - if (itemID == -1) { - itemID = 0xFF; - } - evt_set_variable(script, GB_SAM09_ItemSocket1_LowerByte, itemID & 0xFF); - evt_set_variable(script, GB_SAM09_ItemSocket1_UpperByte, (itemID >> 8) & 0xFF); + set_global_short(GB_SAM09_ItemSocket1_LowerByte, itemID); itemID = evt_get_variable(script, MV_Socket2_ItemID); - if (itemID == -1) { - itemID = 0xFF; - } - evt_set_variable(script, GB_SAM09_ItemSocket2_LowerByte, itemID & 0xFF); - evt_set_variable(script, GB_SAM09_ItemSocket2_UpperByte, (itemID >> 8) & 0xFF); + set_global_short(GB_SAM09_ItemSocket2_LowerByte, itemID); itemID = evt_get_variable(script, MV_Socket3_ItemID); - if (itemID == -1) { - itemID = 0xFF; - } - evt_set_variable(script, GB_SAM09_ItemSocket3_LowerByte, itemID & 0xFF); - evt_set_variable(script, GB_SAM09_ItemSocket3_UpperByte, (itemID >> 8) & 0xFF); + set_global_short(GB_SAM09_ItemSocket3_LowerByte, itemID); + return ApiStatus_DONE2; } API_CALLABLE(N(DeserializeItemIDs)) { - s32 upper; - s32 lower; + s32 itemID; - lower = evt_get_variable(script, GB_SAM09_ItemSocket1_LowerByte) & 0xFF; - upper = evt_get_variable(script, GB_SAM09_ItemSocket1_UpperByte) & 0xFF; - if (lower != 0xFF) { - evt_set_variable(script, MV_Socket1_ItemID, (upper << 8) | lower); - } else { - evt_set_variable(script, MV_Socket1_ItemID, -1); - } + itemID = get_global_short(GB_SAM09_ItemSocket1_LowerByte); + evt_set_variable(script, MV_Socket1_ItemID, itemID); - lower = evt_get_variable(script, GB_SAM09_ItemSocket2_LowerByte) & 0xFF; - upper = evt_get_variable(script, GB_SAM09_ItemSocket2_UpperByte) & 0xFF; - if (lower != 0xFF) { - evt_set_variable(script, MV_Socket2_ItemID, (upper << 8) | lower); - } else { - evt_set_variable(script, MV_Socket2_ItemID, -1); - } + itemID = get_global_short(GB_SAM09_ItemSocket2_LowerByte); + evt_set_variable(script, MV_Socket2_ItemID, itemID); + + itemID = get_global_short(GB_SAM09_ItemSocket3_LowerByte); + evt_set_variable(script, MV_Socket3_ItemID, itemID); - lower = evt_get_variable(script, GB_SAM09_ItemSocket3_LowerByte) & 0xFF; - upper = evt_get_variable(script, GB_SAM09_ItemSocket3_UpperByte) & 0xFF; - if (lower != 0xFF) { - evt_set_variable(script, MV_Socket3_ItemID, (upper << 8) | lower); - } else { - evt_set_variable(script, MV_Socket3_ItemID, -1); - } return ApiStatus_DONE2; } API_CALLABLE(N(CreateConsumableItemList)) { + s32 itemID; s32* array; - s32 len = ITEM_NUM_CONSUMABLES; - s32 i; + s32 pos = 0; script->varTablePtr[0] = array = heap_malloc((ITEM_NUM_CONSUMABLES + 1) * sizeof(*array)); - for (i = 0; i < ITEM_NUM_CONSUMABLES; i++) { - array[i] = ITEM_FIRST_CONSUMABLE + i; + + for (itemID = 0; itemID < NUM_ITEMS; itemID++) { + if (item_is_consumable(itemID)) { + array[pos++] = itemID; + } } - array[i] = ITEM_NONE; + array[pos] = ITEM_NONE; + return ApiStatus_DONE2; } @@ -270,20 +249,20 @@ EvtScript N(EVS_UseSocket3) = { EvtScript N(EVS_Interact_ItemSockets) = { Call(DisablePlayerInput, TRUE) Label(0) - Call(GetPlayerActionState, LVar0) - Wait(1) - IfNe(LVar0, ACTION_STATE_IDLE) - Goto(0) - EndIf + Call(GetPlayerActionState, LVar0) + Wait(1) + IfNe(LVar0, ACTION_STATE_IDLE) + Goto(0) + EndIf Call(GetPlayerPos, LVar1, LVar2, LVar3) - IfLt(LVar1, -150) - ExecWait(N(EVS_UseSocket1)) - Else - IfLt(LVar1, 100) + Switch(LVar1) + CaseLt(-150) + ExecWait(N(EVS_UseSocket1)) + CaseLt(100) ExecWait(N(EVS_UseSocket2)) - Else + CaseDefault ExecWait(N(EVS_UseSocket3)) - EndIf + EndSwitch EndIf Call(DisablePlayerInput, FALSE) Return diff --git a/src/world/area_sam/sam_10/sam_10_3_entity.c b/src/world/area_sam/sam_10/sam_10_3_entity.c index 41d0ab8cadd..8408615d0c7 100644 --- a/src/world/area_sam/sam_10/sam_10_3_entity.c +++ b/src/world/area_sam/sam_10/sam_10_3_entity.c @@ -1,24 +1,6 @@ #include "sam_10.h" #include "entity.h" -#include "world/common/todo/StashVars.inc.c" -#include "world/common/todo/GetItemName.inc.c" -#include "world/common/todo/SomeItemEntityFunc.inc.c" -#include "world/common/todo/IsItemBadge.inc.c" - -s32** N(varStash) = NULL; - -EvtScript N(EVS_Chest_ShowGotItem) = { - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_FULL) - Wait(40) - Call(ShowGotItem, LVar0, FALSE, 0) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Return - Return - End -}; - API_CALLABLE(N(SetStarStoneItemScale)) { get_item_entity(script->varTable[0])->scale = 0.8f; return ApiStatus_DONE2; diff --git a/src/world/area_sam/sam_10/sam_10_4_stairs.c b/src/world/area_sam/sam_10/sam_10_4_stairs.c index 83994eb358e..c3a1230168a 100644 --- a/src/world/area_sam/sam_10/sam_10_4_stairs.c +++ b/src/world/area_sam/sam_10/sam_10_4_stairs.c @@ -44,7 +44,7 @@ API_CALLABLE(N(GetCamPointsNearPlayer)) { EvtScript N(EVS_ItemPrompt_StarStoneSocket) = { Call(DisablePlayerInput, TRUE) - Call(FindKeyItem, ITEM_STAR_STONE, LVar0) + Call(FindItem, ITEM_STAR_STONE, LVar0) IfNe(LVar0, -1) Call(ShowKeyChoicePopup) Call(CloseChoicePopup) diff --git a/src/world/area_sam/sam_11/sam_11_6_pond.c b/src/world/area_sam/sam_11/sam_11_6_pond.c index c729deaa2f4..180f29bc980 100644 --- a/src/world/area_sam/sam_11/sam_11_6_pond.c +++ b/src/world/area_sam/sam_11/sam_11_6_pond.c @@ -433,10 +433,9 @@ EvtScript N(EVS_TouchPond_After) = { End }; -// @bug radius is f32 here, should be s32 -BombTriggerF N(BombTrigger_Pond) = { +BombTrigger N(BombTrigger_Pond) = { .pos = { 0.0f, -10.0f, 220.0f }, - .radius = 300.0 + .radius = 300 }; EvtScript N(EVS_SetupPond) = { diff --git a/src/world/area_sbk/sbk_02/sbk_02_4_npc.c b/src/world/area_sbk/sbk_02/sbk_02_4_npc.c index 426470b54ce..c4f957cc85e 100644 --- a/src/world/area_sbk/sbk_02/sbk_02_4_npc.c +++ b/src/world/area_sbk/sbk_02/sbk_02_4_npc.c @@ -5,7 +5,7 @@ #include "world/common/npc/StarSpirit.inc.c" #include "world/common/npc/Toad_Stationary.inc.c" -#include "world/common/complete/NormalItemChoice.inc.c" +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/complete/GiveReward.inc.c" @@ -195,7 +195,7 @@ API_CALLABLE(N(CheckTradeEventTime)) { } API_CALLABLE(N(GetTradeEventItemCount)) { - script->varTable[0] = get_item_count(); + script->varTable[0] = get_consumables_count(); return ApiStatus_DONE2; } @@ -225,7 +225,7 @@ EvtScript N(EVS_NpcInteract_TradingToad) = { Return CaseEq(ITEM_NUTTY_CAKE) Call(SpeakToPlayer, NPC_SELF, ANIM_Toad_Pink_Talk, ANIM_Toad_Pink_Idle, 0, MSG_CH2_00F1) - EVT_GIVE_CONSUMABLE_REWARD(ITEM_MAPLE_SUPER) + EVT_GIVE_REWARD(ITEM_MAPLE_SUPER) Wait(10) Call(SpeakToPlayer, NPC_SELF, ANIM_Toad_Pink_Talk, ANIM_Toad_Pink_Idle, 0, MSG_CH2_00F2) Wait(10) diff --git a/src/world/area_sbk/sbk_30/sbk_30_3_npc.c b/src/world/area_sbk/sbk_30/sbk_30_3_npc.c index 2b973b7231e..917788dfa36 100644 --- a/src/world/area_sbk/sbk_30/sbk_30_3_npc.c +++ b/src/world/area_sbk/sbk_30/sbk_30_3_npc.c @@ -1,16 +1,8 @@ #include "sbk_30.h" -#include "world/common/enemy/ai/GuardAI.inc.c" - #include "world/common/npc/Kolorado.inc.c" -NpcSettings N(NpcSettings_Unused) = { - .height = 35, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - NpcSettings N(NpcSettings_Archeologist_01) = { .height = 42, .radius = 24, @@ -19,9 +11,7 @@ NpcSettings N(NpcSettings_Archeologist_01) = { #include "world/common/complete/GiveReward.inc.c" #include "world/common/complete/KeyItemChoice.inc.c" -MAP_STATIC_PAD(1,normal_item); -#include "world/common/complete/NormalItemChoice.inc.c" - +#include "world/common/complete/ConsumableItemChoice.inc.c" #include "world/common/complete/LetterDelivery.inc.c" s32 N(LetterList)[] = { @@ -76,7 +66,7 @@ EvtScript N(EVS_NpcInteract_Kolorado) = { Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH2_0046) Goto(50) EndIf - Call(HasKeyItem, ITEM_ARTIFACT, LVar0) + Call(HasItem, ITEM_ARTIFACT, LVar0) IfEq(LVar0, 1) IfEq(GF_SBK_KeptArtifactFromKolorado, TRUE) Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH2_0043) diff --git a/src/world/area_tik/tik_02/tik_02_3_entity.c b/src/world/area_tik/tik_02/tik_02_3_entity.c index 10c1719628e..00c62e24f28 100644 --- a/src/world/area_tik/tik_02/tik_02_3_entity.c +++ b/src/world/area_tik/tik_02/tik_02_3_entity.c @@ -3,7 +3,7 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest) = EVT_OPEN_CHEST_BADGE(ITEM_SHRINK_STOMP, GF_TIK02_Chest_ShrinkStomp); +EvtScript N(EVS_OpenChest) = EVT_OPEN_CHEST(ITEM_SHRINK_STOMP, GF_TIK02_Chest_ShrinkStomp); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 280, -10, 0, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_tik/tik_05/tik_05_4_entity.c b/src/world/area_tik/tik_05/tik_05_4_entity.c index d71f0f00229..db9a0e129b4 100644 --- a/src/world/area_tik/tik_05/tik_05_4_entity.c +++ b/src/world/area_tik/tik_05/tik_05_4_entity.c @@ -54,7 +54,7 @@ EvtScript N(EVS_BreakBlock_DropSpring) = { End }; -EvtScript N(EVS_OpenChest) = EVT_OPEN_CHEST_BADGE(ITEM_POWER_SMASH1, GF_TIK05_Chest_PowerSmash1); +EvtScript N(EVS_OpenChest) = EVT_OPEN_CHEST(ITEM_POWER_SMASH1, GF_TIK05_Chest_PowerSmash1); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), -185, 60, -25, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_tik/tik_12/tik_12_4_entity.c b/src/world/area_tik/tik_12/tik_12_4_entity.c index 1f2a9508d1c..a93848577bb 100644 --- a/src/world/area_tik/tik_12/tik_12_4_entity.c +++ b/src/world/area_tik/tik_12/tik_12_4_entity.c @@ -1,31 +1,6 @@ #include "tik_12.h" #include "entity.h" -// begin incomplete Chest include -//#include "world/common/entity/Chest.inc.c" - -#include "world/common/todo/StashVars.inc.c" -#include "world/common/todo/GetItemName.inc.c" -#include "world/common/todo/SomeItemEntityFunc.inc.c" -#include "world/common/todo/IsItemBadge.inc.c" - -s32** N(varStash) = NULL; - -EvtScript N(EVS_Chest_ShowGotItem) = { - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_FULL) - Wait(40) - Call(ShowGotItem, LVar0, FALSE, 0) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Return - Return - End -}; - -MAP_RODATA_PAD(1,unk); - -// end incomplete Chest include - #define SUPER_BLOCK_MAPVAR MV_SuperBlock #define SUPER_BLOCK_GAMEFLAG GF_TIK02_SuperBlock #include "world/common/entity/SuperBlock.inc.c" diff --git a/src/world/area_tik/tik_15/tik_15_5_npc.c b/src/world/area_tik/tik_15/tik_15_5_npc.c index ecf863b6e1d..b041cb5ebc8 100644 --- a/src/world/area_tik/tik_15/tik_15_5_npc.c +++ b/src/world/area_tik/tik_15/tik_15_5_npc.c @@ -14,12 +14,6 @@ NpcSettings N(NpcSettings_RipCheato) = { .level = ACTOR_LEVEL_NONE, }; -NpcSettings N(NpcSettings_Unused1) = { - .height = 23, - .radius = 19, - .level = ACTOR_LEVEL_NONE, -}; - #include "world/common/complete/GiveReward.inc.c" s32 N(CheatoItems)[][2] = { @@ -47,7 +41,7 @@ API_CALLABLE(N(GetNextCheatoItem)) { } API_CALLABLE(N(CheckPlayerHasEnoughRoom)) { - script->varTable[0] = get_item_empty_count(); + script->varTable[0] = get_consumables_empty(); return ApiStatus_DONE2; } @@ -97,7 +91,7 @@ EvtScript N(EVS_NpcInteract_RipCheato) = { Call(AddCoin, -RIP_CHEATO_COST) Call(ShowCoinCounter, FALSE) Call(EndSpeech, NPC_RipCheato, ANIM_RipCheato_Talk, ANIM_RipCheato_Idle, 0) - EVT_GIVE_BADGE_REWARD(ITEM_BUMP_ATTACK) + EVT_GIVE_REWARD(ITEM_BUMP_ATTACK) CaseEq(CHEATO_TYPE_CONSUMABLE) Call(N(CheckPlayerHasEnoughRoom)) IfLe(LVar0, 0) @@ -108,7 +102,7 @@ EvtScript N(EVS_NpcInteract_RipCheato) = { Call(AddCoin, -RIP_CHEATO_COST) Call(ShowCoinCounter, FALSE) Call(EndSpeech, NPC_RipCheato, ANIM_RipCheato_Talk, ANIM_RipCheato_Idle, 0) - EVT_GIVE_CONSUMABLE_REWARD_ALT(LVarB) + EVT_GIVE_REWARD(LVarB) EndSwitch IfLt(GB_TIK15_RipCheato_PurchaseCount, 10) Add(GB_TIK15_RipCheato_PurchaseCount, 1) diff --git a/src/world/area_trd/trd_00/trd_00_2_entity.c b/src/world/area_trd/trd_00/trd_00_2_entity.c index 3562de41279..678d13ebf6d 100644 --- a/src/world/area_trd/trd_00/trd_00_2_entity.c +++ b/src/world/area_trd/trd_00/trd_00_2_entity.c @@ -3,8 +3,8 @@ #include "world/common/entity/Chest.inc.c" -EvtScript N(EVS_OpenChest_Refund) = EVT_OPEN_CHEST_BADGE(ITEM_REFUND, GF_TRD00_Chest_Refund); -EvtScript N(EVS_OpenChest_FPPlus) = EVT_OPEN_CHEST_BADGE(ITEM_FP_PLUS_B, GF_TRD00_Chest_FPPlusB); +EvtScript N(EVS_OpenChest_Refund) = EVT_OPEN_CHEST(ITEM_REFUND, GF_TRD00_Chest_Refund); +EvtScript N(EVS_OpenChest_FPPlus) = EVT_OPEN_CHEST(ITEM_FP_PLUS_B, GF_TRD00_Chest_FPPlusB); EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_Chest), 810, 0, -50, 0, 0, MAKE_ENTITY_END) diff --git a/src/world/area_trd/trd_01/trd_01_2_entity.c b/src/world/area_trd/trd_01/trd_01_2_entity.c index cf42a368458..c9bdf78e612 100644 --- a/src/world/area_trd/trd_01/trd_01_2_entity.c +++ b/src/world/area_trd/trd_01/trd_01_2_entity.c @@ -41,8 +41,7 @@ EvtScript N(EVS_UnlockDoors) = { ResumeGroup(EVT_GROUP_01) Return EndIf - Call(FindKeyItem, ITEM_KOOPA_FORTRESS_KEY, LVar0) - Call(RemoveKeyItemAt, LVar0) + Call(RemoveItem, ITEM_KOOPA_FORTRESS_KEY) Call(CloseChoicePopup) Set(GF_TRD01_UnlockedDoor, TRUE) Call(N(GetEntityPosition), MV_Padlock_EntityIndex, LVar0, LVar1, LVar2) diff --git a/src/world/area_trd/trd_05/trd_05_3_trap.c b/src/world/area_trd/trd_05/trd_05_3_trap.c index bf2c389a478..e159c2fbe05 100644 --- a/src/world/area_trd/trd_05/trd_05_3_trap.c +++ b/src/world/area_trd/trd_05/trd_05_3_trap.c @@ -138,13 +138,6 @@ Vec3f N(FallPath)[] = { { 80.0, -160.0, 0.0 }, }; -Vec3f N(UnusedPath)[] = { - { 0.0, 0.0, 0.0 }, - { 25.0, -80.0, 0.0 }, - { 50.0, -100.0, 0.0 }, - { 70.0, -100.0, 0.0 }, -}; - EvtScript N(EVS_PlayerFalling) = { Thread Wait(5) diff --git a/src/world/area_trd/trd_06/trd_06_1_main.c b/src/world/area_trd/trd_06/trd_06_1_main.c index 1cfaab2fb4f..ad7f2120963 100644 --- a/src/world/area_trd/trd_06/trd_06_1_main.c +++ b/src/world/area_trd/trd_06/trd_06_1_main.c @@ -153,7 +153,6 @@ EvtScript N(EVS_Main) = { ExecWait(N(EVS_MakeEntities)) BindTrigger(Ref(N(EVS_ExitDoors_trd_04_5)), TRIGGER_WALL_PRESS_A, COLLIDER_ttw, 1, 0) Call(GetEntryID, LVar0) - Switch(LVar0) //@bug unterminated switch IfLe(LVar0, trd_06_ENTRY_1) IfEq(GF_TRD06_BombedWall, FALSE) BindTrigger(Ref(N(EVS_BombWall_Cell)), TRIGGER_POINT_BOMB, Ref(N(BombPos_CellWall)), 1, 0) diff --git a/src/world/area_trd/trd_06/trd_06_2_falling.c b/src/world/area_trd/trd_06/trd_06_2_falling.c index b9a3eb4d6f5..90e9df4cbe1 100644 --- a/src/world/area_trd/trd_06/trd_06_2_falling.c +++ b/src/world/area_trd/trd_06/trd_06_2_falling.c @@ -239,48 +239,6 @@ EvtScript N(EVS_PartnerFalling) = { End }; -EvtScript N(EVS_Unused_GetUp) = { - Call(N(InitializeGetUp)) - Thread - Loop(11) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar1, 1000) - Call(N(SetFallingSpritePos), LVar0, LVar1, LVar2) - Wait(1) - EndLoop - EndThread - Thread - Call(MakeLerp, 210, 360, 10, EASING_COS_IN_OUT) - Label(0) - Call(UpdateLerp) - Call(N(SetFallingSpriteRot), 0, Float(0.0), Float(0.0), LVar0) - Wait(1) - IfEq(LVar1, 1) - Goto(0) - EndIf - EndThread - Wait(1) - Call(SetPlayerJumpscale, Float(1.0)) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(PlayerJump, LVar0, -1000, LVar2, 10) - Thread - Call(MakeLerp, 150, 0, 10, EASING_COS_IN_OUT) - Label(1) - Call(UpdateLerp) - Call(SetNpcRotation, NPC_PARTNER, 0, 0, LVar0) - Wait(1) - IfEq(LVar1, 1) - Goto(1) - EndIf - EndThread - Wait(1) - Call(SetNpcJumpscale, NPC_PARTNER, Float(1.0)) - Call(GetNpcPos, NPC_PARTNER, LVar0, LVar1, LVar2) - Call(NpcJump0, NPC_PARTNER, LVar0, 0, LVar2, 10) - Return - End -}; - EvtScript N(EVS_Scene_FallIntoCell) = { Call(UseSettingsFrom, CAM_DEFAULT, 0, 0, 0) Call(SetPanTarget, CAM_DEFAULT, 0, 0, 0) diff --git a/src/world/area_trd/trd_06/trd_06_4_npc_koopa_bros.c b/src/world/area_trd/trd_06/trd_06_4_npc_koopa_bros.c index 76abb1b8909..a2b9fefcb86 100644 --- a/src/world/area_trd/trd_06/trd_06_4_npc_koopa_bros.c +++ b/src/world/area_trd/trd_06/trd_06_4_npc_koopa_bros.c @@ -24,13 +24,6 @@ NpcSettings N(NpcSettings_KoopaBros) = { .actionFlags = AI_ACTION_LOOK_AROUND_DURING_LOITER, }; -NpcSettings N(NpcSettings_Unused) = { - .height = 42, - .radius = 24, - .level = ACTOR_LEVEL_NONE, - .ai = &N(EVS_NpcAI_KoopaBros), -}; - EvtScript N(EVS_Scene_ImprisonedKoopaBros) = { Wait(60) Call(EnableNpcAI, NPC_KoopaBros_Red, FALSE) diff --git a/src/world/area_trd/trd_10/trd_10_1_main.c b/src/world/area_trd/trd_10/trd_10_1_main.c index 778fbc1277a..3a43159e8f8 100644 --- a/src/world/area_trd/trd_10/trd_10_1_main.c +++ b/src/world/area_trd/trd_10/trd_10_1_main.c @@ -118,7 +118,6 @@ EvtScript N(EVS_ExitDoors_trd_09_1) = { Exec(ExitDoubleDoor) Wait(17) Call(GotoMap, Ref("trd_09"), trd_09_ENTRY_1) - EndIf //@bug unmatched endif Wait(100) Return End diff --git a/src/world/area_tst/tst_10/tst_10_1_main.c b/src/world/area_tst/tst_10/tst_10_1_main.c index ad8090e704c..ccce2d2563d 100644 --- a/src/world/area_tst/tst_10/tst_10_1_main.c +++ b/src/world/area_tst/tst_10/tst_10_1_main.c @@ -103,22 +103,6 @@ EvtScript N(EVS_Main) = { End }; -TweesterPath N(DefaultTweesterPath) = { - -65, 0, 217, - -262, 0, -64, - 57, 0, -286, - 327, 0, 8, - TWEESTER_PATH_LOOP - }; - - TweesterPath* N(UnusedTweesterPaths)[] = { - &N(DefaultTweesterPath), - &N(DefaultTweesterPath), - &N(DefaultTweesterPath), - &N(DefaultTweesterPath), - PTR_LIST_END -}; - EvtScript N(EVS_MakeEntities) = { Call(MakeEntity, Ref(Entity_HeartBlock), -13, 60, -50, 0, MAKE_ENTITY_END) Call(MakeEntity, Ref(Entity_HiddenPanel), -111, 0, -55, 0, MODEL_o137, MAKE_ENTITY_END) diff --git a/src/world/area_tst/tst_13/tst_13.h b/src/world/area_tst/tst_13/tst_13.h index 9bb0820885b..9d067194f97 100644 --- a/src/world/area_tst/tst_13/tst_13.h +++ b/src/world/area_tst/tst_13/tst_13.h @@ -9,27 +9,27 @@ #include "mapfs/tst_13_shape.h" #include "mapfs/tst_13_hit.h" -#include "sprite/npc/WorldBombette.h" -#include "sprite/npc/WorldParakarry.h" -#include "sprite/npc/WorldBow.h" -#include "sprite/npc/WorldWatt.h" -#include "sprite/npc/WorldSushie.h" -#include "sprite/npc/WorldLakilester.h" -#include "sprite/npc/WorldGoombario.h" -#include "sprite/npc/WorldKooper.h" -#include "sprite/npc/Koopa.h" +// #include "sprite/npc/WorldBombette.h" +// #include "sprite/npc/WorldParakarry.h" +// #include "sprite/npc/WorldBow.h" +// #include "sprite/npc/WorldWatt.h" +// #include "sprite/npc/WorldSushie.h" +// #include "sprite/npc/WorldLakilester.h" +// #include "sprite/npc/WorldGoombario.h" +// #include "sprite/npc/WorldKooper.h" +// #include "sprite/npc/Koopa.h" #define NAMESPACE tst_13 enum { - NPC_00 = 0, - NPC_01 = 1, - NPC_02 = 2, - NPC_03 = 3, - NPC_04 = 4, - NPC_05 = 5, - NPC_06 = 6, - NPC_07 = 7, - NPC_08 = 8, - NPC_09 = 9, + NPC_00 = 0, // King Boo 1 + NPC_01 = 1, // King Boo 2 + NPC_02 = 2, // King Boo 3 + NPC_03 = 3, // King Boo 4 + NPC_04 = 4, // King Boo 5 + NPC_05 = 5, // King Boo 6 + NPC_06 = 6, // King Boo 7 + NPC_07 = 7, // King Boo 8 + NPC_08 = 8, // King Boo 9 + NPC_09 = 9, // King Boo 10 }; diff --git a/src/world/area_tst/tst_13/tst_13_1_main.c b/src/world/area_tst/tst_13/tst_13_1_main.c index e5fc3f0b724..89915eec7f6 100644 --- a/src/world/area_tst/tst_13/tst_13_1_main.c +++ b/src/world/area_tst/tst_13/tst_13_1_main.c @@ -1,9 +1,11 @@ #include "tst_13.h" +#include "world/common/npc/KingBoo.h" +#include "world/common/npc/KingBoo.inc.c" -void mdl_project_tex_coords(s32 modelID, Gfx* destGfx, Matrix4f destMtx, void* destVertices); +// void mdl_project_tex_coords(s32 modelID, Gfx* destGfx, Matrix4f destMtx, void* destVertices); extern EvtScript N(EVS_Main); -extern EvtScript N(D_80240510_B1DC70); +// extern EvtScript N(D_80240510_B1DC70); extern NpcGroupList N(DefaultNPCs); EntryList N(Entrances) = { @@ -24,246 +26,419 @@ EvtScript N(EVS_NpcAuxAI_00) = { End }; -EvtScript N(EVS_NpcInteract_00) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldBombette_Idle) +// EvtScript N(EVS_NpcInteract_00) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldBombette_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_01) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldParakarry_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_02) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldBow_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_03) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldWatt_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_04) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldSushie_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_05) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldLakilester_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_06) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldLakilester_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_07) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldLakilester_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_08) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldGoombario_Idle) +// Return +// End +// }; + +// EvtScript N(EVS_NpcInteract_09) = { +// Call(SetNpcSprite, NPC_SELF, ANIM_WorldKooper_Idle) +// Return +// End +// }; + +// NpcSettings N(NpcSettings_00) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_00), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_01) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_01), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_02) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_02), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_03) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_03), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_04) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_04), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_05) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_05), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_06) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_06), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_07) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_07), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_08) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_08), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcSettings N(NpcSettings_09) = { +// .defaultAnim = ANIM_Koopa_Idle, +// .height = 24, +// .radius = 24, +// .otherAI = &N(EVS_NpcAuxAI_00), +// .onInteract = &N(EVS_NpcInteract_09), +// .flags = ENEMY_FLAG_PASSIVE, +// }; + +// NpcData N(NpcData_Testing)[] = { +// { +// .id = NPC_00, +// .pos = { 0.0f, 0.0f, 0.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_00), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_01, +// .pos = { 20.0f, 0.0f, 20.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_01), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_02, +// .pos = { 40.0f, 0.0f, 40.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_02), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_03, +// .pos = { 60.0f, 0.0f, 60.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_03), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_04, +// .pos = { 80.0f, 0.0f, 80.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_04), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_05, +// .pos = { 100.0f, 0.0f, 100.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_05), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_06, +// .pos = { 120.0f, 0.0f, 120.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_06), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_07, +// .pos = { 140.0f, 0.0f, 140.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_07), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_08, +// .pos = { 160.0f, 0.0f, 160.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_08), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// { +// .id = NPC_09, +// .pos = { 180.0f, 0.0f, 180.0f }, +// .yaw = 0, +// .settings = &N(NpcSettings_09), +// .flags = COMMON_PASSIVE_FLAGS, +// .animations = { +// }, +// }, +// }; + +EvtScript N(EVS_NpcInit_KingBoo_00) = { + Call(SetNpcPos, NPC_SELF, 0, 50, 0) Return End }; -EvtScript N(EVS_NpcInteract_01) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldParakarry_Idle) +EvtScript N(EVS_NpcInit_KingBoo_01) = { + Call(SetNpcPos, NPC_SELF, 25, 50, 0) Return End }; -EvtScript N(EVS_NpcInteract_02) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldBow_Idle) +EvtScript N(EVS_NpcInit_KingBoo_02) = { + Call(SetNpcPos, NPC_SELF, 50, 50, 0) Return End }; -EvtScript N(EVS_NpcInteract_03) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldWatt_Idle) +EvtScript N(EVS_NpcInit_KingBoo_03) = { + Call(SetNpcPos, NPC_SELF, 75, 50, 0) Return End }; -EvtScript N(EVS_NpcInteract_04) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldSushie_Idle) +EvtScript N(EVS_NpcInit_KingBoo_04) = { + Call(SetNpcPos, NPC_SELF, 100, 50, 0) Return End }; -EvtScript N(EVS_NpcInteract_05) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldLakilester_Idle) +EvtScript N(EVS_NpcInit_KingBoo_05) = { + Call(SetNpcPos, NPC_SELF, 0, 50, 25) Return End }; -EvtScript N(EVS_NpcInteract_06) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldLakilester_Idle) +EvtScript N(EVS_NpcInit_KingBoo_06) = { + Call(SetNpcPos, NPC_SELF, 0, 50, 50) Return End }; -EvtScript N(EVS_NpcInteract_07) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldLakilester_Idle) +EvtScript N(EVS_NpcInit_KingBoo_07) = { + Call(SetNpcPos, NPC_SELF, 0, 50, 75) Return End }; -EvtScript N(EVS_NpcInteract_08) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldGoombario_Idle) +EvtScript N(EVS_NpcInit_KingBoo_08) = { + Call(SetNpcPos, NPC_SELF, 0, 50, 100) Return End }; -EvtScript N(EVS_NpcInteract_09) = { - Call(SetNpcSprite, NPC_SELF, ANIM_WorldKooper_Idle) +EvtScript N(EVS_NpcInit_KingBoo_09) = { + Call(SetNpcPos, NPC_SELF, 0, 100, 0) Return End }; -NpcSettings N(NpcSettings_00) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_00), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_01) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_01), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_02) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_02), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_03) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_03), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_04) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_04), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_05) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_05), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_06) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_06), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_07) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_07), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_08) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_08), - .flags = ENEMY_FLAG_PASSIVE, -}; - -NpcSettings N(NpcSettings_09) = { - .defaultAnim = ANIM_Koopa_Idle, - .height = 24, - .radius = 24, - .otherAI = &N(EVS_NpcAuxAI_00), - .onInteract = &N(EVS_NpcInteract_09), - .flags = ENEMY_FLAG_PASSIVE, -}; - NpcData N(NpcData_Testing)[] = { { .id = NPC_00, - .pos = { 0.0f, 0.0f, 0.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_00), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_00), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_01, - .pos = { 20.0f, 0.0f, 20.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_01), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_01), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_02, - .pos = { 40.0f, 0.0f, 40.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_02), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_02), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_03, - .pos = { 60.0f, 0.0f, 60.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_03), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_03), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_04, - .pos = { 80.0f, 0.0f, 80.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_04), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_04), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_05, - .pos = { 100.0f, 0.0f, 100.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_05), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_05), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_06, - .pos = { 120.0f, 0.0f, 120.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_06), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_06), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_07, - .pos = { 140.0f, 0.0f, 140.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_07), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_07), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_08, - .pos = { 160.0f, 0.0f, 160.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_08), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_08), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, { .id = NPC_09, - .pos = { 180.0f, 0.0f, 180.0f }, + .pos = { NPC_DISPOSE_LOCATION }, .yaw = 0, - .settings = &N(NpcSettings_09), - .flags = COMMON_PASSIVE_FLAGS, - .animations = { - }, + .init = &N(EVS_NpcInit_KingBoo_09), + .settings = &N(NpcSettings_KingBoo), + .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, + .drops = NO_DROPS, + .animations = KINGBOO_ANIMS, + .tattle = MSG_NONE, }, }; @@ -272,40 +447,40 @@ NpcGroupList N(DefaultNPCs) = { {} }; -#include "world/area_tst/tst_13/shockwave.vtx.inc.c" -#include "world/area_tst/tst_13/shockwave.gfx.inc.c" +// #include "world/area_tst/tst_13/shockwave.vtx.inc.c" +// #include "world/area_tst/tst_13/shockwave.gfx.inc.c" -Gfx N(dummy_gfx)[] = { - gsSPEndDisplayList() -}; +// Gfx N(dummy_gfx)[] = { +// gsSPEndDisplayList() +// }; -s32 N(BuildGfxCallCount) = 0; +// s32 N(BuildGfxCallCount) = 0; -void N(build_gfx_floor)(void) { - Matrix4f sp10; - Matrix4f sp50; - f32 x, y, z; +// void N(build_gfx_floor)(void) { +// Matrix4f sp10; +// Matrix4f sp50; +// f32 x, y, z; - N(BuildGfxCallCount)++; - guTranslateF(sp10, gPlayerStatus.pos.x, 0.0f, gPlayerStatus.pos.z); +// N(BuildGfxCallCount)++; +// guTranslateF(sp10, gPlayerStatus.pos.x, 0.0f, gPlayerStatus.pos.z); - x = (sin_rad(N(BuildGfxCallCount) / 50.0f) * 0.5) + 0.5; - y = SQ(cos_rad(N(BuildGfxCallCount) / 50.0f)) + 0.1; - z = (sin_rad(N(BuildGfxCallCount) / 50.0f) * 0.5) + 0.5; +// x = (sin_rad(N(BuildGfxCallCount) / 50.0f) * 0.5) + 0.5; +// y = SQ(cos_rad(N(BuildGfxCallCount) / 50.0f)) + 0.1; +// z = (sin_rad(N(BuildGfxCallCount) / 50.0f) * 0.5) + 0.5; - guScaleF(sp50, x, y, z); - guMtxCatF(sp50, sp10, sp10); - guMtxF2L(sp10, &gDisplayContext->matrixStack[gMatrixListPos]); - mdl_project_tex_coords(MODEL_o152, N(shockwave_gfx), sp10, NULL); +// guScaleF(sp50, x, y, z); +// guMtxCatF(sp50, sp10, sp10); +// guMtxF2L(sp10, &gDisplayContext->matrixStack[gMatrixListPos]); +// mdl_project_tex_coords(MODEL_o152, N(shockwave_gfx), sp10, NULL); - gDPPipeSync(gMainGfxPos++); - gDPSetCycleType(gMainGfxPos++, G_CYC_1CYCLE); - gDPSetRenderMode(gMainGfxPos++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); - mdl_draw_hidden_panel_surface(&gMainGfxPos, 1); - gSPMatrix(gMainGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gMainGfxPos++, N(shockwave_gfx)); - gSPPopMatrix(gMainGfxPos++, G_MTX_MODELVIEW); -} +// gDPPipeSync(gMainGfxPos++); +// gDPSetCycleType(gMainGfxPos++, G_CYC_1CYCLE); +// gDPSetRenderMode(gMainGfxPos++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2); +// mdl_draw_hidden_panel_surface(&gMainGfxPos, 1); +// gSPMatrix(gMainGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW); +// gSPDisplayList(gMainGfxPos++, N(shockwave_gfx)); +// gSPPopMatrix(gMainGfxPos++, G_MTX_MODELVIEW); +// } s32 N(BetaPanelData)[] = { @@ -321,8 +496,8 @@ EvtScript N(EVS_Main) = { Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) Set(LVar0, Ref(N(BetaPanelData))) Exec(N(EVS_BetaPanel_Setup)) - Call(SetModelCustomGfx, MODEL_o152, CUSTOM_GFX_0, -1) - Call(SetCustomGfxBuilders, CUSTOM_GFX_0, 0, Ref(N(build_gfx_floor))) + // Call(SetModelCustomGfx, MODEL_o152, CUSTOM_GFX_0, -1) + // Call(SetCustomGfxBuilders, CUSTOM_GFX_0, 0, Ref(N(build_gfx_floor))) Return End }; diff --git a/src/world/common/atomic/ToadHouse.data.inc.c b/src/world/common/atomic/ToadHouse.data.inc.c index 923200cce14..a611688fba8 100644 --- a/src/world/common/atomic/ToadHouse.data.inc.c +++ b/src/world/common/atomic/ToadHouse.data.inc.c @@ -40,12 +40,12 @@ EvtScript N(EVS_ToadHouse_Unk2) = { End }; -#ifndef TOADHOUSE_ANIM_TALK -#define TOADHOUSE_ANIM_TALK ANIM_Toad_Red_Talk +#ifndef ANIM_ShiverToad_Red_Talk +#define ANIM_ShiverToad_Red_Talk ANIM_Toad_Red_Talk #endif -#ifndef TOADHOUSE_ANIM_IDLE -#define TOADHOUSE_ANIM_IDLE ANIM_Toad_Red_Idle +#ifndef ANIM_ShiverToad_Red_Idle +#define ANIM_ShiverToad_Red_Idle ANIM_Toad_Red_Idle #endif EvtScript N(EVS_NpcInteract_ToadHouseKeeper) = { @@ -61,14 +61,14 @@ EvtScript N(EVS_NpcInteract_ToadHouseKeeper) = { IfEq(LVar1, 0) Set(LVar8, LVar0) EndIf - Call(SpeakToPlayer, NPC_SELF, TOADHOUSE_ANIM_TALK, TOADHOUSE_ANIM_IDLE, 0, LVar8) + Call(SpeakToPlayer, NPC_SELF, ANIM_ShiverToad_Red_Talk, ANIM_ShiverToad_Red_Idle, 0, LVar8) Call(ShowChoice, MSG_Choice_0006) Wait(3) IfEq(LVar0, 1) - Call(ContinueSpeech, NPC_SELF, TOADHOUSE_ANIM_TALK, TOADHOUSE_ANIM_IDLE, 0, LVar9) + Call(ContinueSpeech, NPC_SELF, ANIM_ShiverToad_Red_Talk, ANIM_ShiverToad_Red_Idle, 0, LVar9) Return EndIf - Call(ContinueSpeech, NPC_SELF, TOADHOUSE_ANIM_TALK, TOADHOUSE_ANIM_IDLE, 0, LVarA) + Call(ContinueSpeech, NPC_SELF, ANIM_ShiverToad_Red_Talk, ANIM_ShiverToad_Red_Idle, 0, LVarA) Call(SetPlayerJumpscale, 1) Call(DisablePlayerPhysics, TRUE) Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) @@ -108,7 +108,7 @@ EvtScript N(EVS_NpcInteract_ToadHouseKeeper) = { ExecWait(N(EVS_ToadHouse_ReturnFromRest)) Call(DisablePlayerPhysics, FALSE) Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(SpeakToPlayer, NPC_SELF, TOADHOUSE_ANIM_TALK, TOADHOUSE_ANIM_IDLE, 0, LVarB) + Call(SpeakToPlayer, NPC_SELF, ANIM_ShiverToad_Red_Talk, ANIM_ShiverToad_Red_Idle, 0, LVarB) Call(N(ToadHouse_ShowWorldStatusBar)) Return End diff --git a/src/world/common/complete/ConsumableItemChoice.inc.c b/src/world/common/complete/ConsumableItemChoice.inc.c new file mode 100644 index 00000000000..6581fd4044a --- /dev/null +++ b/src/world/common/complete/ConsumableItemChoice.inc.c @@ -0,0 +1,109 @@ +#ifndef _COMMON_CONSUMABLE_CHOICE_ +#define _COMMON_CONSUMABLE_CHOICE_ + +#include "common.h" +#include "sprite/player.h" + +static s32 N(ItemChoice_List)[ITEM_NUM_CONSUMABLES + 1]; + +#ifndef _CHOICE_SUPPORT_ +#define _CHOICE_SUPPORT_ + +s32 N(ItemChoice_HasSelectedItem) = 0; +s32 N(ItemChoice_SelectedItemID) = 0; + +#include "world/common/todo/GetNpcCollisionHeight.inc.c" +#include "world/common/todo/AddPlayerHandsOffset.inc.c" + +API_CALLABLE(N(ItemChoice_WaitForSelection)) { + Bytecode* args = script->ptrReadPos; + + if (isInitialCall) { + N(ItemChoice_HasSelectedItem) = FALSE; + } + + if (N(ItemChoice_HasSelectedItem)) { + N(ItemChoice_HasSelectedItem) = FALSE; + evt_set_variable(script, *args++, N(ItemChoice_SelectedItemID)); + return ApiStatus_DONE2; + } + + return ApiStatus_BLOCK; +} + +API_CALLABLE(N(ItemChoice_SaveSelected)) { + Bytecode* args = script->ptrReadPos; + + N(ItemChoice_SelectedItemID) = evt_get_variable(script, *args); + N(ItemChoice_HasSelectedItem) = TRUE; + return ApiStatus_DONE2; +} + +#endif + +API_CALLABLE(N(BuildItemChoiceList)) { + Bytecode* args = script->ptrReadPos; + s32* allowedItemList = (s32*)evt_get_variable(script, *args++); + s32 pos; + s32 i; + + if (allowedItemList != NULL) { + for (i = 0; allowedItemList[i] != ITEM_NONE; i++) { + N(ItemChoice_List)[i] = allowedItemList[i]; + } + N(ItemChoice_List)[i] = ITEM_NONE; + } else { + s32 pos = 0; + for (i = 0; i < NUM_ITEMS; i++) { + if (item_is_key(i)) { + N(ItemChoice_List)[pos++] = i; + } + } + N(ItemChoice_List)[pos] = ITEM_NONE; + } + return ApiStatus_DONE2; +} + +EvtScript N(EVS_ItemChoicePopup) = { + Set(LVar9, LVar1) + Call(ShowConsumableChoicePopup) + Set(LVarA, LVar0) + Switch(LVar0) + CaseEq(0) + CaseEq(-1) + CaseDefault + Call(RemoveItemAt, LVar1) + Call(GetPlayerPos, LVar3, LVar4, LVar5) + Call(N(AddPlayerHandsOffset), LVar3, LVar4, LVar5) + Call(MakeItemEntity, LVar0, LVar3, LVar4, LVar5, ITEM_SPAWN_MODE_DECORATION, 0) + Call(SetPlayerAnimation, ANIM_MarioW1_TakeItem) + Wait(30) + Call(SetPlayerAnimation, ANIM_Mario1_Idle) + Call(RemoveItemEntity, LVar0) + EndSwitch + Call(N(ItemChoice_SaveSelected), LVarA) + Call(CloseChoicePopup) + Unbind + Return + End +}; + +EvtScript N(EVS_ChooseItem) = { + Call(N(BuildItemChoiceList), LVar0) + BindPadlock(Ref(N(EVS_ItemChoicePopup)), TRIGGER_FORCE_ACTIVATE, 0, Ref(N(ItemChoice_List)), 0, 1) + Call(N(ItemChoice_WaitForSelection), LVar0) + Return + End +}; + +#define EVT_CHOOSE_ANY_CONSUMABLE(unkMode) \ + Set(LVar0, NULL) \ + Set(LVar1, unkMode) \ + ExecWait(N(EVS_ChooseItem)) + +#define EVT_CHOOSE_CONSUMABLE_FROM(itemList, unkMode) \ + Set(LVar0, Ref(itemList)) \ + Set(LVar1, unkMode) \ + ExecWait(N(EVS_ChooseItem)) + +#endif diff --git a/src/world/common/complete/GiveReward.inc.c b/src/world/common/complete/GiveReward.inc.c index d8a72968ff5..a79003d63bc 100644 --- a/src/world/common/complete/GiveReward.inc.c +++ b/src/world/common/complete/GiveReward.inc.c @@ -3,88 +3,26 @@ #include "common.h" -static s32** N(varStash) = NULL; - -// TODO extracted from world/common/todo/StashVars to reduce warnings (for now) -API_CALLABLE(N(StashVars)) { - //static s32** varTable = NULL; - s32 i; - - if (N(varStash) == NULL) { - N(varStash) = heap_malloc(sizeof(script->varTable)); - - for (i = 0; i < ARRAY_COUNT(script->varTable); i++) { - N(varStash)[i] = (s32*) script->varTable[i]; - } - } else { - for (i = 0; i < ARRAY_COUNT(script->varTable); i++) { - script->varTable[i] = (s32) N(varStash)[i]; - } - - heap_free(N(varStash)); - N(varStash) = NULL; - } - - return ApiStatus_DONE2; -} - -#include "world/common/todo/GetItemName.inc.c" - EvtScript N(GiveItemReward) = { - Call(ShowGotItem, LVar0, ITEM_TYPE_KEY, 0) - Return + Call(ShowGotItem, LVar0, TRUE, 0) Return End }; EvtScript N(GiveCoinReward) = { - Call(ShowGotItem, LVar0, ITEM_TYPE_KEY, ITEM_PICKUP_FLAG_1_COIN) - Return + Call(ShowGotItem, LVar0, TRUE, ITEM_PICKUP_FLAG_1_COIN) Return End }; -#define EVT_GIVE_KEY_REWARD(itemID) \ - Set(LVar0, itemID) \ - Set(LVar1, ITEM_TYPE_KEY) \ - ExecWait(N(GiveItemReward)) \ - Call(AddKeyItem, itemID) - -#define EVT_GIVE_BADGE_REWARD(itemID) \ +#define EVT_GIVE_REWARD(itemID) \ Set(LVar0, itemID) \ - Set(LVar1, ITEM_TYPE_BADGE) \ ExecWait(N(GiveItemReward)) \ - Call(AddBadge, itemID, LVar0) - -#define EVT_GIVE_BADGE_REWARD_ALT(itemID, outIdx) \ - Set(LVar0, itemID) \ - Set(LVar1, ITEM_TYPE_BADGE) \ - ExecWait(N(GiveItemReward)) \ - Call(AddBadge, LVar0, outIdx) - -#define EVT_GIVE_CONSUMABLE_REWARD(itemID) \ - Set(LVar0, itemID) \ - Set(LVar1, ITEM_TYPE_CONSUMABLE) \ - ExecWait(N(GiveItemReward)) \ - Call(AddItem, LVar0, LVar1) - -#define EVT_GIVE_CONSUMABLE_REWARD_ALT(itemID) \ - Set(LVar0, itemID) \ - Set(LVar1, ITEM_TYPE_CONSUMABLE) \ - ExecWait(N(GiveItemReward)) \ - Call(AddItem, itemID, LVar0) + Call(AddItem, itemID, LVar1) #define EVT_GIVE_STAR_PIECE() \ Set(LVar0, ITEM_STAR_PIECE) \ - Set(LVar1, ITEM_TYPE_STAR_PIECE) \ ExecWait(N(GiveItemReward)) \ Call(AddStarPieces, 1) - -#define EVT_GIVE_COIN() \ - Set(LVar0, ITEM_COIN) \ - Set(LVar1, 0) \ - ExecWait(N(GiveCoinReward)) \ - Call(AddCoin, 1) - #endif diff --git a/src/world/common/complete/KeyItemChoice.inc.c b/src/world/common/complete/KeyItemChoice.inc.c index c7171769656..214c986f988 100644 --- a/src/world/common/complete/KeyItemChoice.inc.c +++ b/src/world/common/complete/KeyItemChoice.inc.c @@ -41,7 +41,27 @@ API_CALLABLE(N(ItemChoice_SaveSelected)) { #endif -#include "world/common/atomic/MakeKeyChoice.inc.c" +API_CALLABLE(N(BuildKeyItemChoiceList)) { + Bytecode* args = script->ptrReadPos; + s32* allowedItemList = (s32*)evt_get_variable(script, *args++); + s32 i; + + if (allowedItemList != NULL) { + for (i = 0; allowedItemList[i] != ITEM_NONE; i++) { + N(KeyItemChoiceList)[i] = allowedItemList[i]; + } + N(KeyItemChoiceList)[i] = ITEM_NONE; + } else { + s32 pos = 0; + for (i = 0; i < NUM_ITEMS; i++) { + if (item_is_key(i)) { + N(KeyItemChoiceList)[pos++] = i; + } + } + N(KeyItemChoiceList)[pos] = ITEM_NONE; + } + return ApiStatus_DONE2; +} EvtScript N(EVS_KeyItemChoicePopup) = { Set(LVar9, LVar1) diff --git a/src/world/common/complete/LetterDelivery.inc.c b/src/world/common/complete/LetterDelivery.inc.c index 54107212fc9..8be97fb8eb0 100644 --- a/src/world/common/complete/LetterDelivery.inc.c +++ b/src/world/common/complete/LetterDelivery.inc.c @@ -143,7 +143,7 @@ EvtScript N(EVS_DoLetterDelivery) = { EndIf Call(N(LetterDelivery_SaveNpcAnim)) Call(GetCurrentPartnerID, LVar0) - Call(FindKeyItem, LVar5, LVar1) + Call(FindItem, LVar5, LVar1) IfEq(LVar0, PARTNER_PARAKARRY) IfNe(LVar1, -1) Call(DisablePartnerAI, 0) @@ -173,7 +173,7 @@ EvtScript N(EVS_DoLetterDelivery) = { EndIf Call(EnablePartnerAI) IfNe(LVar6, ITEM_NONE) - EVT_GIVE_KEY_REWARD(LVar6) + EVT_GIVE_REWARD(LVar6) EndIf Set(LVarC, DELIVERY_ACCEPTED) EndSwitch diff --git a/src/world/common/complete/Quizmo.inc.c b/src/world/common/complete/Quizmo.inc.c index 3dfc464536d..86ee307fcfe 100644 --- a/src/world/common/complete/Quizmo.inc.c +++ b/src/world/common/complete/Quizmo.inc.c @@ -37,12 +37,7 @@ extern u8 MessagePlural_de[]; #endif BSS s32 N(Quizmo_Worker); -// needed for kmr_02 -#ifndef QUIZMO_PRE_STATIC_PAD -MAP_STATIC_PAD(1,quizmo_pre_array); -#endif BSS s32 N(Quizmo_ScriptArray)[5]; -MAP_STATIC_PAD(1,quizmo_post_array); BSS EffectInstance* N(Quizmo_StageEffect); BSS EffectInstance* N(Quizmo_AudienceEffect); BSS EffectInstance* N(Quizmo_VannaTEffect); diff --git a/src/world/common/enemy/FrostClubba_Multi.inc.c b/src/world/common/enemy/FrostClubba_Multi.inc.c index 237267e942f..34b535f6d15 100644 --- a/src/world/common/enemy/FrostClubba_Multi.inc.c +++ b/src/world/common/enemy/FrostClubba_Multi.inc.c @@ -143,7 +143,7 @@ EvtScript N(EVS_NpcAI_FrostClubba_Napping) = { NpcSettings N(NpcSettings_FrostClubba_Napping) = { .height = 36, .radius = 34, - .level = ACTOR_LEVEL_CLUBBA, /// @bug should be ACTOR_LEVEL_WHITE_CLUBBA + .level = ACTOR_LEVEL_WHITE_CLUBBA, .ai = &N(EVS_NpcAI_FrostClubba_Napping), .onHit = &EnemyNpcHit, .onDefeat = &EnemyNpcDefeat, diff --git a/src/world/common/enemy/JungleFuzzy.inc.c b/src/world/common/enemy/JungleFuzzy.inc.c index e8485ce6670..8c1f08a830f 100644 --- a/src/world/common/enemy/JungleFuzzy.inc.c +++ b/src/world/common/enemy/JungleFuzzy.inc.c @@ -3,7 +3,7 @@ NpcSettings N(NpcSettings_JungleFuzzy) = { .height = 20, .radius = 22, - .level = ACTOR_LEVEL_FUZZY, /// @bug should be ACTOR_LEVEL_JUNGLE_FUZZY + .level = ACTOR_LEVEL_JUNGLE_FUZZY, .onHit = &EnemyNpcHit, .onDefeat = &EnemyNpcDefeat, }; diff --git a/src/world/common/enemy/MontyMole_WallAmbush.inc.c b/src/world/common/enemy/MontyMole_WallAmbush.inc.c index 96604c2946f..23f638b6044 100644 --- a/src/world/common/enemy/MontyMole_WallAmbush.inc.c +++ b/src/world/common/enemy/MontyMole_WallAmbush.inc.c @@ -75,11 +75,6 @@ EvtScript N(EVS_NpcAI_MontyMole_WallAmbush) = { End }; -EvtScript N(EVS_NpcAI_MontyMole_WallAmbush_Hole_Unused) = { - Return - End -}; - NpcSettings N(NpcSettings_MontyMole_WallAmbush) = { .height = 24, .radius = 22, diff --git a/src/world/common/enemy/PutridPiranhaSentinel.inc.c b/src/world/common/enemy/PutridPiranhaSentinel.inc.c index 676b4d01066..d1ec5c1691e 100644 --- a/src/world/common/enemy/PutridPiranhaSentinel.inc.c +++ b/src/world/common/enemy/PutridPiranhaSentinel.inc.c @@ -6,9 +6,3 @@ NpcSettings N(NpcSettings_PutridPiranhaSentinel) = { .radius = 24, .level = ACTOR_LEVEL_NONE, }; - -NpcSettings N(NpcSettings_PutridPiranhaSentinel_Unused) = { - .height = 23, - .radius = 19, - .level = ACTOR_LEVEL_NONE, -}; diff --git a/src/world/common/enemy/ai/AvoidPlayerAI.inc.c b/src/world/common/enemy/ai/AvoidPlayerAI.inc.c index 4a52747cd6c..ec3d0ddf9c8 100644 --- a/src/world/common/enemy/ai/AvoidPlayerAI.inc.c +++ b/src/world/common/enemy/ai/AvoidPlayerAI.inc.c @@ -173,14 +173,6 @@ API_CALLABLE(N(AvoidPlayerAI_Main)) { territory.halfHeight = 100.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.01f; - enemy->unk_118 = 0.01f; - #endif - if (isInitialCall || (enemy->aiFlags & ENEMY_AI_FLAG_SUSPEND)) { script->functionTemp[0] = AI_STATE_WANDER_INIT; npc->duration = 0; diff --git a/src/world/common/enemy/ai/ClubbaNappingAI.inc.c b/src/world/common/enemy/ai/ClubbaNappingAI.inc.c index e45b53aa23c..363a452ecf7 100644 --- a/src/world/common/enemy/ai/ClubbaNappingAI.inc.c +++ b/src/world/common/enemy/ai/ClubbaNappingAI.inc.c @@ -33,7 +33,6 @@ void N(ClubbaNappingAI_Init)(Evt* script, MobileAISettings* aiSettings, EnemyDet void N(ClubbaNappingAI_Sleep)(Evt* script, MobileAISettings* aiSettings, EnemyDetectVolume* territory) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - PlayerData* playerData = get_player_data(); s32 shouldWakeUp = FALSE; EffectInstance* emoteTemp; f32 posX, posZ; @@ -52,15 +51,15 @@ void N(ClubbaNappingAI_Sleep)(Evt* script, MobileAISettings* aiSettings, EnemyDe shouldWakeUp = TRUE; } - if (playerData->curPartner == PARTNER_KOOPER) { - if (gPartnerStatus.partnerActionState == playerData->curPartner) { + if (gPlayerData.curPartner == PARTNER_KOOPER) { + if (gPartnerStatus.partnerActionState == gPlayerData.curPartner) { shouldWakeUp = TRUE; } } } - if (((playerData->curPartner == PARTNER_GOOMBARIO) && (gPartnerStatus.partnerActionState != PARTNER_ACTION_NONE)) || - ((playerData->curPartner == PARTNER_BOMBETTE) && (gPartnerStatus.partnerActionState == PARTNER_ACTION_BOMBETTE_2))) { + if (((gPlayerData.curPartner == PARTNER_GOOMBARIO) && (gPartnerStatus.partnerActionState != PARTNER_ACTION_NONE)) || + ((gPlayerData.curPartner == PARTNER_BOMBETTE) && (gPartnerStatus.partnerActionState == PARTNER_ACTION_BOMBETTE_2))) { posX = npc->pos.x; posZ = npc->pos.z; add_vec2D_polar(&posX, &posZ, 0.0f, npc->yaw); diff --git a/src/world/common/enemy/ai/FlyingAI.inc.c b/src/world/common/enemy/ai/FlyingAI.inc.c index 23f2fbbede7..6c896286349 100644 --- a/src/world/common/enemy/ai/FlyingAI.inc.c +++ b/src/world/common/enemy/ai/FlyingAI.inc.c @@ -448,20 +448,8 @@ API_CALLABLE(N(FlyingAI_Main)) { territory.halfHeight = 120.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.0001f; - enemy->unk_118 = 0.0001f; - #endif - if (isInitialCall) { - #ifdef _DEAD_H_ - N(FlyingAI_Init)(npc, (Enemy*)enemy, script, aiSettings); - #else N(FlyingAI_Init)(npc, enemy, script, aiSettings); - #endif } npc->verticalRenderOffset = -2; diff --git a/src/world/common/enemy/ai/FlyingNoAttackAI.inc.c b/src/world/common/enemy/ai/FlyingNoAttackAI.inc.c index 22668fdda65..2cb97ee75c9 100644 --- a/src/world/common/enemy/ai/FlyingNoAttackAI.inc.c +++ b/src/world/common/enemy/ai/FlyingNoAttackAI.inc.c @@ -108,21 +108,8 @@ API_CALLABLE(N(FlyingNoAttackAI_Main)) { territory.halfHeight = 120.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.0001f; - enemy->unk_118 = 0.0001f; - #endif - if (isInitialCall) { - #ifdef _DEAD_H_ - N(FlyingAI_Init)(npc, (Enemy*)enemy, script, aiSettings); - #else N(FlyingAI_Init)(npc, enemy, script, aiSettings); - #endif - script->functionTemp[0] = 0; } npc->verticalRenderOffset = -2; diff --git a/src/world/common/enemy/ai/LakituAI.inc.c b/src/world/common/enemy/ai/LakituAI.inc.c index 8f60b92a1e9..3a486b0b442 100644 --- a/src/world/common/enemy/ai/LakituAI.inc.c +++ b/src/world/common/enemy/ai/LakituAI.inc.c @@ -174,20 +174,8 @@ API_CALLABLE(N(LakituAI_Main)) { territory.halfHeight = 120.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.0001f; - enemy->unk_118 = 0.0001f; - #endif - if (isInitialCall) { - #ifdef _DEAD_H_ - N(FlyingAI_Init)(npc, (Enemy*)enemy, script, aiSettings); - #else N(FlyingAI_Init)(npc, enemy, script, aiSettings); - #endif script->AI_TEMP_STATE = AI_STATE_WANDER_INIT; } npc->verticalRenderOffset = -3; diff --git a/src/world/common/enemy/ai/MeleeHitbox.inc.c b/src/world/common/enemy/ai/MeleeHitbox.inc.c index 24baea7dbef..ffb1129c7b8 100644 --- a/src/world/common/enemy/ai/MeleeHitbox.inc.c +++ b/src/world/common/enemy/ai/MeleeHitbox.inc.c @@ -104,14 +104,6 @@ API_CALLABLE(N(MeleeHitbox_Main)) { Npc* baseNpc; f32 posX, posZ; - #ifdef _DEAD_H_ - hitboxEnemy->unk_108.x = hitboxNpc->pos.x; - hitboxEnemy->unk_108.y = hitboxNpc->pos.y; - hitboxEnemy->unk_108.z = hitboxNpc->pos.z; - hitboxEnemy->unk_114 = 0.0001f; - hitboxEnemy->unk_118 = 0.0001f; - #endif - if (isInitialCall || (hitboxEnemy->aiFlags & ENEMY_AI_FLAG_SUSPEND)) { script->functionTemp[0] = 0; hitboxNpc->duration = 0; @@ -171,13 +163,6 @@ API_CALLABLE(N(MeleeHitbox_Main)) { break; } - #ifdef _DEAD_H_ - if (hitboxEnemy->hitboxIsActive != 0) { - hitboxEnemy->unk_114 = 7.0f; - hitboxEnemy->unk_118 = 1.0f; - } - #endif - return ApiStatus_BLOCK; } diff --git a/src/world/common/enemy/ai/PatrolNoAttackAI.inc.c b/src/world/common/enemy/ai/PatrolNoAttackAI.inc.c index a765e07c8be..b7a7bf6edb6 100644 --- a/src/world/common/enemy/ai/PatrolNoAttackAI.inc.c +++ b/src/world/common/enemy/ai/PatrolNoAttackAI.inc.c @@ -25,14 +25,6 @@ API_CALLABLE(N(PatrolNoAttackAI_Main)) { territory.halfHeight = 65.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.0001f; - enemy->unk_118 = 0.0001f; - #endif - if (isInitialCall || enemy->aiFlags & ENEMY_AI_FLAG_SUSPEND) { script->AI_TEMP_STATE = AI_STATE_PATROL_INIT; npc->duration = 0; diff --git a/src/world/common/enemy/ai/PiranhaPlantAI.inc.c b/src/world/common/enemy/ai/PiranhaPlantAI.inc.c index 65f1e294755..9136f3ce2b9 100644 --- a/src/world/common/enemy/ai/PiranhaPlantAI.inc.c +++ b/src/world/common/enemy/ai/PiranhaPlantAI.inc.c @@ -284,22 +284,13 @@ void N(PiranhaPlantAI_LosePlayer)(Evt* script, MobileAISettings* aiSettings, Ene #include "common.h" #include "npc.h" -#ifdef _DEAD_H_ -void func_8004D8E0(Enemy*); -#endif - s32 N(PiranhaPlantAI_Main)(Evt* script, s32 isInitialCall) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); Bytecode* args = script->ptrReadPos; EnemyDetectVolume territory; - #ifdef _DEAD_H_ - MobileAISettings* npcAISettings = (MobileAISettings*)evt_get_variable(script, *args++); - EnemyDetectVolume* territoryPtr = &territory; - #else EnemyDetectVolume* territoryPtr = &territory; MobileAISettings* npcAISettings = (MobileAISettings*)evt_get_variable(script, *args++); - #endif territory.skipPlayerDetectChance = 0; territory.shape = enemy->territory->wander.detectShape; @@ -310,15 +301,6 @@ s32 N(PiranhaPlantAI_Main)(Evt* script, s32 isInitialCall) { territory.halfHeight = 200.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - // this function doesn't seem to have a known counterpart, perhaps related to the difference in the Enemy struct - func_8004D8E0(enemy); - if (enemy->flags & ENEMY_FLAG_100000) { - enemy->unk_114 = 10.0f; - enemy->unk_118 = 0.7f; - } - #endif - if (isInitialCall || (enemy->aiFlags & ENEMY_AI_FLAG_SUSPEND)) { script->AI_TEMP_STATE = AI_STATE_PIRANHA_PLANT_00; npc->duration = 0; diff --git a/src/world/common/enemy/ai/SpinyAI.inc.c b/src/world/common/enemy/ai/SpinyAI.inc.c index 32736d55aa6..0cfeba6e18b 100644 --- a/src/world/common/enemy/ai/SpinyAI.inc.c +++ b/src/world/common/enemy/ai/SpinyAI.inc.c @@ -28,14 +28,6 @@ API_CALLABLE(N(SpinyAI_Main)) { territory.halfHeight = 65.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.0001f; - enemy->unk_118 = 0.0001f; - #endif - if (isInitialCall) { enemy->varTable[6] = npc->collisionHeight; enemy->aiFlags |= ENEMY_AI_FLAG_8; diff --git a/src/world/common/enemy/ai/TackleAI.inc.c b/src/world/common/enemy/ai/TackleAI.inc.c index 9909c5827a5..f7b98a94a74 100644 --- a/src/world/common/enemy/ai/TackleAI.inc.c +++ b/src/world/common/enemy/ai/TackleAI.inc.c @@ -28,14 +28,6 @@ API_CALLABLE(N(TackleAI_Main)) { territory.halfHeight = 100.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.01f; - enemy->unk_118 = 0.01f; - #endif - if (isInitialCall) { enemy->varTable[6] = npc->collisionHeight; enemy->varTable[8] = 0; diff --git a/src/world/common/enemy/ai/WanderMeleeAI.inc.c b/src/world/common/enemy/ai/WanderMeleeAI.inc.c index f4dac78d9a5..07a50160b8a 100644 --- a/src/world/common/enemy/ai/WanderMeleeAI.inc.c +++ b/src/world/common/enemy/ai/WanderMeleeAI.inc.c @@ -30,14 +30,6 @@ API_CALLABLE(N(WanderMeleeAI_Main)) { territory.halfHeight = 65.0f; territory.detectFlags = 0; - #ifdef _DEAD_H_ - enemy->unk_108.x = npc->pos.x; - enemy->unk_108.y = npc->pos.y; - enemy->unk_108.z = npc->pos.z; - enemy->unk_114 = 0.0001f; - enemy->unk_118 = 0.0001f; - #endif - if (isInitialCall || (enemy->aiFlags & ENEMY_AI_FLAG_SUSPEND)) { script->AI_TEMP_STATE = AI_STATE_WANDER_INIT; npc->duration = 0; diff --git a/src/world/common/entity/Chest.inc.c b/src/world/common/entity/Chest.inc.c index c619c9efc7e..d0e3a3c9d09 100644 --- a/src/world/common/entity/Chest.inc.c +++ b/src/world/common/entity/Chest.inc.c @@ -1,12 +1,5 @@ #include "common.h" -#include "world/common/todo/StashVars.inc.c" -#include "world/common/todo/GetItemName.inc.c" -#include "world/common/todo/SomeItemEntityFunc.inc.c" -#include "world/common/todo/IsItemBadge.inc.c" - -s32** N(varStash) = NULL; - EvtScript N(EVS_Chest_ShowGotItem) = { SetGroup(EVT_GROUP_00) Call(SetTimeFreezeMode, TIME_FREEZE_FULL) @@ -14,7 +7,6 @@ EvtScript N(EVS_Chest_ShowGotItem) = { Call(ShowGotItem, LVar0, FALSE, 0) Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) Return - Return End }; @@ -24,45 +16,16 @@ EvtScript N(EVS_Chest_GetItem) = { IfNe(LVarA, ITEM_NONE) ExecWait(N(EVS_Chest_ShowGotItem)) EndIf - Switch(LVarB) - CaseEq(ITEM_TYPE_CONSUMABLE) - Call(AddItem, LVarA, LVar0) - CaseEq(ITEM_TYPE_KEY) - Call(AddKeyItem, LVarA) - CaseEq(ITEM_TYPE_BADGE) - Call(AddBadge, LVarA, LVar0) - EndSwitch + Call(AddItem, LVarA, LVar0) Wait(15) Call(DisablePlayerInput, FALSE) Return End }; -#define EVT_OPEN_CHEST_CONSUMABLE(item, flag) \ - { \ - Set(LVarA, item) \ - Set(LVarB, ITEM_TYPE_CONSUMABLE) \ - Set(flag, TRUE) \ - ExecWait(N(EVS_Chest_GetItem)) \ - Return \ - End \ - } - - -#define EVT_OPEN_CHEST_KEY(item, flag) \ - { \ - Set(LVarA, item) \ - Set(LVarB, ITEM_TYPE_KEY) \ - Set(flag, TRUE) \ - ExecWait(N(EVS_Chest_GetItem)) \ - Return \ - End \ - } - -#define EVT_OPEN_CHEST_BADGE(item, flag) \ +#define EVT_OPEN_CHEST(item, flag) \ { \ Set(LVarA, item) \ - Set(LVarB, ITEM_TYPE_BADGE) \ Set(flag, TRUE) \ ExecWait(N(EVS_Chest_GetItem)) \ Return \ diff --git a/src/world/common/entity/Pipe.inc.c b/src/world/common/entity/Pipe.inc.c index 5d7485eb894..893cdc08674 100644 --- a/src/world/common/entity/Pipe.inc.c +++ b/src/world/common/entity/Pipe.inc.c @@ -79,11 +79,7 @@ API_CALLABLE(N(Pipe_GetEntryPos)) { evt_set_variable(script, LVar2, ((Vec4f*)*mapSettings->entryList)[index].y); evt_set_variable(script, LVar3, ((Vec4f*)*mapSettings->entryList)[index].z); evt_set_variable(script, LVar4, ((Vec4f*)*mapSettings->entryList)[index].yaw); - #ifdef _DEAD_H_ - osSyncPrintf("[%d] dokan get pos (no=%d) pos=%d, %d, %d, dir=%d\n", - gGameStatusPtr->frameCounter, script->varTable[0], script->varTable[1], script->varTable[2], - script->varTable[3], script->varTable[4]); - #endif + return ApiStatus_DONE2; } diff --git a/src/world/common/entity/SuperBlock.inc.c b/src/world/common/entity/SuperBlock.inc.c index f233ea18d8b..6421749f26c 100644 --- a/src/world/common/entity/SuperBlock.inc.c +++ b/src/world/common/entity/SuperBlock.inc.c @@ -485,7 +485,7 @@ EvtScript N(SuperBlock_OnHit) = { Call(DisablePartnerAI, 0) Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) Call(N(SuperBlock_StartGlowEffect), SUPER_BLOCK_MAPVAR, LVar9) - Call(FindKeyItem, ITEM_ULTRA_STONE, LVarC) + Call(FindItem, ITEM_ULTRA_STONE, LVarC) Call(N(SuperBlock_CountEligiblePartners)) IfEq(LVar0, -1) Call(ShowMessageAtScreenPos, MSG_Menus_00DC, 160, 40) diff --git a/src/world/common/lava_piranha/part2.inc.c b/src/world/common/lava_piranha/part2.inc.c index b841c503e54..1f6e4b9e1de 100644 --- a/src/world/common/lava_piranha/part2.inc.c +++ b/src/world/common/lava_piranha/part2.inc.c @@ -2,8 +2,6 @@ BSS s32 N(VineRenderState); -MAP_STATIC_PAD(1, unk_static_pad); - #define PIRANHA_DMA_ENTRY(name) \ (s32) world_model_anim_kzn_##name##_ROM_START,\ (s32) world_model_anim_kzn_##name##_ROM_END,\ diff --git a/src/world/dead/area_flo/flo.h b/src/world/dead/area_flo/flo.h deleted file mode 100644 index 6e7d0feaae3..00000000000 --- a/src/world/dead/area_flo/flo.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef _WORLD_DEAD_AREA_FLO_FLO_H_ -#define _WORLD_DEAD_AREA_FLO_FLO_H_ - -enum { - AB_FLO_TolielupDialogue = AreaByte(0), - AB_FLO_PetuniaDialogue = AreaByte(1), - AB_FLO_CrystalTreeHitCount = AreaByte(2), - AB_FLO_PoiseKickedOutCount = AreaByte(3), - AB_FLO_TreePuzzle_FirstCorrect = AreaByte(4), - AB_FLO_TreePuzzle_SecondCorrect = AreaByte(5), - AB_FLO_GuardLakituTalkCount = AreaByte(6), - AB_FLO_GuardedMachineHitCount = AreaByte(7), -}; - -enum { - // flo_07 - AF_FLO_PoiseHintDialogue = AreaFlag(5), - AF_FLO_MadeCrystalBerry = AreaFlag(6), - // flo_00 - AF_FLO_BeanstalkFacingRight = AreaFlag(16), - AF_FLO_PlatingInstructionsToggle = AreaFlag(17), - AF_FLO_PinkBubulbDialogueToggle = AreaFlag(18), - AF_FLO_PurpleBubulbDialogueToggle = AreaFlag(19), - AF_FLO_GreenBubulbDialogueToggle = AreaFlag(20), - AF_FLO_YellowBubulbDialogueToggle = AreaFlag(21), - // flo_12 - AF_FLO_GivenCrystalBerry = AreaFlag(22), - // flo_03 - AF_FLO_IsUnderground_Mole_01 = AreaFlag(23), - AF_FLO_IsUnderground_Mole_02 = AreaFlag(24), - AF_FLO_IsUnderground_Mole_03 = AreaFlag(25), - AF_FLO_IsUnderground_Mole_04 = AreaFlag(26), - AF_FLO_TreeDrop_RedBerry1 = AreaFlag(27), - AF_FLO_TreeDrop_RedBerry2 = AreaFlag(28), - // flo_08 - AF_FLO_TreeDrop_BlueBerry1 = AreaFlag(29), - AF_FLO_TreeDrop_BlueBerry2 = AreaFlag(30), - // flo_24 - AF_FLO_TreeDrop_BubbleBerry1 = AreaFlag(31), - AF_FLO_TreeDrop_BubbleBerry2 = AreaFlag(32), - // flo_25 - AF_FLO_TreeDrop_YellowBerry1 = AreaFlag(33), - AF_FLO_TreeDrop_YellowBerry2 = AreaFlag(34), - // flo_14 - AF_FLO_PauseBlowingBubbles = AreaFlag(35), - AF_FLO_BlowingBigBubble = AreaFlag(36), - AF_FLO_BigBubbleReady = AreaFlag(37), - // flo_15 - AF_FLO_MetTheSun = AreaFlag(38), - // flo_16 - AF_FLO16_FoundHiddenStarPiece = AreaFlag(39), - // flo_19 - AF_FLO_BeanstalkGrowing = AreaFlag(40), - // flo_16 - AF_FLO_RaisedRedPillar = AreaFlag(41), - AF_FLO_RaisedGreenPillar = AreaFlag(42), - AF_FLO_LoweredPurplePillar = AreaFlag(43), - AF_FLO_RidingBeanstalk = AreaFlag(44), - AF_FLO_BeanstalkFadedOut = AreaFlag(45), -}; - -#endif diff --git a/src/world/dead/area_flo/flo_00/flo_00.h b/src/world/dead/area_flo/flo_00/flo_00.h deleted file mode 100644 index 36ac1972e36..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00.h +++ /dev/null @@ -1,50 +0,0 @@ -// Older version of flo_00 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" - -#include "../flo.h" -#include "mapfs/flo_00_shape.h" -#include "mapfs/flo_00_hit.h" - -#include "sprite/npc/Lakilulu.h" -#include "sprite/npc/WorldLakilester.h" -#include "sprite/npc/WorldParakarry.h" - -enum { - NPC_Dummy_Wisterwood = 0, - NPC_Bubulb_01 = 1, - NPC_Bubulb_02 = 2, - NPC_Bubulb_03 = 3, - NPC_Bubulb_04 = 4, - NPC_Tolielup = 5, - NPC_Klevar = 6, - NPC_Lakilulu = 7, - NPC_Lakilester_Epilogue = 0, - NPC_Lakilulu_Epilogue = 1, - NPC_Parakarry_Epilogue = 2, -}; - -enum { - MV_BeanstalkSceneSync = MapVar(10), - MV_BeanstalkItemEntity = MapVar(11), -}; - -#define NAMESPACE dead_flo_00 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_Scene_Epilogue); -extern EvtScript N(EVS_Interact_Wisterwood); -extern EvtScript N(EVS_Wisterwood_Exit); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_MakeEntities); - -extern EvtScript N(EVS_Scene_SunReturns); -extern EvtScript N(EVS_SetupBeanPatch); -extern EvtScript N(EVS_SetupBeanstalk); -extern EvtScript N(EVS_Enter_Beanstalk); -extern EvtScript N(EVS_Scene_BeanstalkGrewRemark); - -extern NpcGroupList N(DefaultNPCs); -extern NpcGroupList N(EpilogueNPCs); diff --git a/src/world/dead/area_flo/flo_00/flo_00_0_header.c b/src/world/dead/area_flo/flo_00/flo_00_0_header.c deleted file mode 100644 index 665c7cd865f..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00_0_header.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "flo_00.h" - -EntryList N(Entrances) = { - [flo_00_ENTRY_0] { 0.0, 0.0, -310.0, 170.0 }, - [flo_00_ENTRY_1] { -320.0, 0.0, -335.0, 135.0 }, - [flo_00_ENTRY_2] { -470.0, 0.0, 0.0, 90.0 }, - [flo_00_ENTRY_3] { -320.0, 0.0, 335.0, 45.0 }, - [flo_00_ENTRY_4] { 320.0, 0.0, -335.0, 225.0 }, - [flo_00_ENTRY_5] { 465.0, 0.0, 0.0, 270.0 }, - [flo_00_ENTRY_6] { 320.0, 0.0, 335.0, 315.0 }, - [flo_00_ENTRY_7] { -30.0, 0.0, 120.0, 270.0 }, - [flo_00_ENTRY_8] { -30.0, 0.0, 120.0, 270.0 }, - [flo_00_ENTRY_9] { -470.0, 0.0, 0.0, 90.0 }, - [flo_00_ENTRY_A] { 40.0, 0.0, -30.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_00 }, -}; diff --git a/src/world/dead/area_flo/flo_00/flo_00_1_music.c b/src/world/dead/area_flo/flo_00/flo_00_1_music.c deleted file mode 100644 index 0747c927406..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00_1_music.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "flo_00.h" - -EvtScript N(EVS_SetupMusic) = { - Call(GetEntryID, LVar0) - Switch(LVar0) - CaseEq(flo_00_ENTRY_8) - IfNe(AF_FLO_RidingBeanstalk, FALSE) - Call(SetMusicTrack, 0, SONG_MAGIC_BEANSTALK, 1, 8) - Else - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndIf - CaseEq(flo_00_ENTRY_9) - Call(SetMusicTrack, 0, SONG_SUNSHINE_RETURNS, 0, 8) - CaseEq(flo_00_ENTRY_A) - Call(SetMusicTrack, 0, SONG_STAR_SPIRIT_THEME, 1, 8) - Thread - Loop(0) - Wait(1) - IfGe(GB_StoryProgress, STORY_CH6_STAR_SPRIT_DEPARTED) - BreakLoop - EndIf - EndLoop - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndThread - CaseEq(flo_00_ENTRY_B) - Call(FadeInMusic, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 3000, 0, 127) - CaseDefault - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_00/flo_00_2_main.c b/src/world/dead/area_flo/flo_00/flo_00_2_main.c deleted file mode 100644 index 745113ec917..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00_2_main.c +++ /dev/null @@ -1,219 +0,0 @@ -#include "flo_00.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_Wisterwood_Exit) = { - Call(DisablePlayerInput, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittn, COLLIDER_FLAGS_UPPER_MASK) - Call(PlayerMoveTo, 30, -170, 10) - Call(InterpPlayerYaw, 0, 0) - Call(PlaySoundAtCollider, COLLIDER_deilittn, SOUND_WOODEN_DOOR_OPEN, SOUND_SPACE_DEFAULT) - Call(MakeLerp, 0, -100, 20, EASING_QUADRATIC_OUT) - Loop(0) - Call(UpdateLerp) - Call(RotateGroup, MODEL_g27, LVar0, 0, 1, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(func_802D2C14, 1) - Call(PlayerMoveTo, 0, -310, 30) - Call(func_802D2C14, 0) - IfEq(GB_StoryProgress, STORY_CH6_STAR_SPRIT_DEPARTED) - Set(GB_StoryProgress, STORY_CH6_RETURNED_TO_TOAD_TOWN) - EndIf - Call(MakeLerp, -100, 0, 30, EASING_QUADRATIC_IN) - Loop(0) - Call(UpdateLerp) - Call(RotateGroup, MODEL_g27, LVar0, 0, 1, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(PlaySoundAtCollider, COLLIDER_deilittn, SOUND_WOODEN_DOOR_CLOSE, SOUND_SPACE_DEFAULT) - Call(GotoMap, Ref("mac_01"), mac_01_ENTRY_5) - Wait(100) - Return - End -}; - -EvtScript N(EVS_Wisterwood_Enter) = { - Call(DisablePlayerInput, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilittn, COLLIDER_FLAGS_UPPER_MASK) - Call(InterpPlayerYaw, 180, 0) - Call(PlaySoundAtCollider, COLLIDER_deilittn, SOUND_WOODEN_DOOR_OPEN, SOUND_SPACE_DEFAULT) - Call(MakeLerp, 0, -100, 30, EASING_QUADRATIC_IN) - Loop(0) - Call(UpdateLerp) - Call(RotateGroup, MODEL_g27, LVar0, 0, 1, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(func_802D2C14, 1) - Call(PlayerMoveTo, 0, -135, 30) - Call(func_802D2C14, 0) - Call(MakeLerp, -100, 0, 30, EASING_QUADRATIC_IN) - Loop(0) - Call(UpdateLerp) - Call(RotateGroup, MODEL_g27, LVar0, 0, 1, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(PlaySoundAtCollider, COLLIDER_deilittn, SOUND_WOODEN_DOOR_CLOSE, SOUND_SPACE_DEFAULT) - Call(DisablePlayerInput, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_deilittn, COLLIDER_FLAGS_UPPER_MASK) - Return - End -}; - -EvtScript N(EVS_ExitWalk_flo_14_0) = EVT_EXIT_WALK(60, flo_00_ENTRY_1, "flo_14", flo_14_ENTRY_0); -EvtScript N(EVS_ExitWalk_flo_23_0) = EVT_EXIT_WALK(60, flo_00_ENTRY_2, "flo_23", flo_23_ENTRY_0); -EvtScript N(EVS_ExitWalk_flo_25_0) = EVT_EXIT_WALK(60, flo_00_ENTRY_3, "flo_25", flo_25_ENTRY_0); -EvtScript N(EVS_ExitWalk_flo_16_0) = EVT_EXIT_WALK(60, flo_00_ENTRY_4, "flo_16", flo_16_ENTRY_0); -EvtScript N(EVS_ExitWalk_flo_09_0) = EVT_EXIT_WALK(60, flo_00_ENTRY_5, "flo_09", flo_09_ENTRY_0); -EvtScript N(EVS_ExitWalk_flo_08_0) = EVT_EXIT_WALK(60, flo_00_ENTRY_6, "flo_08", flo_08_ENTRY_0); - -MAP_RODATA_PAD(1, exits); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_14_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilinw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_23_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_25_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilisw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_16_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiline, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_09_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_08_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilise, 1, 0) - Return - End -}; - -EvtScript N(EVS_EnterMap) = { - Call(GetLoadType, LVar1) - IfEq(LVar1, LOAD_FROM_FILE_SELECT) - Exec(EnterSavePoint) - Exec(N(EVS_BindExitTriggers)) - Else - Call(GetEntryID, LVar0) - IfNe(LVar0, flo_00_ENTRY_8) - Set(AF_FLO_RidingBeanstalk, FALSE) - EndIf - Switch(LVar0) - CaseEq(flo_00_ENTRY_0) - Thread - ExecWait(N(EVS_Wisterwood_Enter)) - Exec(N(EVS_BindExitTriggers)) - EndThread - CaseRange(flo_00_ENTRY_1, flo_00_ENTRY_6) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - CaseEq(flo_00_ENTRY_7) - Thread - ExecWait(N(EVS_Scene_BeanstalkGrewRemark)) - Exec(N(EVS_BindExitTriggers)) - EndThread - CaseEq(flo_00_ENTRY_8) - Thread - ExecWait(N(EVS_Enter_Beanstalk)) - Exec(N(EVS_BindExitTriggers)) - EndThread - CaseEq(flo_00_ENTRY_9) - Exec(N(EVS_Scene_SunReturns)) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - CaseEq(flo_00_ENTRY_A) - Exec(N(EVS_BindExitTriggers)) - CaseEq(flo_00_ENTRY_B) - Exec(N(EVS_Scene_Epilogue)) - EndSwitch - EndIf - BindTrigger(Ref(N(EVS_Interact_Wisterwood)), TRIGGER_WALL_PRESS_A, COLLIDER_deilittn, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Set(GF_MAP_FlowerFields, TRUE) - IfLt(GB_StoryProgress, STORY_CH6_GREW_MAGIC_BEANSTALK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o351, COLLIDER_FLAGS_UPPER_MASK) - EndIf - Set(GF_MAC01_RowfBadgesChosen, FALSE) - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_00_ENTRY_B) - Call(MakeNpcs, FALSE, Ref(N(EpilogueNPCs))) - Else - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - EndIf - ExecWait(N(EVS_MakeEntities)) - Call(ParentColliderToModel, COLLIDER_o240, MODEL_o142) - Exec(N(EVS_SetupBeanstalk)) - Exec(N(EVS_SetupBeanPatch)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o129, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o363, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( 150, -270, 410, 170, 0) - EVT_FLOWER_SPAWN_REGION( 115, -450, 250, -270, 0) - EVT_FLOWER_SPAWN_REGION( -330, 220, 45, 410, 0) - EVT_FLOWER_SPAWN_REGION( -420, -260, -140, 160, 0) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitse, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitne, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitsw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitnw, COLLIDER_FLAGS_UPPER_MASK) - Exec(N(EVS_EnterMap)) - Call(GetLoadType, LVar1) - IfNe(LVar1, LOAD_FROM_FILE_SELECT) - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_00_ENTRY_A) - Wait(65) - EndIf - EndIf - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - // thread to manage wisterwood blinking - Thread - Call(EnableTexPanning, MODEL_o47, TRUE) - Set(LVar0, 0) - Label(0) - Call(RandInt, 300, LVar1) - Add(LVar1, 100) - Call(RandInt, 1, LVar2) - Add(LVar2, 1) - Wait(LVar1) - Loop(LVar2) - Call(SetTexPanOffset, TEX_PANNER_C, TEX_PANNER_MAIN, -0x8000, 0) - Wait(2) - Call(SetTexPanOffset, TEX_PANNER_C, TEX_PANNER_MAIN, -0x10000, 0) - Wait(2) - Call(SetTexPanOffset, TEX_PANNER_C, TEX_PANNER_MAIN, -0x18000, 0) - Call(RandInt, 5, LVar3) - Add(LVar3, 2) - Wait(LVar3) - Call(SetTexPanOffset, TEX_PANNER_C, TEX_PANNER_MAIN, -0x10000, 0) - Wait(2) - Call(SetTexPanOffset, TEX_PANNER_C, TEX_PANNER_MAIN, -0x8000, 0) - Wait(2) - Call(SetTexPanOffset, TEX_PANNER_C, TEX_PANNER_MAIN, 0, 0) - Call(RandInt, 5, LVar3) - Add(LVar3, 2) - Wait(LVar3) - EndLoop - Goto(0) - EndThread - Return - End -}; diff --git a/src/world/dead/area_flo/flo_00/flo_00_3_npc.c b/src/world/dead/area_flo/flo_00/flo_00_3_npc.c deleted file mode 100644 index dcc93bc419f..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00_3_npc.c +++ /dev/null @@ -1,795 +0,0 @@ -#include "flo_00.h" -#include "sprite/player.h" - -NpcSettings N(NpcSettings_Dummy) = { - .height = 24, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - -#include "world/common/npc/Bubulb_Patrol.inc.c" -#include "world/common/npc/Tolielup.inc.c" -#include "world/common/npc/StarSpirit.inc.c" - -API_CALLABLE(N(UpgradeStarPowerCh6)) { - set_max_star_power(6); - gPlayerData.curHP = gPlayerData.curMaxHP; - gPlayerData.curFP = gPlayerData.curMaxFP; - sync_status_bar(); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_Scene_SunReturns) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(UseSettingsFrom, CAM_DEFAULT, 50, 0, -200) - Call(SetPanTarget, CAM_DEFAULT, 50, 0, -200) - Call(SetCamDistance, CAM_DEFAULT, 700) - Call(SetCamPitch, CAM_DEFAULT, Float(10.0), Float(-11.0)) - Call(SetCamPosA, CAM_DEFAULT, -27, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, -50) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Call(ShowMessageAtWorldPos, MSG_CH6_00C4, 0, 50, -200) - Wait(10) - Call(GotoMap, Ref("flo_07"), flo_07_ENTRY_1) - Wait(100) - Return - End -}; - -EvtScript N(EVS_Wisterwood_Introduction) = { - Call(DisablePlayerInput, TRUE) - Call(UseSettingsFrom, CAM_DEFAULT, 0, 0, -170) - Call(SetPanTarget, CAM_DEFAULT, 0, 0, -170) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-8.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Wait(75) - Call(ShowMessageAtScreenPos, MSG_CH6_0000, 160, 40) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(SetPlayerJumpscale, Float(1.5)) - Call(PlayerJump1, LVar0, LVar1, LVar2, 12) - Wait(10) - Call(DisablePartnerAI, 0) - Call(InterpPlayerYaw, 270, 0) - Call(InterpNpcYaw, NPC_PARTNER, 270, 0) - Wait(15) - Call(InterpPlayerYaw, 90, 0) - Call(InterpNpcYaw, NPC_PARTNER, 90, 0) - Wait(15) - Call(SetCamDistance, CAM_DEFAULT, 800) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-5.8)) - Call(SetCamPosA, CAM_DEFAULT, -2, 0) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Wait(15) - Call(SpeakToPlayer, NPC_Dummy_Wisterwood, -1, -1, 5, MSG_CH6_0001) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(InterpPlayerYaw, 350, 0) - Wait(15) - Call(ContinueSpeech, NPC_Dummy_Wisterwood, -1, -1, 5, MSG_CH6_0002) - Wait(10) - Call(SetCamDistance, CAM_DEFAULT, 333) - Call(SetCamPitch, CAM_DEFAULT, Float(9.0), Float(-22.0)) - Call(SetCamPosA, CAM_DEFAULT, -2, 0) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(EnablePartnerAI) - Call(func_802D2C14, 1) - Wait(10) - Call(ShowMessageAtWorldPos, MSG_CH6_0003, 0, 70, -200) - Call(SetCamPitch, CAM_DEFAULT, Float(16.5), Float(-11.8)) - Call(SetCamDistance, CAM_DEFAULT, 525) - Call(SetCamPosA, CAM_DEFAULT, -14, 0) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(SetPlayerAnimation, ANIM_MarioW2_SpeakUp) - Wait(20) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(ShowMessageAtWorldPos, MSG_CH6_0004, 0, 50, -200) - Call(SetCamPitch, CAM_DEFAULT, Float(9.0), Float(-22.0)) - Call(SetCamDistance, CAM_DEFAULT, 333) - Call(SetCamPosA, CAM_DEFAULT, -2, 0) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(ShowMessageAtWorldPos, MSG_CH6_0005, 0, 70, -200) - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - Set(GB_StoryProgress, STORY_CH6_ARRIVED_AT_FLOWER_FIELDS) - Call(func_802D2C14, 0) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_Interact_Wisterwood) = { - Call(DisablePlayerInput, TRUE) - Wait(2) - Call(GetPlayerActionState, LVar3) - Set(LVar4, 0) - IfEq(LVar3, ACTION_STATE_IDLE) - Add(LVar4, 1) - EndIf - IfEq(LVar3, ACTION_STATE_WALK) - Add(LVar4, 1) - EndIf - IfEq(LVar3, ACTION_STATE_RUN) - Add(LVar4, 1) - EndIf - IfEq(LVar4, 0) - Call(DisablePlayerInput, FALSE) - Return - EndIf - IfEq(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(ShowMessageAtWorldPos, MSG_CH6_0006, 0, 50, -200) - Set(GB_StoryProgress, STORY_CH6_WISTERWOOD_GAVE_HINT) - Call(DisablePlayerInput, FALSE) - Return - EndIf - IfLt(GB_StoryProgress, STORY_CH6_RETURNED_TO_TOAD_TOWN) - Call(ShowMessageAtWorldPos, MSG_CH6_000D, 0, 50, -200) - Call(ShowChoice, MSG_Choice_001F) - Wait(10) - Switch(LVar0) - CaseEq(0) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - Call(SwitchMessage, MSG_CH6_000E) - CaseLt(STORY_CH6_GOT_FERTILE_SOIL) - Call(SwitchMessage, MSG_CH6_000F) - CaseLt(STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(SwitchMessage, MSG_CH6_0010) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SwitchMessage, MSG_CH6_0011) - CaseLt(STORY_CH6_GREW_MAGIC_BEANSTALK) - Call(SwitchMessage, MSG_CH6_0007) - CaseLt(STORY_CH6_BEGAN_PEACH_MISSION) - Call(SwitchMessage, MSG_CH6_0012) - CaseDefault - Call(SwitchMessage, MSG_CH6_0013) - EndSwitch - CaseEq(1) - Call(CloseMessage) - Exec(N(EVS_Wisterwood_Exit)) - Return - CaseEq(2) - Call(CloseMessage) - EndSwitch - Else - Call(ShowMessageAtWorldPos, MSG_CH6_0014, 0, 50, -200) - Call(ShowChoice, MSG_Choice_001F) - Wait(10) - Switch(LVar0) - CaseEq(0) - Call(SwitchMessage, MSG_CH6_0015) - CaseEq(1) - Call(CloseMessage) - Exec(N(EVS_Wisterwood_Exit)) - Return - CaseEq(2) - Call(CloseMessage) - EndSwitch - EndIf - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_Wisterwood_Farewell) = { - Call(AdjustCam, CAM_DEFAULT, Float(90.0), 0, 600, Float(21.0), Float(-12.0)) - Wait(20) - Call(ShowMessageAtWorldPos, MSG_CH6_000B, 0, 50, -200) - Call(SetPanTarget, CAM_DEFAULT, 0, 0, -30) - Call(SetCamDistance, CAM_DEFAULT, 250) - Call(SetCamPitch, CAM_DEFAULT, Float(25.0), Float(-25.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(ShowMessageAtWorldPos, MSG_CH6_000C, 0, 50, -200) - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - Return - End -}; - -EvtScript N(EVS_NpcInit_Wisterwood) = { - Call(EnableGroup, MODEL_ha, FALSE) - Call(EnableGroup, MODEL_tuta, FALSE) - Call(EnableGroup, MODEL_g54, FALSE) - Call(SetNpcPos, NPC_SELF, 50, 70, -230) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_INVISIBLE, TRUE) - Call(EnableNpcShadow, NPC_SELF, FALSE) - IfLt(GB_StoryProgress, STORY_CH6_ARRIVED_AT_FLOWER_FIELDS) - Exec(N(EVS_Wisterwood_Introduction)) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInteract_Bubulb1) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_Talk, ANIM_Bubulb_Pink_Idle, 0, MSG_CH6_0016) - CaseLt(STORY_CH6_GOT_FERTILE_SOIL) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_Talk, ANIM_Bubulb_Pink_Idle, 0, MSG_CH6_0017) - CaseLt(STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_Talk, ANIM_Bubulb_Pink_Idle, 0, MSG_CH6_0018) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_Talk, ANIM_Bubulb_Pink_Idle, 0, MSG_CH6_0019) - CaseLt(STORY_CH6_STAR_SPIRIT_RESCUED) - Switch(AF_FLO_PinkBubulbDialogueToggle) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_HappyTalk, ANIM_Bubulb_Pink_HappyGentle, 0, MSG_CH6_001A) - Set(AF_FLO_PinkBubulbDialogueToggle, TRUE) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_HappyTalk, ANIM_Bubulb_Pink_HappyGentle, 0, MSG_CH6_001B) - Set(AF_FLO_PinkBubulbDialogueToggle, FALSE) - EndSwitch - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Pink_HappyTalk, ANIM_Bubulb_Pink_HappyGentle, 0, MSG_CH6_001C) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInteract_Bubulb2) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH6_001D) - CaseLt(STORY_CH6_GOT_FERTILE_SOIL) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH6_001E) - CaseLt(STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH6_001F) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH6_0020) - CaseLt(STORY_CH6_STAR_SPIRIT_RESCUED) - Switch(AF_FLO_PurpleBubulbDialogueToggle) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH6_0021) - Set(AF_FLO_PurpleBubulbDialogueToggle, TRUE) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH6_0022) - Set(AF_FLO_PurpleBubulbDialogueToggle, FALSE) - EndSwitch - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Purple_Talk, ANIM_Bubulb_Purple_Idle, 0, MSG_CH6_0023) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInteract_Bubulb_03) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_Talk, ANIM_Bubulb_Green_Idle, 0, MSG_CH6_0024) - CaseLt(STORY_CH6_GOT_FERTILE_SOIL) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_Talk, ANIM_Bubulb_Green_Idle, 0, MSG_CH6_0025) - CaseLt(STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_Talk, ANIM_Bubulb_Green_Idle, 0, MSG_CH6_0026) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_Talk, ANIM_Bubulb_Green_Idle, 0, MSG_CH6_0027) - CaseLt(STORY_CH6_STAR_SPIRIT_RESCUED) - Switch(AF_FLO_GreenBubulbDialogueToggle) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_HappyTalk, ANIM_Bubulb_Green_HappyGentle, 0, MSG_CH6_0028) - Set(AF_FLO_GreenBubulbDialogueToggle, TRUE) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_HappyTalk, ANIM_Bubulb_Green_HappyGentle, 0, MSG_CH6_0029) - Set(AF_FLO_GreenBubulbDialogueToggle, FALSE) - EndSwitch - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Green_HappyTalk, ANIM_Bubulb_Green_HappyGentle, 0, MSG_CH6_002A) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInteract_Bubulb_04) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Yellow_Talk, ANIM_Bubulb_Yellow_Idle, 0, MSG_CH6_002B) - CaseLt(STORY_CH6_GOT_FERTILE_SOIL) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Yellow_Talk, ANIM_Bubulb_Yellow_Idle, 0, MSG_CH6_002C) - CaseLt(STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Yellow_Talk, ANIM_Bubulb_Yellow_Idle, 0, MSG_CH6_002D) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Yellow_Talk, ANIM_Bubulb_Yellow_Idle, 0, MSG_CH6_002E) - CaseLt(STORY_CH6_STAR_SPIRIT_RESCUED) - Switch(AF_FLO_YellowBubulbDialogueToggle) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Yellow_HappyTalk, ANIM_Bubulb_Yellow_HappyGentle, 0, MSG_CH6_002F) - Set(AF_FLO_YellowBubulbDialogueToggle, TRUE) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Yellow_HappyTalk, ANIM_Bubulb_Yellow_HappyGentle, 0, MSG_CH6_0030) - Set(AF_FLO_YellowBubulbDialogueToggle, FALSE) - EndSwitch - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Bubulb_Yellow_HappyTalk, ANIM_Bubulb_Yellow_HappyGentle, 0, MSG_CH6_0031) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_Bubulb_01) = { - Set(AF_FLO_PinkBubulbDialogueToggle, FALSE) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Bubulb1))) - Return - End -}; - -EvtScript N(EVS_NpcInit_Bubulb_02) = { - Set(AF_FLO_PurpleBubulbDialogueToggle, FALSE) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Bubulb2))) - Return - End -}; - -EvtScript N(EVS_NpcInit_Bubulb_03) = { - Set(AF_FLO_GreenBubulbDialogueToggle, FALSE) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Bubulb_03))) - Return - End -}; - -EvtScript N(EVS_NpcInit_Bubulb_04) = { - Set(AF_FLO_YellowBubulbDialogueToggle, FALSE) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Bubulb_04))) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Tolielup) = { - IfEq(GF_FLO00_Met_Tolielup, FALSE) - Call(AdjustCam, CAM_DEFAULT, Float(4.0), -30, 300, Float(20.0), Float(-9.5)) - Set(GF_FLO00_Met_Tolielup, TRUE) - EndIf - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - Switch(AB_FLO_TolielupDialogue) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0035) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 1) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0038) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 2) - CaseEq(2) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0039) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 0) - EndSwitch - CaseLt(STORY_CH6_GOT_CRYSTAL_BERRY) - Switch(AB_FLO_TolielupDialogue) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0036) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 1) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0038) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 2) - CaseEq(2) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0039) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 0) - EndSwitch - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Switch(AB_FLO_TolielupDialogue) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0037) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 1) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0038) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 2) - CaseEq(2) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0039) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 0) - EndSwitch - CaseLt(STORY_CH6_STAR_SPIRIT_RESCUED) - Switch(AB_FLO_TolielupDialogue) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0039) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - Set(AB_FLO_TolielupDialogue, 1) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_0038) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - EndSwitch - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Tolielup_Talk, ANIM_Tolielup_Idle, 0, MSG_CH6_003A) - Call(EndSpeech, NPC_SELF, ANIM_Tolielup_Laugh, ANIM_Tolielup_Laugh, 0) - EndSwitch - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Return - End -}; - -EvtScript N(EVS_NpcInit_Tolielup) = { - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Tolielup))) - Call(SetNpcCollisionSize, NPC_SELF, 65, 50) - Return - End -}; - -EvtScript N(EVS_NpcIdle_Klevar) = { - Loop(0) - Loop(10) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Sub(LVar1, 1) - Call(SetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Wait(1) - EndLoop - Loop(10) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Add(LVar1, 1) - Call(SetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Wait(1) - EndLoop - EndLoop - Return - End -}; - -EvtScript N(EVS_Scene_RescuedKlevar) = { - Call(DisablePartnerAI, 0) - Call(func_802CF56C, 2) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Set(LVar3, LVar0) - Add(LVar3, -50) - Set(LVar4, LVar1) - Add(LVar4, 26) - Call(SetNpcPos, NPC_Klevar, LVar3, LVar4, LVar2) - Call(PlayerFaceNpc, NPC_Klevar, FALSE) - Call(NpcFaceNpc, NPC_PARTNER, NPC_Klevar, 0) - Add(LVar0, -25) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, Float(475.0)) - Call(SetCamPitch, CAM_DEFAULT, 18, -8) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Wait(1) - Call(WaitForPlayerInputEnabled) - Call(DisablePlayerInput, TRUE) - Wait(40) - Call(SpeakToPlayer, NPC_Klevar, ANIM_WorldKlevar_Talk, ANIM_WorldKlevar_Idle, SPEECH_FLAG_200, MSG_CH6_00D8) - Call(SetCamDistance, CAM_DEFAULT, Float(300.0)) - Call(SetCamPitch, CAM_DEFAULT, 18, -9) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(MakeLerp, 0, 360, 10, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(SetNpcRotation, NPC_Klevar, 0, LVar0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(EnableNpcAI, NPC_Klevar, FALSE) - Call(SetNpcAnimation, NPC_Klevar, ANIM_WorldKlevar_Leap) - Wait(20) - Call(SetPlayerAnimation, ANIM_Mario1_UsePower) - Call(PlaySoundAtPlayer, SOUND_RECEIVE_STAR_POWER, SOUND_SPACE_DEFAULT) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Set(LVar3, LVar1) - Add(LVar1, 50) - Add(LVar2, 10) - Add(LVar3, 30) - Loop(5) - PlayEffect(EFFECT_SPARKLES, 3, LVar0, LVar1, LVar2, 20) - Wait(6) - PlayEffect(EFFECT_SPARKLES, 1, LVar0, LVar3, LVar2, 20) - Wait(6) - EndLoop - Wait(20) - Call(PlaySoundAtPlayer, SOUND_GET_STAR_POWER_WAVE, SOUND_SPACE_DEFAULT) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar1, 20) - PlayEffect(EFFECT_ENERGY_ORB_WAVE, 4, LVar0, LVar1, LVar2, 1, 30) - Wait(30) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(SetNpcAnimation, NPC_Klevar, ANIM_WorldKlevar_Idle) - Call(EnableNpcAI, NPC_Klevar, TRUE) - Call(N(UpgradeStarPowerCh6)) - Call(ShowMessageAtScreenPos, MSG_Menus_0196, 160, 40) - Wait(10) - Call(GetNpcPos, NPC_Klevar, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, Float(250.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(SpeakToPlayer, NPC_Klevar, ANIM_WorldKlevar_Talk, ANIM_WorldKlevar_Idle, SPEECH_FLAG_200, MSG_CH6_00D9) - Wait(10) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar0, -25) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, Float(300.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(SpeakToPlayer, NPC_Klevar, ANIM_WorldKlevar_Talk, ANIM_WorldKlevar_Idle, SPEECH_FLAG_200, MSG_CH6_00DA) - Call(SetNpcFlagBits, NPC_Klevar, NPC_FLAG_IGNORE_CAMERA_FOR_YAW, TRUE) - Thread - Loop(25) - Call(GetNpcPos, NPC_Klevar, LVar0, LVar1, LVar2) - PlayEffect(EFFECT_SPARKLES, 4, LVar0, LVar1, LVar2, 20) - Wait(4) - EndLoop - EndThread - Thread - Set(LVar2, 0) - Set(LVar3, 1800) - Call(MakeLerp, LVar2, LVar3, 100, EASING_CUBIC_IN) - Loop(0) - Call(UpdateLerp) - Call(SetNpcRotation, NPC_Klevar, 0, LVar0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndThread - Thread - Call(GetNpcPos, NPC_Klevar, LVar2, LVar3, LVar4) - Set(LVar5, LVar3) - Add(LVar5, 180) - Call(MakeLerp, LVar3, LVar5, 100, EASING_CUBIC_IN) - Loop(0) - Call(UpdateLerp) - Call(SetNpcPos, NPC_Klevar, LVar2, LVar0, LVar4) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(SetNpcPos, NPC_Klevar, NPC_DISPOSE_LOCATION) - EndThread - Thread - Wait(15) - Call(PlaySoundAtNpc, NPC_Klevar, SOUND_STAR_SPIRIT_DEPART_1, SOUND_SPACE_DEFAULT) - EndThread - Wait(10) - Call(SetPlayerAnimation, ANIM_Mario1_LookUp) - Wait(110) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Set(GB_StoryProgress, STORY_CH6_STAR_SPRIT_DEPARTED) - ExecWait(N(EVS_Wisterwood_Farewell)) - Call(EnablePartnerAI) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcInit_Klevar) = { - Call(GetLoadType, LVar1) - IfNe(LVar1, 1) - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_00_ENTRY_A) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Klevar))) - Exec(N(EVS_Scene_RescuedKlevar)) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInteract_Lakilulu) = { - IfLe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_0032) - Else - Call(GetCurrentPartnerID, LVar0) - IfEq(LVar0, PARTNER_LAKILESTER) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_0032) - Wait(10) - Call(DisablePartnerAI, 0) - Call(SpeakToPlayer, NPC_PARTNER, ANIM_WorldLakilester_Shout, ANIM_WorldLakilester_IdleTough, 5, MSG_CH6_0033) - Call(SetNpcAnimation, NPC_PARTNER, ANIM_WorldLakilester_Idle) - Call(EndSpeech, NPC_PARTNER, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 5) - Call(EnablePartnerAI) - Else - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_0034) - EndIf - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakilulu) = { - IfGe(GB_StoryProgress, STORY_CH6_BEGAN_PEACH_MISSION) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Lakilulu))) - Call(SetNpcCollisionSize, NPC_SELF, 36, 28) - Call(SetNpcPos, NPC_SELF, -200, 15, -300) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -NpcData N(NpcData_Wisterwood) = { - .id = NPC_Dummy_Wisterwood, - .pos = { -72.0f, 60.0f, -100.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Wisterwood), - .settings = &N(NpcSettings_Dummy), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = BUBULB_PINK_ANIMS, -}; - -NpcData N(NpcData_Bubulbs)[] = { - { - .id = NPC_Bubulb_01, - .pos = { -59.0f, 0.0f, -40.0f }, - .yaw = 90, - .territory = { - .patrol = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .numPoints = 2, - .points = { - { -59, 0, -40 }, - { -80, 0, -40 }, - }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -59, 0, -40 }, - .detectSize = { 100 }, - } - }, - .init = &N(EVS_NpcInit_Bubulb_01), - .settings = &N(NpcSettings_Bubulb_Patrol), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = NO_DROPS, - .animations = BUBULB_PINK_ANIMS, - .tattle = MSG_NpcTattle_FLO_BubulbA, - }, - { - .id = NPC_Bubulb_02, - .pos = { 67.0f, 0.0f, 85.0f }, - .yaw = 270, - .territory = { - .patrol = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .numPoints = 2, - .points = { - { 67, 0, 85 }, - { 97, 0, 85 }, - }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -59, 0, -40 }, - .detectSize = { 100 }, - } - }, - .init = &N(EVS_NpcInit_Bubulb_02), - .settings = &N(NpcSettings_Bubulb_Patrol), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = NO_DROPS, - .animations = BUBULB_PURPLE_ANIMS, - .tattle = MSG_NpcTattle_FLO_BubulbB, - }, - { - .id = NPC_Bubulb_03, - .pos = { 90.0f, 0.0f, 410.0f }, - .yaw = 90, - .territory = { - .patrol = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .numPoints = 2, - .points = { - { 90, 0, 410 }, - { 120, 0, 410 }, - }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -59, 0, -40 }, - .detectSize = { 100 }, - } - }, - .init = &N(EVS_NpcInit_Bubulb_03), - .settings = &N(NpcSettings_Bubulb_Patrol), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = NO_DROPS, - .animations = BUBULB_GREEN_ANIMS, - .tattle = MSG_NpcTattle_FLO_BubulbC, - }, - { - .id = NPC_Bubulb_04, - .pos = { 200.0f, 0.0f, 430.0f }, - .yaw = 270, - .territory = { - .patrol = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .numPoints = 2, - .points = { - { 200, 0, 430 }, - { 240, 0, 430 }, - }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -59, 0, -40 }, - .detectSize = { 100 }, - } - }, - .init = &N(EVS_NpcInit_Bubulb_04), - .settings = &N(NpcSettings_Bubulb_Patrol), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = NO_DROPS, - .animations = BUBULB_YELLOW_ANIMS, - .tattle = MSG_NpcTattle_FLO_BubulbD, - }, -}; - -NpcData N(NpcData_Tolielup) = { - .id = NPC_Tolielup, - .pos = { -400.0f, 0.0f, 190.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Tolielup), - .settings = &N(NpcSettings_Tolielup), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = TOLIELUP_ANIMS, - .tattle = MSG_NpcTattle_Tolielup, -}; - -NpcData N(NpcData_Klevar) = { - .id = NPC_Klevar, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .init = &N(EVS_NpcInit_Klevar), - .settings = &N(NpcSettings_StarSpirit), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = KLEVAR_ANIMS, -}; - -NpcData N(NpcData_Lakilulu) = { - .id = NPC_Lakilulu, - .pos = { 198.0f, 0.0f, 363.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Lakilulu), - .settings = &N(NpcSettings_Dummy), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_Lakilulu_Idle, - .walk = ANIM_Lakilulu_Idle, - .run = ANIM_Lakilulu_Idle, - .chase = ANIM_Lakilulu_Idle, - .anim_4 = ANIM_Lakilulu_Idle, - .anim_5 = ANIM_Lakilulu_Idle, - .death = ANIM_Lakilulu_Idle, - .hit = ANIM_Lakilulu_Idle, - .anim_8 = ANIM_Lakilulu_Idle, - .anim_9 = ANIM_Lakilulu_Idle, - .anim_A = ANIM_Lakilulu_Idle, - .anim_B = ANIM_Lakilulu_Idle, - .anim_C = ANIM_Lakilulu_Idle, - .anim_D = ANIM_Lakilulu_Idle, - .anim_E = ANIM_Lakilulu_Idle, - .anim_F = ANIM_Lakilulu_Idle, - }, - .tattle = MSG_NpcTattle_Lakilulu, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Wisterwood)), - NPC_GROUP(N(NpcData_Bubulbs)), - NPC_GROUP(N(NpcData_Tolielup)), - NPC_GROUP(N(NpcData_Klevar)), - NPC_GROUP(N(NpcData_Lakilulu)), - {} -}; diff --git a/src/world/dead/area_flo/flo_00/flo_00_4_epilogue.c b/src/world/dead/area_flo/flo_00/flo_00_4_epilogue.c deleted file mode 100644 index 0390dae9b57..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00_4_epilogue.c +++ /dev/null @@ -1,148 +0,0 @@ -#include "flo_00.h" - -NpcSettings N(NpcSettings_Lakilester_Epilogue) = { - .height = 24, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - -#include "world/common/npc/Parakarry.inc.c" - -Vec3f N(D_80245E88_CA3DA8)[] = { - { 266.0f, 20.0f, 322.0f }, - { 310.0f, 30.0f, 312.0f }, - { 346.0f, 90.0f, 300.0f }, - { 400.0f, 200.0f, 287.0f }, -}; - -EvtScript N(EVS_Scene_Epilogue) = { - Call(SetPlayerPos, -400, 0, 200) - Call(SetNpcPos, NPC_PARTNER, -380, 0, 200) - Call(func_802CF56C, 2) - Call(DisablePartnerAI, 0) - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - EVT_VEC3I_SET(LVar0, 230, 0, 350) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-10.0)) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamPosA, CAM_DEFAULT, Float(17.5), Float(35.0)) - Call(SetCamPosB, CAM_DEFAULT, 0, -50) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(70) - Call(InterpNpcYaw, NPC_Lakilester_Epilogue, 90, 0) - Wait(10) - Call(SetNpcAnimation, NPC_Lakilester_Epilogue, ANIM_WorldLakilester_Talk) - Wait(40) - Call(SetNpcAnimation, NPC_Lakilester_Epilogue, ANIM_WorldLakilester_Idle) - Call(SetNpcAnimation, NPC_Parakarry_Epilogue, ANIM_WorldParakarry_Talk) - Wait(40) - Call(SetNpcAnimation, NPC_Parakarry_Epilogue, ANIM_WorldParakarry_Idle) - Call(InterpNpcYaw, NPC_Parakarry_Epilogue, 90, 0) - Call(NpcFlyTo, NPC_Parakarry_Epilogue, 400, 200, 287, 80, -5, EASING_LINEAR) - Call(InterpNpcYaw, NPC_Lakilester_Epilogue, 270, 0) - Wait(40) - Call(FadeOutMusic, 0, 1000) - Call(GotoMap, Ref("sam_11"), sam_11_ENTRY_2) - Wait(100) - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakilester_Epilogue) = { - Call(SetPlayerPos, -400, 0, 200) - Call(SetNpcPos, NPC_PARTNER, -380, 0, 200) - Call(SetNpcPos, NPC_Lakilester_Epilogue, 196, 20, 354) - Call(SetNpcYaw, NPC_Lakilester_Epilogue, 270) - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakilulu_Epilogue) = { - Call(SetNpcPos, NPC_Lakilulu_Epilogue, 163, 20, 370) - Call(SetNpcYaw, NPC_Lakilulu_Epilogue, 90) - Return - End -}; - -EvtScript N(EVS_NpcInit_Parakarry_Epilogue) = { - Call(SetNpcPos, NPC_Parakarry_Epilogue, 266, 20, 322) - Call(SetNpcYaw, NPC_Parakarry_Epilogue, 270) - Return - End -}; - -NpcData N(NpcData_Lakilester_Epilogue)[] = { - { - .id = NPC_Lakilester_Epilogue, - .pos = { 144.0f, 0.0f, 374.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Lakilester_Epilogue), - .settings = &N(NpcSettings_Lakilester_Epilogue), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_WorldLakilester_Idle, - .walk = ANIM_WorldLakilester_Idle, - .run = ANIM_WorldLakilester_Idle, - .chase = ANIM_WorldLakilester_Idle, - .anim_4 = ANIM_WorldLakilester_Idle, - .anim_5 = ANIM_WorldLakilester_Idle, - .death = ANIM_WorldLakilester_Idle, - .hit = ANIM_WorldLakilester_Idle, - .anim_8 = ANIM_WorldLakilester_Idle, - .anim_9 = ANIM_WorldLakilester_Idle, - .anim_A = ANIM_WorldLakilester_Idle, - .anim_B = ANIM_WorldLakilester_Idle, - .anim_C = ANIM_WorldLakilester_Idle, - .anim_D = ANIM_WorldLakilester_Idle, - .anim_E = ANIM_WorldLakilester_Idle, - .anim_F = ANIM_WorldLakilester_Idle, - }, - }, - { - .id = NPC_Lakilulu_Epilogue, - .pos = { 198.0f, 0.0f, 363.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Lakilulu_Epilogue), - .settings = &N(NpcSettings_Lakilester_Epilogue), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_Lakilulu_Idle, - .walk = ANIM_Lakilulu_Idle, - .run = ANIM_Lakilulu_Idle, - .chase = ANIM_Lakilulu_Idle, - .anim_4 = ANIM_Lakilulu_Idle, - .anim_5 = ANIM_Lakilulu_Idle, - .death = ANIM_Lakilulu_Idle, - .hit = ANIM_Lakilulu_Idle, - .anim_8 = ANIM_Lakilulu_Idle, - .anim_9 = ANIM_Lakilulu_Idle, - .anim_A = ANIM_Lakilulu_Idle, - .anim_B = ANIM_Lakilulu_Idle, - .anim_C = ANIM_Lakilulu_Idle, - .anim_D = ANIM_Lakilulu_Idle, - .anim_E = ANIM_Lakilulu_Idle, - .anim_F = ANIM_Lakilulu_Idle, - }, - }, - { - .id = NPC_Parakarry_Epilogue, - .pos = { 266.0f, 0.0f, 322.0f }, - .yaw = 0, - .init = &N(EVS_NpcInit_Parakarry_Epilogue), - .settings = &N(NpcSettings_Parakarry), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = PARAKARRY_ANIMS, - }, -}; - -NpcGroupList N(EpilogueNPCs) = { - NPC_GROUP(N(NpcData_Lakilester_Epilogue)), - {} -}; diff --git a/src/world/dead/area_flo/flo_00/flo_00_5_beanstalk.c b/src/world/dead/area_flo/flo_00/flo_00_5_beanstalk.c deleted file mode 100644 index 5e861706191..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00_5_beanstalk.c +++ /dev/null @@ -1,669 +0,0 @@ -#include "flo_00.h" -#include "sprite/player.h" - -#define BEANSTALK_BASE_X -83 -#define BEANSTALK_BASE_Z 87 - -API_CALLABLE(N(GetPlayerAngles)) { - Bytecode* args = script->ptrReadPos; - s32 var1 = *args++; - s32 var2 = *args++; - - evt_set_variable(script, var1, gPlayerStatus.spriteFacingAngle); - evt_set_variable(script, var2, gPlayerStatus.targetYaw); - - return ApiStatus_DONE2; -} - -API_CALLABLE(N(PlayerRideBeanstalk)) { - f32 temp = evt_get_variable(NULL, script->varTable[2]); - f32 dist = dist2D(BEANSTALK_BASE_X, BEANSTALK_BASE_Z, script->varTable[9], script->varTable[11]); - f32 angle = atan2(BEANSTALK_BASE_X, BEANSTALK_BASE_Z, script->varTable[9], script->varTable[11]); - f32 clamped = clamp_angle(angle - temp); - - temp = sin_deg(clamped); - gPlayerStatus.pos.x = BEANSTALK_BASE_X + (dist * temp); - gPlayerStatus.pos.y = evt_get_variable(NULL, script->varTable[10]) + evt_get_variable(NULL, script->varTable[3]); - temp = cos_deg(clamped); - gPlayerStatus.pos.z = BEANSTALK_BASE_Z - (dist * temp); - - return ApiStatus_DONE2; -} - -API_CALLABLE(N(PartnerRideBeanstalk)) { - Npc* npc = get_npc_by_index(NPC_Dummy_Wisterwood); - f32 temp = evt_get_variable(NULL, script->varTable[2]); - f32 dist = dist2D(BEANSTALK_BASE_X, BEANSTALK_BASE_Z, script->varTable[12], script->varTable[14]); - f32 angle = atan2(BEANSTALK_BASE_X, BEANSTALK_BASE_Z, script->varTable[12], script->varTable[14]); - f32 clamped = clamp_angle(angle - temp); - - temp = sin_deg(clamped); - npc->pos.x = BEANSTALK_BASE_X + (dist * temp); - npc->pos.y = evt_get_variable(NULL, script->varTable[13]) + evt_get_variable(NULL, script->varTable[3]); - temp = cos_deg(clamped); - npc->pos.z = BEANSTALK_BASE_Z - (dist * temp); - - return ApiStatus_DONE2; -} - -#include "common/CosInterpMinMax.inc.c" - -#include "world/common/todo/SyncStatusBar.inc.c" - -API_CALLABLE(N(DisableStatusBar)) { - increment_status_bar_disabled(); - return ApiStatus_DONE2; -} - -API_CALLABLE(N(EnableWorldStatusBar)) { - decrement_status_bar_disabled(); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_SetExteriorVineGrowth) = { - SetF(LVar1, LVar0) // input: expect range from -700 (no growth) to 0 (fully grown) - SubF(LVar1, Float(-700.0)) - DivF(LVar1, Float(100.0)) - SetF(LVar2, LVar1) - MulF(LVar2, Float(100.0)) - IfGt(LVar2, 100) - SetF(LVar1, Float(1.0)) - EndIf - Call(ScaleGroup, MODEL_g35, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o117, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o141, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o140, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o138, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o139, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o143, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o144, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o145, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o146, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o188, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o187, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o186, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o185, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o182, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o183, LVar1, 1, LVar1) - Call(ScaleModel, MODEL_o181, LVar1, 1, LVar1) - Call(TranslateGroup, MODEL_g35, 0, LVar0, 0) - Call(TranslateModel, MODEL_o117, 0, LVar0, 0) - Call(TranslateModel, MODEL_o141, 0, LVar0, 0) - Call(TranslateModel, MODEL_o140, 0, LVar0, 0) - Call(TranslateModel, MODEL_o138, 0, LVar0, 0) - Call(TranslateModel, MODEL_o139, 0, LVar0, 0) - Call(TranslateModel, MODEL_o143, 0, LVar0, 0) - Call(TranslateModel, MODEL_o144, 0, LVar0, 0) - Call(TranslateModel, MODEL_o145, 0, LVar0, 0) - Call(TranslateModel, MODEL_o146, 0, LVar0, 0) - Call(TranslateModel, MODEL_o188, 0, LVar0, 0) - Call(TranslateModel, MODEL_o187, 0, LVar0, 0) - Call(TranslateModel, MODEL_o186, 0, LVar0, 0) - Call(TranslateModel, MODEL_o185, 0, LVar0, 0) - Call(TranslateModel, MODEL_o182, 0, LVar0, 0) - Call(TranslateModel, MODEL_o183, 0, LVar0, 0) - Call(TranslateModel, MODEL_o181, 0, LVar0, 0) - SetF(LVar1, LVar0) - MulF(LVar1, Float(-12.0)) - Call(RotateGroup, MODEL_g35, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o117, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o141, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o140, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o138, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o139, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o143, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o144, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o145, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o146, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o188, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o187, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o186, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o185, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o182, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o183, LVar1, 0, 1, 0) - Call(RotateModel, MODEL_o181, LVar1, 0, 1, 0) - Call(TranslateModel, MODEL_o117, Float(8.122), Float(56.153), Float(1.166)) - Call(TranslateModel, MODEL_o141, Float(-6.8779296875), Float(91.153), Float(1.166)) - Call(TranslateModel, MODEL_o140, Float(13.122), Float(106.153), Float(1.166)) - Call(TranslateModel, MODEL_o138, Float(-9.8779296875), Float(136.153), Float(1.166)) - Call(TranslateModel, MODEL_o139, Float(-7.8779296875), Float(201.153), Float(1.166)) - Call(TranslateModel, MODEL_o143, Float(13.122), Float(221.153), Float(1.166)) - Call(TranslateModel, MODEL_o144, Float(8.127), Float(261.229), Float(1.166)) - Call(TranslateModel, MODEL_o145, Float(-12.8779296875), Float(266.153), Float(1.166)) - Call(TranslateModel, MODEL_o146, Float(8.122), Float(316.153), Float(-13.833984375)) - Call(TranslateModel, MODEL_o188, Float(-10.943359375), Float(391.153), Float(10.566)) - Call(TranslateModel, MODEL_o187, Float(-7.001953125), Float(456.153), Float(0.947)) - Call(TranslateModel, MODEL_o186, Float(12.998), Float(471.153), Float(0.947)) - Call(TranslateModel, MODEL_o185, Float(-10.001953125), Float(501.153), Float(0.947)) - Call(TranslateModel, MODEL_o182, Float(8.003), Float(536.229), Float(0.947)) - Call(TranslateModel, MODEL_o183, Float(12.998), Float(586.153), Float(0.947)) - Call(TranslateModel, MODEL_o181, Float(-13.001953125), Float(631.153), Float(0.947)) - SetF(LVar1, LVar0) - SubF(LVar1, Float(-700.0)) - DivF(LVar1, Float(300.0)) - SetF(LVar2, LVar1) - MulF(LVar2, Float(100.0)) - IfGt(LVar2, 100) - SetF(LVar1, Float(1.0)) - EndIf - Call(ScaleModel, MODEL_o117, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o141, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o140, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o138, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o139, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o143, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o144, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o145, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o146, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o188, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o187, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o186, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o185, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o182, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o183, LVar1, LVar1, LVar1) - Call(ScaleModel, MODEL_o181, LVar1, LVar1, LVar1) - Call(TranslateModel, MODEL_o117, Float(-8.12109375), Float(-56.15234375), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o141, Float(6.879), Float(-91.15234375), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o140, Float(-13.12109375), Float(-106.15234375), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o138, Float(9.879), Float(-136.15234375), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o139, Float(7.879), Float(-201.15234375), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o143, Float(-13.12109375), Float(-221.15234375), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o144, Float(-8.1259765625), Float(-261.228515625), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o145, Float(12.879), Float(-266.15234375), Float(-1.1650390625)) - Call(TranslateModel, MODEL_o146, Float(-8.12109375), Float(-316.15234375), Float(13.835)) - Call(TranslateModel, MODEL_o188, Float(10.944), Float(-391.15234375), Float(-10.5654296875)) - Call(TranslateModel, MODEL_o187, Float(7.003), Float(-456.15234375), Float(-0.9462890625)) - Call(TranslateModel, MODEL_o186, Float(-12.9970703125), Float(-471.15234375), Float(-0.9462890625)) - Call(TranslateModel, MODEL_o185, Float(10.003), Float(-501.15234375), Float(-0.9462890625)) - Call(TranslateModel, MODEL_o182, Float(-8.001953125), Float(-536.228515625), Float(-0.9462890625)) - Call(TranslateModel, MODEL_o183, Float(-12.9970703125), Float(-586.15234375), Float(-0.9462890625)) - Call(TranslateModel, MODEL_o181, Float(13.003), Float(-631.15234375), Float(-0.9462890625)) - Return - End -}; - -EvtScript N(EVS_SetInteriorVineGrowth) = { - SetF(LVar1, LVar0) // input: expect range from -700 (no growth) to 0 (fully grown) - SubF(LVar1, Float(-700.0)) - DivF(LVar1, Float(100.0)) - SetF(LVar2, LVar1) - MulF(LVar2, Float(100.0)) - IfGt(LVar2, 100) - SetF(LVar1, Float(1.0)) - EndIf - Call(ScaleGroup, MODEL_g37, LVar1, 1, LVar1) - Call(TranslateGroup, MODEL_g37, 0, LVar0, 0) - SetF(LVar1, LVar0) - MulF(LVar1, Float(-12.0)) - Call(RotateGroup, MODEL_g37, LVar1, 0, 1, 0) - Return - End -}; - -EvtScript N(EVS_SetSproutGrowth) = { - Call(TranslateModel, MODEL_o147, Float(9.5), Float(12.0), Float(15.0)) - Call(TranslateModel, MODEL_o149, Float(-9.5), Float(12.0), Float(15.0)) - Call(TranslateModel, MODEL_o148, Float(0.0), Float(0.0), Float(17.0)) - SetF(LVar1, LVar0) - MulF(LVar1, Float(90.0)) - Call(RotateModel, MODEL_o147, LVar1, 0, 0, -1) - Call(RotateModel, MODEL_o149, LVar1, 0, 0, 1) - Call(TranslateModel, MODEL_o147, Float(-9.5), Float(-12.0), Float(-15.0)) - Call(TranslateModel, MODEL_o149, Float(9.5), Float(-12.0), Float(-15.0)) - Call(TranslateModel, MODEL_o148, Float(0.0), Float(0.0), Float(-17.0)) - Call(ScaleModel, MODEL_o147, LVar0, LVar0, LVar0) - Call(ScaleModel, MODEL_o149, LVar0, LVar0, LVar0) - Call(ScaleModel, MODEL_o148, LVar0, LVar0, LVar0) - Return - End -}; - -EvtScript N(EVS_SetBigLeafGrowth) = { - Call(ScaleModel, MODEL_o142, LVar0, LVar0, LVar0) - SetF(LVar1, LVar0) - MulF(LVar1, Float(90.0)) - AddF(LVar1, Float(-90.0)) - Call(RotateModel, MODEL_o142, LVar1, 1, 0, 0) - Return - End -}; - -EvtScript N(EVS_SetBigLeafPosition) = { - SetF(LVar1, LVar0) - MulF(LVar1, Float(-3.0)) - Call(TranslateModel, MODEL_o142, Float(-0.26), LVar0, Float(1.477)) - Call(RotateModel, MODEL_o142, LVar1, 0, 1, 0) - Call(UpdateColliderTransform, COLLIDER_o240) - Return - End -}; - -EvtScript N(EVS_Exit_Beanstalk) = { - IfEq(AF_FLO_RidingBeanstalk, FALSE) - Call(DisablePlayerInput, TRUE) - Call(InterruptUsePartner) - Wait(15) - Call(DisablePartnerAI, 0) - Set(AF_FLO_RidingBeanstalk, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o261, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o351, COLLIDER_FLAGS_UPPER_MASK) - EVT_VEC3I_SET(LVar9, Float(-59.0), Float(22.0), Float(125.0)) // target player pos - EVT_VEC3I_SET(LVarC, Float(-55.0), Float(24.0), Float(145.0)) // target partner pos - Call(PlayerMoveTo, LVar9, LVarB, 8) - Call(SetNpcJumpscale, NPC_PARTNER, Float(0.0)) - Call(NpcJump0, NPC_PARTNER, LVarC, LVarD, LVarE, 5) - Call(PlaySound, SOUND_FLO_RIDE_BEANSTALK_UP_LOOP) - Call(SetMusicTrack, 0, SONG_MAGIC_BEANSTALK, 1, 8) - Call(SetNpcAnimation, NPC_PARTNER, PARTNER_ANIM_IDLE) - Call(SetPlayerAnimation, ANIM_Mario1_Walk) - Call(N(GetPlayerAngles), LVar3, LVar4) - Switch(LVar4) - CaseLt(90) - Set(AF_FLO_BeanstalkFacingRight, FALSE) - Call(InterpPlayerYaw, 90, 0) - Call(InterpNpcYaw, NPC_PARTNER, 90, 0) - CaseGe(270) - Set(AF_FLO_BeanstalkFacingRight, TRUE) - Call(InterpPlayerYaw, 270, 0) - Call(InterpNpcYaw, NPC_PARTNER, 270, 0) - EndSwitch - Call(TranslateModel, MODEL_o142, Float(-0.26), Float(2.0), Float(1.477)) - Call(UpdateColliderTransform, COLLIDER_o240) - Set(MV_BeanstalkSceneSync, FALSE) - Thread - Set(LVarF, 0) - Loop(0) - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVar0, 0, 700, 800, 0, 0) - Exec(N(EVS_SetBigLeafPosition)) - SetF(LVar2, LVar0) - MulF(LVar2, Float(-3.0)) - SetF(LVar3, LVar0) - Call(N(PlayerRideBeanstalk)) - Call(N(PartnerRideBeanstalk)) - IfEq(LVarF, 350) - Set(MV_BeanstalkSceneSync, TRUE) - EndIf - Wait(1) - EndLoop - EndThread - Label(10) - IfEq(MV_BeanstalkSceneSync, FALSE) - Wait(1) - Goto(10) - EndIf - Call(GotoMap, Ref("flo_19"), flo_19_ENTRY_3) - Wait(100) - EndIf - Return - End -}; - -EvtScript N(EVS_Enter_Beanstalk) = { - Call(DisablePlayerInput, TRUE) - Call(SetPlayerActionState, ACTION_STATE_LAND) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o261, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o351, COLLIDER_FLAGS_UPPER_MASK) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Set(LVar9, Float(-59.0)) - Set(LVarA, Float(22.0)) - Set(LVarB, Float(125.0)) - Set(LVarC, Float(-55.0)) - Set(LVarD, Float(23.0)) - Set(LVarE, Float(145.0)) - Thread - Wait(5) - Call(SetNpcAnimation, NPC_PARTNER, PARTNER_ANIM_IDLE) - Call(SetPlayerAnimation, ANIM_Mario1_Walk) - Switch(AF_FLO_BeanstalkFacingRight) - CaseEq(0) - Call(InterpPlayerYaw, 90, 0) - Call(InterpNpcYaw, NPC_PARTNER, 90, 0) - CaseEq(1) - Call(InterpPlayerYaw, 270, 0) - Call(InterpNpcYaw, NPC_PARTNER, 270, 0) - EndSwitch - EndThread - Call(TranslateModel, MODEL_o142, Float(-0.26), Float(2.0), Float(1.477)) - Call(UpdateColliderTransform, COLLIDER_o240) - Set(LVarF, 0) - Loop(120) - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVar0, 70, 0, 120, 0, 0) - Exec(N(EVS_SetBigLeafPosition)) - SetF(LVar2, LVar0) - MulF(LVar2, Float(-3.0)) - SetF(LVar3, LVar0) - Call(N(PlayerRideBeanstalk)) - Call(N(PartnerRideBeanstalk)) - Wait(1) - EndLoop - Call(EnablePartnerAI) - Call(ClearPartnerMoveHistory, NPC_PARTNER) - Call(SetPlayerJumpscale, 1) - Call(PlayerJump, 10, 0, 110, 20) - Call(SetPlayerActionState, ACTION_STATE_LAND) - Call(InterpPlayerYaw, 90, 0) - Wait(5) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o261, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o351, COLLIDER_FLAGS_UPPER_MASK) - Set(AF_FLO_RidingBeanstalk, FALSE) - Call(StopSound, SOUND_FLO_RIDE_BEANSTALK_DOWN_LOOP) - ExecWait(N(EVS_SetupMusic)) - Call(ResetCam, CAM_DEFAULT, Float(1.0)) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_Scene_BeanstalkGrowing) = { - Call(PlaySoundAtCollider, COLLIDER_o261, SOUND_FLO_BEANSTALK_START_GROWING, SOUND_SPACE_DEFAULT) - Set(LVarF, 0) - Loop(100) - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVar0, 0, Float(1.0), 100, 0, 0) - Exec(N(EVS_SetSproutGrowth)) - Wait(1) - EndLoop - Set(MV_BeanstalkSceneSync, FALSE) - Thread - Set(LVarF, 0) - Loop(1200) - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVar0, -700, 0, 1200, 0, 0) - SetF(LVar2, LVar0) - MulF(LVar2, Float(1.0)) - SetF(LVar0, LVar2) - Exec(N(EVS_SetExteriorVineGrowth)) - SetF(LVar2, LVar0) - MulF(LVar2, Float(1.0)) - SetF(LVar0, LVar2) - Exec(N(EVS_SetInteriorVineGrowth)) - Switch(LVarF) - CaseEq(200) - Call(SetPlayerAnimation, ANIM_Mario1_LookUp) - CaseEq(250) - Set(LVar0, -60) - Set(LVar1, 0) - Set(LVar2, 65) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(12.5), Float(-7.0)) - Call(SetCamDistance, CAM_DEFAULT, 800) - Call(SetCamPosA, CAM_DEFAULT, -200, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, -300) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - CaseDefault - EndSwitch - IfGt(LVarF, 550) - Set(MV_BeanstalkSceneSync, TRUE) - EndIf - Wait(1) - EndLoop - EndThread - Label(10) - IfEq(MV_BeanstalkSceneSync, FALSE) - Wait(1) - Goto(10) - EndIf - Call(FadeInMusic, 0, SONG_CLOUDY_CLIMB, 0, 3000, 0, 127) - Call(FadeOutMusic, 1, 3000) - Call(GotoMap, Ref("flo_19"), flo_19_ENTRY_2) - Wait(100) - Return - End -}; - -EvtScript N(EVS_Scene_BeanstalkGrewRemark) = { - Call(DisablePlayerInput, TRUE) - Call(InterpPlayerYaw, 200, 0) - Call(SetPlayerPos, -60, 0, 30) - Call(NpcFacePlayer, NPC_PARTNER, 1) - Call(SetNpcPos, NPC_PARTNER, -20, 0, 10) - Set(LVar0, -60) - Set(LVar1, 0) - Set(LVar2, 65) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(12.5), Float(-7.0)) - Call(SetCamDistance, CAM_DEFAULT, 800) - Call(SetCamPosA, CAM_DEFAULT, -200, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, -300) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Set(LVarF, 0) - Loop(5) - Add(LVarF, 20) - Call(N(CosInterpMinMax), LVarF, LVar0, Float(0.0), Float(1.0), 100, 0, 0) - Exec(N(EVS_SetBigLeafGrowth)) - Wait(1) - EndLoop - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o240, COLLIDER_FLAGS_UPPER_MASK) - Call(ShowMessageAtWorldPos, MSG_CH6_000A, 0, 50, -200) - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -s32 N(BeanstalkIngredients)[] = { - ITEM_FERTILE_SOIL, - ITEM_MAGICAL_BEAN, - ITEM_MIRACLE_WATER, - ITEM_NONE -}; - -EvtScript N(EVS_BeanPatch_ItemPrompt) = { - Call(DisablePlayerInput, TRUE) - Call(FacePlayerTowardPoint, -85, 85, 0) - Call(func_802CF56C, 2) - Call(DisablePlayerInput, FALSE) - IfEq(GF_FLO00_PlacedFertileSoil, FALSE) - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_PARTIAL) - Label(10) - Call(ShowKeyChoicePopup) - Set(LVar2, LVar0) - Switch(LVar2) - CaseLe(ITEM_NONE) - Call(CloseChoicePopup) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Call(AwaitPlayerLeave, -85, 85, 28) - Return - CaseEq(ITEM_FERTILE_SOIL) - Call(SetPlayerAnimation, ANIM_MarioW1_PlaceItem) - Wait(5) - Call(RemoveKeyItemAt, LVar1) - Call(MakeItemEntity, ITEM_FERTILE_SOIL, BEANSTALK_BASE_X, 0, BEANSTALK_BASE_Z, ITEM_SPAWN_MODE_DECORATION, 0) - Set(MV_BeanstalkItemEntity, LVar0) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Wait(20) - CaseDefault - Switch(AF_FLO_PlatingInstructionsToggle) - CaseEq(0) - Call(ShowMessageAtWorldPos, MSG_CH6_0008, 0, 10, -200) - Set(AF_FLO_PlatingInstructionsToggle, TRUE) - CaseDefault - Call(ShowMessageAtWorldPos, MSG_CH6_0009, 0, 10, -200) - EndSwitch - EndSwitch - Call(DisablePlayerInput, FALSE) - Call(DisablePlayerPhysics, FALSE) - IfNe(LVar2, 89) - Goto(10) - EndIf - Set(GF_FLO00_PlacedFertileSoil, TRUE) - EndIf - IfEq(GF_FLO00_PlacedMagicalBean, FALSE) - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_PARTIAL) - Label(20) - Call(ShowKeyChoicePopup) - Set(LVar2, LVar0) - Switch(LVar2) - CaseLe(ITEM_NONE) - Call(CloseChoicePopup) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Call(AwaitPlayerLeave, -85, 85, 28) - Return - CaseEq(ITEM_MAGICAL_BEAN) - Call(RemoveItemEntity, MV_BeanstalkItemEntity) - Wait(5) - Call(SetPlayerAnimation, ANIM_MarioW1_PlaceItem) - Wait(5) - Call(RemoveKeyItemAt, LVar1) - Call(MakeItemEntity, ITEM_MAGICAL_BEAN, BEANSTALK_BASE_X, 0, BEANSTALK_BASE_Z, ITEM_SPAWN_MODE_DECORATION, 0) - Set(MV_BeanstalkItemEntity, LVar0) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Wait(20) - CaseDefault - Switch(AF_FLO_PlatingInstructionsToggle) - CaseEq(0) - Call(ShowMessageAtWorldPos, MSG_CH6_0008, 0, 10, -200) - Set(AF_FLO_PlatingInstructionsToggle, TRUE) - CaseDefault - Call(ShowMessageAtWorldPos, MSG_CH6_0009, 0, 10, -200) - EndSwitch - EndSwitch - Call(DisablePlayerInput, FALSE) - Call(DisablePlayerPhysics, FALSE) - IfNe(LVar2, 88) - Goto(20) - EndIf - Set(GF_FLO00_PlacedMagicalBean, TRUE) - EndIf - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_PARTIAL) - Label(30) - Call(ShowKeyChoicePopup) - Set(LVar2, LVar0) - Switch(LVar2) - CaseLe(ITEM_NONE) - Call(CloseChoicePopup) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Call(AwaitPlayerLeave, -85, 85, 28) - Return - CaseEq(ITEM_MIRACLE_WATER) - Call(RemoveItemEntity, MV_BeanstalkItemEntity) - Wait(5) - Call(SetPlayerAnimation, ANIM_MarioW1_PlaceItem) - Wait(5) - Call(RemoveKeyItemAt, LVar1) - Call(N(SyncStatusBar)) - Call(MakeItemEntity, ITEM_MIRACLE_WATER, BEANSTALK_BASE_X, 0, BEANSTALK_BASE_Z, ITEM_SPAWN_MODE_DECORATION, 0) - Set(MV_BeanstalkItemEntity, LVar0) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Wait(30) - Call(RemoveItemEntity, MV_BeanstalkItemEntity) - Wait(30) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o261, COLLIDER_FLAGS_UPPER_MASK) - Call(PlayerMoveTo, -60, 30, 20) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o261, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o351, COLLIDER_FLAGS_UPPER_MASK) - Call(InterpPlayerYaw, 200, 0) - Call(func_802CF56C, 2) - Wait(60) - Call(FadeInMusic, 1, SONG_MAGIC_BEANSTALK, 0, 3000, 0, 127) - Call(FadeOutMusic, 0, 3000) - Call(UseSettingsFrom, CAM_DEFAULT, -85, 0, 75) - Call(SetPanTarget, CAM_DEFAULT, -85, 0, 75) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-6.0)) - Call(SetCamDistance, CAM_DEFAULT, 250) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - ExecWait(N(EVS_Scene_BeanstalkGrowing)) - EndSwitch - IfNe(LVar2, 90) - Goto(30) - EndIf - Return - End -}; - -EvtScript N(EVS_BeanPatch_TryInteract) = { - Label(0) - Call(IsPlayerWithin, -85, 85, 20, LVar0) - IfEq(LVar0, 0) - Return - Else - Call(IsPlayerOnValidFloor, LVar0) - IfEq(LVar0, FALSE) - Wait(1) - Goto(0) - EndIf - Call(GetPartnerInUse, LVar0) - IfNe(LVar0, PARTNER_NONE) - Return - EndIf - EndIf - Call(N(DisableStatusBar)) - ExecWait(N(EVS_BeanPatch_ItemPrompt)) - Call(N(EnableWorldStatusBar)) - Return - End -}; - -EvtScript N(EVS_SetupBeanPatch) = { - IfLt(GB_StoryProgress, STORY_CH6_GREW_MAGIC_BEANSTALK) - Loop(0) - Wait(1) - IfEq(GB_StoryProgress, STORY_CH6_WISTERWOOD_GAVE_HINT) - BreakLoop - EndIf - EndLoop - IfEq(GF_FLO00_PlacedFertileSoil, TRUE) - IfEq(GF_FLO00_PlacedMagicalBean, FALSE) - Call(MakeItemEntity, ITEM_FERTILE_SOIL, BEANSTALK_BASE_X, 0, BEANSTALK_BASE_Z, ITEM_SPAWN_MODE_DECORATION, 0) - Else - Call(MakeItemEntity, ITEM_MAGICAL_BEAN, BEANSTALK_BASE_X, 0, BEANSTALK_BASE_Z, ITEM_SPAWN_MODE_DECORATION, 0) - EndIf - Set(MV_BeanstalkItemEntity, LVar0) - EndIf - BindPadlock(Ref(N(EVS_BeanPatch_TryInteract)), TRIGGER_FORCE_ACTIVATE, 0, Ref(N(BeanstalkIngredients)), 0, 1) - EndIf - Return - End -}; - -EvtScript N(EVS_SetupBeanstalk) = { - BindTrigger(Ref(N(EVS_Exit_Beanstalk)), TRIGGER_FLOOR_TOUCH, COLLIDER_o240, 1, 0) - Call(EnableGroup, MODEL_ha, TRUE) - Call(EnableGroup, MODEL_tuta, TRUE) - Switch(GB_StoryProgress) - CaseEq(STORY_CH6_WISTERWOOD_GAVE_HINT) - Set(LVar0, -700) - Exec(N(EVS_SetExteriorVineGrowth)) - Exec(N(EVS_SetInteriorVineGrowth)) - Set(LVar0, 0) - Exec(N(EVS_SetSproutGrowth)) - Set(LVar0, 0) - Exec(N(EVS_SetBigLeafGrowth)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o240, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o261, COLLIDER_FLAGS_UPPER_MASK) - CaseGe(STORY_CH6_GREW_MAGIC_BEANSTALK) - Set(LVar0, 1) - Exec(N(EVS_SetSproutGrowth)) - Set(LVar0, 1) - Exec(N(EVS_SetBigLeafGrowth)) - CaseDefault - Set(LVar0, -700) - Exec(N(EVS_SetExteriorVineGrowth)) - Exec(N(EVS_SetInteriorVineGrowth)) - Set(LVar0, 0) - Exec(N(EVS_SetSproutGrowth)) - Set(LVar0, 0) - Exec(N(EVS_SetBigLeafGrowth)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o240, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o261, COLLIDER_FLAGS_UPPER_MASK) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_00/flo_00_6_entity.c b/src/world/dead/area_flo/flo_00/flo_00_6_entity.c deleted file mode 100644 index f5578c5ba1e..00000000000 --- a/src/world/dead/area_flo/flo_00/flo_00_6_entity.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "flo_00.h" -#include "entity.h" - -EvtScript N(EVS_MakeEntities) = { - IfLt(GB_StoryProgress, STORY_EPILOGUE) - Call(MakeEntity, Ref(Entity_SavePoint), 110, 60, -100, 0, MAKE_ENTITY_END) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_03/flo_03.h b/src/world/dead/area_flo/flo_03/flo_03.h deleted file mode 100644 index 7ad2ef40e9e..00000000000 --- a/src/world/dead/area_flo/flo_03/flo_03.h +++ /dev/null @@ -1,46 +0,0 @@ -// Older version of flo_03 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_03_shape.h" -#include "mapfs/flo_03_hit.h" - -#include "sprite/npc/Petunia.h" -#include "sprite/npc/MontyMole.h" -#include "sprite/npc/Dayzee.h" - -enum { - NPC_Petunia = 0, - NPC_Dayzee = 1, - NPC_MontyMole_01 = 2, - NPC_MontyMole_02 = 3, - NPC_MontyMole_03 = 4, - NPC_MontyMole_04 = 5, -}; - -enum { - MV_NextBurrowTime_Mole_01 = MapVar(10), - MV_NextBurrowTime_Mole_02 = MapVar(11), - MV_NextBurrowTime_Mole_03 = MapVar(12), - MV_NextBurrowTime_Mole_04 = MapVar(13), - MV_PauseBurrowing = MapVar(14), - MV_NextBurrowTriggerRadius = MapVar(15), -}; - -#define NAMESPACE dead_flo_03 - -extern EvtScript N(EVS_Main); -extern NpcGroupList N(DefaultNPCs); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_PushFlowerSong); -extern EvtScript N(EVS_PopSong); -extern EvtScript N(EVS_SetupFoliage); -extern EvtScript N(EVS_MakeEntities); - -extern EvtScript N(EVS_Scene_SunReturns); -extern EvtScript N(EVS_SetupMoles); -extern EvtScript N(EVS_EmptyEntityHandler); diff --git a/src/world/dead/area_flo/flo_03/flo_03_0_header.c b/src/world/dead/area_flo/flo_03/flo_03_0_header.c deleted file mode 100644 index c554d7426a2..00000000000 --- a/src/world/dead/area_flo/flo_03/flo_03_0_header.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "flo_03.h" - -EntryList N(Entrances) = { - [flo_03_ENTRY_0] { -325.0, 0.0, 0.0, 90.0 }, - [flo_03_ENTRY_1] { 325.0, 0.0, 0.0, 270.0 }, - [flo_03_ENTRY_2] { -325.0, 0.0, 0.0, 90.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_03 }, -}; diff --git a/src/world/dead/area_flo/flo_03/flo_03_1_music.c b/src/world/dead/area_flo/flo_03/flo_03_1_music.c deleted file mode 100644 index 42435085978..00000000000 --- a/src/world/dead/area_flo/flo_03/flo_03_1_music.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "flo_03.h" - -EvtScript N(EVS_SetupMusic) = { - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_03_ENTRY_2) - Call(SetMusicTrack, 0, SONG_SUNSHINE_RETURNS, 0, 8) - Else - Switch(GB_StoryProgress) - CaseLe(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_DefeatedAll_MontyMoles, FALSE) - Call(SetMusicTrack, 0, SONG_MONTY_MOLE_ASSAULT, 0, 8) - Else - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - EndIf - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - EndIf - Return - End -}; - -EvtScript N(EVS_PushFlowerSong) = { - IfGe(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_DefeatedAll_MontyMoles, TRUE) - Call(PushSong, SONG_FLOWER_NPC_THEME, 0) - EndIf - EndIf - Return - End -}; - -EvtScript N(EVS_PopSong) = { - IfGe(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_DefeatedAll_MontyMoles, TRUE) - Call(FadeOutMusic, 0, 250) - Wait(10) - Call(PopSong) - EndIf - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_03/flo_03_2_main.c b/src/world/dead/area_flo/flo_03/flo_03_2_main.c deleted file mode 100644 index 121c8b3af07..00000000000 --- a/src/world/dead/area_flo/flo_03/flo_03_2_main.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "flo_03.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_09_1) = EVT_EXIT_WALK(60, flo_03_ENTRY_0, "flo_09", flo_09_ENTRY_1); -EvtScript N(EVS_ExitWalk_flo_22_0) = EVT_EXIT_WALK(60, flo_03_ENTRY_1, "flo_22", flo_22_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_09_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_22_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Set(AF_FLO_TreeDrop_RedBerry1, FALSE) - Set(AF_FLO_TreeDrop_RedBerry2, FALSE) - Set(AB_FLO_PetuniaDialogue, 0) - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - ExecWait(N(EVS_SetupMoles)) - Exec(N(EVS_SetupFoliage)) - Exec(N(EVS_EmptyEntityHandler)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o160, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( -145, -335, 182, -180, 0) - EVT_FLOWER_SPAWN_REGION( 200, -170, 310, 150, 0) - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_03_ENTRY_2) - Exec(N(EVS_Scene_SunReturns)) - Else - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - EndIf - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_03/flo_03_3_npc.c b/src/world/dead/area_flo/flo_03/flo_03_3_npc.c deleted file mode 100644 index 9557efe04d6..00000000000 --- a/src/world/dead/area_flo/flo_03/flo_03_3_npc.c +++ /dev/null @@ -1,962 +0,0 @@ -#include "flo_03.h" -#include "sprite/player.h" - -NpcSettings N(NpcSettings_Dayzee) = { - .height = 24, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - -NpcSettings N(NpcSettings_Petunia) = { - .height = 56, - .radius = 40, - .level = ACTOR_LEVEL_NONE, -}; - -#include "world/common/complete/GiveReward.inc.c" - -Vec3i N(BurrowLocations_Mole_01)[] = { - { -100, 0, 210 }, - { -160, 0, 285 }, - { -35, 0, 305 }, -}; - -Vec3i N(BurrowLocations_Mole_02)[] = { - { -190, 0, 80 }, - { -130, 0, 0 }, - { -70, 0, -60 }, -}; - -Vec3i N(BurrowLocations_Mole_03)[] = { - { 75, 0, -15 }, - { 35, 0, -100 }, - { 130, 0, 0 }, -}; - -Vec3i N(BurrowLocations_Mole_04)[] = { - { 115, 0, 180 }, - { 85, 0, 290 }, - { 145, 0, 140 }, -}; - -EvtScript N(EVS_Scene_SunReturns) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(SetNpcYaw, NPC_Petunia, 90) - Call(GetNpcPos, NPC_Petunia, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-9.5)) - Call(SetCamPosA, CAM_DEFAULT, -27, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, -50) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Call(SpeakToPlayer, NPC_Petunia, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0, MSG_CH6_00C8) - Call(SetNpcAnimation, NPC_Petunia, ANIM_Petunia_Dance) - Wait(10) - Call(GotoMap, Ref("flo_18"), flo_18_ENTRY_1) - Wait(100) - Return - End -}; - -API_CALLABLE(N(HideBehindTree)) { - Enemy* enemy = script->owner1.enemy; - Npc* npc = get_npc_unsafe(enemy->npcID); - f32 posX, posZ, yaw, angle; - f64 dist; - - // get a point 46 units away from the tree on the side opposite the player - yaw = clamp_angle(atan2(-210.0f, -183.0f, gPlayerStatus.pos.x, gPlayerStatus.pos.z) + 180.0f); - posX = -210.0f; - posZ = -183.0f; - add_vec2D_polar(&posX, &posZ, 46.0f, yaw); - - // run or walk to target position, based on the distance from current position - dist = dist2D(npc->pos.x, npc->pos.z, posX, posZ); - if (dist > 2.0) { - f32 curAngle = clamp_angle(atan2(-210.0f, -183.0f, npc->pos.x, npc->pos.z)); - f32 targetAngle = clamp_angle(atan2(-210.0f, -183.0f, posX, posZ)); - f32 deltaAngle = curAngle - targetAngle; - if (abs(deltaAngle) > 20) { - angle = deltaAngle; - if (angle >= 180.0f) { - angle -= 360.0f; - } - if (angle <= -180.0f) { - angle += 360.0f; - } - if (deltaAngle == angle) { - posX = -210.0f; - posZ = -183.0f; - if (deltaAngle >= 0.0f) { - yaw = clamp_angle(curAngle - 20.0f); - } else { - yaw = clamp_angle(curAngle + 20.0f); - } - add_vec2D_polar(&posX, &posZ, 46.0f, yaw); - } else { - osSyncPrintf("cccc\n"); - } - } - npc->curAnim = enemy->animList[ENEMY_ANIM_INDEX_RUN]; - npc->yaw = atan2(npc->pos.x, npc->pos.z, posX, posZ); - npc_move_heading(npc, 2.0f, npc->yaw); - } else if (dist > 0.2) { - npc->yaw = atan2(npc->pos.x, npc->pos.z, posX, posZ); - npc->pos.x = posX; - npc->pos.z = posZ; - npc->curAnim = enemy->animList[ENEMY_ANIM_INDEX_WALK]; - } else { - npc->pos.x = posX; - npc->pos.z = posZ; - npc->curAnim = enemy->animList[ENEMY_ANIM_INDEX_IDLE]; - } - return ApiStatus_BLOCK; -} - -EvtScript N(EVS_NpcAI_Dayzee) = { - Call(N(HideBehindTree)) - Return - End -}; - -EvtScript N(EVS_NpcDefeat_Dayzee) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - Set(GF_FLO03_Defeated_Dayzee, TRUE) - Call(DoNpcDefeat) - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_FocusCamBetween) = { - Call(GetPlayerPos, LVar3, LVar1, LVar2) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Add(LVar0, LVar3) - Div(LVar0, 2) - Call(SetCamProperties, CAM_DEFAULT, LVar4, LVar0, LVar1, LVar2, 300, Float(20.0), Float(-9.5)) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Petunia) = { - ExecWait(N(EVS_PushFlowerSong)) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Set(MV_PauseBurrowing, TRUE) - Set(LVar4, Float(3.5)) - ExecWait(N(EVS_FocusCamBetween)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0050) - Call(SetNpcAnimation, NPC_SELF, ANIM_Petunia_Angry) - Call(SetPlayerAnimation, ANIM_Mario1_NodYes) - Wait(20) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0051) - Call(SetNpcAnimation, NPC_MontyMole_01, ANIM_MontyMole_Dark_Anim12) - Call(SetNpcYaw, NPC_MontyMole_01, 270) - Call(GetNpcPos, NPC_MontyMole_01, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-8.0)) - Call(SetCamDistance, CAM_DEFAULT, 200) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Call(PlaySoundAtNpc, NPC_MontyMole_01, SOUND_BURROW_SURFACE, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_01, ANIM_MontyMole_Dark_Anim16) - Wait(10) - Call(PlaySoundAtNpc, NPC_MontyMole_01, SOUND_EMOTE_QUESTION, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_MontyMole_01, EMOTE_QUESTION, -45, 30, EMOTER_NPC, 0, 0, 0, 0) - Call(GetNpcPos, NPC_MontyMole_02, LVar0, LVar1, LVar2) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0052) - Call(SetNpcYaw, NPC_MontyMole_02, 90) - Call(SetNpcPos, NPC_MontyMole_02, NPC_DISPOSE_LOCATION) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 200) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-8.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SetNpcAnimation, NPC_MontyMole_02, ANIM_MontyMole_Dark_Anim00) - Wait(20) - Call(PlaySoundAtNpc, NPC_MontyMole_02, SOUND_BURROW_SURFACE, SOUND_SPACE_DEFAULT) - Call(SetNpcPos, NPC_MontyMole_02, LVar0, LVar1, LVar2) - Call(SetNpcAnimation, NPC_MontyMole_02, ANIM_MontyMole_Dark_Anim10) - Wait(20) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0053) - Call(SetNpcYaw, NPC_MontyMole_03, 270) - Call(GetNpcPos, NPC_MontyMole_03, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 200) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-8.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Call(SetNpcAnimation, NPC_MontyMole_03, ANIM_MontyMole_Dark_Anim14) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0054) - Call(SetNpcYaw, NPC_MontyMole_04, 270) - Call(GetNpcPos, NPC_MontyMole_04, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 200) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-9.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim06) - Wait(20) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim07) - Wait(20) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim08) - Wait(20) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim16) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0055) - Call(SetNpcPos, NPC_Dayzee, -233, 0, -217) - Call(GetNpcPos, NPC_Dayzee, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-9.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SetNpcAnimation, NPC_Dayzee, ANIM_Dayzee_Anim0D) - Call(PlaySoundAtNpc, NPC_Dayzee, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_Dayzee, EMOTE_EXCLAMATION, 45, 30, EMOTER_NPC, 0, 0, 0, 0) - Wait(15) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0056) - Set(LVar4, Float(90.0)) - ExecWait(N(EVS_FocusCamBetween)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0057) - Call(SetEnemyFlagBits, NPC_Dayzee, ENEMY_FLAG_PASSIVE, 0) - Call(SetEnemyFlagBits, NPC_MontyMole_01, ENEMY_FLAG_PASSIVE, 0) - Call(SetEnemyFlagBits, NPC_MontyMole_02, ENEMY_FLAG_PASSIVE, 0) - Call(SetEnemyFlagBits, NPC_MontyMole_03, ENEMY_FLAG_PASSIVE, 0) - Call(SetEnemyFlagBits, NPC_MontyMole_04, ENEMY_FLAG_PASSIVE, 0) - Call(BindNpcAI, NPC_Dayzee, Ref(N(EVS_NpcAI_Dayzee))) - Set(MV_PauseBurrowing, FALSE) - Set(MV_NextBurrowTriggerRadius, 60) - Set(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - CaseEq(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_DefeatedAll_MontyMoles, FALSE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0, MSG_CH6_0058) - Call(SetNpcAnimation, NPC_SELF, ANIM_Petunia_Angry) - Else - Set(LVar4, Float(3.5)) - ExecWait(N(EVS_FocusCamBetween)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_HappyTalk, ANIM_Petunia_Dance, 0, MSG_CH6_0059) - Call(EndSpeech, NPC_SELF, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0) - Call(SetNpcAnimation, NPC_SELF, ANIM_Petunia_GiveItem) - Wait(20) - Call(SetNpcAnimation, NPC_SELF, ANIM_Petunia_Idle) - EVT_GIVE_KEY_REWARD(ITEM_MAGICAL_BEAN) - Wait(20) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0, MSG_CH6_005A) - Call(EndSpeech, NPC_SELF, ANIM_Petunia_AngryTalk, ANIM_Petunia_Angry, 0) - Set(GB_StoryProgress, STORY_CH6_GOT_MAGICAL_BEAN) - EndIf - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0, MSG_CH6_005B) - CaseLt(STORY_CH6_RETURNED_TO_TOAD_TOWN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0, MSG_CH6_005C) - CaseDefault - IfEq(AB_FLO_PetuniaDialogue, 0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0, MSG_CH6_005D) - Set(AB_FLO_PetuniaDialogue, 1) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Petunia_Talk, ANIM_Petunia_Idle, 0, MSG_CH6_005E) - EndIf - EndSwitch - Call(ResetCam, CAM_DEFAULT, Float(8.0)) - ExecWait(N(EVS_PopSong)) - Return - End -}; - -EvtScript N(EVS_NpcInit_Petunia) = { - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Petunia))) - IfEq(GF_FLO03_DefeatedAll_MontyMoles, FALSE) - Call(SetNpcAnimation, NPC_Petunia, ANIM_Petunia_Angry) - Else - Call(SetNpcAnimation, NPC_Petunia, ANIM_Petunia_Idle) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Dayzee) = { - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Dayzee))) - Call(EnableNpcShadow, NPC_Dayzee, FALSE) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Call(SetNpcPos, NPC_Dayzee, NPC_DISPOSE_LOCATION) - CaseDefault - IfEq(GF_FLO03_Defeated_Dayzee, FALSE) - Call(SetEnemyFlagBits, NPC_Dayzee, ENEMY_FLAG_PASSIVE, 0) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcAI_Dayzee))) - Else - Call(SetNpcPos, NPC_Dayzee, NPC_DISPOSE_LOCATION) - EndIf - EndSwitch - Return - End -}; - -EvtScript N(EVS_SetupMoles) = { - Set(MV_PauseBurrowing, FALSE) - Set(MV_NextBurrowTime_Mole_01, 0) - Set(MV_NextBurrowTime_Mole_02, 0) - Set(MV_NextBurrowTime_Mole_03, 0) - Set(MV_NextBurrowTime_Mole_04, 0) - Set(MV_NextBurrowTriggerRadius, 100) - Return - End -}; - -EvtScript N(EVS_NpcDefeat_MontyMole) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - // record defeat - Call(GetSelfNpcID, LVar0) - Switch(LVar0) - CaseEq(NPC_MontyMole_01) - Set(GF_FLO03_Defeated_MontyMoleA, TRUE) - CaseEq(NPC_MontyMole_02) - Set(GF_FLO03_Defeated_MontyMoleB, TRUE) - CaseEq(NPC_MontyMole_03) - Set(GF_FLO03_Defeated_MontyMoleC, TRUE) - CaseEq(NPC_MontyMole_04) - Set(GF_FLO03_Defeated_MontyMoleD, TRUE) - EndSwitch - // count number of defeated moles - Set(LVar0, 0) - Add(LVar0, GF_FLO03_Defeated_MontyMoleA) - Add(LVar0, GF_FLO03_Defeated_MontyMoleB) - Add(LVar0, GF_FLO03_Defeated_MontyMoleC) - Add(LVar0, GF_FLO03_Defeated_MontyMoleD) - // end the mole-hunting minigame if all 4 are defeated - IfNe(LVar0, 4) - Call(SetNpcAnimation, NPC_Petunia, ANIM_Petunia_Angry) - Else - Call(SetNpcAnimation, NPC_Petunia, ANIM_Petunia_Idle) - Set(GF_FLO03_DefeatedAll_MontyMoles, TRUE) - ExecWait(N(EVS_SetupMusic)) - EndIf - Call(DoNpcDefeat) - CaseEq(OUTCOME_PLAYER_LOST) - Call(SetNpcAnimation, NPC_SELF, ANIM_MontyMole_Dark_Anim01) - CaseEq(OUTCOME_PLAYER_FLED) - Call(SetNpcAnimation, NPC_SELF, ANIM_MontyMole_Dark_Anim01) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcHit_MontyMole) = { - IfEq(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - EVT_DEBUG_LOG(Ref("touch_choro\n")) - Call(GetOwnerEncounterTrigger, LVar0) - DebugPrintVar(LVar0) - IfNe(LVar0, ENCOUNTER_TRIGGER_NONE) - Call(SetNpcAnimation, NPC_SELF, ANIM_MontyMole_Dark_Anim05) - EndIf - EndIf - Return - End -}; - -EvtScript N(EVS_NpcIdle_MontyMole_01) = { - #define LV_ShouldBurrow LVar3 - Loop(0) - IfEq(MV_NextBurrowTime_Mole_01, 0) - IfEq(AF_FLO_IsUnderground_Mole_01, TRUE) - Goto(0) - EndIf - Set(LV_ShouldBurrow, TRUE) - Else - Label(0) - Call(GetNpcPos, NPC_MontyMole_01, LVar0, LVar1, LVar2) - Call(IsPlayerWithin, LVar0, LVar2, MV_NextBurrowTriggerRadius, LV_ShouldBurrow) - EndIf - Call(GetPartnerInUse, LVar9) - IfEq(LVar9, PARTNER_BOW) - Set(LVar3, FALSE) - EndIf - IfEq(MV_PauseBurrowing, TRUE) - Set(LV_ShouldBurrow, FALSE) - EndIf - IfEq(LV_ShouldBurrow, TRUE) - IfEq(AF_FLO_IsUnderground_Mole_01, FALSE) - Call(SetNpcFlagBits, NPC_MontyMole_01, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Call(NpcFacePlayer, NPC_MontyMole_01, 1) - Wait(1) - Set(AF_FLO_IsUnderground_Mole_01, TRUE) - IfNe(MV_NextBurrowTime_Mole_01, 0) - IfLt(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Set(LVar1, 4) - Else - Set(LVar1, 10) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_01, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_MontyMole_01, EMOTE_EXCLAMATION, 0, LVar1, EMOTER_NPC, 0, 0, 0, 0) - Wait(LVar1) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 1) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_01, SOUND_BURROW_DIG, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_01, ANIM_MontyMole_Dark_Anim11) - Wait(20) - IfEq(GF_FLO03_Defeated_MontyMoleA, FALSE) - Call(SetNpcPos, NPC_MontyMole_01, 0, -50, 0) - EndIf - Wait(45) - EndIf - Else - IfEq(AF_FLO_IsUnderground_Mole_01, TRUE) - IfEq(GF_FLO03_Defeated_MontyMoleA, FALSE) - Call(RandInt, ARRAY_COUNT(N(BurrowLocations_Mole_01)) - 1, LVar0) - Add(LVar0, 1) - UseBuf(Ref(N(BurrowLocations_Mole_01))) - Loop(LVar0) - BufRead3(LVar1, LVar2, LVar3) - EndLoop - Call(SetNpcPos, NPC_MontyMole_01, LVar1, LVar2, LVar3) - EndIf - Call(SetNpcFlagBits, NPC_MontyMole_01, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Set(AF_FLO_IsUnderground_Mole_01, FALSE) - Call(NpcFacePlayer, NPC_MontyMole_01, 1) - Wait(1) - Call(PlaySoundAtNpc, NPC_MontyMole_01, SOUND_BURROW_SURFACE, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_01, ANIM_MontyMole_Dark_Anim10) - Wait(10) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 0) - Call(RandInt, 30, LVar0) - Add(LVar0, 60) - Set(MV_NextBurrowTime_Mole_01, LVar0) - Else - IfGt(MV_NextBurrowTime_Mole_01, 0) - Sub(MV_NextBurrowTime_Mole_01, 1) - EndIf - EndIf - EndIf - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_NpcIdle_MontyMole_02) = { - #define LV_ShouldBurrow LVar3 - Loop(0) - IfEq(MV_NextBurrowTime_Mole_02, 0) - IfEq(AF_FLO_IsUnderground_Mole_02, TRUE) - Goto(0) - EndIf - Set(LV_ShouldBurrow, TRUE) - Else - Label(0) - Call(GetNpcPos, NPC_MontyMole_02, LVar0, LVar1, LVar2) - Call(IsPlayerWithin, LVar0, LVar2, MV_NextBurrowTriggerRadius, LV_ShouldBurrow) - EndIf - Call(GetPartnerInUse, LVar9) - IfEq(LVar9, PARTNER_BOW) - Set(LV_ShouldBurrow, FALSE) - EndIf - IfEq(MV_PauseBurrowing, TRUE) - Set(LV_ShouldBurrow, FALSE) - EndIf - IfEq(LV_ShouldBurrow, TRUE) - IfEq(AF_FLO_IsUnderground_Mole_02, FALSE) - Call(SetNpcFlagBits, NPC_MontyMole_02, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Call(NpcFacePlayer, NPC_MontyMole_02, 1) - Wait(1) - Set(AF_FLO_IsUnderground_Mole_02, TRUE) - IfNe(MV_NextBurrowTime_Mole_02, 0) - IfLt(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Set(LVar1, 4) - Else - Set(LVar1, 10) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_02, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_MontyMole_02, EMOTE_EXCLAMATION, 0, LVar1, EMOTER_NPC, 0, 0, 0, 0) - Wait(LVar1) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 1) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_02, SOUND_BURROW_DIG, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_02, ANIM_MontyMole_Dark_Anim11) - Wait(20) - IfEq(GF_FLO03_Defeated_MontyMoleB, FALSE) - Call(SetNpcPos, NPC_MontyMole_02, 0, -50, 0) - EndIf - Wait(45) - EndIf - Else - IfEq(AF_FLO_IsUnderground_Mole_02, TRUE) - IfEq(GF_FLO03_Defeated_MontyMoleB, FALSE) - Call(RandInt, ARRAY_COUNT(N(BurrowLocations_Mole_02)) - 1, LVar0) - Add(LVar0, 1) - UseBuf(Ref(N(BurrowLocations_Mole_02))) - Loop(LVar0) - BufRead3(LVar1, LVar2, LVar3) - EndLoop - Call(SetNpcPos, NPC_MontyMole_02, LVar1, LVar2, LVar3) - EndIf - Call(SetNpcFlagBits, NPC_MontyMole_02, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Set(AF_FLO_IsUnderground_Mole_02, FALSE) - Call(NpcFacePlayer, NPC_MontyMole_02, 1) - Wait(1) - Call(PlaySoundAtNpc, NPC_MontyMole_02, SOUND_BURROW_SURFACE, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_02, ANIM_MontyMole_Dark_Anim10) - Wait(10) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 0) - Call(RandInt, 35, LVar0) - Add(LVar0, 55) - Set(MV_NextBurrowTime_Mole_02, LVar0) - Else - IfGt(MV_NextBurrowTime_Mole_02, 0) - Sub(MV_NextBurrowTime_Mole_02, 1) - EndIf - EndIf - EndIf - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_NpcIdle_MontyMole_03) = { - #define LV_ShouldBurrow LVar3 - Loop(0) - IfEq(MV_NextBurrowTime_Mole_03, 0) - IfEq(AF_FLO_IsUnderground_Mole_03, TRUE) - Goto(0) - EndIf - Set(LV_ShouldBurrow, TRUE) - Else - Label(0) - Call(GetNpcPos, NPC_MontyMole_03, LVar0, LVar1, LVar2) - Call(IsPlayerWithin, LVar0, LVar2, MV_NextBurrowTriggerRadius, LV_ShouldBurrow) - EndIf - Call(GetPartnerInUse, LVar9) - IfEq(LVar9, PARTNER_BOW) - Set(LV_ShouldBurrow, FALSE) - EndIf - IfEq(MV_PauseBurrowing, TRUE) - Set(LV_ShouldBurrow, FALSE) - EndIf - IfEq(LV_ShouldBurrow, TRUE) - IfEq(AF_FLO_IsUnderground_Mole_03, FALSE) - Call(SetNpcFlagBits, NPC_MontyMole_03, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Call(NpcFacePlayer, NPC_MontyMole_03, 1) - Wait(1) - Set(AF_FLO_IsUnderground_Mole_03, TRUE) - IfNe(MV_NextBurrowTime_Mole_03, 0) - IfLt(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Set(LVar1, 4) - Else - Set(LVar1, 10) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_03, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_MontyMole_03, EMOTE_EXCLAMATION, 0, LVar1, EMOTER_NPC, 0, 0, 0, 0) - Wait(LVar1) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 1) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_03, SOUND_BURROW_DIG, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_03, ANIM_MontyMole_Dark_Anim11) - Wait(20) - IfEq(GF_FLO03_Defeated_MontyMoleC, FALSE) - Call(SetNpcPos, NPC_MontyMole_03, 0, -50, 0) - EndIf - Wait(45) - EndIf - Else - IfEq(AF_FLO_IsUnderground_Mole_03, TRUE) - IfEq(GF_FLO03_Defeated_MontyMoleC, FALSE) - Call(RandInt, ARRAY_COUNT(N(BurrowLocations_Mole_03)) - 1, LVar0) - Add(LVar0, 1) - UseBuf(Ref(N(BurrowLocations_Mole_03))) - Loop(LVar0) - BufRead3(LVar1, LVar2, LVar3) - EndLoop - Call(SetNpcPos, NPC_MontyMole_03, LVar1, LVar2, LVar3) - EndIf - Call(SetNpcFlagBits, NPC_MontyMole_03, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Set(AF_FLO_IsUnderground_Mole_03, FALSE) - Call(NpcFacePlayer, NPC_MontyMole_03, 1) - Wait(1) - Call(PlaySoundAtNpc, NPC_MontyMole_03, SOUND_BURROW_SURFACE, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_03, ANIM_MontyMole_Dark_Anim10) - Wait(10) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 0) - Call(RandInt, 40, LVar0) - Add(LVar0, 50) - Set(MV_NextBurrowTime_Mole_03, LVar0) - Else - IfGt(MV_NextBurrowTime_Mole_03, 0) - Sub(MV_NextBurrowTime_Mole_03, 1) - EndIf - EndIf - EndIf - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_NpcIdle_MontyMole_04) = { - #define LV_ShouldBurrow LVar3 - Loop(0) - IfEq(MV_NextBurrowTime_Mole_04, 0) - IfEq(AF_FLO_IsUnderground_Mole_04, TRUE) - Goto(0) - EndIf - Set(LV_ShouldBurrow, TRUE) - Else - Label(0) - Call(GetNpcPos, NPC_MontyMole_04, LVar0, LVar1, LVar2) - Call(IsPlayerWithin, LVar0, LVar2, MV_NextBurrowTriggerRadius, LV_ShouldBurrow) - EndIf - Call(GetPartnerInUse, LVar9) - IfEq(LVar9, PARTNER_BOW) - Set(LV_ShouldBurrow, FALSE) - EndIf - IfEq(MV_PauseBurrowing, TRUE) - Set(LV_ShouldBurrow, FALSE) - EndIf - IfEq(LV_ShouldBurrow, TRUE) - IfEq(AF_FLO_IsUnderground_Mole_04, FALSE) - Call(SetNpcFlagBits, NPC_MontyMole_04, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Call(NpcFacePlayer, NPC_MontyMole_04, 1) - Wait(1) - Set(AF_FLO_IsUnderground_Mole_04, TRUE) - IfNe(MV_NextBurrowTime_Mole_04, 0) - IfLt(GB_StoryProgress, STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Set(LVar1, 4) - Else - Set(LVar1, 10) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_04, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_MontyMole_04, EMOTE_EXCLAMATION, 0, LVar1, EMOTER_NPC, 0, 0, 0, 0) - Wait(LVar1) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 1) - EndIf - Call(PlaySoundAtNpc, NPC_MontyMole_04, SOUND_BURROW_DIG, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim11) - Wait(20) - IfEq(GF_FLO03_Defeated_MontyMoleD, FALSE) - Call(SetNpcPos, NPC_MontyMole_04, 0, -50, 0) - EndIf - Wait(45) - EndIf - Else - IfEq(AF_FLO_IsUnderground_Mole_04, TRUE) - IfEq(GF_FLO03_Defeated_MontyMoleD, FALSE) - Call(RandInt, ARRAY_COUNT(N(BurrowLocations_Mole_04)) - 1, LVar0) - Add(LVar0, 1) - UseBuf(Ref(N(BurrowLocations_Mole_04))) - Loop(LVar0) - BufRead3(LVar1, LVar2, LVar3) - EndLoop - Call(SetNpcPos, NPC_MontyMole_04, LVar1, LVar2, LVar3) - EndIf - Call(SetNpcFlagBits, NPC_MontyMole_04, NPC_FLAG_FLYING | NPC_FLAG_IGNORE_WORLD_COLLISION | NPC_FLAG_IGNORE_ENTITY_COLLISION, TRUE) - Set(AF_FLO_IsUnderground_Mole_04, FALSE) - Call(NpcFacePlayer, NPC_MontyMole_04, 1) - Wait(1) - Call(PlaySoundAtNpc, NPC_MontyMole_04, SOUND_BURROW_SURFACE, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim10) - Wait(10) - Call(SetSelfEnemyFlagBits, ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_IGNORE_JUMP | ENEMY_FLAG_IGNORE_HAMMER | ENEMY_FLAG_IGNORE_PARTNER, 0) - Call(RandInt, 45, LVar0) - Add(LVar0, 45) - Set(MV_NextBurrowTime_Mole_04, LVar0) - Else - IfGt(MV_NextBurrowTime_Mole_04, 0) - Sub(MV_NextBurrowTime_Mole_04, 1) - EndIf - EndIf - EndIf - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_NpcInit_MontyMole_01) = { - Call(BindNpcHit, NPC_SELF, Ref(N(EVS_NpcHit_MontyMole))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_MontyMole))) - Call(EnableNpcShadow, NPC_MontyMole_01, FALSE) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_01))) - Call(SetNpcAnimation, NPC_MontyMole_01, ANIM_MontyMole_Dark_Anim10) - CaseEq(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_Defeated_MontyMoleA, FALSE) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_01))) - Call(SetNpcAnimation, NPC_MontyMole_01, ANIM_MontyMole_Dark_Anim10) - Call(SetEnemyFlagBits, NPC_MontyMole_01, ENEMY_FLAG_PASSIVE, 0) - Else - Call(SetNpcPos, NPC_MontyMole_01, NPC_DISPOSE_LOCATION) - EndIf - CaseDefault - Call(SetNpcPos, NPC_MontyMole_01, NPC_DISPOSE_LOCATION) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_MontyMole_02) = { - Call(BindNpcHit, NPC_SELF, Ref(N(EVS_NpcHit_MontyMole))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_MontyMole))) - Call(EnableNpcShadow, NPC_MontyMole_02, FALSE) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_02))) - Call(SetNpcAnimation, NPC_MontyMole_02, ANIM_MontyMole_Dark_Anim10) - CaseEq(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_Defeated_MontyMoleB, FALSE) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_02))) - Call(SetNpcAnimation, NPC_MontyMole_02, ANIM_MontyMole_Dark_Anim10) - Call(SetEnemyFlagBits, NPC_MontyMole_02, ENEMY_FLAG_PASSIVE, 0) - Else - Call(SetNpcPos, NPC_MontyMole_02, NPC_DISPOSE_LOCATION) - EndIf - CaseDefault - Call(SetNpcPos, NPC_MontyMole_02, NPC_DISPOSE_LOCATION) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_MontyMole_03) = { - Call(BindNpcHit, NPC_SELF, Ref(N(EVS_NpcHit_MontyMole))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_MontyMole))) - Call(EnableNpcShadow, NPC_MontyMole_03, FALSE) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_03))) - Call(SetNpcAnimation, NPC_MontyMole_03, ANIM_MontyMole_Dark_Anim10) - CaseEq(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_Defeated_MontyMoleC, FALSE) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_03))) - Call(SetNpcAnimation, NPC_MontyMole_03, ANIM_MontyMole_Dark_Anim10) - Call(SetEnemyFlagBits, NPC_MontyMole_03, ENEMY_FLAG_PASSIVE, 0) - Else - Call(SetNpcPos, NPC_MontyMole_03, NPC_DISPOSE_LOCATION) - EndIf - CaseDefault - Call(SetNpcPos, NPC_MontyMole_03, NPC_DISPOSE_LOCATION) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_MontyMole_04) = { - Call(BindNpcHit, NPC_SELF, Ref(N(EVS_NpcHit_MontyMole))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_MontyMole))) - Call(EnableNpcShadow, NPC_MontyMole_04, FALSE) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_04))) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim10) - CaseEq(STORY_CH6_ASKED_TO_DEFEAT_MONTY_MOLES) - IfEq(GF_FLO03_Defeated_MontyMoleD, FALSE) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_MontyMole_04))) - Call(SetNpcAnimation, NPC_MontyMole_04, ANIM_MontyMole_Dark_Anim10) - Call(SetEnemyFlagBits, NPC_MontyMole_04, ENEMY_FLAG_PASSIVE, 0) - Else - Call(SetNpcPos, NPC_MontyMole_04, NPC_DISPOSE_LOCATION) - EndIf - CaseDefault - Call(SetNpcPos, NPC_MontyMole_04, NPC_DISPOSE_LOCATION) - EndSwitch - Return - End -}; - -NpcData N(NpcData_Petunia) = { - .id = NPC_Petunia, - .pos = { -30.0f, 0.0f, 100.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Petunia), - .settings = &N(NpcSettings_Petunia), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_Petunia_Idle, - .walk = ANIM_Petunia_Idle, - .run = ANIM_Petunia_Idle, - .chase = ANIM_Petunia_Idle, - .anim_4 = ANIM_Petunia_Idle, - .anim_5 = ANIM_Petunia_Idle, - .death = ANIM_Petunia_Idle, - .hit = ANIM_Petunia_Idle, - .anim_8 = ANIM_Petunia_Idle, - .anim_9 = ANIM_Petunia_Idle, - .anim_A = ANIM_Petunia_Idle, - .anim_B = ANIM_Petunia_Idle, - .anim_C = ANIM_Petunia_Idle, - .anim_D = ANIM_Petunia_Idle, - .anim_E = ANIM_Petunia_Idle, - .anim_F = ANIM_Petunia_Idle, - }, - .tattle = MSG_NpcTattle_Petunia, -}; - -NpcData N(NpcData_Dayzee) = { - .id = NPC_Dayzee, - .pos = { -233.0f, 0.0f, -217.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Dayzee), - .settings = &N(NpcSettings_Dayzee), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_Dayzee_Anim01, - .walk = ANIM_Dayzee_Anim02, - .run = ANIM_Dayzee_Anim03, - .chase = ANIM_Dayzee_Anim03, - .anim_4 = ANIM_Dayzee_Anim01, - .anim_5 = ANIM_Dayzee_Anim01, - .death = ANIM_Dayzee_Anim08, - .hit = ANIM_Dayzee_Anim08, - .anim_8 = ANIM_Dayzee_Anim06, - .anim_9 = ANIM_Dayzee_Anim07, - .anim_A = ANIM_Dayzee_Anim01, - .anim_B = ANIM_Dayzee_Anim01, - .anim_C = ANIM_Dayzee_Anim01, - .anim_D = ANIM_Dayzee_Anim01, - .anim_E = ANIM_Dayzee_Anim01, - .anim_F = ANIM_Dayzee_Anim01, - }, -}; - -NpcData N(NpcData_MontyMole_01) = { - .id = NPC_MontyMole_01, - .pos = { -100.0f, 0.0f, 210.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_MontyMole_01), - .settings = &N(NpcSettings_Dayzee), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_MontyMole_Dark_Anim01, - .walk = ANIM_MontyMole_Dark_Anim02, - .run = ANIM_MontyMole_Dark_Anim03, - .chase = ANIM_MontyMole_Dark_Anim03, - .anim_4 = ANIM_MontyMole_Dark_Anim01, - .anim_5 = ANIM_MontyMole_Dark_Anim01, - .death = ANIM_MontyMole_Dark_Anim05, - .hit = ANIM_MontyMole_Dark_Anim05, - .anim_8 = ANIM_MontyMole_Dark_Anim00, - .anim_9 = ANIM_MontyMole_Dark_Anim00, - .anim_A = ANIM_MontyMole_Dark_Anim00, - .anim_B = ANIM_MontyMole_Dark_Anim00, - .anim_C = ANIM_MontyMole_Dark_Anim00, - .anim_D = ANIM_MontyMole_Dark_Anim00, - .anim_E = ANIM_MontyMole_Dark_Anim00, - .anim_F = ANIM_MontyMole_Dark_Anim00, - }, -}; - -NpcData N(NpcData_MontyMole_02) = { - .id = NPC_MontyMole_02, - .pos = { -130.0f, 0.0f, 0.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_MontyMole_02), - .settings = &N(NpcSettings_Dayzee), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_MontyMole_Dark_Anim01, - .walk = ANIM_MontyMole_Dark_Anim02, - .run = ANIM_MontyMole_Dark_Anim03, - .chase = ANIM_MontyMole_Dark_Anim03, - .anim_4 = ANIM_MontyMole_Dark_Anim01, - .anim_5 = ANIM_MontyMole_Dark_Anim01, - .death = ANIM_MontyMole_Dark_Anim05, - .hit = ANIM_MontyMole_Dark_Anim05, - .anim_8 = ANIM_MontyMole_Dark_Anim00, - .anim_9 = ANIM_MontyMole_Dark_Anim00, - .anim_A = ANIM_MontyMole_Dark_Anim00, - .anim_B = ANIM_MontyMole_Dark_Anim00, - .anim_C = ANIM_MontyMole_Dark_Anim00, - .anim_D = ANIM_MontyMole_Dark_Anim00, - .anim_E = ANIM_MontyMole_Dark_Anim00, - .anim_F = ANIM_MontyMole_Dark_Anim00, - }, -}; - -NpcData N(NpcData_MontyMole_03) = { - .id = NPC_MontyMole_03, - .pos = { 75.0f, 0.0f, 20.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_MontyMole_03), - .settings = &N(NpcSettings_Dayzee), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_MontyMole_Dark_Anim01, - .walk = ANIM_MontyMole_Dark_Anim02, - .run = ANIM_MontyMole_Dark_Anim03, - .chase = ANIM_MontyMole_Dark_Anim03, - .anim_4 = ANIM_MontyMole_Dark_Anim01, - .anim_5 = ANIM_MontyMole_Dark_Anim01, - .death = ANIM_MontyMole_Dark_Anim05, - .hit = ANIM_MontyMole_Dark_Anim05, - .anim_8 = ANIM_MontyMole_Dark_Anim00, - .anim_9 = ANIM_MontyMole_Dark_Anim00, - .anim_A = ANIM_MontyMole_Dark_Anim00, - .anim_B = ANIM_MontyMole_Dark_Anim00, - .anim_C = ANIM_MontyMole_Dark_Anim00, - .anim_D = ANIM_MontyMole_Dark_Anim00, - .anim_E = ANIM_MontyMole_Dark_Anim00, - .anim_F = ANIM_MontyMole_Dark_Anim00, - }, -}; - -NpcData N(NpcData_MontyMole_04) = { - .id = NPC_MontyMole_04, - .pos = { 71.0f, 0.0f, 200.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_MontyMole_04), - .settings = &N(NpcSettings_Dayzee), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_MontyMole_Dark_Anim01, - .walk = ANIM_MontyMole_Dark_Anim02, - .run = ANIM_MontyMole_Dark_Anim03, - .chase = ANIM_MontyMole_Dark_Anim03, - .anim_4 = ANIM_MontyMole_Dark_Anim01, - .anim_5 = ANIM_MontyMole_Dark_Anim01, - .death = ANIM_MontyMole_Dark_Anim05, - .hit = ANIM_MontyMole_Dark_Anim05, - .anim_8 = ANIM_MontyMole_Dark_Anim00, - .anim_9 = ANIM_MontyMole_Dark_Anim00, - .anim_A = ANIM_MontyMole_Dark_Anim00, - .anim_B = ANIM_MontyMole_Dark_Anim00, - .anim_C = ANIM_MontyMole_Dark_Anim00, - .anim_D = ANIM_MontyMole_Dark_Anim00, - .anim_E = ANIM_MontyMole_Dark_Anim00, - .anim_F = ANIM_MontyMole_Dark_Anim00, - }, -}; - -// dead formation IDs differ from the current -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Petunia)), - NPC_GROUP(N(NpcData_Dayzee), 0x1A0F, BTL_FLO_STAGE_01), - NPC_GROUP(N(NpcData_MontyMole_01), 0x1B02, BTL_FLO2_STAGE_01), - NPC_GROUP(N(NpcData_MontyMole_02), 0x1B01, BTL_FLO2_STAGE_01), - NPC_GROUP(N(NpcData_MontyMole_03), 0x1B03, BTL_FLO2_STAGE_01), - NPC_GROUP(N(NpcData_MontyMole_04), 0x1B04, BTL_FLO2_STAGE_01), - {} -}; diff --git a/src/world/dead/area_flo/flo_03/flo_03_4_foliage.c b/src/world/dead/area_flo/flo_03/flo_03_4_foliage.c deleted file mode 100644 index 0a707f59a36..00000000000 --- a/src/world/dead/area_flo/flo_03/flo_03_4_foliage.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "flo_03.h" - -#include "common/foliage.inc.c" - -FoliageModelList N(Tree1_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o170); -FoliageModelList N(Tree1_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o157); - -FoliageDropList N(Tree1_Drops) = { - .count = 2, - .drops = { - { - .itemID = ITEM_RED_BERRY, - .pos = { -256, 102, -169 }, - .spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ALWAYS, - .spawnFlag = AF_FLO_TreeDrop_RedBerry1, - }, - { - .itemID = ITEM_RED_BERRY, - .pos = { -156, 102, -169 }, - .spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ALWAYS, - .spawnFlag = AF_FLO_TreeDrop_RedBerry2, - }, - } -}; - -ShakeTreeConfig N(ShakeTree_Tree1) = { - .leaves = &N(Tree1_LeafModels), - .trunk = &N(Tree1_TrunkModels), - .drops = &N(Tree1_Drops), -}; - -BombTrigger N(BombPos_Tree1) = { - .pos = { -208.0f, 0.0f, -182.0f }, - .radius = 0.0f -}; - -EvtScript N(EVS_SetupFoliage) = { - Set(AF_FLO_TreeDrop_RedBerry1, FALSE) - Set(AF_FLO_TreeDrop_RedBerry2, FALSE) - Set(LVar0, Ref(N(ShakeTree_Tree1))) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o242, 1, 0) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, Ref(N(BombPos_Tree1)), 1, 0) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_03/flo_03_5_entity.c b/src/world/dead/area_flo/flo_03/flo_03_5_entity.c deleted file mode 100644 index d9c6511a832..00000000000 --- a/src/world/dead/area_flo/flo_03/flo_03_5_entity.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_03.h" -#include "entity.h" - -EvtScript N(EVS_EmptyEntityHandler) = { - Return - End -}; - -EvtScript N(EVS_MakeEntities) = { - Call(MakeEntity, Ref(Entity_HiddenPanel), -175, 0, 150, 0, MODEL_o56, MAKE_ENTITY_END) - Call(AssignPanelFlag, GF_FLO03_HiddenPanel) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_07/flo_07.h b/src/world/dead/area_flo/flo_07/flo_07.h deleted file mode 100644 index 80e8cb58003..00000000000 --- a/src/world/dead/area_flo/flo_07/flo_07.h +++ /dev/null @@ -1,30 +0,0 @@ -// Older version of flo_07 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_07_shape.h" -#include "mapfs/flo_07_hit.h" - -enum { - NPC_Posie = 0, -}; - -enum { - MV_GroundShakingScript = MapVar(0), -}; - -#define NAMESPACE dead_flo_07 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_PushFlowerSong); -extern EvtScript N(EVS_PopSong); -extern EvtScript N(EVS_Scene_SunReturns); -extern EvtScript N(EVS_TryKickingPlayerOut); -extern EvtScript N(EVS_SetupFoliage); - -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_07/flo_07_0_header.c b/src/world/dead/area_flo/flo_07/flo_07_0_header.c deleted file mode 100644 index e2ce220aebc..00000000000 --- a/src/world/dead/area_flo/flo_07/flo_07_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_07.h" - -EntryList N(Entrances) = { - [flo_07_ENTRY_0] { 375.0, 0.0, 0.0, 270.0 }, - [flo_07_ENTRY_1] { 325.0, 0.0, 0.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_07 }, -}; diff --git a/src/world/dead/area_flo/flo_07/flo_07_1_music.c b/src/world/dead/area_flo/flo_07/flo_07_1_music.c deleted file mode 100644 index c0e51e32bfb..00000000000 --- a/src/world/dead/area_flo/flo_07/flo_07_1_music.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "flo_07.h" - -EvtScript N(EVS_SetupMusic) = { - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_07_ENTRY_1) - Call(SetMusicTrack, 0, SONG_SUNSHINE_RETURNS, 0, 8) - Else - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - EndIf - Call(PlaySound, SOUND_LOOP_FLO_WATER_FLOW_1) - Return - End -}; - -EvtScript N(EVS_PushFlowerSong) = { - Call(PushSong, SONG_FLOWER_NPC_THEME, 1) - Return - End -}; - -EvtScript N(EVS_PopSong) = { - Call(FadeOutMusic, 0, 250) - Wait(10) - Call(PopSong) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_07/flo_07_2_main.c b/src/world/dead/area_flo/flo_07/flo_07_2_main.c deleted file mode 100644 index 7537db10b65..00000000000 --- a/src/world/dead/area_flo/flo_07/flo_07_2_main.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "flo_07.h" - -#include "world/common/atomic/TexturePan.inc.c" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -#include "world/common/todo/SpawnSunEffect.inc.c" - -EvtScript N(EVS_ExitWalk_flo_25_1) = EVT_EXIT_WALK(60, flo_07_ENTRY_0, "flo_25", flo_25_ENTRY_1); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_25_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -API_CALLABLE(N(CreateCrystalTreeSparkles)) { - EffectInstance* effect = fx_misc_particles(3, -272.0f, 80.0f, 20.0f, 200.0f, 120.0f, 4.0f, 8, 0); - - effect->data.miscParticles->innerColor.r = 240; - effect->data.miscParticles->innerColor.g = 240; - effect->data.miscParticles->innerColor.b = 240; - effect->data.miscParticles->glowColor.r = 230; - effect->data.miscParticles->glowColor.g = 230; - effect->data.miscParticles->glowColor.b = 240; - return ApiStatus_DONE2; -} - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Set(AF_FLO_MadeCrystalBerry, FALSE) - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_SetupFoliage)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o76, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( 297, -95, 383, -65, 0 ) - EVT_FLOWER_SPAWN_REGION( 293, 71, 378, 113, 0 ) - EVT_FLOWER_SPAWN_REGION( 21, -346, 147, -242, 20 ) - EVT_FLOWER_SPAWN_REGION( -350, -190, -81, -106, 0 ) - EVT_FLOWER_SPAWN_REGION( -380, 85, -95, 150, 0 ) - Call(EnableTexPanning, MODEL_o51, TRUE) - Call(EnableTexPanning, MODEL_o36, TRUE) - Call(EnableTexPanning, MODEL_o37, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_2) - TEX_PAN_PARAMS_STEP( -100, 100, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_3) - TEX_PAN_PARAMS_STEP( 0,-1200, 0, 0) - TEX_PAN_PARAMS_FREQ( 0, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_07_ENTRY_1) - Exec(N(EVS_Scene_SunReturns)) - Else - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - Exec(N(EVS_TryKickingPlayerOut)) - EndIf - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Call(N(CreateCrystalTreeSparkles)) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_07/flo_07_3_npc.c b/src/world/dead/area_flo/flo_07/flo_07_3_npc.c deleted file mode 100644 index 960fc853e8c..00000000000 --- a/src/world/dead/area_flo/flo_07/flo_07_3_npc.c +++ /dev/null @@ -1,249 +0,0 @@ -#include "flo_07.h" - -#include "world/common/npc/Posie.inc.c" - -#include "common/foliage.inc.c" - -#include "world/common/complete/GiveReward.inc.c" - -EvtScript N(EVS_Scene_SunReturns) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(GetNpcPos, NPC_Posie, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Add(LVar0, 30) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamPitch, CAM_DEFAULT, Float(11.0), Float(-11.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_00C5) - Wait(10) - Call(GotoMap, Ref("flo_10"), flo_10_ENTRY_1) - Wait(100) - Return - End -}; - -EvtScript N(EVS_ShakeGround) = { - Label(0) - Call(ShakeCam, CAM_DEFAULT, 0, 1, Float(1.0)) - Wait(1) - Goto(0) - Return - End -}; - -EvtScript N(EVS_MakeCrystalBerry) = { - IfEq(AF_FLO_MadeCrystalBerry, TRUE) - Return - EndIf - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0068) - Thread - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamPitch, CAM_DEFAULT, Float(18.0), Float(-7.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(0.5)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - EndThread - Call(PlaySound, SOUND_LOOP_RUMBLE) - ExecGetTID(N(EVS_ShakeGround), MV_GroundShakingScript) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Strain, ANIM_Posie_Strain, 0, MSG_CH6_0069) - KillThread(MV_GroundShakingScript) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamPitch, CAM_DEFAULT, Float(18.0), Float(-7.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(8.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Sub(LVar0, LVar2) - IfLt(LVar0, -250) - Call(MakeItemEntity, ITEM_CRYSTAL_BERRY, -225, 100, -25, ITEM_SPAWN_MODE_FALL_NEVER_VANISH, GF_FLO07_Item_CrystalBerry) - Else - Call(MakeItemEntity, ITEM_CRYSTAL_BERRY, -265, 100, 54, ITEM_SPAWN_MODE_FALL_NEVER_VANISH, GF_FLO07_Item_CrystalBerry) - Set(GF_FLO07_CrystalBerryFellOnLeftSide, TRUE) - EndIf - Call(PlaySound, SOUND_LRAW_RUMBLE | SOUND_ID_TRIGGER_CHANGE_SOUND) - Call(StopTrackingSoundPos, SOUND_LRAW_RUMBLE) - Set(AF_FLO_MadeCrystalBerry, TRUE) - Wait(20) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_006A) - Set(GB_StoryProgress, STORY_CH6_GOT_CRYSTAL_BERRY) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Posie) = { - ExecWait(N(EVS_PushFlowerSong)) - Call(NpcFacePlayer, NPC_SELF, 1) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - IfEq(AF_FLO_PoiseHintDialogue, FALSE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0070) - Set(AF_FLO_PoiseHintDialogue, TRUE) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0071) - EndIf - CaseLt(STORY_CH6_GOT_FERTILE_SOIL) - Call(AdjustCam, CAM_DEFAULT, Float(4.0), 0, Float(350.0), Float(18.0), Float(-7.5)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0065) - Call(SetNpcAnimation, NPC_SELF, ANIM_Posie_GiveItem) - Wait(20) - Call(SetNpcAnimation, NPC_SELF, ANIM_Posie_Still) - EVT_GIVE_KEY_REWARD(ITEM_FERTILE_SOIL) - Set(GB_StoryProgress, STORY_CH6_GOT_FERTILE_SOIL) - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0066) - IfEq(GF_FLO12_RosieRequestedSomethingBeautiful, TRUE) - ExecWait(N(EVS_MakeCrystalBerry)) - EndIf - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - CaseLt(STORY_CH6_GOT_CRYSTAL_BERRY) - IfEq(GF_FLO12_RosieRequestedSomethingBeautiful, TRUE) - IfEq(AF_FLO_MadeCrystalBerry, FALSE) - Call(AdjustCam, CAM_DEFAULT, Float(4.0), 0, Float(350.0), Float(18.0), Float(-7.5)) - ExecWait(N(EVS_MakeCrystalBerry)) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0072) - EndIf - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0072) - EndIf - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - IfEq(GF_FLO07_Item_CrystalBerry, FALSE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0072) - Else - IfLt(GB_StoryProgress, STORY_CH6_GOT_WATER_STONE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0073) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0074) - EndIf - Call(ContinueSpeech, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0075) - EndIf - CaseLt(STORY_CH6_RETURNED_TO_TOAD_TOWN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0076) - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_0077) - EndSwitch - ExecWait(N(EVS_PopSong)) - Return - End -}; - -EvtScript N(EVS_NpcInit_Posie) = { - IfEq(GB_StoryProgress, STORY_CH6_GOT_CRYSTAL_BERRY) - IfEq(GF_FLO07_Item_CrystalBerry, FALSE) - IfEq(GF_FLO07_CrystalBerryFellOnLeftSide, FALSE) - Call(MakeItemEntity, ITEM_CRYSTAL_BERRY, -225, 0, -25, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO07_Item_CrystalBerry) - Else - Call(MakeItemEntity, ITEM_CRYSTAL_BERRY, -265, 0, 54, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO07_Item_CrystalBerry) - EndIf - EndIf - EndIf - Set(AF_FLO_PoiseHintDialogue, FALSE) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Posie))) - Return - End -}; - -EvtScript N(EVS_TryKickingPlayerOut) = { - IfNe(AB_FLO_PoiseKickedOutCount, 0) - Call(DisablePlayerInput, TRUE) - Wait(10) - IfLt(AB_FLO_PoiseKickedOutCount, 5) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_006E) - Call(GetPlayerPos, LVar1, LVar2, LVar3) - Call(PlayerMoveTo, 410, LVar3, 10) - Add(AB_FLO_PoiseKickedOutCount, 1) - Else - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Talk, ANIM_Posie_Idle, 0, MSG_CH6_006F) - Set(AB_FLO_PoiseKickedOutCount, 0) - EndIf - Call(DisablePlayerInput, FALSE) - EndIf - Return - End -}; - -EvtScript N(EVS_OnHit_CrystalTree) = { - Call(DisablePlayerInput, TRUE) - IfLt(GB_StoryProgress, STORY_CH6_GOT_CRYSTAL_BERRY) - Call(NpcFacePlayer, NPC_Posie, 1) - Wait(10) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Confused, ANIM_Posie_Idle, 0, MSG_CH6_0067) - IfEq(GB_StoryProgress, STORY_CH6_GOT_FERTILE_SOIL) - IfEq(GF_FLO12_RosieRequestedSomethingBeautiful, TRUE) - Call(UseSettingsFrom, CAM_DEFAULT, -250, 0, 0) - Call(SetPanTarget, CAM_DEFAULT, -250, 0, 0) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - ExecWait(N(EVS_MakeCrystalBerry)) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - EndIf - EndIf - Else - IfEq(GF_FLO07_Item_CrystalBerry, FALSE) - Call(NpcFacePlayer, NPC_Posie, 1) - Wait(10) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_Confused, ANIM_Posie_Idle, 0, MSG_CH6_0067) - Else - Add(AB_FLO_CrystalTreeHitCount, 1) - Switch(AB_FLO_CrystalTreeHitCount) - CaseLt(2) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_TalkAngry, ANIM_Posie_Idle, 0, MSG_CH6_006B) - CaseLt(5) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_TalkAngry, ANIM_Posie_Idle, 0, MSG_CH6_006C) - CaseGe(5) - Call(SpeakToPlayer, NPC_Posie, ANIM_Posie_TalkAngry, ANIM_Posie_Idle, 0, MSG_CH6_006D) - Set(AB_FLO_PoiseKickedOutCount, 1) - Call(GotoMap, Ref("flo_25"), flo_25_ENTRY_1) - Wait(100) - EndSwitch - EndIf - EndIf - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -FoliageModelList N(CrystalTree_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o6, MODEL_o7, MODEL_o8); -FoliageModelList N(CrystalTree_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o5); - -ShakeTreeConfig N(ShakeTree_CrystalTree) = { - .leaves = &N(CrystalTree_LeafModels), - .trunk = &N(CrystalTree_TrunkModels), - .callback = &N(EVS_OnHit_CrystalTree), -}; - -BombTrigger N(BombPos_CrystalTree) = { - .pos = { -309.0f, 0.0f, 31.0f }, - .radius = 0.0f -}; - -EvtScript N(EVS_SetupFoliage) = { - Set(LVar0, Ref(N(ShakeTree_CrystalTree))) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o5, 1, 0) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, Ref(N(BombPos_CrystalTree)), 1, 0) - Return - End -}; - -NpcData N(NpcData_Posie) = { - .id = NPC_Posie, - .pos = { -260.0f, 0.0f, 0.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Posie), - .settings = &N(NpcSettings_Posie), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = POSIE_ANIMS, - .tattle = MSG_NpcTattle_Posie, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Posie)), - {} -}; diff --git a/src/world/dead/area_flo/flo_08/flo_08.h b/src/world/dead/area_flo/flo_08/flo_08.h deleted file mode 100644 index 560f50094d3..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08.h +++ /dev/null @@ -1,35 +0,0 @@ -// Older version of flo_08 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_08_shape.h" -#include "mapfs/flo_08_hit.h" - -enum { - NPC_GateFlower = 0, - NPC_Dayzee_01 = 1, - NPC_Dayzee_02 = 2, - NPC_Dayzee_03 = 3, - NPC_Dayzee_04 = 4, - NPC_Dayzee_05 = 5, - NPC_Dayzee_06 = 6, - NPC_Dayzee_07 = 7, - NPC_AmazyDayzee = 8, -}; - -enum { - MV_SuperBlock = MapVar(0), -}; - -#define NAMESPACE dead_flo_08 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_MakeEntities); -extern EvtScript N(EVS_SetupFoliage); -extern EvtScript N(EVS_SetupVines); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_08/flo_08_0_header.c b/src/world/dead/area_flo/flo_08/flo_08_0_header.c deleted file mode 100644 index b2a3d28edf0..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_08.h" - -EntryList N(Entrances) = { - [flo_08_ENTRY_0] { -870.0, 0.0, 0.0, 90.0 }, - [flo_08_ENTRY_1] { 570.0, 0.0, 0.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_08 }, -}; diff --git a/src/world/dead/area_flo/flo_08/flo_08_1_music.c b/src/world/dead/area_flo/flo_08/flo_08_1_music.c deleted file mode 100644 index 2611463150b..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08_1_music.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "flo_08.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_08/flo_08_2_entity.c b/src/world/dead/area_flo/flo_08/flo_08_2_entity.c deleted file mode 100644 index 10353001c00..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08_2_entity.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "flo_08.h" -#include "entity.h" - -#define SUPER_BLOCK_MAPVAR MV_SuperBlock -#define SUPER_BLOCK_GAMEFLAG GF_FLO08_SuperBlock -#include "world/common/entity/SuperBlock.inc.c" - -EvtScript N(EVS_MakeEntities) = { - EVT_MAKE_SUPER_BLOCK(-780, 120, -110, 0) - Call(MakeItemEntity, ITEM_STAR_PIECE, 510, 0, -90, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO08_Item_StarPiece) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_08/flo_08_3_main.c b/src/world/dead/area_flo/flo_08/flo_08_3_main.c deleted file mode 100644 index 170fb456d7c..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08_3_main.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "flo_08.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_00_6) = EVT_EXIT_WALK(60, flo_08_ENTRY_0, "flo_00", flo_00_ENTRY_6); -EvtScript N(EVS_ExitWalk_flo_24_0) = EVT_EXIT_WALK(60, flo_08_ENTRY_1, "flo_24", flo_24_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_00_6)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_24_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o158, .pos = { -540.0, 0.0, 50.0 }}, - { .colliderID = COLLIDER_o132, .pos = { 60.0, 0.0, 50.0 }}, - { .colliderID = COLLIDER_o223, .pos = { 60.0, 0.0, 50.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Exec(N(EVS_SetupVines)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o114, SURFACE_TYPE_SPIKES) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Call(EnableTexPanning, MODEL_o25, TRUE) - Call(EnableTexPanning, MODEL_o27, TRUE) - Call(EnableTexPanning, MODEL_o31, TRUE) - Call(EnableTexPanning, MODEL_o33, TRUE) - Call(EnableTexPanning, MODEL_o35, TRUE) - Call(EnableTexPanning, MODEL_o37, TRUE) - Call(EnableTexPanning, MODEL_o55, TRUE) - Call(EnableTexPanning, MODEL_o28, TRUE) - Call(EnableTexPanning, MODEL_o32, TRUE) - Call(EnableTexPanning, MODEL_o34, TRUE) - Call(EnableTexPanning, MODEL_o36, TRUE) - Call(EnableTexPanning, MODEL_o38, TRUE) - Thread - Set(LVar0, 0) - Set(LVar1, 0) - Label(0) - Add(LVar0, 140) - IfGt(LVar0, 0x10000) - Add(LVar0, -0x10000) - EndIf - Call(SetTexPanOffset, 1, 0, LVar0, 0) - Add(LVar1, -200) - IfLt(LVar1, 0) - Add(LVar1, 0x10000) - EndIf - Call(SetTexPanOffset, 2, 0, LVar1, 0) - Wait(1) - Goto(0) - EndThread - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o129, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION(140, -137, 340, -60, 0) - EVT_FLOWER_SPAWN_REGION(450, -137, 590, -60, 0) - Exec(N(EVS_SetupFoliage)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_08/flo_08_4_npc.c b/src/world/dead/area_flo/flo_08/flo_08_4_npc.c deleted file mode 100644 index 62c07e089da..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08_4_npc.c +++ /dev/null @@ -1,390 +0,0 @@ -#include "flo_08.h" -#include "sprite/player.h" - -#include "world/common/enemy/AmazyDayzee.inc.c" -#include "world/common/npc/GateFlower.inc.c" -#include "world/common/enemy/CrazyDayzee.inc.c" - -#include "world/common/complete/NormalItemChoice.inc.c" - -static s32 N(FlowerGuard_ItemChoiceList)[ITEM_NUM_CONSUMABLES + 1]; -#include "world/area_flo/common/ItemChoice_FlowerGuard.inc.c" - -EvtScript N(EVS_NpcInteract_GateFlower) = { - Call(DisablePlayerInput, TRUE) - IfEq(GF_FLO08_GaveYellowBerry, FALSE) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamPitch, CAM_DEFAULT, Float(18.5), Float(-7.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_Talk, ANIM_GateFlower_Yellow_Idle, 0, MSG_CH6_0042) - Call(SetPlayerAnimation, ANIM_Mario1_Thinking) - Call(N(FlowerGuard_MakeItemList)) - EVT_CHOOSE_CONSUMABLE_FROM(N(FlowerGuard_ItemChoiceList), 0) - Switch(LVar0) - CaseLe(0) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_Talk, ANIM_GateFlower_Yellow_Idle, 0, MSG_CH6_0043) - CaseDefault - Set(LVar8, LVar0) - Call(N(FlowerGuard_JudgeItemTastiness), LVar0) - Call(MakeItemEntity, LVar8, -695, 20, -29, ITEM_SPAWN_MODE_DECORATION, 0) - Set(LVar7, LVar0) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_EAT_OR_DRINK, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_Eat) - Wait(20) - Call(RemoveItemEntity, LVar7) - Switch(LVar8) - CaseEq(160) - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_Chew, ANIM_GateFlower_Yellow_Idle, 0, MSG_CH6_0046) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_APPROVE, SOUND_SPACE_DEFAULT) - Call(EndSpeech, NPC_SELF, ANIM_GateFlower_Yellow_HappyTalk, ANIM_GateFlower_Yellow_HappyIdle, 0) - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_OpenGate) - Call(PlaySoundAtCollider, COLLIDER_o96, SOUND_METAL_GATE_OPEN, SOUND_SPACE_DEFAULT) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o96, COLLIDER_FLAGS_UPPER_MASK) - Call(MakeLerp, 0, 100, 30, EASING_QUADRATIC_IN) - Loop(0) - Call(UpdateLerp) - SetF(LVar8, LVar0) - SetF(LVar9, LVar0) - MulF(LVar8, Float(0.5)) - MulF(LVar9, Float(1.2)) - Call(RotateModel, MODEL_o69, LVar8, 0, 1, 0) - Call(RotateModel, MODEL_o70, LVar8, 0, 1, 0) - Call(RotateModel, MODEL_o71, LVar8, 0, 1, 0) - Call(RotateModel, MODEL_o148, LVar9, 0, -1, 0) - Call(RotateModel, MODEL_o149, LVar9, 0, -1, 0) - Call(RotateModel, MODEL_o150, LVar9, 0, -1, 0) - Wait(1) - IfNe(LVar1, 1) - BreakLoop - EndIf - EndLoop - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_HappyDance) - Set(GF_FLO08_GaveYellowBerry, TRUE) - CaseEq(159) - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_Chew, ANIM_GateFlower_Yellow_Idle, 0, MSG_CH6_0045) - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_Idle) - CaseEq(158) - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_Chew, ANIM_GateFlower_Yellow_Idle, 0, MSG_CH6_0045) - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_Idle) - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_Chew, ANIM_GateFlower_Yellow_Idle, 0, MSG_CH6_0044) - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_Disgust) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_SPIT_OUT, SOUND_SPACE_DEFAULT) - Call(MakeItemEntity, LVar8, 125, 20, 0, ITEM_SPAWN_MODE_DECORATION, 0) - Set(LVar7, LVar0) - Wait(5) - Call(GetAngleToPlayer, NPC_SELF, LVar0) - IfLt(LVar0, 180) - Call(MakeLerp, 0, 100, 7, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - SetF(LVar2, Float(-0.5)) - SetF(LVar3, Float(-0.2)) - SetF(LVar4, Float(0.9)) - MulF(LVar2, LVar0) - MulF(LVar3, LVar0) - MulF(LVar4, LVar0) - AddF(LVar2, Float(-700.0)) - AddF(LVar3, Float(15.0)) - AddF(LVar4, Float(-25.0)) - Call(N(FlowerGuard_SetItemEntityPosition), LVar7, LVar2, LVar3, LVar4) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Else - Call(MakeLerp, 0, 100, 7, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - SetF(LVar2, Float(0.5)) - SetF(LVar3, Float(-0.2)) - SetF(LVar4, Float(0.9)) - MulF(LVar2, LVar0) - MulF(LVar3, LVar0) - MulF(LVar4, LVar0) - AddF(LVar2, Float(-690.0)) - AddF(LVar3, Float(15.0)) - AddF(LVar4, Float(-25.0)) - Call(N(FlowerGuard_SetItemEntityPosition), LVar7, LVar2, LVar3, LVar4) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndIf - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_Idle) - Call(RemoveItemEntity, LVar7) - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_Idle) - Call(EndSpeech, NPC_SELF, ANIM_GateFlower_Yellow_Talk, ANIM_GateFlower_Yellow_Idle, 0) - EndSwitch - EndSwitch - Thread - Call(ResetCam, CAM_DEFAULT, Float(6.0)) - EndThread - Wait(10) - Else - IfLt(GB_StoryProgress, STORY_CH6_STAR_SPIRIT_RESCUED) - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_HappyTalk, ANIM_GateFlower_Yellow_HappyIdle, 0, MSG_CH6_0047) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_GateFlower_Yellow_HappyTalk, ANIM_GateFlower_Yellow_HappyIdle, 0, MSG_CH6_0048) - EndIf - EndIf - Call(DisablePlayerInput, FALSE) - Unbind - Return - End -}; - -EvtScript N(EVS_NpcInit_GateFlower) = { - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_GateFlower))) - IfEq(GF_FLO08_GaveYellowBerry, TRUE) - Call(SetNpcAnimation, NPC_SELF, ANIM_GateFlower_Yellow_HappyDance) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o96, COLLIDER_FLAGS_UPPER_MASK) - Call(RotateModel, MODEL_o69, 50, 0, 1, 0) - Call(RotateModel, MODEL_o70, 50, 0, 1, 0) - Call(RotateModel, MODEL_o71, 50, 0, 1, 0) - Call(RotateModel, MODEL_o148, 120, 0, -1, 0) - Call(RotateModel, MODEL_o149, 120, 0, -1, 0) - Call(RotateModel, MODEL_o150, 120, 0, -1, 0) - EndIf - Return - End -}; - -NpcData N(NpcData_GateFlower) = { - .id = NPC_GateFlower, - .pos = { -695.0f, 0.0f, -30.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_GateFlower), - .settings = &N(NpcSettings_GateFlower), - .flags = COMMON_PASSIVE_FLAGS | ENEMY_FLAG_NO_SHADOW_RAYCAST | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = GATE_FLOWER_YELLOW_ANIMS, - .tattle = MSG_NpcTattle_YellowGateFlower, -}; - -NpcData N(NpcData_Dayzee_01) = { - .id = NPC_Dayzee_01, - .pos = { 205.0f, 0.0f, -80.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 205, 0, -80 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 205, 0, -80 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Dayzee_02) = { - .id = NPC_Dayzee_02, - .pos = { 275.0f, 0.0f, -115.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 275, 0, -115 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 275, 0, -115 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Dayzee_03) = { - .id = NPC_Dayzee_03, - .pos = { -230.0f, 60.0f, -110.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -230, 60, -110 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -230, 60, -110 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Dayzee_04) = { - .id = NPC_Dayzee_04, - .pos = { -330.0f, 60.0f, -110.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -330, 60, -110 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -330, 60, -110 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Dayzee_05) = { - .id = NPC_Dayzee_05, - .pos = { -430.0f, 60.0f, -110.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -430, 60, -110 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -430, 60, -110 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Dayzee_06) = { - .id = NPC_Dayzee_06, - .pos = { -530.0f, 60.0f, -110.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -530, 60, -110 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -530, 60, -110 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Dayzee_07) = { - .id = NPC_Dayzee_07, - .pos = { -630.0f, 60.0f, -110.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -630, 60, -110 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -630, 60, -110 }, - .detectSize = { 150 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -EvtScript N(EVS_NpcInit_AmazyDayzee) = { - Thread - Wait(2) - Call(GetNpcPointer, NPC_Dayzee_02, LVar0) - IfEq(LVar0, 0) - Call(RemoveNpc, NPC_SELF) - Return - EndIf - Call(RandInt, 100, LVar0) - IfLt(LVar0, 30) - Call(SetNpcFlagBits, NPC_Dayzee_02, NPC_FLAG_INVISIBLE | NPC_FLAG_INACTIVE, TRUE) - Call(SetNpcPos, NPC_Dayzee_02, NPC_DISPOSE_LOCATION) - Else - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_INVISIBLE | NPC_FLAG_INACTIVE, TRUE) - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - EndThread - Return - End -}; - -NpcData N(NpcData_AmazyDayzee) = { - .id = NPC_AmazyDayzee, - .pos = { 240.0f, 0.0f, -90.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 240, 0, -90 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 240, 0, -90 }, - .detectSize = { 200 }, - } - }, - .init = &N(EVS_NpcInit_AmazyDayzee), - .settings = &N(NpcSettings_AmazyDayzee), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = AMAZY_DAYZEE_DROPS, - .animations = AMAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_GateFlower)), - NPC_GROUP(N(NpcData_Dayzee_01), 0x1A14, BTL_FLO_STAGE_00), - NPC_GROUP(N(NpcData_Dayzee_02), 0x1A0F, BTL_FLO_STAGE_00), - NPC_GROUP(N(NpcData_Dayzee_03), 0x1A0F, BTL_FLO_STAGE_01), - NPC_GROUP(N(NpcData_Dayzee_04), 0x1A0F, BTL_FLO_STAGE_01), - NPC_GROUP(N(NpcData_Dayzee_05), 0x1A0F, BTL_FLO_STAGE_01), - NPC_GROUP(N(NpcData_Dayzee_06), 0x1A0F, BTL_FLO_STAGE_01), - NPC_GROUP(N(NpcData_Dayzee_07), 0x1A12, BTL_FLO_STAGE_01), - NPC_GROUP(N(NpcData_AmazyDayzee), 0x1A1C, BTL_FLO_STAGE_00), - {} -}; diff --git a/src/world/dead/area_flo/flo_08/flo_08_5_foliage.c b/src/world/dead/area_flo/flo_08/flo_08_5_foliage.c deleted file mode 100644 index 7955e91f6e0..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08_5_foliage.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "flo_08.h" - -#include "common/foliage.inc.c" - -FoliageModelList N(Tree1_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o133); -FoliageModelList N(Tree1_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o132); - -FoliageDropList N(Tree1_Drops) = { - .count = 2, - .drops = { - { - .itemID = ITEM_BLUE_BERRY, - .pos = { 340, 102, -89 }, - .spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ALWAYS, - .spawnFlag = AF_FLO_TreeDrop_BlueBerry1, - }, - { - .itemID = ITEM_BLUE_BERRY, - .pos = { 440, 102, -89 }, - .spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ALWAYS, - .spawnFlag = AF_FLO_TreeDrop_BlueBerry2, - }, - } -}; - -ShakeTreeConfig N(ShakeTree_Tree1) = { - .leaves = &N(Tree1_LeafModels), - .trunk = &N(Tree1_TrunkModels), - .drops = &N(Tree1_Drops), -}; - -BombTrigger N(BombPos_Tree1) = { - .pos = { 391.0f, 0.0f, -102.0f }, - .radius = 0.0f -}; - -EvtScript N(EVS_SetupFoliage) = { - Set(AF_FLO_TreeDrop_BlueBerry1, FALSE) - Set(AF_FLO_TreeDrop_BlueBerry2, FALSE) - Set(LVar0, Ref(N(ShakeTree_Tree1))) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o172, 1, 0) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, Ref(N(BombPos_Tree1)), 1, 0) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_08/flo_08_6_vines.c b/src/world/dead/area_flo/flo_08/flo_08_6_vines.c deleted file mode 100644 index 3aa693a8493..00000000000 --- a/src/world/dead/area_flo/flo_08/flo_08_6_vines.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "flo_08.h" - -// unused extra import for flower-spawning regions -#define NAMESPACE dead_flo_08_vines -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" -#define NAMESPACE dead_flo_08 - -#include "world/area_flo/common/DroppingVine.inc.c" - -EvtScript N(EVS_SetupVines) = { - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o78, MODEL_o79, MODEL_o80, MODEL_o81) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o82, MODEL_o83, MODEL_o84, MODEL_o85) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o88, MODEL_o89, MODEL_o90, MODEL_o91) - EVT_DROPPING_VINE(ITEM_STINKY_HERB, MODEL_o159, MODEL_o158, MODEL_o160, MODEL_o161) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_09/flo_09.h b/src/world/dead/area_flo/flo_09/flo_09.h deleted file mode 100644 index c19da83f1ce..00000000000 --- a/src/world/dead/area_flo/flo_09/flo_09.h +++ /dev/null @@ -1,28 +0,0 @@ -// Older version of flo_09 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_09_shape.h" -#include "mapfs/flo_09_hit.h" - -#include "sprite/npc/Dayzee.h" -#include "sprite/npc/Bzzap.h" - -enum { - NPC_Dayzee_01 = 0, - NPC_Dayzee_02 = 1, - NPC_Bzzap_01 = 2, - NPC_Bzzap_02 = 3, -}; - -#define NAMESPACE dead_flo_09 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_SetupFoliage); -extern EvtScript N(EVS_SetupVines); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_09/flo_09_0_header.c b/src/world/dead/area_flo/flo_09/flo_09_0_header.c deleted file mode 100644 index b978d39d1da..00000000000 --- a/src/world/dead/area_flo/flo_09/flo_09_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_09.h" - -EntryList N(Entrances) = { - [flo_09_ENTRY_0] { -520.0, 0.0, 0.0, 90.0 }, - [flo_09_ENTRY_1] { 520.0, 0.0, 0.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_09 }, -}; diff --git a/src/world/dead/area_flo/flo_09/flo_09_1_music.c b/src/world/dead/area_flo/flo_09/flo_09_1_music.c deleted file mode 100644 index 495a8fcceaf..00000000000 --- a/src/world/dead/area_flo/flo_09/flo_09_1_music.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "flo_09.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_09/flo_09_2_main.c b/src/world/dead/area_flo/flo_09/flo_09_2_main.c deleted file mode 100644 index 07e7b3ea924..00000000000 --- a/src/world/dead/area_flo/flo_09/flo_09_2_main.c +++ /dev/null @@ -1,45 +0,0 @@ -#include "flo_09.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_00_5) = EVT_EXIT_WALK(60, flo_09_ENTRY_0, "flo_00", flo_00_ENTRY_5); -EvtScript N(EVS_ExitWalk_flo_03_0) = EVT_EXIT_WALK(60, flo_09_ENTRY_1, "flo_03", flo_03_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_00_5)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_03_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - Exec(N(EVS_SetupVines)) - Exec(N(EVS_SetupFoliage)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o104, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( -511, -4, -319, 10, 0) - EVT_FLOWER_SPAWN_REGION( -302, 77, -32, 116, 0) - EVT_FLOWER_SPAWN_REGION( 51, 18, 141, 127, 0) - EVT_FLOWER_SPAWN_REGION( 234, 38, 502, 98, 0) - EVT_FLOWER_SPAWN_REGION( -525, -163, -400, -80, 60) - EVT_FLOWER_SPAWN_REGION( -346, -148, 517, -91, 60) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_09/flo_09_3_vines.c b/src/world/dead/area_flo/flo_09/flo_09_3_vines.c deleted file mode 100644 index e55204649c6..00000000000 --- a/src/world/dead/area_flo/flo_09/flo_09_3_vines.c +++ /dev/null @@ -1,19 +0,0 @@ -#include "flo_09.h" - -// unused extra import for flower-spawning regions -#define NAMESPACE dead_flo_09_vines -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" -#define NAMESPACE dead_flo_09 - -#include "world/area_flo/common/DroppingVine.inc.c" - -EvtScript N(EVS_SetupVines) = { - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o76, MODEL_o77, MODEL_o78, MODEL_o79) - EVT_DROPPING_VINE(ITEM_STINKY_HERB, MODEL_o72, MODEL_o73, MODEL_o74, MODEL_o75) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o80, MODEL_o81, MODEL_o82, MODEL_o83) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o84, MODEL_o85, MODEL_o86, MODEL_o87) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o96, MODEL_o97, MODEL_o98, MODEL_o99) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o92, MODEL_o93, MODEL_o94, MODEL_o95) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_09/flo_09_4_foliage.c b/src/world/dead/area_flo/flo_09/flo_09_4_foliage.c deleted file mode 100644 index 24467e8022a..00000000000 --- a/src/world/dead/area_flo/flo_09/flo_09_4_foliage.c +++ /dev/null @@ -1,113 +0,0 @@ -#include "flo_09.h" - -#include "common/foliage.inc.c" - -EvtScript N(EVS_SpawnBzzap) = { - Call(GetNpcPos, NPC_Bzzap_02, LVar0, LVar1, LVar2) - IfLt(LVar1, 0) - Call(GetModelCenter, LVar9) - Add(LVar2, 35) - Call(SetNpcPos, NPC_Bzzap_02, LVar0, LVar1, LVar2) - EndIf - Return - End -}; - -EvtScript N(EVS_OnShakeTree1) = { - IfEq(GF_FLO09_Item_HappyFlowerB, FALSE) - IfEq(AB_FLO_TreePuzzle_SecondCorrect, 1) - Call(MakeItemEntity, ITEM_HAPPY_FLOWER_B, -250, 100, 0, ITEM_SPAWN_MODE_FALL_NEVER_VANISH, GF_FLO09_Item_HappyFlowerB) - Else - Set(LVar9, MODEL_o10) - Exec(N(EVS_SpawnBzzap)) - EndIf - Set(AB_FLO_TreePuzzle_FirstCorrect, 0) - Set(AB_FLO_TreePuzzle_SecondCorrect, 0) - EndIf - Return - End -}; - -EvtScript N(EVS_OnShakeTree2) = { - IfEq(GF_FLO09_Item_HappyFlowerB, FALSE) - Set(AB_FLO_TreePuzzle_FirstCorrect, 1) - Set(AB_FLO_TreePuzzle_SecondCorrect, 0) - EndIf - Return - End -}; - -EvtScript N(EVS_OnShakeTree3) = { - IfEq(GF_FLO09_Item_HappyFlowerB, FALSE) - IfEq(AB_FLO_TreePuzzle_FirstCorrect, 1) - IfEq(AB_FLO_TreePuzzle_SecondCorrect, 0) - Set(AB_FLO_TreePuzzle_SecondCorrect, 1) - Return - EndIf - EndIf - Set(LVar9, MODEL_o13) - Exec(N(EVS_SpawnBzzap)) - Set(AB_FLO_TreePuzzle_FirstCorrect, 0) - Set(AB_FLO_TreePuzzle_SecondCorrect, 0) - EndIf - Return - End -}; - -FoliageModelList N(Tree1_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o11, MODEL_o12); -FoliageModelList N(Tree1_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o10); - -ShakeTreeConfig N(ShakeTree_Tree1) = { - .leaves = &N(Tree1_LeafModels), - .trunk = &N(Tree1_TrunkModels), - .callback = &N(EVS_OnShakeTree1), -}; - -BombTrigger N(BombPos_Tree1) = { - .pos = { -200.0f, 0.0f, 1.0f }, - .radius = 0.0f -}; - -FoliageModelList N(Tree2_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o4, MODEL_o5); -FoliageModelList N(Tree2_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o3); - -ShakeTreeConfig N(ShakeTree_Tree2) = { - .leaves = &N(Tree2_LeafModels), - .trunk = &N(Tree2_TrunkModels), - .callback = &N(EVS_OnShakeTree2), -}; - -BombTrigger N(BombPos_Tree2) = { - .pos = { 0.0f, 0.0f, 1.0f }, - .radius = 0.0f -}; - -FoliageModelList N(Tree3_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o14, MODEL_o15); -FoliageModelList N(Tree3_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o13); - -ShakeTreeConfig N(ShakeTree_Tree3) = { - .leaves = &N(Tree3_LeafModels), - .trunk = &N(Tree3_TrunkModels), - .callback = &N(EVS_OnShakeTree3), -}; - -BombTrigger N(BombPos_Tree3) = { - .pos = { 200.0f, 0.0f, 1.0f }, - .radius = 0.0f -}; - -EvtScript N(EVS_SetupFoliage) = { - Set(AB_FLO_TreePuzzle_FirstCorrect, 0) - Set(AB_FLO_TreePuzzle_SecondCorrect, 0) - Set(LVar0, Ref(N(ShakeTree_Tree1))) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o10, 1, 0) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, Ref(N(BombPos_Tree1)), 1, 0) - Set(LVar0, Ref(N(ShakeTree_Tree2))) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o3, 1, 0) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, Ref(N(BombPos_Tree2)), 1, 0) - Set(LVar0, Ref(N(ShakeTree_Tree3))) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o13, 1, 0) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, Ref(N(BombPos_Tree3)), 1, 0) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_09/flo_09_5_npc.c b/src/world/dead/area_flo/flo_09/flo_09_5_npc.c deleted file mode 100644 index 1a6afb2f3d3..00000000000 --- a/src/world/dead/area_flo/flo_09/flo_09_5_npc.c +++ /dev/null @@ -1,160 +0,0 @@ -#include "flo_09.h" - -#include "world/common/enemy/CrazyDayzee.inc.c" - -#include "world/common/enemy/Bzzap.inc.c" - -NpcSettings N(NpcSettings_Bzzap_02) = { - .height = 24, - .radius = 24, - .level = ACTOR_LEVEL_NONE, -}; - -EvtScript N(EVS_NpcAI_Bzzap_02) = { - Loop(0) - Call(GetSelfVar, 0, LVar0) - Switch(LVar0) - CaseEq(0) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - IfGt(LVar1, 0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(SetNpcJumpscale, NPC_SELF, 0) - Call(NpcJump0, NPC_SELF, LVar0, 50, LVar2, 15) - Call(SetSelfVar, 0, 1) - Call(BindNpcAI, NPC_SELF, Ref(N(EVS_NpcAI_Bzzap))) - EndIf - CaseEq(2) - Call(DisablePlayerInput, TRUE) - Wait(25) - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_INVISIBLE, FALSE) - Call(SetSelfVar, 0, 0) - Call(DisablePlayerInput, FALSE) - EndSwitch - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_NpcDefeat_Bzzap_02) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - Call(SetSelfVar, 0, 2) - Call(BindNpcAI, NPC_SELF, Ref(N(EVS_NpcAI_Bzzap_02))) - Call(DoNpcDefeat) - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_Bzzap_02) = { - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcAI_Bzzap_02))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Bzzap_02))) - Return - End -}; - -NpcData N(NpcData_Dayzee_01) = { - .id = NPC_Dayzee_01, - .pos = { -350.0f, 0.0f, 40.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -350, 0, 40 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -350, 0, 40 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Dayzee_02) = { - .id = NPC_Dayzee_02, - .pos = { 260.0f, 0.0f, 75.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 260, 0, 75 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 260, 0, 75 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_CrazyDayzee), - .flags = ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = CRAZY_DAYZEE_DROPS, - .animations = CRAZY_DAYZEE_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Bzzap_01) = { - .id = NPC_Bzzap_01, - .pos = { -50.0f, 55.0f, 90.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -50, 55, 90 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -50, 50, 90 }, - .detectSize = { 250 }, - } - }, - .settings = &N(NpcSettings_Bzzap), - .flags = ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = BZZAP_DROPS, - .animations = BZZAP_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Bzzap_02) = { - .id = NPC_Bzzap_02, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -50, 55, 90 }, - .wanderSize = { 100 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -50, 50, 90 }, - .detectSize = { 250 }, - } - }, - .init = &N(EVS_NpcInit_Bzzap_02), - .settings = &N(NpcSettings_Bzzap_02), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_NO_SHADOW_RAYCAST, - .drops = BZZAP_DROPS, - .animations = BZZAP_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Dayzee_01), 0x1A10, BTL_FLO_STAGE_04), - NPC_GROUP(N(NpcData_Dayzee_02), 0x1A15, BTL_FLO_STAGE_04), - NPC_GROUP(N(NpcData_Bzzap_01), 0x1A17, BTL_FLO_STAGE_01), - NPC_GROUP(N(NpcData_Bzzap_02), 0x1A17, BTL_FLO_STAGE_01), - {} -}; diff --git a/src/world/dead/area_flo/flo_10/flo_10.h b/src/world/dead/area_flo/flo_10/flo_10.h deleted file mode 100644 index fbbde9ab8a6..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10.h +++ /dev/null @@ -1,32 +0,0 @@ -// Older version of flo_10 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_10_shape.h" -#include "mapfs/flo_10_hit.h" - -enum { - NPC_Lily = 0, -}; - -#define NAMESPACE dead_flo_10 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_PushFlowerSong); -extern EvtScript N(EVS_PopSong); -extern EvtScript N(EVS_SetupFoliage); -extern EvtScript N(EVS_MakeEntities); -extern EvtScript N(EVS_SetupFountain); -extern EvtScript N(EVS_SetupWaterStoneSocket); -extern EvtScript N(EVS_SetupWaterEffect); - -extern EvtScript N(EVS_Scene_ReleaseFountain); -extern EvtScript N(EVS_Scene_PostReleaseFountain); -extern EvtScript N(EVS_Scene_SunReturns); - -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_10/flo_10_0_header.c b/src/world/dead/area_flo/flo_10/flo_10_0_header.c deleted file mode 100644 index 3efc7ce4fe2..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_0_header.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "flo_10.h" - -s32 N(get_tattle)(void) { - if (evt_get_variable(NULL, GB_StoryProgress) < STORY_CH6_FILLED_SPRING_WITH_WATER) { - return MSG_MapTattle_flo_10_before; - } else { - return MSG_MapTattle_flo_10_after; - } -} - -EntryList N(Entrances) = { - [flo_10_ENTRY_0] { -360.0, 0.0, 0.0, 90.0 }, - [flo_10_ENTRY_1] { -360.0, 0.0, 0.0, 90.0 }, - [flo_10_ENTRY_2] { -100.0, -10.0, -172.0, 135.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { .get = &N(get_tattle) }, -}; diff --git a/src/world/dead/area_flo/flo_10/flo_10_1_music.c b/src/world/dead/area_flo/flo_10/flo_10_1_music.c deleted file mode 100644 index 4760bd6a6c8..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_1_music.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "flo_10.h" - -EvtScript N(EVS_SetupMusic) = { - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_10_ENTRY_1) - Call(SetMusicTrack, 0, SONG_SUNSHINE_RETURNS, 0, 8) - Else - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - EndIf - IfGe(GB_StoryProgress, STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(PlaySound, SOUND_LOOP_FLO_WATER_FLOW_2) - EndIf - Return - End -}; - -EvtScript N(EVS_PushFlowerSong) = { - Call(PushSong, SONG_FLOWER_NPC_THEME, 2) - Return - End -}; - -EvtScript N(EVS_PopSong) = { - Call(FadeOutMusic, 0, 250) - Wait(10) - Call(PopSong) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_10/flo_10_2_entity.c b/src/world/dead/area_flo/flo_10/flo_10_2_entity.c deleted file mode 100644 index fa94ddec39f..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_2_entity.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "flo_10.h" - -EvtScript N(EVS_MakeEntities) = { - IfGe(GB_StoryProgress, STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(MakeItemEntity, ITEM_WATER_STONE, 0, -60, 6, ITEM_SPAWN_MODE_DECORATION, 0) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_10/flo_10_3_main.c b/src/world/dead/area_flo/flo_10/flo_10_3_main.c deleted file mode 100644 index d68e33472d9..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_3_main.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "flo_10.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_24_1) = EVT_EXIT_WALK(60, flo_10_ENTRY_0, "flo_24", flo_24_ENTRY_1); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_24_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Exec(N(EVS_SetupFoliage)) - Exec(N(EVS_SetupWaterStoneSocket)) - Exec(N(EVS_SetupFountain)) - Exec(N(EVS_SetupWaterEffect)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o80, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o93, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( -265, 247, 199, 313, 0) - EVT_FLOWER_SPAWN_REGION( -300, -275, -140, -185, 0) - EVT_FLOWER_SPAWN_REGION( 263, -248, 362, 146, 0) - Call(GetEntryID, LVar0) - Switch(LVar0) - CaseEq(flo_10_ENTRY_1) - Exec(N(EVS_Scene_SunReturns)) - CaseEq(flo_10_ENTRY_2) - Exec(N(EVS_Scene_PostReleaseFountain)) - Exec(N(EVS_BindExitTriggers)) - CaseDefault - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - EndSwitch - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_10/flo_10_4_fountain.c b/src/world/dead/area_flo/flo_10/flo_10_4_fountain.c deleted file mode 100644 index a33f53ae99e..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_4_fountain.c +++ /dev/null @@ -1,315 +0,0 @@ -#include "flo_10.h" -#include "sprite/npc/Lily.h" -#include "sprite/player.h" - -#include "world/common/complete/GiveReward.inc.c" - -#include "world/common/atomic/TexturePan.inc.c" - -EvtScript N(EVS_RaiseFountain) = { - Call(MakeLerp, -50, 170, 385, EASING_LINEAR) - Label(1) - Call(UpdateLerp) - Call(TranslateGroup, MODEL_g22, 0, LVar0, 0) - IfEq(LVar1, 1) - Wait(1) - Goto(1) - EndIf - Return - End -}; - -EvtScript N(EVS_GrowFountain) = { - Call(MakeLerp, 0, 100, 90, EASING_QUADRATIC_IN) - Label(1) - Call(UpdateLerp) - SetF(LVar2, LVar0) - SetF(LVar3, LVar0) - DivF(LVar2, Float(333.0)) - DivF(LVar3, Float(100.0)) - AddF(LVar2, Float(0.703)) - Call(ScaleGroup, MODEL_g22, LVar2, LVar3, LVar2) - IfEq(LVar1, 1) - Wait(1) - Goto(1) - EndIf - Return - End -}; - -EvtScript N(EVS_TexPan_Rainbow) = { - Call(EnableTexPanning, MODEL_o73, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_A) - TEX_PAN_PARAMS_STEP( -150, 0, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 0, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Return - End -}; - -EvtScript N(EVS_EnableRainbow) = { - Wait(60) - Call(EnableModel, MODEL_o73, TRUE) - Exec(N(EVS_TexPan_Rainbow)) - Return - End -}; - -EvtScript N(EVS_RaiseLily) = { - Wait(80) - Call(EnableNpcShadow, NPC_Lily, FALSE) - Call(GetNpcPos, NPC_Lily, LVar3, LVar4, LVar5) - Call(MakeLerp, 10, 55, 108, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Set(LVar6, LVar4) - Add(LVar6, LVar0) - Add(LVar6, -10) - Call(SetNpcPos, NPC_Lily, LVar3, LVar6, LVar5) - Call(TranslateGroup, MODEL_g31, 0, LVar0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_RaisePlayer) = { - Call(DisablePlayerPhysics, TRUE) - Wait(40) - Call(SetPlayerAnimation, ANIM_MarioW2_SitIdle) - Call(GetPlayerPos, LVar2, LVar0, LVar3) - Call(MakeLerp, -50, 90, 60, EASING_QUADRATIC_IN) - Loop(0) - Call(UpdateLerp) - DivF(LVar2, Float(1.2)) - DivF(LVar3, Float(1.2)) - Call(SetPlayerPos, LVar2, LVar0, LVar3) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(MakeLerp, 90, 270, 280, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(SetPlayerPos, 0, LVar0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerPhysics, FALSE) - Return - End -}; - -EvtScript N(EVS_RaiseCamera) = { - Wait(80) - Call(GetPlayerPos, LVar3, LVar4, LVar5) - Call(UseSettingsFrom, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetPanTarget, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetCamSpeed, CAM_DEFAULT, Float(0.7)) - Call(SetCamPitch, CAM_DEFAULT, Float(25.0), Float(-22.0)) - Call(SetCamDistance, CAM_DEFAULT, 450) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Return - End -}; - -EvtScript N(EVS_UnleashFountain) = { - Call(DisablePartnerAI, 0) - Exec(N(EVS_RaiseFountain)) - Exec(N(EVS_GrowFountain)) - Exec(N(EVS_EnableRainbow)) - Exec(N(EVS_RaiseLily)) - Exec(N(EVS_RaisePlayer)) - Exec(N(EVS_RaiseCamera)) - Return - End -}; - -EvtScript N(EVS_LowerFountain) = { - Call(MakeLerp, 170, 75, 150, EASING_LINEAR) - Label(1) - Call(UpdateLerp) - Call(TranslateGroup, MODEL_g22, 0, LVar0, 0) - IfEq(LVar1, 1) - Wait(1) - Goto(1) - EndIf - Return - End -}; - -EvtScript N(EVS_ShrinkFountain) = { - Call(MakeLerp, 100, 15, 150, EASING_QUADRATIC_IN) - Label(1) - Call(UpdateLerp) - SetF(LVar2, LVar0) - SetF(LVar3, LVar0) - DivF(LVar2, Float(333.0)) - DivF(LVar3, Float(100.0)) - AddF(LVar2, Float(0.703)) - Call(ScaleGroup, MODEL_g22, LVar2, LVar3, LVar2) - IfEq(LVar1, 1) - Wait(1) - Goto(1) - EndIf - Return - End -}; - -EvtScript N(EVS_FountainSlowing) = { - Exec(N(EVS_LowerFountain)) - Exec(N(EVS_ShrinkFountain)) - Return - End -}; - -EvtScript N(EVS_Scene_ReleaseFountain) = { - Wait(20) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Call(GetPlayerPos, LVar3, LVar4, LVar5) - Call(UseSettingsFrom, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetPanTarget, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.0)) - Call(SetCamDistance, CAM_DEFAULT, 600) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(EnableGroup, MODEL_g22, TRUE) - Call(TranslateGroup, MODEL_g22, 0, -50, 0) - Call(ScaleGroup, MODEL_g22, 0, 0, 0) - Call(EnableGroup, MODEL_g31, TRUE) - ExecWait(N(EVS_UnleashFountain)) - Wait(20) - Call(PlaySound, SOUND_LOOP_FLO_RELEASE_FOUNTAIN) - Wait(360) - Call(InterpPlayerYaw, 90, 0) - Call(SetPlayerAnimation, ANIM_MarioW2_Flail) - Call(SetPlayerJumpscale, Float(0.2)) - Call(PlayerJump1, -100, -10, -172, 75) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(1.0)) - ExecWait(N(EVS_FountainSlowing)) - Wait(60) - Call(GotoMap, Ref("flo_24"), flo_24_ENTRY_2) - Wait(100) - Return - End -}; - -EvtScript N(EVS_Scene_PostReleaseFountain) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(SetPlayerPos, -100, -10, -172) - Call(InterpPlayerYaw, 150, 0) - Call(SetPlayerAnimation, ANIM_Mario1_Fallen) - Call(SetNpcPos, NPC_PARTNER, -129, 9, -177) - Call(EnablePartnerAI) - Call(ClearPartnerMoveHistory, NPC_PARTNER) - Call(EnableGroup, MODEL_water, TRUE) - Call(EnableGroup, MODEL_g2, FALSE) - Call(EnableGroup, MODEL_g12, FALSE) - Call(EnableGroup, MODEL_g31, FALSE) - Call(SetNpcPos, NPC_Lily, -57, -20, -105) - Call(InterpNpcYaw, NPC_Lily, 90, 0) - Call(AdjustCam, CAM_DEFAULT, Float(90.0), 0, 450, Float(25.0), Float(-6.0)) - Wait(30) - Call(SetPlayerAnimation, ANIM_Mario1_GetUp) - Wait(20) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Wait(10) - ExecWait(N(EVS_PushFlowerSong)) - Wait(10) - Call(SpeakToPlayer, NPC_Lily, ANIM_Lily_Talk, ANIM_Lily_Idle, 5, MSG_CH6_0082) - Call(NpcFacePlayer, NPC_Lily, 1) - Call(SpeakToPlayer, NPC_Lily, ANIM_Lily_TalkHappy, ANIM_Lily_IdleHappy, 0, MSG_CH6_0083) - Call(SetNpcAnimation, NPC_Lily, ANIM_Lily_GiveItem) - Wait(20) - Call(SetNpcAnimation, NPC_Lily, ANIM_Lily_Idle) - EVT_GIVE_KEY_REWARD(ITEM_MIRACLE_WATER) - Call(SpeakToPlayer, NPC_Lily, ANIM_Lily_TalkHappy, ANIM_Lily_IdleHappy, 0, MSG_CH6_0084) - Call(EndSpeech, NPC_Lily, ANIM_Lily_Talk, ANIM_Lily_Idle, 0) - Call(SetNpcAnimation, NPC_Lily, ANIM_Lily_Idle) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - ExecWait(N(EVS_PopSong)) - Call(DisablePlayerPhysics, FALSE) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_SetupFountain) = { - IfLt(GB_StoryProgress, STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(EnableGroup, MODEL_water, FALSE) - Call(EnableGroup, MODEL_g12, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_water, COLLIDER_FLAGS_UPPER_MASK) - Else - Call(EnableGroup, MODEL_g2, FALSE) - Call(EnableGroup, MODEL_g12, FALSE) - Call(EnableGroup, MODEL_g31, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o1, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o83, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o86, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o87, COLLIDER_FLAGS_UPPER_MASK) - EndIf - Call(EnableTexPanning, MODEL_o25, TRUE) - Call(EnableTexPanning, MODEL_o40, TRUE) - Call(EnableTexPanning, MODEL_o78, TRUE) - Call(EnableTexPanning, MODEL_o77, TRUE) - Call(EnableTexPanning, MODEL_o118, TRUE) - Call(EnableTexPanning, MODEL_o119, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_1) - TEX_PAN_PARAMS_STEP( 0,-2000, 0, 0) - TEX_PAN_PARAMS_FREQ( 0, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_3) - TEX_PAN_PARAMS_STEP( -100, 80, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_5) - TEX_PAN_PARAMS_STEP(-1000, 2000, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_6) - TEX_PAN_PARAMS_STEP( 0,-2000, 0, 0) - TEX_PAN_PARAMS_FREQ( 0, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_8) - TEX_PAN_PARAMS_STEP( 0,-1500, 0, 0) - TEX_PAN_PARAMS_FREQ( 0, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_9) - TEX_PAN_PARAMS_STEP( 0,-1000, 0, 0) - TEX_PAN_PARAMS_FREQ( 0, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - IfGe(GB_StoryProgress, STORY_CH6_FILLED_SPRING_WITH_WATER) - Exec(N(EVS_TexPan_Rainbow)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_10/flo_10_5_npc.c b/src/world/dead/area_flo/flo_10/flo_10_5_npc.c deleted file mode 100644 index d5137a68abb..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_5_npc.c +++ /dev/null @@ -1,217 +0,0 @@ -#include "flo_10.h" -#include "sprite/player.h" - -#include "world/common/npc/Lily.inc.c" - -EvtScript N(EVS_Scene_SunReturns) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(SetNpcPos, NPC_Lily, 60, 0, 55) - Call(UseSettingsFrom, CAM_DEFAULT, 0, 0, 0) - Call(SetPanTarget, CAM_DEFAULT, 0, 0, 0) - Call(SetCamDistance, CAM_DEFAULT, 450) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-6.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Call(SpeakToPlayer, NPC_Lily, ANIM_Lily_Talk, ANIM_Lily_Idle, 0, MSG_CH6_00C6) - Wait(10) - Call(GotoMap, Ref("flo_12"), flo_12_ENTRY_1) - Wait(100) - Return - End -}; - -s32 N(KeyList)[] = { - ITEM_WATER_STONE, - ITEM_NONE -}; - -EvtScript N(EVS_OnInteract_WaterStoneSocket) = { - IfEq(GF_FLO10_ShowedLilyTheWaterStone, TRUE) - Call(GetPartnerInUse, LVarA) - IfNe(LVarA, 0) - Call(AwaitPlayerLeave, 0, 0, 19) - Return - EndIf - Call(DisablePlayerInput, TRUE) - SetGroup(EVT_GROUP_00) - Call(SetTimeFreezeMode, TIME_FREEZE_PARTIAL) - Call(ShowKeyChoicePopup) - Set(LVar2, LVar0) - Switch(LVar2) - CaseEq(-1) - Call(CloseChoicePopup) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - Wait(10) - Call(SpeakToPlayer, NPC_Lily, ANIM_Lily_TalkPlead, ANIM_Lily_IdlePlead, 0, MSG_CH6_0081) - CaseDefault - Call(GetPlayerPos, LVar3, LVar4, LVar5) - Call(PlayerMoveTo, -17, -17, 20) - Call(func_802CF56C, 2) - Call(InterpPlayerYaw, 100, 1) - Wait(10) - Call(AdjustCam, CAM_DEFAULT, Float(1.0), 0, 450, Float(25.0), Float(-6.0)) - Wait(10) - Call(SetPlayerAnimation, ANIM_MarioW1_PlaceItem) - Call(RemoveKeyItemAt, LVar1) - Call(MakeItemEntity, ITEM_WATER_STONE, 0, -60, 6, ITEM_SPAWN_MODE_DECORATION, 0) - Set(LVarA, LVar0) - Call(CloseChoicePopup) - Call(SetTimeFreezeMode, TIME_FREEZE_NORMAL) - ExecWait(N(EVS_Scene_ReleaseFountain)) - EndSwitch - Call(DisablePlayerInput, FALSE) - Call(AwaitPlayerLeave, 0, 0, 19) - EndIf - Return - End -}; - -EvtScript N(EVS_SetupWaterStoneSocket) = { - BindPadlock(Ref(N(EVS_OnInteract_WaterStoneSocket)), TRIGGER_FLOOR_TOUCH, COLLIDER_o83, Ref(N(KeyList)), 0, 1) - Return - End -}; - -EvtScript N(EVS_MovePlayerToTalk) = { - Wait(10) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(GetPlayerPos, LVar3, LVar4, LVar5) - IfLt(LVar5, LVar2) - Set(LVar6, 30) - Else - Set(LVar6, 20) - EndIf - Set(LVar1, LVar0) - Set(LVar4, LVar0) - Sub(LVar1, LVar6) - Add(LVar4, LVar6) - Switch(LVar3) - CaseRange(LVar1, LVar4) - Thread - IfLt(LVar3, LVar0) - Sub(LVar0, 40) - Else - Add(LVar0, 40) - EndIf - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(PlayerMoveTo, LVar0, LVar5, 15) - Call(PlayerFaceNpc, NPC_Lily, TRUE) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - EndThread - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInteract_Lily) = { - ExecWait(N(EVS_PushFlowerSong)) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_MAGICAL_BEAN) - Exec(N(EVS_MovePlayerToTalk)) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 325) - Call(SetCamPitch, CAM_DEFAULT, Float(23.0), Float(-9.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_TalkPlead, ANIM_Lily_IdlePlead, 5, MSG_CH6_0078) - Call(EndSpeech, NPC_SELF, ANIM_Lily_DreadLoop, ANIM_Lily_Dread, 5) - CaseLt(STORY_CH6_GOT_WATER_STONE) - IfEq(GF_FLO10_LilyRequestedWaterStone, FALSE) - Exec(N(EVS_MovePlayerToTalk)) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 325) - Call(SetCamPitch, CAM_DEFAULT, Float(23.0), Float(-9.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_TalkPlead, ANIM_Lily_IdlePlead, 5, MSG_CH6_0079) - Call(NpcFacePlayer, NPC_SELF, 1) - Call(SetNpcAnimation, NPC_SELF, ANIM_Lily_Idle) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_SELF, EMOTE_EXCLAMATION, 0, 15, EMOTER_NPC, 0, 0, 0, 0) - Wait(15) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_Idle, ANIM_Lily_Idle, 0, MSG_CH6_007A) - Call(EndSpeech, NPC_SELF, ANIM_Lily_Dread, ANIM_Lily_Idle, 0) - Call(GetPlayerTargetYaw, LVar0) - Call(InterpNpcYaw, NPC_SELF, LVar0, 1) - Wait(20) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_Talk, ANIM_Lily_Idle, 5, MSG_CH6_007B) - Call(NpcFacePlayer, NPC_SELF, 1) - Wait(20) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_Talk, ANIM_Lily_Idle, 0, MSG_CH6_007C) - Call(ShowChoice, MSG_Choice_0011) - Wait(10) - Switch(LVar0) - CaseEq(0) - Call(ContinueSpeech, NPC_SELF, ANIM_Lily_TalkHappy, ANIM_Lily_IdleHappy, 0, MSG_CH6_007D) - CaseEq(1) - Call(ContinueSpeech, NPC_SELF, ANIM_Lily_TalkPlead, ANIM_Lily_IdlePlead, 0, MSG_CH6_007E) - EndSwitch - Wait(10) - Set(GF_FLO10_LilyRequestedWaterStone, TRUE) - Call(SetEnemyFlagBits, NPC_SELF, ENEMY_FLAG_400000, 0) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_TalkPlead, ANIM_Lily_IdlePlead, 5, MSG_CH6_007F) - EndIf - CaseLt(STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_Talk, ANIM_Lily_Idle, 0, MSG_CH6_0080) - Set(GF_FLO10_ShowedLilyTheWaterStone, TRUE) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_TalkPlead, ANIM_Lily_IdlePlead, 0, MSG_CH6_0085) - Call(EndSpeech, NPC_SELF, ANIM_Lily_Talk, ANIM_Lily_Idle, 0) - Call(EndSpeech, NPC_SELF, ANIM_Lily_TalkPlead, ANIM_Lily_IdlePlead, 0) - CaseLt(STORY_CH6_RETURNED_TO_TOAD_TOWN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_TalkHappy, ANIM_Lily_IdleHappy, 0, MSG_CH6_0086) - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Lily_Talk, ANIM_Lily_Idle, 0, MSG_CH6_0087) - EndSwitch - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - ExecWait(N(EVS_PopSong)) - Return - End -}; - -EvtScript N(EVS_NpcInit_Lily) = { - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Lily))) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_WATER_STONE) - IfEq(GF_FLO10_LilyRequestedWaterStone, FALSE) - Call(SetNpcAnimation, NPC_SELF, ANIM_Lily_IdlePlead) - Call(InterpNpcYaw, NPC_SELF, 90, 1) - Call(SetEnemyFlagBits, NPC_SELF, ENEMY_FLAG_400000, 1) - EndIf - CaseEq(STORY_CH6_GOT_WATER_STONE) - Call(InterpNpcYaw, NPC_SELF, 270, 1) - CaseGe(STORY_CH6_FILLED_SPRING_WITH_WATER) - Call(SetNpcPos, NPC_SELF, -67, -20, -105) - EndSwitch - Return - End -}; - -NpcData N(NpcData_Lily) = { - .id = NPC_Lily, - .pos = { 80.0f, -60.0f, 0.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Lily), - .settings = &N(NpcSettings_Lily), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = LILY_ANIMS, - .tattle = MSG_NpcTattle_Lily, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Lily)), - {} -}; diff --git a/src/world/dead/area_flo/flo_10/flo_10_6_waterfx.c b/src/world/dead/area_flo/flo_10/flo_10_6_waterfx.c deleted file mode 100644 index 5786268c336..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_6_waterfx.c +++ /dev/null @@ -1,344 +0,0 @@ -#include "flo_10.h" -#include "nu/nusys.h" -#include "model.h" - -s32 N(WavePhase) = { - 0 -}; - -// unused wavy distortion effect for edge water -- unclear how it would have been used -EvtScript N(EVS_SetupWaterEffect) = { - Return - End -}; - -void N(UnkModelFunc000)(s32 x1, s32 y1, s32 x2, s32 y2) { - s32 i; - f32 f0; - s32 n, m; - u16* img; - s32 alpha; - - N(WavePhase) += 5; - - if (x1 >= x2 || y1 >= y2) { - return; - } - - if (x1 < 0) { - x1 = 0; - } - if (y1 < 0) { - y1 = 0; - } - if (x2 < 0) { - x2 = 0; - } - if (y2 < 0) { - y2 = 0; - } - - if (x1 >= SCREEN_WIDTH) { - x1 = SCREEN_WIDTH - 1; - } - if (y1 >= SCREEN_HEIGHT) { - y1 = SCREEN_HEIGHT - 1; - } - if (x2 >= SCREEN_WIDTH) { - x2 = SCREEN_WIDTH - 1; - } - if (y2 >= SCREEN_HEIGHT) { - y2 = SCREEN_HEIGHT - 1; - } - - if (x1 == x2 || y1 == y2) { - return; - } - - x1 = x1 / 4 * 4; - x2 = x2 / 4 * 4 + 4; - - n = (y2 - y1) / 6; - m = (y2 - y1) % 6; - img = nuGfxCfb_ptr; - - for (i = 0; i < n; i++) { - alpha = (y1 - 6 * i - 6) * 2; - if (y1 - 6 * i - 6 >= 0) { - if (alpha > 255) { - alpha = 255; - } - gDPSetPrimColor(gMainGfxPos++, 0, 0, 255, 255, 255, alpha); - - //gDPLoadTextureTile(gMainGfxPos++, osVirtualToPhysical(img), G_IM_FMT_RGBA, G_IM_SIZ_16b, - //SCREEN_WIDTH, 6, - //x1, y1 - 6 * i - 6, x2 - 1, y1 - 6 * i - 1, 0, - //G_TX_WRAP, G_TX_WRAP, 9, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - - - //gDPSetTextureImage(gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, osVirtualToPhysical(img)); - { - Gfx *_g = (Gfx *)(gMainGfxPos++); - - if ((osVirtualToPhysical(img) % 8) != 0) { - osSyncPrintf("GBI Error (aligned 8) File:%s Line:%d Adrs:%08x \n", - "evt_underwater.c", 83, osVirtualToPhysical(img)); - } - _g->words.w0 = _SHIFTL(G_SETTIMG, 24, 8) | _SHIFTL(G_IM_FMT_RGBA, 21, 3) | - _SHIFTL(G_IM_SIZ_16b, 19, 2) | _SHIFTL((SCREEN_WIDTH)-1, 0, 12); - - _g->words.w1 = (unsigned int)(osVirtualToPhysical(img)); - } - gDPSetTile(gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, - (((((x2 - 1)-(x1)+1) * G_IM_SIZ_16b_TILE_BYTES)+7)>>3), 0, - G_TX_LOADTILE, 0 , G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP, 9, - G_TX_NOLOD); - gDPLoadSync(gMainGfxPos++); - gDPLoadTile(gMainGfxPos++, G_TX_LOADTILE, - (x1)<>3), 0, - G_TX_RENDERTILE, 0, G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP, 9, - G_TX_NOLOD); - gDPSetTileSize(gMainGfxPos++, G_TX_RENDERTILE, - (x1)<= 0) { - if (alpha > 255) { - alpha = 255; - } - gDPSetPrimColor(gMainGfxPos++, 0, 0, 255, 255, 255, alpha); - //gDPLoadTextureTile(gMainGfxPos++, osVirtualToPhysical(img), G_IM_FMT_RGBA, G_IM_SIZ_16b, - // SCREEN_WIDTH, 6, - // x1, y1 - 6 * i - m, x2 - 1, y1 - 6 * i - 1, 0, - // G_TX_WRAP, G_TX_WRAP, 9, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - - //gDPSetTextureImage(gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, osVirtualToPhysical(img)); - { - Gfx *_g = (Gfx *)(gMainGfxPos++); - - if ((osVirtualToPhysical(img) % 8) != 0) { - osSyncPrintf("GBI Error (aligned 8) File:%s Line:%d Adrs:%08x \n", - "evt_underwater.c", 107, osVirtualToPhysical(img)); - } - _g->words.w0 = _SHIFTL(G_SETTIMG, 24, 8) | _SHIFTL(G_IM_FMT_RGBA, 21, 3) | - _SHIFTL(G_IM_SIZ_16b, 19, 2) | _SHIFTL((SCREEN_WIDTH)-1, 0, 12); - - _g->words.w1 = (unsigned int)(osVirtualToPhysical(img)); - } - gDPSetTile(gMainGfxPos++, G_IM_FMT_RGBA, G_IM_SIZ_16b, - (((((x2 - 1)-(x1)+1) * G_IM_SIZ_16b_TILE_BYTES)+7)>>3), 0, - G_TX_LOADTILE, 0 , G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP, 9, - G_TX_NOLOD); - gDPLoadSync(gMainGfxPos++); - gDPLoadTile(gMainGfxPos++, G_TX_LOADTILE, - (x1)<>3), 0, - G_TX_RENDERTILE, 0, G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP, 9, - G_TX_NOLOD); - gDPSetTileSize(gMainGfxPos++, G_TX_RENDERTILE, - (x1)<modelNode->propertyList; - f32 bbHalfX = bb->halfSizeX; - f32 bbHalfZ = bb->halfSizeZ; - f32 outX, outY, outZ, outW; - Gfx* new_var; - f32 temp_f24; - f32 temp_f26; - f32 temp_f20; - f32 temp_f22; - - transform_point(camera->perspectiveMatrix, - model->center.x - bbHalfX, model->center.y, model->center.z - bbHalfZ, 1.0f, - &outX, &outY, &outZ, &outW); - - outX *= 1.0f / outW; - outY *= -(1.0f / outW); - outZ *= 1.0f / outW; - outW = 1.0f / outW; - - if (outW < 0.0f) { - outX = 0.0f; - outY = 1.0f; - } - temp_f20 = outX; - temp_f22 = outY; - - transform_point(camera->perspectiveMatrix, - model->center.x - bbHalfX, model->center.y, model->center.z + bbHalfZ, 1.0f, - &outX, &outY, &outZ, &outW); - - outX *= 1.0f / outW; - outY *= -(1.0f / outW); - outZ *= 1.0f / outW; - outW = 1.0f / outW; - - temp_f24 = temp_f20; - temp_f26 = temp_f22; - if (outW < 0.0f) { - outX = 0.0f; - outY = 1.0f; - } - - if (temp_f24 > outX) { - temp_f24 = outX; - } - - if (temp_f26 > outY) { - temp_f26 = outY; - } - - if (temp_f20 < outX) { - temp_f20 = outX; - } - - if (temp_f22 < outY) { - temp_f22 = outY; - } - - transform_point(camera->perspectiveMatrix, - model->center.x + bbHalfX, model->center.y, model->center.z + bbHalfZ, 1.0f, - &outX, &outY, &outZ, &outW); - - outX *= 1.0f / outW; - outY *= -(1.0f / outW); - outZ *= 1.0f / outW; - outW = 1.0f / outW; - - if (outW < 0.0f) { - outX = 1.0f; - outY = 1.0f; - } - - if (temp_f24 > outX) { - temp_f24 = outX; - } - - if (temp_f26 > outY) { - temp_f26 = outY; - } - - if (temp_f20 < outX) { - temp_f20 = outX; - } - - if (temp_f22 < outY) { - temp_f22 = outY; - } - - transform_point(camera->perspectiveMatrix, - model->center.x + bbHalfX, model->center.y, model->center.z - bbHalfZ, 1.0f, - &outX, &outY, &outZ, &outW); - - outX *= 1.0f / outW; - outY *= -(1.0f / outW); - outZ *= 1.0f / outW; - outW = 1.0f / outW; - - if (outW < 0.0f) { - outX = 1.0f; - outY = 1.0f; - } - - if (temp_f24 > outX) { - temp_f24 = outX; - } - - if (temp_f26 > outY) { - temp_f26 = outY; - } - - if (temp_f20 < outX) { - temp_f20 = outX; - } - - if (temp_f22 < outY) { - temp_f22 = outY; - } - - if (temp_f24 != temp_f20 || temp_f26 != temp_f22) { - temp_f24 = ((temp_f24 * camera->viewportW) + camera->viewportW) * 0.5f; - temp_f26 = ((temp_f26 * camera->viewportH) + camera->viewportH) * 0.5f; - temp_f20 = ((temp_f20 * camera->viewportW) + camera->viewportW) * 0.5f; - temp_f22 = ((temp_f22 * camera->viewportH) + camera->viewportH) * 0.5f; - - temp_f24 += camera->viewportStartX; - temp_f26 += camera->viewportStartY; - temp_f20 += camera->viewportStartX; - temp_f22 += camera->viewportStartY; - - gDPSetCycleType(gMainGfxPos++, G_CYC_1CYCLE); - gDPSetRenderMode(gMainGfxPos++, Z_CMP | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | G_RM_PASS, - Z_CMP | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)); - - new_var = gMainGfxPos++; - if ((osVirtualToPhysical(nuGfxZBuffer) % 8) != 0) { - osSyncPrintf("GBI Error (aligned 8) File:%s Line:%d Adrs:%08x \n", - "evt_underwater.c", 175, osVirtualToPhysical(nuGfxZBuffer)); - } - gDPSetColorImage(new_var, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, osVirtualToPhysical(nuGfxZBuffer)); - - gDPSetCombineMode(gMainGfxPos++, PM_CC_PRIM_NO_ALPHA, PM_CC_PRIM_NO_ALPHA); - gDPSetPrimColor(gMainGfxPos++, 0, 0, 248, 240, 240, 0); - gDPPipeSync(gMainGfxPos++); - - gSPDisplayList(gMainGfxPos++, model->modelNode->displayData->displayList); - gDPPipeSync(gMainGfxPos++); - - new_var = gMainGfxPos++; - if ((osVirtualToPhysical(nuGfxCfb_ptr) % 8) != 0) { - osSyncPrintf("GBI Error (aligned 8) File:%s Line:%d Adrs:%08x \n", - "evt_underwater.c", 186, osVirtualToPhysical(nuGfxCfb_ptr)); - } - gDPSetColorImage(new_var, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, osVirtualToPhysical(nuGfxCfb_ptr)); - - gDPSetDepthSource(gMainGfxPos++, G_ZS_PRIM); - gDPSetPrimDepth(gMainGfxPos++, 32734, 0); - gDPSetRenderMode(gMainGfxPos++, G_RM_ZB_XLU_DECAL, G_RM_ZB_XLU_DECAL2); - gDPSetTextureFilter(gMainGfxPos++, G_TF_POINT); - gDPSetTexturePersp(gMainGfxPos++, G_TP_NONE); - gSPTexture(gMainGfxPos++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON); - gDPSetTextureLUT(gMainGfxPos++, G_TT_NONE); - gDPSetTextureDetail(gMainGfxPos++, G_TD_CLAMP); - gDPSetTextureLOD(gMainGfxPos++, G_TL_TILE); - gDPSetCombineMode(gMainGfxPos++, PM_CC_10, PM_CC_10); - gDPPipeSync(gMainGfxPos++); - - N(UnkModelFunc000)(temp_f24, temp_f26, temp_f20, temp_f22); - - gDPPipeSync(gMainGfxPos++); - gDPSetCycleType(gMainGfxPos++, G_CYC_2CYCLE); - gDPSetDepthSource(gMainGfxPos++, G_ZS_PIXEL); - } -} - diff --git a/src/world/dead/area_flo/flo_10/flo_10_7_foliage.c b/src/world/dead/area_flo/flo_10/flo_10_7_foliage.c deleted file mode 100644 index c5c8957ffe6..00000000000 --- a/src/world/dead/area_flo/flo_10/flo_10_7_foliage.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "flo_10.h" - -#include "common/foliage.inc.c" - -FoliageModelList N(Tree1_LeafModels) = FOLIAGE_MODEL_LIST(MODEL_o47, MODEL_o48, MODEL_o49); -FoliageModelList N(Tree1_TrunkModels) = FOLIAGE_MODEL_LIST(MODEL_o88); - -FoliageDropList N(Tree1_Drops) = { - .count = 1, - .drops = { - { - .itemID = ITEM_JAMMIN_JELLY, - .pos = { 80, 100, -240 }, - .spawnMode = ITEM_SPAWN_MODE_FALL_SPAWN_ONCE, - .pickupFlag = GF_FLO10_Tree1_JamminJelly, - }, - } -}; - -ShakeTreeConfig N(ShakeTree_Tree1) = { - .leaves = &N(Tree1_LeafModels), - .trunk = &N(Tree1_TrunkModels), - .drops = &N(Tree1_Drops), -}; - -BombTrigger N(BombPos_Tree1) = { - .pos = { 137.0f, 0.0f, -283.0f }, - .radius = 0.0f -}; - -EvtScript N(EVS_SetupFoliage) = { - Set(LVar0, Ref(N(ShakeTree_Tree1))) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_WALL_HAMMER, COLLIDER_o85, 1, 0) - BindTrigger(Ref(N(EVS_ShakeTree)), TRIGGER_POINT_BOMB, Ref(N(BombPos_Tree1)), 1, 0) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_11/flo_11.h b/src/world/dead/area_flo/flo_11/flo_11.h deleted file mode 100644 index db7dd80769f..00000000000 --- a/src/world/dead/area_flo/flo_11/flo_11.h +++ /dev/null @@ -1,29 +0,0 @@ -// Older version of flo_11 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_11_shape.h" -#include "mapfs/flo_11_hit.h" - -enum { - NPC_Lakitu_01 = 0, - NPC_Lakitu_02 = 1, -}; - -enum { - MV_LakituAmbushState = MapVar(0), - MV_LakituSearchSync = MapVar(10), - MV_FlyingSoundsScript = MapVar(11), -}; - -#define NAMESPACE dead_flo_11 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_MakeEntities); -extern EvtScript N(EVS_Scene_LakituAmbush); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_11/flo_11_0_header.c b/src/world/dead/area_flo/flo_11/flo_11_0_header.c deleted file mode 100644 index 434cfc746b7..00000000000 --- a/src/world/dead/area_flo/flo_11/flo_11_0_header.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "flo_11.h" - -EntryList N(Entrances) = { - [flo_11_ENTRY_0] { 470.0, 0.0, -15.0, 270.0 }, - [flo_11_ENTRY_1] { -470.0, 0.0, -15.0, 90.0 }, - [flo_11_ENTRY_2] { 360.0, 50.0, -237.0, 270.0 }, - [flo_11_ENTRY_3] { 118.0, 50.0, -420.0, 270.0 }, - [flo_11_ENTRY_4] { 0.0, 50.0, 0.0, 270.0 }, - [flo_11_ENTRY_5] { -120.0, 50.0, 357.0, 90.0 }, - [flo_11_ENTRY_6] { -360.0, 50.0, -240.0, 90.0 }, - [flo_11_ENTRY_7] { -360.0, 35.0, 0.0, 90.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_11 }, -}; diff --git a/src/world/dead/area_flo/flo_11/flo_11_1_music.c b/src/world/dead/area_flo/flo_11/flo_11_1_music.c deleted file mode 100644 index eb4e98a91ab..00000000000 --- a/src/world/dead/area_flo/flo_11/flo_11_1_music.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "flo_11.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_11/flo_11_2_main.c b/src/world/dead/area_flo/flo_11/flo_11_2_main.c deleted file mode 100644 index 73df110d8c4..00000000000 --- a/src/world/dead/area_flo/flo_11/flo_11_2_main.c +++ /dev/null @@ -1,93 +0,0 @@ -#include "flo_11.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -#include "world/common/entity/Pipe.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_23_1) = EVT_EXIT_WALK(60, flo_11_ENTRY_0, "flo_23", flo_23_ENTRY_1); -EvtScript N(EVS_ExitWalk_flo_12_0) = EVT_EXIT_WALK(60, flo_11_ENTRY_1, "flo_12", flo_12_ENTRY_0); - -// template for GotoMap exits used with pipes in the maze -#define Goto_MAP(mapName, entry) \ -{ \ - SetGroup(EVT_GROUP_1B) \ - Call(GotoMap, Ref(mapName), entry) \ - Wait(100) \ - Return \ - End \ -} - -// template for binding the event for the generic EVS_OnEnterPipe -#define SetUP_PIPE(entry, collider, exitScript) \ - Set(LVar0, entry) \ - Set(LVar1, collider) \ - Set(LVar2, Ref(exitScript)) \ - BindTrigger(Ref(N(EVS_OnEnterPipe)), TRIGGER_FLOOR_TOUCH, LVar1, 1, 0) - -EvtScript N(EVS_GotoMap_flo_11_5) = Goto_MAP("flo_11", flo_11_ENTRY_5); -EvtScript N(EVS_GotoMap_flo_11_6) = Goto_MAP("flo_11", flo_11_ENTRY_6); -EvtScript N(EVS_GotoMap_flo_11_7) = Goto_MAP("flo_11", flo_11_ENTRY_7); -EvtScript N(EVS_GotoMap_flo_11_2) = Goto_MAP("flo_11", flo_11_ENTRY_2); -EvtScript N(EVS_GotoMap_flo_11_3) = Goto_MAP("flo_11", flo_11_ENTRY_3); -EvtScript N(EVS_GotoMap_flo_11_4) = Goto_MAP("flo_11", flo_11_ENTRY_4); - -EvtScript N(EVS_OnEnterPipe) = { - Set(LVarA, LVar0) - Set(LVarB, LVar1) - Set(LVarC, LVar2) - ExecWait(N(EVS_Pipe_ExitVertical)) - Return - End -}; - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_12_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_23_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - SetUP_PIPE(flo_11_ENTRY_2, COLLIDER_o91, N(EVS_GotoMap_flo_11_5)) // link 2 <--> 5 - SetUP_PIPE(flo_11_ENTRY_3, COLLIDER_o92, N(EVS_GotoMap_flo_11_6)) // link 3 <--> 6 - SetUP_PIPE(flo_11_ENTRY_4, COLLIDER_o93, N(EVS_GotoMap_flo_11_7)) // link 4 <--> 7 - SetUP_PIPE(flo_11_ENTRY_5, COLLIDER_o94, N(EVS_GotoMap_flo_11_2)) // link 2 <--> 5 - SetUP_PIPE(flo_11_ENTRY_6, COLLIDER_o95, N(EVS_GotoMap_flo_11_3)) // link 3 <--> 6 - SetUP_PIPE(flo_11_ENTRY_7, COLLIDER_o96, N(EVS_GotoMap_flo_11_4)) // link 4 <--> 7 - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Call(func_80044238, 7) - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Call(GetEntryID, LVar0) - IfLe(LVar0, flo_11_ENTRY_1) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - Exec(N(EVS_Scene_LakituAmbush)) - Wait(1) - Else - Set(LVarA, Ref(N(EVS_BindExitTriggers))) - Exec(N(EVS_Pipe_EnterVertical)) - Wait(1) - EndIf - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o90, SURFACE_TYPE_HEDGES) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o104, SURFACE_TYPE_HEDGES) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o105, SURFACE_TYPE_HEDGES) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o109, SURFACE_TYPE_HEDGES) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_11/flo_11_3_npc.c b/src/world/dead/area_flo/flo_11/flo_11_3_npc.c deleted file mode 100644 index 0645202e0dc..00000000000 --- a/src/world/dead/area_flo/flo_11/flo_11_3_npc.c +++ /dev/null @@ -1,397 +0,0 @@ -#include "flo_11.h" - -#include "world/common/enemy/Lakitu_Stationary.inc.c" - -Vec3f N(FlightPath_Lakitu_01_Search)[] = { - { 460.0, 200.0, -240.0 }, - { 360.0, 150.0, -140.0 }, - { 260.0, 100.0, -240.0 }, - { 360.0, 100.0, -440.0 }, - { 460.0, 100.0, -240.0 }, - { 360.0, 100.0, -140.0 }, - { 260.0, 100.0, -240.0 }, - { 360.0, 100.0, -440.0 }, -}; - -Vec3f N(FlightPath_Lakitu_02_Search)[] = { - { -100.0, 200.0, -50.0 }, - { 0.0, 150.0, -150.0 }, - { 100.0, 100.0, -50.0 }, - { 0.0, 100.0, 50.0 }, - { -100.0, 100.0, -50.0 }, - { 0.0, 100.0, -150.0 }, - { 100.0, 100.0, -50.0 }, - { 0.0, 100.0, 50.0 }, -}; - -Vec3f N(FlightPath_Lakitu_01_Gather)[] = { - { 360.0, 100.0, -440.0 }, - { 350.0, 120.0, -220.0 }, - { 300.0, 120.0, -164.0 }, - { 160.0, 110.0, -180.0 }, -}; - -Vec3f N(FlightPath_Lakitu_02_Gather)[] = { - { 0.0, 100.0, 50.0 }, - { 200.0, 110.0, 29.0 }, - { 231.0, 110.0, -18.0 }, - { 115.0, 100.0, -150.0 }, -}; - -Vec3f N(FlightPath_Lakitu_01_Attack)[] = { - { 285.0, 120.0, -108.0 }, - { 370.0, 100.0, -130.0 }, - { 454.0, 60.0, -20.0 }, -}; - -Vec3f N(FlightPath_Lakitu_02_Attack)[] = { - { 263.0, 110.0, -66.0 }, - { 360.0, 90.0, 50.0 }, - { 454.0, 50.0, 20.0 }, -}; - -Vec3f N(FlightPath_Lakitu_01_Flee)[] = { - { 400.0, 30.0, -40.0 }, - { 300.0, 80.0, -40.0 }, - { 150.0, 200.0, -40.0 }, - { 100.0, 350.0, -40.0 }, -}; - -Vec3f N(FlightPath_Lakitu_02_Flee)[] = { - { 400.0, 30.0, 40.0 }, - { 300.0, 80.0, 40.0 }, - { 150.0, 200.0, 40.0 }, - { 100.0, 350.0, 40.0 }, -}; - -EvtScript N(EVS_PlayFlightSounds) = { - Loop(0) - Call(PlaySound, SOUND_FLIGHT) - Wait(LVar0) - EndLoop - Return - End -}; - -EvtScript N(EVS_LakitusFlying_Search) = { - Set(LVar0, 5) - ExecGetTID(N(EVS_PlayFlightSounds), MV_FlyingSoundsScript) - Thread - Call(LoadPath, 160, Ref(N(FlightPath_Lakitu_01_Search)), - ARRAY_COUNT(N(FlightPath_Lakitu_01_Search)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_01, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - EndThread - Call(LoadPath, 160, Ref(N(FlightPath_Lakitu_02_Search)), - ARRAY_COUNT(N(FlightPath_Lakitu_02_Search)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_02, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - Set(MV_LakituSearchSync, 1) - Return - End -}; - -EvtScript N(EVS_LakitusFlying_Gather) = { - Thread - Call(LoadPath, 30, Ref(N(FlightPath_Lakitu_01_Gather)), - ARRAY_COUNT(N(FlightPath_Lakitu_01_Gather)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_01, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - EndThread - Call(LoadPath, 45, Ref(N(FlightPath_Lakitu_02_Gather)), - ARRAY_COUNT(N(FlightPath_Lakitu_02_Gather)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_02, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - KillThread(MV_FlyingSoundsScript) - Return - End -}; - -EvtScript N(EVS_LakitusFlying_Attack) = { - Set(LVar0, 4) - ExecGetTID(N(EVS_PlayFlightSounds), MV_FlyingSoundsScript) - Thread - Call(LoadPath, 35, Ref(N(FlightPath_Lakitu_01_Attack)), - ARRAY_COUNT(N(FlightPath_Lakitu_01_Attack)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_01, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - EndThread - Call(LoadPath, 35, Ref(N(FlightPath_Lakitu_02_Attack)), - ARRAY_COUNT(N(FlightPath_Lakitu_02_Attack)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_02, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_LakitusFlying_Flee) = { - Thread - Call(LoadPath, 40, Ref(N(FlightPath_Lakitu_01_Flee)), - ARRAY_COUNT(N(FlightPath_Lakitu_01_Flee)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_01, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - Call(SetNpcPos, NPC_Lakitu_01, NPC_DISPOSE_LOCATION) - EndThread - Call(LoadPath, 40, Ref(N(FlightPath_Lakitu_02_Flee)), - ARRAY_COUNT(N(FlightPath_Lakitu_02_Flee)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_02, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - Call(SetNpcPos, NPC_Lakitu_02, NPC_DISPOSE_LOCATION) - Wait(40) - KillThread(MV_FlyingSoundsScript) - Return - End -}; - -EvtScript N(EVS_Scene_LakituAmbush) = { - IfEq(GF_FLO11_Defeated_Lakitus, TRUE) - Return - EndIf - IfLt(GB_StoryProgress, STORY_CH6_GOT_MAGICAL_BEAN) - Return - EndIf - IfEq(GF_FLO10_LilyRequestedWaterStone, FALSE) - Return - EndIf - Call(SetNpcPos, NPC_Lakitu_01, 460, 200, -240) - Call(SetNpcPos, NPC_Lakitu_02, -100, 200, -50) - Loop(0) - Wait(1) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar0, 440) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerInput, TRUE) - Set(MV_LakituSearchSync, 0) - Exec(N(EVS_LakitusFlying_Search)) - Call(SetCamType, CAM_DEFAULT, 1, FALSE) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(25.0), Float(-7.0)) - Call(SetCamDistance, CAM_DEFAULT, 450) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Set(LVar0, 270) - Set(LVar1, 100) - Set(LVar2, -87) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamPitch, CAM_DEFAULT, Float(14.0), Float(-11.0)) - Call(SetCamPosA, CAM_DEFAULT, 87, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, -50) - Call(SetCamPosC, CAM_DEFAULT, 87, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(30) - Call(SetCamDistance, CAM_DEFAULT, 150) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-16.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Loop(0) - Wait(1) - IfEq(MV_LakituSearchSync, 1) - BreakLoop - EndIf - EndLoop - Call(NpcFaceNpc, NPC_Lakitu_01, NPC_Lakitu_02, 1) - Call(NpcFaceNpc, NPC_Lakitu_02, NPC_Lakitu_01, 1) - Exec(N(EVS_LakitusFlying_Gather)) - Wait(30) - Call(SpeakToPlayer, NPC_Lakitu_01, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 0, MSG_CH6_0088) - Call(NpcFaceNpc, NPC_Lakitu_02, NPC_Lakitu_01, 1) - Call(SpeakToPlayer, NPC_Lakitu_02, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 0, MSG_CH6_0089) - Call(InterpNpcYaw, NPC_Lakitu_01, 0, 1) - Wait(20) - Call(SpeakToPlayer, NPC_Lakitu_01, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 0, MSG_CH6_008A) - Call(SpeakToPlayer, NPC_Lakitu_02, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 0, MSG_CH6_008B) - Call(SetCamType, CAM_DEFAULT, 1, FALSE) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(14.0), Float(-11.0)) - Call(SetCamDistance, CAM_DEFAULT, 450) - Call(SetCamPosA, CAM_DEFAULT, 87, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, -50) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Exec(N(EVS_LakitusFlying_Attack)) - Call(SetNpcVar, NPC_Lakitu_01, 0, 1) - Return - End -}; - -EvtScript N(EVS_NpcIdle_Lakitu_01) = { - Loop(0) - Call(GetSelfVar, 0, LVar0) - IfNe(LVar0, 0) - BreakLoop - EndIf - Wait(1) - EndLoop - Thread - Call(AdjustCam, CAM_DEFAULT, Float(4.0), 0, 1000, Float(14.0), Float(-11.0)) - EndThread - Call(StartBossBattle, SONG_SPECIAL_BATTLE) - Return - End -}; - -EvtScript N(EVS_NpcDefeat_Lakitu_01) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - Call(SetNpcPos, NPC_Lakitu_01, 400, 20, -40) - Call(SetNpcPos, NPC_Lakitu_02, 400, 20, 40) - Call(InterpNpcYaw, NPC_Lakitu_01, 270, 0) - Call(InterpNpcYaw, NPC_Lakitu_02, 270, 0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar2, -60) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 900) - Call(SetCamPitch, CAM_DEFAULT, Float(24.0), Float(-4.0)) - Call(SetCamPosA, CAM_DEFAULT, Float(-95.0), Float(0.0)) - Call(SetCamPosB, CAM_DEFAULT, Float(0.0), Float(-50.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - ExecWait(N(EVS_LakitusFlying_Flee)) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Set(GF_FLO11_Defeated_Lakitus, TRUE) - Set(MV_LakituAmbushState, 1) - Call(DisablePlayerInput, FALSE) - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcDefeat_Lakitu_02) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - Label(0) - IfEq(MV_LakituAmbushState, 0) - Wait(1) - Goto(0) - EndIf - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakitu_01) = { - Call(SetNpcPos, NPC_Lakitu_01, NPC_DISPOSE_LOCATION) - IfEq(GF_FLO11_Defeated_Lakitus, FALSE) - IfGe(GB_StoryProgress, STORY_CH6_GOT_MAGICAL_BEAN) - IfEq(GF_FLO10_LilyRequestedWaterStone, TRUE) - Set(MV_LakituAmbushState, 0) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Lakitu_01))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakitu_01))) - Call(SetNpcPos, NPC_Lakitu_01, 350, 120, -220) - Call(InterpNpcYaw, NPC_Lakitu_01, 270, 1) - EndIf - EndIf - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakitu_02) = { - Call(SetNpcPos, NPC_Lakitu_02, NPC_DISPOSE_LOCATION) - IfEq(GF_FLO11_Defeated_Lakitus, FALSE) - IfGe(GB_StoryProgress, STORY_CH6_GOT_MAGICAL_BEAN) - IfEq(GF_FLO10_LilyRequestedWaterStone, TRUE) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakitu_02))) - Call(SetNpcPos, NPC_Lakitu_02, 200, 110, 29) - Call(InterpNpcYaw, NPC_Lakitu_02, 0, 1) - EndIf - EndIf - EndIf - Return - End -}; - -NpcData N(NpcData_Lakitus)[] = { - { - .id = NPC_Lakitu_01, - .pos = { 553.0f, 60.0f, 52.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Lakitu_01), - .settings = &N(NpcSettings_Lakitu), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - }, - { - .id = NPC_Lakitu_02, - .pos = { 553.0f, 60.0f, 52.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Lakitu_02), - .settings = &N(NpcSettings_Lakitu), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - }, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Lakitus), 0x1A07, BTL_FLO_STAGE_08), - {} -}; diff --git a/src/world/dead/area_flo/flo_11/flo_11_4_entity.c b/src/world/dead/area_flo/flo_11/flo_11_4_entity.c deleted file mode 100644 index a40eeeb9b59..00000000000 --- a/src/world/dead/area_flo/flo_11/flo_11_4_entity.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "flo_11.h" -#include "entity.h" - -EvtScript N(EVS_MakeEntities) = { - Call(MakeEntity, Ref(Entity_MulticoinBlock), -220, 60, -75, 0, MAKE_ENTITY_END) - Call(AssignBlockFlag, GF_FLO11_MultiCoinBrick) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_12/flo_12.h b/src/world/dead/area_flo/flo_12/flo_12.h deleted file mode 100644 index 02b2008d0e2..00000000000 --- a/src/world/dead/area_flo/flo_12/flo_12.h +++ /dev/null @@ -1,24 +0,0 @@ -// Older version of flo_12 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_12_shape.h" -#include "mapfs/flo_12_hit.h" - -enum { - NPC_Rosie = 0, - NPC_Dummy = 1, -}; - -#define NAMESPACE dead_flo_12 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_PushFlowerSong); -extern EvtScript N(EVS_PopMusic); -extern EvtScript N(EVS_Scene_SunReturns); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_12/flo_12_0_header.c b/src/world/dead/area_flo/flo_12/flo_12_0_header.c deleted file mode 100644 index cb6d2fbea25..00000000000 --- a/src/world/dead/area_flo/flo_12/flo_12_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_12.h" - -EntryList N(Entrances) = { - [flo_12_ENTRY_0] { 280.0, 0.0, 0.0, 270.0 }, - [flo_12_ENTRY_1] { 280.0, 0.0, 0.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_12 }, -}; diff --git a/src/world/dead/area_flo/flo_12/flo_12_1_music.c b/src/world/dead/area_flo/flo_12/flo_12_1_music.c deleted file mode 100644 index 2ad1e5a598c..00000000000 --- a/src/world/dead/area_flo/flo_12/flo_12_1_music.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "flo_12.h" - -EvtScript N(EVS_SetupMusic) = { - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_12_ENTRY_1) - Call(SetMusicTrack, 0, SONG_SUNSHINE_RETURNS, 0, 8) - Else - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - EndIf - Return - End -}; - -EvtScript N(EVS_PushFlowerSong) = { - Call(PushSong, SONG_FLOWER_NPC_THEME, 3) - Return - End -}; - -EvtScript N(EVS_PopMusic) = { - Call(FadeOutMusic, 0, 250) - Wait(10) - Call(PopSong) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_12/flo_12_2_main.c b/src/world/dead/area_flo/flo_12/flo_12_2_main.c deleted file mode 100644 index 4f8871fdfe3..00000000000 --- a/src/world/dead/area_flo/flo_12/flo_12_2_main.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "flo_12.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_11_1) = EVT_EXIT_WALK(60, flo_12_ENTRY_0, "flo_11", flo_11_ENTRY_1); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_11_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Set(AF_FLO_GivenCrystalBerry, FALSE) - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o180, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( -65, -210, 90, -110, 0) - EVT_FLOWER_SPAWN_REGION( -200, 130, -80, 170, 0) - EVT_FLOWER_SPAWN_REGION( -270, -80, -225, 125, 0) - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_12_ENTRY_1) - Exec(N(EVS_Scene_SunReturns)) - Else - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - EndIf - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_12/flo_12_3_npc.c b/src/world/dead/area_flo/flo_12/flo_12_3_npc.c deleted file mode 100644 index e169ccbf2a5..00000000000 --- a/src/world/dead/area_flo/flo_12/flo_12_3_npc.c +++ /dev/null @@ -1,218 +0,0 @@ -#include "flo_12.h" -#include "sprite/player.h" - -#include "world/common/npc/Rosie.inc.c" -#include "world/common/npc/Dummy.inc.c" - -#include "common/foliage.inc.c" - -#include "world/common/complete/GiveReward.inc.c" -#include "world/common/complete/KeyItemChoice.inc.c" - -s32 N(KeyList)[] = { - ITEM_CRYSTAL_BERRY, - ITEM_NONE -}; - -EvtScript N(EVS_Scene_SunReturns) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(GetNpcPos, NPC_Rosie, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-9.5)) - Call(SetCamPosA, CAM_DEFAULT, 0, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, -50) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(20) - Call(SpeakToPlayer, NPC_Rosie, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_00C7) - Wait(10) - Call(GotoMap, Ref("flo_03"), flo_03_ENTRY_2) - Wait(100) - Return - End -}; - -EvtScript N(EVS_PlayerApproachRosie) = { - Wait(10) - Call(SetNpcFlagBits, NPC_Rosie, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(PlayerMoveTo, -5, 20, 20) - Call(SetNpcFlagBits, NPC_Rosie, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(PlayerFaceNpc, NPC_Rosie, TRUE) - Return - End -}; - -EvtScript N(EVS_PlayerApproachRosieAndItem) = { - Wait(10) - Call(SetNpcFlagBits, NPC_Rosie, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(PlayerMoveTo, -5, 20, 20) - Call(SetNpcFlagBits, NPC_Rosie, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(PlayerFaceNpc, NPC_Rosie, TRUE) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Rosie) = { - ExecWait(N(EVS_PushFlowerSong)) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_CRYSTAL_BERRY) - Switch(GF_FLO12_Met_Rosie) - CaseEq(0) - Exec(N(EVS_PlayerApproachRosie)) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Add(LVar0, 30) - Call(SetCamProperties, CAM_DEFAULT, Float(4.0), LVar0, LVar1, LVar2, 325, Float(19.0), Float(-9.5)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_Talk, ANIM_Rosie_Idle, 5, MSG_CH6_008C) - Call(ShowChoice, MSG_Choice_0011) - Wait(10) - Switch(LVar0) - CaseEq(0) - Call(ContinueSpeech, NPC_SELF, ANIM_Rosie_Talk, ANIM_Rosie_Idle, 5, MSG_CH6_008D) - CaseEq(1) - Call(ContinueSpeech, NPC_SELF, ANIM_Rosie_Talk, ANIM_Rosie_Idle, 5, MSG_CH6_008E) - EndSwitch - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(SetNpcAnimation, NPC_SELF, ANIM_Rosie_TakeOut) - Wait(10) - Call(SetNpcAnimation, NPC_SELF, ANIM_Rosie_IdleHold) - Call(MakeItemEntity, ITEM_WATER_STONE, -33, 14, 19, ITEM_SPAWN_MODE_DECORATION, 0x00000564) - Wait(10) - Switch(GF_FLO10_LilyRequestedWaterStone) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_TalkHold, 5, MSG_CH6_008F) - CaseEq(1) - Call(SetPlayerAnimation, ANIM_MarioW1_CarryRun) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_TalkHold, 5, MSG_CH6_008F) - Call(SetPlayerAnimation, ANIM_MarioW1_TakeItem) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0091) - Call(SetPlayerAnimation, ANIM_Mario1_Pray) - Wait(40) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0092) - Set(GF_FLO12_RosieRequestedSomethingBeautiful, TRUE) - EndSwitch - Set(GF_FLO12_Met_Rosie, TRUE) - CaseEq(1) - Switch(GF_FLO12_RosieRequestedSomethingBeautiful) - CaseEq(0) - IfEq(GF_FLO10_LilyRequestedWaterStone, TRUE) - Exec(N(EVS_PlayerApproachRosieAndItem)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_TalkHold, 5, MSG_CH6_0090) - Call(SetPlayerAnimation, ANIM_MarioW1_TakeItem) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0091) - Call(SetPlayerAnimation, ANIM_Mario1_Pray) - Wait(40) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0092) - Set(GF_FLO12_RosieRequestedSomethingBeautiful, TRUE) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_TalkHold, 5, MSG_CH6_0090) - EndIf - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0093) - EndSwitch - EndSwitch - CaseLt(STORY_CH6_GOT_WATER_STONE) - Call(FindKeyItem, ITEM_CRYSTAL_BERRY, LVar0) - IfNe(LVar0, -1) - Exec(N(EVS_PlayerApproachRosieAndItem)) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Add(LVar0, 30) - Call(SetCamProperties, CAM_DEFAULT, Float(4.0), LVar0, LVar1, LVar2, 325, Float(19.0), Float(-9.5)) - EndIf - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0094) - EVT_CHOOSE_KEY_ITEM_FROM(N(KeyList)) - Switch(LVar0) - CaseLe(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0093) - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0095) - Call(RemoveItemEntity, LVar7) - Call(MakeItemEntity, ITEM_CRYSTAL_BERRY, -33, 14, 19, ITEM_SPAWN_MODE_DECORATION, EVT_INDEX_OF_GAME_FLAG(GF_FLO12_HeldItemPickup)) - EVT_GIVE_KEY_REWARD(ITEM_WATER_STONE) - Wait(10) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0096) - Set(AF_FLO_GivenCrystalBerry, TRUE) - Set(GB_StoryProgress, STORY_CH6_GOT_WATER_STONE) - EndSwitch - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Switch(AF_FLO_GivenCrystalBerry) - CaseEq(0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0097) - CaseEq(1) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0096) - EndSwitch - CaseLt(STORY_CH6_RETURNED_TO_TOAD_TOWN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0098) - CaseDefault - Call(SpeakToPlayer, NPC_SELF, ANIM_Rosie_TalkHold, ANIM_Rosie_IdleHold, 5, MSG_CH6_0099) - EndSwitch - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - ExecWait(N(EVS_PopMusic)) - Return - End -}; - -EvtScript N(EVS_NpcInit_Rosie) = { - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Rosie))) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Add(LVar0, 35) - Call(SetNpcPos, NPC_Dummy, LVar0, LVar1, LVar2) - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_INVISIBLE, TRUE) - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_HAS_SHADOW, TRUE) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_GOT_CRYSTAL_BERRY) - IfEq(GF_FLO12_Met_Rosie, TRUE) - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(SetNpcAnimation, NPC_SELF, ANIM_Rosie_IdleHold) - Call(MakeItemEntity, ITEM_WATER_STONE, -33, 14, 19, ITEM_SPAWN_MODE_DECORATION, EVT_INDEX_OF_GAME_FLAG(GF_FLO12_HeldItemPickup)) - Set(LVarA, LVar0) - EndIf - CaseLt(STORY_CH6_GOT_WATER_STONE) - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(SetNpcAnimation, NPC_SELF, ANIM_Rosie_IdleHold) - Call(MakeItemEntity, ITEM_WATER_STONE, -33, 14, 19, ITEM_SPAWN_MODE_DECORATION, EVT_INDEX_OF_GAME_FLAG(GF_FLO12_HeldItemPickup)) - Set(LVarA, LVar0) - CaseDefault - Call(SetNpcFlagBits, NPC_Dummy, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(SetNpcAnimation, NPC_SELF, ANIM_Rosie_IdleHold) - Call(MakeItemEntity, ITEM_CRYSTAL_BERRY, -33, 14, 19, ITEM_SPAWN_MODE_DECORATION, EVT_INDEX_OF_GAME_FLAG(GF_FLO12_HeldItemPickup)) - Set(LVarA, LVar0) - EndSwitch - Return - End -}; - -NpcData N(NpcData_Rosie)[] = { - { - .id = NPC_Rosie, - .pos = { -70.0f, 0.0f, 20.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Rosie), - .settings = &N(NpcSettings_Rosie), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = ROSIE_ANIMS, - .tattle = MSG_NpcTattle_Rosie, - }, - { - .id = NPC_Dummy, - .pos = { -70.0f, 0.0f, 20.0f }, - .yaw = 90, - .settings = &N(NpcSettings_Dummy), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_PLAYER_COLLISION, - .drops = NO_DROPS, - .animations = ROSIE_ANIMS, - }, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Rosie)), - {} -}; diff --git a/src/world/dead/area_flo/flo_13/flo_13.h b/src/world/dead/area_flo/flo_13/flo_13.h deleted file mode 100644 index 0876ca80556..00000000000 --- a/src/world/dead/area_flo/flo_13/flo_13.h +++ /dev/null @@ -1,44 +0,0 @@ -// Older version of flo_13 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_13_shape.h" -#include "mapfs/flo_13_hit.h" - -#include "sprite/npc/Lakilulu.h" -#include "sprite/npc/WorldLakilester.h" -#include "sprite/npc/Lakitu.h" -#include "sprite/npc/Spiny.h" - -enum { - NPC_Lakilester = 0, - NPC_Lakilulu = 1, - NPC_Lakilulu_Spiny = 2, - NPC_Lakitu_01 = 3, - NPC_Lakitu_02 = 4, - NPC_Spiny_01 = 50, - NPC_Spiny_02 = 51, - NPC_Spiny_03 = 52, - NPC_Spiny_04 = 53, - NPC_Spiny_05 = 54, - NPC_Spiny_06 = 55, -}; - -enum { - MV_LakiluluSpinySceneState = MapVar(10), -}; - -#define NAMESPACE dead_flo_13 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_PushPartnerSong); -extern EvtScript N(EVS_PopSong); -extern EvtScript N(EVS_MakeEntities); -extern NpcGroupList N(DefaultNPCs); - -API_CALLABLE(N(LoadPartyImage)); diff --git a/src/world/dead/area_flo/flo_13/flo_13_0_header.c b/src/world/dead/area_flo/flo_13/flo_13_0_header.c deleted file mode 100644 index 2ddb0b860ec..00000000000 --- a/src/world/dead/area_flo/flo_13/flo_13_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_13.h" - -EntryList N(Entrances) = { - [flo_13_ENTRY_0] { 570.0, 0.0, 0.0, 270.0 }, - [flo_13_ENTRY_1] { -570.0, 0.0, 0.0, 90.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_13 }, -}; diff --git a/src/world/dead/area_flo/flo_13/flo_13_1_music.c b/src/world/dead/area_flo/flo_13/flo_13_1_music.c deleted file mode 100644 index 4750aeb400a..00000000000 --- a/src/world/dead/area_flo/flo_13/flo_13_1_music.c +++ /dev/null @@ -1,59 +0,0 @@ -#include "flo_13.h" - -EvtScript N(EVS_PlaySongForPlayerPos) = { - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar0, -500) - Goto(10) - EndIf - Label(0) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Loop(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar0, -500) - BreakLoop - EndIf - Wait(1) - EndLoop - Label(10) - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_SUN_TOWER_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_SUN_TOWER_SUNNY, 0, 8) - EndSwitch - Loop(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfGt(LVar0, -500) - BreakLoop - EndIf - Wait(1) - EndLoop - Goto(0) - Return - End -}; - -EvtScript N(EVS_SetupMusic) = { - Exec(N(EVS_PlaySongForPlayerPos)) - Return - End -}; - -EvtScript N(EVS_PushPartnerSong) = { - Call(SetMusicTrack, 0, SONG_NEW_PARTNER, 0, 8) - Return - End -}; - -EvtScript N(EVS_PopSong) = { - Call(FadeOutMusic, 0, 500) - Wait(15) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_13/flo_13_2_entity.c b/src/world/dead/area_flo/flo_13/flo_13_2_entity.c deleted file mode 100644 index 1f6db154c22..00000000000 --- a/src/world/dead/area_flo/flo_13/flo_13_2_entity.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "flo_13.h" -#include "entity.h" - -EvtScript N(EVS_OnBlast_Rock) = { - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o85, COLLIDER_FLAGS_UPPER_MASK) - Return - End -}; - -EvtScript N(EVS_MakeEntities) = { - Call(MakeItemEntity, ITEM_MEGA_SMASH, -61, 60, -85, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO13_Item_MegaSmash) - Call(MakeItemEntity, ITEM_SHOOTING_STAR, 128, 0, 157, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO13_Item_ShootingStar) - IfEq(GF_FLO13_Item_MegaSmash, FALSE) - Call(MakeEntity, Ref(Entity_BombableRock), -160, 160, -90, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBlast_Rock))) - Else - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o85, COLLIDER_FLAGS_UPPER_MASK) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_13/flo_13_3_main.c b/src/world/dead/area_flo/flo_13/flo_13_3_main.c deleted file mode 100644 index 1154a9bcb61..00000000000 --- a/src/world/dead/area_flo/flo_13/flo_13_3_main.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "flo_13.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_14_1) = EVT_EXIT_WALK(60, flo_13_ENTRY_0, "flo_14", flo_14_ENTRY_1); -EvtScript N(EVS_ExitWalk_flo_15_0) = EVT_EXIT_WALK(60, flo_13_ENTRY_1, "flo_15", flo_15_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_15_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_14_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o48, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( 274, -137, 583, -64, 0) - EVT_FLOWER_SPAWN_REGION( 433, 108, 580, 169, 0) - EVT_FLOWER_SPAWN_REGION( -460, 90, -125, 130, 0) - EVT_FLOWER_SPAWN_REGION( -420, -130, -260, -90, 0) - EVT_FLOWER_SPAWN_REGION( -220, -137, 0, -50, 160) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_13/flo_13_4_npc.c b/src/world/dead/area_flo/flo_13/flo_13_4_npc.c deleted file mode 100644 index cab0222f1db..00000000000 --- a/src/world/dead/area_flo/flo_13/flo_13_4_npc.c +++ /dev/null @@ -1,887 +0,0 @@ -#include "flo_13.h" -#include "sprite/player.h" - -#include "world/common/util/ChangeNpcToPartner.inc.c" - -NpcSettings N(NpcSettings_Lakilester) = { - .height = 32, - .radius = 24, - .level = ACTOR_LEVEL_LAKITU, - .onHit = &EnemyNpcHit, - .onDefeat = &EnemyNpcDefeat, -}; - -#define AI_LAKITU_FIRST_SPINY_ID NPC_Spiny_01 -#define AI_LAKITU_LAST_SPINY_ID NPC_Spiny_06 -#define DEBUG_LAKITU -#include "world/common/enemy/Lakitu_SpinySpawner.inc.c" - -#include "world/common/todo/UnkFunc42.inc.c" - -API_CALLABLE(N(PlayLakiluluFlightSounds)) { - Npc* npc = get_npc_unsafe(NPC_Lakilulu); - s16 volume; - s16 pan; - - script->functionTemp[1] = evt_get_variable(script, *script->ptrReadPos); - - if (isInitialCall) { - script->functionTemp[0] = 0; - } - - if (script->functionTemp[0] % 5 == 0) { - sfx_get_spatialized_sound_params(npc->pos.x, npc->pos.y, npc->pos.z, - &volume, &pan, SOUND_PARAM_MORE_QUIET | SOUND_SPACE_FULL); - sfx_play_sound_with_params(SOUND_FLIGHT, volume, pan, - update_lerp(EASING_LINEAR, 500.0f, 0.0f, script->functionTemp[0], script->functionTemp[1])); - } - - script->functionTemp[0]++; - - if (script->functionTemp[0] > script->functionTemp[1]) { - return ApiStatus_DONE2; - } else { - return ApiStatus_BLOCK; - } -} - -API_CALLABLE(N(PlayLakilesterFlightSounds)) { - Npc* npc = get_npc_unsafe(NPC_Lakilester); - s16 volume; - s16 pan; - - if (isInitialCall) { - script->functionTemp[0] = 0; - } - - if (script->functionTemp[0] % 5 == 0) { - sfx_get_spatialized_sound_params(npc->pos.x, npc->pos.y, npc->pos.z, - &volume, &pan, SOUND_PARAM_MORE_QUIET | SOUND_SPACE_FULL); - sfx_play_sound_with_params(SOUND_FLIGHT, volume, pan, - update_lerp(EASING_LINEAR, 500.0f, 0.0f, script->functionTemp[0], 80)); - } - - script->functionTemp[0]++; - - if (script->functionTemp[0] > 80) { - return ApiStatus_DONE2; - } else { - return ApiStatus_BLOCK; - } -} - -Vec3f N(FlightPath_LakilesterAmbush)[] = { - { -250.0, 130.0, 100.0 }, - { -150.0, 90.0, 70.0 }, - { 50.0, 70.0, 10.0 }, - { 200.0, 35.0, 30.0 }, - { 30.0, 10.0, 45.0 }, -}; - -Vec3f N(FlightPath_LakiluluArrives)[] = { - { -285.0, 130.0, 45.0 }, - { -185.0, 90.0, 25.0 }, - { 15.0, 70.0, 10.0 }, - { 165.0, 35.0, 30.0 }, - { -5.0, 10.0, 45.0 }, -}; - -Vec3f N(FlightPath_LakiluluDeparts)[] = { - { 10.0, 0.0, 45.0 }, - { -90.0, 20.0, 45.0 }, - { -190.0, 60.0, 45.0 }, - { -290.0, 140.0, 45.0 }, - { -390.0, 300.0, 45.0 }, -}; - -EvtScript N(EVS_Lakliester_ManageYaw) = { - Call(GetNpcPos, NPC_Lakilester, LVar0, LVar1, LVar2) - Label(0) - Call(GetNpcPos, NPC_Lakilester, LVar3, LVar4, LVar5) - Call(N(UnkFunc42)) - Call(InterpNpcYaw, NPC_Lakilester, LVarA, 0) - Set(LVar0, LVar3) - Set(LVar1, LVar4) - Set(LVar2, LVar5) - Call(GetAngleBetweenNPCs, NPC_PARTNER, NPC_Lakilester, LVarA) - Call(InterpNpcYaw, NPC_PARTNER, LVarA, 0) - Call(PlayerFaceNpc, NPC_Lakilester, FALSE) - Wait(1) - Goto(0) - Return - End -}; - -EvtScript N(EVS_Laklilulu_ManageYaw) = { - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Label(0) - Call(GetNpcPos, NPC_Lakilulu, LVar3, LVar4, LVar5) - Call(N(UnkFunc42)) - Call(InterpNpcYaw, NPC_Lakilulu, LVarA, 0) - Set(LVar0, LVar3) - Set(LVar1, LVar4) - Set(LVar2, LVar5) - Call(GetAngleBetweenNPCs, NPC_PARTNER, NPC_Lakilulu, LVarA) - Call(InterpNpcYaw, NPC_PARTNER, LVarA, 0) - IfLt(GB_StoryProgress, STORY_CH6_LAKILESTER_JOINED_PARTY) - Call(GetAngleBetweenNPCs, NPC_Lakilester, NPC_Lakilulu, LVarB) - Call(InterpNpcYaw, NPC_Lakilester, LVarB, 0) - EndIf - Call(PlayerFaceNpc, NPC_Lakilulu, FALSE) - Wait(1) - Goto(0) - Return - End -}; - -EvtScript N(EVS_LakiluluAndSpiny_HoverBobbing) = { - Set(MV_LakiluluSpinySceneState, 0) - Loop(0) - Loop(2) - Call(GetNpcPos, NPC_Lakilulu_Spiny, LVar0, LVar1, LVar2) - Add(LVar1, 1) - Call(SetNpcPos, NPC_Lakilulu_Spiny, LVar0, LVar1, LVar2) - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Add(LVar1, 1) - Call(SetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Wait(2) - EndLoop - Wait(1) - Loop(2) - Call(GetNpcPos, NPC_Lakilulu_Spiny, LVar0, LVar1, LVar2) - Add(LVar1, -1) - Call(SetNpcPos, NPC_Lakilulu_Spiny, LVar0, LVar1, LVar2) - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Add(LVar1, -1) - Call(SetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Wait(2) - EndLoop - Wait(1) - IfEq(MV_LakiluluSpinySceneState, 1) - Set(MV_LakiluluSpinySceneState, 2) - BreakLoop - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_Lakilulu_SpinyToss) = { - Exec(N(EVS_LakiluluAndSpiny_HoverBobbing)) - Call(SetNpcAnimation, NPC_Lakilulu, ANIM_Lakilulu_Lift) - Call(GetNpcPos, NPC_Lakilulu, LVar1, LVar2, LVar3) - Add(LVar1, -5) - Add(LVar2, 30) - Add(LVar3, 2) - Call(SetNpcYaw, NPC_Lakilulu_Spiny, 270) - Call(SetNpcPos, NPC_Lakilulu_Spiny, LVar1, LVar2, LVar3) - Thread - Wait(5) - Call(SetPlayerAnimation, ANIM_Mario1_Flail) - EndThread - Call(ContinueSpeech, NPC_Lakilulu, -1, -1, SPEECH_FLAG_200, MSG_CH6_00A8) - Thread - Wait(15) - Call(EndSpeech, NPC_Lakilulu, -1, -1, SPEECH_FLAG_200) - EndThread - Set(MV_LakiluluSpinySceneState, 1) - Loop(0) - Wait(1) - IfEq(MV_LakiluluSpinySceneState, 2) - BreakLoop - EndIf - EndLoop - Call(SetNpcAnimation, NPC_Lakilulu, ANIM_Lakilulu_Throw) - Call(GetPlayerPos, LVar1, LVar2, LVar3) - Add(LVar1, 5) - Add(LVar2, 20) - Call(SetNpcJumpscale, NPC_Lakilulu_Spiny, Float(0.0)) - Call(NpcJump0, NPC_Lakilulu_Spiny, LVar1, LVar2, LVar3, 7) - Add(LVar1, -100) - Add(LVar2, 10) - Thread - Call(SetNpcJumpscale, NPC_Lakilulu_Spiny, Float(1.5)) - Call(NpcJump0, NPC_Lakilulu_Spiny, LVar1, LVar2, LVar3, 15) - Call(SetNpcPos, NPC_Lakilulu_Spiny, NPC_DISPOSE_LOCATION) - EndThread - Thread - Call(ShakeCam, CAM_DEFAULT, 0, 10, Float(2.0)) - EndThread - Call(PlaySoundAtPlayer, SOUND_HIT_PLAYER_NORMAL, SOUND_SPACE_DEFAULT) - Call(SetPlayerAnimation, ANIM_Mario1_Hurt) - Set(LVar0, 90) - Loop(20) - Add(LVar0, 144) - IfGt(LVar0, 359) - Sub(LVar0, 360) - EndIf - Call(InterpPlayerYaw, LVar0, 1) - Wait(1) - EndLoop - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Call(SetNpcAnimation, NPC_Lakilulu, ANIM_Lakilulu_Idle) - Return - End -}; - -EvtScript N(EVS_NpcIdle_Lakilester) = { - IfNe(GB_StoryProgress, STORY_CH6_SPOKE_WITH_THE_SUN) - Return - EndIf - Call(AwaitPlayerApproach, 200, 20, 275) - Call(DisablePlayerInput, TRUE) - Call(SetNpcPos, NPC_Lakilester, -250, 120, 45) - Call(SetMusicTrack, 0, SONG_LAKILESTER_THEME, 0, 8) - Call(ShowMessageAtScreenPos, MSG_CH6_00A0, 160, 40) - Call(InterruptUsePartner) - Call(SetPlayerAnimation, ANIM_Mario1_LookUp) - Wait(20) - Call(InterpPlayerYaw, 270, 1) - Wait(20) - Call(InterpPlayerYaw, 90, 1) - Wait(20) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Call(func_802CF56C, 2) - Call(SetNpcAnimation, NPC_Lakilester, ANIM_WorldLakilester_Run) - Thread - Call(N(PlayLakilesterFlightSounds)) - EndThread - ExecGetTID(N(EVS_Lakliester_ManageYaw), LVar9) - Call(LoadPath, 80, Ref(N(FlightPath_LakilesterAmbush)), ARRAY_COUNT(N(FlightPath_LakilesterAmbush)), EASING_LINEAR) - Label(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakilester, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 1) - Goto(0) - EndIf - KillThread(LVar9) - Call(SetNpcAnimation, NPC_Lakilester, ANIM_WorldLakilester_Idle) - Call(PlayerFaceNpc, NPC_Lakilester, FALSE) - Wait(15) - Call(GetNpcPos, NPC_Lakilester, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 200) - Call(SetCamPitch, CAM_DEFAULT, Float(18.0), Float(-8.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Thread - Call(PlayerMoveTo, -75, 65, 10) - Call(PlayerFaceNpc, NPC_Lakilester, FALSE) - EndThread - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00A1) - Call(SetNpcAnimation, NPC_Lakilester, ANIM_WorldLakilester_Run) - Wait(10) - Call(SetNpcAnimation, NPC_Lakilester, ANIM_WorldLakilester_Idle) - Thread - Call(SetCamDistance, CAM_DEFAULT, 1000) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-6.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - EndThread - Call(DisablePlayerInput, FALSE) - Call(StartBossBattle, SONG_SPECIAL_BATTLE) - Return - End -}; - -EvtScript N(EVS_Lakilulu_FlyAway) = { - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Call(AwaitPlayerLeave, LVar0, LVar2, 120) - Call(DisablePlayerInput, TRUE) - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, 0, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 250) - Call(SetCamPitch, CAM_DEFAULT, Float(5.5), Float(-7.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(NpcFaceNpc, NPC_Lakilulu, NPC_Lakilester, 1) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_00B4) - Call(NpcFaceNpc, NPC_PARTNER, NPC_Lakilulu, 1) - Call(SetCamDistance, CAM_DEFAULT, 600) - Call(SetCamPitch, CAM_DEFAULT, Float(10.0), Float(-8.0)) - Call(SetCamPosA, CAM_DEFAULT, 0, 0) - Call(SetCamPosB, CAM_DEFAULT, 130, -200) - Call(SetCamPosC, CAM_DEFAULT, 0, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Thread - Call(N(PlayLakiluluFlightSounds), 55) - EndThread - Call(SetNpcFlagBits, NPC_Lakilulu, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - ExecGetTID(N(EVS_Laklilulu_ManageYaw), LVar9) - Call(LoadPath, 55, Ref(N(FlightPath_LakiluluDeparts)), ARRAY_COUNT(N(FlightPath_LakiluluDeparts)), EASING_LINEAR) - Label(20) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakilulu, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 1) - Goto(20) - EndIf - KillThread(LVar9) - Call(GetCurrentPartnerID, LVar0) - Call(BringPartnerOut, PARTNER_LAKILESTER) - IfNe(LVar0, PARTNER_LAKILESTER) - Call(SetNpcJumpscale, NPC_PARTNER, Float(0.0)) - Call(GetPlayerPos, LVar1, LVar2, LVar3) - Add(LVar1, 20) - Add(LVar2, 20) - Add(LVar3, 20) - Call(NpcJump0, NPC_PARTNER, LVar1, LVar2, LVar3, 30) - EndIf - Call(DisablePartnerAI, 0) - Call(InterpNpcYaw, NPC_PARTNER, 270, 0) - Wait(5) - Call(SpeakToPlayer, NPC_PARTNER, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 5, MSG_CH6_00B5) - Call(EnablePartnerAI) - Call(PutPartnerAway) - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_Scene_LakilesterDefeated) = { - Call(DisablePlayerInput, TRUE) - Wait(30) - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_TiredTalk, ANIM_WorldLakilester_Tired, 0, MSG_CH6_00A2) - Call(SetNpcPos, NPC_Lakilulu, -290, 120, 45) - Thread - Wait(10) - Call(SetNpcAnimation, NPC_SELF, ANIM_WorldLakilester_Idle) - Call(SetPlayerAnimation, ANIM_Mario1_LookUp) - Wait(20) - Call(InterpPlayerYaw, 270, 1) - EndThread - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 5, MSG_CH6_00A3) - Call(SetNpcAnimation, NPC_Lakilulu, ANIM_Lakilulu_Panic) - Call(UseSettingsFrom, CAM_DEFAULT, 0, 0, 0) - Call(SetPanTarget, CAM_DEFAULT, 0, 0, 0) - Call(SetCamDistance, CAM_DEFAULT, 500) - Call(SetCamPitch, CAM_DEFAULT, Float(5.5), Float(-6.0)) - Call(SetCamPosA, CAM_DEFAULT, 0, 0) - Call(SetCamPosB, CAM_DEFAULT, 130, -200) - Call(SetCamPosC, CAM_DEFAULT, 0, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Wait(1) - Thread - Call(SetCamDistance, CAM_DEFAULT, 400) - Call(SetCamPosB, CAM_DEFAULT, 130, 60) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - EndThread - Thread - Call(N(PlayLakiluluFlightSounds), 80) - EndThread - ExecGetTID(N(EVS_Laklilulu_ManageYaw), LVar9) - Call(LoadPath, 80, Ref(N(FlightPath_LakiluluArrives)), ARRAY_COUNT(N(FlightPath_LakiluluArrives)), EASING_LINEAR) - Label(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakilulu, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 1) - Goto(0) - EndIf - KillThread(LVar9) - Call(SetNpcAnimation, NPC_Lakilulu, ANIM_Lakilulu_ConcernedNod) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Wait(20) - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Add(LVar0, 20) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 250) - Call(SetCamPitch, CAM_DEFAULT, Float(5.5), Float(-7.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00A4) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar0, 40) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Shout, ANIM_Lakilulu_Shout, 0, MSG_CH6_00A5) - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Add(LVar0, 20) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 250) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_Shout, ANIM_WorldLakilester_IdleTough, 0, MSG_CH6_00A6) - Call(SetNpcAnimation, NPC_Lakilester, ANIM_WorldLakilester_Idle) - Call(EndSpeech, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar0, 40) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamSpeed, CAM_DEFAULT, Float(10.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Label(10) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_ConcernedTalk, ANIM_Lakilulu_ConcernedNod, 0, MSG_CH6_00A7) - Call(ShowChoice, MSG_Choice_0020) - IfNe(LVar0, 0) - ExecWait(N(EVS_Lakilulu_SpinyToss)) - Wait(10) - Goto(10) - Else - Call(ContinueSpeech, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_00A9) - Call(SetNpcAnimation, NPC_Lakilulu, ANIM_Lakilulu_Idle) - Call(SetPlayerAnimation, ANIM_Mario1_NodYes) - Wait(10) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Wait(20) - Call(GetNpcPos, NPC_Lakilulu, LVar0, LVar1, LVar2) - Add(LVar0, 20) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 250) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_Shout, ANIM_WorldLakilester_IdleTough, 0, MSG_CH6_00AA) - Call(SetNpcAnimation, NPC_Lakilester, ANIM_WorldLakilester_Idle) - Call(EndSpeech, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar0, 40) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamSpeed, CAM_DEFAULT, Float(5.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_Shout, ANIM_WorldLakilester_IdleTough, 0, MSG_CH6_00AB) - Wait(10) - Call(ShowChoice, MSG_Choice_0021) - Switch(LVar0) - CaseEq(-1) - CaseEq(0) - Call(ContinueSpeech, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00AC) - CaseEq(1) - Call(ContinueSpeech, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00AD) - CaseEq(2) - Call(ContinueSpeech, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00AE) - CaseEq(3) - Call(ContinueSpeech, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00AF) - EndSwitch - EndIf - Call(InterpNpcYaw, NPC_Lakilulu, 90, 1) - Call(SetNpcAnimation, NPC_Lakilulu, ANIM_Lakilulu_ConcernedNod) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_ConcernedTalk, ANIM_Lakilulu_ConcernedNod, 5, MSG_CH6_00B0) - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00B1) - Wait(15) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_ConcernedTalk, ANIM_Lakilulu_ConcernedNod, 5, MSG_CH6_00B2) - Call(SpeakToPlayer, NPC_Lakilester, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 0, MSG_CH6_00B3) - Wait(10) - Thread - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - EndThread - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar0, 30) - Call(SetNpcSpeed, NPC_Lakilester, Float(3.5)) - Call(NpcMoveTo, NPC_Lakilester, LVar0, 60, 0) - Call(N(ChangeNpcToPartner), 0, 8) - Call(N(LoadPartyImage)) - Exec(N(EVS_PushPartnerSong)) - Wait(15) - Call(ShowMessageAtScreenPos, MSG_Menus_0190, 160, 40) - Exec(N(EVS_PopSong)) - Wait(10) - Call(PanToTarget, CAM_DEFAULT, 0, 0) - Set(GB_StoryProgress, STORY_CH6_LAKILESTER_JOINED_PARTY) - Call(EnablePartnerAI) - Call(DisablePlayerInput, FALSE) - ExecWait(N(EVS_Lakilulu_FlyAway)) - Return - End -}; - -EvtScript N(EVS_NpcDefeat_Lakilester) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - Call(SetNpcAnimation, NPC_SELF, ANIM_WorldLakilester_Tired) - Call(SetCamType, CAM_DEFAULT, 6, TRUE) - Call(GetNpcPos, NPC_SELF, LVar3, LVar1, LVar2) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar0, LVar3) - Div(LVar0, 2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-7.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Exec(N(EVS_Scene_LakilesterDefeated)) - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInteract_Lakilulu) = { - IfLe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_0032) - Else - Call(GetCurrentPartnerID, LVar0) - IfNe(LVar0, PARTNER_LAKILESTER) - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_0034) - Else - Call(SpeakToPlayer, NPC_Lakilulu, ANIM_Lakilulu_Talk, ANIM_Lakilulu_Idle, 0, MSG_CH6_0032) - EndIf - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakilester) = { - IfLt(GB_StoryProgress, STORY_CH6_LAKILESTER_JOINED_PARTY) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Lakilester))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakilester))) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakilulu) = { - IfLt(GB_StoryProgress, STORY_CH6_BEGAN_PEACH_MISSION) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Lakilulu))) - Call(SetNpcCollisionSize, NPC_SELF, 36, 28) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetNpcPos, NPC_SELF, -50, 180, -50) - EndIf - Else - Call(RemoveNpc, NPC_SELF) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakilulu_Spiny) = { - Call(SetNpcPos, NPC_Lakilulu_Spiny, NPC_DISPOSE_LOCATION) - Call(SetNpcAnimation, NPC_Lakilulu_Spiny, ANIM_Lakilulu_Spiny) - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakitu) = { - IfEq(GB_StoryProgress, STORY_CH6_SPOKE_WITH_THE_SUN) - Call(RemoveNpc, NPC_SELF) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Spiny) = { - IfEq(GB_StoryProgress, STORY_CH6_SPOKE_WITH_THE_SUN) - Call(RemoveNpc, NPC_SELF) - EndIf - Call(SetSelfVar, 13, 1) - Return - End -}; - -NpcData N(NpcData_Lakilester) = { - .id = NPC_Lakilester, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 90, - .init = &N(EVS_NpcInit_Lakilester), - .settings = &N(NpcSettings_Lakilester), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_WorldLakilester_Idle, - .walk = ANIM_WorldLakilester_Idle, - .run = ANIM_WorldLakilester_Idle, - .chase = ANIM_WorldLakilester_Idle, - .anim_4 = ANIM_WorldLakilester_Idle, - .anim_5 = ANIM_WorldLakilester_Idle, - .death = ANIM_WorldLakilester_Idle, - .hit = ANIM_WorldLakilester_Idle, - .anim_8 = ANIM_WorldLakilester_Idle, - .anim_9 = ANIM_WorldLakilester_Idle, - .anim_A = ANIM_WorldLakilester_Idle, - .anim_B = ANIM_WorldLakilester_Idle, - .anim_C = ANIM_WorldLakilester_Idle, - .anim_D = ANIM_WorldLakilester_Idle, - .anim_E = ANIM_WorldLakilester_Idle, - .anim_F = ANIM_WorldLakilester_Idle, - }, -}; - -NpcData N(NpcData_Lakilulu) = { - .id = NPC_Lakilulu, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 90, - .init = &N(EVS_NpcInit_Lakilulu), - .settings = &N(NpcSettings_Lakilester), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_Lakilulu_Idle, - .walk = ANIM_Lakilulu_Idle, - .run = ANIM_Lakilulu_Idle, - .chase = ANIM_Lakilulu_Idle, - .anim_4 = ANIM_Lakilulu_Idle, - .anim_5 = ANIM_Lakilulu_Idle, - .death = ANIM_Lakilulu_Idle, - .hit = ANIM_Lakilulu_Idle, - .anim_8 = ANIM_Lakilulu_Idle, - .anim_9 = ANIM_Lakilulu_Idle, - .anim_A = ANIM_Lakilulu_Idle, - .anim_B = ANIM_Lakilulu_Idle, - .anim_C = ANIM_Lakilulu_Idle, - .anim_D = ANIM_Lakilulu_Idle, - .anim_E = ANIM_Lakilulu_Idle, - .anim_F = ANIM_Lakilulu_Idle, - }, - .tattle = MSG_NpcTattle_Lakilulu, -}; - -NpcData N(NpcData_Lakilulu_Spiny) = { - .id = NPC_Lakilulu_Spiny, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 90, - .init = &N(EVS_NpcInit_Lakilulu_Spiny), - .settings = &N(NpcSettings_Lakilester), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = NO_DROPS, - .animations = { - .idle = ANIM_Lakilulu_Idle, - .walk = ANIM_Lakilulu_Idle, - .run = ANIM_Lakilulu_Idle, - .chase = ANIM_Lakilulu_Idle, - .anim_4 = ANIM_Lakilulu_Idle, - .anim_5 = ANIM_Lakilulu_Idle, - .death = ANIM_Lakilulu_Idle, - .hit = ANIM_Lakilulu_Idle, - .anim_8 = ANIM_Lakilulu_Idle, - .anim_9 = ANIM_Lakilulu_Idle, - .anim_A = ANIM_Lakilulu_Idle, - .anim_B = ANIM_Lakilulu_Idle, - .anim_C = ANIM_Lakilulu_Idle, - .anim_D = ANIM_Lakilulu_Idle, - .anim_E = ANIM_Lakilulu_Idle, - .anim_F = ANIM_Lakilulu_Idle, - }, -}; - -NpcData N(NpcData_Lakitu_01) = { - .id = NPC_Lakitu_01, - .pos = { 335.0f, 90.0f, 45.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 335, 90, 45 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 335, 90, 45 }, - .detectSize = { 250 }, - } - }, - .init = &N(EVS_NpcInit_Lakitu), - .settings = &N(NpcSettings_Lakitu_SpinySpawner), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Lakitu_02) = { - .id = NPC_Lakitu_02, - .pos = { -320.0f, 90.0f, 0.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -320, 90, 0 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -320, 90, 0 }, - .detectSize = { 200 }, - } - }, - .init = &N(EVS_NpcInit_Lakitu), - .settings = &N(NpcSettings_Lakitu_SpinySpawner), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_01) = { - .id = NPC_Spiny_01, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .init = &N(EVS_NpcInit_Spiny), - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_02) = { - .id = NPC_Spiny_02, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .init = &N(EVS_NpcInit_Spiny), - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_03) = { - .id = NPC_Spiny_03, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .init = &N(EVS_NpcInit_Spiny), - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_04) = { - .id = NPC_Spiny_04, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .init = &N(EVS_NpcInit_Spiny), - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_05) = { - .id = NPC_Spiny_05, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .init = &N(EVS_NpcInit_Spiny), - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_06) = { - .id = NPC_Spiny_06, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .init = &N(EVS_NpcInit_Spiny), - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Lakitu_01), 0x1A06, BTL_FLO_STAGE_04), - NPC_GROUP(N(NpcData_Lakitu_02), 0x1A04, BTL_FLO_STAGE_04), - NPC_GROUP(N(NpcData_Spiny_01), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_02), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_03), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_04), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_05), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_06), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Lakilester), 0x1B05, BTL_FLO2_STAGE_01), - NPC_GROUP(N(NpcData_Lakilulu)), - NPC_GROUP(N(NpcData_Lakilulu_Spiny)), - {} -}; diff --git a/src/world/dead/area_flo/flo_13/flo_13_5_new_partner.c b/src/world/dead/area_flo/flo_13/flo_13_5_new_partner.c deleted file mode 100644 index 170584015d7..00000000000 --- a/src/world/dead/area_flo/flo_13/flo_13_5_new_partner.c +++ /dev/null @@ -1,4 +0,0 @@ -#include "flo_13.h" - -#define PARTY_IMAGE "party_pokopi" -#include "world/common/todo/LoadPartyImage.inc.c" diff --git a/src/world/dead/area_flo/flo_14/flo_14.h b/src/world/dead/area_flo/flo_14/flo_14.h deleted file mode 100644 index 18c276846b9..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14.h +++ /dev/null @@ -1,40 +0,0 @@ -// Older version of flo_14 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_14_shape.h" -#include "mapfs/flo_14_hit.h" - -#include "sprite/npc/Bubulb.h" -#include "sprite/npc/Bzzap.h" - -enum { - NPC_BubbleFlower = 0, - NPC_Bzzap = 1, -}; - -enum { - MV_SavedPartnerFlags = MapVar(0), - MV_BubbleCamScript = MapVar(9), - MV_RotAngle_Log_01 = MapVar(10), - MV_RotVelocity_Log_01 = MapVar(11), - MV_RotAngle_Log_02 = MapVar(12), - MV_RotVelocity_Log_02 = MapVar(13), -}; - -#define NAMESPACE dead_flo_14 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_SetupBubbles); -extern EvtScript N(EVS_SetupLogBridges); -extern EvtScript N(EVS_MakeEntities); - -extern EvtScript N(EVS_BlowBigBubble); -extern EvtScript N(EVS_RideBigBubble); - -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_14/flo_14_0_header.c b/src/world/dead/area_flo/flo_14/flo_14_0_header.c deleted file mode 100644 index 2adc496f18c..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_14.h" - -EntryList N(Entrances) = { - [flo_14_ENTRY_0] { 720.0, 0.0, 0.0, 270.0 }, - [flo_14_ENTRY_1] { -720.0, 0.0, 0.0, 90.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_14 }, -}; diff --git a/src/world/dead/area_flo/flo_14/flo_14_1_music.c b/src/world/dead/area_flo/flo_14/flo_14_1_music.c deleted file mode 100644 index 8a64cc9f69d..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14_1_music.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "flo_14.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_14/flo_14_2_main.c b/src/world/dead/area_flo/flo_14/flo_14_2_main.c deleted file mode 100644 index b1aae776cb5..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14_2_main.c +++ /dev/null @@ -1,97 +0,0 @@ -#include "flo_14.h" -#include "effects.h" - -#include "world/common/atomic/TexturePan.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_LEFT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_00_1) = EVT_EXIT_WALK(60, flo_14_ENTRY_0, "flo_00", flo_00_ENTRY_1); -EvtScript N(EVS_ExitWalk_flo_13_0) = EVT_EXIT_WALK(60, flo_14_ENTRY_1, "flo_13", flo_13_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_13_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_00_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o129, .pos = { -500.0, 0.0, -90.0 }}, - { .colliderID = COLLIDER_o137, .pos = { -510.0, 0.0, 0.0 }}, - { .colliderID = COLLIDER_o155, .pos = { -500.0, 0.0, 110.0 }}, - { .colliderID = COLLIDER_o156, .pos = { -250.0, 0.0, -90.0 }}, - { .colliderID = COLLIDER_o140, .pos = { -240.0, 0.0, 0.0 }}, - { .colliderID = COLLIDER_o157, .pos = { -250.0, 0.0, 110.0 }}, - { .colliderID = COLLIDER_o151, .pos = { -50.0, 0.0, 25.0 }}, - { .colliderID = COLLIDER_o152, .pos = { 70.0, 60.0, -95.0 }}, - { .colliderID = COLLIDER_o153, .pos = { 410.0, 60.0, -95.0 }}, - { .colliderID = COLLIDER_o154, .pos = { 550.0, 0.0, 50.0 }}, - { .colliderID = COLLIDER_o158, .pos = { -50.0, 0.0, 110.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - Exec(N(EVS_MakeEntities)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o114, SURFACE_TYPE_SPIKES) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Call(EnableTexPanning, MODEL_o39, TRUE) - Call(EnableTexPanning, MODEL_o41, TRUE) - Call(EnableTexPanning, MODEL_o43, TRUE) - Call(EnableTexPanning, MODEL_o49, TRUE) - Call(EnableTexPanning, MODEL_o51, TRUE) - Call(EnableTexPanning, MODEL_o55, TRUE) - Call(EnableTexPanning, MODEL_o123, TRUE) - Call(EnableTexPanning, MODEL_o125, TRUE) - Call(EnableTexPanning, MODEL_o127, TRUE) - Call(EnableTexPanning, MODEL_o129, TRUE) - Call(EnableTexPanning, MODEL_o131, TRUE) - Call(EnableTexPanning, MODEL_o133, TRUE) - Call(EnableTexPanning, MODEL_o135, TRUE) - Call(EnableTexPanning, MODEL_o40, TRUE) - Call(EnableTexPanning, MODEL_o44, TRUE) - Call(EnableTexPanning, MODEL_o48, TRUE) - Call(EnableTexPanning, MODEL_o52, TRUE) - Call(EnableTexPanning, MODEL_o54, TRUE) - Call(EnableTexPanning, MODEL_o124, TRUE) - Call(EnableTexPanning, MODEL_o126, TRUE) - Call(EnableTexPanning, MODEL_o128, TRUE) - Call(EnableTexPanning, MODEL_o130, TRUE) - Call(EnableTexPanning, MODEL_o132, TRUE) - Call(EnableTexPanning, MODEL_o134, TRUE) - Call(EnableTexPanning, MODEL_o136, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_1) - TEX_PAN_PARAMS_STEP( 140, 0, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 0, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_2) - TEX_PAN_PARAMS_STEP( -200, 0, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 0, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Exec(N(EVS_SetupBubbles)) - Exec(N(EVS_SetupLogBridges)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_14/flo_14_3_bubbles.c b/src/world/dead/area_flo/flo_14/flo_14_3_bubbles.c deleted file mode 100644 index 47dd8ff83ef..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14_3_bubbles.c +++ /dev/null @@ -1,402 +0,0 @@ -#include "flo_14.h" -#include "effects.h" -#include "model.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" -#include "world/area_flo/common/DroppingVine.inc.c" - -s32 N(BlowingBubbles) = FALSE; - -EvtScript N(EVS_BubbleUpdateCamera) = { - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(MakeLerp, LVar1, 48, 15, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(GetPlayerPos, LVar2, LVar3, LVar4) - Call(SetCamTarget, CAM_DEFAULT, LVar2, LVar0, LVar4) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Loop(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(SetCamTarget, CAM_DEFAULT, LVar0, 48, LVar2) - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_TetherParterToPlayer) = { - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_GRAVITY, FALSE) - Loop(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Add(LVar1, 20) - Add(LVar2, -5) - Call(SetNpcPos, NPC_PARTNER, LVar0, LVar1, LVar2) - Wait(1) - EndLoop - Return - End -}; - -API_CALLABLE(N(SavePartnerFlags)) { - if (gPlayerData.curPartner == PARTNER_NONE) { - script->varTable[14] = FALSE; - return ApiStatus_DONE2; - } - - script->varTable[14] = TRUE; - evt_set_variable(NULL, MV_SavedPartnerFlags, get_npc_unsafe(NPC_PARTNER)->flags); - return ApiStatus_DONE2; -} - -API_CALLABLE(N(RestorePartnerFlags)) { - get_npc_unsafe(NPC_PARTNER)->flags = evt_get_variable(NULL, MV_SavedPartnerFlags); - return ApiStatus_DONE2; -} - -API_CALLABLE(N(UpdateBubbleSoundPos)) { - Bytecode* args = script->ptrReadPos; - - script->functionTemp[0] = evt_get_variable(script, *args++); - script->functionTemp[1] = evt_get_variable(script, *args++); - script->functionTemp[2] = evt_get_variable(script, *args++); - sfx_adjust_env_sound_pos(SOUND_LRAW_BUBBLE_DRIFT, SOUND_SPACE_DEFAULT, script->functionTemp[0], script->functionTemp[1], script->functionTemp[2]); - return ApiStatus_DONE2; -} - -Vec3f N(BubbleFlightPath)[] = { - { 531.0, 75.0, 81.0 }, - { 481.0, 80.0, 81.0 }, - { 431.0, 75.0, 81.0 }, - { 381.0, 70.0, 81.0 }, - { 331.0, 75.0, 81.0 }, - { 281.0, 80.0, 81.0 }, - { 231.0, 75.0, 81.0 }, - { 181.0, 70.0, 81.0 }, - { 131.0, 75.0, 81.0 }, - { 81.0, 80.0, 81.0 }, - { 31.0, 75.0, 81.0 }, - { -19.0, 70.0, 81.0 }, - { -69.0, 75.0, 81.0 }, -}; - -EvtScript N(EVS_BubbleFollowPath) = { - Wait(20) - Call(PlaySound, SOUND_LOOP_BUBBLE_DRIFT) - Call(LoadPath, 165, Ref(N(BubbleFlightPath)), ARRAY_COUNT(N(BubbleFlightPath)), EASING_COS_IN_OUT) - Label(0) - Call(GetNextPathPos) - Call(TranslateModel, MODEL_o167, LVar1, LVar2, LVar3) - Add(LVar2, -27) - Add(LVar3, -10) - Call(SetPlayerPos, LVar1, LVar2, LVar3) - Call(N(UpdateBubbleSoundPos), LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 1) - Goto(0) - EndIf - Call(StopSound, SOUND_LOOP_BUBBLE_DRIFT) - Return - End -}; - -EvtScript N(EVS_RideBigBubble) = { - Call(IsPlayerWithin, 531, 81, 30, LVar0) - IfEq(LVar0, 0) - Return - EndIf - Call(DisablePlayerInput, TRUE) - Call(GetPartnerInUse, LVar0) - IfNe(LVar0, PARTNER_NONE) - Call(InterruptUsePartner) - Wait(20) - EndIf - Call(DisablePlayerPhysics, TRUE) - Call(DisablePartnerAI, 0) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_GRAVITY, FALSE) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(GetModelCenter, MODEL_o167) - Thread - Add(LVar2, -10) - Call(SetPlayerJumpscale, Float(0.2)) - Call(PlayerJump, 531, 48, LVar2, 10) - Call(SetPlayerActionState, ACTION_STATE_LAND) - EndThread - Thread - Wait(5) - Add(LVar2, -15) - Call(SetNpcJumpscale, NPC_PARTNER, Float(0.2)) - Call(NpcJump0, NPC_PARTNER, 531, 68, LVar2, 10) - EndThread - ExecGetTID(N(EVS_BubbleUpdateCamera), MV_BubbleCamScript) - Wait(15) - Call(N(SavePartnerFlags)) - IfTrue(LVarE) - ExecGetTID(N(EVS_TetherParterToPlayer), LVarE) - EndIf - ExecWait(N(EVS_BubbleFollowPath)) - IfTrue(LVarE) - KillThread(LVarE) - Call(N(RestorePartnerFlags)) - EndIf - Call(GetModelCenter, MODEL_o167) - PlayEffect(EFFECT_FIREWORK, 0, LVar0, LVar1, LVar2, 2, 0) - Call(PlaySoundAt, SOUND_BUBBLE_BURST, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) - Call(ClearPartnerMoveHistory, NPC_PARTNER) - Call(EnableModel, MODEL_o167, FALSE) - Set(AF_FLO_BigBubbleReady, FALSE) - KillThread(MV_BubbleCamScript) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_GRAVITY, TRUE) - Call(EnablePartnerAI) - Call(DisablePlayerPhysics, FALSE) - Call(DisablePlayerInput, FALSE) - Unbind - Return - End -}; - -EvtScript N(EVS_BlowBigBubble) = { - Call(PlaySoundAt, SOUND_FLO_BLOW_BUBBLE, SOUND_SPACE_DEFAULT, 591, 55, 121) - Call(EnableModel, MODEL_o167, TRUE) - SetF(LVar2, Float(1.0)) - SetF(LVar4, Float(0.0)) - SetF(LVar5, Float(0.0)) - SetF(LVar6, Float(0.0)) - Set(LVar7, -30) - Set(LVar8, 20) - DivF(LVar7, Float(90.0)) - DivF(LVar8, Float(90.0)) - Set(LVar9, 180) - Loop(LVar9) - Call(TranslateModel, MODEL_o167, 591, 55, 121) - SetF(LVar3, LVar2) - DivF(LVar3, 10) - Call(ScaleModel, MODEL_o167, LVar3, LVar3, LVar3) - Call(TranslateModel, MODEL_o167, LVar4, LVar5, LVar6) - AddF(LVar2, Float(0.05)) - IfGt(LVar9, 90) - AddF(LVar4, LVar7) - AddF(LVar5, LVar8) - EndIf - Wait(1) - EndLoop - Set(LVar7, -30) - Set(LVar8, -40) - DivF(LVar7, Float(60.0)) - DivF(LVar8, Float(60.0)) - Loop(60) - Call(TranslateModel, MODEL_o167, 591, 55, 121) - Call(ScaleModel, MODEL_o167, LVar3, LVar3, LVar3) - Call(TranslateModel, MODEL_o167, LVar4, LVar5, LVar6) - AddF(LVar4, LVar7) - AddF(LVar6, LVar8) - Wait(1) - EndLoop - Set(AF_FLO_BlowingBigBubble, FALSE) - Set(AF_FLO_BigBubbleReady, TRUE) - Return - End -}; - -f32 N(BubblePhase) = 0.0f; - -void N(gfx_build_big_bubble)(void) { - Matrix4f matrix; - Vtx* src; - Vtx* dest; - s32 copyCount; - s32 new_var; - - guMtxIdentF(matrix); - - matrix[0][0] = (sin_rad(N(BubblePhase) / 11.0f) * 0.04) + 0.98; - matrix[0][1] = (sin_rad(N(BubblePhase) / 12.0f) * 0.04); - matrix[0][2] = (cos_rad(N(BubblePhase) / 13.0f) * 0.04); - - matrix[1][1] = (sin_rad(N(BubblePhase) / 7.0f + 1.0f) * 0.04) + 0.98; - matrix[1][0] = (sin_rad(N(BubblePhase) / 14.0f) * 0.04); - matrix[1][2] = (cos_rad(N(BubblePhase) / 15.0f) * 0.04); - - matrix[2][2] = (sin_rad(N(BubblePhase) * 0.25f + 2.0f) * 0.04) + 0.98; - matrix[2][0] = (sin_rad(N(BubblePhase) * 0.0625f) * 0.04); - matrix[2][1] = (cos_rad(N(BubblePhase) / 17.0f) * 0.04); - - guMtxF2L(matrix, &gDisplayContext->matrixStack[gMatrixListPos]); - mdl_get_copied_vertices(VTX_COPY_0, &src, &dest, ©Count); - - new_var = 0; - while (new_var); // TODO required to match - - gSPMatrix(gMainGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], - G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - gSPDisplayList(gMainGfxPos++, mdl_get_copied_gfx(VTX_COPY_0)); - - N(BubblePhase) += 1.0f; -} - -s32 N(FlowerPhase) = 90; - -void N(gfx_build_bubble_flower)(void) { - s32 i; - Vtx* verts; - Vtx* copied; - s32 numCopied; - f32 openedScale; // controls how open the flower is - f32 lengthScale; // controls longitudinal pulsing - - mdl_get_copied_vertices(VTX_COPY_1, &verts, &copied, &numCopied); - - for (i = 0; i < numCopied; i++) { - Vtx* src = &verts[i]; - Vtx* copy = &copied[i]; - - if (src->v.ob[0] <= 600) { - openedScale = 0.7 + (sin_rad((N(FlowerPhase) / 180.0f) * PI_D) * 0.3); - lengthScale = 0.2 - (sin_rad((N(FlowerPhase) / 180.0f) * PI_D) * 0.2); - copy->v.ob[0] = ((src->v.ob[0] - 616) * openedScale) + 616.0f + (lengthScale * -48.0f); - copy->v.ob[1] = ((src->v.ob[1] - 44) * openedScale) + 44.0f + (lengthScale * 25.0f); - copy->v.ob[2] = ((src->v.ob[2] - 113) * openedScale) + 113.0f + (lengthScale * -87.0f); - } - } - - gSPDisplayList(gMainGfxPos++, mdl_get_copied_gfx(VTX_COPY_1)); - - if (evt_get_variable(NULL, AF_FLO_BlowingBigBubble)) { - if (N(FlowerPhase) > 90) { - N(FlowerPhase) -= 360; - } - if (N(FlowerPhase) >= -90) { - N(FlowerPhase) += 5; - } else { - N(FlowerPhase) += 20; - } - if (N(FlowerPhase) >= 90) { - N(FlowerPhase) = 90; - } - } else { - if (N(FlowerPhase) > 140 && N(FlowerPhase) < 260) { - N(BlowingBubbles) = TRUE; - } else { - N(BlowingBubbles) = FALSE; - } - N(FlowerPhase) += 5; - } - - if (N(FlowerPhase) >= 360) { - N(FlowerPhase) -= 360; - } -} - -EvtScript N(EVS_ManageBlownBubble) = { - SetGroup(EVT_GROUP_00) - Set(LVarF, LVar0) - Label(0) - IfEq(AF_FLO_PauseBlowingBubbles, TRUE) - Wait(10) - Goto(0) - EndIf - UseBuf(Ref(N(BlowingBubbles))) - BufRead1(LVar0) - IfEq(LVar0, FALSE) - Call(RandInt, 10, LVar0) - Add(LVar0, 1) - Wait(LVar0) - Goto(0) - EndIf - Call(EnableModel, LVarF, TRUE) - Call(RandInt, 4, LVar0) - AddF(LVar0, Float(4.0)) - MulF(LVar0, Float(-1.0)) - SetF(LVar1, Float(2.0)) - SetF(LVar2, LVar0) - DivF(LVar2, Float(10.0)) - SetF(LVar3, Float(0.4)) - SetF(LVar4, Float(591.0)) - SetF(LVar5, Float(60.0)) - SetF(LVar6, Float(121.0)) - Call(RandInt, 3, LVar7) - AddF(LVar7, Float(3.0)) - MulF(LVar7, Float(0.04)) - SetF(LVar9, LVar7) - DivF(LVar9, Float(5.0)) - Call(RandInt, 50, LVar8) - Add(LVar8, 50) - Loop(LVar8) - SetF(LVarE, LVar2) - SubF(LVarE, LVar0) - MulF(LVarE, Float(0.046)) - AddF(LVar0, LVarE) - SetF(LVarE, LVar3) - SubF(LVarE, LVar1) - MulF(LVarE, Float(0.046)) - AddF(LVar1, LVarE) - AddF(LVar4, LVar0) - AddF(LVar5, LVar1) - SetF(LVarE, LVar7) - SubF(LVarE, LVar9) - MulF(LVarE, Float(0.203)) - AddF(LVar9, LVarE) - Call(TranslateModel, LVarF, LVar4, LVar5, LVar6) - Call(ScaleModel, LVarF, LVar9, LVar9, LVar9) - Wait(1) - EndLoop - Call(EnableModel, LVarF, FALSE) - Goto(0) - Return - End -}; - -EvtScript N(EVS_SetupBubbles) = { - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o129, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o155, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o156, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o157, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o158, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( -730, -130, -470, -70, 0) - EVT_FLOWER_SPAWN_REGION( -730, 70, -470, 140, 0) - EVT_FLOWER_SPAWN_REGION( -280, 130, -110, -70, 0) - EVT_FLOWER_SPAWN_REGION( -280, 70, -10, 140, 0) - EVT_DROPPING_VINE(ITEM_STINKY_HERB, MODEL_o92, MODEL_o93, MODEL_o94, MODEL_o95) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o82, MODEL_o83, MODEL_o84, MODEL_o85) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o78, MODEL_o79, MODEL_o80, MODEL_o81) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o88, MODEL_o89, MODEL_o90, MODEL_o91) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o113, COLLIDER_FLAGS_UPPER_MASK) - Call(CloneModel, MODEL_o169, CLONED_MODEL(1)) - Call(CloneModel, MODEL_o169, CLONED_MODEL(2)) - Call(CloneModel, MODEL_o169, CLONED_MODEL(3)) - Call(CloneModel, MODEL_o169, CLONED_MODEL(4)) - Call(CloneModel, MODEL_o169, CLONED_MODEL(5)) - Call(EnableModel, MODEL_o167, FALSE) - Call(EnableModel, MODEL_o169, FALSE) - Call(EnableModel, CLONED_MODEL(1), FALSE) - Call(EnableModel, CLONED_MODEL(2), FALSE) - Call(EnableModel, CLONED_MODEL(3), FALSE) - Call(EnableModel, CLONED_MODEL(4), FALSE) - Call(EnableModel, CLONED_MODEL(5), FALSE) - Set(LVar0, CLONED_MODEL(1)) - Exec(N(EVS_ManageBlownBubble)) - Set(LVar0, CLONED_MODEL(2)) - Exec(N(EVS_ManageBlownBubble)) - Set(LVar0, CLONED_MODEL(3)) - Exec(N(EVS_ManageBlownBubble)) - Set(LVar0, CLONED_MODEL(4)) - Exec(N(EVS_ManageBlownBubble)) - Set(LVar0, CLONED_MODEL(5)) - Exec(N(EVS_ManageBlownBubble)) - Call(MakeLocalVertexCopy, VTX_COPY_0, MODEL_o167, TRUE) - Call(SetCustomGfxBuilders, CUSTOM_GFX_1, Ref(N(gfx_build_big_bubble)), NULL) - Call(SetModelCustomGfx, MODEL_o167, CUSTOM_GFX_1, -1) - Call(SetModelCustomGfx, CLONED_MODEL(1), CUSTOM_GFX_1, -1) - Call(SetModelCustomGfx, CLONED_MODEL(2), CUSTOM_GFX_1, -1) - Call(SetModelCustomGfx, CLONED_MODEL(3), CUSTOM_GFX_1, -1) - Call(SetModelCustomGfx, CLONED_MODEL(4), CUSTOM_GFX_1, -1) - Call(SetModelCustomGfx, CLONED_MODEL(5), CUSTOM_GFX_1, -1) - Call(MakeLocalVertexCopy, VTX_COPY_1, MODEL_o57, TRUE) - Call(SetCustomGfxBuilders, CUSTOM_GFX_2, Ref(N(gfx_build_bubble_flower)), NULL) - Call(SetModelCustomGfx, MODEL_o57, CUSTOM_GFX_2, -1) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_14/flo_14_4_npc.c b/src/world/dead/area_flo/flo_14/flo_14_4_npc.c deleted file mode 100644 index 5c718ac1a08..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14_4_npc.c +++ /dev/null @@ -1,120 +0,0 @@ -#include "flo_14.h" - -#include "world/common/enemy/Bzzap.inc.c" - -#include "world/common/npc/Bubulb.h" - -NpcSettings N(NpcSettings_BubbleFlower) = { - .height = 56, - .radius = 40, - .level = ACTOR_LEVEL_NONE, -}; - -#include "world/common/npc/Dummy.inc.c" - -#include "world/common/complete/NormalItemChoice.inc.c" - -s32 N(KeyList)[] = { - ITEM_BUBBLE_BERRY, - ITEM_NONE -}; - -EvtScript N(EVS_NpcInteract_BubbleFlower) = { - IfEq(AF_FLO_BigBubbleReady, TRUE) - Set(AF_FLO_PauseBlowingBubbles, TRUE) - Call(SpeakToPlayer, NPC_SELF, -1, -1, 0, MSG_CH6_0063) - Set(AF_FLO_PauseBlowingBubbles, FALSE) - Return - EndIf - Set(AF_FLO_PauseBlowingBubbles, TRUE) - IfEq(GF_FLO14_GaveBerryToBubblePlant, FALSE) - Call(SpeakToPlayer, NPC_SELF, -1, -1, 0, MSG_CH6_005F) - Else - Call(SpeakToPlayer, NPC_SELF, -1, -1, 0, MSG_CH6_0060) - EndIf - Call(FindItem, ITEM_BUBBLE_BERRY, LVar0) - IfNe(LVar0, -1) - EVT_CHOOSE_CONSUMABLE_FROM(N(KeyList), 0) - IfEq(LVar0, -1) - Call(SpeakToPlayer, NPC_SELF, -1, -1, 0, MSG_CH6_0064) - Else - Call(SpeakToPlayer, NPC_SELF, -1, -1, 0, MSG_CH6_0061) - Set(AF_FLO_BlowingBigBubble, TRUE) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(PlayerMoveTo, 555, 110, 20) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(InterpPlayerYaw, 90, 0) - Call(func_802CF56C, 2) - Wait(5) - Call(AdjustCam, CAM_DEFAULT, Float(1.0), 0, 350, Float(17.0), Float(-6.0)) - Exec(N(EVS_BlowBigBubble)) - Call(SpeakToPlayer, NPC_SELF, -1, -1, 0, MSG_CH6_0062) - Thread - Wait(40) - Call(InterpPlayerYaw, 315, 0) - EndThread - Label(10) - IfEq(AF_FLO_BigBubbleReady, FALSE) - Wait(1) - Goto(10) - EndIf - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Call(SpeakToPlayer, NPC_SELF, -1, -1, 5, MSG_CH6_0063) - Set(GF_FLO14_GaveBerryToBubblePlant, TRUE) - BindTrigger(Ref(N(EVS_RideBigBubble)), TRIGGER_FLOOR_PRESS_A, COLLIDER_o154, 1, 0) - EndIf - EndIf - Set(AF_FLO_PauseBlowingBubbles, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcInit_BubbleFlower) = { - Set(AF_FLO_BlowingBigBubble, FALSE) - Set(AF_FLO_BigBubbleReady, FALSE) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_BubbleFlower))) - Return - End -}; - -// uses a dummy bubulb for collision -NpcData N(NpcData_BubbleFlower) = { - .id = NPC_BubbleFlower, - .pos = { 617.0f, 0.0f, 108.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_BubbleFlower), - .settings = &N(NpcSettings_BubbleFlower), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_HAS_NO_SPRITE, - .drops = NO_DROPS, - .animations = BUBULB_PINK_ANIMS, - .tattle = MSG_NpcTattle_BubblePlant, -}; - -NpcData N(NpcData_Bzzap) = { - .id = NPC_Bzzap, - .pos = { -175.0f, 55.0f, 15.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -175, 55, 15 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -175, 55, 15 }, - .detectSize = { 200 }, - } - }, - .settings = &N(NpcSettings_Bzzap), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = BZZAP_DROPS, - .animations = BZZAP_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_BubbleFlower)), - NPC_GROUP(N(NpcData_Bzzap), 0x1A19, BTL_FLO_STAGE_00), - {} -}; diff --git a/src/world/dead/area_flo/flo_14/flo_14_5_entity.c b/src/world/dead/area_flo/flo_14/flo_14_5_entity.c deleted file mode 100644 index 2e6362ee384..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14_5_entity.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "flo_14.h" - -EvtScript N(EVS_MakeEntities) = { - Call(MakeItemEntity, ITEM_STAR_PIECE, 675, 60, -100, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO14_Item_StarPiece) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_14/flo_14_6_logs.c b/src/world/dead/area_flo/flo_14/flo_14_6_logs.c deleted file mode 100644 index a0125ed5df2..00000000000 --- a/src/world/dead/area_flo/flo_14/flo_14_6_logs.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "flo_14.h" - -#include "world/area_flo/common/LogBridge.inc.c" - -EvtScript N(EVS_SetupLogBridges) = { - EVT_MAKE_LOG_BRIDGE(COLLIDER_o162, COLLIDER_o166, MODEL_o15, MODEL_o16, MV_RotAngle_Log_01, MV_RotVelocity_Log_01) - EVT_MAKE_LOG_BRIDGE(COLLIDER_o161, COLLIDER_o167, MODEL_o17, MODEL_o18, MV_RotAngle_Log_02, MV_RotVelocity_Log_02) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_15/flo_15.h b/src/world/dead/area_flo/flo_15/flo_15.h deleted file mode 100644 index afa24deda11..00000000000 --- a/src/world/dead/area_flo/flo_15/flo_15.h +++ /dev/null @@ -1,26 +0,0 @@ -// Older version of flo_15 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_15_shape.h" -#include "mapfs/flo_15_hit.h" - -#include "sprite/npc/Sun.h" - -enum { - NPC_Sun_01 = 10, - NPC_Sun_02 = 11, -}; - -#define NAMESPACE dead_flo_15 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_MakeEntities); -extern EvtScript N(EVS_MonitorFallingStairs); -extern EvtScript N(EVS_Scene_SunReturns); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_15/flo_15_0_header.c b/src/world/dead/area_flo/flo_15/flo_15_0_header.c deleted file mode 100644 index 002e99fae7d..00000000000 --- a/src/world/dead/area_flo/flo_15/flo_15_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_15.h" - -EntryList N(Entrances) = { - [flo_15_ENTRY_0] { 320.0, 0.0, 0.0, 270.0 }, - [flo_15_ENTRY_1] { -170.0, 0.0, 55.0, 0.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_15 }, -}; diff --git a/src/world/dead/area_flo/flo_15/flo_15_1_music.c b/src/world/dead/area_flo/flo_15/flo_15_1_music.c deleted file mode 100644 index 4d1969911b7..00000000000 --- a/src/world/dead/area_flo/flo_15/flo_15_1_music.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "flo_15.h" - -EvtScript N(EVS_SetupMusic) = { - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_15_ENTRY_1) - Call(SetMusicTrack, 0, SONG_SUNSHINE_RETURNS, 0, 8) - Else - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_SUN_TOWER_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_SUN_TOWER_SUNNY, 0, 8) - EndSwitch - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_15/flo_15_2_main.c b/src/world/dead/area_flo/flo_15/flo_15_2_main.c deleted file mode 100644 index 70c0af8b2c9..00000000000 --- a/src/world/dead/area_flo/flo_15/flo_15_2_main.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "flo_15.h" - -EvtScript N(EVS_ExitWalk_flo_13_1) = EVT_EXIT_WALK(60, flo_15_ENTRY_0, "flo_13", flo_13_ENTRY_1); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_13_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_15_ENTRY_1) - Exec(N(EVS_Scene_SunReturns)) - Else - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - EndIf - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_g58, COLLIDER_FLAGS_UPPER_MASK) - Exec(N(EVS_MonitorFallingStairs)) - ExecWait(N(EVS_SetupMusic)) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_15/flo_15_3_npc.c b/src/world/dead/area_flo/flo_15/flo_15_3_npc.c deleted file mode 100644 index 6c955de56cc..00000000000 --- a/src/world/dead/area_flo/flo_15/flo_15_3_npc.c +++ /dev/null @@ -1,229 +0,0 @@ -#include "flo_15.h" -#include "sprite/player.h" - -#include "world/common/npc/Sun.inc.c" - -EvtScript N(EVS_Sun_AnimateBobbing) = { - IfLt(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Set(LVar3, 7) - Set(LVar4, 5) - Else - Set(LVar3, 15) - Set(LVar4, 1) - EndIf - Loop(0) - Set(LVar5, LVar3) - Loop(LVar5) - Call(GetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Add(LVar1, 1) - Call(SetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Call(SetNpcPos, NPC_Sun_02, LVar0, LVar1, LVar2) - Wait(LVar4) - EndLoop - Set(LVar5, LVar3) - Loop(LVar5) - Call(GetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Add(LVar1, -1) - Call(SetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Call(SetNpcPos, NPC_Sun_02, LVar0, LVar1, LVar2) - Wait(LVar4) - EndLoop - EndLoop - Return - End -}; - -EvtScript N(EVS_Scene_SunReturns) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(SetNpcPos, NPC_Sun_01, 0, 270, 0) - Call(SetNpcPos, NPC_Sun_02, NPC_DISPOSE_LOCATION) - Wait(1) - Call(GetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 1050) - Call(SetCamPitch, CAM_DEFAULT, Float(10.0), Float(4.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-10.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(6.5)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_Sun_01, ANIM_Sun_TalkJoy, ANIM_Sun_TalkJoy, SPEECH_FLAG_200 | 5, MSG_CH6_00C3) - Call(SetNpcAnimation, NPC_Sun_01, ANIM_Sun_TalkJoy) - Thread - Call(SetCamDistance, CAM_DEFAULT, 1000) - Call(SetCamSpeed, CAM_DEFAULT, Float(5.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - EndThread - Wait(15) - Call(SetNpcJumpscale, NPC_Sun_01, Float(0.0)) - Call(GetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Add(LVar1, 400) - Call(NpcJump0, NPC_Sun_01, LVar0, LVar1, LVar2, 40) - Call(GotoMap, Ref("flo_00"), flo_00_ENTRY_9) - Wait(70) - Return - End -}; - -EvtScript N(EVS_NpcAux_Sun_02) = { - Call(SetNpcRotationPivot, NPC_Sun_02, 48) - Loop(0) - Call(MakeLerp, -30, 30, 20, EASING_SIN_OUT) - Loop(0) - Call(UpdateLerp) - Call(SetNpcRotation, NPC_Sun_02, 0, 0, LVar0) - Call(GetNpcPos, NPC_Sun_01, LVar2, LVar3, LVar4) - Call(SetNpcPos, NPC_Sun_02, LVar2, LVar3, LVar4) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(MakeLerp, 30, -30, 20, EASING_SIN_OUT) - Loop(0) - Call(UpdateLerp) - Call(SetNpcRotation, NPC_Sun_02, 0, 0, LVar0) - Call(GetNpcPos, NPC_Sun_01, LVar2, LVar3, LVar4) - Call(SetNpcPos, NPC_Sun_02, LVar2, LVar3, LVar4) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndLoop - Return - End -}; - -EvtScript N(EVS_Sun_DescendFromSky) = { - Loop(0) - Wait(1) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfGt(LVar1, 220) - BreakLoop - EndIf - EndLoop - Thread - Wait(15) - Call(PlayerFaceNpc, NPC_Sun_01, FALSE) - EndThread - Call(SetNpcJumpscale, NPC_Sun_01, Float(0.0)) - Call(GetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Sub(LVar1, 400) - Call(NpcJump0, NPC_Sun_01, LVar0, 275, LVar2, 30) - ExecGetTID(N(EVS_Sun_AnimateBobbing), LVar9) - Loop(0) - Wait(1) - IfEq(AF_FLO_MetTheSun, TRUE) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerInput, TRUE) - Wait(10) - KillThread(LVar9) - Call(SetNpcFlagBits, NPC_Sun_01, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(GetNpcPos, NPC_Sun_01, LVar0, LVar1, LVar2) - Call(NpcJump0, NPC_Sun_01, LVar0, 450, LVar2, 30) - Call(DisablePlayerInput, FALSE) - Unbind - Return - End -}; - -EvtScript N(EVS_NpcInteract_Sun_01) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_SPOKE_WITH_THE_SUN) - Call(SpeakToPlayer, NPC_Sun_01, ANIM_Sun_TalkSad, ANIM_Sun_Idle, 517, MSG_CH6_009A) - Call(SetPlayerAnimation, ANIM_Mario1_Thinking) - Wait(20) - Call(SetPlayerAnimation, ANIM_MarioW2_SpeakUp) - Wait(20) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(SpeakToPlayer, NPC_Sun_01, ANIM_Sun_TalkSad, ANIM_Sun_Idle, 517, MSG_CH6_009B) - Set(GB_StoryProgress, STORY_CH6_SPOKE_WITH_THE_SUN) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SpeakToPlayer, NPC_Sun_01, ANIM_Sun_TalkSad, ANIM_Sun_Idle, 517, MSG_CH6_009C) - CaseLt(STORY_CH6_STAR_SPIRIT_RESCUED) - IfEq(GF_FLO15_SunThankedPlayer, FALSE) - Call(SpeakToPlayer, NPC_Sun_01, ANIM_Sun_TalkSad, ANIM_Sun_Idle, 517, MSG_CH6_009D) - Set(GF_FLO15_SunThankedPlayer, TRUE) - Else - Call(SpeakToPlayer, NPC_Sun_01, ANIM_Sun_TalkSad, ANIM_Sun_Idle, 517, MSG_CH6_009E) - EndIf - CaseDefault - Call(SpeakToPlayer, NPC_Sun_01, ANIM_Sun_TalkSad, ANIM_Sun_Idle, 517, MSG_CH6_009F) - EndSwitch - Set(AF_FLO_MetTheSun, TRUE) - Return - End -}; - -EvtScript N(EVS_NpcInit_Sun_01) = { - Call(SetNpcCollisionSize, NPC_Sun_01, 64, 40) - Call(EnableNpcShadow, NPC_Sun_01, FALSE) - IfLt(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetNpcPos, NPC_Sun_01, 0, 270, 0) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Sun_01))) - Exec(N(EVS_Sun_AnimateBobbing)) - Else - Call(SetNpcPos, NPC_Sun_01, 0, 450, 0) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Sun_01))) - Set(AF_FLO_MetTheSun, FALSE) - Exec(N(EVS_Sun_DescendFromSky)) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Sun_02) = { - Call(EnableNpcShadow, NPC_Sun_02, FALSE) - Call(SetNpcAnimation, NPC_Sun_02, ANIM_Sun_FireIdle) - Call(SetNpcPaletteSwapMode, NPC_Sun_01, NPC_PAL_ADJUST_BLEND_PALETTES_VARYING_INTERVALS) - Call(SetNpcPaletteSwapMode, NPC_Sun_02, NPC_PAL_ADJUST_BLEND_PALETTES_VARYING_INTERVALS) - Call(SetNpcPaletteSwapping, NPC_Sun_01, 0, 1, 5, 5, 13, 5, 0, 0) - Call(SetNpcPaletteSwapping, NPC_Sun_02, 0, 1, 5, 5, 13, 5, 0, 0) - IfLt(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetNpcPos, NPC_Sun_02, 0, 270, -5) - Else - Call(SetNpcPos, NPC_Sun_02, 0, 450, -5) - Call(BindNpcAux, NPC_SELF, Ref(N(EVS_NpcAux_Sun_02))) - EndIf - Return - End -}; - -NpcData N(NpcData_Sun)[] = { - { - .id = NPC_Sun_01, - .pos = { 0.0f, 250.0f, 0.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Sun_01), - .settings = &N(NpcSettings_Sun), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = SUN_ANIMS, - .tattle = MSG_NpcTattle_TheSun, - }, - { - .id = NPC_Sun_02, - .pos = { 0.0f, 250.0f, 0.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Sun_02), - .settings = &N(NpcSettings_Sun), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_8000, - .drops = NO_DROPS, - .animations = SUN_ANIMS, - .tattle = MSG_NpcTattle_TheSun, - }, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Sun)), - {} -}; diff --git a/src/world/dead/area_flo/flo_15/flo_15_4_entity.c b/src/world/dead/area_flo/flo_15/flo_15_4_entity.c deleted file mode 100644 index 33cf79abfae..00000000000 --- a/src/world/dead/area_flo/flo_15/flo_15_4_entity.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "flo_15.h" -#include "entity.h" - -EvtScript N(EVS_OnBlast_Rock) = { - Set(GF_FLO15_BombedRock, TRUE) - Return - End -}; - -EvtScript N(EVS_MakeEntities) = { - IfEq(GF_FLO15_BombedRock, FALSE) - Call(MakeEntity, Ref(Entity_BombableRock), -180, 0, -18, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBlast_Rock))) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_15/flo_15_5_stairs.c b/src/world/dead/area_flo/flo_15/flo_15_5_stairs.c deleted file mode 100644 index 1a6e165e3b2..00000000000 --- a/src/world/dead/area_flo/flo_15/flo_15_5_stairs.c +++ /dev/null @@ -1,72 +0,0 @@ -#include "flo_15.h" -#include "effects.h" - -s32 N(ShakeCamParams)[] = { - 10, Float(0.6), - 13, Float(0.75), - 16, Float(0.9), - 19, Float(1.05), - 22, Float(1.2), - 25, Float(1.05), - 24, Float(0.9), - 25, Float(0.75), - 24, Float(0.6), - 10, Float(1.7), -}; - -EvtScript N(EVS_MonitorFallingStairs) = { - IfEq(GF_FLO15_BombedRock, FALSE) - Label(0) - IfEq(GF_FLO15_BombedRock, FALSE) - Wait(1) - Goto(0) - EndIf - Call(DisablePlayerInput, TRUE) - Thread - UseBuf(Ref(N(ShakeCamParams))) - Loop(10) - BufRead2(LVar1, LVar2) - Call(ShakeCam, CAM_DEFAULT, 0, LVar1, LVar2) - EndLoop - EndThread - Call(UseSettingsFrom, CAM_DEFAULT, -170, 0, 35) - Call(SetPanTarget, CAM_DEFAULT, -170, 0, 35) - Call(SetCamDistance, CAM_DEFAULT, 600) - Call(SetCamPitch, CAM_DEFAULT, Float(25.0), Float(-9.0)) - Call(SetCamPosA, CAM_DEFAULT, Float(-50.0), Float(25.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.5)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Thread - Wait(100) - PlayEffect(EFFECT_LANDING_DUST, 4, -180, 0, -15, 0) - PlayEffect(EFFECT_LANDING_DUST, 4, -190, 0, -35, 0) - EndThread - Thread - Loop(6) - Call(PlaySoundAtCollider, COLLIDER_o175, SOUND_FLO_STAIRS_LOWERING, SOUND_SPACE_DEFAULT) - Wait(20) - EndLoop - EndThread - Call(MakeLerp, 0, -50, 120, EASING_CUBIC_IN) - Loop(0) - Call(UpdateLerp) - Call(TranslateGroup, MODEL_g20, 0, LVar0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_g54, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_g58, COLLIDER_FLAGS_UPPER_MASK) - Wait(15) - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - Call(DisablePlayerInput, FALSE) - Else - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_g54, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_g58, COLLIDER_FLAGS_UPPER_MASK) - Call(TranslateGroup, MODEL_g20, 0, -50, 0) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_16/flo_16.h b/src/world/dead/area_flo/flo_16/flo_16.h deleted file mode 100644 index a1ff5e62983..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16.h +++ /dev/null @@ -1,31 +0,0 @@ -// Older version of flo_16 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_16_shape.h" -#include "mapfs/flo_16_hit.h" - -#include "sprite/npc/RuffPuff.h" - -enum { - NPC_RuffPuff_01 = 0, - NPC_RuffPuff_02 = 1, -}; - -enum { - MV_SuperBlock = MapVar(0), -}; - -#define NAMESPACE dead_flo_16 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_SetupVines); -extern EvtScript N(EVS_SetupPillarPuzzle); -extern EvtScript N(EVS_MakeEntities); - -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_16/flo_16_0_header.c b/src/world/dead/area_flo/flo_16/flo_16_0_header.c deleted file mode 100644 index 043f97c0b05..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_16.h" - -EntryList N(Entrances) = { - [flo_16_ENTRY_0] { -720.0, 0.0, 0.0, 90.0 }, - [flo_16_ENTRY_1] { 710.0, 100.0, 0.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_16 }, -}; diff --git a/src/world/dead/area_flo/flo_16/flo_16_1_music.c b/src/world/dead/area_flo/flo_16/flo_16_1_music.c deleted file mode 100644 index 0ddb4dff52f..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16_1_music.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "flo_16.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_16/flo_16_2_main.c b/src/world/dead/area_flo/flo_16/flo_16_2_main.c deleted file mode 100644 index c4e311c5fd9..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16_2_main.c +++ /dev/null @@ -1,74 +0,0 @@ -#include "flo_16.h" -#include "effects.h" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_00_4) = EVT_EXIT_WALK(60, flo_16_ENTRY_0, "flo_00", flo_00_ENTRY_4); -EvtScript N(EVS_ExitWalk_flo_17_0) = EVT_EXIT_WALK(60, flo_16_ENTRY_1, "flo_17", flo_17_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_00_4)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_17_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o190, .pos = { -310.0, 0.0, 0.0 }}, - { .colliderID = COLLIDER_o191, .pos = { 305.0, 100.0, 0.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Exec(N(EVS_SetupVines)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o174, SURFACE_TYPE_SPIKES) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Call(EnableTexPanning, MODEL_o59, TRUE) - Call(EnableTexPanning, MODEL_o142, TRUE) - Call(EnableTexPanning, MODEL_o58, TRUE) - Call(EnableTexPanning, MODEL_o136, TRUE) - Call(EnableTexPanning, MODEL_o146, TRUE) - Call(EnableTexPanning, MODEL_o143, TRUE) - Call(EnableTexPanning, MODEL_o135, TRUE) - Call(EnableTexPanning, MODEL_o138, TRUE) - Call(EnableTexPanning, MODEL_o139, TRUE) - Call(EnableTexPanning, MODEL_o140, TRUE) - Thread - Set(LVar0, 0) - Set(LVar1, 0) - Label(0) - Add(LVar0, 140) - IfGt(LVar0, 0x10000) - Add(LVar0, -0x10000) - EndIf - Call(SetTexPanOffset, 1, 0, LVar0, 0) - Add(LVar1, -200) - IfLt(LVar1, 0) - Add(LVar1, 0x10000) - EndIf - Call(SetTexPanOffset, 2, 0, LVar1, 0) - Wait(1) - Goto(0) - EndThread - Exec(N(EVS_SetupPillarPuzzle)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_16/flo_16_3_vines.c b/src/world/dead/area_flo/flo_16/flo_16_3_vines.c deleted file mode 100644 index a97c740fe00..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16_3_vines.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "flo_16.h" -#include "entity.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" -#include "world/area_flo/common/DroppingVine.inc.c" - -EvtScript N(EVS_SetupVines) = { - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o214, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( -740, -140, -260, -55, 100) - EVT_FLOWER_SPAWN_REGION( 250, -140, 725, -55, 180) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o199, MODEL_o200, MODEL_o201, MODEL_o202) - EVT_DROPPING_VINE(ITEM_STINKY_HERB, MODEL_o203, MODEL_o204, MODEL_o205, MODEL_o206) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o209, MODEL_o210, MODEL_o211, MODEL_o212) - EVT_DROPPING_VINE(ITEM_NONE, MODEL_o213, MODEL_o214, MODEL_o215, MODEL_o216) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_16/flo_16_4_entity.c b/src/world/dead/area_flo/flo_16/flo_16_4_entity.c deleted file mode 100644 index 0591236a772..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16_4_entity.c +++ /dev/null @@ -1,67 +0,0 @@ -#include "flo_16.h" -#include "entity.h" - -#define SUPER_BLOCK_MAPVAR MV_SuperBlock -#define SUPER_BLOCK_GAMEFLAG GF_FLO16_SuperBlock -#include "world/common/entity/SuperBlock.inc.c" - -EvtScript N(EVS_TetherCameraToPlayer) = { - Label(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(SetCamTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Wait(1) - Goto(0) - Return - End -}; - -EvtScript N(EVS_UseSpring) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(SetPlayerActionState, ACTION_STATE_LAUNCH) - Wait(2) - Call(GetPlayerPos, LVar7, LVar8, LVar9) - ExecGetTID(N(EVS_TetherCameraToPlayer), LVarA) - Call(SetPlayerJumpscale, Float(0.7)) - Call(PlayerJump, 450, 180, -120, 30) - Call(SetPlayerActionState, ACTION_STATE_IDLE) - Call(DisablePlayerPhysics, FALSE) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -API_CALLABLE(N(IsPlayerPounding)) { - script->varTable[0] = FALSE; - if (gPlayerStatus.actionState == ACTION_STATE_SPIN_POUND || gPlayerStatus.actionState == ACTION_STATE_TORNADO_POUND) { - script->varTable[0] = TRUE; - } - return ApiStatus_DONE2; -} - -EvtScript N(EVS_MonitorCeilingPound) = { - IfEq(AF_FLO16_FoundHiddenStarPiece, FALSE) - Call(N(IsPlayerPounding)) - IfEq(LVar0, 0) - Return - EndIf - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Switch(LVar0) - CaseRange(620, 660) - Call(MakeItemEntity, ITEM_STAR_PIECE, 640, 145, -100, ITEM_SPAWN_MODE_FALL_NEVER_VANISH, GF_FLO16_Item_StarPiece) - Set(AF_FLO16_FoundHiddenStarPiece, TRUE) - EndSwitch - EndIf - Return - End -}; - -EvtScript N(EVS_MakeEntities) = { - Set(AF_FLO16_FoundHiddenStarPiece, FALSE) - BindTrigger(Ref(N(EVS_MonitorCeilingPound)), TRIGGER_FLOOR_TOUCH, COLLIDER_o214, 1, 0) - EVT_MAKE_SUPER_BLOCK(350, 240, -100, 0) - Call(MakeEntity, Ref(Entity_ScriptSpring), 472, 100, -100, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_UseSpring))) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_16/flo_16_5_npc.c b/src/world/dead/area_flo/flo_16/flo_16_5_npc.c deleted file mode 100644 index 3bbeabdb80f..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16_5_npc.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "flo_16.h" -#include "entity.h" - -#include "world/common/enemy/RuffPuff.inc.c" - -NpcData N(NpcData_RuffPuff_01) = { - .id = NPC_RuffPuff_01, - .pos = { 440.0f, 145.0f, 15.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 440, 145, 15 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_RECT, - .detectPos = { 485, 145, 55 }, - .detectSize = { 225, 95 }, - } - }, - .settings = &N(NpcSettings_RuffPuff), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = RUFF_PUFF_DROPS, - .animations = RUFF_PUFF_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_RuffPuff_02) = { - .id = NPC_RuffPuff_02, - .pos = { 600.0f, 145.0f, 15.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 600, 145, 15 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_RECT, - .detectPos = { 485, 145, 55 }, - .detectSize = { 225, 95 }, - } - }, - .settings = &N(NpcSettings_RuffPuff), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = RUFF_PUFF_DROPS, - .animations = RUFF_PUFF_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_RuffPuff_01), 0x1A24, BTL_FLO_STAGE_05), - NPC_GROUP(N(NpcData_RuffPuff_02), 0x1A20, BTL_FLO_STAGE_05), - {} -}; diff --git a/src/world/dead/area_flo/flo_16/flo_16_6_puzzle.c b/src/world/dead/area_flo/flo_16/flo_16_6_puzzle.c deleted file mode 100644 index b151a14deb6..00000000000 --- a/src/world/dead/area_flo/flo_16/flo_16_6_puzzle.c +++ /dev/null @@ -1,235 +0,0 @@ -#include "flo_16.h" - -API_CALLABLE(N(CheckForPoundInput)) { - script->varTable[0] = FALSE; - if (gPlayerStatus.actionState == ACTION_STATE_SPIN_POUND || gPlayerStatus.actionState == ACTION_STATE_TORNADO_POUND) { - script->varTable[0] = TRUE; - } - return ApiStatus_DONE2; -} - -EvtScript N(EVS_OnTouch_RedPillar) = { - Call(N(CheckForPoundInput)) - IfEq(LVar0, FALSE) - Return - EndIf - Call(DisablePlayerInput, TRUE) - IfEq(AF_FLO_RaisedRedPillar, FALSE) - Set(LVar5, 0) - Set(LVar6, 50) - Set(LVar7, 0) - Set(LVar8, 180) - Set(AF_FLO_RaisedRedPillar, TRUE) - Else - Set(LVar5, 50) - Set(LVar6, 0) - Set(LVar7, 180) - Set(LVar8, 0) - Set(AF_FLO_RaisedRedPillar, FALSE) - EndIf - Wait(15) - Call(PlaySound, SOUND_FLO_MOVE_PILLAR) - Thread - Call(ShakeCam, CAM_DEFAULT, 0, 30, Float(0.8)) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(0.2)) - EndThread - Call(MakeLerp, LVar5, LVar6, 30, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_g81, 0, LVar0, 0) - Call(TranslateGroup, MODEL_g82, 0, LVar0, 0) - Call(TranslateModel, MODEL_g85, 0, LVar0, 0) - Call(TranslateGroup, MODEL_g86, 0, LVar0, 0) - Call(RotateGroup, MODEL_g82, LVar7, 1, 0, 0) - Call(RotateGroup, MODEL_g86, LVar7, 1, 0, 0) - Call(UpdateColliderTransform, COLLIDER_o242) - Call(UpdateColliderTransform, COLLIDER_o250) - Call(UpdateColliderTransform, COLLIDER_o244) - Call(UpdateColliderTransform, COLLIDER_o252) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerInput, FALSE) - Wait(10) - Call(MakeLerp, LVar7, LVar8, 15, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_g81, 0, LVar6, 0) - Call(TranslateGroup, MODEL_g82, 0, LVar6, 0) - Call(TranslateModel, MODEL_g85, 0, LVar6, 0) - Call(TranslateGroup, MODEL_g86, 0, LVar6, 0) - Call(RotateGroup, MODEL_g82, LVar0, 1, 0, 0) - Call(RotateGroup, MODEL_g86, LVar0, 1, 0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_OnTouch_GreenPillar) = { - Call(N(CheckForPoundInput)) - IfEq(LVar0, FALSE) - Return - EndIf - Call(DisablePlayerInput, TRUE) - IfEq(AF_FLO_RaisedGreenPillar, FALSE) - Set(LVar5, 0) - Set(LVar6, 50) - Set(LVar7, 0) - Set(LVar8, 180) - Set(AF_FLO_RaisedGreenPillar, TRUE) - Else - Set(LVar5, 50) - Set(LVar6, 0) - Set(LVar7, 180) - Set(LVar8, 0) - Set(AF_FLO_RaisedGreenPillar, FALSE) - EndIf - Wait(15) - Call(PlaySound, SOUND_FLO_MOVE_PILLAR) - Thread - Call(ShakeCam, CAM_DEFAULT, 0, 30, Float(0.8)) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(0.2)) - EndThread - Call(MakeLerp, LVar5, LVar6, 30, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_g83, 0, LVar0, 0) - Call(TranslateGroup, MODEL_g84, 0, LVar0, 0) - Call(TranslateModel, MODEL_g87, 0, LVar0, 0) - Call(TranslateGroup, MODEL_g88, 0, LVar0, 0) - Call(TranslateModel, MODEL_g91, 0, LVar0, 0) - Call(TranslateGroup, MODEL_g92, 0, LVar0, 0) - Call(RotateGroup, MODEL_g84, LVar7, 1, 0, 0) - Call(RotateGroup, MODEL_g88, LVar7, 1, 0, 0) - Call(RotateGroup, MODEL_g92, LVar7, 1, 0, 0) - Call(UpdateColliderTransform, COLLIDER_o243) - Call(UpdateColliderTransform, COLLIDER_o251) - Call(UpdateColliderTransform, COLLIDER_o245) - Call(UpdateColliderTransform, COLLIDER_o253) - Call(UpdateColliderTransform, COLLIDER_o247) - Call(UpdateColliderTransform, COLLIDER_o255) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerInput, FALSE) - Wait(10) - Call(MakeLerp, LVar7, LVar8, 15, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_g83, 0, LVar6, 0) - Call(TranslateGroup, MODEL_g84, 0, LVar6, 0) - Call(TranslateModel, MODEL_g87, 0, LVar6, 0) - Call(TranslateGroup, MODEL_g88, 0, LVar6, 0) - Call(TranslateModel, MODEL_g91, 0, LVar6, 0) - Call(TranslateGroup, MODEL_g92, 0, LVar6, 0) - Call(RotateGroup, MODEL_g84, LVar0, 1, 0, 0) - Call(RotateGroup, MODEL_g88, LVar0, 1, 0, 0) - Call(RotateGroup, MODEL_g92, LVar0, 1, 0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_OnTouch_PurplePillar) = { - Call(N(CheckForPoundInput)) - IfEq(LVar0, FALSE) - Return - EndIf - Call(DisablePlayerInput, TRUE) - IfEq(AF_FLO_LoweredPurplePillar, FALSE) - Set(LVar5, 0) - Set(LVar6, -50) - Set(LVar7, 0) - Set(LVar8, 180) - Set(AF_FLO_LoweredPurplePillar, TRUE) - Else - Set(LVar5, -50) - Set(LVar6, 0) - Set(LVar7, 180) - Set(LVar8, 0) - Set(AF_FLO_LoweredPurplePillar, FALSE) - EndIf - Wait(15) - Call(PlaySound, SOUND_FLO_MOVE_PILLAR) - Thread - Call(ShakeCam, CAM_DEFAULT, 0, 30, Float(0.8)) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(0.2)) - EndThread - Call(MakeLerp, LVar5, LVar6, 30, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_g89, 0, LVar0, 0) - Call(TranslateGroup, MODEL_g90, 0, LVar0, 0) - Call(TranslateModel, MODEL_g93, 0, LVar0, 0) - Call(TranslateGroup, MODEL_g94, 0, LVar0, 0) - Call(RotateGroup, MODEL_g90, LVar7, 1, 0, 0) - Call(RotateGroup, MODEL_g94, LVar7, 1, 0, 0) - Call(UpdateColliderTransform, COLLIDER_o246) - Call(UpdateColliderTransform, COLLIDER_o254) - Call(UpdateColliderTransform, COLLIDER_o248) - Call(UpdateColliderTransform, COLLIDER_o256) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerInput, FALSE) - Wait(10) - Call(MakeLerp, LVar7, LVar8, 15, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_g89, 0, LVar6, 0) - Call(TranslateGroup, MODEL_g90, 0, LVar6, 0) - Call(TranslateModel, MODEL_g93, 0, LVar6, 0) - Call(TranslateGroup, MODEL_g94, 0, LVar6, 0) - Call(RotateGroup, MODEL_g90, LVar0, 1, 0, 0) - Call(RotateGroup, MODEL_g94, LVar0, 1, 0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_SetupPillarPuzzle) = { - Set(AF_FLO_RaisedRedPillar, FALSE) - Set(AF_FLO_RaisedGreenPillar, FALSE) - Set(AF_FLO_LoweredPurplePillar, FALSE) - Call(ParentColliderToModel, COLLIDER_o242, MODEL_g81) - Call(ParentColliderToModel, COLLIDER_o250, MODEL_g81) - Call(ParentColliderToModel, COLLIDER_o243, MODEL_g83) - Call(ParentColliderToModel, COLLIDER_o251, MODEL_g83) - Call(ParentColliderToModel, COLLIDER_o244, MODEL_g85) - Call(ParentColliderToModel, COLLIDER_o252, MODEL_g85) - Call(ParentColliderToModel, COLLIDER_o245, MODEL_g87) - Call(ParentColliderToModel, COLLIDER_o253, MODEL_g87) - Call(ParentColliderToModel, COLLIDER_o246, MODEL_g89) - Call(ParentColliderToModel, COLLIDER_o254, MODEL_g89) - Call(ParentColliderToModel, COLLIDER_o247, MODEL_g91) - Call(ParentColliderToModel, COLLIDER_o255, MODEL_g91) - Call(ParentColliderToModel, COLLIDER_o248, MODEL_g93) - Call(ParentColliderToModel, COLLIDER_o256, MODEL_g93) - BindTrigger(Ref(N(EVS_OnTouch_RedPillar)), TRIGGER_FLOOR_TOUCH, COLLIDER_o242, 1, 0) - BindTrigger(Ref(N(EVS_OnTouch_GreenPillar)), TRIGGER_FLOOR_TOUCH, COLLIDER_o243, 1, 0) - BindTrigger(Ref(N(EVS_OnTouch_RedPillar)), TRIGGER_FLOOR_TOUCH, COLLIDER_o244, 1, 0) - BindTrigger(Ref(N(EVS_OnTouch_GreenPillar)), TRIGGER_FLOOR_TOUCH, COLLIDER_o245, 1, 0) - BindTrigger(Ref(N(EVS_OnTouch_PurplePillar)), TRIGGER_FLOOR_TOUCH, COLLIDER_o246, 1, 0) - BindTrigger(Ref(N(EVS_OnTouch_GreenPillar)), TRIGGER_FLOOR_TOUCH, COLLIDER_o247, 1, 0) - BindTrigger(Ref(N(EVS_OnTouch_PurplePillar)), TRIGGER_FLOOR_TOUCH, COLLIDER_o248, 1, 0) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_17/flo_17.h b/src/world/dead/area_flo/flo_17/flo_17.h deleted file mode 100644 index 0e47a1b8ca6..00000000000 --- a/src/world/dead/area_flo/flo_17/flo_17.h +++ /dev/null @@ -1,36 +0,0 @@ -// Older version of flo_17 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_17_shape.h" -#include "mapfs/flo_17_hit.h" - -enum { - NPC_Lakitu_01 = 0, - NPC_Lakitu_02 = 1, - NPC_Spiny_01 = 50, - NPC_Spiny_02 = 51, - NPC_Spiny_03 = 52, - NPC_Spiny_04 = 53, -}; - -enum { - MV_RotAngle_Log_01 = MapVar(10), - MV_RotVelocity_Log_01 = MapVar(11), - MV_RotAngle_Log_02 = MapVar(12), - MV_RotVelocity_Log_02 = MapVar(13), - MV_RotAngle_Log_03 = MapVar(14), - MV_RotVelocity_Log_03 = MapVar(15), -}; - -#define NAMESPACE dead_flo_17 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_SetupLogBridges); -extern EvtScript N(EVS_MakeEntities); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_17/flo_17_0_header.c b/src/world/dead/area_flo/flo_17/flo_17_0_header.c deleted file mode 100644 index 8d761ffad73..00000000000 --- a/src/world/dead/area_flo/flo_17/flo_17_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_17.h" - -EntryList N(Entrances) = { - [flo_17_ENTRY_0] { -730.0, 0.0, 0.0, 90.0 }, - [flo_17_ENTRY_1] { 730.0, 0.0, 0.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_17 }, -}; diff --git a/src/world/dead/area_flo/flo_17/flo_17_1_music.c b/src/world/dead/area_flo/flo_17/flo_17_1_music.c deleted file mode 100644 index 47ad5d845c1..00000000000 --- a/src/world/dead/area_flo/flo_17/flo_17_1_music.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "flo_17.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_CLOUDY, 0, 8) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_17/flo_17_2_main.c b/src/world/dead/area_flo/flo_17/flo_17_2_main.c deleted file mode 100644 index f008fb92d58..00000000000 --- a/src/world/dead/area_flo/flo_17/flo_17_2_main.c +++ /dev/null @@ -1,130 +0,0 @@ -#include "flo_17.h" -#include "effects.h" - -#include "world/area_flo/common/FlowerSpawnRegion.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_16_1) = EVT_EXIT_WALK(60, flo_17_ENTRY_0, "flo_16", flo_16_ENTRY_1); -EvtScript N(EVS_ExitWalk_flo_18_0) = EVT_EXIT_WALK(60, flo_17_ENTRY_1, "flo_18", flo_18_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_16_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_flo_18_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o116, .pos = { -530.0, 0.0, -110.0 }}, - { .colliderID = COLLIDER_o118, .pos = { -540.0, 0.0, -50.0 }}, - { .colliderID = COLLIDER_o117, .pos = { -530.0, 0.0, 80.0 }}, - { .colliderID = COLLIDER_o121, .pos = { -270.0, 0.0, -120.0 }}, - { .colliderID = COLLIDER_o120, .pos = { -270.0, 0.0, -120.0 }}, - { .colliderID = COLLIDER_o119, .pos = { -270.0, 0.0, 35.0 }}, - { .colliderID = COLLIDER_o124, .pos = { -130.0, 0.0, -50.0 }}, - { .colliderID = COLLIDER_o123, .pos = { -130.0, 0.0, -50.0 }}, - { .colliderID = COLLIDER_o122, .pos = { -140.0, 0.0, 75.0 }}, - { .colliderID = COLLIDER_o128, .pos = { 120.0, 0.0, -50.0 }}, - { .colliderID = COLLIDER_o127, .pos = { 120.0, 0.0, -50.0 }}, - { .colliderID = COLLIDER_o125, .pos = { 130.0, 0.0, 60.0 }}, - { .colliderID = COLLIDER_o126, .pos = { 120.0, 0.0, 120.0 }}, - { .colliderID = COLLIDER_o132, .pos = { 280.0, 0.0, -110.0 }}, - { .colliderID = COLLIDER_o131, .pos = { 280.0, 0.0, -110.0 }}, - { .colliderID = COLLIDER_o130, .pos = { 270.0, 0.0, -50.0 }}, - { .colliderID = COLLIDER_o129, .pos = { 280.0, 0.0, 50.0 }}, - { .colliderID = COLLIDER_o134, .pos = { 525.0, 0.0, -70.0 }}, - { .colliderID = COLLIDER_o133, .pos = { 525.0, 0.0, 50.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Exec(N(EVS_SetupLogBridges)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o116, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o117, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o121, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o124, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o126, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o128, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o129, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o132, SURFACE_TYPE_FLOWERS) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o133, SURFACE_TYPE_FLOWERS) - EVT_FLOWER_SPAWN_REGION( -736, -137, -522, -118, 0) - EVT_FLOWER_SPAWN_REGION( -728, 76, -496, 137, 0) - EVT_FLOWER_SPAWN_REGION( -160, -117, -92, -54, 0) - EVT_FLOWER_SPAWN_REGION( 76, -124, 150, -55, 0) - EVT_FLOWER_SPAWN_REGION( 192, 60, 309, 133, 0) - EVT_FLOWER_SPAWN_REGION( 488, 46, 733, 137, 0) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o103, SURFACE_TYPE_SPIKES) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Call(EnableTexPanning, MODEL_o34, TRUE) - Call(EnableTexPanning, MODEL_o36, TRUE) - Call(EnableTexPanning, MODEL_o37, TRUE) - Call(EnableTexPanning, MODEL_o40, TRUE) - Call(EnableTexPanning, MODEL_o41, TRUE) - Call(EnableTexPanning, MODEL_o44, TRUE) - Call(EnableTexPanning, MODEL_o45, TRUE) - Call(EnableTexPanning, MODEL_o47, TRUE) - Call(EnableTexPanning, MODEL_o48, TRUE) - Call(EnableTexPanning, MODEL_o51, TRUE) - Call(EnableTexPanning, MODEL_o52, TRUE) - Call(EnableTexPanning, MODEL_o55, TRUE) - Call(EnableTexPanning, MODEL_o23, TRUE) - Call(EnableTexPanning, MODEL_o25, TRUE) - Call(EnableTexPanning, MODEL_o26, TRUE) - Call(EnableTexPanning, MODEL_o29, TRUE) - Call(EnableTexPanning, MODEL_o30, TRUE) - Call(EnableTexPanning, MODEL_o33, TRUE) - Call(EnableTexPanning, MODEL_o35, TRUE) - Call(EnableTexPanning, MODEL_o38, TRUE) - Call(EnableTexPanning, MODEL_o39, TRUE) - Call(EnableTexPanning, MODEL_o42, TRUE) - Call(EnableTexPanning, MODEL_o43, TRUE) - Call(EnableTexPanning, MODEL_o46, TRUE) - Call(EnableTexPanning, MODEL_o49, TRUE) - Call(EnableTexPanning, MODEL_o50, TRUE) - Call(EnableTexPanning, MODEL_o53, TRUE) - Call(EnableTexPanning, MODEL_o54, TRUE) - Call(EnableTexPanning, MODEL_o24, TRUE) - Call(EnableTexPanning, MODEL_o27, TRUE) - Call(EnableTexPanning, MODEL_o28, TRUE) - Call(EnableTexPanning, MODEL_o31, TRUE) - Call(EnableTexPanning, MODEL_o32, TRUE) - Thread - Set(LVar0, 0) - Set(LVar1, 0) - Label(0) - Add(LVar0, 140) - IfGt(LVar0, 0x10000) - Add(LVar0, -0x10000) - EndIf - Call(SetTexPanOffset, 1, 0, LVar0, 0) - Add(LVar1, -200) - IfLt(LVar1, 0) - Add(LVar1, 0x10000) - EndIf - Call(SetTexPanOffset, 2, 0, LVar1, 0) - Wait(1) - Goto(0) - EndThread - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_17/flo_17_3_logs.c b/src/world/dead/area_flo/flo_17/flo_17_3_logs.c deleted file mode 100644 index 4a8fa7424c6..00000000000 --- a/src/world/dead/area_flo/flo_17/flo_17_3_logs.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "flo_17.h" - -#include "world/area_flo/common/LogBridge.inc.c" - -EvtScript N(EVS_SetupLogBridges) = { - EVT_MAKE_LOG_BRIDGE(COLLIDER_o22, COLLIDER_o138, MODEL_o19, MODEL_o20, MV_RotAngle_Log_01, MV_RotVelocity_Log_01) - EVT_MAKE_LOG_BRIDGE(COLLIDER_o15, COLLIDER_o139, MODEL_o17, MODEL_o18, MV_RotAngle_Log_02, MV_RotVelocity_Log_02) - EVT_MAKE_LOG_BRIDGE(COLLIDER_o13, COLLIDER_o140, MODEL_o11, MODEL_o12, MV_RotAngle_Log_03, MV_RotVelocity_Log_03) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_17/flo_17_4_npc.c b/src/world/dead/area_flo/flo_17/flo_17_4_npc.c deleted file mode 100644 index e9005689252..00000000000 --- a/src/world/dead/area_flo/flo_17/flo_17_4_npc.c +++ /dev/null @@ -1,155 +0,0 @@ -#include "flo_17.h" - -#include "world/common/npc/Dummy.inc.c" - -#define AI_LAKITU_FIRST_SPINY_ID NPC_Spiny_01 -#define AI_LAKITU_LAST_SPINY_ID NPC_Spiny_04 -#include "world/common/enemy/Lakitu_SpinySpawner.inc.c" - -NpcData N(NpcData_Lakitu_01) = { - .id = NPC_Lakitu_01, - .pos = { -185.0f, 90.0f, 10.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -185, 90, 10 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_RECT, - .detectPos = { -185, 90, 0 }, - .detectSize = { 85, 120 }, - } - }, - .settings = &N(NpcSettings_Lakitu_SpinySpawner), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Lakitu_02) = { - .id = NPC_Lakitu_02, - .pos = { 200.0f, 90.0f, -25.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 200, 90, -25 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_RECT, - .detectPos = { 200, 90, 0 }, - .detectSize = { 85, 120 }, - } - }, - .settings = &N(NpcSettings_Lakitu_SpinySpawner), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_01) = { - .id = NPC_Spiny_01, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_02) = { - .id = NPC_Spiny_02, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_03) = { - .id = NPC_Spiny_03, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Spiny_04) = { - .id = NPC_Spiny_04, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 0, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 0, 0, 0 }, - .wanderSize = { 0 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 0, 0, 0 }, - .detectSize = { 0 }, - } - }, - .settings = &N(NpcSettings_SpawnedSpiny), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = SPINY_DROPS, - .animations = SPINY_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Lakitu_01), 0x1A09, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Lakitu_02), 0x1A0A, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_01), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_02), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_03), 0x1A0C, BTL_FLO_STAGE_02), - NPC_GROUP(N(NpcData_Spiny_04), 0x1A0C, BTL_FLO_STAGE_02), - {} -}; diff --git a/src/world/dead/area_flo/flo_17/flo_17_5_entity.c b/src/world/dead/area_flo/flo_17/flo_17_5_entity.c deleted file mode 100644 index 7c1c3760a9e..00000000000 --- a/src/world/dead/area_flo/flo_17/flo_17_5_entity.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "flo_17.h" -#include "entity.h" - -EvtScript N(EVS_MakeEntities) = { - Call(MakeEntity, Ref(Entity_HiddenYellowBlock), 660, 60, -115, 0, ITEM_THUNDER_RAGE, MAKE_ENTITY_END) - Call(AssignBlockFlag, GF_FLO17_HiddenItem_ThunderRage) - Call(MakeItemEntity, ITEM_LETTER_TO_MINH_T, -245, 0, 105, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO17_Item_Letter09) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_18/flo_18.h b/src/world/dead/area_flo/flo_18/flo_18.h deleted file mode 100644 index 102096a36bb..00000000000 --- a/src/world/dead/area_flo/flo_18/flo_18.h +++ /dev/null @@ -1,40 +0,0 @@ -// Older version of flo_18 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_18_shape.h" -#include "mapfs/flo_18_hit.h" - -#include "sprite/npc/WorldLakilester.h" - -enum { - NPC_Lakitu_01 = 0, - NPC_Lakitu_02 = 1, - NPC_Lakitu_03 = 2, - NPC_Magikoopa = 3, - NPC_FlyingMagikoopa = 4, -}; - -enum { - MF_HitGuardedMachine = MapFlag(1), - MF_MachineShaking = MapFlag(2), - MF_MachineBeingDamaged = MapFlag(3), -}; - -enum { - MV_ReactingNpc = MapVar(10), -}; - -#define NAMESPACE dead_flo_18 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_SetupFoliage); -extern EvtScript N(EVS_SetupMachine); -extern EvtScript N(EVS_SetupMachineDamageReactions); -extern EvtScript N(EVS_Scene_LakilesterLikesBeingGood); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_flo/flo_18/flo_18_0_header.c b/src/world/dead/area_flo/flo_18/flo_18_0_header.c deleted file mode 100644 index a82db552dd8..00000000000 --- a/src/world/dead/area_flo/flo_18/flo_18_0_header.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "flo_18.h" - -EntryList N(Entrances) = { - [flo_18_ENTRY_0] { -320.0, 0.0, 0.0, 90.0 }, - [flo_18_ENTRY_1] { 36.0, 0.0, 40.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_18 }, -}; diff --git a/src/world/dead/area_flo/flo_18/flo_18_1_music.c b/src/world/dead/area_flo/flo_18/flo_18_1_music.c deleted file mode 100644 index 445a9842290..00000000000 --- a/src/world/dead/area_flo/flo_18/flo_18_1_music.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "flo_18.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseLt(STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(SetMusicTrack, 0, SONG_PUFF_PUFF_MACHINE, 0, 8) - Call(PlaySoundAtCollider, COLLIDER_o126, SOUND_LOOP_PUFF_PUFF_MACHINE, SOUND_SPACE_DEFAULT) - CaseDefault - Call(SetMusicTrack, 0, SONG_FLOWER_FIELDS_SUNNY, 0, 8) - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_18/flo_18_2_main.c b/src/world/dead/area_flo/flo_18/flo_18_2_main.c deleted file mode 100644 index de0d0f46567..00000000000 --- a/src/world/dead/area_flo/flo_18/flo_18_2_main.c +++ /dev/null @@ -1,79 +0,0 @@ -#include "flo_18.h" -#include "effects.h" - -#include "world/common/atomic/TexturePan.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_17_1) = EVT_EXIT_WALK(60, flo_18_ENTRY_0, "flo_17", flo_17_ENTRY_1); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_17_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deiliw, 1, 0) - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o138, .pos = { -200.0, 0.0, 120.0 }}, - { .colliderID = COLLIDER_o140, .pos = { 0.0, 0.0, 120.0 }}, - { .colliderID = COLLIDER_o142, .pos = { 170.0, 0.0, 120.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_FLOWER_FIELDS) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, FALSE, Ref(N(DefaultNPCs))) - Exec(N(EVS_SetupFoliage)) - Exec(N(EVS_SetupMachine)) - Exec(N(EVS_SetupMachineDamageReactions)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o44, SURFACE_TYPE_SPIKES) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Call(EnableTexPanning, MODEL_o48, TRUE) - Call(EnableTexPanning, MODEL_o50, TRUE) - Call(EnableTexPanning, MODEL_o52, TRUE) - Call(EnableTexPanning, MODEL_o54, TRUE) - Call(EnableTexPanning, MODEL_o58, TRUE) - Call(EnableTexPanning, MODEL_o60, TRUE) - Call(EnableTexPanning, MODEL_o49, TRUE) - Call(EnableTexPanning, MODEL_o51, TRUE) - Call(EnableTexPanning, MODEL_o53, TRUE) - Call(EnableTexPanning, MODEL_o57, TRUE) - Call(EnableTexPanning, MODEL_o59, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_1) - TEX_PAN_PARAMS_STEP( -140, 0, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 0, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_2) - TEX_PAN_PARAMS_STEP( -200, 0, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 0, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Call(GetEntryID, LVar0) - IfEq(LVar0, flo_18_ENTRY_0) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilitw, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - Else - Exec(N(EVS_Scene_LakilesterLikesBeingGood)) - Exec(N(EVS_BindExitTriggers)) - EndIf - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_18/flo_18_3_machine.c b/src/world/dead/area_flo/flo_18/flo_18_3_machine.c deleted file mode 100644 index 53c23f5b17c..00000000000 --- a/src/world/dead/area_flo/flo_18/flo_18_3_machine.c +++ /dev/null @@ -1,770 +0,0 @@ -#include "flo_18.h" -#include "effects.h" - -enum { - DAMAGE_PART_LEFT_SIDE, - DAMAGE_PART_RIGHT_SIDE, - DAMAGE_PART_PROTRUSTIONS, - DAMAGE_PART_LEVER, - DAMAGE_PART_SMOKE_STACK, -}; - -API_CALLABLE(N(SetMachineLightningColor)) { - EffectInstance* effect = (EffectInstance*) script->varTable[15]; - - effect->data.lightningBolt->outerColor.r = 69; - effect->data.lightningBolt->outerColor.g = 255; - effect->data.lightningBolt->outerColor.b = 217; - effect->data.lightningBolt->innerColor.r = 176; - effect->data.lightningBolt->innerColor.g = 254; - effect->data.lightningBolt->innerColor.b = 124; - return ApiStatus_DONE2; -} - -EvtScript N(EVS_AnimateMachineLightning) = { - SetGroup(EVT_GROUP_0B) - Loop(0) - PlayEffect(EFFECT_LIGHTNING_BOLT, 0, Float(-16.0), Float(102.0), Float(-4.1), Float(80.9), Float(102.0), Float(-4.1), Float(0.5), 6) - Call(N(SetMachineLightningColor)) - Wait(4) - PlayEffect(EFFECT_LIGHTNING_BOLT, 0, Float(80.9), Float(102.0), Float(-4.1), Float(-16.0), Float(102.0), Float(-4.1), Float(0.5), 6) - Call(N(SetMachineLightningColor)) - Wait(4) - IfGe(GB_FLO18_MachineDamage_Right, 3) - BreakLoop - EndIf - EndLoop - Set(LVar0, 6) - Loop(5) - PlayEffect(EFFECT_LIGHTNING_BOLT, 0, Float(-16.0), Float(102.0), Float(-4.1), Float(80.9), Float(102.0), Float(-4.1), Float(0.5), 6) - Call(N(SetMachineLightningColor)) - Wait(LVar0) - Add(LVar0, 2) - PlayEffect(EFFECT_LIGHTNING_BOLT, 0, Float(80.9), Float(102.0), Float(-4.1), Float(-16.0), Float(102.0), Float(-4.1), Float(0.5), 6) - Call(N(SetMachineLightningColor)) - Wait(LVar0) - Add(LVar0, 2) - EndLoop - Return - End -}; - -#include "common/CosInterpMinMax.inc.c" - -EvtScript N(EVS_UpdateSmokeParticle) = { - Call(EnableModel, LVarF, TRUE) - Set(LVarE, 159) - Loop(LVarE) - AddF(LVar3, 0) - AddF(LVar4, Float(0.0)) - SetF(LVar5, Float(0.01)) - AddF(LVar0, LVar3) - AddF(LVar1, LVar4) - AddF(LVar2, LVar5) - MulF(LVar6, Float(1.01)) - AddF(LVar7, Float(0.01)) - SetF(LVar8, LVar6) - Call(N(CosInterpMinMax), LVarE, LVarA, Float(0.0), Float(0.203), 15, 0, 0) - AddF(LVar8, LVarA) - SetF(LVar9, LVar7) - Call(N(CosInterpMinMax), LVarE, LVarA, Float(0.0), Float(0.203), 20, 0, 90) - AddF(LVar9, LVarA) - SetF(LVarA, LVar0) - MulF(LVarA, Float(10.0)) - Call(TranslateModel, LVarF, LVar0, LVar1, LVar2) - Call(ScaleModel, LVarF, LVar8, LVar9, 1) - Call(RotateModel, LVarF, LVarA, 0, 0, 1) - Wait(1) - EndLoop - Call(EnableModel, LVarF, FALSE) - Return - End -}; - -EvtScript N(EVS_ManageSmoke) = { - Set(LVarE, 0) - Label(0) - IfGe(GB_FLO18_MachineDamage_Right, 3) - Return - EndIf - SetF(LVar0, Float(132.0)) - SetF(LVar1, Float(90.0)) - SetF(LVar2, Float(-30.0)) - Call(RandInt, 100, LVar3) - AddF(LVar3, -50) - DivF(LVar3, Float(200.0)) - SetF(LVar4, Float(1.0)) - SetF(LVar5, 0) - SetF(LVar6, Float(0.296)) - SetF(LVar7, Float(0.296)) - Set(LVarF, LVarE) - Add(LVarF, CLONED_MODEL(0)) - Exec(N(EVS_UpdateSmokeParticle)) - Add(LVarE, 1) - IfGe(LVarE, 16) - Set(LVarE, 0) - EndIf - Wait(10) - Goto(0) - Return - End -}; - -EvtScript N(EVS_ShakeMachine) = { - IfEq(MF_MachineShaking, TRUE) - Return - EndIf - Set(MF_MachineShaking, TRUE) - Set(LVarF, 0) - Loop(12) - Call(RandInt, 80, LVar0) - Sub(LVar0, 40) - Call(RandInt, 50, LVar1) - Call(RandInt, 50, LVar2) - Sub(LVar2, 25) - PlayEffect(EFFECT_00, LVar0, LVar1, LVar2, 5, 10, 1, 1) - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVarE, Float(1.0), Float(1.093), 2, 0, 0) - Call(N(CosInterpMinMax), LVarF, LVarD, Float(1.093), Float(1.0), 2, 0, 0) - SetF(LVar0, LVarE) - SetF(LVar1, LVarD) - SetF(LVar2, LVarE) - IfEq(GB_FLO18_MachineDamage_Left, 0) - Call(ScaleModel, MODEL_o115, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o116, LVar0, LVar1, LVar2) - EndIf - IfEq(GB_FLO18_MachineDamage_Right, 0) - Call(ScaleModel, MODEL_o117, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o118, LVar0, LVar1, LVar2) - EndIf - IfLe(GB_FLO18_MachineDamage_Left, 1) - Call(ScaleModel, MODEL_o119, LVar0, LVar1, LVar2) - EndIf - IfLe(GB_FLO18_MachineDamage_Left, 2) - IfLe(GB_FLO18_MachineDamage_Right, 1) - Call(ScaleModel, MODEL_o120, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o121, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o122, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o123, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o124, LVar0, LVar1, LVar2) - EndIf - EndIf - Call(ScaleModel, MODEL_o113, LVar0, LVar1, LVar2) - IfLe(GB_FLO18_MachineDamage_Left, 2) - IfLe(GB_FLO18_MachineDamage_Right, 2) - Call(ScaleModel, MODEL_o100, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o99, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o125, LVar0, LVar1, LVar2) - EndIf - EndIf - Call(ScaleModel, MODEL_o92, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o93, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o94, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o95, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o91, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o114, LVar0, LVar1, LVar2) - SubF(LVar0, Float(1.046)) - MulF(LVar0, Float(100.0)) - IfEq(GB_FLO18_MachineDamage_Left, 0) - Call(RotateModel, MODEL_o115, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o116, LVar0, 0, 0, 1) - EndIf - IfEq(GB_FLO18_MachineDamage_Right, 0) - Call(RotateModel, MODEL_o117, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o118, LVar0, 0, 0, 1) - EndIf - IfLe(GB_FLO18_MachineDamage_Left, 1) - Call(RotateModel, MODEL_o119, LVar0, 0, 0, 1) - EndIf - IfLe(GB_FLO18_MachineDamage_Left, 2) - IfLe(GB_FLO18_MachineDamage_Right, 1) - Call(RotateModel, MODEL_o120, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o121, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o122, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o123, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o124, LVar0, 0, 0, 1) - EndIf - EndIf - Call(RotateModel, MODEL_o113, LVar0, 0, 0, 1) - IfLe(GB_FLO18_MachineDamage_Left, 2) - IfLe(GB_FLO18_MachineDamage_Right, 2) - Call(RotateModel, MODEL_o100, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o99, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o125, LVar0, 0, 0, 1) - EndIf - EndIf - Call(RotateModel, MODEL_o92, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o93, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o94, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o95, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o91, LVar0, 0, 0, 1) - Call(RotateModel, MODEL_o114, LVar0, 0, 0, 1) - Wait(1) - EndLoop - SetF(LVar0, 1) - SetF(LVar1, 1) - SetF(LVar2, 1) - IfEq(GB_FLO18_MachineDamage_Left, 0) - Call(ScaleModel, MODEL_o115, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o116, LVar0, LVar1, LVar2) - EndIf - IfEq(GB_FLO18_MachineDamage_Right, 0) - Call(ScaleModel, MODEL_o117, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o118, LVar0, LVar1, LVar2) - EndIf - IfLe(GB_FLO18_MachineDamage_Left, 1) - Call(ScaleModel, MODEL_o119, LVar0, LVar1, LVar2) - EndIf - IfLe(GB_FLO18_MachineDamage_Left, 2) - IfLe(GB_FLO18_MachineDamage_Right, 1) - Call(ScaleModel, MODEL_o120, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o121, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o122, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o123, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o124, LVar0, LVar1, LVar2) - EndIf - EndIf - Call(ScaleModel, MODEL_o113, LVar0, LVar1, LVar2) - IfLe(GB_FLO18_MachineDamage_Left, 2) - IfLe(GB_FLO18_MachineDamage_Right, 2) - Call(ScaleModel, MODEL_o100, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o99, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o125, LVar0, LVar1, LVar2) - EndIf - EndIf - Call(ScaleModel, MODEL_o92, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o93, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o94, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o95, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o91, LVar0, LVar1, LVar2) - Call(ScaleModel, MODEL_o114, LVar0, LVar1, LVar2) - Wait(1) - Set(MF_MachineShaking, FALSE) - Return - End -}; - -EvtScript N(EVS_DamagedLeftOnce) = { - SetF(LVar0, 0) - SetF(LVar1, 0) - SetF(LVar2, 0) - SetF(LVar3, Float(-1.0)) - SetF(LVar4, Float(0.0)) - SetF(LVar5, Float(3.0)) - Thread - Wait(10) - Call(PlaySoundAtCollider, COLLIDER_o130, SOUND_PUFF_PUFF_PART_BREAKS, SOUND_SPACE_DEFAULT) - EndThread - Loop(300) - AddF(LVar4, Float(-0.5)) - AddF(LVar5, Float(0.093)) - AddF(LVar0, LVar3) - AddF(LVar1, LVar4) - AddF(LVar2, LVar5) - IfLt(LVar1, -10) - SetF(LVar1, Float(-10.0)) - SetF(LVar3, Float(0.0)) - SetF(LVar4, Float(0.0)) - IfGe(LVar2, 80) - Goto(0) - EndIf - EndIf - EndIf - Call(TranslateModel, MODEL_o115, -78, 19, 2) - Call(TranslateModel, MODEL_o116, -78, 19, 2) - Call(TranslateModel, MODEL_o115, LVar0, LVar1, 0) - Call(TranslateModel, MODEL_o116, LVar0, LVar1, 0) - Call(RotateModel, MODEL_o115, LVar2, 0, 0, 1) - Call(RotateModel, MODEL_o116, LVar2, 0, 0, 1) - Call(TranslateModel, MODEL_o115, 78, -19, -2) - Call(TranslateModel, MODEL_o116, 78, -19, -2) - Wait(1) -EndLoop -Label(0) -Wait(30) -Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o130, COLLIDER_FLAGS_UPPER_MASK) -Return -End -}; - -EvtScript N(EVS_DamagedRightOnce) = { - SetF(LVar0, 0) - SetF(LVar1, 0) - SetF(LVar2, 0) - SetF(LVar3, Float(0.0)) - SetF(LVar4, Float(0.0)) - SetF(LVar5, Float(-5.0)) - Thread - Wait(12) - Call(PlaySoundAtCollider, COLLIDER_o175, SOUND_PUFF_PUFF_PANEL_BREAKS, SOUND_SPACE_DEFAULT) - EndThread - Loop(300) - AddF(LVar4, Float(-0.5)) - AddF(LVar0, LVar3) - AddF(LVar1, LVar4) - AddF(LVar2, LVar5) - IfLt(LVar2, -45) - Set(LVar5, 5) - EndIf - IfGt(LVar2, 0) - Set(LVar2, 0) - Set(LVar3, 5) - EndIf - IfLt(LVar1, -25) - Set(LVar4, 0) - Set(LVar1, -25) - EndIf - IfGt(LVar0, 90) - Goto(0) - EndIf - Call(TranslateModel, MODEL_o117, 50, 28, 27) - Call(TranslateModel, MODEL_o118, 50, 28, 27) - Call(TranslateModel, MODEL_o117, 0, LVar1, 1) - Call(TranslateModel, MODEL_o118, 0, LVar1, 1) - Call(RotateModel, MODEL_o117, LVar0, 1, 0, 0) - Call(RotateModel, MODEL_o118, LVar0, 1, 0, 0) - Call(RotateModel, MODEL_o117, LVar2, 0, 0, 1) - Call(RotateModel, MODEL_o118, LVar2, 0, 0, 1) - Call(TranslateModel, MODEL_o117, -50, -28, -27) - Call(TranslateModel, MODEL_o118, -50, -28, -27) - Wait(1) - EndLoop - Label(0) - Wait(30) - Return - End -}; - -EvtScript N(EVS_DamagedLeftTwice) = { - SetF(LVar2, 0) - SetF(LVar1, 0) - SetF(LVar0, 0) - SetF(LVar5, Float(0.0)) - Thread - Wait(15) - Call(PlaySoundAtCollider, COLLIDER_o174, SOUND_PUFF_PUFF_PANEL_BREAKS, SOUND_SPACE_DEFAULT) - EndThread - Loop(300) - AddF(LVar5, Float(0.5)) - AddF(LVar2, LVar5) - IfGe(LVar2, 80) - SetF(LVar2, 80) - MulF(LVar5, Float(-0.5)) - IfEq(LVar5, 0) - Goto(0) - EndIf - EndIf - Call(TranslateModel, MODEL_o119, -55, 5, 16) - Call(TranslateModel, MODEL_o119, LVar0, LVar1, 0) - Call(RotateModel, MODEL_o119, LVar2, 0, 0, 1) - Call(TranslateModel, MODEL_o119, 55, -5, -16) - Wait(1) - EndLoop - Label(0) - Wait(30) - Return - End -}; - -EvtScript N(EVS_DamagedRightTwice) = { - SetF(LVar2, 0) - SetF(LVar1, 0) - SetF(LVar0, 0) - SetF(LVar5, Float(0.0)) - Thread - Wait(15) - Call(PlaySoundAtCollider, COLLIDER_o127, SOUND_PUFF_PUFF_PANEL_BREAKS, SOUND_SPACE_DEFAULT) - EndThread - Loop(300) - AddF(LVar5, Float(0.5)) - AddF(LVar2, LVar5) - IfGe(LVar2, 80) - SetF(LVar2, 80) - MulF(LVar5, Float(-0.5)) - IfEq(LVar5, 0) - Goto(0) - EndIf - EndIf - Call(TranslateModel, MODEL_o122, 60, 0, 16) - Call(RotateModel, MODEL_o122, LVar2, 0, 0, -1) - Call(TranslateModel, MODEL_o122, -60, 0, -16) - Call(TranslateModel, MODEL_o120, 0, 0, 27) - Call(TranslateModel, MODEL_o121, 0, 0, 27) - Call(RotateModel, MODEL_o120, LVar2, 1, 0, 0) - Call(RotateModel, MODEL_o121, LVar2, 1, 0, 0) - Call(TranslateModel, MODEL_o120, 0, 0, -27) - Call(TranslateModel, MODEL_o121, 0, 0, -27) - Call(TranslateModel, MODEL_o123, 0, 0, -41) - Call(TranslateModel, MODEL_o124, 0, 0, -41) - Call(RotateModel, MODEL_o123, LVar2, -1, 0, 0) - Call(RotateModel, MODEL_o124, LVar2, -1, 0, 0) - Call(TranslateModel, MODEL_o123, 0, 0, 41) - Call(TranslateModel, MODEL_o124, 0, 0, 41) - Wait(1) - EndLoop - Label(0) - Wait(30) - Return - End -}; - -EvtScript N(EVS_BreakSmokestack) = { - SetF(LVar0, 0) - SetF(LVar1, 0) - SetF(LVar2, 0) - SetF(LVar3, Float(-1.0)) - SetF(LVar4, Float(0.0)) - SetF(LVar5, Float(3.0)) - Thread - Wait(15) - Call(PlaySoundAtCollider, COLLIDER_o131, SOUND_PUFF_PUFF_PART_BREAKS, SOUND_SPACE_DEFAULT) - EndThread - Loop(300) - AddF(LVar4, Float(-0.5)) - AddF(LVar5, Float(0.093)) - AddF(LVar0, LVar3) - AddF(LVar1, LVar4) - AddF(LVar2, LVar5) - IfLt(LVar1, -25) - SetF(LVar1, Float(-25.0)) - SetF(LVar3, Float(0.0)) - SetF(LVar4, Float(0.0)) - IfGe(LVar2, 80) - Goto(0) - EndIf - EndIf - EndIf - Call(TranslateModel, MODEL_o100, 124, 17, 3) - Call(TranslateModel, MODEL_o100, LVar0, LVar1, 0) - Call(RotateModel, MODEL_o100, LVar2, 0, 0, -1) - Call(TranslateModel, MODEL_o100, -124, -17, -3) - Wait(1) -EndLoop -Label(0) -Return -End -}; - -EvtScript N(EVS_BreakAntenna) = { - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o131, COLLIDER_FLAGS_UPPER_MASK) - SetF(LVar0, 0) - SetF(LVar1, 0) - SetF(LVar2, 0) - SetF(LVar3, Float(3.0)) - SetF(LVar4, Float(1.0)) - SetF(LVar5, Float(5.0)) - Thread - Wait(15) - Call(PlaySoundAtCollider, COLLIDER_o126, SOUND_PUFF_PUFF_PART_BREAKS, SOUND_SPACE_DEFAULT) - EndThread - Loop(300) - AddF(LVar4, Float(-0.5)) - AddF(LVar0, LVar3) - AddF(LVar1, LVar4) - AddF(LVar2, LVar5) - IfLe(LVar1, -40) - SetF(LVar1, -40) - MulF(LVar4, Float(-0.5)) - IfLe(LVar4, 1) - Goto(1) - EndIf - EndIf - IfGe(LVar2, 60) - SetF(LVar2, 60) - SetF(LVar5, 0) - EndIf - Call(TranslateModel, MODEL_o99, -34, 50, 10) - Call(TranslateModel, MODEL_o125, -34, 50, 10) - Call(TranslateModel, MODEL_o99, 0, LVar1, LVar0) - Call(RotateModel, MODEL_o99, LVar2, 0, 0, 1) - Call(TranslateModel, MODEL_o125, 0, LVar1, LVar0) - Call(RotateModel, MODEL_o125, LVar2, 0, 0, 1) - Call(TranslateModel, MODEL_o99, 34, -50, -10) - Call(TranslateModel, MODEL_o125, 34, -50, -10) - Wait(1) - EndLoop - Label(1) - Wait(30) - Return - End -}; - -Vec3i N(SmokeBurstPositions)[] = { - { 0, 0, 27 }, - { 80, 35, 27 }, - { 60, 10, 27 }, - { 30, 0, 27 }, - { 80, 35, 27 }, - { 30, 0, 27 }, - { 85, 0, 27 }, - { 80, 35, 27 }, -}; - -EvtScript N(EVS_DamageMachine) = { - #define LABEL_DONE 0 - DebugPrintVar(LVar0) - Set(LVarA, LVar0) // in: damage part - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar0, -210) - Return - EndIf - Call(PlaySound, SOUND_PUFF_PUFF_SMASH) - ExecWait(N(EVS_ShakeMachine)) - DebugPrintVar(LVarA) - Set(LVar0, LVarA) - IfLt(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Set(MF_HitGuardedMachine, TRUE) - Return - EndIf - DebugPrintVar(MF_MachineBeingDamaged) - IfEq(MF_MachineBeingDamaged, TRUE) - Return - EndIf - // check damage type - Set(MF_MachineBeingDamaged, TRUE) - IfGt(LVar0, DAMAGE_PART_PROTRUSTIONS) - Goto(LABEL_DONE) - EndIf - IfEq(LVar0, DAMAGE_PART_PROTRUSTIONS) - Goto(11) - EndIf - IfEq(LVar0, DAMAGE_PART_LEFT_SIDE) - Label(11) - IfEq(GB_FLO18_MachineDamage_Left, 0) - Set(GB_FLO18_MachineDamage_Left, 1) - Exec(N(EVS_DamagedLeftOnce)) - Goto(LABEL_DONE) - EndIf - EndIf - IfEq(LVar0, DAMAGE_PART_RIGHT_SIDE) - IfEq(GB_FLO18_MachineDamage_Right, 0) - Set(GB_FLO18_MachineDamage_Right, 1) - Exec(N(EVS_DamagedRightOnce)) - Goto(LABEL_DONE) - EndIf - EndIf - IfEq(LVar0, DAMAGE_PART_LEFT_SIDE) - IfEq(GB_FLO18_MachineDamage_Left, 1) - Set(GB_FLO18_MachineDamage_Left, 2) - Exec(N(EVS_DamagedLeftTwice)) - Goto(LABEL_DONE) - EndIf - EndIf - IfEq(GB_FLO18_MachineDamage_Left, 2) - IfEq(GB_FLO18_MachineDamage_Right, 1) - Set(GB_FLO18_MachineDamage_Right, 2) - Exec(N(EVS_DamagedRightTwice)) - Goto(LABEL_DONE) - EndIf - EndIf - // check if machine is fully broken (2 damage to each side) - IfEq(GB_FLO18_MachineDamage_Left, 2) - IfEq(GB_FLO18_MachineDamage_Right, 2) - Call(DisablePlayerInput, TRUE) - Call(UseSettingsFrom, CAM_DEFAULT, 40, 0, 0) - Call(SetPanTarget, CAM_DEFAULT, 40, 0, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.5)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Set(GB_FLO18_MachineDamage_Right, 3) - ExecWait(N(EVS_ShakeMachine)) - ExecWait(N(EVS_ShakeMachine)) - ExecWait(N(EVS_ShakeMachine)) - Wait(30) - Call(GetModelCenter, MODEL_o113) - PlayEffect(EFFECT_SMOKE_IMPACT, 0, LVar0, 50, LVar2, 100, 20, 0, 30) - PlayEffect(EFFECT_SMOKE_IMPACT, 0, LVar0, 30, LVar2, 120, 20, 0, 30) - PlayEffect(EFFECT_SMOKE_IMPACT, 0, LVar0, 10, LVar2, 100, 20, 0, 30) - Wait(15) - Thread - Set(LVar3, 6) - UseBuf(Ref(N(SmokeBurstPositions))) - Loop(ARRAY_COUNT(N(SmokeBurstPositions))) - BufRead3(LVar0, LVar1, LVar2) - Call(PlaySoundAt, SOUND_FLO_PUFF_PUFF_SMOKE_BURST, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) - PlayEffect(EFFECT_SMOKE_BURST, 0, LVar0, LVar1, LVar2, 1, 6) - Wait(2) - Add(LVar1, 5) - Call(PlaySoundAt, SOUND_FLO_PUFF_PUFF_SMOKE_BURST, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) - PlayEffect(EFFECT_SMOKE_BURST, 0, LVar0, LVar1, LVar2, 2, 15) - Wait(LVar3) - Add(LVar3, 1) - EndLoop - SetF(LVar4, Float(2.0)) - Loop(2) - UseBuf(Ref(N(SmokeBurstPositions))) - Loop(ARRAY_COUNT(N(SmokeBurstPositions))) - BufRead3(LVar0, LVar1, LVar2) - Call(PlaySoundAt, SOUND_FLO_PUFF_PUFF_SMOKE_BURST, SOUND_SPACE_DEFAULT, LVar0, LVar1, LVar2) - PlayEffect(EFFECT_SMOKE_BURST, 0, LVar0, LVar1, LVar2, 1, 25) - Wait(LVar3) - Add(LVar3, LVar4) - AddF(LVar4, Float(0.5)) - EndLoop - EndLoop - EndThread - Call(PlaySoundAt, SOUND_FLO_PUFF_PUFF_EXPLODE, SOUND_SPACE_DEFAULT, 70, 40, 10) - PlayEffect(EFFECT_RING_BLAST, 0, 70, 40, 10, Float(3.0), 30) - Call(ShakeCam, CAM_DEFAULT, 0, 20, Float(1.0)) - Call(PlaySoundAt, SOUND_FLO_PUFF_PUFF_EXPLODE, SOUND_SPACE_DEFAULT, 0, 30, 30) - PlayEffect(EFFECT_RING_BLAST, 0, 0, 30, 30, Float(4.0), 40) - Call(ShakeCam, CAM_DEFAULT, 0, 20, Float(2.0)) - ExecWait(N(EVS_BreakSmokestack)) - Call(PlaySoundAtCollider, COLLIDER_o126, SOUND_LRAW_PUFF_PUFF_MACHINE | SOUND_ID_TRIGGER_CHANGE_SOUND, SOUND_SPACE_DEFAULT) - Call(FadeOutMusic, 0, 1000) - Call(DisablePlayerPhysics, TRUE) - Wait(30) - ExecWait(N(EVS_BreakAntenna)) - Set(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(GotoMap, Ref("flo_15"), flo_15_ENTRY_1) - Wait(70) - Return - EndIf - EndIf - Label(LABEL_DONE) - Set(MF_MachineBeingDamaged, FALSE) - Return - End -}; - -BombTrigger N(Machine_BombTrigger_01) = { - .pos = { 5.0f, 0.0f, -10.0f }, - .radius = 0.0f -}; - -BombTrigger N(Machine_BombTrigger_02) = { - .pos = { -5.0f, 0.0f, -20.0f }, - .radius = 0.0f -}; - -BombTrigger N(Machine_BombTrigger_03) = { - .pos = { 50.0f, 0.0f, -10.0f }, - .radius = 0.0f -}; - -BombTrigger N(Machine_BombTrigger_04) = { - .pos = { 105.0f, 0.0f, -10.0f }, - .radius = 0.0f -}; - -EvtScript N(EVS_SetupMachine) = { - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(EnableModel, MODEL_o101, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o130, COLLIDER_FLAGS_UPPER_MASK) - Call(EnableModel, MODEL_o115, FALSE) - Call(EnableModel, MODEL_o116, FALSE) - Call(EnableModel, MODEL_o117, FALSE) - Call(EnableModel, MODEL_o118, FALSE) - Call(EnableModel, MODEL_o119, FALSE) - Call(EnableModel, MODEL_o120, FALSE) - Call(EnableModel, MODEL_o121, FALSE) - Call(EnableModel, MODEL_o122, FALSE) - Call(EnableModel, MODEL_o123, FALSE) - Call(EnableModel, MODEL_o124, FALSE) - Call(EnableModel, MODEL_o100, FALSE) - Call(EnableModel, MODEL_o99, FALSE) - Call(EnableModel, MODEL_o125, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o131, COLLIDER_FLAGS_UPPER_MASK) - Return - EndIf - Exec(N(EVS_AnimateMachineLightning)) - Call(EnableModel, MODEL_o101, FALSE) - IfGe(GB_FLO18_MachineDamage_Left, 1) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o130, COLLIDER_FLAGS_UPPER_MASK) - Call(EnableModel, MODEL_o115, FALSE) - Call(EnableModel, MODEL_o116, FALSE) - EndIf - IfGe(GB_FLO18_MachineDamage_Right, 1) - Call(EnableModel, MODEL_o117, FALSE) - Call(EnableModel, MODEL_o118, FALSE) - EndIf - IfGe(GB_FLO18_MachineDamage_Left, 2) - Call(EnableModel, MODEL_o119, FALSE) - EndIf - IfGe(GB_FLO18_MachineDamage_Right, 2) - Call(EnableModel, MODEL_o120, FALSE) - Call(EnableModel, MODEL_o121, FALSE) - Call(EnableModel, MODEL_o122, FALSE) - Call(EnableModel, MODEL_o123, FALSE) - Call(EnableModel, MODEL_o124, FALSE) - EndIf - IfGe(GB_FLO18_MachineDamage_Right, 3) - Call(EnableModel, MODEL_o100, FALSE) - Call(EnableModel, MODEL_o99, FALSE) - Call(EnableModel, MODEL_o125, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o131, COLLIDER_FLAGS_UPPER_MASK) - Return - EndIf - Set(LVar0, DAMAGE_PART_LEFT_SIDE) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_WALL_HAMMER, COLLIDER_o174, 1, 0) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_POINT_BOMB, Ref(N(Machine_BombTrigger_01)), 1, 0) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_POINT_BOMB, Ref(N(Machine_BombTrigger_02)), 1, 0) - Set(LVar0, DAMAGE_PART_RIGHT_SIDE) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_WALL_HAMMER, COLLIDER_o127, 1, 0) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_POINT_BOMB, Ref(N(Machine_BombTrigger_03)), 1, 0) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_POINT_BOMB, Ref(N(Machine_BombTrigger_04)), 1, 0) - Set(LVar0, DAMAGE_PART_LEVER) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_WALL_HAMMER, COLLIDER_o130, 1, 0) - Set(LVar0, DAMAGE_PART_SMOKE_STACK) - BindTrigger(Ref(N(EVS_DamageMachine)), TRIGGER_WALL_HAMMER, COLLIDER_o131, 1, 0) - Set(LVar0, 0) - Loop(16) - Set(LVar1, LVar0) - Add(LVar1, CLONED_MODEL(0)) - Add(LVar0, 1) - Call(CloneModel, MODEL_o101, LVar1) - Call(EnableModel, LVar1, FALSE) - EndLoop - Exec(N(EVS_ManageSmoke)) - Call(EnableTexPanning, MODEL_o92, TRUE) - Call(EnableTexPanning, MODEL_o93, TRUE) - Call(EnableTexPanning, MODEL_o94, TRUE) - Call(EnableTexPanning, MODEL_o95, TRUE) - Call(EnableTexPanning, MODEL_o91, TRUE) - Call(EnableTexPanning, MODEL_o99, TRUE) - Thread - SetF(LVarE, Float(1.0)) - Label(0) - IfGe(GB_FLO18_MachineDamage_Right, 3) - MulF(LVarE, Float(0.953)) - EndIf - AddF(LVarF, LVarE) - IfEq(LVarF, 1080) - SetF(LVarF, 0) - EndIf - Set(LVar0, LVarF) - Div(LVar0, 9) - Mod(LVar0, 4) - Mul(LVar0, 0x4000) - Set(LVar1, LVarF) - Div(LVar1, 4) - Mod(LVar1, 2) - Mul(LVar1, 0x4000) - Set(LVar2, LVarF) - Div(LVar2, 5) - Mod(LVar2, 2) - Mul(LVar2, 0x4000) - Set(LVar3, LVarF) - Div(LVar3, 6) - Mod(LVar3, 2) - Mul(LVar3, 0x4000) - Set(LVar4, LVarF) - Div(LVar4, 2) - Mod(LVar4, 2) - Mul(LVar4, 0x8000) - Set(LVar5, LVarF) - Div(LVar5, 8) - Mod(LVar5, 2) - Mul(LVar5, 0x4000) - Call(SetTexPanOffset, TEX_PANNER_C, TEX_PANNER_MAIN, LVar0, 0) - Call(SetTexPanOffset, TEX_PANNER_D, TEX_PANNER_MAIN, LVar1, 0) - Call(SetTexPanOffset, TEX_PANNER_E, TEX_PANNER_MAIN, LVar2, 0) - Call(SetTexPanOffset, TEX_PANNER_F, TEX_PANNER_MAIN, LVar3, 0) - Call(SetTexPanOffset, TEX_PANNER_B, TEX_PANNER_MAIN, LVar4, 0) - Call(SetTexPanOffset, TEX_PANNER_A, TEX_PANNER_MAIN, LVar5, 0) - Call(SetTexPanOffset, TEX_PANNER_9, TEX_PANNER_MAIN, LVar5, 0) - Wait(1) - Goto(0) - EndThread - Return - End -}; diff --git a/src/world/dead/area_flo/flo_18/flo_18_4_npc.c b/src/world/dead/area_flo/flo_18/flo_18_4_npc.c deleted file mode 100644 index b55861e1338..00000000000 --- a/src/world/dead/area_flo/flo_18/flo_18_4_npc.c +++ /dev/null @@ -1,662 +0,0 @@ -#include "flo_18.h" -#include "sprite/player.h" - -#include "world/common/todo/UnkFunc42.inc.c" - -#include "world/common/enemy/Lakitu.h" -#include "world/common/enemy/YMagikoopa.h" - -NpcSettings N(NpcSettings_Lakitu) = { - .height = 32, - .radius = 24, - .level = ACTOR_LEVEL_LAKITU, - .onHit = &EnemyNpcHit, - .onDefeat = &EnemyNpcDefeat, -}; - -NpcSettings N(NpcSettings_Magikoopa) = { - .height = 34, - .radius = 24, - .level = ACTOR_LEVEL_MAGIKOOPA, - .onHit = &EnemyNpcHit, - .onDefeat = &EnemyNpcDefeat, -}; - -Vec3f N(RetreatPath_Magikoopa)[] = { - { -55.0, 15.0, 35.0 }, - { -155.0, 35.0, 35.0 }, - { -255.0, 75.0, 35.0 }, - { -355.0, 155.0, 35.0 }, - { -455.0, 315.0, 35.0 }, -}; - -Vec3f N(RetreatPath_Lakitu_01)[] = { - { -20.0, 15.0, 30.0 }, - { -120.0, 35.0, 30.0 }, - { -220.0, 75.0, 30.0 }, - { -320.0, 155.0, 30.0 }, - { -420.0, 315.0, 30.0 }, -}; - -Vec3f N(RetreatPath_Lakitu_02)[] = { - { 65.0, 15.0, 30.0 }, - { -35.0, 35.0, 30.0 }, - { -135.0, 75.0, 30.0 }, - { -235.0, 155.0, 30.0 }, - { -335.0, 315.0, 30.0 }, -}; - -Vec3f N(RetreatPath_Lakitu_03)[] = { - { 120.0, 15.0, 30.0 }, - { 20.0, 35.0, 30.0 }, - { -80.0, 75.0, 30.0 }, - { -180.0, 155.0, 30.0 }, - { -280.0, 315.0, 30.0 }, -}; - -EvtScript N(EVS_Scene_LakilesterLikesBeingGood) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePartnerAI, 0) - Call(SetPlayerPos, 30, 0, 50) - Call(InterpPlayerYaw, 90, 0) - Call(SetNpcPos, NPC_PARTNER, 65, 0, 50) - Wait(30) - Call(AdjustCam, CAM_DEFAULT, Float(8.0), 0, 300, Float(19.0), Float(-8.5)) - Call(GetCurrentPartnerID, LVar0) - Call(BringPartnerOut, PARTNER_LAKILESTER) - IfNe(LVar0, PARTNER_LAKILESTER) - Call(SetNpcJumpscale, NPC_PARTNER, Float(0.0)) - Call(GetPlayerPos, LVar1, LVar2, LVar3) - Add(LVar1, 20) - Add(LVar2, 20) - Add(LVar3, 20) - Call(NpcJump0, NPC_PARTNER, LVar1, LVar2, LVar3, 30) - EndIf - Call(PlayerFaceNpc, NPC_PARTNER, FALSE) - Call(NpcFacePlayer, NPC_PARTNER, 0) - Call(SpeakToPlayer, NPC_PARTNER, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 5, MSG_CH6_00C9) - Call(SetPlayerAnimation, ANIM_Mario1_NodYes) - Wait(10) - Call(SetPlayerAnimation, ANIM_Mario1_Still) - Wait(20) - Call(EnablePartnerAI) - Call(PutPartnerAway) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_GangRetreat) = { - Thread - Call(PlaySoundAtNpc, NPC_FlyingMagikoopa, SOUND_FLO_MAGIKOOPA_FLY_AWAY, SOUND_SPACE_DEFAULT) - Call(SetNpcFlagBits, NPC_FlyingMagikoopa, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(InterpNpcYaw, NPC_FlyingMagikoopa, 270, 0) - Call(LoadPath, 60, Ref(N(RetreatPath_Magikoopa)), ARRAY_COUNT(N(RetreatPath_Magikoopa)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_FlyingMagikoopa, LVar1, LVar2, LVar3) - Wait(1) - IfNe(LVar0, 1) - BreakLoop - EndIf - EndLoop - EndThread - Wait(15) - Thread - Call(PlaySoundAtNpc, NPC_Lakitu_01, SOUND_FLO_LAKITU_FLY_AWAY, SOUND_SPACE_DEFAULT) - Call(SetNpcFlagBits, NPC_Lakitu_01, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(InterpNpcYaw, NPC_Lakitu_01, 270, 0) - Call(LoadPath, 60, Ref(N(RetreatPath_Lakitu_01)), ARRAY_COUNT(N(RetreatPath_Lakitu_01)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_01, LVar1, LVar2, LVar3) - Wait(1) - IfNe(LVar0, 1) - BreakLoop - EndIf - EndLoop - EndThread - Thread - Call(SetNpcFlagBits, NPC_Lakitu_02, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(InterpNpcYaw, NPC_Lakitu_02, 270, 0) - Call(LoadPath, 70, Ref(N(RetreatPath_Lakitu_02)), ARRAY_COUNT(N(RetreatPath_Lakitu_02)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_02, LVar1, LVar2, LVar3) - Wait(1) - IfNe(LVar0, 1) - BreakLoop - EndIf - EndLoop - EndThread - Call(PlaySoundAtNpc, NPC_Lakitu_03, SOUND_FLO_LAKITU_FLY_AWAY, SOUND_SPACE_DEFAULT) - Call(SetNpcFlagBits, NPC_Lakitu_03, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(InterpNpcYaw, NPC_Lakitu_03, 270, 0) - Call(LoadPath, 80, Ref(N(RetreatPath_Lakitu_03)), ARRAY_COUNT(N(RetreatPath_Lakitu_03)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Lakitu_03, LVar1, LVar2, LVar3) - Wait(1) - IfNe(LVar0, 1) - BreakLoop - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_ChargeAtPlayer) = { - Wait(5) - Call(IsPlayerWithin, 40, 0, 200, LVar0) - IfEq(LVar0, 0) - Set(LVar3, 45) - Else - Set(LVar3, 25) - EndIf - Set(LVar4, LVar3) - Add(LVar4, -5) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfGt(LVar2, -61) - ChildThread - Call(SetNpcFlagBits, NPC_Lakitu_01, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(NpcMoveTo, NPC_Lakitu_01, LVar0, 55, LVar3) - EndChildThread - ChildThread - Call(SetNpcFlagBits, NPC_Lakitu_02, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(NpcMoveTo, NPC_Lakitu_02, LVar0, 55, LVar3) - EndChildThread - ChildThread - Call(SetNpcFlagBits, NPC_Lakitu_03, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(NpcMoveTo, NPC_Lakitu_03, LVar0, 55, LVar3) - EndChildThread - Wait(LVar4) - EndIf - Return - End -}; - -EvtScript N(EVS_Scene_GangDefeated) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePartnerAI, 0) - Call(GetNpcPos, NPC_PARTNER, LVar0, LVar1, LVar2) - Call(SetNpcPos, NPC_PARTNER, 65, LVar1, 80) - Call(SetNpcYaw, NPC_PARTNER, 270) - Call(AdjustCam, CAM_DEFAULT, Float(8.0), 0, 450, Float(17.0), Float(-6.0)) - Call(SpeakToPlayer, NPC_FlyingMagikoopa, ANIM_FlyingMagikoopa_Yellow_Anim09, ANIM_FlyingMagikoopa_Yellow_Anim01, 0, MSG_CH6_00BB) - Wait(20) - Exec(N(EVS_GangRetreat)) - Wait(80) - Call(AdjustCam, CAM_DEFAULT, Float(8.0), 0, 300, Float(19.0), Float(-8.5)) - Call(GetCurrentPartnerID, LVar0) - Call(BringPartnerOut, PARTNER_LAKILESTER) - IfNe(LVar0, PARTNER_LAKILESTER) - Call(SetNpcJumpscale, NPC_PARTNER, Float(0.0)) - Call(GetPlayerPos, LVar1, LVar2, LVar3) - Add(LVar1, 20) - Add(LVar2, 20) - Add(LVar3, 20) - Call(NpcJump0, NPC_PARTNER, LVar1, LVar2, LVar3, 30) - EndIf - Call(NpcFacePlayer, NPC_PARTNER, 0) - Call(DisablePartnerAI, 0) - Call(SpeakToPlayer, NPC_PARTNER, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 5, MSG_CH6_00C1) - Call(EnablePartnerAI) - Wait(20) - Call(PutPartnerAway) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Set(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Call(DisablePlayerInput, FALSE) - Call(AwaitPlayerApproach, -250, 0, 50) - Call(DisablePlayerInput, TRUE) - Call(GetCurrentPartnerID, LVar0) - Call(BringPartnerOut, PARTNER_LAKILESTER) - IfNe(LVar0, PARTNER_LAKILESTER) - Call(SetNpcJumpscale, NPC_PARTNER, Float(0.0)) - Call(GetPlayerPos, LVar1, LVar2, LVar3) - Add(LVar1, 20) - Add(LVar2, 20) - Add(LVar3, 20) - Call(NpcJump0, NPC_PARTNER, LVar1, LVar2, LVar3, 30) - EndIf - Call(PlayerFaceNpc, NPC_PARTNER, FALSE) - Call(NpcFacePlayer, NPC_PARTNER, 0) - Call(DisablePartnerAI, 0) - Call(SpeakToPlayer, NPC_PARTNER, ANIM_WorldLakilester_Talk, ANIM_WorldLakilester_Idle, 5, MSG_CH6_00C2) - Call(EnablePartnerAI) - Call(PutPartnerAway) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcIdle_Magikoopa) = { - Loop(0) - Call(GetSelfVar, 0, LVar0) - IfNe(LVar0, 0) - BreakLoop - EndIf - Wait(1) - EndLoop - Call(DisablePlayerInput, TRUE) - Wait(10) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, 1000) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-6.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(DisablePlayerInput, FALSE) - Call(StartBossBattle, SONG_SPECIAL_BATTLE) - Return - End -}; - -EvtScript N(EVS_NpcDefeat_Lakitu) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - Call(GetSelfNpcID, LVar0) - IfEq(LVar0, 3) - Call(SetNpcPos, NPC_Magikoopa, NPC_DISPOSE_LOCATION) - Call(SetNpcPos, NPC_FlyingMagikoopa, -55, 15, 35) - Call(GetNpcYaw, NPC_Magikoopa, LVar0) - Call(SetNpcYaw, NPC_FlyingMagikoopa, 90) - Call(InterpPlayerYaw, 180, 0) - Call(SetPlayerPos, 30, 0, 80) - Call(SetNpcYaw, NPC_Lakitu_01, 90) - Call(SetNpcPos, NPC_Lakitu_01, -20, 15, 30) - Call(SetNpcYaw, NPC_Lakitu_02, 270) - Call(SetNpcPos, NPC_Lakitu_02, 65, 15, 30) - Call(SetNpcYaw, NPC_Lakitu_03, 270) - Call(SetNpcPos, NPC_Lakitu_03, 120, 15, 30) - Exec(N(EVS_Scene_GangDefeated)) - EndIf - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_ReactionFacePlayer) = { - Switch(MV_ReactingNpc) - CaseEq(0) - Call(NpcFacePlayer, NPC_Magikoopa, 1) - CaseEq(1) - Call(NpcFacePlayer, NPC_Lakitu_01, 1) - CaseEq(2) - Call(NpcFacePlayer, NPC_Lakitu_02, 1) - CaseEq(3) - Call(NpcFacePlayer, NPC_Lakitu_03, 1) - EndSwitch - Return - End -}; - -EvtScript N(EVS_FirstReactionDialogue) = { - Switch(MV_ReactingNpc) - CaseEq(0) - Call(SpeakToPlayer, NPC_Magikoopa, ANIM_Magikoopa_Yellow_Anim02, ANIM_Magikoopa_Yellow_Anim01, 16, MSG_CH6_00B9) - Call(InterpNpcYaw, NPC_Magikoopa, 90, 0) - CaseEq(1) - Call(SpeakToPlayer, NPC_Lakitu_01, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 16, MSG_CH6_00BF) - Call(InterpNpcYaw, NPC_Lakitu_01, 90, 0) - CaseEq(2) - Call(SpeakToPlayer, NPC_Lakitu_02, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 16, MSG_CH6_00BF) - Call(InterpNpcYaw, NPC_Lakitu_02, 270, 0) - CaseEq(3) - Call(SpeakToPlayer, NPC_Lakitu_03, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 16, MSG_CH6_00BF) - Call(InterpNpcYaw, NPC_Lakitu_03, 270, 0) - EndSwitch - Return - End -}; - -EvtScript N(EVS_SecondReactionDialogue) = { - Switch(MV_ReactingNpc) - CaseEq(0) - Call(SpeakToPlayer, NPC_Magikoopa, ANIM_Magikoopa_Yellow_Anim02, ANIM_Magikoopa_Yellow_Anim01, 16, MSG_CH6_00BA) - CaseEq(1) - Call(SpeakToPlayer, NPC_Lakitu_01, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 16, MSG_CH6_00C0) - CaseEq(2) - Call(SpeakToPlayer, NPC_Lakitu_02, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 16, MSG_CH6_00C0) - CaseEq(3) - Call(SpeakToPlayer, NPC_Lakitu_03, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 16, MSG_CH6_00C0) - EndSwitch - Call(SetNpcVar, NPC_Magikoopa, 0, 1) - Wait(5) - Exec(N(EVS_ChargeAtPlayer)) - Return - End -}; - -EvtScript N(EVS_GenericHitReaction) = { - IfGe(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Return - EndIf - Call(DisablePlayerInput, TRUE) - Call(func_802D2C14, 1) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(AdjustCam, CAM_DEFAULT, Float(8.0), 0, 300, Float(17.0), Float(-6.0)) - ExecWait(N(EVS_ReactionFacePlayer)) - Switch(AB_FLO_GuardedMachineHitCount) - CaseEq(0) - ExecWait(N(EVS_FirstReactionDialogue)) - Add(AB_FLO_GuardedMachineHitCount, 1) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - CaseEq(1) - ExecWait(N(EVS_SecondReactionDialogue)) - EndSwitch - Call(func_802D2C14, 0) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_HitReaction_Magikoopa) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 0) - ExecWait(N(EVS_GenericHitReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -EvtScript N(EVS_HitReaction_Lakitu_01) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 1) - ExecWait(N(EVS_GenericHitReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -EvtScript N(EVS_HitReaction_Lakitu_02) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 2) - ExecWait(N(EVS_GenericHitReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -EvtScript N(EVS_HitReaction_Lakitu_03) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 3) - ExecWait(N(EVS_GenericHitReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -EvtScript N(EVS_GenericBombReaction) = { - IfGe(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Return - EndIf - Call(DisablePlayerInput, TRUE) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(8.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-6.0)) - Call(SetCamDistance, CAM_DEFAULT, 300) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - ExecWait(N(EVS_ReactionFacePlayer)) - IfEq(AB_FLO_GuardedMachineHitCount, 0) - ExecWait(N(EVS_FirstReactionDialogue)) - Add(AB_FLO_GuardedMachineHitCount, 1) - Call(ResetCam, CAM_DEFAULT, Float(4.0)) - Else - ExecWait(N(EVS_SecondReactionDialogue)) - EndIf - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_BombReaction_Magikoopa) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 0) - Call(GetNpcPos, NPC_Magikoopa, LVar0, LVar1, LVar2) - ExecWait(N(EVS_GenericBombReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -EvtScript N(EVS_BombReaction_Lakitu_01) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 1) - Call(GetNpcPos, NPC_Lakitu_01, LVar0, LVar1, LVar2) - ExecWait(N(EVS_GenericBombReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -EvtScript N(EVS_BombReaction_Lakitu_02) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 2) - Call(GetNpcPos, NPC_Lakitu_02, LVar0, LVar1, LVar2) - ExecWait(N(EVS_GenericBombReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -EvtScript N(EVS_BombReaction_Lakitu_03) = { - IfEq(MV_ReactingNpc, -1) - Set(MV_ReactingNpc, 3) - Call(GetNpcPos, NPC_Lakitu_03, LVar0, LVar1, LVar2) - ExecWait(N(EVS_GenericBombReaction)) - Set(MV_ReactingNpc, -1) - EndIf - Return - End -}; - -BombTrigger N(Npc_BombTrigger_01) = { - .pos = { 5.0f, 0.0f, -10.0f }, - .radius = 0.0f -}; - -BombTrigger N(Npc_BombTrigger_02) = { - .pos = { -5.0f, 0.0f, -20.0f }, - .radius = 0.0f -}; - -BombTrigger N(Npc_BombTrigger_03) = { - .pos = { 50.0f, 0.0f, -10.0f }, - .radius = 0.0f -}; - -BombTrigger N(Npc_BombTrigger_04) = { - .pos = { 105.0f, 0.0f, -10.0f }, - .radius = 0.0f -}; - -EvtScript N(EVS_SetupMachineDamageReactions) = { - Set(MV_ReactingNpc, -1) - BindTrigger(Ref(N(EVS_HitReaction_Magikoopa)), TRIGGER_WALL_HAMMER, COLLIDER_o174, 1, 0) - BindTrigger(Ref(N(EVS_HitReaction_Magikoopa)), TRIGGER_WALL_HAMMER, COLLIDER_o130, 1, 0) - BindTrigger(Ref(N(EVS_BombReaction_Magikoopa)), TRIGGER_POINT_BOMB, Ref(N(Npc_BombTrigger_02)), 1, 0) - BindTrigger(Ref(N(EVS_BombReaction_Lakitu_01)), TRIGGER_POINT_BOMB, Ref(N(Npc_BombTrigger_01)), 1, 0) - BindTrigger(Ref(N(EVS_HitReaction_Lakitu_02)), TRIGGER_WALL_HAMMER, COLLIDER_o127, 1, 0) - BindTrigger(Ref(N(EVS_BombReaction_Lakitu_02)), TRIGGER_POINT_BOMB, Ref(N(Npc_BombTrigger_03)), 1, 0) - BindTrigger(Ref(N(EVS_HitReaction_Lakitu_03)), TRIGGER_WALL_HAMMER, COLLIDER_o131, 1, 0) - BindTrigger(Ref(N(EVS_BombReaction_Lakitu_03)), TRIGGER_POINT_BOMB, Ref(N(Npc_BombTrigger_04)), 1, 0) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Lakitu) = { - Switch(AB_FLO_GuardLakituTalkCount) - CaseEq(0) - Call(GetSelfNpcID, LVar0) - IfEq(LVar0, 3) - Call(SpeakToPlayer, NPC_SELF, ANIM_Magikoopa_Yellow_Anim02, ANIM_Magikoopa_Yellow_Anim01, 5, MSG_CH6_00B6) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 5, MSG_CH6_00BC) - EndIf - Add(AB_FLO_GuardLakituTalkCount, 1) - CaseEq(1) - Call(GetSelfNpcID, LVar0) - IfEq(LVar0, 3) - Call(SpeakToPlayer, NPC_SELF, ANIM_Magikoopa_Yellow_Anim02, ANIM_Magikoopa_Yellow_Anim01, 5, MSG_CH6_00B7) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 5, MSG_CH6_00BD) - EndIf - Add(AB_FLO_GuardLakituTalkCount, 1) - CaseEq(2) - Call(AdjustCam, CAM_DEFAULT, Float(8.0), 0, 300, Float(19.0), Float(-9.0)) - Call(GetSelfNpcID, LVar0) - IfEq(LVar0, 3) - Call(SpeakToPlayer, NPC_SELF, ANIM_Magikoopa_Yellow_Anim02, ANIM_Magikoopa_Yellow_Anim01, 5, MSG_CH6_00B8) - Call(NpcFacePlayer, NPC_SELF, 0) - Wait(15) - Call(EndSpeech, NPC_SELF, ANIM_Magikoopa_Yellow_Anim02, ANIM_Magikoopa_Yellow_Anim01, 0) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 5, MSG_CH6_00BE) - Call(NpcFacePlayer, NPC_SELF, 0) - Wait(15) - Call(EndSpeech, NPC_SELF, ANIM_Lakitu_Anim16, ANIM_Lakitu_Anim01, 0) - EndIf - Call(SetNpcVar, NPC_Magikoopa, 0, 1) - Wait(5) - Exec(N(EVS_ChargeAtPlayer)) - Call(BindNpcInteract, NPC_Lakitu_01, 0) - Call(BindNpcInteract, NPC_Lakitu_02, 0) - Call(BindNpcInteract, NPC_Lakitu_03, 0) - Call(BindNpcInteract, NPC_Magikoopa, 0) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_Magikoopa) = { - IfLt(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Magikoopa))) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Lakitu))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakitu))) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_FlyingMagikoopa) = { - IfLt(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakitu))) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakitu_01) = { - IfLt(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Lakitu))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakitu))) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakitu_02) = { - IfLt(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Lakitu))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakitu))) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Lakitu_03) = { - IfLt(GB_StoryProgress, STORY_CH6_DEFEATED_PUFF_PUFF_GUARDS) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Lakitu))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_Lakitu))) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -NpcData N(NpcData_MachineGang)[] = { - { - .id = NPC_Lakitu_01, - .pos = { 0.0f, 15.0f, 60.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Lakitu_01), - .settings = &N(NpcSettings_Lakitu), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000 | ENEMY_FLAG_400000, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - .tattle = MSG_NpcTattle_PuffPuffOperator, - }, - { - .id = NPC_Lakitu_02, - .pos = { 65.0f, 15.0f, 60.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Lakitu_02), - .settings = &N(NpcSettings_Lakitu), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000 | ENEMY_FLAG_400000, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - .tattle = MSG_NpcTattle_PuffPuffOperator, - }, - { - .id = NPC_Lakitu_03, - .pos = { 135.0f, 15.0f, 35.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Lakitu_03), - .settings = &N(NpcSettings_Lakitu), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000 | ENEMY_FLAG_400000, - .drops = LAKITU_DROPS, - .animations = LAKITU_ANIMS, - .tattle = MSG_NpcTattle_PuffPuffOperator, - }, - { - .id = NPC_Magikoopa, - .pos = { -60.0f, 0.0f, 50.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Magikoopa), - .settings = &N(NpcSettings_Magikoopa), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000 | ENEMY_FLAG_400000, - .drops = MAGINO_DROPS, - .animations = MAGIKOOPA_YELLOW_ANIMS, - .tattle = MSG_NpcTattle_PuffPuffOperator, - }, - { - .id = NPC_FlyingMagikoopa, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 270, - .init = &N(EVS_NpcInit_FlyingMagikoopa), - .settings = &N(NpcSettings_Magikoopa), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000 | ENEMY_FLAG_400000, - .drops = MAGINO_DROPS, - .animations = FLYING_MAGIKOOPA_YELLOW_ANIMS, - .tattle = MSG_NpcTattle_PuffPuffOperator, - }, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_MachineGang), 0x1A0B, BTL_FLO_STAGE_06), - {} -}; diff --git a/src/world/dead/area_flo/flo_18/flo_18_5_foliage.c b/src/world/dead/area_flo/flo_18/flo_18_5_foliage.c deleted file mode 100644 index 74ddcc7eb85..00000000000 --- a/src/world/dead/area_flo/flo_18/flo_18_5_foliage.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "flo_18.h" - -#include "common/foliage.inc.c" - -EvtScript N(EVS_SetupFoliage) = { - Return - End -}; diff --git a/src/world/dead/area_flo/flo_19/flo_19.h b/src/world/dead/area_flo/flo_19/flo_19.h deleted file mode 100644 index 1d88c5767a1..00000000000 --- a/src/world/dead/area_flo/flo_19/flo_19.h +++ /dev/null @@ -1,33 +0,0 @@ -// Older version of flo_19 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../flo.h" -#include "mapfs/flo_19_shape.h" -#include "mapfs/flo_19_hit.h" - -enum { - NPC_Dummy_Partner = 0, -}; - -enum { - MV_BeanstalkSceneSync = MapVar(10), - MV_BeanstalkGrowthProgress = MapVar(11), - MV_Distortion_Platform_01 = MapVar(12), - MV_Distortion_Platform_02 = MapVar(13), - MV_Distortion_Platform_03 = MapVar(14), - MV_Distortion_Platform_04 = MapVar(15), -}; - -#define NAMESPACE dead_flo_19 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_MakeEntities); -extern EvtScript N(EVS_SetupClouds); -extern EvtScript N(EVS_SetupBeanstalk); -extern EvtScript N(EVS_Scene_BeanstalkGrowing); -extern EvtScript N(EVS_Enter_Beanstalk); diff --git a/src/world/dead/area_flo/flo_19/flo_19_0_header.c b/src/world/dead/area_flo/flo_19/flo_19_0_header.c deleted file mode 100644 index 8efdd41ce24..00000000000 --- a/src/world/dead/area_flo/flo_19/flo_19_0_header.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "flo_19.h" - -EntryList N(Entrances) = { - [flo_19_ENTRY_0] { 0.0, 0.0, 100.0, 90.0 }, - [flo_19_ENTRY_1] { 460.0, 0.0, 0.0, 270.0 }, - [flo_19_ENTRY_2] { 0.0, -500.0, 0.0, 0.0 }, - [flo_19_ENTRY_3] { 0.0, 0.0, 0.0, 0.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, - .tattle = { MSG_MapTattle_flo_19 }, -}; diff --git a/src/world/dead/area_flo/flo_19/flo_19_1_music.c b/src/world/dead/area_flo/flo_19/flo_19_1_music.c deleted file mode 100644 index 4b39d4f5a0b..00000000000 --- a/src/world/dead/area_flo/flo_19/flo_19_1_music.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "flo_19.h" - -EvtScript N(EVS_SetupMusic) = { - Call(GetEntryID, LVar0) - Switch(LVar0) - CaseOrEq(flo_19_ENTRY_0) - CaseOrEq(flo_19_ENTRY_1) - Call(SetMusicTrack, 0, SONG_CLOUDY_CLIMB, 0, 8) - EndCaseGroup - CaseOrEq(flo_19_ENTRY_2) - CaseOrEq(7) - EndCaseGroup - CaseEq(flo_19_ENTRY_3) - IfNe(AF_FLO_RidingBeanstalk, FALSE) - Else - Call(FadeOutMusic, 1, 3000) - Call(FadeInMusic, 0, SONG_CLOUDY_CLIMB, 0, 3000, 0, 127) - EndIf - EndCaseGroup - EndSwitch - Return - End -}; diff --git a/src/world/dead/area_flo/flo_19/flo_19_2_entity.c b/src/world/dead/area_flo/flo_19/flo_19_2_entity.c deleted file mode 100644 index ecf3e5e6502..00000000000 --- a/src/world/dead/area_flo/flo_19/flo_19_2_entity.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "flo_19.h" - -EvtScript N(EVS_MakeEntities) = { - Call(MakeItemEntity, ITEM_S_JUMP_CHG, -200, 160, -213, ITEM_SPAWN_MODE_FIXED_NEVER_VANISH, GF_FLO19_Item_SJumpChg) - Return - End -}; diff --git a/src/world/dead/area_flo/flo_19/flo_19_3_main.c b/src/world/dead/area_flo/flo_19/flo_19_3_main.c deleted file mode 100644 index 8ea9b7b6f4b..00000000000 --- a/src/world/dead/area_flo/flo_19/flo_19_3_main.c +++ /dev/null @@ -1,79 +0,0 @@ -#include "flo_19.h" -#include "effects.h" - -#include "world/common/atomic/TexturePan.inc.c" - -API_CALLABLE(N(SpawnSunEffect)) { - fx_sun_undeclared(FX_SUN_FROM_RIGHT, 0, 0, 0, 0, 0); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_ExitWalk_flo_21_0) = { - SetGroup(EVT_GROUP_1B) - Call(UseExitHeading, 60, flo_19_ENTRY_1) - Exec(ExitWalk) - Call(GotoMap, 0x80243000, flo_21_ENTRY_0) // raw pointer to missing string "flo_21" - Wait(100) - Return - End -}; - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_flo_21_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deilie, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_CLOUDY_CLIMB) - Call(SetSpriteShading, SHADING_NONE) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - EVT_SETUP_CAMERA_DEFAULT() - Set(GF_MAP_CloudyClimb, TRUE) - ExecWait(N(EVS_MakeEntities)) - Call(ParentColliderToModel, COLLIDER_o117, MODEL_o142) - Call(HidePlayerShadow, TRUE) - Exec(0x80242FD0) // raw pointer to missing N(EVS_SetupBeanstalk) - Exec(0x80241780) // raw pointer to missing N(EVS_SetupClouds) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o122, SURFACE_TYPE_CLOUD) - Call(EnableTexPanning, MODEL_o59, TRUE) - Call(EnableTexPanning, MODEL_o60, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_1) - TEX_PAN_PARAMS_STEP( -120, 0, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 0, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_2) - TEX_PAN_PARAMS_STEP( -90, 0, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 0, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Call(GetEntryID, LVar0) - IfNe(LVar0, flo_19_ENTRY_3) - Set(AF_FLO_RidingBeanstalk, FALSE) - EndIf - Switch(LVar0) - CaseEq(flo_19_ENTRY_0) - Exec(N(EVS_BindExitTriggers)) - CaseEq(flo_19_ENTRY_1) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_deilite, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - CaseEq(flo_19_ENTRY_2) - Exec(0x80242A2C) // raw pointer to missing N(EVS_Scene_BeanstalkGrowing) - Exec(N(EVS_BindExitTriggers)) - CaseEq(flo_19_ENTRY_3) - Exec(0x80241CC4) // raw pointer to missing N(EVS_Enter_Beanstalk) - Exec(N(EVS_BindExitTriggers)) - EndSwitch - ExecWait(N(EVS_SetupMusic)) - IfGe(GB_StoryProgress, STORY_CH6_DESTROYED_PUFF_PUFF_MACHINE) - Call(N(SpawnSunEffect)) - EndIf - Return - End -}; diff --git a/src/world/dead/area_flo/flo_19/flo_19_4_clouds.c b/src/world/dead/area_flo/flo_19/flo_19_4_clouds.c deleted file mode 100644 index 89625c016e2..00000000000 --- a/src/world/dead/area_flo/flo_19/flo_19_4_clouds.c +++ /dev/null @@ -1,202 +0,0 @@ -#include "flo_19.h" - -API_CALLABLE(N(CosInterpAbsMinMax)) { - Bytecode* args = script->ptrReadPos; - s32 outVarTime = *args++; - s32 time = evt_get_variable(script, outVarTime); - s32 outValue = *args++; - f32 min = evt_get_float_variable(script, *args++); - f32 max = evt_get_float_variable(script, *args++); - s32 duration = evt_get_variable(script, *args++); - s32 onlyOnce = evt_get_variable(script, *args++); - f32 phaseOffset = (evt_get_float_variable(script, *args++) / 180.0f) * PI; - f32 delta = fabsf(max - min) / 2; // fabsf here is the only difference between this and CosInterpMinMax - - if (onlyOnce && duration < time) { - time = duration; - evt_set_variable(script, outVarTime, duration); - } - - evt_set_float_variable(script, outValue, - (min + delta) // average value - - (delta * cos_rad(((time * PI) / duration) + phaseOffset))); // perturbation - - return ApiStatus_DONE2; -} - -EvtScript N(EVS_AnimatePlatforms) = { - SetGroup(EVT_GROUP_EF) - Set(LVarF, 0) - Label(0) - SetF(LVar0, Float(-215.4375)) - SetF(LVar1, Float(128.593)) - SetF(LVar2, Float(-200.0)) - AddF(LVar1, MV_Distortion_Platform_01) - Call(TranslateGroup, MODEL_g17, LVar0, LVar1, LVar2) - SetF(LVar0, Float(-79.86)) - Call(N(CosInterpAbsMinMax), LVarF, LVar1, Float(5.0), Float(136.765), 300, 0, 0) - SetF(LVar2, Float(-200.0)) - AddF(LVar1, MV_Distortion_Platform_02) - Call(TranslateGroup, MODEL_g21, LVar0, LVar1, LVar2) - SetF(LVar0, Float(-364.265625)) - Call(N(CosInterpAbsMinMax), LVarF, LVar1, Float(5.0), Float(106.765), 300, 0, 0) - SetF(LVar2, Float(10.0)) - AddF(LVar1, MV_Distortion_Platform_03) - Call(TranslateGroup, MODEL_g22, LVar0, LVar1, LVar2) - SetF(LVar0, Float(295.734)) - Call(N(CosInterpAbsMinMax), LVarF, LVar1, Float(65.0), Float(86.984), 200, 0, 0) - SetF(LVar2, Float(-80.0)) - AddF(LVar1, MV_Distortion_Platform_04) - Call(TranslateGroup, MODEL_g23, LVar0, LVar1, LVar2) - Call(N(CosInterpAbsMinMax), LVarF, LVar2, Float(0.968), Float(1.031), 15, 0, 0) - Call(N(CosInterpAbsMinMax), LVarF, LVar3, Float(1.031), Float(0.968), 15, 0, 0) - SetF(LVar0, MV_Distortion_Platform_01) - SetF(LVar1, MV_Distortion_Platform_01) - MulF(LVar0, Float(-0.02)) - MulF(LVar1, Float(0.04)) - AddF(LVar0, LVar2) - AddF(LVar1, LVar3) - Call(ScaleGroup, MODEL_g17, LVar0, LVar1, 1) - SetF(LVar0, MV_Distortion_Platform_02) - SetF(LVar1, MV_Distortion_Platform_02) - MulF(LVar0, Float(-0.02)) - MulF(LVar1, Float(0.04)) - AddF(LVar0, LVar2) - AddF(LVar1, LVar3) - Call(ScaleGroup, MODEL_g21, LVar0, LVar1, 1) - SetF(LVar0, MV_Distortion_Platform_03) - SetF(LVar1, MV_Distortion_Platform_03) - MulF(LVar0, Float(-0.02)) - MulF(LVar1, Float(0.04)) - AddF(LVar0, LVar2) - AddF(LVar1, LVar3) - Call(ScaleGroup, MODEL_g22, LVar0, LVar1, 1) - SetF(LVar0, MV_Distortion_Platform_04) - SetF(LVar1, MV_Distortion_Platform_04) - MulF(LVar0, Float(-0.02)) - MulF(LVar1, Float(0.04)) - AddF(LVar0, LVar2) - AddF(LVar1, LVar3) - Call(ScaleGroup, MODEL_g23, LVar0, LVar1, 1) - Call(UpdateColliderTransform, COLLIDER_o77) - Call(UpdateColliderTransform, COLLIDER_o78) - Call(UpdateColliderTransform, COLLIDER_o76) - Call(UpdateColliderTransform, COLLIDER_o79) - Add(LVarF, 1) - IfGe(LVarF, 1200) - Set(LVarF, 0) - EndIf - SetF(LVar0, LVarA) - // the rest of the script is cut off halfway through the next SetF cmd - /* - SetF(LVar1, LVarB) - SetF(LVar2, LVarC) - SetF(LVar3, LVarD) - MulF(LVar0, Float(-0.046875)) - MulF(LVar1, Float(-0.09375)) - MulF(LVar2, Float(-0.09375)) - MulF(LVar3, Float(-0.09375)) - AddF(MV_Distortion_Platform_01, LVar0) - AddF(MV_Distortion_Platform_02, LVar1) - AddF(MV_Distortion_Platform_03, LVar2) - AddF(MV_Distortion_Platform_04, LVar3) - MulF(MV_Distortion_Platform_01, Float(0.843)) - MulF(MV_Distortion_Platform_02, Float(0.843)) - MulF(MV_Distortion_Platform_03, Float(0.843)) - MulF(MV_Distortion_Platform_04, Float(0.843)) - AddF(LVarA, MV_Distortion_Platform_01) - AddF(LVarB, MV_Distortion_Platform_02) - AddF(LVarC, MV_Distortion_Platform_03) - AddF(LVarD, MV_Distortion_Platform_04) - Wait(1) - Goto(0) - Return - End - */ -}; - -// half of SetF(LVar1, LVarB) -s32 N(EVS_AnimatePlatforms_Fragment)[] = { - EVT_OP_SETF, 2, -}; - -// remaining data is truncated -/* -EvtScript N(EVS_AddPlayerWeight_Platform_01) = { - Thread - AddF(MV_Distortion_Platform_01, Float(-1.5)) - Wait(1) - AddF(MV_Distortion_Platform_01, Float(-1.5)) - EndThread - Return - End -}; - -EvtScript N(EVS_AddPlayerWeight_Platform_02) = { - Thread - AddF(MV_Distortion_Platform_02, Float(-1.5)) - Wait(1) - AddF(MV_Distortion_Platform_02, Float(-1.5)) - EndThread - Return - End -}; - -EvtScript N(EVS_AddPlayerWeight_Platform_03) = { - Thread - AddF(MV_Distortion_Platform_03, Float(-1.5)) - Wait(1) - AddF(MV_Distortion_Platform_03, Float(-1.5)) - EndThread - Return - End -}; - -EvtScript N(EVS_AddPlayerWeight_Platform_04) = { - Thread - AddF(MV_Distortion_Platform_04, Float(-1.5)) - Wait(1) - AddF(MV_Distortion_Platform_04, Float(-1.5)) - EndThread - Return - End -}; - -EvtScript N(EVS_SetupClouds) = { - Call(ParentColliderToModel, COLLIDER_o77, MODEL_g17) - Call(ParentColliderToModel, COLLIDER_o78, MODEL_g21) - Call(ParentColliderToModel, COLLIDER_o76, MODEL_g22) - Call(ParentColliderToModel, COLLIDER_o79, MODEL_g23) - Call(SetModelFlags, MODEL_g17, MODEL_FLAG_USE_CAMERA_UNK_MATRIX, TRUE) - Call(SetModelFlags, MODEL_g21, MODEL_FLAG_USE_CAMERA_UNK_MATRIX, TRUE) - Call(SetModelFlags, MODEL_g22, MODEL_FLAG_USE_CAMERA_UNK_MATRIX, TRUE) - Call(SetModelFlags, MODEL_g23, MODEL_FLAG_USE_CAMERA_UNK_MATRIX, TRUE) - Exec(N(EVS_AnimatePlatforms)) - BindTrigger(Ref(N(EVS_AddPlayerWeight_Platform_01)), TRIGGER_FLOOR_TOUCH, COLLIDER_o77, 1, 0) - BindTrigger(Ref(N(EVS_AddPlayerWeight_Platform_02)), TRIGGER_FLOOR_TOUCH, COLLIDER_o78, 1, 0) - BindTrigger(Ref(N(EVS_AddPlayerWeight_Platform_03)), TRIGGER_FLOOR_TOUCH, COLLIDER_o76, 1, 0) - BindTrigger(Ref(N(EVS_AddPlayerWeight_Platform_04)), TRIGGER_FLOOR_TOUCH, COLLIDER_o79, 1, 0) - Thread - Set(LVarF, 0) - Label(0) - Call(N(CosInterpAbsMinMax), LVarF, LVar0, Float(0.968), Float(1.031), 15, 0, 0) - Call(N(CosInterpAbsMinMax), LVarF, LVar1, Float(1.031), Float(0.968), 15, 0, 0) - Call(ScaleModel, MODEL_o73, LVar1, LVar0, 1) - Call(ScaleModel, MODEL_o74, LVar1, LVar0, 1) - Call(ScaleModel, MODEL_o75, LVar0, LVar1, 1) - Call(ScaleModel, MODEL_o76, LVar0, LVar1, 1) - Call(ScaleModel, MODEL_o77, LVar0, LVar1, 1) - Call(ScaleModel, MODEL_o78, LVar1, LVar0, 1) - Call(ScaleModel, MODEL_o45, LVar0, LVar1, 1) - Call(ScaleModel, MODEL_o56, LVar0, LVar1, 1) - Add(LVarF, 1) - IfGe(LVarF, 30) - Set(LVarF, 0) - EndIf - Wait(1) - Goto(0) - EndThread - Return - End -}; -*/ diff --git a/src/world/dead/area_flo/flo_19/flo_19_5_beanstalk.c b/src/world/dead/area_flo/flo_19/flo_19_5_beanstalk.c deleted file mode 100644 index 417a9c0cbb7..00000000000 --- a/src/world/dead/area_flo/flo_19/flo_19_5_beanstalk.c +++ /dev/null @@ -1,396 +0,0 @@ -#include "flo_19.h" -#include "effects.h" -#include "sprite/player.h" - -API_CALLABLE(N(GetPlayerAngles)) { - Bytecode* args = script->ptrReadPos; - s32 var1 = *args++; - s32 var2 = *args++; - - evt_set_variable(script, var1, gPlayerStatus.spriteFacingAngle); - evt_set_variable(script, var2, gPlayerStatus.targetYaw); - - return ApiStatus_DONE2; -} - -API_CALLABLE(N(PlayerRideBeanstalk)) { - f32 temp = evt_get_variable(NULL, script->varTable[2]); - f32 dist = dist2D(0.0f, 0.0f, script->varTable[9], script->varTable[11]); - f32 angle = atan2(0.0f, 0.0f, script->varTable[9], script->varTable[11]); - f32 clamped = clamp_angle(angle - temp); - - temp = sin_deg(clamped); - gPlayerStatus.pos.x = (dist * temp) + 0.0f; - gPlayerStatus.pos.y = evt_get_variable(NULL, script->varTable[10]) + evt_get_variable(NULL, script->varTable[3]); - temp = cos_deg(clamped); - gPlayerStatus.pos.z = 0.0f - (dist * temp); - - return ApiStatus_DONE2; -} - -API_CALLABLE(N(PartnerRideBeanstalk)) { - Npc* npc = get_npc_by_index(NPC_Dummy_Partner); - f32 temp = evt_get_variable(NULL, script->varTable[2]); - f32 dist = dist2D(0.0f, 0.0f, script->varTable[12], script->varTable[14]); - f32 angle = atan2(0.0f, 0.0f, script->varTable[12], script->varTable[14]); - f32 clamped = clamp_angle(angle - temp); - - temp = sin_deg(clamped); - npc->pos.x = (dist * temp) + 0.0f; - npc->pos.y = evt_get_variable(NULL, script->varTable[13]) + evt_get_variable(NULL, script->varTable[3]); - temp = cos_deg(clamped); - npc->pos.z = 0.0f - (dist * temp); - - return ApiStatus_DONE2; -} - -API_CALLABLE(N(SetScreenFadeAmount)) { - set_screen_overlay_params_back(OVERLAY_VIEWPORT_COLOR, script->varTable[0]); - return ApiStatus_DONE2; -} - -#include "common/CosInterpMinMax.inc.c" - -// all data in this file is truncated -/* -EvtScript N(EVS_FadeOutToBlack) = { - Set(LVar0, 0) - Label(10) - Call(N(SetScreenFadeAmount)) - Add(LVar0, 25) - Wait(1) - IfLt(LVar0, 255) - Goto(10) - EndIf - Set(LVar0, 255) - Call(N(SetScreenFadeAmount)) - Wait(1) - Return - End -}; - -EvtScript N(EVS_FadeInFromBlack) = { - Set(LVar0, 255) - Label(10) - Call(N(SetScreenFadeAmount)) - Sub(LVar0, 25) - Wait(1) - IfGt(LVar0, 0) - Goto(10) - EndIf - Set(LVar0, 0) - Call(N(SetScreenFadeAmount)) - Wait(1) - Return - End -}; - -EvtScript N(EVS_SetExteriorVineGrowth) = { - Call(TranslateGroup, MODEL_g83, 0, LVar0, 0) - Call(TranslateGroup, MODEL_ha, 0, LVar0, 0) - SetF(LVar1, LVar0) - MulF(LVar1, Float(-12.0)) - Call(RotateGroup, MODEL_g83, LVar1, 0, 1, 0) - Call(RotateGroup, MODEL_ha, LVar1, 0, 1, 0) - Return - End -}; - -EvtScript N(EVS_SetInteriorVineGrowth) = { - Call(TranslateGroup, MODEL_g84, 0, LVar0, 0) - SetF(LVar1, LVar0) - MulF(LVar1, Float(-12.0)) - Call(RotateGroup, MODEL_g84, LVar1, 0, 1, 0) - Return - End -}; - -EvtScript N(EVS_Enter_Beanstalk) = { - Call(DisablePlayerInput, TRUE) - Call(SetPlayerActionState, ACTION_STATE_LAND) - Call(DisablePartnerAI, 0) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o108, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o122, COLLIDER_FLAGS_UPPER_MASK) - Call(SetCamType, CAM_DEFAULT, 1, FALSE) - Call(UseSettingsFrom, CAM_DEFAULT, 0, 0, 0) - Call(SetPanTarget, CAM_DEFAULT, 0, 0, 0) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(11.0)) - Call(SetCamPosA, CAM_DEFAULT, 0, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(EnableGroup, MODEL_g16, FALSE) - Call(EnableGroup, MODEL_g2, FALSE) - Call(EnableGroup, MODEL_g3, FALSE) - Call(EnableGroup, MODEL_g19, FALSE) - Call(EnableGroup, MODEL_g93, FALSE) - Call(EnableGroup, MODEL_g15, FALSE) - Call(EnableGroup, MODEL_g25, FALSE) - Set(LVar9, Float(45.0)) - Set(LVarA, Float(28.0)) - Set(LVarB, Float(5.0)) - Set(LVarC, Float(60.0)) - Set(LVarD, Float(28.0)) - Set(LVarE, Float(10.0)) - Thread - Wait(5) - Call(SetNpcAnimation, NPC_PARTNER, PARTNER_ANIM_IDLE) - Call(SetPlayerAnimation, ANIM_Mario1_Walk) - Switch(AF_FLO_BeanstalkFacingRight) - CaseEq(0) - Call(InterpPlayerYaw, 90, 0) - Call(InterpNpcYaw, NPC_PARTNER, 90, 0) - CaseEq(1) - Call(InterpPlayerYaw, 270, 0) - Call(InterpNpcYaw, NPC_PARTNER, 270, 0) - EndSwitch - EndThread - Call(TranslateModel, MODEL_o142, Float(1.313), Float(3.0), Float(-0.56640625)) - Call(UpdateColliderTransform, COLLIDER_o117) - Thread - Set(AF_FLO_BeanstalkFadedOut, FALSE) - Call(SetPlayerAnimation, ANIM_Mario1_Walk) - Wait(200) - ExecWait(N(EVS_FadeOutToBlack)) - Set(AF_FLO_BeanstalkFadedOut, TRUE) - Wait(10) - Call(EnableGroup, MODEL_g16, TRUE) - Call(EnableGroup, MODEL_g2, TRUE) - Call(EnableGroup, MODEL_g3, TRUE) - Call(EnableGroup, MODEL_g19, TRUE) - Call(EnableGroup, MODEL_g93, TRUE) - Call(EnableGroup, MODEL_g15, TRUE) - Call(EnableGroup, MODEL_g25, TRUE) - Call(SetCamDistance, CAM_DEFAULT, 450) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(-6.0)) - Call(SetCamPosA, CAM_DEFAULT, 0, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - ExecWait(N(EVS_FadeInFromBlack)) - Wait(20) - Set(AF_FLO_BeanstalkFadedOut, FALSE) - EndThread - Set(LVarF, 0) - Loop(344) - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVar0, -210, 0, 344, 0, 0) - SetF(LVar1, LVar0) - MulF(LVar1, Float(-3.0)) - Call(TranslateModel, MODEL_o142, Float(1.313), LVar0, Float(-0.56640625)) - Call(RotateModel, MODEL_o142, LVar1, 0, 1, 0) - Call(UpdateColliderTransform, COLLIDER_o117) - SetF(LVar2, LVar0) - MulF(LVar2, Float(-3.0)) - SetF(LVar3, LVar0) - Call(N(PlayerRideBeanstalk)) - Call(N(PartnerRideBeanstalk)) - Label(11) - Wait(1) - IfEq(AF_FLO_BeanstalkFadedOut, TRUE) - Goto(11) - EndIf - EndLoop - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o108, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_o122, COLLIDER_FLAGS_UPPER_MASK) - Call(EnablePartnerAI) - Call(ClearPartnerMoveHistory, NPC_PARTNER) - Call(SetPlayerJumpscale, Float(1.0)) - Call(PlayerJump, 100, 0, 60, 20) - Call(SetPlayerActionState, ACTION_STATE_LAND) - Call(InterpPlayerYaw, 90, 0) - Wait(5) - Set(AF_FLO_RidingBeanstalk, FALSE) - Call(StopSound, SOUND_FLO_RIDE_BEANSTALK_UP_LOOP) - ExecWait(N(EVS_SetupMusic)) - Call(ResetCam, CAM_DEFAULT, Float(1.0)) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_Exit_Beanstalk) = { - IfEq(AF_FLO_RidingBeanstalk, FALSE) - Call(DisablePlayerInput, TRUE) - Call(InterruptUsePartner) - Wait(15) - Call(DisablePartnerAI, 0) - Set(AF_FLO_RidingBeanstalk, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o108, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_o122, COLLIDER_FLAGS_UPPER_MASK) - Set(LVar9, Float(45.0)) - Set(LVarA, Float(28.0)) - Set(LVarB, Float(5.0)) - Set(LVarC, Float(60.0)) - Set(LVarD, Float(28.0)) - Set(LVarE, Float(10.0)) - Call(PlayerMoveTo, LVar9, LVarB, 8) - Call(SetNpcJumpscale, NPC_PARTNER, Float(0.0)) - Call(NpcJump0, NPC_PARTNER, LVarC, LVarD, LVarE, 5) - Call(PlaySound, SOUND_FLO_RIDE_BEANSTALK_DOWN_LOOP) - Call(SetMusicTrack, 0, SONG_MAGIC_BEANSTALK, 1, 8) - Call(SetNpcAnimation, NPC_PARTNER, PARTNER_ANIM_IDLE) - Call(SetPlayerAnimation, ANIM_Mario1_Walk) - Call(N(GetPlayerAngles), LVar3, LVar4) - Switch(LVar4) - CaseLt(90) - Set(AF_FLO_BeanstalkFacingRight, FALSE) - Call(InterpPlayerYaw, 90, 0) - Call(InterpNpcYaw, NPC_PARTNER, 90, 0) - CaseGe(270) - Set(AF_FLO_BeanstalkFacingRight, TRUE) - Call(InterpPlayerYaw, 270, 0) - Call(InterpNpcYaw, NPC_PARTNER, 270, 0) - EndSwitch - Call(TranslateModel, MODEL_o142, Float(1.313), Float(3.0), Float(-0.56640625)) - Call(UpdateColliderTransform, COLLIDER_o117) - Set(MV_BeanstalkSceneSync, FALSE) - Thread - Set(AF_FLO_BeanstalkFadedOut, FALSE) - Wait(120) - Set(AF_FLO_BeanstalkFadedOut, TRUE) - Wait(20) - ExecWait(N(EVS_FadeOutToBlack)) - Wait(10) - Call(EnableGroup, MODEL_g16, FALSE) - Call(EnableGroup, MODEL_g2, FALSE) - Call(EnableGroup, MODEL_g3, FALSE) - Call(EnableGroup, MODEL_g19, FALSE) - Call(EnableGroup, MODEL_g93, FALSE) - Call(EnableGroup, MODEL_g15, FALSE) - Call(EnableGroup, MODEL_g25, FALSE) - Call(SetCamType, CAM_DEFAULT, 1, FALSE) - Call(UseSettingsFrom, CAM_DEFAULT, 0, 0, 0) - Call(SetPanTarget, CAM_DEFAULT, 0, 0, 0) - Call(SetCamDistance, CAM_DEFAULT, 350) - Call(SetCamPitch, CAM_DEFAULT, Float(17.0), Float(7.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Set(AF_FLO_BeanstalkFadedOut, FALSE) - ExecWait(N(EVS_FadeInFromBlack)) - EndThread - Thread - Set(LVarF, 0) - Loop(344) - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVar0, 0, -210, 344, 0, 0) - SetF(LVar1, LVar0) - MulF(LVar1, Float(-3.0)) - Call(TranslateModel, MODEL_o142, Float(1.313), LVar0, Float(-0.56640625)) - Call(RotateModel, MODEL_o142, LVar1, 0, 1, 0) - Call(UpdateColliderTransform, COLLIDER_o117) - SetF(LVar2, LVar0) - MulF(LVar2, Float(-3.0)) - SetF(LVar3, LVar0) - Call(N(PlayerRideBeanstalk)) - Call(N(PartnerRideBeanstalk)) - IfEq(LVarF, 300) - Set(MV_BeanstalkSceneSync, TRUE) - EndIf - Label(11) - Wait(1) - IfEq(AF_FLO_BeanstalkFadedOut, TRUE) - Goto(11) - EndIf - EndLoop - EndThread - Label(10) - IfEq(MV_BeanstalkSceneSync, FALSE) - Wait(1) - Goto(10) - EndIf - Call(GotoMap, Ref("flo_00"), flo_00_ENTRY_8) - Wait(100) - EndIf - Return - End -}; - -EvtScript N(EVS_Scene_BeanstalkGrowing) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(SetPlayerActionState, ACTION_STATE_LAND) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_GRAVITY, FALSE) - Call(EnableModel, MODEL_o142, FALSE) - Call(EnableGroup, MODEL_g16, FALSE) - Call(EnableGroup, MODEL_g2, FALSE) - Call(EnableGroup, MODEL_g3, FALSE) - Call(EnableGroup, MODEL_g19, FALSE) - Call(EnableGroup, MODEL_g93, FALSE) - Call(EnableGroup, MODEL_g15, FALSE) - Call(EnableGroup, MODEL_g25, FALSE) - Call(SetCamType, CAM_DEFAULT, 1, FALSE) - Call(UseSettingsFrom, CAM_DEFAULT, 0, 0, 0) - Call(SetPanTarget, CAM_DEFAULT, 0, 0, 0) - Call(SetCamDistance, CAM_DEFAULT, 800) - Call(SetCamPitch, CAM_DEFAULT, Float(-20.0), Float(8.5)) - Call(SetCamPosA, CAM_DEFAULT, 0, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Set(LVarF, 100) - Set(MV_BeanstalkGrowthProgress, LVarF) - Set(AF_FLO_BeanstalkGrowing, FALSE) - Loop(400) - IfEq(AF_FLO_BeanstalkGrowing, FALSE) - IfGt(MV_BeanstalkGrowthProgress, 400) - Call(EnableGroup, MODEL_tuta, FALSE) - Call(EnableGroup, MODEL_ha, FALSE) - Call(EnableGroup, MODEL_g16, TRUE) - Call(EnableGroup, MODEL_g2, TRUE) - Call(EnableGroup, MODEL_g3, TRUE) - Call(EnableGroup, MODEL_g19, TRUE) - Call(EnableGroup, MODEL_g93, TRUE) - Call(EnableGroup, MODEL_g15, TRUE) - Call(EnableGroup, MODEL_g25, TRUE) - Call(SetCamDistance, CAM_DEFAULT, 1000) - Call(SetCamPitch, CAM_DEFAULT, Float(45.0), Float(-3.0)) - Call(SetCamPosA, CAM_DEFAULT, 0, 0) - Call(SetCamPosB, CAM_DEFAULT, 0, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Set(LVarF, 150) - Thread - Wait(5) - Call(EnableGroup, MODEL_tuta, TRUE) - Call(EnableGroup, MODEL_ha, TRUE) - Call(EnableModel, MODEL_o142, FALSE) - Wait(48) - PlayEffect(EFFECT_CLOUD_PUFF, 0, 22, 15, 0) - Wait(10) - PlayEffect(EFFECT_CLOUD_PUFF, 0, 22, 15, 0) - EndThread - Set(AF_FLO_BeanstalkGrowing, TRUE) - EndIf - EndIf - Add(LVarF, 1) - Call(N(CosInterpMinMax), LVarF, LVar0, -350, 0, 400, 0, 0) - SetF(MV_BeanstalkGrowthProgress, LVarF) - MulF(MV_BeanstalkGrowthProgress, Float(1.6)) - SetF(LVar2, LVar0) - MulF(LVar2, Float(1.0)) - SetF(LVar0, LVar2) - Exec(N(EVS_SetExteriorVineGrowth)) - SetF(LVar2, LVar0) - MulF(LVar2, Float(1.0)) - SetF(LVar0, LVar2) - Exec(N(EVS_SetInteriorVineGrowth)) - Wait(1) - EndLoop - Wait(15) - Set(GB_StoryProgress, STORY_CH6_GREW_MAGIC_BEANSTALK) - Call(GotoMap, Ref("flo_00"), flo_00_ENTRY_7) - Return - End -}; - -EvtScript N(EVS_SetupBeanstalk) = { - BindTrigger(Ref(N(EVS_Exit_Beanstalk)), TRIGGER_FLOOR_TOUCH, COLLIDER_o117, 1, 0) - Return - End -}; -*/ diff --git a/src/world/dead/area_kzn/kzn.h b/src/world/dead/area_kzn/kzn.h deleted file mode 100644 index 7cf084931f4..00000000000 --- a/src/world/dead/area_kzn/kzn.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef _WORLD_AREA_KZN_KZN_H_ -#define _WORLD_AREA_KZN_KZN_H_ - -enum { - AB_KZN_LastZiplineNpc1 = AreaByte(0), - AB_KZN_LastZiplineNpc2 = AreaByte(1), -}; - -enum { - AF_KZN_TrompRollingDone = AreaFlag(2), - AF_KZN_TrompHitPlayer = AreaFlag(3), - AF_KZN_Tromp1_ShakingDone = AreaFlag(4), - AF_KZN_Tromp2_HitKolorado = AreaFlag(5), - AF_KZN_Tromp2_ShakingDone = AreaFlag(6), - AF_KZN_Tromp2_StopPlayer = AreaFlag(7), - AF_KZN_BossRoomFloorBroken = AreaFlag(8), - AF_KZN20_MisstarFlightDone = AreaFlag(9), - AF_KZN20_SceneSync = AreaFlag(10), - AF_KZN_RumblingIntensified = AreaFlag(11), - AF_KZN23_SceneStarted = AreaFlag(12), - AF_KZN23_MessageClosed = AreaFlag(13), - AF_KZN23_GrabbedKolorado = AreaFlag(14), - AF_KZN23_GrabbedPlayer = AreaFlag(15), - AF_KZN22_FlewAway = AreaFlag(16), - AF_KZN23_UseAlternateSound = AreaFlag(17), - AF_KZN04_FireBar1_Coins = AreaFlag(18), - AF_KZN04_FireBar2_Coins = AreaFlag(19), - AF_KZN04_FireBar3_Coins = AreaFlag(20), - AF_KZN11_FireBar1_Coins = AreaFlag(21), - AF_KZN11_FireBar2_Coins = AreaFlag(22), - AF_KZN11_FireBar3_Coins = AreaFlag(23), -}; - -#endif diff --git a/src/world/dead/area_kzn/kzn_11/kzn_11.h b/src/world/dead/area_kzn/kzn_11/kzn_11.h deleted file mode 100644 index 2d2ea0e5307..00000000000 --- a/src/world/dead/area_kzn/kzn_11/kzn_11.h +++ /dev/null @@ -1,34 +0,0 @@ -// Older version of kzn_11 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../kzn.h" -#include "mapfs/kzn_11_shape.h" -#include "mapfs/kzn_11_hit.h" - -enum { - NPC_FireBar_1A = 0, - NPC_FireBar_1B = 1, - NPC_FireBar_1C = 2, - NPC_FireBar_1D = 3, - NPC_FireBar_2A = 5, - NPC_FireBar_2B = 6, - NPC_FireBar_2C = 7, - NPC_FireBar_2D = 8, - NPC_FireBar_3A = 10, - NPC_FireBar_3B = 11, - NPC_FireBar_3C = 12, - NPC_FireBar_3D = 13, - NPC_Bubble_01 = 100, - NPC_Bubble_02 = 101, -}; - -#define NAMESPACE dead_kzn_11 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_UpdateLeftPlatform); -extern EvtScript N(EVS_UpdateRightPlatform); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_kzn/kzn_11/kzn_11_0_header.c b/src/world/dead/area_kzn/kzn_11/kzn_11_0_header.c deleted file mode 100644 index c5f478f9ae5..00000000000 --- a/src/world/dead/area_kzn/kzn_11/kzn_11_0_header.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "kzn_11.h" - -EntryList N(Entrances) = { - [kzn_11_ENTRY_0] { -810.0, 20.0, 0.0, 90.0 }, - [kzn_11_ENTRY_1] { 810.0, 20.0, 0.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .tattle = { MSG_MapTattle_kzn_11 }, -}; diff --git a/src/world/dead/area_kzn/kzn_11/kzn_11_1_main.c b/src/world/dead/area_kzn/kzn_11/kzn_11_1_main.c deleted file mode 100644 index d7062e29fa0..00000000000 --- a/src/world/dead/area_kzn/kzn_11/kzn_11_1_main.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "kzn_11.h" - -#include "world/area_kzn/common/SmokeTexPanners.inc.c" - -EvtScript N(EVS_ExitWalk_kzn_10_1) = EVT_EXIT_WALK(60, kzn_11_ENTRY_0, "kzn_10", kzn_10_ENTRY_1); -EvtScript N(EVS_ExitWalk_kzn_17_0) = EVT_EXIT_WALK(60, kzn_11_ENTRY_1, "kzn_17", kzn_17_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_kzn_10_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deili1, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_kzn_17_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deili2, 1, 0) - Return - End -}; - -EvtScript N(EVS_StartTexPanners_Lava) = { - SetGroup(EVT_GROUP_00) - Call(SetTexPanner, MODEL_yougan1_1, TEX_PANNER_2) - Call(EnableTexPanning, MODEL_toro, TRUE) - Call(EnableTexPanning, MODEL_poko, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_2) - TEX_PAN_PARAMS_STEP( 200, 0, 400, -100) - TEX_PAN_PARAMS_FREQ( 1, 0, 1, 1) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_5) - TEX_PAN_PARAMS_STEP( 300, -500, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - // animate lava bubbles (real ones, not the enemies) - Set(LVar0, 0) - Loop(0) - Call(SetTexPanOffset, TEX_PANNER_D, TEX_PANNER_MAIN, LVar0, 0) - Add(LVar0, 0x8000) - Wait(6) - EndLoop - EndThread - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o80, .pos = { -760.0, 20.0, 0.0 }}, - { .colliderID = COLLIDER_o211, .pos = { -400.0, 20.0, 0.0 }}, - { .colliderID = COLLIDER_o212, .pos = { 230.0, 20.0, 0.0 }}, - { .colliderID = COLLIDER_o83, .pos = { 790.0, 20.0, 0.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_MT_LAVALAVA) - Call(SetSpriteShading, SHADING_KZN_11) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, TRUE, Ref(N(DefaultNPCs))) - Call(SetMusicTrack, 0, SONG_MT_LAVALAVA, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_1) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - Wait(1) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o175, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o176, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o177, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o178, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o156, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o179, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o180, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o181, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_pp1, SURFACE_TYPE_LAVA) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_pp2, SURFACE_TYPE_LAVA) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Exec(N(EVS_StartTexPanners_Lava)) - Set(LVar0, MODEL_kem1) - Exec(N(EVS_StartTexPanner_SmokeLeft)) - Set(LVar0, MODEL_kem2) - Exec(N(EVS_StartTexPanner_SmokeRight)) - Exec(N(EVS_UpdateLeftPlatform)) - Exec(N(EVS_UpdateRightPlatform)) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_11/kzn_11_2_platforms.c b/src/world/dead/area_kzn/kzn_11/kzn_11_2_platforms.c deleted file mode 100644 index 85733123bf3..00000000000 --- a/src/world/dead/area_kzn/kzn_11/kzn_11_2_platforms.c +++ /dev/null @@ -1,170 +0,0 @@ -#include "kzn_11.h" - -API_CALLABLE(N(AddPushVelocity)) { - Bytecode* args = script->ptrReadPos; - s32 velX = evt_get_variable(script, *args++); - s32 floorA = evt_get_variable(script, *args++); - s32 floorB = evt_get_variable(script, *args++); - PlayerStatus* playerStatus = &gPlayerStatus; - CollisionStatus* collisionStatus= &gCollisionStatus; - Npc* partner; - - if ((collisionStatus->curFloor == floorA) || (collisionStatus->lastTouchedFloor == floorA) - || (collisionStatus->curFloor == floorB) || (collisionStatus->lastTouchedFloor == floorB)) { - playerStatus->pushVel.x = velX; - } - if (gPlayerData.curPartner != PARTNER_NONE){ - partner = get_npc_unsafe(NPC_PARTNER); - if ((partner->curFloor == floorA) || (partner->curFloor == floorB)) { - partner->pos.x += velX; - } - } - return ApiStatus_DONE2; -} - -API_CALLABLE(N(GetCurrentFloor)) { - Bytecode* args = script->ptrReadPos; - s32 outVar = *args++; - - evt_set_variable(script, outVar, gCollisionStatus.curFloor); - return ApiStatus_DONE2; -} - -API_CALLABLE(N(IsPartnerLakilester)) { - if (gPartnerStatus.actingPartner == PARTNER_LAKILESTER) { - script->varTable[9] = TRUE; - } else { - script->varTable[9] = FALSE; - } - return ApiStatus_DONE2; -} - -EvtScript N(EVS_UpdateLeftPlatform) = { - SetGroup(EVT_GROUP_0B) - Call(ParentColliderToModel, COLLIDER_o67, MODEL_o67) - Call(ParentColliderToModel, COLLIDER_o68, MODEL_o68) - Call(ParentColliderToModel, COLLIDER_o69, MODEL_o69) - Set(LVar0, 60) - Set(LVar3, 0) - Loop(0) - Call(MakeLerp, LVar0, -60, 120, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateGroup, MODEL_g7, LVar0, 0, 0) - Call(UpdateColliderTransform, COLLIDER_o67) - Call(UpdateColliderTransform, COLLIDER_o68) - Call(UpdateColliderTransform, COLLIDER_o69) - Set(LVar4, LVar0) - Sub(LVar4, LVar3) - Set(LVar3, LVar0) - Call(N(AddPushVelocity), LVar4, 26, 25) - IfLt(LVar0, -45) - Call(N(IsPartnerLakilester)) - IfEq(LVar9, 1) - Call(N(GetCurrentFloor), LVar2) - IfEq(LVar2, COLLIDER_pp1) - BreakLoop - EndIf - EndIf - EndIf - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Wait(20) - Call(MakeLerp, LVar0, 60, 120, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateGroup, MODEL_g7, LVar0, 0, 0) - Call(UpdateColliderTransform, COLLIDER_o67) - Call(UpdateColliderTransform, COLLIDER_o68) - Call(UpdateColliderTransform, COLLIDER_o69) - Set(LVar4, LVar0) - Sub(LVar4, LVar3) - Set(LVar3, LVar0) - Call(N(AddPushVelocity), LVar4, 26, 25) - IfGt(LVar0, 45) - Call(N(IsPartnerLakilester)) - IfEq(LVar9, 1) - Call(N(GetCurrentFloor), LVar2) - IfEq(LVar2, COLLIDER_pp2) - BreakLoop - EndIf - EndIf - EndIf - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Wait(20) - EndLoop - Return - End -}; - -EvtScript N(EVS_UpdateRightPlatform) = { - SetGroup(EVT_GROUP_0B) - Call(ParentColliderToModel, COLLIDER_o26, MODEL_o26) - Call(ParentColliderToModel, COLLIDER_o27, MODEL_o27) - Call(ParentColliderToModel, COLLIDER_o28, MODEL_o28) - Set(LVar0, 135) - Set(LVar3, 0) - Loop(0) - Call(MakeLerp, LVar0, -60, 195, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateGroup, MODEL_g14, LVar0, 0, 0) - Call(UpdateColliderTransform, COLLIDER_o26) - Call(UpdateColliderTransform, COLLIDER_o27) - Call(UpdateColliderTransform, COLLIDER_o28) - Set(LVar4, LVar0) - Sub(LVar4, LVar3) - Set(LVar3, LVar0) - Call(N(AddPushVelocity), LVar4, 30, 29) - IfLt(LVar0, -45) - Call(N(IsPartnerLakilester)) - IfEq(LVar9, 1) - Call(N(GetCurrentFloor), LVar2) - IfEq(LVar2, COLLIDER_pp1) - BreakLoop - EndIf - EndIf - EndIf - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Wait(20) - Call(MakeLerp, LVar0, 135, 195, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Call(TranslateGroup, MODEL_g14, LVar0, 0, 0) - Call(UpdateColliderTransform, COLLIDER_o26) - Call(UpdateColliderTransform, COLLIDER_o27) - Call(UpdateColliderTransform, COLLIDER_o28) - Set(LVar4, LVar0) - Sub(LVar4, LVar3) - Set(LVar3, LVar0) - Call(N(AddPushVelocity), LVar4, 30, 29) - IfGt(LVar0, 120) - Call(N(IsPartnerLakilester)) - IfEq(LVar9, 1) - Call(N(GetCurrentFloor), LVar2) - IfEq(LVar2, COLLIDER_pp2) - BreakLoop - EndIf - EndIf - EndIf - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Wait(20) - EndLoop - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_11/kzn_11_3_npc.c b/src/world/dead/area_kzn/kzn_11/kzn_11_3_npc.c deleted file mode 100644 index 23e865ced27..00000000000 --- a/src/world/dead/area_kzn/kzn_11/kzn_11_3_npc.c +++ /dev/null @@ -1,328 +0,0 @@ -#include "kzn_11.h" - -#include "world/common/enemy/LavaBubble.inc.c" - -#include "sprite/npc/Fire.h" -#include "world/common/enemy/ai/FireBarAI.inc.c" - -s32 N(FireBar_Sounds)[] = { - SOUND_SEQ_FIRE_BAR_0, SOUND_SEQ_FIRE_BAR_1, SOUND_SEQ_FIRE_BAR_2, SOUND_SEQ_FIRE_BAR_3, - SOUND_SEQ_FIRE_BAR_4, SOUND_SEQ_FIRE_BAR_5, SOUND_SEQ_FIRE_BAR_6, SOUND_SEQ_FIRE_BAR_7, - SOUND_SEQ_FIRE_BAR_8, SOUND_SEQ_FIRE_BAR_9, SOUND_SEQ_FIRE_BAR_9, -}; - -EvtScript N(EVS_FireBar_Defeated) = { - Set(LVarA, LVar0) - Set(LVarB, LVar1) - Loop(15) - Loop(LVar1) - Call(SetNpcFlagBits, LVar0, NPC_FLAG_INVISIBLE, TRUE) - Add(LVar0, 1) - EndLoop - Wait(1) - Set(LVar0, LVarA) - Set(LVar1, LVarB) - Loop(LVar1) - Call(SetNpcFlagBits, LVar0, NPC_FLAG_INVISIBLE, FALSE) - Add(LVar0, 1) - EndLoop - Wait(1) - Set(LVar0, LVarA) - Set(LVar1, LVarB) - EndLoop - Call(GetNpcPos, LVar0, LVar1, LVar2, LVar3) - Call(PlaySoundAt, SOUND_SEQ_FIRE_BAR_DEAD, SOUND_SPACE_DEFAULT, LVar1, LVar2, LVar3) - Loop(10) - Call(GetNpcPos, LVar0, LVar1, LVar2, LVar3) - Call(RandInt, 50, LVar4) - Sub(LVar4, 25) - Call(RandInt, 30, LVar5) - Add(LVar1, LVar4) - Add(LVar2, LVar5) - PlayEffect(EFFECT_00, LVar1, LVar2, LVar3, 1, 20, 3, 2) - EndLoop - IfEq(LVarA, NPC_FireBar_1A) - IfEq(AF_KZN11_FireBar1_Coins, FALSE) - Set(AF_KZN11_FireBar1_Coins, TRUE) - Loop(10) - Call(MakeItemEntity, ITEM_COIN, LVar1, LVar2, LVar3, ITEM_SPAWN_MODE_TOSS_SPAWN_ALWAYS, 0) - EndLoop - EndIf - EndIf - IfEq(LVarA, NPC_FireBar_2A) - IfEq(AF_KZN11_FireBar2_Coins, FALSE) - Set(AF_KZN11_FireBar2_Coins, TRUE) - Loop(10) - Call(MakeItemEntity, ITEM_COIN, LVar1, LVar2, LVar3, ITEM_SPAWN_MODE_TOSS_SPAWN_ALWAYS, 0) - EndLoop - EndIf - EndIf - IfEq(LVarA, NPC_FireBar_3A) - IfEq(AF_KZN11_FireBar3_Coins, FALSE) - Set(AF_KZN11_FireBar3_Coins, TRUE) - Loop(10) - Call(MakeItemEntity, ITEM_COIN, LVar1, LVar2, LVar3, ITEM_SPAWN_MODE_TOSS_SPAWN_ALWAYS, 0) - EndLoop - EndIf - EndIf - Call(RemoveEncounter, LVarA) - Return - End -}; - -FireBarAISettings N(AISettings_FireBar_01) = { - .centerPos = { -300, 20, 15 }, - .rotRate = 8, - .firstNpc = NPC_FireBar_1A, - .npcCount = 4, - .callback = N(FireBarAI_Callback), -}; - -FireBarAISettings N(AISettings_FireBar_02) = { - .centerPos = { 0, 20, 15 }, - .rotRate = -8, - .firstNpc = NPC_FireBar_2A, - .npcCount = 4, - .callback = N(FireBarAI_Callback), -}; - -FireBarAISettings N(AISettings_FireBar_03) = { - .centerPos = { 325, 20, 15 }, - .rotRate = -8, - .firstNpc = NPC_FireBar_3A, - .npcCount = 4, - .callback = N(FireBarAI_Callback), -}; - -EvtScript N(EVS_NpcAI_FireBar_01) = { - Call(N(FireBarAI_Main), Ref(N(AISettings_FireBar_01))) - Return - End -}; - -EvtScript N(EVS_NpcAI_FireBar_02) = { - Call(N(FireBarAI_Main), Ref(N(AISettings_FireBar_02))) - Return - End -}; - -EvtScript N(EVS_NpcAI_FireBar_03) = { - Call(N(FireBarAI_Main), Ref(N(AISettings_FireBar_03))) - Return - End -}; - -NpcSettings N(NpcSettings_FireBar_01) = { - .defaultAnim = ANIM_Fire_Brighest_Burn, - .height = 12, - .radius = 20, - .ai = &N(EVS_NpcAI_FireBar_01), - .flags = ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, -}; - -NpcSettings N(NpcSettings_FireBar_02) = { - .defaultAnim = ANIM_Fire_Brighest_Burn, - .height = 12, - .radius = 20, - .ai = &N(EVS_NpcAI_FireBar_02), - .flags = ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, -}; - -NpcSettings N(NpcSettings_FireBar_03) = { - .defaultAnim = ANIM_Fire_Brighest_Burn, - .height = 12, - .radius = 20, - .ai = &N(EVS_NpcAI_FireBar_03), - .flags = ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, -}; - -NpcSettings N(NpcSettings_FireBar_Extra) = { - .defaultAnim = ANIM_Fire_Brighest_Burn, - .height = 12, - .radius = 20, - .flags = ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, -}; - -NpcData N(NpcData_FireBar_01)[] = { - { - .id = NPC_FireBar_1A, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_01), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_1B, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_1C, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_1D, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, -}; - -NpcData N(NpcData_FireBar_02)[] = { - { - .id = NPC_FireBar_2A, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_02), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_2B, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_2C, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_2D, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, -}; - -NpcData N(NpcData_FireBar_03)[] = { - { - .id = NPC_FireBar_3A, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_03), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_3B, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_3C, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, - { - .id = NPC_FireBar_3D, - .pos = { 0.0f, 0.0f, 0.0f }, - .yaw = 0, - .init = (void*) 0x00004003, - .settings = &N(NpcSettings_FireBar_Extra), - .flags = ENEMY_FLAG_PASSIVE, - .animations = { - }, - }, -}; - -NpcData N(NpcData_Bubble_01) = { - .id = NPC_Bubble_01, - .pos = { -150.0f, 50.0f, 10.0f }, - .yaw = 90, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -150, 50, 10 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { -150, 50, 10 }, - .detectSize = { 150 }, - } - }, - .settings = &N(NpcSettings_LavaBubble), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = LAVA_BUBBLE_DROPS, - .animations = LAVA_BUBBLE_ANIMS, - .aiDetectFlags = AI_DETECT_SENSITIVE_MOTION, -}; - -NpcData N(NpcData_Bubble_02) = { - .id = NPC_Bubble_02, - .pos = { 150.0f, 50.0f, 10.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { 150, 50, 10 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_CYLINDER, - .detectPos = { 150, 50, 10 }, - .detectSize = { 150 }, - } - }, - .settings = &N(NpcSettings_LavaBubble), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = LAVA_BUBBLE_DROPS, - .animations = LAVA_BUBBLE_ANIMS, - .aiDetectFlags = AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_FireBar_01)), - NPC_GROUP(N(NpcData_FireBar_02)), - NPC_GROUP(N(NpcData_FireBar_03)), - NPC_GROUP(N(NpcData_Bubble_01), 0x1800, BTL_KZN_STAGE_02), - NPC_GROUP(N(NpcData_Bubble_02), 0x1807, BTL_KZN_STAGE_02), - {} -}; diff --git a/src/world/dead/area_kzn/kzn_17/kzn_17.h b/src/world/dead/area_kzn/kzn_17/kzn_17.h deleted file mode 100644 index 84f6fc8b2ab..00000000000 --- a/src/world/dead/area_kzn/kzn_17/kzn_17.h +++ /dev/null @@ -1,31 +0,0 @@ -// Older version of kzn_17 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../kzn.h" -#include "mapfs/kzn_17_shape.h" -#include "mapfs/kzn_17_hit.h" - -enum { - NPC_Kolorado = 0, - NPC_Piranha = 1, - NPC_Piranha_Hitbox = 2, - NPC_SpikeTop = 3, -}; - -enum { - MV_TrompPosX = MapVar(0), - MV_ScreenShakeTID = MapVar(10), -}; - -#define NAMESPACE dead_kzn_17 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupSpinyTromp); -extern EvtScript N(EVS_Kolorado_TrompPanic); -extern EvtScript N(EVS_Kolorado_TrompImpact); -extern EvtScript N(EVS_MakeEntities); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_kzn/kzn_17/kzn_17_0_header.c b/src/world/dead/area_kzn/kzn_17/kzn_17_0_header.c deleted file mode 100644 index b2aea9e7b7f..00000000000 --- a/src/world/dead/area_kzn/kzn_17/kzn_17_0_header.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "kzn_17.h" - -EntryList N(Entrances) = { - [kzn_17_ENTRY_0] { -670.0, 0.0, 160.0, 90.0 }, - [kzn_17_ENTRY_1] { 620.0, 0.0, 30.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .tattle = { MSG_MapTattle_kzn_17 }, -}; diff --git a/src/world/dead/area_kzn/kzn_17/kzn_17_1_main.c b/src/world/dead/area_kzn/kzn_17/kzn_17_1_main.c deleted file mode 100644 index 7e21b479ef9..00000000000 --- a/src/world/dead/area_kzn/kzn_17/kzn_17_1_main.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "kzn_17.h" - -#include "world/area_kzn/common/SmokeTexPanners.inc.c" - -EvtScript N(EVS_ExitWalk_kzn_11_1) = EVT_EXIT_WALK(60, kzn_17_ENTRY_0, "kzn_11", kzn_11_ENTRY_1); -EvtScript N(EVS_ExitWalk_kzn_18_0) = EVT_EXIT_WALK(60, kzn_17_ENTRY_1, "kzn_18", kzn_18_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_kzn_11_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deili1, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_kzn_18_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deili2, 1, 0) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_MT_LAVALAVA) - Call(SetSpriteShading, SHADING_KZN_17) - Call(SetCamPerspective, CAM_DEFAULT, CAM_UPDATE_FROM_ZONE, 25, 16, 4096) - Call(SetCamBGColor, CAM_DEFAULT, 0, 0, 0) - Call(SetCamEnabled, CAM_DEFAULT, TRUE) - Call(MakeNpcs, TRUE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - Wait(1) - Call(SetMusicTrack, 0, SONG_MT_LAVALAVA, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_1) - Exec(N(EVS_SetupSpinyTromp)) - Set(LVar0, MODEL_kem1) - Exec(N(EVS_StartTexPanner_SmokeLeft)) - Set(LVar0, MODEL_kem2) - Exec(N(EVS_StartTexPanner_SmokeRight)) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_17/kzn_17_2_entity.c b/src/world/dead/area_kzn/kzn_17/kzn_17_2_entity.c deleted file mode 100644 index 740c9180c07..00000000000 --- a/src/world/dead/area_kzn/kzn_17/kzn_17_2_entity.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "kzn_17.h" -#include "entity.h" - -s32 N(Unused_80243610_3610)[] = { - 0x01010101, 0x01010101, 0x01010101, 0x01010101, - 0x01010101, 0x01010101, 0x01010101, 0x01010101, - 0x01010101, 0x01010101, 0x01010101, 0x01010101, - 0x01010101, 0x01010101, 0x01010000, -}; - -EvtScript N(EVS_OnBreakBlockA) = { - Set(GF_KZN17_Hammer3BlockA, TRUE) - Return - End -}; - -EvtScript N(EVS_OnBreakBlockB) = { - Set(GF_KZN17_Hammer3BlockB, TRUE) - Return - End -}; - -EvtScript N(EVS_OnBreakBlockC) = { - Set(GF_KZN17_Hammer3BlockC, TRUE) - Return - End -}; - -EvtScript N(EVS_OnBreakBlockD) = { - Set(GF_KZN17_Hammer3BlockD, TRUE) - Return - End -}; - -EvtScript N(EVS_OnBreakBlockE) = { - Set(GF_KZN17_Hammer3BlockE, TRUE) - Return - End -}; - -EvtScript N(EVS_OnBreakBlockF) = { - Set(GF_KZN17_Hammer3BlockF, TRUE) - Return - End -}; - -EvtScript N(EVS_OnBreakBlockG) = { - Set(GF_KZN17_Hammer3BlockG, TRUE) - Return - End -}; - -EvtScript N(EVS_MakeEntities) = { - IfEq(GF_KZN17_Hammer3BlockA, FALSE) - Call(MakeEntity, Ref(Entity_Hammer3Block), -195, 50, 27, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBreakBlockA))) - EndIf - IfEq(GF_KZN17_Hammer3BlockB, FALSE) - Call(MakeEntity, Ref(Entity_Hammer3Block), -245, 60, 27, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBreakBlockB))) - EndIf - IfEq(GF_KZN17_Hammer3BlockC, FALSE) - Call(MakeEntity, Ref(Entity_Hammer3Block), -295, 70, 27, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBreakBlockC))) - EndIf - IfEq(GF_KZN17_Hammer3BlockD, FALSE) - Call(MakeEntity, Ref(Entity_Hammer3Block), -345, 80, 27, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBreakBlockD))) - EndIf - IfEq(GF_KZN17_Hammer3BlockE, FALSE) - Call(MakeEntity, Ref(Entity_Hammer3Block), -395, 90, 27, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBreakBlockE))) - EndIf - IfEq(GF_KZN17_Hammer3BlockF, FALSE) - Call(MakeEntity, Ref(Entity_Hammer3Block), -445, 100, 27, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBreakBlockF))) - EndIf - IfEq(GF_KZN17_Hammer3BlockG, FALSE) - Call(MakeEntity, Ref(Entity_Hammer3Block), -495, 110, 27, 0, MAKE_ENTITY_END) - Call(AssignScript, Ref(N(EVS_OnBreakBlockG))) - EndIf - Call(CreatePushBlockGrid, 0, 29, 2, -119, -3, 5, 0) - Call(SetPushBlock, 0, 28, 1, PUSH_GRID_BLOCK) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_17/kzn_17_3_npc.c b/src/world/dead/area_kzn/kzn_17/kzn_17_3_npc.c deleted file mode 100644 index 64fd3bda82b..00000000000 --- a/src/world/dead/area_kzn/kzn_17/kzn_17_3_npc.c +++ /dev/null @@ -1,202 +0,0 @@ -#include "kzn_17.h" - -#include "world/common/npc/Kolorado.inc.c" - -#include "world/common/enemy/PutridPiranha.inc.c" -#include "world/common/enemy/SpikeTop.inc.c" - -#include "world/common/complete/LetterDelivery.inc.c" - -s32 N(LetterList)[] = { - ITEM_LETTER_TO_KOLORADO, - ITEM_NONE -}; - -EVT_LETTER_PROMPT(Kolorado1, NPC_Kolorado, - ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, - MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7, - ITEM_LETTER_TO_KOLORADO, N(LetterList)); - -EVT_LETTER_PROMPT(Kolorado2, NPC_Kolorado, - ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, - MSG_CH5_00E8, MSG_CH5_00E9, MSG_CH5_00EA, MSG_CH5_00EB, - ITEM_LETTER_TO_KOLORADO, N(LetterList)); - -EVT_LETTER_REWARD(Kolorado); - -Vec3f N(KoloradoThrownPath)[] = { - { 447.0, 0.0, 39.0 }, - { 432.0, 5.0, 47.0 }, - { 427.0, 20.0, 55.0 }, - { 432.0, 5.0, 62.0 }, - { 447.0, 0.0, 70.0 }, -}; - -EvtScript N(EVS_Kolorado_TrompPanic) = { - Call(SetNpcPos, NPC_Kolorado, 447, 0, 39) - Call(SetNpcYaw, NPC_Kolorado, 270) - Call(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Panic) - Return - End -}; - -EvtScript N(EVS_Kolorado_TrompImpact) = { - Call(SetEnemyFlagBits, NPC_Kolorado, ENEMY_FLAG_400000, 1) - Call(SetNpcRotationPivot, NPC_Kolorado, 13) - Call(SetNpcRotation, NPC_Kolorado, 0, 0, 250) - Call(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_HurtStill) - Call(SetNpcImgFXParams, NPC_Kolorado, IMGFX_SET_WAVY, Float(3.0), Float(3.0), 0, 0) - Call(PlaySoundAtNpc, NPC_Kolorado, SOUND_HIT_PLAYER_NORMAL, SOUND_SPACE_DEFAULT) - Thread - Call(SetNpcCollisionSize, NPC_Kolorado, 20, 24) - Call(LoadPath, 30, Ref(N(KoloradoThrownPath)), ARRAY_COUNT(N(KoloradoThrownPath)), EASING_LINEAR) - Label(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Kolorado, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 1) - Goto(0) - EndIf - EndThread - Call(SpeakToPlayer, NPC_Kolorado, ANIM_Kolorado_HurtStill, ANIM_Kolorado_HurtStill, 5, MSG_CH5_00F9) - Return - End -}; - -EvtScript N(EVS_Kolorado_HurtInit) = { - Call(SetNpcPos, NPC_Kolorado, 447, 0, 70) - Call(SetNpcYaw, NPC_Kolorado, 270) - Call(SetEnemyFlagBits, NPC_Kolorado, ENEMY_FLAG_400000, 1) - Call(SetNpcRotationPivot, NPC_Kolorado, 13) - Call(SetNpcRotation, NPC_Kolorado, 0, 0, 250) - Call(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_HurtStill) - Call(SetNpcImgFXParams, NPC_Kolorado, IMGFX_SET_WAVY, Float(3.0), Float(3.0), 0, 0) - Return - End -}; - -EvtScript N(EVS_NpcIdle_Kolorado) = { - Label(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar0, 605) - Wait(1) - Goto(0) - EndIf - Call(DisablePlayerInput, TRUE) - Call(ShowMessageAtScreenPos, MSG_CH5_00F7, 160, 40) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(SetNpcPos, NPC_SELF, 290, 0, 30) - Call(SetNpcSpeed, NPC_SELF, Float(5.0)) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Call(NpcMoveTo, NPC_SELF, 640, 80, 0) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Yell) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Yell, 0, MSG_CH5_00F8) - Set(GB_StoryProgress, STORY_CH5_KOLORADO_AT_DEAD_END) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Kolorado) = { - IfLt(GB_StoryProgress, STORY_CH5_HIDDEN_PASSAGE_OPEN) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Yell, 0, MSG_CH5_00FC) - ExecWait(N(EVS_LetterPrompt_Kolorado1)) - ExecWait(N(EVS_LetterReward_Kolorado)) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_HurtStill, 5, MSG_CH5_00FA) - ExecWait(N(EVS_LetterPrompt_Kolorado2)) - ExecWait(N(EVS_LetterReward_Kolorado)) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Kolorado) = { - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Kolorado))) - Switch(GB_StoryProgress) - CaseLt(STORY_CH5_KOLORADO_AT_DEAD_END) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Kolorado))) - Return - CaseLt(STORY_CH5_HIDDEN_PASSAGE_OPEN) - Call(SetNpcPos, NPC_SELF, 640, 0, 80) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Yell) - Return - CaseEq(STORY_CH5_HIDDEN_PASSAGE_OPEN) - Call(SetNpcCollisionSize, NPC_Kolorado, 20, 24) - Exec(N(EVS_Kolorado_HurtInit)) - Return - CaseDefault - Call(RemoveNpc, NPC_SELF) - EndSwitch - Return - End -}; - -NpcData N(NpcData_Kolorado) = { - .id = NPC_Kolorado, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 90, - .init = &N(EVS_NpcInit_Kolorado), - .settings = &N(NpcSettings_Kolorado), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_ENABLE_HIT_SCRIPT | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_10000 | ENEMY_FLAG_100000 | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = KOLORADO_ANIMS, - .tattle = MSG_NpcTattle_Kolorado, -}; - -NpcData N(NpcData_Piranha)[] = { - { - .id = NPC_Piranha, - .pos = { -325.0f, 0.0f, 150.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = TRUE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -325, 0, 150 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_RECT, - .detectPos = { -390, 0, 130 }, - .detectSize = { 270, 130 }, - } - }, - .settings = &N(NpcSettings_PutridPiranha), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = PUTRID_PIRANHA_DROPS, - .animations = PUTRID_PIRANHA_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, - }, - PUTRID_PIRANHA_HITBOX(NPC_Piranha_Hitbox) -}; - -NpcData N(NpcData_SpikeTop) = { - .id = NPC_SpikeTop, - .pos = { -450.0f, 0.0f, 100.0f }, - .yaw = 270, - .territory = { - .wander = { - .isFlying = FALSE, - .moveSpeedOverride = NO_OVERRIDE_MOVEMENT_SPEED, - .wanderShape = SHAPE_CYLINDER, - .centerPos = { -450, 0, 100 }, - .wanderSize = { 30 }, - .detectShape = SHAPE_RECT, - .detectPos = { -450, 0, 100 }, - .detectSize = { 270, 130 }, - } - }, - .settings = &N(NpcSettings_SpikeTop), - .flags = ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_FLYING, - .drops = SPIKE_TOP_DROPS, - .animations = SPIKE_TOP_ANIMS, - .aiDetectFlags = AI_DETECT_SIGHT | AI_DETECT_SENSITIVE_MOTION, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Kolorado)), - NPC_GROUP(N(NpcData_Piranha), 0x1814, BTL_KZN_STAGE_00), - NPC_GROUP(N(NpcData_SpikeTop), 0x180D, BTL_KZN_STAGE_00), - {} -}; diff --git a/src/world/dead/area_kzn/kzn_17/kzn_17_4_tromp.c b/src/world/dead/area_kzn/kzn_17/kzn_17_4_tromp.c deleted file mode 100644 index 387956e3f93..00000000000 --- a/src/world/dead/area_kzn/kzn_17/kzn_17_4_tromp.c +++ /dev/null @@ -1,155 +0,0 @@ -#include "kzn_17.h" -#include "effects.h" - -#define UNK_FUNC_50_LVar1 -583.0 -#define UNK_FUNC_50_LVar2 165.0 - -#include "world/area_kzn/common/SpinyTromp.inc.c" - -EvtScript N(EVS_SpinyTromp_ManageCamera) = { - Call(GetPlayerPos, LVar3, LVar4, LVar5) - Call(UseSettingsFrom, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetPanTarget, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetCamDistance, CAM_DEFAULT, 500) - Call(SetCamSpeed, CAM_DEFAULT, Float(10.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Loop(0) - IfEq(AF_KZN_Tromp2_ShakingDone, FALSE) - IfLt(MV_TrompPosX, 550) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(MV_TrompPosX, LVar0) - Add(LVar0, MV_TrompPosX) - Div(LVar0, 2) - Else - Set(LVar0, MV_TrompPosX) - EndIf - Add(LVar1, 55) - Set(LVar2, LVar1) - Call(N(UnkFunc46)) - Sub(LVar2, 55) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar2, 30) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - EndIf - EndIf - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_SpinyTromp_ShakeCam) = { - Loop(0) - Call(ShakeCam, CAM_DEFAULT, 0, 30, Float(1.0)) - EndLoop - Return - End -}; - -EvtScript N(EVS_SetupSpinyTromp) = { - SetGroup(EVT_GROUP_EF) - IfGe(GB_StoryProgress, STORY_CH5_HIDDEN_PASSAGE_OPEN) - Call(SetGroupVisibility, MODEL_goron, MODEL_GROUP_HIDDEN) - Call(EnableModel, MODEL_me, FALSE) - Call(EnableModel, MODEL_mae, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_gogo, COLLIDER_FLAGS_UPPER_MASK) - Return - EndIf - Call(EnableModel, MODEL_ato, FALSE) - Set(AF_KZN_Tromp2_HitKolorado, FALSE) - Set(AF_KZN_Tromp2_ShakingDone, FALSE) - Set(AF_KZN_TrompHitPlayer, FALSE) - Set(AF_KZN_TrompRollingDone, FALSE) - Set(AF_KZN_Tromp2_StopPlayer, FALSE) - Set(LVar0, -583) - Set(LVar2, 165) - Call(TranslateGroup, MODEL_goron, LVar0, LVar2, 30) - Call(TranslateModel, MODEL_me, LVar0, LVar2, 30) - Label(0) - Wait(1) - IfEq(GF_KZN17_Hammer3BlockG, FALSE) - Goto(0) - EndIf - ExecGetTID(N(EVS_SpinyTromp_ManageCamera), LVarA) - Exec(N(EVS_Kolorado_TrompPanic)) - ExecGetTID(N(EVS_SpinyTromp_ShakeCam), MV_ScreenShakeTID) - Call(PlaySound, SOUND_LOOP_TROMP_ROLL) - Set(LVar3, 0) - Call(MakeLerp, -583, 750, 270, EASING_QUADRATIC_IN) - Loop(0) - Call(UpdateLerp) - Call(N(UnkFunc46)) - Call(N(UnkFunc51), LVar0, LVar1, LVar2) - Set(MV_TrompPosX, LVar0) - Add(MV_TrompPosX, 20) - Call(TranslateGroup, MODEL_goron, LVar0, LVar2, 30) - Call(TranslateModel, MODEL_me, LVar0, LVar2, 30) - Call(RotateGroup, MODEL_goron, LVar3, 0, 0, 1) - Call(RotateModel, MODEL_me, LVar3, 0, 0, 1) - Call(N(UnkFunc49)) - Call(TranslateModel, MODEL_me, LVar5, LVar6, 30) - Call(N(UnkFunc50)) - IfEq(AF_KZN_Tromp2_StopPlayer, FALSE) - Thread - Call(GetPlayerPos, LVar3, LVar1, LVar2) - Sub(LVar3, 20) - IfLt(LVar3, LVar0) - Call(DisablePlayerInput, TRUE) - Set(AF_KZN_Tromp2_StopPlayer, TRUE) - Label(12) - Wait(1) - IfNe(AF_KZN_Tromp2_StopPlayer, FALSE) - Goto(12) - EndIf - Call(DisablePlayerInput, FALSE) - EndIf - EndThread - EndIf - IfEq(AF_KZN_Tromp2_HitKolorado, FALSE) - IfGt(LVar0, 430) - Exec(N(EVS_Kolorado_TrompImpact)) - Set(AF_KZN_Tromp2_HitKolorado, TRUE) - EndIf - EndIf - IfEq(AF_KZN_Tromp2_ShakingDone, FALSE) - IfGt(LVar0, 630) - KillThread(MV_ScreenShakeTID) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_gogo, COLLIDER_FLAGS_UPPER_MASK) - Call(PlaySoundAtCollider, COLLIDER_gogo, SOUND_TROMP_CRASH, SOUND_SPACE_DEFAULT) - PlayEffect(EFFECT_BOMBETTE_BREAKING, 2, 32, 32, 1, 10, 45) - Call(EnableModel, MODEL_mae, FALSE) - Call(EnableModel, MODEL_ato, TRUE) - Thread - Call(ShakeCam, CAM_DEFAULT, 0, 20, Float(3.0)) - Call(ShakeCam, CAM_DEFAULT, 0, 10, Float(1.7)) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(0.5)) - EndThread - Set(AF_KZN_Tromp2_ShakingDone, TRUE) - EndIf - EndIf - Wait(1) - Call(N(SpinyTromp_CheckDist)) - IfLt(LVar4, 80) - IfEq(AF_KZN_TrompHitPlayer, FALSE) - Call(N(SpinyTromp_GetActingPartner)) - IfNe(LVar0, PARTNER_BOW) - Set(AF_KZN_TrompHitPlayer, TRUE) - Exec(N(D_80240D10_C7EE90)) - EndIf - EndIf - EndIf - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Set(GB_StoryProgress, STORY_CH5_HIDDEN_PASSAGE_OPEN) - Wait(50) - Call(StopSound, SOUND_LOOP_TROMP_ROLL) - Call(SetGroupVisibility, MODEL_goron, MODEL_GROUP_HIDDEN) - Call(EnableModel, MODEL_me, FALSE) - KillThread(LVarA) - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - Set(AF_KZN_Tromp2_StopPlayer, FALSE) - Set(AF_KZN_TrompRollingDone, TRUE) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_18/kzn_18.h b/src/world/dead/area_kzn/kzn_18/kzn_18.h deleted file mode 100644 index d88bffef16b..00000000000 --- a/src/world/dead/area_kzn/kzn_18/kzn_18.h +++ /dev/null @@ -1,21 +0,0 @@ -// Older version of kzn_18 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../kzn.h" -#include "mapfs/kzn_18_shape.h" -#include "mapfs/kzn_18_hit.h" - -enum { - NPC_Kolorado = 0, - NPC_PutridPiranha = 1, -}; - -enum { - MV_KoloradoJumpDone = MapVar(10), -}; - -#define NAMESPACE dead_kzn_18 diff --git a/src/world/dead/area_kzn/kzn_18/kzn_18_0_header.c b/src/world/dead/area_kzn/kzn_18/kzn_18_0_header.c deleted file mode 100644 index e4451178a53..00000000000 --- a/src/world/dead/area_kzn/kzn_18/kzn_18_0_header.c +++ /dev/null @@ -1,24 +0,0 @@ -#include "kzn_18.h" - -extern EvtScript(N(EVS_Main)); - -s32 N(get_tattle)(void) { - if (evt_get_variable(NULL, GB_StoryProgress) < STORY_CH5_STAR_SPRIT_DEPARTED) { - return MSG_MapTattle_kzn_18_before; - } else { - return MSG_MapTattle_kzn_18_after; - } -} - -EntryList N(Entrances) = { - [kzn_18_ENTRY_0] { -405.0, 250.0, -330.0, 90.0 }, - [kzn_18_ENTRY_1] { 435.0, 250.0, -350.0, 270.0 }, - [kzn_18_ENTRY_2] { 490.0, 25.0, -5.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .tattle = { .get = &N(get_tattle) }, -}; diff --git a/src/world/dead/area_kzn/kzn_18/kzn_18_1_main.c b/src/world/dead/area_kzn/kzn_18/kzn_18_1_main.c deleted file mode 100644 index 857626c5f96..00000000000 --- a/src/world/dead/area_kzn/kzn_18/kzn_18_1_main.c +++ /dev/null @@ -1,101 +0,0 @@ -#include "kzn_18.h" - -extern EvtScript N(EVS_MakeEntities); -extern NpcGroupList N(DefaultNPCs); - -#include "world/area_kzn/common/SmokeTexPanners.inc.c" - -EvtScript N(EVS_ExitWalk_kzn_17_1) = EVT_EXIT_WALK(60, kzn_18_ENTRY_0, "kzn_17", kzn_17_ENTRY_1); -EvtScript N(EVS_ExitWalk_kzn_19_0) = EVT_EXIT_WALK(60, kzn_18_ENTRY_1, "kzn_19", kzn_19_ENTRY_0); -EvtScript N(EVS_ExitWalk_kzn_19_1) = EVT_EXIT_WALK(60, kzn_18_ENTRY_2, "kzn_19", kzn_19_ENTRY_1); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(N(EVS_ExitWalk_kzn_17_1), TRIGGER_FLOOR_ABOVE, COLLIDER_deili3, 1, 0) - BindTrigger(N(EVS_ExitWalk_kzn_19_0), TRIGGER_FLOOR_ABOVE, COLLIDER_deili2, 1, 0) - BindTrigger(N(EVS_ExitWalk_kzn_19_1), TRIGGER_FLOOR_ABOVE, COLLIDER_deili1, 1, 0) - Return - End -}; - -EvtScript N(EVS_StartTexPanners_Lava) = { - SetGroup(EVT_GROUP_00) - Call(EnableTexPanning, MODEL_yougan1_1, TRUE) - Call(EnableTexPanning, MODEL_off1, TRUE) - Call(EnableTexPanning, MODEL_toro, TRUE) - Call(EnableTexPanning, MODEL_poko, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_2) - TEX_PAN_PARAMS_STEP( 200, 0, 400, -100) - TEX_PAN_PARAMS_FREQ( 1, 0, 1, 1) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_5) - TEX_PAN_PARAMS_STEP( 300, -500, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - // animate lava bubbles (real ones, not the enemies) - Set(LVar0, 0) - Loop(0) - Call(SetTexPanOffset, TEX_PANNER_D, TEX_PANNER_MAIN, LVar0, 0) - Add(LVar0, 0x8000) - Wait(6) - EndLoop - EndThread - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o382, .pos = { 50.0, 200.0, -185.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_EnterMap) = { - Call(GetLoadType, LVar1) - IfEq(LVar1, LOAD_FROM_FILE_SELECT) - Exec(EnterSavePoint) - Exec(N(EVS_BindExitTriggers)) - Return - EndIf - Set(LVar0, N(EVS_BindExitTriggers)) - Exec(EnterWalk) - Wait(1) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_MT_LAVALAVA) - Call(SetSpriteShading, SHADING_KZN_18) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, TRUE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Exec(N(EVS_EnterMap)) - Call(SetMusicTrack, 0, SONG_MT_LAVALAVA, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_1) - IfLt(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Call(EnableModel, MODEL_off1, FALSE) - Call(EnableModel, MODEL_o506, FALSE) - Call(EnableModel, MODEL_o509, FALSE) - Call(EnableModel, MODEL_o511, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_off1, COLLIDER_FLAGS_UPPER_MASK) - Else - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_off2, COLLIDER_FLAGS_UPPER_MASK) - EndIf - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_off1, SURFACE_TYPE_LAVA) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Exec(N(EVS_StartTexPanners_Lava)) - Set(LVar0, MODEL_kem1) - Exec(N(EVS_StartTexPanner_SmokeLeft)) - Set(LVar0, MODEL_kem2) - Exec(N(EVS_StartTexPanner_SmokeRight)) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_18/kzn_18_2_npc.c b/src/world/dead/area_kzn/kzn_18/kzn_18_2_npc.c deleted file mode 100644 index a2277210dcf..00000000000 --- a/src/world/dead/area_kzn/kzn_18/kzn_18_2_npc.c +++ /dev/null @@ -1,173 +0,0 @@ -#include "kzn_18.h" - -#include "world/common/npc/Kolorado.inc.c" -#include "world/common/enemy/PutridPiranhaSentinel.inc.c" - -#include "world/common/DisableCameraLeadingPlayer.inc.c" -#include "world/common/EnableCameraLeadingPlayer.inc.c" -#include "world/common/todo/GetFloorCollider.inc.c" - -EvtScript N(EVS_NpcIdle_Kolorado) = { - IfLt(GB_StoryProgress, STORY_CH5_KOLORADO_RAN_AHEAD) - Label(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar0, -125) - Wait(1) - Goto(0) - EndIf - Set(GB_StoryProgress, STORY_CH5_KOLORADO_RAN_AHEAD) - Call(SetNpcPos, NPC_SELF, -280, 250, -360) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar2, -340) - Set(LVar2, -320) - Else - Set(LVar2, -360) - EndIf - Call(SetNpcSpeed, NPC_SELF, Float(10.0)) - Call(NpcMoveTo, NPC_SELF, 185, LVar2, 0) - Call(NpcFacePlayer, NPC_SELF, 4) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Idle) - Else - Call(SetNpcPos, NPC_SELF, 185, 250, -340) - Call(SetNpcYaw, NPC_SELF, 270) - EndIf - Loop(0) - Wait(1) - Call(N(GetFloorCollider), LVar0) - IfEq(LVar0, COLLIDER_o442) - BreakLoop - EndIf - IfEq(LVar0, COLLIDER_o405) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerInput, TRUE) - Call(GetPlayerPos, LVar3, LVar4, LVar5) - Call(UseSettingsFrom, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetPanTarget, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetCamDistance, CAM_DEFAULT, Float(400.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-7.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(3.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Yell, 0, MSG_CH5_00FD) - Wait(15) - Set(MV_KoloradoJumpDone, FALSE) - Thread - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(SetNpcJumpscale, NPC_SELF, Float(2.0)) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, LVar0, LVar1, LVar2, 10) - Call(SetNpcYaw, NPC_SELF, 90) - Set(MV_KoloradoJumpDone, TRUE) - EndThread - Call(ContinueSpeech, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH5_00FE) - Loop(0) - Wait(1) - IfEq(MV_KoloradoJumpDone, TRUE) - BreakLoop - EndIf - EndLoop - Call(UseSettingsFrom, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetPanTarget, CAM_DEFAULT, 420, 250, -350) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Run) - Call(SetNpcSpeed, NPC_SELF, Float(5.0)) - Call(NpcMoveTo, NPC_SELF, 530, -360, 0) - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - Wait(15) - Call(ResetCam, CAM_DEFAULT, Float(3.0)) - Set(GB_StoryProgress, STORY_CH5_KOLORADO_IN_TREASURE_ROOM) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcInit_Kolorado) = { - IfLt(GB_StoryProgress, STORY_CH5_KOLORADO_IN_TREASURE_ROOM) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Kolorado))) - Else - Call(RemoveNpc, NPC_SELF) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcIdle_Piranha) = { - Label(0) - Wait(1) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfGt(LVar1, 100) - Goto(0) - EndIf - IfLt(LVar0, 100) - Goto(0) - EndIf - Call(DisablePlayerInput, TRUE) - Call(N(DisableCameraLeadingPlayer)) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, 285, 25, 35) - Call(SetCamDistance, CAM_DEFAULT, 400) - Call(SetCamSpeed, CAM_DEFAULT, Float(2.5)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(10) - Call(SetNpcPos, NPC_SELF, 285, 25, 35) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_BURROW_SURFACE, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_SELF, ANIM_LargePiranha_Putrid_Anim17) - Wait(30) - Call(SetNpcAnimation, NPC_SELF, ANIM_LargePiranha_Putrid_Anim01) - Call(SpeakToPlayer, NPC_SELF, ANIM_LargePiranha_Putrid_Anim04, ANIM_LargePiranha_Putrid_Anim01, 0, MSG_CH5_00FF) - Wait(10) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_BURROW_DIG, SOUND_SPACE_DEFAULT) - Call(SetNpcAnimation, NPC_SELF, ANIM_LargePiranha_Putrid_Anim18) - Wait(25) - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - Call(N(EnableCameraLeadingPlayer)) - Call(ResetCam, CAM_DEFAULT, Float(3.0)) - Set(GF_KZN18_IntruderAlert, TRUE) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcInit_Piranha) = { - IfEq(GF_KZN18_IntruderAlert, FALSE) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Piranha))) - Else - Call(RemoveNpc, NPC_SELF) - EndIf - Return - End -}; - -NpcData N(NpcData_Kolorado) = { - .id = NPC_Kolorado, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 90, - .init = &N(EVS_NpcInit_Kolorado), - .settings = &N(NpcSettings_Kolorado), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_ENABLE_HIT_SCRIPT | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_10000 | ENEMY_FLAG_100000, - .drops = NO_DROPS, - .animations = KOLORADO_ANIMS, - .tattle = MSG_NpcTattle_Kolorado, -}; - -NpcData N(NpcData_Piranha) = { - .id = NPC_PutridPiranha, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 270, - .init = &N(EVS_NpcInit_Piranha), - .settings = &N(NpcSettings_PutridPiranhaSentinel), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_ACTIVE_WHILE_OFFSCREEN, - .drops = PIRANHA_NO_DROPS, - .animations = PIRANHA_SENTINEL_ANIMS, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Kolorado)), - NPC_GROUP(N(NpcData_Piranha)), - {} -}; diff --git a/src/world/dead/area_kzn/kzn_18/kzn_18_3_entity.c b/src/world/dead/area_kzn/kzn_18/kzn_18_3_entity.c deleted file mode 100644 index a610b71a2a2..00000000000 --- a/src/world/dead/area_kzn/kzn_18/kzn_18_3_entity.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "kzn_18.h" -#include "entity.h" - -EvtScript N(EVS_MakeEntities) = { - Call(MakeEntity, Ref(Entity_HiddenPanel), 250, 250, -225, 0, MODEL_o380, MAKE_ENTITY_END) - Call(AssignPanelFlag, GF_KZN18_HiddenPanel) - Call(MakeEntity, Ref(Entity_SavePoint), -420, 85, -80, 0, MAKE_ENTITY_END) - Call(MakeEntity, Ref(Entity_HeartBlock), 350, 310, -250, 0, MAKE_ENTITY_END) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19.h b/src/world/dead/area_kzn/kzn_19/kzn_19.h deleted file mode 100644 index dccddaf51ef..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19.h +++ /dev/null @@ -1,47 +0,0 @@ -// Older version of kzn_19 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../kzn.h" -#include "mapfs/kzn_19_shape.h" -#include "mapfs/kzn_19_hit.h" - -enum { - NPC_Kolorado = 0, - NPC_Misstar = 1, - NPC_LavaPiranhaHead = 2, - NPC_LavaBud_01 = 3, - NPC_LavaBud_02 = 4, - NPC_05 = 5, -}; - -enum { - MV_VinesData = MapVar(0), - MV_Unk_01 = MapVar(1), - MV_BossDefeated = MapVar(10), -}; - -#define NAMESPACE dead_kzn_19 - -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_UpdateEruption); -extern EvtScript N(EVS_Misstar_Escape); -extern EvtScript N(EVS_MakeEntities); -extern NpcGroupList N(BossNPCs); -extern NpcGroupList N(EscapeNPCs); - -extern EvtScript N(EVS_TrySpawningStarCard); -extern StaticAnimatorNode* N(AnimModel_MainHeadVine)[]; -extern StaticAnimatorNode* N(AnimModel_SideHeadVine)[]; -extern StaticAnimatorNode* N(AnimModel_ExtraVine)[]; - -extern NpcSettings N(NpcSettings_Kolorado); -extern NpcSettings N(NpcSettings_StarSpirit); -extern NpcSettings N(NpcSettings_LavaPiranhaHead); - -extern API_CALLABLE(SetAnimatorFlags); -extern API_CALLABLE(GetAnimatedPositionByTreeIndex); -extern API_CALLABLE(GetAnimatedRotationByTreeIndex); diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_0_header.c b/src/world/dead/area_kzn/kzn_19/kzn_19_0_header.c deleted file mode 100644 index 01b0692b0c1..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_0_header.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "kzn_19.h" - -extern EvtScript N(EVS_Main); - -EntryList N(Entrances) = { - [kzn_19_ENTRY_0] { -435.0, 250.0, -350.0, 90.0 }, - [kzn_19_ENTRY_1] { -490.0, 25.0, -30.0, 90.0 }, - [kzn_19_ENTRY_2] { 440.0, 25.0, -50.0, 270.0 }, - [kzn_19_ENTRY_3] { 440.0, 25.0, -50.0, 90.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .tattle = { MSG_MapTattle_kzn_19 }, -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_1_music.c b/src/world/dead/area_kzn/kzn_19/kzn_19_1_music.c deleted file mode 100644 index 4b10dcc2263..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_1_music.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "kzn_19.h" - -EvtScript N(EVS_SetupMusic) = { - Switch(GB_StoryProgress) - CaseEq(STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(GetEntryID, LVar0) - IfEq(LVar0, kzn_19_ENTRY_1) - Call(FadeOutMusic, 0, 500) - Call(PlayAmbientSounds, AMBIENT_LAVA_1) - Return - EndIf - EndIf //@bug extra endif - CaseGe(STORY_CH5_MT_LAVA_LAVA_ERUPTING) - Call(PlaySound, SOUND_LOOP_RUMBLE) - EndSwitch - Call(SetMusicTrack, 0, SONG_MT_LAVALAVA, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_1) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_2_main.c b/src/world/dead/area_kzn/kzn_19/kzn_19_2_main.c deleted file mode 100644 index fbf65322fea..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_2_main.c +++ /dev/null @@ -1,221 +0,0 @@ -#include "kzn_19.h" -#include "sprite/player.h" - -#include "world/area_kzn/common/SmokeTexPanners.inc.c" - -#define STAR_SPIRIT_DATA_VAR MV_Unk_01 -#include "world/common/todo/StarSpiritEffectFunc.inc.c" - -EvtScript N(EVS_TrySpawningStarCard) = { - // determine if card should be spawned - Switch(GB_StoryProgress) - CaseEq(STORY_CH5_KOLORADO_IN_TREASURE_ROOM) - Set(LVar0, FALSE) - IfEq(MV_BossDefeated, FALSE) - Return - EndIf - Set(GB_StoryProgress, STORY_CH5_DEFEATED_LAVA_PIRANHA) - CaseEq(STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(GetEntryID, LVar0) - IfEq(LVar0, kzn_19_ENTRY_3) - Return - EndIf - Set(LVar0, TRUE) - CaseDefault - Return - EndSwitch - IfEq(LVar0, 0) - // card appearing scene - Call(DisablePlayerInput, TRUE) - Call(UseSettingsFrom, CAM_DEFAULT, 185, 110, -30) - Call(SetCamSpeed, CAM_DEFAULT, Float(0.44)) - Call(SetPanTarget, CAM_DEFAULT, 185, 55, -30) - EVT_SPIRIT_ADJUST_CAM(10000) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(N(StarSpiritEffectFunc2), 4, 180, 304, 15, -54, 185, 110, -30, 55, 25) - Thread - Call(N(StarSpiritEffectFunc3)) - EndThread - Thread - Wait(1) - Call(PlaySound, SOUND_LOOP_STAR_ORB_RISING) - Call(N(StarSpiritEffectFunc1)) - Call(StopSound, SOUND_LOOP_STAR_ORB_RISING) - Call(PlaySoundAt, SOUND_STAR_ORB_BURST, SOUND_SPACE_DEFAULT, 185, 110, -30) - EndThread - Thread - Wait(45) - Call(SetPlayerAnimation, ANIM_Mario1_LookUp) - EndThread - Thread - Wait(180) - Wait(115) - Call(PlaySoundAt, SOUND_STAR_CARD_APPEARS, SOUND_SPACE_DEFAULT, 185, 110, -30) - EndThread - Call(N(StarSpiritEffectFunc4), 1) - Thread - Wait(80) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - EndThread - Add(LVar1, 100) - Call(SetCamDistance, CAM_DEFAULT, LVar1) - Call(SetPanTarget, CAM_DEFAULT, 185, 25, -30) - Call(N(StarSpiritEffectFunc4), 2) - Call(GetPlayerPos, LVar2, LVar3, LVar4) - Call(UseSettingsFrom, CAM_DEFAULT, LVar2, LVar3, LVar4) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.0)) - Call(SetPanTarget, CAM_DEFAULT, LVar2, LVar3, LVar4) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 0) - Call(DisablePlayerInput, FALSE) - Else - // just make the card spawn - Call(N(StarSpiritEffectFunc5), 4, 185, 55, -30, 25) - Thread - Call(N(StarSpiritEffectFunc6)) - EndThread - Wait(1) - EndIf - // wait for pickup - Call(N(StarSpiritEffectFunc4), 3) - Call(PlaySoundAtPlayer, SOUND_RESCUE_STAR_SPIRIT, SOUND_SPACE_DEFAULT) - Call(DisablePlayerInput, TRUE) - Call(GotoMapSpecial, Ref("kmr_23"), kmr_23_ENTRY_4, TRANSITION_GET_STAR_CARD) - Wait(100) - Return - End -}; - -EvtScript N(EVS_ExitWalk_kzn_18_1) = EVT_EXIT_WALK(60, kzn_19_ENTRY_0, "kzn_18", kzn_18_ENTRY_1); -EvtScript N(EVS_ExitWalk_kzn_18_2) = EVT_EXIT_WALK(60, kzn_19_ENTRY_1, "kzn_18", kzn_18_ENTRY_2); -EvtScript N(EVS_ExitWalk_kzn_20_0) = EVT_EXIT_WALK(60, kzn_19_ENTRY_2, "kzn_20", kzn_20_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(Ref(N(EVS_ExitWalk_kzn_18_1)), TRIGGER_FLOOR_ABOVE, COLLIDER_deili3, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_kzn_18_2)), TRIGGER_FLOOR_ABOVE, COLLIDER_deili1, 1, 0) - BindTrigger(Ref(N(EVS_ExitWalk_kzn_20_0)), TRIGGER_FLOOR_ABOVE, COLLIDER_deili2, 1, 0) - Return - End -}; - -EvtScript N(EVS_StartTexPanners_Lava) = { - SetGroup(EVT_GROUP_00) - Call(SetTexPanner, MODEL_yougan1_1, TEX_PANNER_2) - Call(EnableTexPanning, MODEL_toro, TRUE) - Call(EnableTexPanning, MODEL_poko, TRUE) - Call(SetTexPanner, MODEL_poko1, TEX_PANNER_E) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_2) - TEX_PAN_PARAMS_STEP( 200, 0, 400, -100) - TEX_PAN_PARAMS_FREQ( 1, 0, 1, 1) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_5) - TEX_PAN_PARAMS_STEP( 300, -500, 0, 0) - TEX_PAN_PARAMS_FREQ( 1, 1, 0, 0) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Thread - Set(LVar0, 0) - Loop(0) - Call(SetTexPanOffset, TEX_PANNER_D, TEX_PANNER_MAIN, LVar0, 0) - Add(LVar0, 0x8000) - Wait(6) - EndLoop - EndThread - Thread - Set(LVar0, 0) - Loop(0) - Call(SetTexPanOffset, TEX_PANNER_E, TEX_PANNER_MAIN, LVar0, 0) - Add(LVar0, 0x8000) - Wait(4) - EndLoop - EndThread - Return - End -}; - -EvtScript N(EVS_UpdateLavaWaves) = { - SetGroup(EVT_GROUP_00) - Loop(0) - Call(MakeLerp, 0, 180, 40, EASING_COS_IN) - Loop(0) - Call(UpdateLerp) - DivF(LVar0, Float(100.0)) - SubF(LVar0, Float(0.9)) - Call(ScaleModel, MODEL_yougan1_1, 1, LVar0, 1) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(MakeLerp, 180, 0, 40, EASING_SIN_OUT) - Loop(0) - Call(UpdateLerp) - DivF(LVar0, Float(100.0)) - SubF(LVar0, Float(0.9)) - Call(ScaleModel, MODEL_yougan1_1, 1, LVar0, 1) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndLoop - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_MT_LAVALAVA) - Call(SetSpriteShading, SHADING_KZN_19) - EVT_SETUP_CAMERA_DEFAULT() - Call(GetEntryID, LVar0) - IfEq(LVar0, kzn_19_ENTRY_3) - Call(MakeNpcs, TRUE, Ref(N(EscapeNPCs))) - Else - Call(MakeNpcs, TRUE, Ref(N(BossNPCs))) - EndIf - ExecWait(N(EVS_MakeEntities)) - Call(GetEntryID, LVar0) - IfEq(LVar0, kzn_19_ENTRY_3) - Thread - ExecWait(N(EVS_Misstar_Escape)) - Exec(N(EVS_BindExitTriggers)) - EndThread - Else - Set(LVar0, Ref(N(EVS_BindExitTriggers))) - Exec(EnterWalk) - Wait(1) - EndIf - Switch(GB_StoryProgress) - CaseLt(STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(EnableGroup, MODEL_ato, FALSE) - Call(EnableGroup, MODEL_naka, FALSE) - Call(EnableGroup, MODEL_g93, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_ato, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_hoshi_ato, COLLIDER_FLAGS_UPPER_MASK) - CaseEq(STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(EnableGroup, MODEL_mae, FALSE) - Call(EnableGroup, MODEL_g93, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_mae, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_hoshi_ato, COLLIDER_FLAGS_UPPER_MASK) - CaseGt(STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(EnableGroup, MODEL_mae, FALSE) - Call(EnableGroup, MODEL_naka, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_mae, COLLIDER_FLAGS_UPPER_MASK) - EndSwitch - Exec(N(EVS_StartTexPanners_Lava)) - Set(LVar0, MODEL_kem1) - Exec(N(EVS_StartTexPanner_SmokeLeft)) - Set(LVar0, MODEL_kem2) - Exec(N(EVS_StartTexPanner_SmokeRight)) - Exec(N(EVS_SetupMusic)) - Exec(N(EVS_UpdateLavaWaves)) - Exec(N(EVS_UpdateEruption)) - Exec(N(EVS_TrySpawningStarCard)) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_3_npc_settings.c b/src/world/dead/area_kzn/kzn_19/kzn_19_3_npc_settings.c deleted file mode 100644 index c2488db38d2..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_3_npc_settings.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "kzn_19.h" - -#include "world/common/npc/Kolorado.inc.c" -#include "world/common/npc/StarSpirit.inc.c" -#include "world/common/enemy/LavaPiranha.inc.c" diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_4_npc.c b/src/world/dead/area_kzn/kzn_19/kzn_19_4_npc.c deleted file mode 100644 index 05ca63e6eea..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_4_npc.c +++ /dev/null @@ -1,1053 +0,0 @@ -#include "kzn_19.h" -#include "ld_addrs.h" -#include "sprite/player.h" -#include "include_asset.h" - -#include "world/common/npc/Kolorado.h" -#include "world/common/npc/StarSpirit.h" -#include "world/common/enemy/LavaPiranha.h" - -enum { - VINE_0 = 0, - VINE_1 = 1, - VINE_2 = 2, - VINE_3 = 3, - NUM_VINES = 4 -}; - -#ifdef SHIFT -extern Addr D_80200000; -extern Addr D_80204000; -extern Addr D_80207000; -extern Addr D_8020A000; -#define VINE_0_BASE (s32) &D_80200000 -#define VINE_1_BASE (s32) &D_80204000 -#define VINE_2_BASE (s32) &D_80207000 -#define VINE_3_BASE (s32) &D_8020A000 -#else -#define VINE_0_BASE 0x80200000 -#define VINE_1_BASE 0x80204000 -#define VINE_2_BASE 0x80207000 -#define VINE_3_BASE 0x8020A000 -#endif - -#include "./kzn_19_anim1.c" -#include "./kzn_19_anim2.c" -#include "./kzn_19_anim3.c" - -INCLUDE_IMG("world/lava_piranha/vine.png", dead_kzn_19_lava_piranha_vine_img); -INCLUDE_PAL("world/lava_piranha/vine.pal", dead_kzn_19_lava_piranha_vine_pal); - -#include "world/lava_piranha/vine.gfx.inc.c" -#define DEAD_ROM_OFFSET (0x211EB0) - -#define PIRANHA_DMA_ENTRY(name) \ - (s32) world_model_anim_kzn_##name##_ROM_START + DEAD_ROM_OFFSET,\ - (s32) world_model_anim_kzn_##name##_ROM_END + DEAD_ROM_OFFSET,\ - (s32) world_model_anim_kzn_##name##_VRAM - -s32 N(VineAnimationsDmaTable)[] = { - PIRANHA_DMA_ENTRY(00), - PIRANHA_DMA_ENTRY(01), - PIRANHA_DMA_ENTRY(02), - PIRANHA_DMA_ENTRY(03), - PIRANHA_DMA_ENTRY(04), - PIRANHA_DMA_ENTRY(05), - PIRANHA_DMA_ENTRY(06), - PIRANHA_DMA_ENTRY(07), - PIRANHA_DMA_ENTRY(08), - PIRANHA_DMA_ENTRY(09), - PIRANHA_DMA_ENTRY(0A), - PIRANHA_DMA_ENTRY(0B), - PIRANHA_DMA_ENTRY(0C), - PIRANHA_DMA_ENTRY(0D), - PIRANHA_DMA_ENTRY(0E), - PIRANHA_DMA_ENTRY(0F), - PIRANHA_DMA_ENTRY(10), - PIRANHA_DMA_ENTRY(11), - PIRANHA_DMA_ENTRY(12), - PIRANHA_DMA_ENTRY(13), - PIRANHA_DMA_ENTRY(14), - PIRANHA_DMA_ENTRY(15), - PIRANHA_DMA_ENTRY(16), - PIRANHA_DMA_ENTRY(17), - PIRANHA_DMA_ENTRY(18), - PIRANHA_DMA_ENTRY(19), - PIRANHA_DMA_ENTRY(1A), - PIRANHA_DMA_ENTRY(1B), - PIRANHA_DMA_ENTRY(1C), - PIRANHA_DMA_ENTRY(1D), - PIRANHA_DMA_ENTRY(1E), - PIRANHA_DMA_ENTRY(1F), - PIRANHA_DMA_ENTRY(20), - PIRANHA_DMA_ENTRY(21), - PIRANHA_DMA_ENTRY(22), - PIRANHA_DMA_ENTRY(23), - PIRANHA_DMA_ENTRY(24), -}; - -BSS s32 N(VineRenderState); - -MAP_STATIC_PAD(1, unk_static_pad); - -void N(make_vine_interpolation)(LavaPiranhaVine* vine) { - Evt dummyEvt; - Evt* dummyEvtPtr = &dummyEvt; - s32 args[4]; - s32 count; - - // setup dummy call to LoadPath - args[0] = 3 * vine->boneCount; // generate three output samples per input - args[1] = (s32) &vine->bonePos; // points - args[2] = vine->boneCount; // num vectors - args[3] = EASING_LINEAR; - dummyEvtPtr->ptrReadPos = args; - LoadPath(dummyEvtPtr, 1); - - count = 0; - do { - GetNextPathPos(dummyEvtPtr, 1); - vine->points[count].x = evt_get_float_variable(dummyEvtPtr, LVar1); - vine->points[count].y = evt_get_float_variable(dummyEvtPtr, LVar2); - vine->points[count].z = evt_get_float_variable(dummyEvtPtr, LVar3); - count++; - } while (dummyEvtPtr->varTable[0] != 0); - vine->numPoints = count; -} - -API_CALLABLE(N(SetVineBonePos)) { - Bytecode* args = script->ptrReadPos; - s32 vineIdx = evt_get_variable(script, *args++); - s32 jointIdx = evt_get_variable(script, *args++); - s32 x = evt_get_variable(script, *args++); - s32 y = evt_get_variable(script, *args++); - s32 z = evt_get_variable(script, *args++); - LavaPiranhaVine* vines = (LavaPiranhaVine*) evt_get_variable(NULL, MV_VinesData); - LavaPiranhaVine* vine = &vines[vineIdx]; - - vine->bonePos[jointIdx].x = x; - vine->bonePos[jointIdx].y = y; - vine->bonePos[jointIdx].z = z; - return ApiStatus_DONE2; -} - -API_CALLABLE(N(SetVineBoneRot)) { - Bytecode* args = script->ptrReadPos; - s32 vineIdx = evt_get_variable(script, *args++); - s32 jointIdx = evt_get_variable(script, *args++); - s32 rx = evt_get_variable(script, *args++); - s32 ry = evt_get_variable(script, *args++); - s32 rz = evt_get_variable(script, *args++); - LavaPiranhaVine* vines = (LavaPiranhaVine*) evt_get_variable(NULL, MV_VinesData); - LavaPiranhaVine* vine = &vines[vineIdx]; - - vine->boneRot[jointIdx] = rz; - return ApiStatus_DONE2; -} - -API_CALLABLE(N(SetVineBoneScale)) { - Bytecode* args = script->ptrReadPos; - s32 vineIdx = evt_get_variable(script, *args++); - s32 jointIdx = evt_get_variable(script, *args++); - s32 sx = evt_get_variable(script, *args++); - s32 sy = evt_get_variable(script, *args++); - s32 sz = evt_get_variable(script, *args++); - LavaPiranhaVine* vines = (LavaPiranhaVine*) evt_get_variable(NULL, MV_VinesData); - LavaPiranhaVine* vine = &vines[vineIdx]; - - // do nothing - return ApiStatus_DONE2; -} - -void N(appendGfx_piranha_vines)(void* data) { - Vtx_t* vtxBuffer; - Vtx_t* vtx; - - f32 boneLength; - s32 boneCount; - - f32 angle; - f32 nextAngle; - f32 curAngle1; - f32 curAngle2; - - f32 alphaCoord; - f32 alphaFrac; - s32 nearest; - - s32 numPoints; - s32 i, j; - - f32 deltaX, deltaY; - f32 posX, posY, posZ; - - if (N(VineRenderState) == -1) { - return; - } - - if (N(VineRenderState) == 0) { - for (i = 0; i < NUM_VINES; i++) { - LavaPiranhaVine* vines = (LavaPiranhaVine*) evt_get_variable(NULL, MV_VinesData); - LavaPiranhaVine* vine = &vines[i]; - - switch (i) { - default: - return; - case 0: - boneCount = 9; - boneLength = 10.0f; - break; - case 1: - boneCount = 7; - boneLength = 8.0f; - break; - case 2: - boneCount = 7; - boneLength = 8.0f; - break; - case 3: - boneCount = 5; - boneLength = 8.0f; - break; - } - - vine->boneCount = boneCount; - vine->boneLength = boneLength; - - for (j = 0; j < boneCount; j++) { - if (j == (boneCount - 1)) { - vine->boneRot[j] += 90.0f; - } else { - curAngle1 = vine->boneRot[j]; - nextAngle = vine->boneRot[j + 1]; - if (nextAngle - curAngle1 > 180.0f) { - curAngle1 += 360.0f; - } else if (nextAngle - curAngle1 < -180.0f) { - nextAngle += 360.0f; - } - // average cur and next angles - vine->boneRot[j] = ((curAngle1 + nextAngle) / 2.0) + 90.0; - } - } - - N(make_vine_interpolation)(vine); - } - - N(VineRenderState) = 1; - } - - gDPPipeSync(gMainGfxPos++); - gSPDisplayList(gMainGfxPos++, N(lava_piranha_vine_gfx)); - - for (i = 0; i < NUM_VINES; i++) { - LavaPiranhaVine* vines = (LavaPiranhaVine*) evt_get_variable(NULL, MV_VinesData); - LavaPiranhaVine* vine = &vines[i]; - - boneLength = vine->boneLength; - boneCount = vine->boneCount; - numPoints = vine->numPoints; - - // we'll build the vertex data and place it in the display list, so jump forward - // here and leave space behind for the gSPBranchList command followed by two vertices - // for each point in numPoints - - vtxBuffer = (Vtx_t*)(gMainGfxPos + 1); - gSPBranchList(gMainGfxPos, &gMainGfxPos[1 + 2 * (2 * numPoints)]); - vtx = (Vtx_t*) (++gMainGfxPos); - gMainGfxPos = &gMainGfxPos[2 * (2 * numPoints)]; - - for (j = 0; j < numPoints; j++) { - posX = vine->points[j].x; - posY = vine->points[j].y; - posZ = vine->points[j].z; - - alphaCoord = ((f32) j * boneCount) / numPoints; - nearest = (s32) alphaCoord; - alphaFrac = alphaCoord - (f32)nearest; - - if (nearest + 1 >= boneCount) { - angle = vine->boneRot[boneCount - 1]; - } else { - curAngle2 = vine->boneRot[nearest]; - nextAngle = vine->boneRot[nearest + 1]; - if (nextAngle - curAngle2 > 180.0f) { - nextAngle -= 360.0f; - } - if (nextAngle - curAngle2 < -180.0f) { - nextAngle += 360.0f; - } - angle = ((nextAngle - curAngle2) * alphaFrac) + curAngle2; - } - - deltaX = sin_deg(angle) * boneLength; - deltaY = -cos_deg(angle) * boneLength; - - vtx->ob[0] = posX + deltaX; - vtx->ob[1] = posY + deltaY; - vtx->ob[2] = posZ; - vtx->tc[0] = j * 0x140; - vtx->tc[1] = 0; - vtx->cn[0] = j * 50; - vtx->cn[1] = j * 120; - vtx->cn[2] = j * 30; - vtx++; - - vtx->ob[0] = posX - deltaX; - vtx->ob[1] = posY - deltaY; - vtx->ob[2] = posZ; - vtx->tc[0] = j * 0x140; - vtx->tc[1] = 0x400; - vtx->cn[0] = j * 50; - vtx->cn[1] = j * 120; - vtx->cn[2] = j * 30; - vtx++; - } - - for (j = 0; j < numPoints - 1; j++) { - gSPVertex(gMainGfxPos++, &vtxBuffer[2*j], 4, 0); - gSP2Triangles(gMainGfxPos++, 1, 0, 2, 0, 1, 2, 3, 0); - } - } - - gDPPipeSync(gMainGfxPos++); -} - -void N(worker_render_piranha_vines)(void) { - RenderTask renderTask; - - renderTask.appendGfx = &N(appendGfx_piranha_vines); - renderTask.appendGfxArg = 0; - renderTask.dist = 10; - renderTask.renderMode = RENDER_MODE_SURFACE_OPA; - - queue_render_task(&renderTask); -} - -API_CALLABLE(N(MarkVineInterpolationDirty)) { - N(VineRenderState) = 0; - return ApiStatus_DONE2; -} - -API_CALLABLE(N(CreateVineRenderer)) { - LavaPiranhaVine* data = heap_malloc(NUM_VINES * sizeof(*data)); - evt_set_variable(script, MV_VinesData, (s32) data); - N(VineRenderState) = -1; - create_worker_world(NULL, &N(worker_render_piranha_vines)); - return ApiStatus_DONE2; -} - -#include "world/common/complete/LetterDelivery.inc.c" - -s32 N(LetterList)[] = { - ITEM_LETTER_TO_KOLORADO, - ITEM_NONE -}; - -EVT_LETTER_PROMPT(Kolorado, NPC_Kolorado, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, - MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7, - ITEM_LETTER_TO_KOLORADO, N(LetterList)); - -EVT_LETTER_REWARD(Kolorado); - -EvtScript N(EVS_NpcIdle_Kolorado) = { - IfEq(GF_KZN19_KoloradoDeadEnd, FALSE) - Label(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - IfLt(LVar0, 300) - Wait(1) - Goto(0) - EndIf - Call(DisablePlayerInput, TRUE) - Call(NpcFacePlayer, NPC_SELF, 4) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH5_0100) - Set(GF_KZN19_KoloradoDeadEnd, TRUE) - Call(DisablePlayerInput, FALSE) - Call(SetSelfVar, 0, 0) - Label(5) - Call(InterpNpcYaw, NPC_SELF, 90, 0) - Wait(30) - Call(InterpNpcYaw, NPC_SELF, 270, 0) - Wait(30) - Call(GetSelfVar, 0, LVar0) - IfEq(LVar0, 0) - Goto(5) - EndIf - EndIf - Return - End -}; - -EvtScript N(EVS_Kolorado_Escape) = { - Label(0) - IfEq(MV_BossDefeated, FALSE) - Wait(1) - Goto(0) - EndIf - Call(DisablePlayerInput, TRUE) - Wait(60) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(SetNpcPos, NPC_SELF, 70, 25, 60) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Call(SetNpcSpeed, NPC_SELF, Float(4.0)) - Call(NpcMoveTo, NPC_SELF, 170, 0, 0) - Call(NpcMoveTo, NPC_SELF, 280, 70, 0) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Panic, ANIM_Kolorado_Yell, 0, MSG_CH5_0107) - Call(UseSettingsFrom, CAM_DEFAULT, 450, 25, -20) - Call(SetPanTarget, CAM_DEFAULT, 450, 25, -20) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.5)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(NpcMoveTo, NPC_SELF, 535, -60, 0) - Wait(20) - Call(SetPanTarget, CAM_DEFAULT, 304, 25, -35) - Call(SetCamSpeed, CAM_DEFAULT, Float(3.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SetNpcAux, NPC_LavaPiranhaHead, 0) - Wait(10) - Call(FadeOutMusic, 0, 1500) - Exec(N(EVS_TrySpawningStarCard)) - Wait(30) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Kolorado) = { - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_TalkSad, ANIM_Kolorado_IdleSad, 0, MSG_CH5_0101) - Call(SetSelfVar, 0, 1) - EVT_LETTER_CHECK(Kolorado) - Return - End -}; - -EvtScript N(EVS_NpcInit_Kolorado) = { - IfLt(GB_StoryProgress, STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(GetEntryID, LVar0) - Switch(LVar0) - CaseEq(kzn_19_ENTRY_0) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Kolorado))) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Kolorado))) - CaseEq(kzn_19_ENTRY_1) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_Kolorado_Escape))) - EndSwitch - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -Vec3f N(FlightPath)[] = { - { 250.0, 40.0, -35.0 }, - { 410.0, 30.0, 0.0 }, - { 460.0, 40.0, -30.0 }, - { 510.0, 50.0, -72.0 }, - { 540.0, 60.0, -115.0 }, -}; - -EvtScript N(EVS_Misstar_Escape) = { - Call(DisablePlayerInput, TRUE) - Call(SetPlayerPos, 185, 25, -35) - Call(SetNpcPos, NPC_PARTNER, 155, 25, -35) - Call(SetNpcPos, NPC_Misstar, 250, 40, -35) - Call(UseSettingsFrom, CAM_DEFAULT, 217, 25, -35) - Call(SetPanTarget, CAM_DEFAULT, 217, 25, -35) - Call(SetCamDistance, CAM_DEFAULT, 380) - Call(SetCamPitch, CAM_DEFAULT, Float(12.0), Float(-7.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Wait(30) - Set(AF_KZN_BossRoomFloorBroken, TRUE) - Call(PlaySound, SOUND_LOOP_RUMBLE) - Loop(0) - Wait(1) - IfNe(AF_KZN_BossRoomFloorBroken, TRUE) - BreakLoop - EndIf - EndLoop - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Call(InterpPlayerYaw, 90, 0) - Call(InterpNpcYaw, NPC_PARTNER, 90, 0) - Call(GetNpcPos, NPC_Misstar, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamSpeed, CAM_DEFAULT, Float(3.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Wait(10) - Call(SpeakToPlayer, NPC_Misstar, ANIM_WorldMisstar_Talk, ANIM_WorldMisstar_Idle, 0, MSG_CH5_0109) - Wait(10) - Call(SetPanTarget, CAM_DEFAULT, 370, 25, 70) - Call(SetCamSpeed, CAM_DEFAULT, Float(0.8)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(InterpNpcYaw, NPC_Misstar, 90, 0) - Call(LoadPath, 45, Ref(N(FlightPath)), ARRAY_COUNT(N(FlightPath)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_Misstar, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - Call(SetNpcPos, NPC_Misstar, NPC_DISPOSE_LOCATION) - Wait(15) - Call(ResetCam, CAM_DEFAULT, Float(3.0)) - Set(GB_StoryProgress, STORY_CH5_MT_LAVA_LAVA_ERUPTING) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -API_CALLABLE(N(LoadAnimationFromTable)) { - Bytecode* args = script->ptrReadPos; - s32 type = evt_get_variable(script, *args++); - s32 index = evt_get_variable(script, *args++); - - switch (type) { - case VINE_0: - dma_copy( - (u8*) N(VineAnimationsDmaTable)[3 * index + 0], - (u8*) N(VineAnimationsDmaTable)[3 * index + 1], - (void*) VINE_0_BASE); - break; - case VINE_1: - dma_copy( - (u8*) N(VineAnimationsDmaTable)[3 * index + 0], - (u8*) N(VineAnimationsDmaTable)[3 * index + 1], - (void*) VINE_1_BASE); - break; - case VINE_2: - dma_copy( - (u8*) N(VineAnimationsDmaTable)[3 * index + 0], - (u8*) N(VineAnimationsDmaTable)[3 * index + 1], - (void*) VINE_2_BASE); - break; - case VINE_3: - dma_copy( - (u8*) N(VineAnimationsDmaTable)[3 * index + 0], - (u8*) N(VineAnimationsDmaTable)[3 * index + 1], - (void*) VINE_3_BASE); - break; - } - return ApiStatus_DONE2; -} - -EvtScript N(EVS_PlayVinesAnim_Emerge) = { - Thread - Call(N(LoadAnimationFromTable), VINE_0, 15) - Call(PlayModelAnimation, VINE_0, VINE_0_BASE) - Call(SetAnimatedModelRootPosition, VINE_0, 220, 20, -40) - Call(N(LoadAnimationFromTable), VINE_3, 36) - Call(PlayModelAnimation, VINE_3, VINE_3_BASE) - Call(SetAnimatedModelRootPosition, VINE_3, 220, 20, -40) - Wait(59) - Call(N(LoadAnimationFromTable), VINE_0, 0) - Call(PlayModelAnimation, VINE_0, VINE_0_BASE) - Call(N(LoadAnimationFromTable), VINE_3, 34) - Call(PlayModelAnimation, VINE_3, VINE_3_BASE) - EndThread - Wait(5) - Thread - Call(N(LoadAnimationFromTable), VINE_1, 32) - Call(PlayModelAnimation, VINE_1, VINE_1_BASE) - Call(SetAnimatedModelRootPosition, VINE_1, 220, 20, -40) - Wait(59) - Call(N(LoadAnimationFromTable), VINE_1, 31) - Call(PlayModelAnimation, VINE_1, VINE_1_BASE) - EndThread - Wait(7) - Call(N(LoadAnimationFromTable), VINE_2, 32) - Call(PlayModelAnimation, VINE_2, VINE_2_BASE) - Call(SetAnimatedModelRootPosition, VINE_2, 270, 34, -20) - Wait(62) - Call(N(LoadAnimationFromTable), VINE_2, 31) - Call(PlayModelAnimation, VINE_2, VINE_2_BASE) - Return - End -}; - -EvtScript N(EVS_PlayVinesAnim_Idle) = { - Call(N(LoadAnimationFromTable), VINE_0, 0) - Call(PlayModelAnimation, VINE_0, VINE_0_BASE) - Call(N(LoadAnimationFromTable), VINE_1, 31) - Call(PlayModelAnimation, VINE_1, VINE_1_BASE) - Call(N(LoadAnimationFromTable), VINE_3, 34) - Call(PlayModelAnimation, VINE_3, VINE_3_BASE) - Wait(10) - Call(N(LoadAnimationFromTable), VINE_2, 31) - Call(PlayModelAnimation, VINE_2, VINE_2_BASE) - Return - End -}; - -EvtScript N(EVS_PlayVinesAnim_Talk) = { - Call(N(LoadAnimationFromTable), VINE_0, 17) - Call(PlayModelAnimation, VINE_0, VINE_0_BASE) - Return - End -}; - -EvtScript N(EVS_PlayVinesAnim_Defeat) = { - Call(N(LoadAnimationFromTable), VINE_0, 16) - Call(PlayModelAnimation, VINE_0, VINE_0_BASE) - Call(N(LoadAnimationFromTable), VINE_1, 33) - Call(PlayModelAnimation, VINE_1, VINE_1_BASE) - Call(N(LoadAnimationFromTable), VINE_2, 33) - Call(PlayModelAnimation, VINE_2, VINE_2_BASE) - Call(N(LoadAnimationFromTable), VINE_3, 35) - Call(PlayModelAnimation, VINE_3, VINE_3_BASE) - Return - End -}; - -EvtScript N(EVS_NpcIdle_LavaPiranha) = { - Loop(0) - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Wait(1) - IfGt(LVar0, 150) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerInput, TRUE) - Call(SetMusicTrack, 0, SONG_LAVA_PIRANHA_THEME, 0, 8) - Call(LoadAnimatedModel, VINE_0, Ref(N(AnimModel_MainHeadVine))) - Call(N(LoadAnimationFromTable), VINE_0, 0) - Call(PlayModelAnimation, VINE_0, VINE_0_BASE) - Call(SetAnimatedModelRootPosition, VINE_0, 220, -100, -40) - Call(SetAnimatorFlags, VINE_0, MODEL_ANIMATOR_FLAG_HIDDEN, 1) - Call(LoadAnimatedModel, VINE_1, Ref(N(AnimModel_SideHeadVine))) - Call(N(LoadAnimationFromTable), VINE_1, 31) - Call(PlayModelAnimation, VINE_1, VINE_1_BASE) - Call(SetAnimatedModelRootPosition, VINE_1, 220, -100, -40) - Call(SetAnimatorFlags, VINE_1, MODEL_ANIMATOR_FLAG_HIDDEN, 1) - Call(LoadAnimatedModel, VINE_2, Ref(N(AnimModel_SideHeadVine))) - Call(N(LoadAnimationFromTable), VINE_2, 31) - Call(PlayModelAnimation, VINE_2, VINE_2_BASE) - Call(SetAnimatedModelRootPosition, VINE_2, 270, -100, -20) - Call(SetAnimatorFlags, VINE_2, MODEL_ANIMATOR_FLAG_HIDDEN, 1) - Call(LoadAnimatedModel, VINE_3, Ref(N(AnimModel_ExtraVine))) - Call(N(LoadAnimationFromTable), VINE_3, 34) - Call(PlayModelAnimation, VINE_3, VINE_3_BASE) - Call(SetAnimatedModelRootPosition, VINE_3, 220, -100, -40) - Call(SetAnimatorFlags, VINE_3, MODEL_ANIMATOR_FLAG_HIDDEN, 1) - Call(N(CreateVineRenderer)) - Call(SetSelfVar, 1, 1) - Call(InterpPlayerYaw, 90, 0) - Thread - Wait(15) - Call(UseSettingsFrom, CAM_DEFAULT, 300, 25, -20) - Call(SetPanTarget, CAM_DEFAULT, 300, 25, -20) - Call(SetCamDistance, CAM_DEFAULT, Float(350.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-9.5)) - Call(SetCamSpeed, CAM_DEFAULT, Float(2.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - EndThread - Call(MakeLerp, 0, 40, 80, EASING_QUADRATIC_OUT) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_poko, 0, LVar0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Thread - Call(InterruptUsePartner) - Call(SetPlayerSpeed, Float(3.0)) - Call(PlayerMoveTo, 200, -30, 0) - Call(InterpPlayerYaw, 90, 0) - EndThread - Call(PlaySoundAt, SOUND_LAVA_PIRANHA_EMERGE, SOUND_SPACE_DEFAULT, 330, 25, -50) - Exec(N(EVS_PlayVinesAnim_Emerge)) - Wait(59) - Thread - Call(MakeLerp, 40, 0, 80, EASING_QUADRATIC_OUT) - Loop(0) - Call(UpdateLerp) - Call(TranslateModel, MODEL_poko, 0, LVar0, 0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndThread - Wait(40) - Call(UseSettingsFrom, CAM_DEFAULT, 235, 25, -20) - Call(SetPanTarget, CAM_DEFAULT, 235, 25, -20) - Call(SetCamDistance, CAM_DEFAULT, Float(420.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(10.0), Float(-10.7)) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Exec(N(EVS_PlayVinesAnim_Talk)) - Call(SpeakToPlayer, NPC_SELF, ANIM_LavaPiranha_Anim0E, ANIM_LavaPiranha_Anim03, 768, -30, 30, MSG_CH5_0102) - Exec(N(EVS_PlayVinesAnim_Idle)) - Wait(10) - Call(EndSpeech, NPC_SELF, ANIM_LavaPiranha_Anim0E, ANIM_LavaPiranha_Anim03, 256, -30, 30) - Exec(N(EVS_PlayVinesAnim_Talk)) - Wait(30) - Call(SpeakToPlayer, NPC_SELF, ANIM_LavaPiranha_Anim0E, ANIM_LavaPiranha_Anim03, 768, -30, 30, MSG_CH5_0103) - Exec(N(EVS_PlayVinesAnim_Idle)) - Wait(10) - Call(EndSpeech, NPC_SELF, ANIM_LavaPiranha_Anim0E, ANIM_LavaPiranha_Anim03, 768, -30, 30) - Exec(N(EVS_PlayVinesAnim_Talk)) - Wait(10) - Call(EndSpeech, NPC_SELF, ANIM_LavaPiranha_Anim0E, ANIM_LavaPiranha_Anim03, 768, -30, 30) - Exec(N(EVS_PlayVinesAnim_Idle)) - Wait(10) - Call(EndSpeech, NPC_SELF, ANIM_LavaPiranha_Anim0E, ANIM_LavaPiranha_Anim03, 768, -30, 30) - ChildThread - Set(LVar0, 20) - Loop(3) - Call(SetCamDistance, CAM_DEFAULT, Float(250.0)) - Call(SetCamSpeed, CAM_DEFAULT, LVar0) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Sub(LVar0, 2) - Call(SetCamDistance, CAM_DEFAULT, Float(440.0)) - Call(SetCamSpeed, CAM_DEFAULT, LVar0) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Sub(LVar0, 2) - EndLoop - EndChildThread - Call(DisablePlayerInput, FALSE) - Call(StartBossBattle, SONG_LAVA_PIRANHA_BATTLE) - Return - End -}; - -EvtScript N(EVS_NpcAux_LavaPiranha) = { - Call(GetSelfVar, 0, LVar0) - UseArray(LVar0) - Loop(0) - Call(GetSelfVar, 1, LVar0) - IfEq(LVar0, 1) - BreakLoop - EndIf - Wait(1) - EndLoop - Label(0) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 10, LVar0, LVar1, LVar2) - Call(SetNpcPos, NPC_LavaPiranhaHead, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 10, LVar0, LVar1, LVar2) - Call(SetNpcRotation, NPC_LavaPiranhaHead, LVar0, 0, LVar2) - Call(N(MarkVineInterpolationDirty)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 10, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 0, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 10, LVar0, LVar1, LVar2) - Add(LVar2, 90) - Call(N(SetVineBoneRot), VINE_0, 0, LVar0, 0, LVar2) - Call(N(SetVineBoneScale), VINE_0, 0, 1, 1, 1) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 1, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 1, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 1, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 9, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 2, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 9, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 2, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 3, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 3, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 8, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 4, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 8, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 4, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 5, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 5, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 7, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 6, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 7, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 6, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 7, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 7, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 7, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_0, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_0, 8, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_0, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_0, 8, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_0, 8, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 8, LVar0, LVar1, LVar2) - Call(SetNpcPos, NPC_LavaBud_01, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 8, LVar0, LVar1, LVar2) - Call(SetNpcRotation, NPC_LavaBud_01, LVar0, 0, LVar2) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 8, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_1, 0, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 8, LVar0, LVar1, LVar2) - Add(LVar2, 90) - Call(N(SetVineBoneRot), VINE_1, 0, LVar0, 0, LVar2) - Call(N(SetVineBoneScale), VINE_1, 0, 1, 1, 1) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 4, LVar0, LVar1, LVar2) - Sub(LVar2, 2) - Call(N(SetVineBonePos), VINE_1, 1, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_1, 1, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_1, 1, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 7, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_1, 2, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 7, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_1, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_1, 2, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_1, 3, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_1, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_1, 3, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_1, 4, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_1, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_1, 4, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_1, 5, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_1, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_1, 5, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_1, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_1, 6, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_1, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_1, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_1, 6, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 8, LVar0, LVar1, LVar2) - Call(SetNpcPos, NPC_LavaBud_02, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 8, LVar0, LVar1, LVar2) - Call(SetNpcRotation, NPC_LavaBud_02, LVar0, 0, LVar2) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 8, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_2, 0, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 8, LVar0, LVar1, LVar2) - Add(LVar2, 90) - Call(N(SetVineBoneRot), VINE_2, 0, LVar0, 0, LVar2) - Call(N(SetVineBoneScale), VINE_2, 0, 1, 1, 1) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 4, LVar0, LVar1, LVar2) - Sub(LVar2, 2) - Call(N(SetVineBonePos), VINE_2, 1, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_2, 1, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_2, 1, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 7, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_2, 2, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 7, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_2, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_2, 2, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_2, 3, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_2, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_2, 3, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_2, 4, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_2, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_2, 4, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_2, 5, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_2, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_2, 5, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_2, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_2, 6, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_2, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_2, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_2, 6, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_3, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_3, 0, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_3, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_3, 0, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_3, 0, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_3, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_3, 1, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_3, 6, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_3, 1, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_3, 1, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_3, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_3, 2, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_3, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_3, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_3, 2, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_3, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_3, 3, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_3, 5, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_3, 3, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_3, 3, Float(0.714), Float(0.714), Float(1.0)) - Call(GetAnimatedPositionByTreeIndex, VINE_3, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBonePos), VINE_3, 4, LVar0, LVar1, LVar2) - Call(GetAnimatedRotationByTreeIndex, VINE_3, 2, LVar0, LVar1, LVar2) - Call(N(SetVineBoneRot), VINE_3, 4, LVar0, LVar1, LVar2) - Call(N(SetVineBoneScale), VINE_3, 4, Float(0.714), Float(0.714), Float(1.0)) - Wait(1) - Goto(0) - Return - End -}; - -EvtScript N(EVS_NpcDefeat_LavaPiranha) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - Call(SetEncounterStatusFlags, ENCOUNTER_STATUS_FLAG_2, TRUE) - Call(SetMusicTrack, 0, SONG_MT_LAVALAVA, 0, 8) - Call(SetPlayerPos, 125, 25, -35) - Call(SetNpcPos, NPC_PARTNER, 100, 25, -35) - Call(SetCamLeadPlayer, CAM_DEFAULT, FALSE) - Call(UseSettingsFrom, CAM_DEFAULT, 125, 25, -35) - Call(SetPanTarget, CAM_DEFAULT, 205, 25, -35) - Call(SetCamDistance, CAM_DEFAULT, 470) - Call(SetCamPitch, CAM_DEFAULT, Float(16.0), Float(-8.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(EnableGroup, MODEL_ato, TRUE) - Call(EnableGroup, MODEL_naka, TRUE) - Call(EnableGroup, MODEL_mae, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_ato, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_mae, COLLIDER_FLAGS_UPPER_MASK) - Call(PlaySoundAt, SOUND_LAVA_PIRANHA_DEFEAT, SOUND_SPACE_DEFAULT, 330, 25, -50) - Exec(N(EVS_PlayVinesAnim_Defeat)) - Wait(1) - Call(SetNpcAux, NPC_SELF, Ref(N(EVS_NpcAux_LavaPiranha))) - Set(MV_BossDefeated, TRUE) - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_LavaPiranha) = { - Call(GetEntryID, LVar0) - IfEq(LVar0, kzn_19_ENTRY_1) - IfLt(GB_StoryProgress, STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(SetNpcAnimation, NPC_LavaPiranhaHead, ANIM_LavaPiranha_Anim03) - Call(SetNpcAnimation, NPC_LavaBud_01, ANIM_LavaBud_Anim03) - Call(SetNpcAnimation, NPC_LavaBud_02, ANIM_LavaBud_Anim03) - MallocArray(64, LVar0) - Call(SetSelfVar, 0, LVar0) - UseArray(LVar0) - Call(SetSelfVar, 1, 0) - Call(BindNpcAux, NPC_SELF, Ref(N(EVS_NpcAux_LavaPiranha))) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_LavaPiranha))) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_LavaPiranha))) - Return - EndIf - EndIf - Call(SetNpcPos, NPC_05, NPC_DISPOSE_LOCATION) - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - Return - End -}; - -EvtScript N(EVS_NpcDefeat_LavaBud) = { - Call(GetBattleOutcome, LVar0) - Switch(LVar0) - CaseEq(OUTCOME_PLAYER_WON) - CaseEq(OUTCOME_PLAYER_LOST) - CaseEq(OUTCOME_PLAYER_FLED) - EndSwitch - Return - End -}; - -EvtScript N(EVS_NpcInit_LavaBud) = { - IfLt(GB_StoryProgress, STORY_CH5_DEFEATED_LAVA_PIRANHA) - Call(BindNpcDefeat, NPC_SELF, Ref(N(EVS_NpcDefeat_LavaBud))) - Else - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - EndIf - Return - End -}; - -NpcData N(NpcData_Kolorado) = { - .id = NPC_Kolorado, - .pos = { 380.0f, 250.0f, -330.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Kolorado), - .settings = &N(NpcSettings_Kolorado), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_ENABLE_HIT_SCRIPT | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_10000 | ENEMY_FLAG_100000 | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = KOLORADO_ANIMS, - .tattle = MSG_NpcTattle_Kolorado, -}; - -NpcData N(NpcData_Misstar) = { - .id = NPC_Misstar, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 270, - .settings = &N(NpcSettings_StarSpirit), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = MISSTAR_ANIMS, - .tattle = MSG_NpcTattle_Misstar, -}; - -AnimID N(ExtraAnims_LavaPiranha)[] = { - ANIM_LavaPiranha_Anim03, - ANIM_LavaPiranha_Anim0E, - ANIM_LIST_END -}; - -AnimID N(ExtraAnims_LavaBud)[] = { - ANIM_LavaBud_Anim03, - ANIM_LIST_END -}; - -NpcData N(NpcData_LavaPiranha)[] = { - { - .id = NPC_LavaPiranhaHead, - .pos = { 400.0f, 25.0f, -30.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_LavaPiranha), - .settings = &N(NpcSettings_LavaPiranhaHead), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_FLYING | ENEMY_FLAG_40000, - .drops = LAVA_PIRANHA_DROPS, - .animations = LAVA_PIRANHA_HEAD_ANIMS, - .extraAnimations = N(ExtraAnims_LavaPiranha), - .aiDetectFlags = AI_DETECT_SENSITIVE_MOTION, - }, - { - .id = NPC_LavaBud_01, - .pos = { 400.0f, 25.0f, -30.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_LavaBud), - .settings = &N(NpcSettings_LavaPiranhaHead), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_40000, - .drops = LAVA_PIRANHA_DROPS, - .animations = LAVA_PIRANHA_BUD_ANIMS, - .extraAnimations = N(ExtraAnims_LavaBud), - .aiDetectFlags = AI_DETECT_SENSITIVE_MOTION, - }, - { - .id = NPC_LavaBud_02, - .pos = { 400.0f, 25.0f, -30.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_LavaBud), - .settings = &N(NpcSettings_LavaPiranhaHead), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_4 | ENEMY_FLAG_40000, - .drops = LAVA_PIRANHA_DROPS, - .animations = LAVA_PIRANHA_BUD_ANIMS, - .extraAnimations = N(ExtraAnims_LavaBud), - .aiDetectFlags = AI_DETECT_SENSITIVE_MOTION, - }, -}; - -NpcGroupList N(BossNPCs) = { - NPC_GROUP(N(NpcData_Kolorado)), - NPC_GROUP(N(NpcData_LavaPiranha), 0x1900, BTL_KZN2_STAGE_06), - {} -}; - -NpcGroupList N(EscapeNPCs) = { - NPC_GROUP(N(NpcData_Misstar)), - {} -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_5_eruption.c b/src/world/dead/area_kzn/kzn_19/kzn_19_5_eruption.c deleted file mode 100644 index 645ef13a296..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_5_eruption.c +++ /dev/null @@ -1,92 +0,0 @@ -#include "kzn_19.h" -#include "sprite/player.h" - -EvtScript N(EVS_CrackFloor) = { - Call(EnableGroup, MODEL_naka, FALSE) - Call(EnableGroup, MODEL_g93, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_hoshi_ato, COLLIDER_FLAGS_UPPER_MASK) - SetF(LVar0, 0) - Thread - Loop(60) - AddF(LVar0, Float(0.334)) - Call(RotateModel, MODEL_o2, LVar0, 0, 0, -1) - Wait(1) - EndLoop - EndThread - Thread - Loop(60) - AddF(LVar0, Float(0.5)) - Call(RotateModel, MODEL_o3, LVar0, 0, 0, -1) - Wait(1) - EndLoop - EndThread - Thread - Loop(60) - AddF(LVar0, Float(0.25)) - Call(RotateModel, MODEL_o4, LVar0, 0, 0, -1) - Wait(1) - EndLoop - EndThread - Loop(120) - SubF(LVar0, Float(0.25)) - Call(TranslateModel, MODEL_o6, 0, LVar0, 0) - Wait(1) - EndLoop - Set(AF_KZN_BossRoomFloorBroken, FALSE) - Return - End -}; - -EvtScript N(EVS_SetFloorCracked) = { - Call(RotateModel, MODEL_o2, 20, 0, 0, -1) - Call(RotateModel, MODEL_o3, 30, 0, 0, -1) - Call(RotateModel, MODEL_o4, 15, 0, 0, -1) - Call(TranslateModel, MODEL_o6, 0, -30, 0) - Return - End -}; - -EvtScript N(EVS_UpdateEruption) = { - Set(AF_KZN_BossRoomFloorBroken, FALSE) - IfGe(GB_StoryProgress, STORY_CH5_STAR_SPRIT_DEPARTED) - Return - EndIf - IfLt(GB_StoryProgress, STORY_CH5_MT_LAVA_LAVA_ERUPTING) - // wait for card pickup - Loop(0) - Wait(1) - IfNe(AF_KZN_BossRoomFloorBroken, FALSE) - BreakLoop - EndIf - EndLoop - // begin eruption effects - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(2.0)) - Call(SetPanTarget, CAM_DEFAULT, 170, 25, 0) - Call(SetCamSpeed, CAM_DEFAULT, Float(0.5)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(ShakeCam, CAM_DEFAULT, 0, 25, Float(2.0)) - Call(InterpPlayerYaw, 270, 0) - Call(InterpNpcYaw, NPC_PARTNER, 270, 0) - Call(SetPlayerAnimation, ANIM_Mario1_Flail) - Exec(N(EVS_CrackFloor)) - Call(MakeLerp, 200, 50, 75, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - DivF(LVar0, Float(100.0)) - Call(ShakeCam, CAM_DEFAULT, 0, 1, LVar0) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Else - // GB_StoryProgress == STORY_CH5_MT_LAVA_LAVA_ERUPTING - Exec(N(EVS_SetFloorCracked)) - EndIf - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_hoshi, COLLIDER_FLAGS_UPPER_MASK) - Loop(0) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(0.5)) - EndLoop - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_6_entity.c b/src/world/dead/area_kzn/kzn_19/kzn_19_6_entity.c deleted file mode 100644 index 4a63c167eef..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_6_entity.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "kzn_19.h" -#include "entity.h" - -EvtScript N(EVS_MakeEntities) = { - Call(MakeEntity, Ref(Entity_YellowBlock), -170, 310, -340, 0, ITEM_SUPER_SHROOM, MAKE_ENTITY_END) - Call(AssignBlockFlag, GF_KZN19_ItemBlock_SuperShroom) - Call(MakeEntity, Ref(Entity_YellowBlock), -70, 310, -340, 0, ITEM_MAPLE_SYRUP, MAKE_ENTITY_END) - Call(AssignBlockFlag, GF_KZN19_ItemBlock_MapleSyrup) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_anim1.c b/src/world/dead/area_kzn/kzn_19/kzn_19_anim1.c deleted file mode 100644 index d9febbca9da..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_anim1.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "animation_script.h" - -StaticAnimatorNode N(D_80243040_C90BF0) = { - .pos = { 102.0, 99.0, -10.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(22.8852) }, - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_8024306C_C90C1C) = { - .pos = { 137.0, 94.0, -10.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(60.481583) }, - .sibling = &N(D_80243040_C90BF0), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_80243098_C90C48) = { - .pos = { 127.0, 56.0, -10.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-29.751884) }, - .sibling = &N(D_8024306C_C90C1C), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_802430C4_C90C74) = { - .pos = { 106.0, 23.0, -10.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-19.995728) }, - .sibling = &N(D_80243098_C90C48), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_802430F0_C90CA0) = { - .pos = { 122.0, -13.0, -10.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(29.999084) }, - .sibling = &N(D_802430C4_C90C74), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_8024311C_C90CCC) = { - .pos = { 120.0, 108.0, -11.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(115.607162) }, - .sibling = &N(D_802430F0_C90CA0), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_80243148_C90CF8) = { - .pos = { 140.0, 73.0, -11.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(15.359355) }, - .sibling = &N(D_8024311C_C90CCC), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_80243174_C90D24) = { - .pos = { 112.0, 42.0, -11.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-44.875027) }, - .sibling = &N(D_80243148_C90CF8), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_802431A0_C90D50) = { - .pos = { 110.0, 3.0, -11.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(4.998932) }, - .sibling = &N(D_80243174_C90D24), - .displayList = &N(D_80243040_C90BF0), -}; - -StaticAnimatorNode N(D_802431CC_C90D7C) = { - .pos = { 0.0, 0.0, 0.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(0.0) }, - .child = &N(D_802431A0_C90D50), -}; - -StaticAnimatorNode* N(AnimModel_MainHeadVine)[] = { - &N(D_802431CC_C90D7C), &N(D_802431A0_C90D50), &N(D_80243174_C90D24), &N(D_80243148_C90CF8), - &N(D_8024311C_C90CCC), &N(D_802430F0_C90CA0), &N(D_802430C4_C90C74), &N(D_80243098_C90C48), - &N(D_8024306C_C90C1C), &N(D_80243040_C90BF0), NULL, NULL -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_anim2.c b/src/world/dead/area_kzn/kzn_19/kzn_19_anim2.c deleted file mode 100644 index 0dafa101018..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_anim2.c +++ /dev/null @@ -1,61 +0,0 @@ -#include "animation_script.h" - -StaticAnimatorNode N(D_80243228_C90DD8) = { - .pos = { 62.0, 53.0, -20.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(71.523178) }, - .displayList = &N(D_80243228_C90DD8), -}; - -StaticAnimatorNode N(D_80243254_C90E04) = { - .pos = { 97.0, 51.0, -20.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(71.781364) }, - .sibling = &N(D_80243228_C90DD8), - .displayList = &N(D_80243228_C90DD8), -}; - -StaticAnimatorNode N(D_80243280_C90E30) = { - .pos = { 75.0, 19.0, -20.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-55.625477) }, - .sibling = &N(D_80243254_C90E04), - .displayList = &N(D_80243228_C90DD8), -}; - -StaticAnimatorNode N(D_802432AC_C90E5C) = { - .pos = { 69.0, -19.0, -20.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(0.670186) }, - .sibling = &N(D_80243280_C90E30), - .displayList = &N(D_80243228_C90DD8), -}; - -StaticAnimatorNode N(D_802432D8_C90E88) = { - .pos = { 76.0, 62.0, -21.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(135.4820) }, - .sibling = &N(D_802432AC_C90E5C), - .displayList = &N(D_80243228_C90DD8), -}; - -StaticAnimatorNode N(D_80243304_C90EB4) = { - .pos = { 96.0, 28.0, -21.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(8.075197) }, - .sibling = &N(D_802432D8_C90E88), - .displayList = &N(D_80243228_C90DD8), -}; - -StaticAnimatorNode N(D_80243330_C90EE0) = { - .pos = { 67.0, 0.0, -21.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-29.328897) }, - .sibling = &N(D_80243304_C90EB4), - .displayList = &N(D_80243228_C90DD8), -}; - -StaticAnimatorNode N(D_8024335C_C90F0C) = { - .pos = { 0.0, 0.0, 0.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(0.0) }, - .child = &N(D_80243330_C90EE0), -}; - -StaticAnimatorNode* N(AnimModel_SideHeadVine)[] = { - &N(D_8024335C_C90F0C), &N(D_80243330_C90EE0), &N(D_80243304_C90EB4), &N(D_802432D8_C90E88), - &N(D_802432AC_C90E5C), &N(D_80243280_C90E30), &N(D_80243254_C90E04), &N(D_80243228_C90DD8), - NULL, NULL -}; diff --git a/src/world/dead/area_kzn/kzn_19/kzn_19_anim3.c b/src/world/dead/area_kzn/kzn_19/kzn_19_anim3.c deleted file mode 100644 index 6565d494fb2..00000000000 --- a/src/world/dead/area_kzn/kzn_19/kzn_19_anim3.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "animation_script.h" - -StaticAnimatorNode N(D_802433B0_C90F60) = { - .pos = { 132.0, -5.0, -5.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(165.157013) }, - .displayList = &N(D_802433B0_C90F60), -}; - -StaticAnimatorNode N(D_802433DC_C90F8C) = { - .pos = { 98.0, 4.0, -5.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-80.120239) }, - .sibling = &N(D_802433B0_C90F60), - .displayList = &N(D_802433B0_C90F60), -}; - -StaticAnimatorNode N(D_80243408_C90FB8) = { - .pos = { 129.0, -26.0, -6.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(125.160072) }, - .sibling = &N(D_802433DC_C90F8C), - .displayList = &N(D_802433B0_C90F60), -}; - -StaticAnimatorNode N(D_80243434_C90FE4) = { - .pos = { 120.0, 12.0, -6.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-154.983368) }, - .sibling = &N(D_80243408_C90FB8), - .displayList = &N(D_802433B0_C90F60), -}; - -StaticAnimatorNode N(D_80243460_C91010) = { - .pos = { 87.0, -13.0, -6.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(-39.749748) }, - .sibling = &N(D_80243434_C90FE4), - .displayList = &N(D_802433B0_C90F60), -}; - -StaticAnimatorNode N(D_8024348C_C9103C) = { - .pos = { 0.0, 0.0, 0.0 }, - .rot = { AS_F(0.0), AS_F(0.0), AS_F(0.0) }, - .child = &N(D_80243460_C91010), -}; - -StaticAnimatorNode* N(AnimModel_ExtraVine)[] = { - &N(D_8024348C_C9103C), &N(D_80243460_C91010), &N(D_80243434_C90FE4), &N(D_80243408_C90FB8), - &N(D_802433DC_C90F8C), &N(D_802433B0_C90F60), NULL, NULL -}; diff --git a/src/world/dead/area_kzn/kzn_20/kzn_20.h b/src/world/dead/area_kzn/kzn_20/kzn_20.h deleted file mode 100644 index 08ad5fa270f..00000000000 --- a/src/world/dead/area_kzn/kzn_20/kzn_20.h +++ /dev/null @@ -1,29 +0,0 @@ -// Older version of kzn_20 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../kzn.h" -#include "mapfs/kzn_20_shape.h" -#include "mapfs/kzn_20_hit.h" - -enum { - NPC_Kolorado = 0, - NPC_Misstar = 1, -}; - -enum { - MV_LavaPosOffset = MapVar(10), - MV_WaveScaleOffset = MapVar(11), - MV_PosScaleCoeff = MapVar(12), - MV_SceneState = MapVar(13), -}; - -#define NAMESPACE dead_kzn_20 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_ShakingWorld); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_kzn/kzn_20/kzn_20_0_header.c b/src/world/dead/area_kzn/kzn_20/kzn_20_0_header.c deleted file mode 100644 index 861b5201bcf..00000000000 --- a/src/world/dead/area_kzn/kzn_20/kzn_20_0_header.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "kzn_20.h" - -EntryList N(Entrances) = { - [kzn_20_ENTRY_0] { -182.0, 0.0, 36.0, 90.0 }, - [kzn_20_ENTRY_1] { 164.0, 150.0, 20.0, 270.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .tattle = { MSG_MapTattle_kzn_20 }, -}; diff --git a/src/world/dead/area_kzn/kzn_20/kzn_20_1_music.c b/src/world/dead/area_kzn/kzn_20/kzn_20_1_music.c deleted file mode 100644 index ab6df8c382f..00000000000 --- a/src/world/dead/area_kzn/kzn_20/kzn_20_1_music.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "kzn_20.h" - -EvtScript N(EVS_SetupMusic) = { - IfGe(GB_StoryProgress, STORY_CH5_MT_LAVA_LAVA_ERUPTING) - Call(PlaySound, SOUND_LOOP_RUMBLE) - EndIf - IfLt(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Call(SetMusicTrack, 0, SONG_MT_LAVALAVA, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_3) - Else - Call(SetMusicTrack, 0, SONG_VOLCANO_ESCAPE, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_1) - EndIf - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_20/kzn_20_2_main.c b/src/world/dead/area_kzn/kzn_20/kzn_20_2_main.c deleted file mode 100644 index aa269bfdca3..00000000000 --- a/src/world/dead/area_kzn/kzn_20/kzn_20_2_main.c +++ /dev/null @@ -1,187 +0,0 @@ -#include "kzn_20.h" -#include "effects.h" - -#include "world/common/atomic/TexturePan.inc.c" - -EvtScript N(EVS_ExitWalk_kzn_19_2) = EVT_EXIT_WALK(60, kzn_20_ENTRY_0, "kzn_19", kzn_19_ENTRY_2); -EvtScript N(EVS_ExitWalk_kzn_22_0) = EVT_EXIT_WALK(60, kzn_20_ENTRY_1, "kzn_22", kzn_22_ENTRY_0); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(N(EVS_ExitWalk_kzn_19_2), TRIGGER_FLOOR_ABOVE, COLLIDER_deili1, 1, 0) - BindTrigger(N(EVS_ExitWalk_kzn_22_0), TRIGGER_FLOOR_ABOVE, COLLIDER_deili2, 1, 0) - Return - End -}; - -EvtScript N(EVS_UpdateTexPan_Lava) = { - SetGroup(EVT_GROUP_00) - Call(EnableTexPanning, MODEL_yu, TRUE) - Thread - TEX_PAN_PARAMS_ID(TEX_PANNER_1) - TEX_PAN_PARAMS_STEP( -700, 700, 200, -300) - TEX_PAN_PARAMS_FREQ( 1, 1, 1, 1) - TEX_PAN_PARAMS_INIT( 0, 0, 0, 0) - Exec(N(EVS_UpdateTexturePan)) - EndThread - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o919, .pos = { -30.0, 125.0, -15.0 }}, - { .colliderID = COLLIDER_o870, .pos = { 30.0, 150.0, 0.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_DetermineLavaLevel) = { - Loop(0) - IfGe(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Label(1) - IfLt(MV_LavaPosOffset, 110) - SubF(MV_WaveScaleOffset, Float(0.01)) - AddF(MV_PosScaleCoeff, Float(0.01)) - Loop(5) - AddF(MV_LavaPosOffset, Float(0.75)) - Wait(9) - EndLoop - Else - BreakLoop - EndIf - Goto(1) - EndIf - Wait(1) - EndLoop - Return - End -}; - -EvtScript N(EVS_InterruptPartnersInLava) = { - Loop(0) - Loop(0) - Wait(1) - Call(GetModelCenter, MODEL_yu) - Call(GetPlayerPos, LVar0, LVar3, LVar2) - IfLt(LVar3, LVar1) - BreakLoop - EndIf - EndLoop - Call(GetCurrentPartnerID, LVar1) - IfNe(LVar1, PARTNER_LAKILESTER) - Call(InterruptUsePartner) - Call(SetPlayerActionState, ACTION_STATE_HIT_LAVA) - Wait(30) - EndIf - EndLoop - Return - End -}; - -EvtScript N(EVS_UpdateLavaWaves) = { - SetGroup(EVT_GROUP_EF) - Call(EnableModel, MODEL_yu, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_yu, COLLIDER_FLAGS_UPPER_MASK) - Call(ParentColliderToModel, COLLIDER_yu, MODEL_yu) - Label(0) - IfEq(AF_KZN_RumblingIntensified, FALSE) - Wait(1) - Goto(0) - EndIf - Call(EnableModel, MODEL_yu, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_CLEAR_BITS, COLLIDER_yu, COLLIDER_FLAGS_UPPER_MASK) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_yu, SURFACE_TYPE_LAVA) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - IfLt(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - SetF(MV_LavaPosOffset, 35) - SetF(MV_WaveScaleOffset, Float(1.2)) - SetF(MV_PosScaleCoeff, Float(-1.2)) - Else - SetF(MV_LavaPosOffset, 110) - SetF(MV_WaveScaleOffset, Float(1.0)) - SetF(MV_PosScaleCoeff, Float(-1.0)) - EndIf - Exec(N(EVS_DetermineLavaLevel)) - Exec(N(EVS_InterruptPartnersInLava)) - Loop(0) - Call(MakeLerp, 0, 260, 30, EASING_COS_IN) - Loop(0) - Call(UpdateLerp) - DivF(LVar0, Float(100.0)) - SubF(LVar0, MV_WaveScaleOffset) - SetF(LVar3, MV_LavaPosOffset) - SetF(LVar4, MV_LavaPosOffset) - DivF(LVar3, MV_PosScaleCoeff) - MulF(LVar3, LVar0) - AddF(LVar4, LVar3) // = PosOffset + Scale * (PosOffset / PosScaleCoeff) - Call(TranslateModel, MODEL_yu, 0, LVar4, 0) - Call(ScaleModel, MODEL_yu, 1, LVar0, 1) - Call(TranslateModel, MODEL_yu, 0, MV_LavaPosOffset, 0) - Call(UpdateColliderTransform, COLLIDER_yu) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(MakeLerp, 260, 0, 60, EASING_SIN_OUT) - Loop(0) - Call(UpdateLerp) - DivF(LVar0, Float(100.0)) - SubF(LVar0, MV_WaveScaleOffset) - SetF(LVar3, MV_LavaPosOffset) - SetF(LVar4, MV_LavaPosOffset) - DivF(LVar3, MV_PosScaleCoeff) - MulF(LVar3, LVar0) - AddF(LVar4, LVar3) - Call(TranslateModel, MODEL_yu, 0, LVar4, 0) - Call(ScaleModel, MODEL_yu, 1, LVar0, 1) - Call(TranslateModel, MODEL_yu, 0, MV_LavaPosOffset, 0) - Call(UpdateColliderTransform, COLLIDER_yu) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndLoop - Return - End -}; - -BombTrigger N(WeakWallBombTrigger) = { - .pos = { 175.0, 150.0, 15.0 }, - .radius = 0.0 -}; - -EvtScript N(EVS_OnBreakWall) = { - PlayEffect(EFFECT_BOMBETTE_BREAKING, 0, 2, 2, 1, 10, 30) - Call(EnableGroup, MODEL_bom_mae, FALSE) - Call(EnableGroup, MODEL_bom_ato, TRUE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_tt1, COLLIDER_FLAGS_UPPER_MASK) - Set(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Unbind - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_MT_LAVALAVA) - Call(SetSpriteShading, SHADING_KZN_20) - SetUP_CAMERA_NO_LEAD() - Call(MakeNpcs, TRUE, Ref(N(DefaultNPCs))) - Set(LVar0, N(EVS_BindExitTriggers)) - Exec(EnterWalk) - Wait(1) - Exec(N(EVS_ShakingWorld)) - IfLt(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Call(EnableGroup, MODEL_bom_ato, FALSE) - BindTrigger(N(EVS_OnBreakWall), TRIGGER_POINT_BOMB, Ref(N(WeakWallBombTrigger)), 1, 0) - Else - Call(EnableGroup, MODEL_bom_mae, FALSE) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_tt1, COLLIDER_FLAGS_UPPER_MASK) - EndIf - Exec(N(EVS_SetupMusic)) - Exec(N(EVS_UpdateLavaWaves)) - Exec(N(EVS_UpdateTexPan_Lava)) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_20/kzn_20_3_npc.c b/src/world/dead/area_kzn/kzn_20/kzn_20_3_npc.c deleted file mode 100644 index 0b34250ade7..00000000000 --- a/src/world/dead/area_kzn/kzn_20/kzn_20_3_npc.c +++ /dev/null @@ -1,557 +0,0 @@ -#include "kzn_20.h" -#include "effects.h" -#include "sprite/player.h" - -enum { - SCENE_STATE_BEGIN = 15, - SCENE_STATE_STARFISH_REMARK = 20, - SCENE_STATE_KOLORADO_LOOKS_AROUND = 25, - SCENE_STATE_KOLORADO_WENT_BACK = 30, - SCENE_STATE_KOLORADO_CAM_SYNC = 31, - SCENE_STATE_KOLORADO_WARNED = 35, - SCENE_STATE_KOLORADO_BURNED = 36, - SCENE_STATE_MISSTAR_SPEAKS = 40, - SCENE_STATE_KOLORADO_RETURN = 45, - SCENE_STATE_SEARCH_FOR_EXIT = 50, - SCENE_STATE_DONE = -1, -}; - -#include "world/common/npc/Kolorado.inc.c" -#include "world/common/npc/StarSpirit.inc.c" - -#include "world/common/complete/LetterDelivery.inc.c" - -s32 N(LetterList)[] = { - ITEM_LETTER_TO_KOLORADO, - ITEM_NONE -}; - -EVT_LETTER_PROMPT(Kolorado, NPC_Kolorado, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, - MSG_CH5_00E4, MSG_CH5_00E5, MSG_CH5_00E6, MSG_CH5_00E7, - ITEM_LETTER_TO_KOLORADO, N(LetterList)); - -EVT_LETTER_REWARD(Kolorado); - -EvtScript N(EVS_SpawnFallingDust) = { - SetGroup(EVT_GROUP_0B) - Loop(0) - Call(RandInt, 100, LVar0) - Sub(LVar0, 100) - PlayEffect(EFFECT_DUST, 1, LVar0, 350, 0, 60) - Call(RandInt, 100, LVar0) - Wait(30) - PlayEffect(EFFECT_DUST, 1, LVar0, 350, 0, 60) - Wait(30) - EndLoop - Return - End -}; - -EvtScript N(EVS_ShakingWorld) = { - SetGroup(EVT_GROUP_0A) - IfGe(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Exec(N(EVS_SpawnFallingDust)) - Else - Loop(0) - Call(ShakeCam, CAM_DEFAULT, 0, 2, Float(0.5)) - IfNe(AF_KZN_RumblingIntensified, FALSE) - BreakLoop - EndIf - EndLoop - Exec(N(EVS_SpawnFallingDust)) - Call(MakeLerp, 20, 250, 5, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - DivF(LVar0, Float(100.0)) - Call(ShakeCam, CAM_DEFAULT, 0, 3, LVar0) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(MakeLerp, 250, 30, 60, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - DivF(LVar0, Float(100.0)) - Call(ShakeCam, CAM_DEFAULT, 0, 5, LVar0) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndIf - Loop(0) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(0.5)) - EndLoop - Return - End -}; - -s32 N(Kolorado_Wander1)[] = { - // speed, moveToX, moveToZ, loiter time - 2, -75, 195, 35, - 2, -60, 175, 25, - 1, -95, 165, 15, - 1, -110, 120, 35, - -1, -}; - -s32 N(Kolorado_Wander2)[] = { - // speed, moveToX, moveToZ, loiter time - 1, -25, 195, 20, - 2, -75, 195, 35, - 1, -60, 175, 25, - 2, -120, 140, 15, - -1, -}; - -EvtScript N(EVS_Kolorado_CalmIdle) = { - SetGroup(EVT_GROUP_EF) - Label(0) - Call(RandInt, 1, LVar1) - IfEq(LVar1, 0) - UseBuf(N(Kolorado_Wander1)) - Else - UseBuf(N(Kolorado_Wander2)) - EndIf - Label(10) - BufRead3(LVar1, LVar2, LVar3) - IfEq(LVar1, -1) - Goto(0) - EndIf - Call(SetNpcSpeed, NPC_Kolorado, LVar1) - Call(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Walk) - Call(NpcMoveTo, NPC_Kolorado, LVar2, LVar3, 0) - BufRead1(LVar2) - Call(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Idle) - Wait(5) - Call(RandInt, 2, LVar4) - Add(LVar4, 1) - Loop(LVar4) - Call(GetNpcYaw, NPC_Kolorado, LVar5) - Add(LVar5, 180) - IfGt(LVar5, 360) - Sub(LVar5, 360) - EndIf - Call(InterpNpcYaw, NPC_Kolorado, LVar5, 1) - Wait(20) - EndLoop - Wait(LVar2) - Goto(10) - Return - End -}; - -EvtScript N(EVS_KoloradoBurned_PlayerReaction) = { - Call(GetPlayerPos, LVar0, LVar3, LVar2) - Add(LVar3, 30) - Loop(0) - Wait(1) - Call(GetNpcPos, NPC_Kolorado, LVar0, LVar1, LVar2) - IfGt(LVar1, LVar3) - BreakLoop - EndIf - EndLoop - Call(SetPlayerAnimation, ANIM_Mario1_LookUp) - Loop(0) - Wait(1) - Call(GetNpcPos, NPC_Kolorado, LVar0, LVar1, LVar2) - IfLt(LVar1, LVar3) - BreakLoop - EndIf - EndLoop - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - Return - End -}; - -API_CALLABLE(N(func_80240A68_C96998)) { - snd_ambient_mute(0, TRUE); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_NpcIdle_Kolorado) = { - ExecGetTID(N(EVS_Kolorado_CalmIdle), LVar9) - // wait for scene to begin - Label(0) - Wait(1) - IfNe(MV_SceneState, SCENE_STATE_BEGIN) - Goto(0) - EndIf - KillThread(LVar9) - Wait(10) - // cutscene actions - Label(10) - Switch(MV_SceneState) - CaseEq(SCENE_STATE_BEGIN) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Walk) - Call(InterpNpcYaw, NPC_SELF, 90, 1) - Call(SetNpcPos, NPC_SELF, -30, 100, 40) - Call(SetNpcJumpscale, NPC_SELF, Float(2.0)) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, -25, 125, -20, 10) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, 20, 150, 5, 10) - Call(SetNpcSpeed, NPC_SELF, Float(3.0)) - Call(NpcMoveTo, NPC_SELF, 40, 35, 0) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Idle) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH5_010A) - Set(MV_SceneState, SCENE_STATE_STARFISH_REMARK) - CaseEq(SCENE_STATE_KOLORADO_LOOKS_AROUND) - Call(GetNpcPos, NPC_SELF, LVar3, LVar4, LVar5) - Call(UseSettingsFrom, CAM_DEFAULT, LVar3, LVar4, LVar5) - Add(LVar3, -30) - Call(SetPanTarget, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetCamDistance, CAM_DEFAULT, Float(250.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(3.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(InterpNpcYaw, NPC_SELF, 270, 4) - Wait(10) - Call(InterpNpcYaw, NPC_SELF, 90, 4) - Wait(10) - Call(InterpNpcYaw, NPC_SELF, 270, 4) - Wait(10) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Walk) - Call(SetNpcSpeed, NPC_SELF, Float(2.0)) - Call(NpcMoveTo, NPC_SELF, 20, 0, 0) - Call(SetNpcJumpscale, NPC_SELF, Float(1.0)) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, -35, 125, -20, 12) - Call(PlayerFaceNpc, NPC_SELF, FALSE) - Call(SetNpcSpeed, NPC_SELF, Float(1.0)) - Label(25) - Call(NpcMoveTo, NPC_SELF, -15, -20, 0) - Call(NpcMoveTo, NPC_SELF, -40, -20, 0) - IfEq(AF_KZN20_SceneSync, FALSE) - Wait(1) - Goto(25) - EndIf - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Idle) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 5, MSG_CH5_010B) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_SELF, EMOTE_EXCLAMATION, 0, 15, EMOTER_NPC, 0, 0, 0, 0) - Wait(15) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Call(SetNpcJumpscale, NPC_SELF, Float(1.5)) - Call(GetNpcPos, NPC_SELF, LVar3, LVar4, LVar5) - Call(GetNpcPos, NPC_SELF, LVar3, LVar4, LVar5) - Call(NpcJump0, NPC_SELF, LVar3, LVar4, LVar5, 8) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Idle) - Thread - Wait(8) - Call(NpcFacePlayer, NPC_SELF, 0) - EndThread - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 5, MSG_CH5_010C) - Set(AF_KZN_RumblingIntensified, TRUE) - Call(SetMusicTrack, 0, SONG_VOLCANO_ESCAPE, 0, 8) - Wait(20) - Thread - Call(SetPlayerAnimation, ANIM_Mario1_Flail) - Wait(60) - Call(SetPlayerAnimation, ANIM_Mario1_Idle) - EndThread - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Yell) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Yell, 0, MSG_CH5_010D) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Call(SetNpcJumpscale, NPC_SELF, Float(2.0)) - Set(MV_SceneState, SCENE_STATE_KOLORADO_WENT_BACK) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, -30, 100, 40, 10) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, -15, 75, 80, 10) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, 35, 50, 120, 10) - CaseEq(SCENE_STATE_KOLORADO_WARNED) - Call(N(func_80240A68_C96998)) - Exec(N(EVS_KoloradoBurned_PlayerReaction)) - Thread - Call(PlayerFaceNpc, NPC_SELF, FALSE) - Call(ShowMessageAtScreenPos, MSG_CH5_010F, 160, 40) - EndThread - Thread - Loop(0) - Wait(1) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Add(LVar2, -10) - PlayEffect(EFFECT_SMOKE_BURST, 0, LVar0, LVar1, LVar2, 1, 10) - IfEq(MV_SceneState, SCENE_STATE_KOLORADO_BURNED) - BreakLoop - EndIf - EndLoop - EndThread - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Hurt) - Call(SetNpcJumpscale, NPC_SELF, Float(0.8)) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_TOUCH_LAVA, SOUND_SPACE_DEFAULT) - Call(NpcJump1, NPC_SELF, LVar0, LVar1, LVar2, 60) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Set(MV_SceneState, SCENE_STATE_KOLORADO_BURNED) - Call(UseSettingsFrom, CAM_DEFAULT, 100, 25, 100) - Call(SetPanTarget, CAM_DEFAULT, 100, 25, 100) - Call(SetCamDistance, CAM_DEFAULT, Float(450.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-7.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(3.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Panic, ANIM_Kolorado_Panic, 0, MSG_CH5_0110) - Call(ResetCam, CAM_DEFAULT, Float(90.0)) - Set(MV_SceneState, SCENE_STATE_MISSTAR_SPEAKS) - CaseEq(SCENE_STATE_KOLORADO_RETURN) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Walk) - Call(SetNpcPos, NPC_SELF, -30, 100, 40) - Call(SetNpcJumpscale, NPC_SELF, Float(2.0)) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, -25, 125, -20, 10) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, 20, 150, 5, 8) - Set(MV_SceneState, SCENE_STATE_SEARCH_FOR_EXIT) - Call(SetNpcSpeed, NPC_SELF, Float(3.0)) - Call(NpcMoveTo, NPC_SELF, 75, -30, 0) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Idle) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, FALSE) - EndSwitch - Wait(1) - Goto(10) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Kolorado) = { - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - IfLt(LVar1, 100) - Call(EnableNpcAI, NPC_SELF, FALSE) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Talk, ANIM_Kolorado_Idle, 0, MSG_CH5_0108) - EVT_LETTER_CHECK(Kolorado) - Call(EnableNpcAI, NPC_SELF, TRUE) - Else - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Yell, 0, MSG_CH5_0113) - EVT_LETTER_CHECK(Kolorado) - EndIf - Return - End -}; - -EvtScript N(EVS_NpcInit_Kolorado) = { - IfLt(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Kolorado))) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Kolorado))) - Else - Call(RemoveNpc, NPC_SELF) - EndIf - Return - End -}; - -Vec3f N(FlightPath1)[] = { - { -120.0, 70.0, 45.0 }, - { -75.0, 80.0, 90.0 }, - { -10.0, 115.0, 90.0 }, - { 10.0, 180.0, 70.0 }, - { 50.0, 210.0, 30.0 }, - { 100.0, 160.0, 0.0 }, -}; - -Vec3f N(FlightPath2)[] = { - { 145.0, 195.0, -10.0 }, - { 100.0, 190.0, -90.0 }, - { 80.0, 180.0, -60.0 }, - { 115.0, 175.0, -40.0 }, - { 165.0, 170.0, -10.0 }, - { 230.0, 170.0, -20.0 }, - { 270.0, 175.0, -30.0 }, -}; - -API_CALLABLE(N(GetFloorCollider)) { - Bytecode* args = script->ptrReadPos; - s32 outVar = *args++; - - evt_set_variable(script, outVar, gCollisionStatus.curFloor); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_Scene_Misstar) = { - IfEq(AF_KZN20_MisstarFlightDone, FALSE) - Call(SetNpcPos, NPC_SELF, -120, 70, 45) - Wait(30) - Set(AF_KZN20_MisstarFlightDone, TRUE) - Call(InterpNpcYaw, NPC_SELF, 90, 0) - Call(LoadPath, 60, Ref(N(FlightPath1)), ARRAY_COUNT(N(FlightPath1)), EASING_LINEAR) - Loop(0) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_SELF, LVar1, LVar2, LVar3) - Wait(1) - IfNe(LVar0, 1) - BreakLoop - EndIf - EndLoop - Call(InterpNpcYaw, NPC_SELF, 270, 0) - EndIf - // wait for player to reach the top of the stairs - Label(0) - Call(N(GetFloorCollider), LVar0) - IfNe(LVar0, COLLIDER_o870) - Wait(1) - Goto(0) - EndIf - Call(DisablePlayerInput, TRUE) - Wait(10) - Thread - Wait(10) - Call(SetPlayerSpeed, Float(2.0)) - Call(PlayerMoveTo, 60, 0, 0) - EndThread - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, Float(350.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(3.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Set(AF_KZN_RumblingIntensified, FALSE) - Set(MV_SceneState, SCENE_STATE_BEGIN) - Label(10) - Switch(MV_SceneState) - CaseEq(SCENE_STATE_STARFISH_REMARK) - Set(AF_KZN20_SceneSync, FALSE) - Thread - Wait(30) - Set(MV_SceneState, SCENE_STATE_KOLORADO_LOOKS_AROUND) - EndThread - Set(AF_KZN20_SceneSync, TRUE) - CaseEq(SCENE_STATE_KOLORADO_WENT_BACK) - Thread - Call(GetPlayerPos, LVar0, LVar1, LVar2) - Call(UseSettingsFrom, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetPanTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - Call(SetCamDistance, CAM_DEFAULT, Float(350.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(4.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Set(MV_SceneState, SCENE_STATE_KOLORADO_CAM_SYNC) - EndThread - Wait(10) - Call(SpeakToPlayer, NPC_SELF, ANIM_WorldMisstar_TalkAngry, ANIM_WorldMisstar_IdleAngry, 5, MSG_CH5_010E) - Label(30) - IfEq(MV_SceneState, SCENE_STATE_KOLORADO_WENT_BACK) - Wait(1) - Goto(30) - EndIf - Set(MV_SceneState, SCENE_STATE_KOLORADO_WARNED) - CaseEq(SCENE_STATE_MISSTAR_SPEAKS) - Call(SpeakToPlayer, NPC_SELF, ANIM_WorldMisstar_TalkAngry, ANIM_WorldMisstar_IdleAngry, 0, MSG_CH5_0111) - Set(MV_SceneState, SCENE_STATE_KOLORADO_RETURN) - CaseEq(SCENE_STATE_SEARCH_FOR_EXIT) - Call(InterpNpcYaw, NPC_SELF, 90, 0) - Wait(15) - Call(InterpNpcYaw, NPC_SELF, 270, 0) - Wait(15) - Call(InterpNpcYaw, NPC_SELF, 90, 0) - Wait(15) - Call(SetNpcSpeed, NPC_SELF, Float(3.0)) - Call(NpcMoveTo, NPC_SELF, 145, -10, 0) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_EMOTE_IDEA, SOUND_SPACE_DEFAULT) - Call(ShowEmote, NPC_SELF, EMOTE_EXCLAMATION, 0, 15, EMOTER_NPC, 0, 0, 0, 0) - Wait(20) - Call(SetNpcRotation, NPC_SELF, 0, -30, 0) - Call(SetNpcAnimation, NPC_SELF, ANIM_WorldMisstar_Back) - Call(SetNpcJumpscale, NPC_SELF, 0) - Call(NpcJump0, NPC_SELF, 170, 170, 50, 20) - Wait(5) - Call(SetNpcRotation, NPC_SELF, 0, -60, 0) - Call(SetNpcYaw, NPC_SELF, 270) - Call(NpcJump0, NPC_SELF, 145, 170, -10, 15) - Wait(10) - Call(SetNpcAnimation, NPC_SELF, ANIM_WorldMisstar_IdleAngry) - Call(SetNpcRotation, NPC_SELF, 0, 0, 0) - Call(NpcJump1, NPC_SELF, 145, 160, -10, 5) - Call(SpeakToPlayer, NPC_SELF, ANIM_WorldMisstar_TalkAngry, ANIM_WorldMisstar_IdleAngry, 0, MSG_CH5_0112) - Call(NpcFacePlayer, NPC_SELF, 0) - Set(MV_SceneState, SCENE_STATE_DONE) - EndSwitch - IfNe(MV_SceneState, SCENE_STATE_DONE) - Wait(1) - Goto(10) - EndIf - Call(DisablePlayerInput, FALSE) - Label(90) - IfLt(GB_StoryProgress, STORY_CH5_OPENED_ESCAPE_ROUTE) - Wait(1) - Goto(90) - EndIf - Call(DisablePlayerInput, TRUE) - Wait(40) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_BITS, COLLIDER_tt1, COLLIDER_FLAGS_UPPER_MASK) - Thread - Call(SetNpcFlagBits, NPC_Kolorado, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Panic) - Call(SetNpcSpeed, NPC_Kolorado, Float(5.0)) - Call(NpcMoveTo, NPC_Kolorado, 305, 0, 0) - Call(RemoveNpc, NPC_Kolorado) - EndThread - Wait(30) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(SetNpcJumpscale, NPC_SELF, Float(0.5)) - Call(NpcJump0, NPC_SELF, 145, 195, -10, 5) - Wait(5) - Call(SpeakToPlayer, NPC_SELF, ANIM_WorldMisstar_Panic, ANIM_WorldMisstar_IdleAngry, 0, MSG_CH5_0115) - Wait(5) - Call(InterpNpcYaw, NPC_SELF, 90, 0) - Call(LoadPath, 30, Ref(N(FlightPath2)), ARRAY_COUNT(N(FlightPath2)), EASING_LINEAR) - Label(91) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_SELF, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 1) - Goto(91) - EndIf - Call(SetNpcPos, NPC_SELF, NPC_DISPOSE_LOCATION) - Call(DisablePlayerInput, FALSE) - Return - End -}; - -EvtScript N(EVS_NpcInteract_Misstar) = { - Call(SpeakToPlayer, NPC_SELF, ANIM_WorldMisstar_TalkAngry, ANIM_WorldMisstar_IdleAngry, 0, MSG_CH5_0114) - Return - End -}; - -EvtScript N(EVS_NpcInit_Misstar) = { - IfEq(GB_StoryProgress, STORY_CH5_MT_LAVA_LAVA_ERUPTING) - Call(SetNpcAnimation, NPC_SELF, ANIM_WorldMisstar_IdleAngry) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_Scene_Misstar))) - Call(BindNpcInteract, NPC_SELF, Ref(N(EVS_NpcInteract_Misstar))) - Else - Call(RemoveNpc, NPC_SELF) - EndIf - Return - End -}; - -NpcData N(NpcData_Kolorado) = { - .id = NPC_Kolorado, - .pos = { -65.0f, 0.0f, 190.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Kolorado), - .settings = &N(NpcSettings_Kolorado), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_ENABLE_HIT_SCRIPT | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_10000 | ENEMY_FLAG_100000 | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = KOLORADO_ANIMS, - .tattle = MSG_NpcTattle_Kolorado, -}; - -NpcData N(NpcData_Misstar) = { - .id = NPC_Misstar, - .pos = { 100.0f, 160.0f, 0.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Misstar), - .settings = &N(NpcSettings_StarSpirit), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_400000, - .drops = NO_DROPS, - .animations = MISSTAR_ANIMS, - .tattle = MSG_NpcTattle_Misstar, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Kolorado)), - NPC_GROUP(N(NpcData_Misstar)), - {} -}; diff --git a/src/world/dead/area_kzn/kzn_22/kzn_22.h b/src/world/dead/area_kzn/kzn_22/kzn_22.h deleted file mode 100644 index 32844270af8..00000000000 --- a/src/world/dead/area_kzn/kzn_22/kzn_22.h +++ /dev/null @@ -1,22 +0,0 @@ -// Older version of kzn_22 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../kzn.h" -#include "mapfs/kzn_22_shape.h" -#include "mapfs/kzn_22_hit.h" - -enum { - NPC_Kolorado = 0, - NPC_Misstar = 1, -}; - -#define NAMESPACE dead_kzn_22 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern EvtScript N(EVS_MakeEntities); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_kzn/kzn_22/kzn_22_0_header.c b/src/world/dead/area_kzn/kzn_22/kzn_22_0_header.c deleted file mode 100644 index b59889ae842..00000000000 --- a/src/world/dead/area_kzn/kzn_22/kzn_22_0_header.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "kzn_22.h" - -EntryList N(Entrances) = { - [kzn_22_ENTRY_0] { -390.0, 0.0, 210.0, 90.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .tattle = { MSG_MapTattle_kzn_22 }, -}; diff --git a/src/world/dead/area_kzn/kzn_22/kzn_22_1_music.c b/src/world/dead/area_kzn/kzn_22/kzn_22_1_music.c deleted file mode 100644 index 5b7d73a3a8e..00000000000 --- a/src/world/dead/area_kzn/kzn_22/kzn_22_1_music.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "kzn_22.h" - -EvtScript N(EVS_SetupMusic) = { - IfGe(GB_StoryProgress, STORY_CH5_MT_LAVA_LAVA_ERUPTING) - Call(PlaySound, SOUND_LOOP_RUMBLE) - EndIf - Call(SetMusicTrack, 0, SONG_VOLCANO_ESCAPE, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_4) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_22/kzn_22_2_main.c b/src/world/dead/area_kzn/kzn_22/kzn_22_2_main.c deleted file mode 100644 index 51742217b1d..00000000000 --- a/src/world/dead/area_kzn/kzn_22/kzn_22_2_main.c +++ /dev/null @@ -1,162 +0,0 @@ -#include "kzn_22.h" - -#include "world/area_kzn/common/SmokeTexPanners.inc.c" - -EvtScript N(EVS_ExitWalk_kzn_20_1) = EVT_EXIT_WALK_FIXED(60, kzn_22_ENTRY_0, "kzn_20", kzn_20_ENTRY_1); - -EvtScript N(EVS_BindExitTriggers) = { - BindTrigger(N(EVS_ExitWalk_kzn_20_1), TRIGGER_FLOOR_TOUCH, COLLIDER_deili1, 1, 0) - Return - End -}; - -EvtScript N(EVS_UpdateTexPan_LavaRiver) = { - SetGroup(EVT_GROUP_00) - Call(EnableTexPanning, MODEL_yougan1_1, TRUE) - Set(LVar0, 0) - Set(LVar1, 0) - Set(LVar2, 0) - Label(10) - Call(SetTexPanOffset, TEX_PANNER_6, TEX_PANNER_MAIN, LVar0, 0) - Call(SetTexPanOffset, TEX_PANNER_6, TEX_PANNER_AUX, LVar1, LVar2) - Add(LVar0, -1100) - Add(LVar1, 300) - Add(LVar2, -500) - Wait(1) - Goto(10) - Return - End -}; - -EvtScript N(EVS_UpdateTexPan_LavaFall) = { - SetGroup(EVT_GROUP_00) - Call(EnableTexPanning, MODEL_yougan2_2, TRUE) - Set(LVar0, 0) - Set(LVar1, 0) - Label(10) - Call(SetTexPanOffset, TEX_PANNER_1, TEX_PANNER_MAIN, LVar0, LVar1) - Add(LVar0, 300) - Add(LVar1, -500) - Wait(1) - Goto(10) - Return - End -}; - -EvtScript N(EVS_InterruptPartnersInLava) = { - Loop(0) - Loop(0) - Wait(1) - Call(GetModelCenter, MODEL_yu) - Call(GetPlayerPos, LVar0, LVar3, LVar2) - IfLt(LVar3, LVar1) - BreakLoop - EndIf - EndLoop - Call(GetCurrentPartnerID, LVar1) - IfNe(LVar1, PARTNER_LAKILESTER) - Call(InterruptUsePartner) - Call(SetPlayerActionState, ACTION_STATE_HIT_LAVA) - Wait(30) - EndIf - EndLoop - Return - End -}; - -API_CALLABLE(N(GetFloorCollider1)) { - Bytecode* args = script->ptrReadPos; - s32 outVar = *args++; - - evt_set_variable(script, outVar, gCollisionStatus.curFloor); - return ApiStatus_DONE2; -} - -EvtScript N(EVS_UpdateLavaLevel) = { - SetGroup(EVT_GROUP_EF) - Call(SetTexPanner, MODEL_yu1, TEX_PANNER_2) - Call(SetTexPanner, MODEL_yu, TEX_PANNER_2) - Call(EnableModel, MODEL_yu, FALSE) - Call(ParentColliderToModel, COLLIDER_o591, MODEL_yu) - Set(LVar0, 0) - Set(LVar1, 0) - Set(LVar2, 0) - Set(LVar3, 0) - SetF(LVar4, Float(0.0)) - SetF(LVar5, Float(0.0)) - Set(LVarA, 0) - Label(10) - // update lava texture panning - Call(UpdateColliderTransform, COLLIDER_o591) - Call(SetTexPanOffset, TEX_PANNER_2, TEX_PANNER_MAIN, LVar0, LVar1) - Call(SetTexPanOffset, TEX_PANNER_2, TEX_PANNER_AUX, LVar2, LVar3) - Sub(LVar0, 700) - Add(LVar1, 700) - Add(LVar2, 200) - Sub(LVar3, 300) - // update lava level - Switch(LVarA) - CaseEq(0) - // state 0: wait for player to stand on one of the steps - Call(N(GetFloorCollider1), LVar0) - IfEq(LVar0, COLLIDER_o357) - Exec(N(EVS_InterruptPartnersInLava)) - Call(EnableModel, MODEL_yu, TRUE) - Call(EnableModel, MODEL_yu1, FALSE) - Set(LVarA, 10) // set state to 10 - EndIf - CaseEq(10) - // state 10: raise the lava level - IfLt(LVar4, 140) - Set(LVar5, Float(1.5)) - Else - IfEq(AF_KZN22_FlewAway, FALSE) - Set(LVar5, Float(0.0)) - Else - IfLt(LVar4, 285) - Set(LVar5, Float(2.8)) - Else - Set(LVar5, Float(0.0)) - Set(LVarA, -1) - EndIf - EndIf - EndIf - EndSwitch - AddF(LVar4, LVar5) - Call(TranslateModel, MODEL_yu, 0, LVar4, 0) - Wait(1) - Goto(10) - Return - End -}; - -LavaReset N(SafeFloorColliders)[] = { - { .colliderID = COLLIDER_o582, .pos = { 200.0, 150.0, 180.0 }}, - { .colliderID = COLLIDER_o357, .pos = { 200.0, 150.0, 180.0 }}, - { .colliderID = -1 } -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_MT_LAVALAVA) - Call(SetSpriteShading, SHADING_KZN_22) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, TRUE, Ref(N(DefaultNPCs))) - ExecWait(N(EVS_MakeEntities)) - Set(LVar0, N(EVS_BindExitTriggers)) - Exec(EnterWalk) - Wait(1) - Exec(N(EVS_SetupMusic)) - Call(ModifyColliderFlags, MODIFY_COLLIDER_FLAGS_SET_SURFACE, COLLIDER_o591, SURFACE_TYPE_LAVA) - Thread - Call(ResetFromLava, Ref(N(SafeFloorColliders))) - EndThread - Exec(N(EVS_UpdateTexPan_LavaRiver)) - Exec(N(EVS_UpdateTexPan_LavaFall)) - Exec(N(EVS_UpdateLavaLevel)) - Set(LVar0, MODEL_kem1) - Exec(N(EVS_StartTexPanner_SmokeLeft)) - Set(LVar0, MODEL_kem2) - Exec(N(EVS_StartTexPanner_SmokeRight)) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_22/kzn_22_3_entity.c b/src/world/dead/area_kzn/kzn_22/kzn_22_3_entity.c deleted file mode 100644 index 4b1dd82f65c..00000000000 --- a/src/world/dead/area_kzn/kzn_22/kzn_22_3_entity.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "kzn_22.h" -#include "entity.h" - -EvtScript N(EVS_OpenChest) = { - Return - End -}; - -EvtScript N(EVS_MakeEntities) = { - Call(MakeEntity, Ref(Entity_Chest), 480, 235, 175, 0, 0, MAKE_ENTITY_END) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_22/kzn_22_4_npc.c b/src/world/dead/area_kzn/kzn_22/kzn_22_4_npc.c deleted file mode 100644 index 700b4939daa..00000000000 --- a/src/world/dead/area_kzn/kzn_22/kzn_22_4_npc.c +++ /dev/null @@ -1,294 +0,0 @@ -#include "kzn_22.h" -#include "sprite/player.h" - -API_CALLABLE(N(GetFloorCollider2)) { - Bytecode* args = script->ptrReadPos; - s32 outVar = *args++; - - evt_set_variable(script, outVar, gCollisionStatus.curFloor); - return ApiStatus_DONE2; -} - -API_CALLABLE(N(func_8024036C_C9A56C)) { - snd_ambient_mute(0, TRUE); - return ApiStatus_DONE2; -} - -#include "world/common/npc/Kolorado.inc.c" -#include "world/common/npc/StarSpirit.inc.c" - -EvtScript N(EVS_ShakeScreen) = { - Loop(0) - Call(ShakeCam, CAM_DEFAULT, 0, 5, Float(0.5)) - EndLoop - Return - End -}; - -EvtScript N(EVS_NpcIdle_Kolorado) = { - Exec(N(EVS_ShakeScreen)) - Label(0) - // wait for player to reach top of stairs - Call(N(GetFloorCollider2), LVar0) - IfNe(LVar0, COLLIDER_o544) - Wait(1) - Goto(0) - EndIf - // start scene (but wait for player to stop being hurt if they fell in the lava) - Call(DisablePlayerInput, TRUE) - Call(GetPlayerAnimation, LVar0) - IfEq(LVar0, ANIM_MarioW2_Thrown) - Wait(35) - EndIf - Wait(10) -EndIf //@bug unmatched endif - Call(PlayerFaceNpc, NPC_Kolorado, FALSE) - Set(AF_KZN23_SceneStarted, TRUE) - Thread - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - // repeatedly jump for the treasure chest - Label(1) - Call(SetNpcJumpscale, NPC_SELF, Float(2.0)) - Call(PlaySoundAtNpc, NPC_SELF, SOUND_NPC_JUMP, SOUND_SPACE_DEFAULT) - Call(NpcJump0, NPC_SELF, LVar0, LVar1, LVar2, 15) - IfEq(AF_KZN23_GrabbedKolorado, FALSE) - Wait(1) - Goto(1) - EndIf - EndThread - Wait(10) - Call(GetNpcPos, NPC_SELF, LVar3, LVar4, LVar5) - Call(UseSettingsFrom, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetPanTarget, CAM_DEFAULT, LVar3, LVar4, LVar5) - Call(SetCamDistance, CAM_DEFAULT, Float(350.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-4.0)) - Call(SetCamPosB, CAM_DEFAULT, Float(480.0), Float(299.6)) - Call(SetCamSpeed, CAM_DEFAULT, Float(5.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Thread - Call(SetPlayerSpeed, Float(3.0)) - Call(PlayerMoveTo, 250, 210, 0) - EndThread - Wait(20) - Call(ShowMessageAtWorldPos, MSG_CH5_0116, 440, 240, 165) - Wait(20) - Set(AF_KZN23_MessageClosed, TRUE) - Return - End -}; - -EvtScript N(EVS_NpcInit_Kolorado) = { - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Kolorado))) - Return - End -}; - -Vec3f N(FlightPath1)[] = { - { 300.0, 178.0, 120.0 }, - { 320.0, 170.0, 165.0 }, - { 340.0, 162.0, 200.0 }, - { 385.0, 155.0, 240.0 }, - { 435.0, 160.0, 255.0 }, - { 450.0, 165.0, 225.0 }, - { 440.0, 172.0, 195.0 }, -}; - -Vec3f N(FlightPath2)[] = { - { 445.0, 180.00, 120.0 }, - { 405.0, 190.00, 80.0 }, - { 360.0, 195.00, 70.0 }, - { 340.0, 200.00, 90.0 }, - { 315.0, 190.00, 110.0 }, - { 295.0, 180.00, 180.0 }, - { 270.0, 175.00, 230.0 }, - { 255.0, 170.00, 210.0 }, -}; - -Vec3f N(FlightPath3)[] = { - { 255.0, 171.0, 175.0 }, - { 260.0, 173.0, 160.0 }, - { 270.0, 175.0, 150.0 }, - { 290.0, 178.0, 142.0 }, - { 304.0, 182.0, 135.0 }, - { 330.0, 185.0, 145.0 }, - { 350.0, 190.0, 155.0 }, - { 368.0, 235.0, 170.0 }, - { 368.0, 295.0, 170.0 }, -}; - -EvtScript N(EVS_ControlCamera) = { - Call(UseSettingsFrom, CAM_DEFAULT, 400, 150, 200) - Call(SetPanTarget, CAM_DEFAULT, 400, 150, 200) - Call(SetCamDistance, CAM_DEFAULT, Float(390.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-9.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(2.0)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Label(10) - Wait(1) - IfEq(AF_KZN23_GrabbedKolorado, FALSE) - Goto(10) - EndIf - Call(SetPanTarget, CAM_DEFAULT, 300, 150, 170) - Call(SetCamDistance, CAM_DEFAULT, Float(450.0)) - Call(SetCamPitch, CAM_DEFAULT, Float(15.0), Float(-7.0)) - Call(SetCamSpeed, CAM_DEFAULT, Float(1.3)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Label(20) - Wait(1) - IfEq(AF_KZN22_FlewAway, FALSE) - Goto(20) - EndIf - Call(SetPanTarget, CAM_DEFAULT, 368, 310, 170) - Call(SetCamSpeed, CAM_DEFAULT, Float(0.8)) - Call(PanToTarget, CAM_DEFAULT, 0, 1) - Call(WaitForCam, CAM_DEFAULT, Float(1.0)) - Return - End -}; - -EvtScript N(EVS_SetCharacterPositions) = { - Call(SetNpcPos, NPC_Misstar, LVar4, LVar2, LVar3) - Add(LVar4, 10) - Sub(LVar3, 5) - Call(SetNpcPos, NPC_Kolorado, LVar4, LVar2, LVar3) - IfEq(AF_KZN23_GrabbedPlayer, TRUE) - Sub(LVar4, 20) - Add(LVar3, 10) - Call(SetPlayerPos, LVar4, LVar2, LVar3) - Add(LVar2, 20) - Add(LVar3, -5) - Call(SetNpcPos, NPC_PARTNER, LVar4, LVar2, LVar3) - EndIf - Return - End -}; - -EvtScript N(EVS_Scene_Misstar) = { - Loop(0) - Wait(1) - IfNe(AF_KZN23_MessageClosed, FALSE) - BreakLoop - EndIf - EndLoop - Call(DisablePlayerPhysics, TRUE) - Call(DisablePartnerAI, 0) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_GRAVITY, FALSE) - Call(SetNpcFlagBits, NPC_SELF, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Call(SetNpcFlagBits, NPC_Kolorado, NPC_FLAG_IGNORE_PLAYER_COLLISION, TRUE) - Exec(N(EVS_ControlCamera)) - Call(SetNpcJumpscale, NPC_SELF, Float(3.0)) - Call(GetNpcPos, NPC_SELF, LVar0, LVar1, LVar2) - Call(NpcJump0, NPC_SELF, LVar0, LVar1, LVar2, 10) - Wait(5) - Call(InterpNpcYaw, NPC_SELF, 90, 0) - Call(LoadPath, 35, Ref(N(FlightPath1)), ARRAY_COUNT(N(FlightPath1)), EASING_LINEAR) - Label(10) - Call(GetNextPathPos) - Call(SetNpcPos, NPC_SELF, LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 1) - Goto(10) - EndIf - Set(AF_KZN23_GrabbedKolorado, TRUE) - Call(SetNpcRotationPivot, NPC_Kolorado, 10) - Call(SetNpcRotation, NPC_Kolorado, 0, 0, 180) - Call(SetNpcAnimation, NPC_Kolorado, ANIM_Kolorado_Panic) - Thread - Wait(32) - Call(SetPlayerJumpscale, 0) - Call(PlayerJump, 245, 171, 176, 8) - EndThread - Thread - Wait(32) - Call(SetNpcJumpscale, NPC_PARTNER, 0) - Call(NpcJump0, NPC_PARTNER, 245, 191, 171, 8) - EndThread - Call(InterpNpcYaw, NPC_SELF, 270, 0) - Call(LoadPath, 40, Ref(N(FlightPath2)), ARRAY_COUNT(N(FlightPath2)), EASING_LINEAR) - Label(20) - Call(GetNextPathPos) - Set(LVar4, LVar1) - ExecWait(N(EVS_SetCharacterPositions)) - IfEq(LVar0, 1) - Goto(20) - EndIf - Set(AF_KZN23_GrabbedPlayer, TRUE) - Wait(1) - Call(SetPlayerAnimation, ANIM_MarioW2_Carried) - Thread - Wait(25) - Set(AF_KZN22_FlewAway, TRUE) - Call(N(func_8024036C_C9A56C)) - EndThread - Call(InterpNpcYaw, NPC_SELF, 90, 0) - Call(LoadPath, 70, Ref(N(FlightPath3)), ARRAY_COUNT(N(FlightPath3)), EASING_LINEAR) - Label(21) - Call(GetNextPathPos) - Set(LVar4, LVar1) - ExecWait(N(EVS_SetCharacterPositions)) - IfEq(LVar0, 1) - Goto(21) - EndIf - Wait(1) - Call(MakeLerp, 300, 500, 20, EASING_CUBIC_IN) - Call(GetNpcPos, NPC_SELF, LVar5, LVar2, LVar6) - Loop(0) - Call(UpdateLerp) - Set(LVar4, LVar5) - Set(LVar2, LVar0) - Set(LVar3, LVar6) - ExecWait(N(EVS_SetCharacterPositions)) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - Call(GotoMap, Ref("kzn_23"), kzn_23_ENTRY_0) - Wait(100) - Return - End -}; - -EvtScript N(EVS_NpcInit_Misstar) = { - Call(SetNpcPos, NPC_SELF, 300, 180, 80) - Call(SetNpcAnimation, NPC_SELF, ANIM_WorldMisstar_IdleAngry) - Set(AF_KZN23_SceneStarted, FALSE) - Set(AF_KZN23_MessageClosed, FALSE) - Set(AF_KZN23_GrabbedKolorado, FALSE) - Set(AF_KZN23_GrabbedPlayer, FALSE) - Set(AF_KZN22_FlewAway, FALSE) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_Scene_Misstar))) - Return - End -}; - -NpcData N(NpcData_Kolorado) = { - .id = NPC_Kolorado, - .pos = { 445.0f, 150.0f, 175.0f }, - .yaw = 90, - .init = &N(EVS_NpcInit_Kolorado), - .settings = &N(NpcSettings_Kolorado), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_ENABLE_HIT_SCRIPT | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_10000 | ENEMY_FLAG_100000, - .drops = NO_DROPS, - .animations = KOLORADO_ANIMS, - .tattle = MSG_NpcTattle_Kolorado, -}; - -NpcData N(NpcData_Misstar) = { - .id = NPC_Misstar, - .pos = { 285.0f, 160.0f, 80.0f }, - .yaw = 270, - .init = &N(EVS_NpcInit_Misstar), - .settings = &N(NpcSettings_StarSpirit), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_ENABLE_HIT_SCRIPT | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_10000 | ENEMY_FLAG_100000, - .drops = NO_DROPS, - .animations = MISSTAR_ANIMS, - .tattle = MSG_NpcTattle_Misstar, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Kolorado)), - NPC_GROUP(N(NpcData_Misstar)), - {} -}; diff --git a/src/world/dead/area_kzn/kzn_23/kzn_23.h b/src/world/dead/area_kzn/kzn_23/kzn_23.h deleted file mode 100644 index c1427055d8b..00000000000 --- a/src/world/dead/area_kzn/kzn_23/kzn_23.h +++ /dev/null @@ -1,25 +0,0 @@ -// Older version of kzn_23 - -#include "dead.h" -#include "common.h" -#include "message_ids.h" -#include "map.h" - -#include "../kzn.h" -#include "mapfs/kzn_23_shape.h" -#include "mapfs/kzn_23_hit.h" - -enum { - NPC_Kolorado = 0, - NPC_Misstar = 1, -}; - -enum { - MV_LavaLevel = MapVar(10), -}; - -#define NAMESPACE dead_kzn_23 - -extern EvtScript N(EVS_Main); -extern EvtScript N(EVS_SetupMusic); -extern NpcGroupList N(DefaultNPCs); diff --git a/src/world/dead/area_kzn/kzn_23/kzn_23_0_header.c b/src/world/dead/area_kzn/kzn_23/kzn_23_0_header.c deleted file mode 100644 index fc9a9115db8..00000000000 --- a/src/world/dead/area_kzn/kzn_23/kzn_23_0_header.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "kzn_23.h" - -EntryList N(Entrances) = { - [kzn_23_ENTRY_0] { 0.0, 0.0, 100.0, 90.0 }, -}; - -MapSettings N(settings) = { - .main = &N(EVS_Main), - .entryList = &N(Entrances), - .entryCount = ENTRY_COUNT(N(Entrances)), - .background = &gBackgroundImage, -}; diff --git a/src/world/dead/area_kzn/kzn_23/kzn_23_1_music.c b/src/world/dead/area_kzn/kzn_23/kzn_23_1_music.c deleted file mode 100644 index 4f604418233..00000000000 --- a/src/world/dead/area_kzn/kzn_23/kzn_23_1_music.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "kzn_23.h" - -EvtScript N(EVS_SetupMusic) = { - Call(SetMusicTrack, 0, SONG_VOLCANO_ESCAPE, 0, 8) - Call(PlayAmbientSounds, AMBIENT_LAVA_5) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_23/kzn_23_2_main.c b/src/world/dead/area_kzn/kzn_23/kzn_23_2_main.c deleted file mode 100644 index 8482aebede8..00000000000 --- a/src/world/dead/area_kzn/kzn_23/kzn_23_2_main.c +++ /dev/null @@ -1,76 +0,0 @@ -#include "kzn_23.h" - -#include "world/area_kzn/common/SmokeTexPanners.inc.c" - -// should add to zero over a full cycle -s32 N(LavaFluctuationOffsets)[] = { - 1, 2, 3, 3, 2, 1, - -1, -2, -3, -3, -2, -1, -}; - -// overlay a sinusoidal offset to the lava level -EvtScript N(EVS_ModulateLavaLevel) = { - Loop(0) - UseBuf(N(LavaFluctuationOffsets)) - Loop(ARRAY_COUNT(N(LavaFluctuationOffsets))) - BufRead1(LVar1) - Add(MV_LavaLevel, LVar1) - Wait(3) - EndLoop - EndLoop - Return - End -}; - -EvtScript N(EVS_RaiseLava) = { - Exec(N(EVS_ModulateLavaLevel)) - SetGroup(EVT_GROUP_00) - Call(SetTexPanner, MODEL_yu, TEX_PANNER_0) - Set(LVar0, 0) - Set(LVar1, 0) - Set(LVar2, 0) - Set(LVar3, 0) - Set(MV_LavaLevel, -105) - Set(LVar5, 40) - Call(TranslateModel, MODEL_yu, 0, MV_LavaLevel, 0) - Wait(6) - Label(10) - Call(SetTexPanOffset, TEX_PANNER_0, TEX_PANNER_MAIN, LVar0, LVar1) - Call(SetTexPanOffset, TEX_PANNER_0, TEX_PANNER_AUX, LVar2, LVar3) - Sub(LVar0, 700) - Add(LVar1, 700) - Add(LVar2, 200) - Sub(LVar3, 300) - IfEq(LVar5, 40) - IfLt(MV_LavaLevel, 2700) - Add(MV_LavaLevel, 20) - Else - Sub(LVar5, 1) - EndIf - Else - IfNe(LVar5, 0) - Sub(LVar5, 1) - Sub(MV_LavaLevel, 1) - EndIf - EndIf - Call(TranslateModel, MODEL_yu, 0, MV_LavaLevel, 0) - Wait(1) - Goto(10) - Return - End -}; - -EvtScript N(EVS_Main) = { - Set(GB_WorldLocation, LOCATION_MT_LAVALAVA) - Call(SetSpriteShading, SHADING_KZN_23) - EVT_SETUP_CAMERA_DEFAULT() - Call(MakeNpcs, TRUE, Ref(N(DefaultNPCs))) - Exec(N(EVS_SetupMusic)) - Exec(N(EVS_RaiseLava)) - Set(LVar0, MODEL_kem1) - Exec(N(EVS_StartTexPanner_SmokeLeft)) - Set(LVar0, MODEL_kem2) - Exec(N(EVS_StartTexPanner_SmokeRight)) - Return - End -}; diff --git a/src/world/dead/area_kzn/kzn_23/kzn_23_3_npc.c b/src/world/dead/area_kzn/kzn_23/kzn_23_3_npc.c deleted file mode 100644 index 7691d0da993..00000000000 --- a/src/world/dead/area_kzn/kzn_23/kzn_23_3_npc.c +++ /dev/null @@ -1,306 +0,0 @@ -#include "kzn_23.h" -#include "entity.h" -#include "effects.h" -#include "sprite/player.h" - -API_CALLABLE(N(SetChestPosition)) { - Bytecode* args = script->ptrReadPos; - s32 entityIndex = evt_get_variable(script, *args++); - f32 x = evt_get_variable(script, *args++); - f32 y = evt_get_variable(script, *args++); - f32 z = evt_get_variable(script, *args++); - Entity* entity = get_entity_by_index(entityIndex); - - entity->pos.x = x; - entity->pos.y = y; - entity->pos.z = z; - return ApiStatus_DONE2; -} - -API_CALLABLE(N(GetChestPosition)) { - Bytecode* args = script->ptrReadPos; - Entity* entity = get_entity_by_index(evt_get_variable(script, *args++)); - - evt_set_variable(script, *args++, entity->pos.x); - evt_set_variable(script, *args++, entity->pos.y); - evt_set_variable(script, *args++, entity->pos.z); - return ApiStatus_DONE2; -} - -API_CALLABLE(N(SetPyroclastPos)) { - Bytecode* args = script->ptrReadPos; - f32 x = evt_get_float_variable(script, *args++); - f32 y = evt_get_float_variable(script, *args++); - f32 z = evt_get_float_variable(script, *args++); - EffectInstance* effect = script->varTablePtr[0xE]; - - effect->data.unk_65->pos.x = x; - effect->data.unk_65->pos.y = y; - effect->data.unk_65->pos.z = z; - return ApiStatus_DONE2; -} - -API_CALLABLE(N(AllowCameraInterpY)) { - Camera* camera = &gCameras[CAM_DEFAULT]; - - camera->moveFlags &= ~CAMERA_MOVE_IGNORE_PLAYER_Y; - return ApiStatus_DONE2; -} - -API_CALLABLE(N(AnimateChestSize)) { - Entity* entity = get_entity_by_index(script->varTable[0xA]); - - if (isInitialCall) { - script->functionTemp[0] = 0; - script->functionTemp[1] = 60; - } - - entity->scale.x = script->functionTemp[1] / 60.0f; - entity->scale.y = script->functionTemp[1] / 60.0f; - entity->scale.z = script->functionTemp[1] / 60.0f; - - entity->rot.y = (1.0f - cos_rad(entity->scale.y * PI)) * 990.0 / 2.0; - - script->functionTemp[1]--; - if (~script->functionTemp[1] == 0) { //TODO remove ~ optimization - return ApiStatus_DONE2; - } else { - return ApiStatus_BLOCK; - } -} - -#include "world/common/npc/Kolorado.inc.c" -#include "world/common/npc/StarSpirit.inc.c" - -EvtScript N(EVS_NpcIdle_Kolorado) = { - Wait(30) - Call(SpeakToPlayer, NPC_SELF, ANIM_Kolorado_Shout, ANIM_Kolorado_Panic, 5, MSG_CH5_0117) - Return - End -}; - -EvtScript N(EVS_NpcInit_Kolorado) = { - Call(InterpNpcYaw, NPC_SELF, 90, 1) - Wait(1) - Call(SetNpcRotationPivot, NPC_SELF, 10) - Call(SetNpcRotation, NPC_SELF, 0, 0, 180) - Call(SetNpcAnimation, NPC_SELF, ANIM_Kolorado_Panic) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_NpcIdle_Kolorado))) - Return - End -}; - -EvtScript N(EVS_CameraFollowMisstar) = { - Label(0) - Call(SetCamSpeed, CAM_DEFAULT, Float(90.0)) - Call(GetNpcPos, NPC_Misstar, LVar0, LVar1, LVar2) - Add(LVar1, 60) - Call(SetCamTarget, CAM_DEFAULT, LVar0, LVar1, LVar2) - IfLt(LVar1, 2740) - Wait(1) - Goto(0) - EndIf - Return - End -}; - -Vec3f N(PyroclastPathA)[] = { - { 50.0, 2650.0, -20.0 }, - { 150.0, 2850.0, -45.0 }, - { 235.0, 2950.0, -60.0 }, - { 335.0, 3000.0, -75.0 }, -}; - -Vec3f N(PyroclastPathB)[] = { - { -20.0, 2650.0, -20.0 }, - { -120.0, 2850.0, -40.0 }, - { -220.0, 3000.0, -40.0 }, -}; - -Vec3f N(PyroclastPathC)[] = { - { 10.0, 2650.00, -20.0 }, - { 20.0, 2800.00, -60.0 }, - { 30.0, 2880.00, -100.0 }, - { 40.0, 2920.00, -150.0 }, - { 50.0, 2940.00, -220.0 }, -}; - -Vec3f N(PyroclastPathD)[] = { - { -35.0, 2650.0, -20.0 }, - { -65.0, 2780.0, -30.0 }, - { -95.0, 2850.0, -40.0 }, - { -125.0, 2880.0, -50.0 }, - { -155.0, 2900.0, -60.0 }, - { -185.0, 2915.0, -70.0 }, -}; - -s32 N(SoundXPositions)[] = { - 130, -150, 130, -150, -}; - -EvtScript N(EVS_PlayPyroclastSounds) = { - Add(LVar0, 1) - UseBuf(N(SoundXPositions)) - Loop(LVar0) - BufRead1(LVar1) - EndLoop - IfEq(AF_KZN23_UseAlternateSound, FALSE) - Call(PlaySoundAt, SOUND_FLYING_PYROCLAST_1, SOUND_SPACE_DEFAULT, LVar1, 2800, 0) - Set(AF_KZN23_UseAlternateSound, TRUE) - Else - Call(PlaySoundAt, SOUND_FLYING_PYROCLAST_2, SOUND_SPACE_DEFAULT, LVar1, 2800, 0) - Set(AF_KZN23_UseAlternateSound, FALSE) - EndIf - Return - End -}; - -EvtScript N(EVS_SpawnPyroclasts) = { - Loop(0) - Thread - Call(RandInt, 3, LVar0) - Exec(N(EVS_PlayPyroclastSounds)) - Switch(LVar0) - CaseEq(0) - PlayEffect(EFFECT_65, 2, 50, 2650, -20, 1, 0) - Set(LVarE, LVarF) - Call(LoadPath, 15, Ref(N(PyroclastPathA)), ARRAY_COUNT(N(PyroclastPathA)), EASING_QUADRATIC_OUT) - CaseEq(1) - PlayEffect(EFFECT_65, 2, -20, 2650, -20, 1, 0) - Set(LVarE, LVarF) - Call(LoadPath, 10, Ref(N(PyroclastPathB)), ARRAY_COUNT(N(PyroclastPathB)), EASING_QUADRATIC_OUT) - CaseEq(2) - PlayEffect(EFFECT_65, 2, 10, 2650, -20, 1, 0) - Set(LVarE, LVarF) - Call(LoadPath, 15, Ref(N(PyroclastPathC)), ARRAY_COUNT(N(PyroclastPathC)), EASING_QUADRATIC_OUT) - CaseEq(3) - PlayEffect(EFFECT_65, 2, -50, 2650, -20, 1, 0) - Set(LVarE, LVarF) - Call(LoadPath, 20, Ref(N(PyroclastPathD)), ARRAY_COUNT(N(PyroclastPathD)), EASING_QUADRATIC_OUT) - EndSwitch - Call(RandInt, 1, LVar4) - IfEq(LVar4, 0) - Set(LVar4, -1) - EndIf - Loop(0) - Call(GetNextPathPos) - Mul(LVar1, LVar4) - Call(N(SetPyroclastPos), LVar1, LVar2, LVar3) - Wait(1) - IfEq(LVar0, 0) - BreakLoop - EndIf - EndLoop - Call(DismissEffect, LVarE) - EndThread - Wait(8) - EndLoop - Return - End -}; - -EvtScript N(EVS_Scene_Misstar) = { - Call(DisablePlayerInput, TRUE) - Call(DisablePlayerPhysics, TRUE) - Call(SetPlayerActionState, ACTION_STATE_LAND) - Call(DisablePartnerAI, 0) - Call(SetNpcFlagBits, NPC_PARTNER, NPC_FLAG_GRAVITY, FALSE) - Call(N(AllowCameraInterpY)) - Exec(N(EVS_CameraFollowMisstar)) - Call(SetSelfVar, 0, 0) - Thread - Wait(1) - Call(SetPlayerAnimation, ANIM_MarioW2_Carried) - EndThread - // fly out of the volcano shaft - Thread - Call(MakeLerp, 0, 3090, 160, EASING_LINEAR) - Loop(0) - Call(UpdateLerp) - Sub(LVar0, 100) - Call(SetNpcPos, NPC_SELF, 0, LVar0, 0) - Call(SetNpcPos, NPC_Kolorado, 10, LVar0, -5) - Call(SetPlayerPos, -10, LVar0, 5) - Add(LVar0, 20) - Call(SetNpcPos, NPC_PARTNER, -10, LVar0, 0) - IfGt(LVar0, 2840) - Call(SetSelfVar, 0, 1) - EndIf - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - EndThread - // wait for escape - Label(0) - Call(GetSelfVar, 0, LVar0) - IfEq(LVar0, 0) - Wait(1) - Goto(0) - EndIf - // make the pyroclasts + sounds - Exec(N(EVS_SpawnPyroclasts)) - Wait(35) - // make the chest thrown from the volcano - Call(MakeEntity, Ref(Entity_Chest), 0, 2650, 0, 148, MAKE_ENTITY_END) - Set(LVarA, LVar0) - Thread - Call(N(AnimateChestSize)) - EndThread - Set(LVar9, LVarA) - Call(N(GetChestPosition), LVar9, LVar2, LVar3, LVar4) - Call(MakeLerp, LVar3, 3000, 10, EASING_QUADRATIC_IN) - Loop(0) - Call(UpdateLerp) - Call(N(SetChestPosition), LVar9, LVar2, LVar0, LVar4) - Add(LVar2, -1) - Wait(1) - IfEq(LVar1, 0) - BreakLoop - EndIf - EndLoop - // end scene - Wait(45) - Call(GotoMap, Ref("jan_04"), jan_04_ENTRY_1) - Wait(100) - Return - End -}; - -EvtScript N(EVS_NpcInit_Misstar) = { - Call(SetNpcPos, NPC_SELF, 0, -100, 0) - Call(SetNpcAnimation, NPC_SELF, ANIM_WorldMisstar_IdleAngry) - Call(BindNpcIdle, NPC_SELF, Ref(N(EVS_Scene_Misstar))) - Return - End -}; - -NpcData N(NpcData_Kolorado) = { - .id = NPC_Kolorado, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 90, - .init = &N(EVS_NpcInit_Kolorado), - .settings = &N(NpcSettings_Kolorado), - .flags = ENEMY_FLAG_PASSIVE | ENEMY_FLAG_ENABLE_HIT_SCRIPT | ENEMY_FLAG_IGNORE_WORLD_COLLISION | ENEMY_FLAG_IGNORE_PLAYER_COLLISION | ENEMY_FLAG_IGNORE_ENTITY_COLLISION | ENEMY_FLAG_10000 | ENEMY_FLAG_100000, - .drops = NO_DROPS, - .animations = KOLORADO_ANIMS, - .tattle = MSG_NpcTattle_Kolorado, -}; - -NpcData N(NpcData_Misstar) = { - .id = NPC_Misstar, - .pos = { NPC_DISPOSE_LOCATION }, - .yaw = 270, - .init = &N(EVS_NpcInit_Misstar), - .settings = &N(NpcSettings_StarSpirit), - .flags = ENEMY_FLAG_4 | ENEMY_FLAG_100000 | ENEMY_FLAG_IGNORE_TOUCH | ENEMY_FLAG_CANT_INTERACT | ENEMY_FLAG_IGNORE_PARTNER, - .drops = NO_DROPS, - .animations = MISSTAR_ANIMS, -}; - -NpcGroupList N(DefaultNPCs) = { - NPC_GROUP(N(NpcData_Kolorado)), - NPC_GROUP(N(NpcData_Misstar)), - {} -}; diff --git a/src/world/disguise.h b/src/world/disguise.h new file mode 100644 index 00000000000..6529c30e9b5 --- /dev/null +++ b/src/world/disguise.h @@ -0,0 +1,18 @@ +#ifndef _DISGUISE_H_ +#define _DISGUISE_H_ + +#include "common.h" + +typedef struct DisguiseAnims { + /* 0x00 */ s32 idle; + /* 0x04 */ s32 walk; + /* 0x08 */ s32 run; + /* 0x0C */ s32 talk; + /* 0x10 */ s32 still; + /* 0x14 */ s32 hold; +} DisguiseAnims; // size = 0x18 + +extern DisguiseAnims BasicPeachDisguiseAnims[4]; +extern AnimID* PeachDisguiseExtraAnims[4]; + +#endif diff --git a/src/world/entrances.h b/src/world/entrances.h index 03185f91dcb..372254a8085 100644 --- a/src/world/entrances.h +++ b/src/world/entrances.h @@ -1336,6 +1336,8 @@ enum { tst_12_ENTRY_0 = 0, tst_13_ENTRY_0 = 0, tst_20_ENTRY_0 = 0, + ham_01_ENTRY_West = 0, + ham_01_ENTRY_East = 1, }; #endif diff --git a/src/world/partner/goombario.c b/src/world/partner/goombario.c index ad9d4ce21e4..5504c24d566 100644 --- a/src/world/partner/goombario.c +++ b/src/world/partner/goombario.c @@ -18,45 +18,45 @@ BSS s32 N(D_802BDF5C); // unused (padding?) BSS s32 WorldTattleInteractionID; BSS s32 N(IsTattleActive); -s32 N(EntityTattles)[] = { - ENTITY_TYPE_HAMMER1_BLOCK, MSG_EntityTattle_HammerBlock1_CanBreak, - ENTITY_TYPE_HAMMER1_BLOCK_TINY, MSG_EntityTattle_HammerBlock1_CanBreak, - ENTITY_TYPE_HAMMER2_BLOCK, MSG_EntityTattle_HammerBlock2_CantBreak, - ENTITY_TYPE_HAMMER2_BLOCK_TINY, MSG_EntityTattle_HammerBlock2_CantBreak, - ENTITY_TYPE_HAMMER3_BLOCK, MSG_EntityTattle_HammerBlock3_CantBreak, - ENTITY_TYPE_HAMMER3_BLOCK_TINY, MSG_EntityTattle_HammerBlock3_CantBreak, - ENTITY_TYPE_BRICK_BLOCK, MSG_EntityTattle_BrickBlock, - ENTITY_TYPE_MULTI_COIN_BRICK, MSG_EntityTattle_BrickBlock, - ENTITY_TYPE_YELLOW_BLOCK, MSG_EntityTattle_ItemBlock, - ENTITY_TYPE_SINGLE_TRIGGER_BLOCK, MSG_EntityTattle_ItemBlock, - ENTITY_TYPE_MULTI_TRIGGER_BLOCK, MSG_EntityTattle_InertBlock, - ENTITY_TYPE_PUSH_BLOCK, MSG_EntityTattle_PushBlock, - ENTITY_TYPE_RED_BLOCK, MSG_EntityTattle_BadgeBlock, - ENTITY_TYPE_SIMPLE_SPRING, MSG_EntityTattle_Spring, - ENTITY_TYPE_SCRIPT_SPRING, MSG_EntityTattle_Spring, - ENTITY_TYPE_BLUE_SWITCH, MSG_EntityTattle_Switch, - ENTITY_TYPE_RED_SWITCH, MSG_EntityTattle_Switch, - ENTITY_TYPE_HUGE_BLUE_SWITCH, MSG_EntityTattle_BigSwitch_SpinJump, - ENTITY_TYPE_GREEN_STOMP_SWITCH, MSG_EntityTattle_FloorSwitch_SpinJump, - ENTITY_TYPE_BLUE_WARP_PIPE, MSG_EntityTattle_Pipe, - ENTITY_TYPE_PADLOCK, MSG_EntityTattle_PadLock, - ENTITY_TYPE_PADLOCK_RED_FRAME, MSG_EntityTattle_PadLock, - ENTITY_TYPE_PADLOCK_RED_FACE, MSG_EntityTattle_PadLock, - ENTITY_TYPE_PADLOCK_BLUE_FACE, MSG_EntityTattle_PadLock, - ENTITY_TYPE_SIGNPOST, MSG_EntityTattle_SignPost, - ENTITY_TYPE_RED_ARROW_SIGNS, MSG_EntityTattle_ArrowSign, - ENTITY_TYPE_BOMBABLE_ROCK, MSG_EntityTattle_BombableRock, - ENTITY_TYPE_CHEST, MSG_EntityTattle_Chest, - ENTITY_TYPE_WOODEN_CRATE, MSG_EntityTattle_WoodenCrate_CantBreak, - ENTITY_TYPE_BOARDED_FLOOR, MSG_EntityTattle_BoardedFloor_CantBreak, - ENTITY_TYPE_STAR_BOX_LAUNCHER, MSG_EntityTattle_JackInTheBox_SpinJump, - ENTITY_TYPE_BELLBELL_PLANT, MSG_EntityTattle_BellbellPlant, - ENTITY_TYPE_TRUMPET_PLANT, MSG_EntityTattle_TrumpetPlant, - ENTITY_TYPE_CYMBAL_PLANT, MSG_EntityTattle_CymbalBush, - ENTITY_TYPE_MUNCHLESIA, MSG_EntityTattle_Munchlesia, - ENTITY_TYPE_SPINNING_FLOWER, MSG_EntityTattle_SpinningFlower, - ENTITY_TYPE_PINK_FLOWER, MSG_EntityTattle_BulbBush, - -1 +s32 N(EntityTattles)[][2] = { + { ENTITY_TYPE_HAMMER1_BLOCK, MSG_EntityTattle_HammerBlock1_CanBreak }, + { ENTITY_TYPE_HAMMER1_BLOCK_TINY, MSG_EntityTattle_HammerBlock1_CanBreak }, + { ENTITY_TYPE_HAMMER2_BLOCK, MSG_EntityTattle_HammerBlock2_CantBreak }, + { ENTITY_TYPE_HAMMER2_BLOCK_TINY, MSG_EntityTattle_HammerBlock2_CantBreak }, + { ENTITY_TYPE_HAMMER3_BLOCK, MSG_EntityTattle_HammerBlock3_CantBreak }, + { ENTITY_TYPE_HAMMER3_BLOCK_TINY, MSG_EntityTattle_HammerBlock3_CantBreak }, + { ENTITY_TYPE_BRICK_BLOCK, MSG_EntityTattle_BrickBlock }, + { ENTITY_TYPE_MULTI_COIN_BRICK, MSG_EntityTattle_BrickBlock }, + { ENTITY_TYPE_YELLOW_BLOCK, MSG_EntityTattle_ItemBlock }, + { ENTITY_TYPE_SINGLE_TRIGGER_BLOCK, MSG_EntityTattle_ItemBlock }, + { ENTITY_TYPE_MULTI_TRIGGER_BLOCK, MSG_EntityTattle_InertBlock }, + { ENTITY_TYPE_PUSH_BLOCK, MSG_EntityTattle_PushBlock }, + { ENTITY_TYPE_RED_BLOCK, MSG_EntityTattle_BadgeBlock }, + { ENTITY_TYPE_SIMPLE_SPRING, MSG_EntityTattle_Spring }, + { ENTITY_TYPE_SCRIPT_SPRING, MSG_EntityTattle_Spring }, + { ENTITY_TYPE_BLUE_SWITCH, MSG_EntityTattle_Switch }, + { ENTITY_TYPE_RED_SWITCH, MSG_EntityTattle_Switch }, + { ENTITY_TYPE_HUGE_BLUE_SWITCH, MSG_EntityTattle_BigSwitch_SpinJump }, + { ENTITY_TYPE_GREEN_STOMP_SWITCH, MSG_EntityTattle_FloorSwitch_SpinJump }, + { ENTITY_TYPE_BLUE_WARP_PIPE, MSG_EntityTattle_Pipe }, + { ENTITY_TYPE_PADLOCK, MSG_EntityTattle_PadLock }, + { ENTITY_TYPE_PADLOCK_RED_FRAME, MSG_EntityTattle_PadLock }, + { ENTITY_TYPE_PADLOCK_RED_FACE, MSG_EntityTattle_PadLock }, + { ENTITY_TYPE_PADLOCK_BLUE_FACE, MSG_EntityTattle_PadLock }, + { ENTITY_TYPE_SIGNPOST, MSG_EntityTattle_SignPost }, + { ENTITY_TYPE_RED_ARROW_SIGNS, MSG_EntityTattle_ArrowSign }, + { ENTITY_TYPE_BOMBABLE_ROCK, MSG_EntityTattle_BombableRock }, + { ENTITY_TYPE_CHEST, MSG_EntityTattle_Chest }, + { ENTITY_TYPE_WOODEN_CRATE, MSG_EntityTattle_WoodenCrate_CantBreak }, + { ENTITY_TYPE_BOARDED_FLOOR, MSG_EntityTattle_BoardedFloor_CantBreak }, + { ENTITY_TYPE_STAR_BOX_LAUNCHER, MSG_EntityTattle_JackInTheBox_SpinJump }, + { ENTITY_TYPE_BELLBELL_PLANT, MSG_EntityTattle_BellbellPlant }, + { ENTITY_TYPE_TRUMPET_PLANT, MSG_EntityTattle_TrumpetPlant }, + { ENTITY_TYPE_CYMBAL_PLANT, MSG_EntityTattle_CymbalBush }, + { ENTITY_TYPE_MUNCHLESIA, MSG_EntityTattle_Munchlesia }, + { ENTITY_TYPE_SPINNING_FLOWER, MSG_EntityTattle_SpinningFlower }, + { ENTITY_TYPE_PINK_FLOWER, MSG_EntityTattle_BulbBush }, + { -1, -1 } }; s32 N(get_trigger_tattle)(s32 tattleColliderID) { @@ -202,16 +202,12 @@ EvtScript EVS_WorldGoombario_Update = { }; s32 N(can_open_menus)(Npc* goombario) { - PartnerStatus* partnerStatus = &gPartnerStatus; - s32 new_var; - - if (partnerStatus->partnerActionState != PARTNER_ACTION_NONE) { + if (gPartnerStatus.partnerActionState != PARTNER_ACTION_NONE) { return FALSE; } if ((goombario->flags & (NPC_FLAG_GROUNDED | NPC_FLAG_JUMPING)) != NPC_FLAG_GROUNDED) { - return new_var = 0; - do {} while (new_var); // why though + return FALSE; } return TRUE; @@ -221,7 +217,7 @@ API_CALLABLE(N(SelectTattleMsg)) { PlayerStatus* playerStatus = &gPlayerStatus; Npc* goombario = script->owner2.npc; s32 msgID; - s32 temp; // TODO required to match (this temp needs to be used in two places for different things) + s32 entityType; s32 npcMsgID; s32 enemyTattleMsg; s32 i; @@ -295,14 +291,14 @@ API_CALLABLE(N(SelectTattleMsg)) { case USE_TATTLE_CHOOSE: // check for entity tattle if (WorldTattleInteractionID >= 0 && (WorldTattleInteractionID & COLLISION_WITH_ENTITY_BIT)) { - temp = get_entity_type(WorldTattleInteractionID); + entityType = get_entity_type(WorldTattleInteractionID); msgID = -1; - do {} while (0); - for (i = 0; N(EntityTattles)[2 * i] != -1; i++) { - if (N(EntityTattles)[2 * i] != temp) { + + for (i = 0; N(EntityTattles)[i][0] != -1; i++) { + if (N(EntityTattles)[i][0] != entityType) { continue; } - switch (temp) { + switch (entityType) { case ENTITY_TYPE_HAMMER2_BLOCK: case ENTITY_TYPE_HAMMER2_BLOCK_TINY: if (gPlayerData.hammerLevel >= 1) { @@ -353,7 +349,7 @@ API_CALLABLE(N(SelectTattleMsg)) { if (msgID != -1) { script->VAR_MSG = msgID; } else { - script->VAR_MSG = N(EntityTattles)[2 * i + 1]; + script->VAR_MSG = N(EntityTattles)[i][1]; } script->VAR_SKIP = FALSE; return ApiStatus_DONE2; @@ -384,13 +380,13 @@ API_CALLABLE(N(SelectTattleMsg)) { } // check for custom trigger tattle - temp = MSG_NONE; + msgID = MSG_NONE; if (WorldTattleInteractionID >= 0) { - temp = N(get_trigger_tattle)(WorldTattleInteractionID); + msgID = N(get_trigger_tattle)(WorldTattleInteractionID); } // check map tattle - if (temp == MSG_NONE) { + if (msgID == MSG_NONE) { msgID = get_current_map_settings()->tattle.msgID; if (msgID != 0) { if (msgID < EVT_LIMIT) { @@ -402,7 +398,7 @@ API_CALLABLE(N(SelectTattleMsg)) { } } } else { - script->VAR_MSG = temp; + script->VAR_MSG = msgID; script->VAR_SKIP = TRUE; } return ApiStatus_DONE2; diff --git a/src/world/partners.c b/src/world/partners.c index 8a3ba6327cd..0a3f433fa34 100644 --- a/src/world/partners.c +++ b/src/world/partners.c @@ -528,7 +528,7 @@ s32 use_consumable(s32 invSlot) { void remove_consumable(void) { gPlayerData.invItems[D_8010CD20] = ITEM_NONE; - sort_items(); + sort_consumables(); } s32 func_800EA4B0(s32 collisionID) { diff --git a/src/world/script_api/push_blocks.c b/src/world/script_api/push_blocks.c index 5523e0067a9..0b8fcc37474 100644 --- a/src/world/script_api/push_blocks.c +++ b/src/world/script_api/push_blocks.c @@ -428,8 +428,8 @@ API_CALLABLE(GetPushBlock) { s32 cellIndex; if (gridX >= blockGrid->numCellsX || gridX < 0 || gridZ >= blockGrid->numCellsZ || gridZ < 0) { - /// @bug: sets error value and then performs lookup anyway -- return statement forgotten here evt_set_variable(script, outVar, PUSH_GRID_OUT_OF_BOUNDS); + return; } cellIndex = gridX + (gridZ * blockGrid->numCellsX); evt_set_variable(script, outVar, blockGrid->cells[cellIndex]); diff --git a/src/world/script_api/shops.c b/src/world/script_api/shops.c index 5a30a99b5a1..12ee1e3789a 100644 --- a/src/world/script_api/shops.c +++ b/src/world/script_api/shops.c @@ -290,16 +290,16 @@ API_CALLABLE(ShowShopPurchaseDialog) { case PURCHASE_DIALOG_STATE_WAIT_FOR_SPEECH: if (script->functionTemp[2] == TRUE) { if (D_80286528->curOption == 0) { - if (playerData->coins < shopInventory->price) { + if (gPlayerData.coins < shopInventory->price) { script->functionTemp[1] = shop_owner_continue_speech(SHOP_MSG_NOT_ENOUGH_COINS); script->functionTemp[0] = PURCHASE_DIALOG_STATE_NOT_ENOUGH_COINS; - } else if (!IS_BADGE(shopInventory->itemID) && add_item(ITEM_NONE) == -1) { + } else if (!item_is_badge(shopInventory->itemID) && get_consumables_empty() < 1) { script->functionTemp[1] = shop_owner_continue_speech(SHOP_MSG_NOT_ENOUGH_ROOM); script->functionTemp[0] = PURCHASE_DIALOG_STATE_NOT_ENOUGH_ROOM; } else { - playerData->coins -= shopInventory->price; - if (IS_BADGE(shopInventory->itemID)) { - add_badge(shopInventory->itemID); + gPlayerData.coins -= shopInventory->price; + if (item_is_badge(shopInventory->itemID)) { + add_item(shopInventory->itemID); evt_set_variable(NULL, GF_MAC01_BoughtBadgeFromRowf, TRUE); } else { add_item(shopInventory->itemID); @@ -463,10 +463,6 @@ s32 shop_get_sell_price(s32 itemID) { ShopSellPriceData* items = shop->staticPriceList; s32 i; - if (shop != NULL) { - i = 0; - } // TODO fake match - for (i = 0; i < numItems; i++) { if (items[i].itemID == itemID) { return items[i].sellPrice; @@ -477,9 +473,7 @@ s32 shop_get_sell_price(s32 itemID) { } API_CALLABLE(ShowShopOwnerDialog) { - GameStatus* gameStatus = gGameStatusPtr; - PlayerData* playerData = &gPlayerData; - Shop* shop = gameStatus->mapShop; + Shop* shop = gGameStatus.mapShop; static MessagePrintState* ShopOwnerPrintState; @@ -533,7 +527,7 @@ API_CALLABLE(ShowShopOwnerDialog) { script->functionTemp[0] = DIALOG_STATE_DONE_INSTRUCTIONS; break; case 1: - if (get_item_count() == 0) { + if (get_consumables_count() == 0) { script->functionTemp[1] = shop_owner_continue_speech(SHOP_MSG_NOTHING_TO_SELL); script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; } else { @@ -542,17 +536,17 @@ API_CALLABLE(ShowShopOwnerDialog) { } break; case 2: - if (get_item_count() == 0) { + if (get_consumables_count() == 0) { script->functionTemp[1] = shop_owner_continue_speech(SHOP_MSG_NOTHING_TO_CHECK); script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; break; } - if (get_stored_empty_count() == 0) { + if (get_stored_empty() == 0) { script->functionTemp[1] = shop_owner_continue_speech(SHOP_MSG_NO_CHECK_ROOM); script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; break; } - script->functionTemp[1] = shop_owner_continue_speech_with_quantity(SHOP_MSG_CHECK_WHICH, get_stored_empty_count()); + script->functionTemp[1] = shop_owner_continue_speech_with_quantity(SHOP_MSG_CHECK_WHICH, get_stored_empty()); script->functionTemp[0] = DIALOG_STATE_INIT_CHECK_CHOICE; break; case 3: @@ -561,7 +555,7 @@ API_CALLABLE(ShowShopOwnerDialog) { script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; break; } - if (get_item_empty_count() == 0) { + if (get_consumables_empty() == 0) { script->functionTemp[1] = shop_owner_continue_speech(SHOP_MSG_NO_CLAIM_ROOM); script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; break; @@ -595,8 +589,8 @@ API_CALLABLE(ShowShopOwnerDialog) { } shop_close_item_select_popup(); if (shop->selectedStoreItemSlot >= 0) { - ItemData* itemData = &gItemTable[playerData->invItems[shop->selectedStoreItemSlot]]; - script->functionTemp[1] = shop_owner_buy_dialog(SHOP_MSG_SELL_CONFIRM, itemData->nameMsg, shop_get_sell_price(playerData->invItems[shop->selectedStoreItemSlot]), -1); + ItemData* itemData = &gItemTable[gPlayerData.invItems[shop->selectedStoreItemSlot]]; + script->functionTemp[1] = shop_owner_buy_dialog(SHOP_MSG_SELL_CONFIRM, itemData->nameMsg, shop_get_sell_price(gPlayerData.invItems[shop->selectedStoreItemSlot]), -1); show_coin_counter(); script->functionTemp[0] = DIALOG_STATE_AWAIT_SELL_CONFIRM; } else { @@ -614,9 +608,9 @@ API_CALLABLE(ShowShopOwnerDialog) { case DIALOG_STATE_HANDLE_SELL_CHOICE: if (script->functionTemp[2] == 1) { if (ShopOwnerPrintState->curOption == 0) { - add_coins(shop_get_sell_price(playerData->invItems[shop->selectedStoreItemSlot])); - playerData->invItems[shop->selectedStoreItemSlot] = ITEM_NONE; - if (get_item_count() == 0) { + add_coins(shop_get_sell_price(gPlayerData.invItems[shop->selectedStoreItemSlot])); + gPlayerData.invItems[shop->selectedStoreItemSlot] = ITEM_NONE; + if (get_consumables_count() == 0) { script->functionTemp[1] = shop_owner_reset_speech(SHOP_MSG_SELL_THANKS); script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; hide_coin_counter(); @@ -670,11 +664,11 @@ API_CALLABLE(ShowShopOwnerDialog) { } shop_close_item_select_popup(); if (shop->selectedStoreItemSlot >= 0) { - if (store_item(playerData->invItems[shop->selectedStoreItemSlot]) >= 0) { - playerData->invItems[shop->selectedStoreItemSlot] = ITEM_NONE; + if (store_item(gPlayerData.invItems[shop->selectedStoreItemSlot]) >= 0) { + gPlayerData.invItems[shop->selectedStoreItemSlot] = ITEM_NONE; } - if ((get_item_count() == 0) || (get_stored_empty_count() == 0)) { + if ((get_consumables_count() == 0) || (get_stored_empty() == 0)) { script->functionTemp[1] = shop_owner_begin_speech(SHOP_MSG_CHECK_ACCEPTED); script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; } else { @@ -723,11 +717,11 @@ API_CALLABLE(ShowShopOwnerDialog) { } shop_close_item_select_popup(); if (shop->selectedStoreItemSlot >= 0) { - if (add_item(playerData->storedItems[shop->selectedStoreItemSlot]) >= 0) { - playerData->storedItems[shop->selectedStoreItemSlot] = 0; + if (add_item(gPlayerData.storedItems[shop->selectedStoreItemSlot]) >= 0) { + gPlayerData.storedItems[shop->selectedStoreItemSlot] = ITEM_NONE; } - if (get_item_empty_count() == 0 || get_stored_count() == 0) { + if (get_consumables_empty() == 0 || get_stored_count() == 0) { script->functionTemp[1] = shop_owner_begin_speech(SHOP_MSG_CLAIM_ACCEPTED); script->functionTemp[0] = DIALOG_STATE_CLOSED_SUBMENU; } else { diff --git a/src/world/world.c b/src/world/world.c index c08016f7b02..b6c749fec04 100644 --- a/src/world/world.c +++ b/src/world/world.c @@ -7,6 +7,7 @@ #include "sprite.h" #include "model.h" #include "gcc/string.h" +#include "dx/debug_menu.h" s32 WorldReverbModeMapping[] = { 0, 1, 2, 3 }; @@ -41,7 +42,7 @@ s32 pad_map_table[] = { 0, 0 }; #define ASSET_TABLE_ROM_START 0x1E40000 #endif -#define ASSET_TABLE_HEADER_SIZE 0x20 +#define ASSET_TABLE_HEADER_SIZE 0x21 #define ASSET_TABLE_FIRST_ENTRY (ASSET_TABLE_ROM_START + ASSET_TABLE_HEADER_SIZE) SHIFT_BSS MapSettings gMapSettings; @@ -112,8 +113,14 @@ void load_map_by_IDs(s16 areaID, s16 mapID, s16 loadType) { gGameStatusPtr->mapShop = NULL; + ASSERT_MSG(areaID < ARRAY_COUNT(gAreas) - 1, "Invalid area ID %d", areaID); + ASSERT_MSG(mapID < gAreas[areaID].mapCount, "Invalid map ID %d in %s", mapID, gAreas[areaID].id); mapConfig = &gAreas[areaID].maps[mapID]; + #if DX_DEBUG_MENU + dx_debug_set_map_info(mapConfig->id, gGameStatus.entryID); + #endif + sprintf(wMapShapeName, "%s_shape", mapConfig->id); sprintf(wMapHitName, "%s_hit", mapConfig->id); strcpy(texStr, mapConfig->id); @@ -237,7 +244,7 @@ MapSettings* get_current_map_settings(void) { return &gMapSettings; } -s32 get_map_IDs_by_name(const char* mapName, s16* areaID, s16* mapID) { +NODISCARD s32 get_map_IDs_by_name(const char* mapName, s16* areaID, s16* mapID) { s32 i; s32 j; MapConfig* maps; @@ -256,6 +263,10 @@ s32 get_map_IDs_by_name(const char* mapName, s16* areaID, s16* mapID) { return FALSE; } +void get_map_IDs_by_name_checked(const char* mapName, s16* areaID, s16* mapID) { + ASSERT_MSG(get_map_IDs_by_name(mapName, areaID, mapID), "Map not found: %s", mapName); +} + void* load_asset_by_name(const char* assetName, u32* decompressedSize) { AssetHeader firstHeader; AssetHeader* assetTableBuffer; @@ -267,6 +278,7 @@ void* load_asset_by_name(const char* assetName, u32* decompressedSize) { curAsset = &assetTableBuffer[0]; dma_copy((u8*) ASSET_TABLE_FIRST_ENTRY, (u8*) ASSET_TABLE_FIRST_ENTRY + firstHeader.offset, assetTableBuffer); while (strcmp(curAsset->name, assetName) != 0) { + ASSERT_MSG(strcmp(curAsset->name, "end_data") != 0, "Asset not found: %s", assetName); curAsset++; } *decompressedSize = curAsset->decompressedLength; @@ -288,6 +300,7 @@ s32 get_asset_offset(char* assetName, s32* compressedSize) { curAsset = &assetTableBuffer[0]; dma_copy((u8*) ASSET_TABLE_FIRST_ENTRY, (u8*) ASSET_TABLE_FIRST_ENTRY + firstHeader.offset, assetTableBuffer); while (strcmp(curAsset->name, assetName) != 0) { + ASSERT_MSG(strcmp(curAsset->name, "end_data") != 0, "Asset not found: %s", assetName); curAsset++; } *compressedSize = curAsset->compressedLength; @@ -309,596 +322,19 @@ s32 get_asset_offset(char* assetName, s32* compressedSize) { MAP(map), \ .init = &map##_map_init \ -/// Toad Town -#include "area_mac/mac.h" -MapConfig mac_maps[] = { - { MAP(machi), .bgName = "nok_bg" }, - { MAP(mac_00), .bgName = "nok_bg" }, - { MAP(mac_01), .bgName = "nok_bg" }, - { MAP(mac_02), .bgName = "nok_bg" }, - { MAP(mac_03), .bgName = "nok_bg" }, - { MAP_WITH_INIT(mac_04), .bgName = "nok_bg" }, - { MAP(mac_05), .bgName = "nok_bg" }, - { MAP(mac_06), .bgName = "nok_bg" }, -}; - -/// Toad Town Tunnels -#include "area_tik/tik.h" -MapConfig tik_maps[] = { - { MAP(tik_01), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_02), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_03), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_04), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_05), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_06), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_07), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_08), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_09), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_10), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_12), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_14), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_15), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_17), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_18), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_19), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_20), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_21), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_22), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_23), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(tik_24), .songVariation = 1, .sfxReverb = 2 }, - { MAP(tik_25), .songVariation = 1, .sfxReverb = 2 }, -}; - -/// Inside the Whale -#include "area_kgr/kgr.h" -MapConfig kgr_maps[] = { - { MAP(kgr_01), .sfxReverb = 1 }, - { MAP(kgr_02), .sfxReverb = 1 }, -}; - -/// Goomba Region -#include "area_kmr/kmr.h" -MapConfig kmr_maps[] = { - { MAP(kmr_00), .bgName = "kmr_bg", .sfxReverb = 1 }, - { MAP(kmr_02), .bgName = "kmr_bg" }, - { MAP(kmr_03), .bgName = "kmr_bg" }, - { MAP(kmr_04), .bgName = "kmr_bg" }, - { MAP(kmr_05), .bgName = "kmr_bg" }, - { MAP(kmr_06), .bgName = "kmr_bg" }, - { MAP(kmr_07), .bgName = "kmr_bg" }, - { MAP(kmr_09), .bgName = "kmr_bg" }, - { MAP(kmr_10), .bgName = "kmr_bg" }, - { MAP(kmr_11), .bgName = "kmr_bg" }, - { MAP(kmr_12), .bgName = "kmr_bg" }, - { MAP(kmr_20), .bgName = "kmr_bg" }, // Mario's House - { MAP_WITH_INIT(kmr_21) }, - { MAP_WITH_INIT(kmr_22) }, - { MAP_WITH_INIT(kmr_23) }, - { MAP_WITH_INIT(kmr_24) }, - { MAP(kmr_30) }, -}; - -/// Mt. Rugged -#include "area_iwa/iwa.h" -MapConfig iwa_maps[] = { - { MAP(iwa_00), .bgName = "iwa_bg" }, - { MAP(iwa_01), .bgName = "iwa_bg" }, - { MAP(iwa_02), .bgName = "iwa_bg" }, - { MAP(iwa_03), .bgName = "iwa_bg" }, - { MAP(iwa_04), .bgName = "iwa_bg" }, - { MAP(iwa_10), .bgName = "iwa_bg" }, - { MAP(iwa_11), .bgName = "iwa_bg" }, -}; - -/// Dry Dry Outpost -#include "area_dro/dro.h" -MapConfig dro_maps[] = { - { MAP(dro_01), .bgName = "sbk_bg" }, - { MAP(dro_02), .bgName = "sbk_bg" }, -}; - -/// Dry Dry Desert -#include "area_sbk/sbk.h" -MapConfig sbk_maps[] = { - { MAP(sbk_00), .bgName = "sbk_bg" }, - { MAP(sbk_01), .bgName = "sbk_bg" }, - { MAP(sbk_02), .bgName = "sbk_bg" }, - { MAP(sbk_03), .bgName = "sbk_bg" }, - { MAP(sbk_04), .bgName = "sbk_bg" }, - { MAP(sbk_05), .bgName = "sbk_bg" }, - { MAP(sbk_06), .bgName = "sbk_bg" }, - { MAP(sbk_10), .bgName = "sbk_bg" }, - { MAP(sbk_11), .bgName = "sbk_bg" }, - { MAP(sbk_12), .bgName = "sbk_bg" }, - { MAP(sbk_13), .bgName = "sbk_bg" }, - { MAP(sbk_14), .bgName = "sbk_bg" }, - { MAP(sbk_15), .bgName = "sbk_bg" }, - { MAP(sbk_16), .bgName = "sbk_bg" }, - { MAP(sbk_20), .bgName = "sbk_bg" }, - { MAP(sbk_21), .bgName = "sbk_bg" }, - { MAP(sbk_22), .bgName = "sbk_bg" }, - { MAP(sbk_23), .bgName = "sbk_bg" }, - { MAP(sbk_24), .bgName = "sbk_bg" }, - { MAP(sbk_25), .bgName = "sbk_bg" }, - { MAP(sbk_26), .bgName = "sbk_bg" }, - { MAP(sbk_30), .bgName = "sbk_bg" }, - { MAP(sbk_31), .bgName = "sbk_bg" }, - { MAP(sbk_32), .bgName = "sbk_bg" }, - { MAP(sbk_33), .bgName = "sbk_bg" }, - { MAP(sbk_34), .bgName = "sbk_bg" }, - { MAP(sbk_35), .bgName = "sbk_bg" }, - { MAP(sbk_36), .bgName = "sbk_bg" }, - { MAP(sbk_40), .bgName = "sbk_bg" }, - { MAP(sbk_41), .bgName = "sbk_bg" }, - { MAP(sbk_42), .bgName = "sbk_bg" }, - { MAP(sbk_43), .bgName = "sbk_bg" }, - { MAP(sbk_44), .bgName = "sbk_bg" }, - { MAP(sbk_45), .bgName = "sbk_bg" }, - { MAP(sbk_46), .bgName = "sbk_bg" }, - { MAP(sbk_50), .bgName = "sbk_bg" }, - { MAP(sbk_51), .bgName = "sbk_bg" }, - { MAP(sbk_52), .bgName = "sbk_bg" }, - { MAP(sbk_53), .bgName = "sbk_bg" }, - { MAP(sbk_54), .bgName = "sbk_bg" }, - { MAP(sbk_55), .bgName = "sbk_bg" }, - { MAP(sbk_56), .bgName = "sbk_bg" }, - { MAP(sbk_60), .bgName = "sbk_bg" }, - { MAP(sbk_61), .bgName = "sbk_bg" }, - { MAP(sbk_62), .bgName = "sbk_bg" }, - { MAP(sbk_63), .bgName = "sbk_bg" }, - { MAP(sbk_64), .bgName = "sbk_bg" }, - { MAP(sbk_65), .bgName = "sbk_bg" }, - { MAP(sbk_66), .bgName = "sbk_bg" }, - { MAP(sbk_99), .bgName = "sbk_bg" }, -}; - -/// Dry Dry Ruins -#include "area_isk/isk.h" -MapConfig isk_maps[] = { - { MAP(isk_01), .bgName = "sbk3_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_02), .bgName = "sbk3_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_03), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_04), .bgName = "sbk3_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_05), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_06), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_07), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_08), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_09), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_10), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_11), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_12), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_13), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_14), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_16), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_18), .songVariation = 1, .sfxReverb = 2 }, - { MAP(isk_19), .songVariation = 1, .sfxReverb = 2 }, -}; - -/// Koopa Bros. Fortress -#include "area_trd/trd.h" -MapConfig trd_maps[] = { - { MAP(trd_00), .bgName = "nok_bg" }, - { MAP(trd_01), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_02), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_03), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_04), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_05), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_06), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_07), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_08), .songVariation = 1, .sfxReverb = 3 }, - { MAP(trd_09), .bgName = "nok_bg" }, - { MAP(trd_10), .songVariation = 1, .sfxReverb = 3 }, -}; - -/// Koopa Region -#include "area_nok/nok.h" -MapConfig nok_maps[] = { - { MAP(nok_01), .bgName = "nok_bg" }, - { MAP(nok_02), .bgName = "nok_bg" }, - { MAP(nok_03), .bgName = "nok_bg" }, - { MAP(nok_04), .bgName = "nok_bg" }, - { MAP(nok_11), .bgName = "nok_bg" }, - { MAP(nok_12), .bgName = "nok_bg" }, - { MAP(nok_13), .bgName = "nok_bg" }, - { MAP(nok_14), .bgName = "nok_bg" }, - { MAP(nok_15), .bgName = "nok_bg" }, -}; - -/// Star Region -#include "area_hos/hos.h" -MapConfig hos_maps[] = { - { MAP_WITH_INIT(hos_00), .bgName = "nok_bg" }, - { MAP(hos_01), .bgName = "hos_bg" }, - { MAP(hos_02), .bgName = "hos_bg" }, - { MAP(hos_03), .bgName = "hos_bg" }, - { MAP(hos_04), .bgName = "hos_bg" }, - { MAP(hos_05), .bgName = "hos_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(hos_06), .bgName = "hos_bg" }, - { MAP_WITH_INIT(hos_10), .bgName = "hos_bg" }, - { MAP(hos_20), .bgName = "hos_bg" }, -}; - -/// Bowser's Castle -#include "area_kpa/kpa.h" -MapConfig kpa_maps[] = { - { MAP(kpa_01), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_03), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_04), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_08), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_09), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_10), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_11), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_12), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_13), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_14), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_15), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_16), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_17), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_32), .bgName = "kpa_bg", .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_33), .bgName = "kpa_bg", .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_40), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_41), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_50), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(kpa_51), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_52), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(kpa_53), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_60), .bgName = "kpa_bg" }, - { MAP(kpa_61), .bgName = "kpa_bg" }, - { MAP(kpa_62), .bgName = "kpa_bg" }, - { MAP(kpa_63), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_70), .songVariation = 1, .sfxReverb = 3 }, - { MAP_WITH_INIT(kpa_81), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(kpa_82), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(kpa_83), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_90), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_91), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_94), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_95), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_96), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(kpa_100), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(kpa_101), .songVariation = 1, .sfxReverb = 1 }, - { MAP(kpa_102), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_111), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_112), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_113), .songVariation = 1, .sfxReverb = 3 }, - { MAP_WITH_INIT(kpa_114), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_115), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_116), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_117), .songVariation = 1, .sfxReverb = 1 }, - { MAP(kpa_118), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_119), .songVariation = 1, .sfxReverb = 1 }, - { MAP(kpa_121), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kpa_130), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_133), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kpa_134), .songVariation = 1, .sfxReverb = 3 }, -}; - -/// Peach's Castle Grounds -#include "area_osr/osr.h" -MapConfig osr_maps[] = { - { MAP(osr_00), .bgName = "nok_bg" }, - { MAP_WITH_INIT(osr_01), .bgName = "nok_bg" }, - { MAP_WITH_INIT(osr_02), .bgName = "kpa_bg" }, - { MAP_WITH_INIT(osr_03), .bgName = "kpa_bg" }, - { MAP_WITH_INIT(osr_04), .bgName = "nok_bg" }, -}; - -/// Peach's Castle -/// @bug There are two entries for kkj_26; the latter is unreachable. -#include "area_kkj/kkj.h" -MapConfig kkj_maps[] = { - { MAP_WITH_INIT(kkj_00), .bgName = "nok_bg", .songVariation = 1, .sfxReverb = 3 }, - { MAP(kkj_01), .bgName = "nok_bg", .songVariation = 1, .sfxReverb = 3 }, - { MAP(kkj_02), .bgName = "nok_bg", .sfxReverb = 2 }, - { MAP_WITH_INIT(kkj_03), .bgName = "nok_bg", .sfxReverb = 3 }, - { MAP(kkj_10), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kkj_11), .songVariation = 1, .sfxReverb = 3 }, - { MAP(kkj_12), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(kkj_13), .bgName = "kpa_bg", .songVariation = 1, .sfxReverb = 3}, - { MAP_WITH_INIT(kkj_14), .bgName = "kpa_bg" }, - { MAP(kkj_15) }, - { MAP(kkj_16), .sfxReverb = 1 }, - { MAP(kkj_17) }, - { MAP(kkj_18), .bgName = "kpa_bg" }, - { MAP(kkj_19) }, - { MAP(kkj_20) }, - { MAP(kkj_21), .sfxReverb = 1 }, - { MAP(kkj_22), .bgName = "kpa_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(kkj_23), .bgName = "kpa_bg" }, - { MAP(kkj_24), .bgName = "kpa_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(kkj_25), .bgName = "kpa_bg" }, - { MAP(kkj_26), .bgName = "kpa_bg" }, - { MAP(kkj_26), .sfxReverb = 2 }, - { MAP(kkj_27), .sfxReverb = 1 }, - { MAP(kkj_28), .sfxReverb = 1 }, - { MAP(kkj_29), .sfxReverb = 1 }, -}; - -/// Jade Jungle -#include "area_jan/jan.h" -MapConfig jan_maps[] = { - { MAP(jan_00), .bgName = "yos_bg" }, - { MAP(jan_01), .bgName = "yos_bg" }, - { MAP(jan_02), .bgName = "yos_bg" }, - { MAP(jan_03), .bgName = "yos_bg" }, - { MAP(jan_04), .bgName = "yos_bg" }, - { MAP(jan_05), .bgName = "yos_bg" }, - { MAP(jan_06), .bgName = "jan_bg" }, - { MAP(jan_07), .bgName = "yos_bg" }, - { MAP(jan_08), .bgName = "yos_bg" }, - { MAP(jan_09), .bgName = "yos_bg" }, - { MAP(jan_10), .bgName = "yos_bg" }, - { MAP(jan_11), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(jan_12), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(jan_13), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(jan_14), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(jan_15), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(jan_16), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(jan_17), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(jan_18), .bgName = "yos_bg" }, - { MAP(jan_19), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(jan_22), .bgName = "jan_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(jan_23), .bgName = "yos_bg" }, -}; - -/// Forever Forest -#include "area_mim/mim.h" -MapConfig mim_maps[] = { - { MAP(mim_01), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_02), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_03), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_04), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_05), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_06), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_07), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_08), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_09), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_10), .bgName = "nok_bg" }, - { MAP(mim_11), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(mim_12), .bgName = "arn_bg", .songVariation = 1, .sfxReverb = 2 }, -}; - -/// Boo's Mansion -#include "area_obk/obk.h" -MapConfig obk_maps[] = { - { MAP(obk_01), .songVariation = 1, .sfxReverb = 2 }, - { MAP(obk_02), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(obk_03), .songVariation = 1, .sfxReverb = 1 }, - { MAP(obk_04), .songVariation = 1, .sfxReverb = 1 }, - { MAP(obk_05), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(obk_06), .songVariation = 1, .sfxReverb = 1 }, - { MAP(obk_07), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(obk_08), .bgName = "obk_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(obk_09), .songVariation = 1, .sfxReverb = 2 }, -}; - -/// Gusty Gulch -#include "area_arn/arn.h" -MapConfig arn_maps[] = { - { MAP(arn_02), .bgName = "arn_bg" }, - { MAP(arn_03), .bgName = "arn_bg" }, - { MAP(arn_04), .bgName = "arn_bg" }, - { MAP(arn_05), .bgName = "arn_bg" }, - { MAP(arn_07), .bgName = "arn_bg" }, - { MAP(arn_08), .songVariation = 1, .sfxReverb = 1 }, - { MAP(arn_09), .songVariation = 1, .sfxReverb = 1 }, - { MAP(arn_10), .songVariation = 1, .sfxReverb = 1 }, - { MAP(arn_11), .songVariation = 1, .sfxReverb = 1 }, - { MAP(arn_12), .songVariation = 1, .sfxReverb = 1 }, - { MAP(arn_13), .songVariation = 1, .sfxReverb = 1 }, -}; - -/// Tubba Blubba's Castle -#include "area_dgb/dgb.h" -MapConfig dgb_maps[] = { - { MAP_WITH_INIT(dgb_00), .bgName = "arn_bg" }, - { MAP(dgb_01), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_02), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_03), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_04), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_05), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_06), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_07), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_08), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_09), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_10), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_11), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_12), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_13), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_14), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_15), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_16), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_17), .songVariation = 1, .sfxReverb = 2 }, - { MAP(dgb_18), .songVariation = 1, .sfxReverb = 2 }, -}; - -/// Mt. Lavalava -#include "area_kzn/kzn.h" -MapConfig kzn_maps[] = { - { MAP(kzn_01), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_02), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_03), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_04), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_05), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_06), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_07), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_08), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_09), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_10), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_11), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_17), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_18), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_19), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_20), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_22), .songVariation = 1, .sfxReverb = 2 }, - { MAP(kzn_23), .bgName = "yos_bg", .songVariation = 1, .sfxReverb = 2 }, -}; - -/// Flower Fields -#include "area_flo/flo.h" -MapConfig flo_maps[] = { - { MAP(flo_00), .bgName = "fla_bg" }, - { MAP(flo_03), .bgName = "fla_bg" }, - { MAP(flo_07), .bgName = "fla_bg" }, - { MAP(flo_08), .bgName = "fla_bg" }, - { MAP(flo_09), .bgName = "fla_bg" }, - { MAP(flo_10), .bgName = "fla_bg" }, - { MAP(flo_11), .bgName = "fla_bg" }, - { MAP(flo_12), .bgName = "fla_bg" }, - { MAP(flo_13), .bgName = "fla_bg" }, - { MAP(flo_14), .bgName = "fla_bg" }, - { MAP(flo_15), .bgName = "fla_bg" }, - { MAP(flo_16), .bgName = "fla_bg" }, - { MAP(flo_17), .bgName = "fla_bg" }, - { MAP(flo_18), .bgName = "fla_bg" }, - { MAP(flo_19), .bgName = "sra_bg" }, - { MAP(flo_21), .bgName = "sra_bg" }, - { MAP(flo_22), .bgName = "fla_bg" }, - { MAP(flo_23), .bgName = "fla_bg" }, - { MAP(flo_24), .bgName = "fla_bg" }, - { MAP(flo_25), .bgName = "fla_bg" }, -}; - -/// Shiver Region -#include "area_sam/sam.h" -MapConfig sam_maps[] = { - { MAP(sam_01), .bgName = "yki_bg" }, - { MAP(sam_02), .bgName = "yki_bg" }, - { MAP(sam_03), .bgName = "yki_bg" }, - { MAP(sam_04), .bgName = "yki_bg" }, - { MAP(sam_05), .bgName = "sam_bg" }, - { MAP(sam_06), .bgName = "sam_bg" }, - { MAP(sam_07), .bgName = "yki_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(sam_08), .bgName = "yki_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(sam_09), .bgName = "yki_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(sam_10), .bgName = "yki_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP(sam_11), .bgName = "yki_bg" }, - { MAP(sam_12), .bgName = "yki_bg", .songVariation = 1, .sfxReverb = 1 }, -}; - -/// Crystal Palace -#include "area_pra/pra.h" -MapConfig pra_maps[] = { - { MAP_WITH_INIT(pra_01), .bgName = "yki_bg", .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_02), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_03), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_04), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_05), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_06), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_09), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_10), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_11), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_12), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_13), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_14), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_15), .bgName = "yki_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_16), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_18), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_19), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_20), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_21), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_22), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_27), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_28), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_29), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_31), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_32), .bgName = "sam_bg", .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_33), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_34), .songVariation = 1, .sfxReverb = 1 }, - { MAP_WITH_INIT(pra_35), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_36), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_37), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_38), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_39), .songVariation = 1, .sfxReverb = 2 }, - { MAP_WITH_INIT(pra_40), .songVariation = 1, .sfxReverb = 1 }, -}; - -/// Shy Guy's Toy Box -#include "area_omo/omo.h" -MapConfig omo_maps[] = { - { MAP(omo_01), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_02), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_03), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_04), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_05), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_06), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_07), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_08), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_09), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_10), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_11), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_12), .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_13), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_14), .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_15), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_16), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, - { MAP(omo_17), .bgName = "omo_bg", .songVariation = 1, .sfxReverb = 2 }, -}; - -/// Debug -#include "area_tst/tst.h" -MapConfig tst_maps[] = { - { MAP(tst_01), .bgName = "nok_bg" }, - { MAP(tst_02), .bgName = "nok_bg" }, - { MAP(tst_03), .bgName = "nok_bg" }, - { MAP(tst_04), .bgName = "nok_bg" }, - { MAP(tst_10), .bgName = "nok_bg" }, - { MAP(tst_11), .bgName = "nok_bg" }, - { MAP(tst_12), .bgName = "nok_bg" }, - { MAP(tst_13), .bgName = "nok_bg" }, - { MAP(tst_20), .bgName = "nok_bg" }, -}; - -/// Credits -#include "area_end/end.h" -MapConfig end_maps[] = { - { MAP_WITH_INIT(end_00) }, - { MAP_WITH_INIT(end_01) }, -}; - -/// Toad Town Playroom -#include "area_mgm/mgm.h" -MapConfig mgm_maps[] = { - { MAP(mgm_00) }, - { MAP(mgm_01) }, - { MAP(mgm_02) }, - { MAP(mgm_03) }, -}; - /// Game Over #include "area_gv/gv.h" MapConfig gv_maps[] = { { MAP(gv_01) }, }; +#include "area_ham/ham.h" +MapConfig ham_maps[] = { + { MAP(ham_01), .bgName = "ham_bg"}, +}; + AreaConfig gAreas[] = { - AREA(kmr, "クリむら"), // kuri mura [kuribou village, Goomba Village] - AREA(mac, "まち"), // machi [town, Toad Town] - AREA(tik, "まちのちか"), // machi no chika [under the town, Toad Town Tunnels] - AREA(kgr, "くじらのなか"), // kujira no naka [inside the whale] - AREA(kkj, "きのこ城"), // kinoko shiro [mushroom castle, Princess Peach's Castle] - AREA(hos, "星ふる丘"), // hoshi furu oka [star fall hill, Shooting Star Summit] - AREA(nok, "ノコノコむら"), // nokonoko mura [nokonoko village, Koopa Village] - AREA(trd, "とりで"), // toride [fortress, Koopa Bros. Fortress] - AREA(iwa, "岩山"), // iwayama [rock mountain, Mt. Rugged] - AREA(dro, "カラカラタウン"), // karakara taun [dried up town, Dry Dry Outpost] - AREA(sbk, "カラカラ砂漠"), // karakara sabaku [dried up desert, Dry Dry Desert] - AREA(isk, "カラカラいせき"), // karakara iseki [dried up ruins, Dry Dry Ruins] - AREA(mim, "迷いの森"), // mayoi no mori [lost forest, Forever Forest] - AREA(obk, "テレサハウス"), // teresa hausu [teresa house, Boo's Mansion] - AREA(arn, "あれの"), // areno [wasteland, Gusty Gulch] - AREA(dgb, "ドガボンの城"), // dogabon no shiro [dogabon's castle, Tubba Blubba's Castle] - AREA(omo, "ヘイホーのおもちゃばこ"), // heiho no omochabako [heiho's toy box, Shy Guy's Toy Box] - AREA(jan, "ジャングル"), // janguru [jungle, Jade Jungle] - AREA(kzn, "火山"), // kazan [volcano, Mt. Lavalava] - AREA(flo, "フラワーランド"), // furawaa rando [flower land, Flower Fields] - AREA(sam, "さむいさむい村"), // samui samui mura [cold cold village, Shiver City] - AREA(pra, "パラレルきゅうでん"), // parareru kyuuden [parallel palace, Crystal Palace] - AREA(kpa, "クッパ城"), // kuppa shiro [koopa's castle, Bowser's Castle] - AREA(osr, "きのこ城そと"), // kinoko shiro soto [outside mushroom castle, Outside Peach's Castle] - AREA(end, "エンディング"), // endingu [Ending] - AREA(mgm, "ミニゲーム"), // minige-mu [Minigames] AREA(gv, "ゲームオーバー"), // ge-mu o-ba- [Game Over] - AREA(tst, "テストマップ"), // tesuto mappu [Test map] + AREA(ham, "Hammer Hills"), {}, }; diff --git a/src/world_map.xml b/src/world_map.xml index 571ea9f002f..8278e8b1cce 100644 --- a/src/world_map.xml +++ b/src/world_map.xml @@ -1,36 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/build/append_symbol_table.py b/tools/build/append_symbol_table.py new file mode 100644 index 00000000000..e696374e79a --- /dev/null +++ b/tools/build/append_symbol_table.py @@ -0,0 +1,128 @@ +import subprocess +from typing import List, Tuple +import struct +import sys +import io + + +SYMBOL_TABLE_PTR_ROM_ADDR = 0x18 + + +def readelf(elf: str) -> List[Tuple[int, str, str, int]]: + addr2name = {} # funcs + addr2line = {} # debug info + + process = subprocess.Popen(["mips-linux-gnu-readelf", "-s", elf, "--wide", "-wL"], stdout=subprocess.PIPE) + for line in io.TextIOWrapper(process.stdout, encoding="utf-8"): + parts = line.split() + + # 75082: 8048d5bc 44 FUNC GLOBAL DEFAULT 1845 func_802BC0B8_E2E9E8 + if len(parts) == 8 and parts[3] == "FUNC": + addr = int(parts[1], 16) + name = parts[-1] + if name.startswith("dead_"): + continue + addr2name[addr] = name + + # npc.c 120 0x8003910c x + elif len(parts) >= 4 and parts[2].startswith("0x"): + file_basename = parts[0] + if not file_basename.endswith(".c"): + continue + line_number = int(parts[1]) + addr = int(parts[2], 0) + addr2line[addr] = (file_basename, line_number) + + sorted_addr2name_addrs = sorted(addr2name.keys()) + + symbols = [] + for addr, (file_basename, line_number) in addr2line.items(): + if addr in addr2name: + symbols.append((addr, addr2name[addr], file_basename, line_number)) + else: + # find closest addr2name < addr + closest_addr = None + for a in sorted_addr2name_addrs: + if a < addr: + closest_addr = a + else: + break + if closest_addr is not None: + symbols.append((addr, addr2name[closest_addr], file_basename, line_number)) + + # non-debug builds + if len(symbols) == 0: + print("no debug symbols found, using func names only") + for addr, name in addr2name.items(): + symbols.append((addr, name, "", -1)) + + # sort by address + symbols.sort(key=lambda x: x[0]) + + return symbols + + +if __name__ == "__main__": + z64 = sys.argv[1] + if not z64.endswith(".z64"): + raise Exception("expected z64 as argument") + elf = z64.replace(".z64", ".elf") + + symbols = readelf(elf) + root_dir = subprocess.check_output(["git", "rev-parse", "--show-toplevel"]).decode("utf-8").strip() + + with open(z64, "r+b") as f: + # seek to end + f.seek(0, 2) + symbol_table_addr = f.tell() + print(f"ROM is 0x{symbol_table_addr:08X} bytes") + + # align + if symbol_table_addr % 0x10 != 0: + f.write(b"\x00" * (0x10 - (symbol_table_addr % 0x10))) + symbol_table_addr = f.tell() + + print(f"placing symbol table at ROM 0x{symbol_table_addr:08X}") + + # write header (see backtrace.h) + f.seek(symbol_table_addr) + f.write(b"SYMS") + f.write(struct.pack(">I", len(symbols))) + + sizeof_symbol = 4 + 4 + 4 # sizeof(Symbol) + strings_begin = f.tell() + sizeof_symbol * len(symbols) + strings = bytearray() + string_map = {} + + # for deduplication + def add_string(s: str): + global strings + if s not in string_map: + string_map[s] = strings_begin + len(strings) + strings += s.encode("utf-8") + strings += b"\0" + return string_map[s] + + for addr, name, file_basename, line_number in symbols: + # file_line = file_line.replace(root_dir + "/", "") + + f.write(struct.pack(">I", addr)) + f.write(struct.pack(">I", add_string(name))) + + if file_basename == "": + f.write(struct.pack(">I", 0)) + else: + f.write(struct.pack(">I", add_string(f"{file_basename}:{line_number}"))) # can make more efficient + + f.write(strings) + + # Pad to the nearest 16-byte alignment + padding_size = (f.tell() + 15) & ~15 + padding_bytes = b"\x00" * (padding_size - f.tell()) + f.write(padding_bytes) + + print("symbol table size: {} kib".format((f.tell() - symbol_table_addr) / 1024)) + + print(f"updating SYMBOL_TABLE_PTR_ROM_ADDR") + f.seek(SYMBOL_TABLE_PTR_ROM_ADDR) + f.write(struct.pack(">I", symbol_table_addr)) diff --git a/tools/build/configure.py b/tools/build/configure.py index 48e9c012872..e3e8ebcc506 100755 --- a/tools/build/configure.py +++ b/tools/build/configure.py @@ -11,8 +11,8 @@ from glob import glob # Configuration: -VERSIONS = ["us", "jp", "ique", "pal"] -DO_SHA1_CHECK = True +VERSIONS = ["us"] +DO_SHA1_CHECK = False # Paths: ROOT = Path(__file__).parent.parent.parent @@ -120,7 +120,8 @@ def write_ninja_rules( ninja.rule( "z64", description="rom $out", - command=f"{cross}objcopy $in $out -O binary{Z64_DEBUG} && {BUILD_TOOLS}/rom/n64crc $out", + command=f"{cross}objcopy $in $out -O binary{Z64_DEBUG} && python3 {BUILD_TOOLS}/append_symbol_table.py $out && {BUILD_TOOLS}/rom/n64crc $out", + pool="console", ) ninja.rule( @@ -148,7 +149,7 @@ def write_ninja_rules( ninja.rule( "cc_modern", description="gcc_modern $in", - command=f"bash -o pipefail -c '{cpp} {CPPFLAGS} {extra_cppflags} $cppflags -MD -MF $out.d $in -o - | $iconv | {ccache}{cc_modern} {cflags_modern} $cflags - -o $out'", + command=f"{ccache}{cc_modern} {cflags_modern} $cflags {CPPFLAGS} {extra_cppflags} $cppflags -MD -MF $out.d $in -o $out", depfile="$out.d", deps="gcc", ) @@ -512,6 +513,7 @@ def write_ninja( built_objects = set() generated_code = [] inc_img_bins = [] + precompiled_header_path = self.build_path() / "include" / "precompiled.h.gch" def build( object_paths: Union[Path, List[Path]], @@ -554,6 +556,8 @@ def build( elif task in ["cc", "cxx", "cc_modern"]: order_only.append("generated_code_" + self.version) order_only.append("inc_img_bins_" + self.version) + if task == "cc_modern" and object_paths[0].suffixes[-1] != ".gch": + implicit.append(str(precompiled_header_path)) inputs = self.resolve_src_paths(src_paths) for dir in asset_deps: @@ -630,6 +634,8 @@ def build( "actor_types", ) + build([precompiled_header_path], [Path("include/common.h")], "cc_modern") + import splat # Build objects @@ -679,7 +685,9 @@ def build( if modern_gcc: task = "cc_modern" - if seg.name.endswith("osFlash"): + if entry.src_paths[0].suffixes[-1] == ".s": + task = "as" + elif seg.name.endswith("osFlash"): task = "cc_ido" elif "gcc_272" in cflags: task = "cc_272" @@ -857,6 +865,8 @@ def build( }, ) build(entry.object_path, [bin_path], "bin") + elif seg.type == "a": + build(entry.object_path, entry.src_paths, "cp") elif seg.type == "pm_sprites": assert entry.object_path is not None @@ -1053,6 +1063,13 @@ def build( elif name.endswith("_tex"): compress = False tex_dir = path.parent / name + + # TEMP: star rod compatiblity + old_tex_dir = path.parent.parent / name + if self.resolve_asset_path(old_tex_dir).is_dir(): + tex_dir = old_tex_dir + print(f"using old tex dir for {name}") + build( bin_path, [tex_dir, path.parent / (name + ".json")], @@ -1061,11 +1078,20 @@ def build( "tex_name": name, "asset_stack": ",".join(self.asset_stack), }, - asset_deps=[f"mapfs/tex/{name}"], + asset_deps=[ + f"mapfs/tex/{name}", + f"mapfs/{name}" # TEMP: star rod compatiblity + ], ) elif name.endswith("_shape_built"): base_name = name[:-6] raw_bin_path = self.resolve_asset_path(f"assets/x/mapfs/geom/{base_name}.bin") + + # TEMP: star rod compatiblity + old_raw_bin_path = self.resolve_asset_path(f"assets/x/mapfs/{base_name}.bin") + if old_raw_bin_path.is_file(): + raw_bin_path = old_raw_bin_path + bin_path = bin_path.parent / "geom" / (base_name + ".bin") if c_maps: @@ -1092,6 +1118,17 @@ def build( compress = True out_dir = out_dir / "geom" + elif name.endswith("_hit"): + base_name = name + raw_bin_path = self.resolve_asset_path(f"assets/x/mapfs/geom/{base_name}.bin") + + # TEMP: star rod compatiblity + old_raw_bin_path = self.resolve_asset_path(f"assets/x/mapfs/{base_name}.bin") + if old_raw_bin_path.is_file(): + raw_bin_path = old_raw_bin_path + + bin_path = bin_path.parent / "geom" / (base_name + ".bin") + build(bin_path, [raw_bin_path], "cp") else: compress = True bin_path = path @@ -1273,28 +1310,32 @@ def make_current(self, ninja: ninja_syntax.Writer): ) parser.add_argument("-d", "--debug", action="store_true", help="Generate debugging information") parser.add_argument( - "-n", - "--non-matching", + "-N", + "--no-non-matching", action="store_true", help="Compile nonmatching code. Combine with --debug for more detailed debug info", ) parser.add_argument( - "--shift", + "--no-shift", action="store_true", help="Build a shiftable version of the game (non-matching)", ) parser.add_argument( - "--modern-gcc", + "--no-modern-gcc", action="store_true", help="Use modern GCC instead of the original compiler", ) - parser.add_argument("--ccache", action="store_true", help="Use ccache") + parser.add_argument("--no-ccache", action="store_true", help="Use ccache") parser.add_argument( "--c-maps", action="store_true", help="Convert map binaries to C as part of the build process", ) args = parser.parse_args() + args.shift = not args.no_shift + args.modern_gcc = not args.no_modern_gcc + args.non_matching = not args.no_non_matching + args.ccache = not args.no_ccache exec_shell(["make", "-C", str(ROOT / args.splat)]) diff --git a/tools/build/item_data.py b/tools/build/item_data.py index b6091e01a0c..de01caa5cfb 100644 --- a/tools/build/item_data.py +++ b/tools/build/item_data.py @@ -103,30 +103,22 @@ def generate_item_enum(fout: TextIOWrapper, items: List[ItemEntry]): fout.write("};\n") fout.write("\n") - # determine itemID ranges for each category - min_cat: Dict[str, int] = {} - max_cat: Dict[str, int] = {} + nconsumables = 0 + nbadges = 0 + nkeys = 0 for idx, item in enumerate(items): - cat = item.category - if cat not in min_cat: - min_cat[cat] = idx - max_cat[cat] = idx - - fout.write(f"#define ITEM_FIRST_KEY {item_enum[min_cat['KEY']]}\n") - fout.write(f"#define ITEM_LAST_KEY {item_enum[max_cat['KEY']]}\n") - fout.write(f"#define ITEM_FIRST_CONSUMABLE {item_enum[min_cat['CONSUMABLE']]}\n") - fout.write(f"#define ITEM_LAST_CONSUMABLE {item_enum[max_cat['CONSUMABLE']]}\n") - fout.write(f"#define ITEM_FIRST_BADGE {item_enum[min_cat['BADGE']]}\n") - fout.write(f"#define ITEM_LAST_BADGE {item_enum[max_cat['BADGE']]}\n") - fout.write("\n") - - fout.write("#define ITEM_NUM_KEYS (ITEM_LAST_KEY - ITEM_FIRST_KEY + 1)\n") - fout.write("#define ITEM_NUM_CONSUMABLES (ITEM_LAST_CONSUMABLE - ITEM_FIRST_CONSUMABLE + 1)\n") - fout.write("\n") - - fout.write("#define IS_ITEM(itemID) (itemID >= ITEM_FIRST_KEY && itemID <= ITEM_LAST_CONSUMABLE)\n") - fout.write("#define IS_BADGE(itemID) (itemID >= ITEM_FIRST_BADGE && itemID <= ITEM_LAST_BADGE)\n") + if ("ITEM_TYPE_FLAG_CONSUMABLE") in item.typeFlags: + nconsumables += 1 + if ("ITEM_TYPE_FLAG_BADGE") in item.typeFlags: + nbadges += 1 + if ("ITEM_TYPE_FLAG_KEY") in item.typeFlags: + nkeys += 1 + + fout.write(f"#define NUM_ITEMS {len(items)}\n") + fout.write(f"#define ITEM_NUM_CONSUMABLES {nconsumables}\n") + fout.write(f"#define ITEM_NUM_BADGES {nbadges}\n") + fout.write(f"#define ITEM_NUM_KEYS {nkeys}\n") fout.write("\n") fout.write("#endif // ITEM_ENUM_H\n") @@ -295,20 +287,6 @@ def generate_item_icon_tables(fout: TextIOWrapper, items: List[ItemEntry]): items = read_items_yaml(args.items_yaml) hud_scripts = read_hud_scripts_yaml(args.hes_yaml) - # sort items by category - CATEGORY_ORDER = { - "NONE": 0, - "GEAR": 1, - "QUEST": 2, - "KEY": 3, - "CONSUMABLE": 4, - "UNUSED": 5, - "BADGE": 6, - "UTILITY": 7, - "DUMMY": 1000, # must always be at the end of the item table - } - items.sort(key=lambda x: CATEGORY_ORDER.get(x.category, 999)) - with open(args.out_data, "w") as fout: fout.write("/* This file is auto-generated. Do not edit. */\n") fout.write('#include "common.h"\n') diff --git a/tools/build/mapfs/tex.py b/tools/build/mapfs/tex.py index f560a907a3f..f9d3f5a6572 100644 --- a/tools/build/mapfs/tex.py +++ b/tools/build/mapfs/tex.py @@ -24,6 +24,16 @@ ) +def get_img_path(tex_name: str, img_name: str, asset_stack: Tuple[Path, ...]) -> Path: + # TEMP: star rod compatibility + try: + return get_asset_path(Path(f"mapfs/{tex_name}/{img_name}.png"), asset_stack) + except FileNotFoundError: + pass + + return get_asset_path(Path(f"mapfs/tex/{tex_name}/{img_name}.png"), asset_stack) + + # read texture properties from dictionary and load images def img_from_json(json_data, tex_name: str, asset_stack: Tuple[Path, ...]) -> TexImage: ret = TexImage() @@ -44,7 +54,7 @@ def img_from_json(json_data, tex_name: str, asset_stack: Tuple[Path, ...]) -> Te (ret.main_fmt, ret.main_depth) = get_format_code(main_fmt_name) # read main image - img_path = get_asset_path(Path(f"mapfs/tex/{tex_name}/{ret.img_name}.png"), asset_stack) + img_path = get_img_path(tex_name, ret.img_name, asset_stack) if not os.path.isfile(img_path): raise Exception(f"Could not find main image for texture: {ret.img_name}") ( @@ -73,7 +83,7 @@ def img_from_json(json_data, tex_name: str, asset_stack: Tuple[Path, ...]) -> Te ret.extra_tiles = TILES_INDEPENDENT_AUX # read aux image - img_path = get_asset_path(Path(f"mapfs/tex/{tex_name}/{ret.img_name}_AUX.png"), asset_stack) + img_path = get_img_path(tex_name, f"{ret.img_name}_AUX", asset_stack) if not os.path.isfile(img_path): raise Exception(f"Could not find AUX image for texture: {ret.img_name}") ( @@ -110,8 +120,8 @@ def img_from_json(json_data, tex_name: str, asset_stack: Tuple[Path, ...]) -> Te mmw = ret.main_width // divisor mmh = ret.main_height // divisor - img_path = get_asset_path( - Path(f"mapfs/tex/{tex_name}/{ret.img_name}_MM{mipmap_idx}.png"), + img_path = get_img_path( + tex_name, f"{ret.img_name}_MM{mipmap_idx}", asset_stack, ) if not os.path.isfile(img_path): @@ -166,6 +176,8 @@ def build(out_path: Path, tex_name: str, asset_stack: Tuple[Path, ...], endian: img = img_from_json(img_data, tex_name, asset_stack) img.add_bytes(tex_name, out_bytes) + out_bytes += "end_of_textures".encode("ascii") + with open(out_path, "wb") as out_bin: out_bin.write(out_bytes) diff --git a/tools/build/move_data.py b/tools/build/move_data.py index d1cae9ed255..ad6ed294b18 100644 --- a/tools/build/move_data.py +++ b/tools/build/move_data.py @@ -83,6 +83,9 @@ def generate_move_enum(fout: TextIOWrapper, moves: List[MoveEntry]): fout.write("};\n") fout.write("\n") + fout.write(f"#define NUM_MOVES {len(moves)}\n") + fout.write("\n") + fout.write("#define STAR_POWER_INDEX(x) (x - MOVE_FOCUS)\n") fout.write("\n") diff --git a/tools/build/rom/n64crc.c b/tools/build/rom/n64crc.c index aff1210393b..dda25388be1 100644 --- a/tools/build/rom/n64crc.c +++ b/tools/build/rom/n64crc.c @@ -207,7 +207,7 @@ int main(int argc, char **argv) { Write32(buffer, N64_CRC1, crc[0]); fseek(fin, N64_CRC1, SEEK_SET); fwrite(&buffer[N64_CRC1], 1, 4, fin); - printf("(Bad, fixed)\n"); + printf("(Fixed)\n"); } printf("CRC 2: 0x%08X ", BYTES2LONG(&buffer[N64_CRC2])); @@ -218,7 +218,7 @@ int main(int argc, char **argv) { Write32(buffer, N64_CRC2, crc[1]); fseek(fin, N64_CRC2, SEEK_SET); fwrite(&buffer[N64_CRC2], 1, 4, fin); - printf("(Bad, fixed)\n"); + printf("(Fixed)\n"); } } diff --git a/tools/decomp_evt_gen.py b/tools/decomp_evt_gen.py new file mode 100644 index 00000000000..408680027c0 --- /dev/null +++ b/tools/decomp_evt_gen.py @@ -0,0 +1,124 @@ +from pathlib import Path + +def convert_expression(expr: str) -> str: + if expr.endswith("`"): + return expr[:-1] + + if expr.startswith("."): + if expr.startswith(".Anim") or expr.startswith(".AVar"): + # e.g. .Anim:KingBoo_Hide -> ANIM_KingBoo_Hide + key, val = expr[1:].split(":") + return key.upper() + "_" + val + elif expr.startswith(".Part"): + return expr.replace(".Part", "PRT").replace(":", "_").upper() + else: + return expr[1:].replace(":", "_").upper() + + if expr[0].isdigit(): + return "0x" + expr + + # TODO: pointers + if expr.startswith("$"): + return expr.replace("$", "EVT_PTR(") + ")" + + if expr.startswith("*Fixed["): + return expr.replace("*Fixed[", "EVT_FLOAT(").replace("]", ")") + + if expr.startswith("*Var"): + return expr.replace("*Var", "LVar") + + return expr + +def convert_script_line(line: str) -> str: + if line.strip().startswith("%"): + return line.replace("%", "//") + + # count leading whitespace + leading_whitespace = 0 + for c in line: + if c.isspace(): + leading_whitespace += 1 + elif c == "\t": + leading_whitespace += 4 + else: + break + + tokens = line.split() + + if not tokens: + return "" + + opcode = tokens.pop(0) + tokens = [convert_expression(t) for t in tokens if t != "(" and t != ")"] + + if opcode == "Call": + opcode = "EVT_CALL" + elif opcode == "Return": + opcode = "EVT_RETURN" + elif opcode == "End": + opcode = "EVT_END" + elif opcode == "Switch": + opcode = "EVT_SWITCH" + elif opcode == "EVT_END_SWITCH": + opcode = "EVT_END_SWITCH" + elif opcode == "Thread": + opcode = "EVT_THREAD" + elif opcode == "EndThread": + opcode = "EVT_END_THREAD" + elif opcode == "Set": + opcode = "EVT_SET" + elif opcode == "Add": + opcode = "EVT_ADD" + elif opcode == "Sub": + opcode = "EVT_SUB" + elif opcode == "Mul": + opcode = "EVT_MUL" + elif opcode == "Div": + opcode = "EVT_DIV" + elif opcode == "Mod": + opcode = "EVT_MOD" + elif opcode == "SetF": + opcode = "EVT_SETF" + + if tokens: + line = opcode + "(" + ", ".join(tokens) + ")" + else: + line = opcode + + # add leading whitespace + line = " " * leading_whitespace + line + + return line + +#['Call', 'SetAnimation', '(', '.Actor:Self', '.Part:KingBoo', '.Anim:KingBoo_Hide', ')'] +# Call SetAnimation ( .Actor:Self .Part:KingBoo .Anim:KingBoo_Hide ) +text = Path("TODO/Tatanga/Chikako.bpat").read_text() + +# Collect all scripts +scripts = {} # name -> script +cur_script_lines = [] +in_script = False +for line in text.splitlines(): + if line.startswith("#new:Script"): + name_of_script = line.split()[1] + cur_script_lines = [] + in_script = True + elif in_script: + if line.startswith("{"): + pass + elif line.startswith("}"): + scripts[name_of_script] = cur_script_lines + in_script = False + else: + cur_script_lines.append(line) + +# Convert scripts to decomp syntax +for name, lines in scripts.items(): + # make the name EVS + name = name.replace("$", "EVS_").replace("Script_", "") + + lines = [convert_script_line(line) for line in lines] + + print(f"EvtScript N({name}) = {{") + print("\n".join(lines)) + print("};") diff --git a/tools/migrate.py b/tools/migrate.py new file mode 100755 index 00000000000..71353f6b58c --- /dev/null +++ b/tools/migrate.py @@ -0,0 +1,785 @@ +#!/usr/bin/env python3 + +import xml.etree.ElementTree as ET +import os +import sys +import platform +import subprocess +import fileinput +import glob +import shutil + +MODEL = 0 +COLLIDER = 1 +ZONE = 2 + +entry_string_list = '' +entrance_structs_strings = '' + +model_string_list = '' +collider_string_list = '' +zone_string_list = '' + +actions_list = [] + +# ANSI escape codes for colors +class AnsiColor: + RESET = "\033[0m" + RED = "\033[91m" + GREEN = "\033[92m" + YELLOW = "\033[93m" + BLUE = "\033[94m" + MAGENTA = "\033[95m" + CYAN = "\033[96m" + WHITE = "\033[97m" + +def copy_png_files(source_directory, destination_directory, area_prefix): + # Ensure source and destination directories exist + if not os.path.exists(source_directory): + print(f"Error: Source directory '{source_directory}' does not exist.") + return + + if not os.path.exists(destination_directory): + print(f"Error: Destination directory '{destination_directory}' does not exist.") + return + + # Remove images from the destination directory if they exist + png_files_source = glob.glob(os.path.join(destination_directory, '*.png')) + + # Iterate through the list and delete each file + for i, file_path in enumerate(png_files_source, start=1): + try: + os.remove(file_path) + # Print loading indicator + print(f"\rDeleting: [{i}/{len(png_files_source)}]", end='', flush=True) + except Exception as e: + print(f"Error deleting {file_path}: {e}") + + # Print a new line after the progress indicator is complete + print("\rTextures in decomp deleted: [{} files deleted]".format(len(png_files_source))) + + source_files = os.listdir(source_directory) + + # Filter the list to include only .png files + png_files = [file for file in source_files if file.lower().endswith('.png')] + + # Copy each .png file to the destination directory + for i, png_file in enumerate(png_files, start=1): + source_path = os.path.join(source_directory, png_file) + + # Remove the prefix and 'tif.png' suffix from the file name + if "tif_MIPMAP_" in png_file: + destination_file_name = png_file.replace(area_prefix, '').replace('tif_MIPMAP_', '_MM') + elif "tif_AUX" in png_file: + destination_file_name = png_file.replace(area_prefix, '').replace('tif_AUX', '_AUX') + else: + destination_file_name = png_file.replace(area_prefix, '').replace('tif.png', '.png') + destination_path = os.path.join(destination_directory, destination_file_name) + + shutil.copy2(source_path, destination_path) + + # Print loading indicator + print(f"\rCopying: [{i}/{len(png_files)}]", end='', flush=True) + + # Print a new line after the progress indicator is complete + print("\rTextures copied to decomp complete: [{} files copied]".format(len(png_files))) + +def convert_hwrap_or_vwrap(prefix, imgLine): + hwrap_formats = ['mirror', 'clamp', 'repeat'] + converted_hwrap_formats = ['Mirror', 'Clamp', 'Repeat'] + format_text = imgLine.split(":")[1].strip() #split string into parts with ":" + for index, img_format_text in enumerate(hwrap_formats): + if img_format_text == format_text: + return " \"" + prefix + "\": \"" + converted_hwrap_formats[index] + "\"" + else: + print(f"Couldn't find matching hwrap or vwrap for {format_text}") + return '' + +def convert_img_block_to_json_string(imgLine): + formats = ['IA-4', 'IA-8', 'IA-16', 'CI-4', 'CI-8', 'RGBA-16', 'RGBA-32', 'I-4', 'I-8', 'shared'] #Star rod txa names + converted_formats = ['IA4', 'IA8', 'IA16', 'CI4', 'CI8', 'RGBA16', 'RGBA32', 'I4', 'I8', 'Shared'] + format_text = imgLine.split(":")[1].strip() #split string into parts with ":" + for index, img_format_text in enumerate(formats): + if img_format_text == format_text: + return " \"format\": \"" + converted_formats[index] + "\",\n" + else: + print(f"Couldn't find matching format for {format_text}") + return '' + +def parse_tex_block(lines, line_number): + search_text = 'img: ' + line_number += 2 + ret_string = '' + imgLine = lines[line_number] #points to start of img block + if search_text in imgLine: + line_number += 2 + imgLine = lines[line_number] + #print(f"imgLine at expected format: {imgLine}") + if "format: " not in imgLine: + print(f'Error, line doesn\'t contain "format: "') + print(f"String: {imgLine}\nLine Number: {line_number}") + return '' + + ret_string += convert_img_block_to_json_string(imgLine) + line_number += 1 + imgLine = lines[line_number] + # print(f"imgLine at expected hwrap: {imgLine}") + + if "hwrap: " not in imgLine: + # print(f'Error, line doesn\'t contain "hwrap: "') + # print(f"String: {imgLine}\nLine Number: {line_number}") + return '' + ret_string += convert_hwrap_or_vwrap("hwrap", imgLine) + ret_string += ",\n" + line_number += 1 + imgLine = lines[line_number] + # print(f"imgLine at expected vwrap: {imgLine}") + + if "vwrap: " not in imgLine: + # print(f'Error, line doesn\'t contain "hwrap: "') + # print(f"String: {imgLine}\nLine Number: {line_number}") + return '' + ret_string += convert_hwrap_or_vwrap("vwrap", imgLine) + ret_string += "\n" + ret_string += " },\n" + line_number += 2 + imgLine = lines[line_number] + + #print(f"Line before aux: {imgLine}") + + if "aux: " in imgLine: + ret_string += " \"aux\": {\n" + line_number += 2 + imgLine = lines[line_number] + #print(f"imgLine at expected format: {imgLine}") + if "format: " not in imgLine: + print(f'Error, line doesn\'t contain "format: "') + print(f"String: {imgLine}\nLine Number: {line_number}") + return '' + + ret_string += convert_img_block_to_json_string(imgLine) + line_number += 1 + imgLine = lines[line_number] + # print(f"imgLine at expected hwrap: {imgLine}") + + if "hwrap: " not in imgLine: + # print(f'Error, line doesn\'t contain "hwrap: "') + # print(f"String: {imgLine}\nLine Number: {line_number}") + return '' + ret_string += convert_hwrap_or_vwrap("hwrap", imgLine) + ret_string += ",\n" + line_number += 1 + imgLine = lines[line_number] + # print(f"imgLine at expected vwrap: {imgLine}") + + if "vwrap: " not in imgLine: + # print(f'Error, line doesn\'t contain "hwrap: "') + # print(f"String: {imgLine}\nLine Number: {line_number}") + return '' + ret_string += convert_hwrap_or_vwrap("vwrap", imgLine) + ret_string += "\n" + line_number += 2 + imgLine = lines[line_number] + ret_string += " },\n" + + if "mipmaps: " in imgLine: + ret_string += " \"hasMipmaps\": true,\n" + line_number += 1 + imgLine = lines[line_number] + + if "filter: " in imgLine: + ret_string += " \"filter\": true,\n" + + line_number += 1 + imgLine = lines[line_number] + + if "combine: " in imgLine: + + combine_split = imgLine.split(": ", 1) + if combine_split[1] == "8": + ret_string += " \"combine\": \"Multiply\"\n" + else: #else, it's zero + ret_string += " \"combine\": \"None\"\n" + + return ret_string + +def txa_to_json(input_text, area_prefix): + #parse line by line + search_text = "tex: " + lines = input_text.splitlines() + json_string = '[\n' + + # Search for the text in each line + for line_number, line in enumerate(lines): + if search_text in line: + #print(f"Found '{search_text}' on line {line_number}: {line}") + texture_name = line.split(": ", 1) + if texture_name[1].startswith(f"{area_prefix}"): + texture_name[1] = texture_name[1][4:] #remove area_ prefix + texture_name[1] = texture_name[1][:-3] #remove tif suffix + + json_string += " {\n" + json_string += " \"name\": \"" + texture_name[1] + "\",\n" + json_string += " \"main\": {\n" + + + #now search for img: block + json_string += parse_tex_block(lines, line_number) + + json_string += " },\n" + + json_string = json_string[:-2] #remove ,\n + json_string += "\n]\n" + return json_string + +def get_xml_tree(xml_file_path): + try: + tree = ET.parse(xml_file_path) + except FileNotFoundError: + print(f"File not found: {xml_file_path}") + sys.exit() + except ET.ParseError: + print(f"Error parsing XML file: {xml_file_path}") + sys.exit() + return tree + +def get_models_with_tex_panning(root, area_and_index): + models = [] + model_str = '' + + # Iterate over each element in the XML + for model_elem in root.findall(".//Model[@ver='2']"): + model_type = model_elem.get("type") + pan_unit = model_elem.get("panUnit") + id_str = model_elem.find("./MapObject").get("id") + + # # Check if the model has a panUnit attribute + if pan_unit is not None: + map_object_name = model_elem.find("./MapObject").get("name") + model_str += f" Call(SetTexPanner, MODEL_{area_and_index}_{map_object_name}, TEX_PANNER_{pan_unit})\n" + model_str +=f" Call(EnableTexPanning, MODEL_{area_and_index}_{map_object_name}, TRUE)\n\n" + #model_str += f"Model Type: {model_type}, ID: {id_str}, Pan Unit: {pan_unit}, Map Object Name: {map_object_name}\n" + #print(f"Model Type: {model_type}, Pan Unit: {pan_unit}, Map Object Name: {map_object_name}") + + return model_str + +def parse_texture_panners(root, filePath, area_and_index): + texPannerAmount = 0 + texPannerString = f'#include "{area_and_index}.h"\n#include "common.h"\n#include "world/common/atomic/TexturePan.inc.c"\n\nEvtScript N(EVS_StartTexPanners) = {{\n' + #stuff here for + texPannerString += get_models_with_tex_panning(root, area_and_index) + + for index, tex_panner in enumerate(root.iterfind(".//TexPanners/TexPanner")): + tex_id = tex_panner.get("id") + main_step = tex_panner.get("mainStep") + + if main_step is None: + # Skip if mainStep is not found + continue + texPannerAmount += 1 + # Convert the string to an integer + decimal_number = int(tex_id) + # Convert the decimal number to a one-digit hexadecimal string + hex_string = hex(decimal_number)[2:] + aux_step = tex_panner.get("auxStep", "0,0") + main_freq = tex_panner.get("mainFreq", "0,0") + aux_freq = tex_panner.get("auxFreq", "0,0") + + evt_thread_string_panner = f""" Thread + TEX_PAN_PARAMS_ID(TEX_PANNER_{hex_string}) + TEX_PAN_PARAMS_STEP({main_step},{aux_step}) + TEX_PAN_PARAMS_FREQ({main_freq},{aux_freq}) + TEX_PAN_PARAMS_INIT(0,0,0,0) + Exec(N(EVS_UpdateTexturePan)) + EndThread\n\n""" + texPannerString += evt_thread_string_panner + + if texPannerAmount == 0: + return texPannerAmount + + texPannerString += "\n Return\n End" + texPannerString += "\n};\n" + with open(filePath, 'w') as file: + file.write(texPannerString) + return texPannerAmount + + +def parse_entry_markers(root, area_and_index): + global entry_string_list + global entrance_structs_strings + entry_markers = root.findall(".//Marker[@type='Entry']") + if entry_markers: + # Extract ids, names, pos, and yaw, convert FFFFFFFF to -1 for ids, only for Entry markers + data = [(int(marker.find('MapObject').get('id'), 16) if marker.find('MapObject').get('id') != 'FFFFFFFF' else -1, + marker.find('MapObject').get('name'), + marker.get('pos'), + marker.get('yaw')) + for marker in entry_markers] + + # Sort the data based on ids + sorted_data = sorted(data, key=lambda x: x[0]) + + # Extract sorted ids, names, pos, and yaw + sorted_ids, sorted_names, sorted_pos, sorted_yaw = zip(*sorted_data) + + # print(sorted_ids) + # print(sorted_names) + + # write entry names to C file + for index, entry_name in enumerate(sorted_names): + pos = sorted_pos[index] + yaw = sorted_yaw[index] + entry_string_list += f"#define ENTRY_{area_and_index}_{entry_name} {index}\n" + entrance_structs_strings += f" [ENTRY_{area_and_index}_{entry_name}] {{ {pos}, {yaw} }},\n" + return 1 + else: + return 0 + + +def process_node(node, element_type, area_and_index): + global model_string_list + global collider_string_list + global zone_string_list + + name = node.attrib.get("name") + node_id = node.attrib.get("id") + if name is not None and node_id is not None: + if (element_type == MODEL): + model_string_list += f"#define MODEL_{area_and_index}_{name} 0x{node_id}\n" + elif (element_type == COLLIDER): + collider_string_list += f"#define COLLIDER_{area_and_index}_{name} 0x{node_id}\n" + elif (element_type == ZONE): + zone_string_list += f"#define ZONE_{area_and_index}_{name} 0x{node_id}\n" + + +def traverse_tree(element, element_type, area_and_index): + process_node(element, element_type, area_and_index) + for child in element: + traverse_tree(child, element_type, area_and_index) + +def generate_shape_file_header(root, area_and_index): #MODEL defines + shape_tree = root.find(".//ModelTree") + if shape_tree is not None: + traverse_tree(shape_tree, MODEL, area_and_index) + else: + print("ModelTree not found in the XML.") + sys.exit() + + +def generate_hit_file_header(root, area_and_index): #COLLIDER defines + collider_tree = root.find(".//ColliderTree") + if collider_tree is not None: + traverse_tree(collider_tree, COLLIDER, area_and_index) + else: + print("ColliderTree not found in the XML.") + sys.exit() + + zone_tree = root.find(".//ZoneTree") + if zone_tree is not None: + traverse_tree(zone_tree, ZONE, area_and_index) + else: + print("ColliderTree not found in the XML.") + sys.exit() + +def create_area_index_header_file(area_and_index): + start_h_file = f"""#include "common.h" +#include "message_ids.h" +#include "map.h" +#include "../{area_prefix}.h" +#include "mapfs/{area_and_index}_shape.h" +#include "mapfs/{area_and_index}_hit.h" +#define NAMESPACE {area_and_index}""" + return start_h_file + +def create_map_main_C_file(filePath, area_and_index, background_string, textures): + # TODO: might not need init + starting_main_c_file =f"""#include "{area_and_index}.h" +extern EvtScript N(EVS_Main); +extern char wMapHitName[0x18]; +extern char wMapShapeName[0x18]; +extern char wMapTexName[0x18]; +extern char wMapBgName[0x18]; +s32 N(map_init)(void) {{ + sprintf(wMapHitName, "%s", "{area_and_index}_hit"); + sprintf(wMapShapeName, "%s", "{area_and_index}_shape"); + {background_string} + sprintf(wMapTexName, "%s", "{textures}"); + return FALSE; +}} +EvtScript N(EVS_Main) = {{ + Set(GB_WorldLocation, LOCATION_TESTING) + Call(SetSpriteShading, SHADING_NONE) + EVT_SETUP_CAMERA_DEFAULT() + Return + End +}}; +""" + with open(f"{filePath}", 'w') as file: + file.writelines(starting_main_c_file) + actions_list.append(f"- {filePath} created") + +def try_create_directory(directory_path): + if not os.path.exists(directory_path): + try: + os.makedirs(directory_path) + #print(f"Directory '{directory_path}' created successfully.") + return 1 + except OSError as e: + print(f"Error creating directory '{directory_path}': {e}") + return 0 + else: + #print(f"Directory '{directory_path}' already exists.") + return 2 + + +def insert_line_after_string(file_path, target_string, string_to_insert, offset): + # Read the content of the file + with open(file_path, 'r') as file: + lines = file.readlines() + + # Search for the target string in the lines + for i, line in enumerate(lines): + if target_string in line: + lines.insert(i + offset, string_to_insert + '\n') + with open(file_path, 'w') as file: + file.writelines(lines) + return + + +def copy_shape_and_hit_to_decomp(file, bin_file): + #also assumes the script exist within the SR project root + hit_and_shape_dir = os.getcwd() + "/map/build" + file_path = os.path.join(hit_and_shape_dir, file) + if os.path.isfile(file_path): + actions_list.append(f"- {file_path} copied to {bin_file}") + #print(f"{file_path} copied to {bin_file}") + else: + #print(f"{file} not found") + #gen_collision_with_star_rod() + return + + command = [f'cp {file_path} ' f'{bin_file}'] + subprocess.run(command, shell=True) + +def search_string_in_file(file_path, target_string): + with open(file_path, 'r') as file: + # Read the entire file content + file_content = file.read() + + # Check if the target string exists in the file content + if target_string in file_content: + return True + else: + return False + +def create_map_header_file(filePath, area_and_index): + map_header_file_text = f"""#include "common.h" +#include "message_ids.h" +#include "map.h" +#include "../{area_and_index[:3]}.h" +#include "mapfs/{area_and_index}_shape.h" +#include "mapfs/{area_and_index}_hit.h" +#define NAMESPACE {area_and_index} + """ + + with open(filePath, 'w') as file: + file.writelines(map_header_file_text) + actions_list.append(f"- Header file for {area_and_index} generated") + +def create_entrance_file(filePath, area_and_index, entrance_structs_strings): + start_entrance_file = f"""#include "{area_and_index}.h" +extern EvtScript N(EVS_Main); +EntryList N(Entrances) = {{ +{entrance_structs_strings}}}; +MapSettings N(settings) = {{ + .main = &N(EVS_Main), + .entryList = &N(Entrances), + .entryCount = ENTRY_COUNT(N(Entrances)), + .background = &gBackgroundImage, + .tattle = {{ MSG_NONE }}, +}};""" + with open(filePath, 'w') as file: + file.writelines(start_entrance_file) + actions_list.append(f"- Entrance file for {area_and_index} generated") + +def write_npcs_file(root): + for marker in root.findall(".//Marker"): + marker_type = marker.get("type") + if marker_type != "NPC": + continue + pos = marker.get("pos") + yaw = marker.get("yaw") + + map_object = marker.find("MapObject") + name = map_object.get("name") + identifier = map_object.get("id") + + print(f"Type: {marker_type}, Pos: {pos}, Yaw: {yaw}, Name: {name}, ID: {identifier}") + # entry_markers = root.findall(".//Marker[@type='NPC']") + + + +def migrate_map_xml(xml_file_path, do_textures=False): + print(f"Processing {xml_file_path}") + tree = get_xml_tree(xml_file_path) + + #get root components + root = tree.getroot() + author = root.get('author') + background = root.get('background') + textures = root.get('textures') + + if background is None: + background_string = '' + print(f"Author: {author}\nTextures: {textures}") + else: + background_string = f'sprintf(wMapBgName, "%s", "{background}");' + print(f"Author: {author}\nBackground: {background}\nTextures: {textures}") + + area_and_index = os.path.basename(xml_file_path).split('.')[0] + + #compare area prefix and texture archive prefix + if textures[:4] != area_and_index[:4]: + print(f"Texture archive area ({textures[:4]}) does not match map area ({area_and_index[:4]})") + user_input = input("Do you want to continue? (yes/no): ").lower() + if user_input != 'yes' and user_input != 'y': + sys.exit() + + #search for texture archive and add it to yaml if it doesn't exist + map_data_yaml_path = decomp_project_path + "tools/splat_ext/map_data.yaml" + + if not os.path.isfile(map_data_yaml_path): + map_data_yaml_path = decomp_project_path + "tools/splat_ext/mapfs.yaml" + print(map_data_yaml_path) + if not os.path.isfile(map_data_yaml_path): + print("Unable to find map_data.yaml or mapfs.yaml") + sys.exit() + + + if search_string_in_file(map_data_yaml_path, f'- {area_and_index[:3]}_tex') == False: + #def insert_line_after_string(file_path, target_string, string_to_insert, offset): + insert_line_after_string(map_data_yaml_path, '- mac_tex', f'- {area_and_index[:3]}_tex', 0) + actions_list.append(f"- {area_and_index[:3]}_tex added to {map_data_yaml_path}") + + #search for shape file and add to yaml if it doesn't exist + if search_string_in_file(map_data_yaml_path, f"- {area_and_index}_shape") == False: + #insert at top of file + insert_line_after_string(map_data_yaml_path, '-', f'- {area_and_index}_shape', 0) + actions_list.append(f"- {area_and_index}_shape added to {map_data_yaml_path}") + + #search for hit file and add to yaml if it doesn't exist + if search_string_in_file(map_data_yaml_path, f"- {area_and_index}_hit") == False: + #insert at top of file + insert_line_after_string(map_data_yaml_path, '-', f'- {area_and_index}_hit', 0) + actions_list.append(f"- {area_and_index}_hit added to {map_data_yaml_path}") + + + #first, parse entries + if parse_entry_markers(root, area_and_index) == 0: + print("No Entry Markers found") + + #now parse models and create a header file with all models and their corresponding IDs + generate_shape_file_header(root, area_and_index) + + #do the same for colliders + generate_hit_file_header(root, area_and_index) + + #copy decrypted shape and hit files to decomp + copy_shape_and_hit_to_decomp(area_and_index + "_shape_dec", f"{geom_path}{area_and_index}_shape.bin") + copy_shape_and_hit_to_decomp(area_and_index + "_hit_dec", f"{geom_path}{area_and_index}_hit.bin") + + shape_file_path = f'{area_include_path}{area_and_index}_shape.h' + with open(shape_file_path, "w") as file: + file.write(model_string_list) + actions_list.append(f"- {shape_file_path} created successfully") + #print(f'File "{shape_file_path}" written successfully') + + hit_file_path = f'{area_include_path}{area_and_index}_hit.h' + with open(hit_file_path, "w") as file: + combined_string_list = collider_string_list + "\n\n" + zone_string_list + "\n\n" + entry_string_list + file.write(combined_string_list) + actions_list.append(f"- {hit_file_path} created successfully") + #print(f'File "{hit_file_path}" written successfully') + + world_area_folder_string = f"{world_directory}/area_{area_and_index[:3]}" + world_area_and_index_folder_string = f"{world_directory}/area_{area_and_index[:3]}/{area_and_index}" + area_header_file = world_area_folder_string + f"/{area_and_index[:3]}.h" + + #if area header file doesn't exist, create it + if try_create_directory(world_area_folder_string) == 1: + #did create `area_zzz`, so we now create a header file for the area + header_string = f"""#ifndef _WORLD_AREA_{area_and_index[:4].upper()}{area_and_index[:4].upper()}H_\n#define _WORLD_AREA_{area_and_index[:4].upper()}{area_and_index[:4].upper()}H_\n\n#endif""" + with open(area_header_file, 'w') as file: + file.write(header_string) + actions_list.append(f"- {area_header_file} created successfully") + + try_create_directory(world_area_and_index_folder_string) + map_settings_string = f"extern MapSettings {area_and_index}_settings;\n" + + #check if current map settings exist in area file. if not, add it + if search_string_in_file(area_header_file, map_settings_string) == False: + target_string = f"#define _WORLD_AREA_{area_and_index[:4].upper()}{area_and_index[:4].upper()}H_" + insert_line_after_string(area_header_file, target_string, f"s32 {area_and_index}_map_init(void);", 2) + insert_line_after_string(area_header_file, target_string, map_settings_string, 3) + actions_list.append(f"- MapSettings written to {area_and_index[:3]}.h") + + #edit world.c to add map if it doesn't exist, but first, check if area maps exist at all + world_c_file = world_directory + "/world.c" + area_maps_string = f"MapConfig {area_and_index[:4]}maps[] = {{" + area_config_string = "AreaConfig gAreas[] = {" + map_config_string = f"""\n#include "area_{area_and_index[:3]}/{area_and_index[:3]}.h"\nMapConfig {area_and_index[:3]}_maps[] = {{\n}};""" + + if search_string_in_file(world_c_file, area_maps_string) == False: + #map area not found. add it to world.c + if search_string_in_file(world_c_file, area_config_string) == True: + insert_line_after_string(world_c_file, area_config_string, map_config_string, -1) + actions_list.append(f"Inserted following text to world.c:{AnsiColor.GREEN}{map_config_string}{AnsiColor.RESET}\n") + else: + print("Error, couldn't find gAreas in world.c") + + map_in_area_string = f" {{ MAP_WITH_INIT({area_and_index}), .bgName = \"{background}\"}}," + if search_string_in_file(world_c_file, f"MAP_WITH_INIT({area_and_index})") == False: + insert_line_after_string(world_c_file, area_maps_string, map_in_area_string, 1) + actions_list.append(f"Inserted following text to world.c:{map_in_area_string}\n") + #area_maps_string + + area_in_gAreas_string = f"AREA({area_and_index[:3]}," + #check if we need to add area to gAreas + if search_string_in_file(world_c_file, map_in_area_string) == True: + if search_string_in_file(world_c_file, f"AREA({area_and_index[:3]},") == False: + insert_line_after_string(world_c_file, "AREA(tst", f' AREA({area_and_index[:3]}, \"テストマップ\"),', 0) + actions_list.append(f"Inserted following to world.c: AREA({area_and_index[:3]}, \"テストマップ\"),\n") + + + area_index_main_folder_path = f"{world_directory}/area_{area_and_index[:3]}/{area_and_index}/{area_and_index}" + area_index_main_c_file_path = f"{area_index_main_folder_path}_main.c" + area_index_entrance_file_path = f"{area_index_main_folder_path}_entrances.c" + area_map_header_file_path = f"{area_index_main_folder_path}.h" + if not os.path.exists(area_index_main_c_file_path): + create_map_main_C_file(area_index_main_c_file_path, area_and_index, background_string, textures) + actions_list.append(f"- Created file {area_index_main_c_file_path}") + + if not os.path.exists(area_index_main_folder_path + ".h"): + create_map_header_file(area_map_header_file_path, area_and_index) + actions_list.append(f"- Created file {area_map_header_file_path}") + + + if not os.path.exists(area_index_main_c_file_path): + create_map_main_C_file(area_index_main_c_file_path, area_and_index, background_string, textures) + actions_list.append(f"- Created file {area_index_main_c_file_path}") + + + #def create_entrance_file(filePath, area_and_index, entrance_structs_strings, background_string2): + create_entrance_file(area_index_entrance_file_path, area_and_index, entrance_structs_strings) + + if do_textures: + #copy texture archive to decomp + tex_png_in_directory = f"image/texture/{textures}" + tex_png_out_decomp = f"{decomp_project_path}{asset_stack_path}mapfs/tex/{textures}" + copy_png_files(tex_png_in_directory, tex_png_out_decomp, area_and_index[:4]) + + input_file_path = f'image/texture/{textures}.txa' + output_file_path = f'{asset_stack_path}mapfs/tex/{textures}.json' + + # Read the content of the input file + with open(input_file_path, 'r') as file: + input_text = file.read() + output_json = txa_to_json(input_text, area_and_index[:4]) + + tex_path = os.path.expanduser(decomp_project_path + f"{asset_stack_path}mapfs/tex/{textures}.json") + print(tex_path) + + with open(tex_path, "w") as file: + file.write(output_json) + + tex_panner_amount_in_map = 0 + # Iterate through model 'panUnit' and if all are None, dont create tex_panners.c file + for model_elem in root.findall(".//Model[@ver='2']"): + pan_unit = model_elem.get("panUnit") + # # Check if the model has a panUnit attribute + if pan_unit is not None: + tex_panner_amount_in_map = parse_texture_panners(root, world_area_and_index_folder_string + f"/{area_and_index}_tex_panners.c", area_and_index) + break + + #write_npcs_file(root) + + for text in actions_list: + print(f"{AnsiColor.CYAN}{text}{AnsiColor.RESET}") + + + print(f"{AnsiColor.BLUE}Be sure to add the following to splat.yaml{AnsiColor.RESET}") + string_to_add_to_splat_yaml = f"""{AnsiColor.GREEN} - name: {area_and_index} + dir: world/area_{area_and_index[:3]}/{area_and_index} + type: code + vram_class: map + subsegments: + - [auto, c, {area_and_index}_main] + - [auto, c, {area_and_index}_entrances]{AnsiColor.RESET} + """ + if tex_panner_amount_in_map != 0: + string_to_add_to_splat_yaml += f"{AnsiColor.GREEN}- [auto, c, {area_and_index}_tex_panners]{AnsiColor.RESET}" + print(string_to_add_to_splat_yaml) + + +def look_for_map_xml(map_name: str) -> str: + # standard star rod + p = f"{star_rod_project_path}/map/save/{map_name}.xml" + if os.path.exists(p): + return p + + # fucked up star rod + p = f"{star_rod_project_path}/map/src/{map_name}.xml" + if os.path.exists(p): + return p + + # mysterious old decomp repo + p = f"{star_rod_project_path}/assets/wua/mapfs/{map_name}.xml" + if os.path.exists(p): + return p + + raise FileNotFoundError(f"Map XML file not found for {map_name}") + + +if __name__ == "__main__": + os_name = platform.system() + + if len(sys.argv) < 2: + print(f"Usage: {sys.argv[0]} [map names...]") + sys.exit() + + decomp_project_path = "./" + asset_stack_path = "assets/wua/" + area_include_path = decomp_project_path + "include/mapfs/" + geom_path = decomp_project_path + f"{asset_stack_path}mapfs/geom/" + world_directory = decomp_project_path + "src/world" + star_rod_project_path = sys.argv[1] + map_names = sys.argv[2:] + + if not os.path.exists(star_rod_project_path): + print(f"Star Rod project not found at {star_rod_project_path}") + sys.exit() + + if os_name == "Windows": + print("This program is meant for use in WSL on windows") + print(f"In powershell, type {AnsiColor.RED}wsl{AnsiColor.RESET} and hit enter to swap to WSL") + sys.exit() + elif os_name == "Linux": + pass + else: + print("This program is meant for use in WSL on windows") + print(f"In powershell, type {AnsiColor.RED}wsl{AnsiColor.RESET} and hit enter to swap to WSL") + sys.exit() + if not os.path.exists(decomp_project_path): + print(f"Decomp project not found at {decomp_project_path}") + sys.exit() + + if len(map_names) > 0: + for map_name in map_names: + map_xml_file = look_for_map_xml(map_name) + migrate_map_xml(map_xml_file) + else: + from glob import glob + # Get all the XML files in the star rod project + xml_files = glob(f"{star_rod_project_path}/map/save/*.xml") + for xml_file in xml_files: + migrate_map_xml(xml_file) diff --git a/tools/splat_ext/a.py b/tools/splat_ext/a.py new file mode 100644 index 00000000000..d13e8e1d276 --- /dev/null +++ b/tools/splat_ext/a.py @@ -0,0 +1,18 @@ +from splat.segtypes.n64.segment import N64Segment +from splat.segtypes.linker_entry import LinkerEntry +from splat.util import options + + +class N64SegA(N64Segment): + def get_linker_entries(self): + path = options.opts.asset_path / self.dir / (self.name + ".a") + + return [ + LinkerEntry( + self, + [path], + path, + ".", + ".", + ), + ] diff --git a/tools/splat_ext/mapfs.yaml b/tools/splat_ext/mapfs.yaml index 9101d15b8fe..1a92f23e1e2 100644 --- a/tools/splat_ext/mapfs.yaml +++ b/tools/splat_ext/mapfs.yaml @@ -1,1009 +1,14 @@ -- dro_01_shape -- dro_01_hit -- dro_02_shape -- dro_02_hit -- hos_00_shape -- hos_00_hit -- hos_01_shape -- hos_01_hit -- hos_02_shape -- hos_02_hit -- hos_03_shape -- hos_03_hit -- hos_04_shape -- hos_04_hit -- hos_05_shape -- hos_05_hit -- hos_06_shape -- hos_06_hit -- hos_10_shape -- hos_10_hit -- hos_20_shape -- hos_20_hit -- isk_01_shape -- isk_01_hit -- isk_02_shape -- isk_02_hit -- isk_03_shape -- isk_03_hit -- isk_04_shape -- isk_04_hit -- isk_05_shape -- isk_05_hit -- isk_06_shape -- isk_06_hit -- isk_07_shape -- isk_07_hit -- isk_08_shape -- isk_08_hit -- isk_09_shape -- isk_09_hit -- isk_10_shape -- isk_10_hit -- isk_11_shape -- isk_11_hit -- isk_12_shape -- isk_12_hit -- isk_13_shape -- isk_13_hit -- isk_14_shape -- isk_14_hit -- isk_16_shape -- isk_16_hit -- isk_18_shape -- isk_18_hit -- isk_19_shape -- isk_19_hit -- iwa_00_shape -- iwa_00_hit -- iwa_01_shape -- iwa_01_hit -- iwa_02_shape -- iwa_02_hit -- iwa_03_shape -- iwa_03_hit -- iwa_04_shape -- iwa_04_hit -- iwa_10_shape -- iwa_10_hit -- iwa_11_shape -- iwa_11_hit -- osr_00_shape -- osr_00_hit -- osr_01_shape -- osr_01_hit -- osr_02_shape -- osr_02_hit -- osr_03_shape -- osr_03_hit -- kkj_00_shape -- kkj_00_hit -- kkj_01_shape -- kkj_01_hit -- kkj_02_shape -- kkj_02_hit -- kkj_03_shape -- kkj_03_hit -- kkj_10_shape -- kkj_10_hit -- kkj_11_shape -- kkj_11_hit -- kkj_12_shape -- kkj_12_hit -- kkj_13_shape -- kkj_13_hit -- kkj_14_shape -- kkj_14_hit -- kkj_15_shape -- kkj_15_hit -- kkj_16_shape -- kkj_16_hit -- kkj_17_shape -- kkj_17_hit -- kkj_18_shape -- kkj_18_hit -- kkj_19_shape -- kkj_19_hit -- kkj_20_shape -- kkj_20_hit -- kkj_21_shape -- kkj_21_hit -- kkj_22_shape -- kkj_22_hit -- kkj_23_shape -- kkj_23_hit -- kkj_24_shape -- kkj_24_hit -- kkj_25_shape -- kkj_25_hit -- kkj_26_shape -- kkj_26_hit -- kkj_27_shape -- kkj_27_hit -- kkj_28_shape -- kkj_28_hit -- kkj_29_shape -- kkj_29_hit -- kmr_00_shape -- kmr_00_hit -- kmr_02_shape -- kmr_02_hit -- kmr_03_shape -- kmr_03_hit -- kmr_04_shape -- kmr_04_hit -- kmr_05_shape -- kmr_05_hit -- kmr_06_shape -- kmr_06_hit -- kmr_07_shape -- kmr_07_hit -- kmr_09_shape -- kmr_09_hit -- kmr_10_shape -- kmr_10_hit -- kmr_11_shape -- kmr_11_hit -- kmr_12_shape -- kmr_12_hit -- kmr_20_shape -- kmr_20_hit -- kmr_30_shape -- kmr_30_hit -- kpa_01_shape -- kpa_01_hit -- kpa_03_shape -- kpa_03_hit -- kpa_04_shape -- kpa_04_hit -- kpa_08_shape -- kpa_08_hit -- kpa_09_shape -- kpa_09_hit -- kpa_10_shape -- kpa_10_hit -- kpa_11_shape -- kpa_11_hit -- kpa_12_shape -- kpa_12_hit -- kpa_13_shape -- kpa_13_hit -- kpa_14_shape -- kpa_14_hit -- kpa_15_shape -- kpa_15_hit -- kpa_16_shape -- kpa_16_hit -- kpa_17_shape -- kpa_17_hit -- kpa_32_shape -- kpa_32_hit -- kpa_33_shape -- kpa_33_hit -- kpa_40_shape -- kpa_40_hit -- kpa_41_shape -- kpa_41_hit -- kpa_50_shape -- kpa_50_hit -- kpa_52_shape -- kpa_52_hit -- kpa_60_shape -- kpa_60_hit -- kpa_61_shape -- kpa_61_hit -- kpa_62_shape -- kpa_62_hit -- kpa_63_shape -- kpa_63_hit -- kpa_70_shape -- kpa_70_hit -- kpa_80_shape -- kpa_80_hit -- kpa_90_shape -- kpa_90_hit -- kpa_91_shape -- kpa_91_hit -- kpa_94_shape -- kpa_94_hit -- kpa_95_shape -- kpa_95_hit -- kpa_96_shape -- kpa_96_hit -- kpa_102_shape -- kpa_102_hit -- kpa_111_shape -- kpa_111_hit -- kpa_112_shape -- kpa_112_hit -- kpa_113_shape -- kpa_113_hit -- kpa_115_shape -- kpa_115_hit -- kpa_116_shape -- kpa_116_hit -- kpa_117_shape -- kpa_117_hit -- kpa_118_shape -- kpa_118_hit -- kpa_119_shape -- kpa_119_hit -- kpa_121_shape -- kpa_121_hit -- kpa_130_shape -- kpa_130_hit -- kpa_133_shape -- kpa_133_hit -- kpa_134_shape -- kpa_134_hit -- machi_shape -- machi_hit -- mac_00_shape -- mac_00_hit -- mac_01_shape -- mac_01_hit -- mac_02_shape -- mac_02_hit -- mac_03_shape -- mac_03_hit -- mac_04_shape -- mac_04_hit -- mac_05_shape -- mac_05_hit -- mac_06_shape -- mac_06_hit -- tik_01_shape -- tik_01_hit -- tik_02_shape -- tik_02_hit -- tik_03_shape -- tik_03_hit -- tik_04_shape -- tik_04_hit -- tik_05_shape -- tik_05_hit -- tik_06_shape -- tik_06_hit -- tik_07_shape -- tik_07_hit -- tik_08_shape -- tik_08_hit -- tik_09_shape -- tik_09_hit -- tik_10_shape -- tik_10_hit -- tik_12_shape -- tik_12_hit -- tik_14_shape -- tik_14_hit -- tik_15_shape -- tik_15_hit -- tik_17_shape -- tik_17_hit -- tik_18_shape -- tik_18_hit -- tik_19_shape -- tik_19_hit -- tik_20_shape -- tik_20_hit -- tik_21_shape -- tik_21_hit -- tik_22_shape -- tik_22_hit -- tik_23_shape -- tik_23_hit -- tik_25_shape -- tik_25_hit -- kgr_01_shape -- kgr_01_hit -- kgr_02_shape -- kgr_02_hit -- nok_01_shape -- nok_01_hit -- nok_02_shape -- nok_02_hit -- nok_03_shape -- nok_03_hit -- nok_04_shape -- nok_04_hit -- nok_11_shape -- nok_11_hit -- nok_12_shape -- nok_12_hit -- nok_13_shape -- nok_13_hit -- nok_14_shape -- nok_14_hit -- nok_15_shape -- nok_15_hit -- sbk_00_shape -- sbk_00_hit -- sbk_01_shape -- sbk_01_hit -- sbk_02_shape -- sbk_02_hit -- sbk_03_shape -- sbk_03_hit -- sbk_04_shape -- sbk_04_hit -- sbk_05_shape -- sbk_05_hit -- sbk_06_shape -- sbk_06_hit -- sbk_10_shape -- sbk_10_hit -- sbk_11_shape -- sbk_11_hit -- sbk_12_shape -- sbk_12_hit -- sbk_13_shape -- sbk_13_hit -- sbk_14_shape -- sbk_14_hit -- sbk_15_shape -- sbk_15_hit -- sbk_16_shape -- sbk_16_hit -- sbk_20_shape -- sbk_20_hit -- sbk_21_shape -- sbk_21_hit -- sbk_22_shape -- sbk_22_hit -- sbk_23_shape -- sbk_23_hit -- sbk_24_shape -- sbk_24_hit -- sbk_25_shape -- sbk_25_hit -- sbk_26_shape -- sbk_26_hit -- sbk_30_shape -- sbk_30_hit -- sbk_31_shape -- sbk_31_hit -- sbk_32_shape -- sbk_32_hit -- sbk_33_shape -- sbk_33_hit -- sbk_34_shape -- sbk_34_hit -- sbk_35_shape -- sbk_35_hit -- sbk_36_shape -- sbk_36_hit -- sbk_40_shape -- sbk_40_hit -- sbk_41_shape -- sbk_41_hit -- sbk_42_shape -- sbk_42_hit -- sbk_43_shape -- sbk_43_hit -- sbk_44_shape -- sbk_44_hit -- sbk_45_shape -- sbk_45_hit -- sbk_46_shape -- sbk_46_hit -- sbk_50_shape -- sbk_50_hit -- sbk_51_shape -- sbk_51_hit -- sbk_52_shape -- sbk_52_hit -- sbk_53_shape -- sbk_53_hit -- sbk_54_shape -- sbk_54_hit -- sbk_55_shape -- sbk_55_hit -- sbk_56_shape -- sbk_56_hit -- sbk_60_shape -- sbk_60_hit -- sbk_61_shape -- sbk_61_hit -- sbk_62_shape -- sbk_62_hit -- sbk_63_shape -- sbk_63_hit -- sbk_64_shape -- sbk_64_hit -- sbk_65_shape -- sbk_65_hit -- sbk_66_shape -- sbk_66_hit -- sbk_99_shape -- sbk_99_hit -- trd_00_shape -- trd_00_hit -- trd_01_shape -- trd_01_hit -- trd_02_shape -- trd_02_hit -- trd_03_shape -- trd_03_hit -- trd_04_shape -- trd_04_hit -- trd_05_shape -- trd_05_hit -- trd_06_shape -- trd_06_hit -- trd_07_shape -- trd_07_hit -- trd_08_shape -- trd_08_hit -- trd_09_shape -- trd_09_hit -- trd_10_shape -- trd_10_hit -- tst_01_shape -- tst_01_hit -- tst_02_shape -- tst_02_hit -- tst_03_shape -- tst_03_hit -- tst_04_shape -- tst_04_hit -- tst_10_shape -- tst_10_hit -- tst_11_shape -- tst_11_hit -- tst_12_shape -- tst_12_hit -- tst_13_shape -- tst_13_hit -- tst_20_shape -- tst_20_hit -- jan_00_shape -- jan_00_hit -- jan_01_shape -- jan_01_hit -- jan_02_shape -- jan_02_hit -- jan_03_shape -- jan_03_hit -- jan_04_shape -- jan_04_hit -- jan_05_shape -- jan_05_hit -- jan_06_shape -- jan_06_hit -- jan_07_shape -- jan_07_hit -- jan_08_shape -- jan_08_hit -- jan_09_shape -- jan_09_hit -- jan_10_shape -- jan_10_hit -- jan_11_shape -- jan_11_hit -- jan_12_shape -- jan_12_hit -- jan_13_shape -- jan_13_hit -- jan_14_shape -- jan_14_hit -- jan_15_shape -- jan_15_hit -- jan_16_shape -- jan_16_hit -- jan_17_shape -- jan_17_hit -- jan_18_shape -- jan_18_hit -- jan_19_shape -- jan_19_hit -- jan_22_shape -- jan_22_hit -- jan_23_shape -- jan_23_hit -- mim_01_shape -- mim_01_hit -- mim_02_shape -- mim_02_hit -- mim_03_shape -- mim_03_hit -- mim_04_shape -- mim_04_hit -- mim_05_shape -- mim_05_hit -- mim_06_shape -- mim_06_hit -- mim_07_shape -- mim_07_hit -- mim_08_shape -- mim_08_hit -- mim_09_shape -- mim_09_hit -- mim_10_shape -- mim_10_hit -- mim_11_shape -- mim_11_hit -- mim_12_shape -- mim_12_hit -- obk_01_shape -- obk_01_hit -- obk_02_shape -- obk_02_hit -- obk_03_shape -- obk_03_hit -- obk_04_shape -- obk_04_hit -- obk_05_shape -- obk_05_hit -- obk_06_shape -- obk_06_hit -- obk_07_shape -- obk_07_hit -- obk_08_shape -- obk_08_hit -- obk_09_shape -- obk_09_hit -- arn_02_shape -- arn_02_hit -- arn_03_shape -- arn_03_hit -- arn_04_shape -- arn_04_hit -- arn_05_shape -- arn_05_hit -- arn_07_shape -- arn_07_hit -- arn_08_shape -- arn_08_hit -- arn_09_shape -- arn_09_hit -- arn_10_shape -- arn_10_hit -- arn_11_shape -- arn_11_hit -- arn_12_shape -- arn_12_hit -- arn_13_shape -- arn_13_hit -- arn_20_shape -- arn_20_hit -- dgb_01_shape -- dgb_01_hit -- dgb_02_shape -- dgb_02_hit -- dgb_03_shape -- dgb_03_hit -- dgb_04_shape -- dgb_04_hit -- dgb_05_shape -- dgb_05_hit -- dgb_06_shape -- dgb_06_hit -- dgb_07_shape -- dgb_07_hit -- dgb_08_shape -- dgb_08_hit -- dgb_09_shape -- dgb_09_hit -- dgb_10_shape -- dgb_10_hit -- dgb_11_shape -- dgb_11_hit -- dgb_12_shape -- dgb_12_hit -- dgb_13_shape -- dgb_13_hit -- dgb_14_shape -- dgb_14_hit -- dgb_15_shape -- dgb_15_hit -- dgb_16_shape -- dgb_16_hit -- dgb_17_shape -- dgb_17_hit -- dgb_18_shape -- dgb_18_hit -- kzn_01_shape -- kzn_01_hit -- kzn_02_shape -- kzn_02_hit -- kzn_03_shape -- kzn_03_hit -- kzn_04_shape -- kzn_04_hit -- kzn_05_shape -- kzn_05_hit -- kzn_06_shape -- kzn_06_hit -- kzn_07_shape -- kzn_07_hit -- kzn_08_shape -- kzn_08_hit -- kzn_09_shape -- kzn_09_hit -- kzn_10_shape -- kzn_10_hit -- kzn_11_shape -- kzn_11_hit -- kzn_17_shape -- kzn_17_hit -- kzn_18_shape -- kzn_18_hit -- kzn_19_shape -- kzn_19_hit -- kzn_20_shape -- kzn_20_hit -- kzn_22_shape -- kzn_22_hit -- kzn_23_shape -- kzn_23_hit -- flo_00_shape -- flo_00_hit -- flo_03_shape -- flo_03_hit -- flo_07_shape -- flo_07_hit -- flo_08_shape -- flo_08_hit -- flo_09_shape -- flo_09_hit -- flo_10_shape -- flo_10_hit -- flo_11_shape -- flo_11_hit -- flo_12_shape -- flo_12_hit -- flo_13_shape -- flo_13_hit -- flo_14_shape -- flo_14_hit -- flo_15_shape -- flo_15_hit -- flo_16_shape -- flo_16_hit -- flo_17_shape -- flo_17_hit -- flo_18_shape -- flo_18_hit -- flo_19_shape -- flo_19_hit -- flo_21_shape -- flo_21_hit -- flo_22_shape -- flo_22_hit -- flo_23_shape -- flo_23_hit -- flo_24_shape -- flo_24_hit -- flo_25_shape -- flo_25_hit -- sam_01_shape -- sam_01_hit -- sam_02_shape -- sam_02_hit -- sam_03_shape -- sam_03_hit -- sam_04_shape -- sam_04_hit -- sam_05_shape -- sam_05_hit -- sam_06_shape -- sam_06_hit -- sam_07_shape -- sam_07_hit -- sam_08_shape -- sam_08_hit -- sam_09_shape -- sam_09_hit -- sam_10_shape -- sam_10_hit -- sam_11_shape -- sam_11_hit -- sam_12_shape -- sam_12_hit -- pra_01_shape -- pra_01_hit -- pra_02_shape -- pra_02_hit -- pra_03_shape -- pra_03_hit -- pra_04_shape -- pra_04_hit -- pra_05_shape -- pra_05_hit -- pra_09_shape -- pra_09_hit -- pra_10_shape -- pra_10_hit -- pra_11_shape -- pra_11_hit -- pra_13_shape -- pra_13_hit -- pra_14_shape -- pra_14_hit -- pra_15_shape -- pra_15_hit -- pra_16_shape -- pra_16_hit -- pra_18_shape -- pra_18_hit -- pra_19_shape -- pra_19_hit -- pra_20_shape -- pra_20_hit -- pra_21_shape -- pra_21_hit -- pra_22_shape -- pra_22_hit -- pra_29_shape -- pra_29_hit -- pra_31_shape -- pra_31_hit -- pra_32_shape -- pra_32_hit -- pra_33_shape -- pra_33_hit -- pra_34_shape -- pra_34_hit -- pra_35_shape -- pra_35_hit -- pra_40_shape -- pra_40_hit -- omo_01_shape -- omo_01_hit -- omo_02_shape -- omo_02_hit -- omo_03_shape -- omo_03_hit -- omo_04_shape -- omo_04_hit -- omo_05_shape -- omo_05_hit -- omo_06_shape -- omo_06_hit -- omo_07_shape -- omo_07_hit -- omo_08_shape -- omo_08_hit -- omo_09_shape -- omo_09_hit -- omo_10_shape -- omo_10_hit -- omo_11_shape -- omo_11_hit -- omo_12_shape -- omo_12_hit -- omo_13_shape -- omo_13_hit -- omo_14_shape -- omo_14_hit -- omo_15_shape -- omo_15_hit -- omo_16_shape -- omo_16_hit -- omo_17_shape -- omo_17_hit -- end_00_shape -- end_00_hit -- end_01_shape -- end_01_hit -- mgm_00_shape -- mgm_00_hit -- mgm_01_shape -- mgm_01_hit -- mgm_02_shape -- mgm_02_hit -- mgm_03_shape -- mgm_03_hit +# Chapter 1 +- ham_tex +- ham_bg +- ham_01_hit +- ham_01_shape +#- fof_tex +# Game Over +- gv__tex - gv_01_shape - gv_01_hit -- kmr_bt03_shape -- kmr_bt03_hit -- kmr_bt04_shape -- kmr_bt04_hit -- kmr_bt05_shape -- kmr_bt05_hit -- kmr_bt06_shape -- kmr_bt06_hit -- nok_bt01_shape -- nok_bt01_hit -- nok_bt02_shape -- nok_bt02_hit -- nok_bt03_shape -- nok_bt03_hit -- nok_bt04_shape -- nok_bt04_hit -- trd_bt00_shape -- trd_bt00_hit -- trd_bt01_shape -- trd_bt01_hit -- trd_bt02_shape -- trd_bt02_hit -- trd_bt03_shape -- trd_bt03_hit -- trd_bt04_shape -- trd_bt04_hit -- trd_bt05_shape -- trd_bt05_hit -- iwa_bt01_shape -- iwa_bt01_hit -- iwa_bt02_shape -- iwa_bt02_hit -- sbk_bt02_shape -- sbk_bt02_hit -- isk_bt01_shape -- isk_bt01_hit -- isk_bt02_shape -- isk_bt02_hit -- isk_bt03_shape -- isk_bt03_hit -- isk_bt04_shape -- isk_bt04_hit -- isk_bt05_shape -- isk_bt05_hit -- isk_bt06_shape -- isk_bt06_hit -- isk_bt07_shape -- isk_bt07_hit -- isk_bt08_shape -- isk_bt08_hit -- arn_bt01_shape -- arn_bt01_hit -- arn_bt02_shape -- arn_bt02_hit -- arn_bt03_shape -- arn_bt03_hit -- arn_bt04_shape -- arn_bt04_hit -- arn_bt05_shape -- arn_bt05_hit -- arn_bt06_shape -- arn_bt06_hit -- dgb_bt01_shape -- dgb_bt01_hit -- dgb_bt02_shape -- dgb_bt02_hit -- dgb_bt03_shape -- dgb_bt03_hit -- dgb_bt04_shape -- dgb_bt04_hit -- dgb_bt05_shape -- dgb_bt05_hit -- mim_bt01_shape -- mim_bt01_hit -- omo_bt01_shape -- omo_bt01_hit -- omo_bt02_shape -- omo_bt02_hit -- omo_bt03_shape -- omo_bt03_hit -- omo_bt04_shape -- omo_bt04_hit -- omo_bt05_shape -- omo_bt05_hit -- omo_bt06_shape -- omo_bt06_hit -- omo_bt07_shape -- omo_bt07_hit -- kgr_bt01_shape -- kgr_bt01_hit -- flo_bt01_shape -- flo_bt01_hit -- flo_bt02_shape -- flo_bt02_hit -- flo_bt03_shape -- flo_bt03_hit -- flo_bt04_shape -- flo_bt04_hit -- flo_bt05_shape -- flo_bt05_hit -- flo_bt06_shape -- flo_bt06_hit -- jan_bt00_shape -- jan_bt00_hit -- jan_bt01_shape -- jan_bt01_hit -- jan_bt02_shape -- jan_bt02_hit -- jan_bt03_shape -- jan_bt03_hit -- jan_bt04_shape -- jan_bt04_hit -- kzn_bt01_shape -- kzn_bt01_hit -- kzn_bt02_shape -- kzn_bt02_hit -- kzn_bt04_shape -- kzn_bt04_hit -- kzn_bt05_shape -- kzn_bt05_hit -- sam_bt01_shape -- sam_bt01_hit -- sam_bt02_shape -- sam_bt02_hit -- sam_bt03_shape -- sam_bt03_hit -- sam_bt04_shape -- sam_bt04_hit -- tik_bt01_shape -- tik_bt01_hit -- tik_bt02_shape -- tik_bt02_hit -- tik_bt03_shape -- tik_bt03_hit -- tik_bt04_shape -- tik_bt04_hit -- tik_bt05_shape -- tik_bt05_hit -- pra_bt01_shape -- pra_bt01_hit -- pra_bt02_shape -- pra_bt02_hit -- pra_bt03_shape -- pra_bt03_hit -- pra_bt04_shape -- pra_bt04_hit -- mac_bt01_shape -- mac_bt01_hit -- mac_bt02_shape -- mac_bt02_hit -- kpa_bt01_shape -- kpa_bt01_hit -- kpa_bt02_shape -- kpa_bt02_hit -- kpa_bt03_shape -- kpa_bt03_hit -- kpa_bt04_shape -- kpa_bt04_hit -- kpa_bt05_shape -- kpa_bt05_hit -- kpa_bt07_shape -- kpa_bt07_hit -- kpa_bt08_shape -- kpa_bt08_hit -- kpa_bt09_shape -- kpa_bt09_hit -- kpa_bt11_shape -- kpa_bt11_hit -- kpa_bt13_shape -- kpa_bt13_hit -- kpa_bt14_shape -- kpa_bt14_hit -- hos_bt01_shape -- hos_bt01_hit -- hos_bt02_shape -- hos_bt02_hit -- kkj_bt01_shape -- kkj_bt01_hit -- kkj_bt02_shape -- kkj_bt02_hit -- mac_tex -- tik_tex -- kgr_tex -- kmr_tex -- iwa_tex -- sbk_tex -- dro_tex -- isk_tex -- trd_tex -- nok_tex -- hos_tex -- kpa_tex -- osr_tex -- kkj_tex -- tst_tex -- jan_tex -- mim_tex -- obk_tex -- arn_tex -- dgb_tex -- kzn_tex -- flo_tex -- sam_tex -- pra_tex -- omo_tex -- end_tex -- mgm_tex -- gv__tex +# Vanilla backgrounds (TODO: do we need these?) - kmr_bg - nok_bg - name: sbk_bg @@ -1022,12 +27,14 @@ - yki_bg - sam_bg - kpa_bg +# Title - title_bg - name: title_data textures: - [0x10, ia8, copyright, 144, 32] - [0x1210, ia8, press_start, 128, 32] - [0x2210, rgba32, logotype, 200, 112] +# Party - party_kurio - party_kameki - party_pinki diff --git a/tools/splat_ext/pm_effect_shims.py b/tools/splat_ext/pm_effect_shims.py index ae5d35c320d..d2802441ba2 100644 --- a/tools/splat_ext/pm_effect_shims.py +++ b/tools/splat_ext/pm_effect_shims.py @@ -70,3 +70,6 @@ def get_linker_entries(self): ret.append(LinkerEntry(self, [self.shim_path(shim)], self.shim_path(shim), ".text", ".text")) return ret + + def cache(self): + return (super().cache(), self.shims) diff --git a/tools/splat_ext/pm_map_data.py b/tools/splat_ext/pm_map_data.py index 3d5e0908cc1..e3061feec53 100644 --- a/tools/splat_ext/pm_map_data.py +++ b/tools/splat_ext/pm_map_data.py @@ -130,7 +130,12 @@ def split(self, rom_bytes): if name == "end_data": break - assert self.files.get(name) is not None + if self.files.get(name) is None: + # TODO + # https://github.com/pmret/papermario/issues/1170 + self.warn(f"skipping unknown file {name}") + asset_idx += 1 + continue if offset == 0: path = None diff --git a/ver/ique/asm/bss2.s b/ver/ique/asm/bss2.s index fd1019a9270..0ba15dfb6d0 100644 --- a/ver/ique/asm/bss2.s +++ b/ver/ique/asm/bss2.s @@ -15,7 +15,7 @@ dlabel PulseStoneNotificationCallback dlabel D_8010C924 .space 4 -dlabel D_8010C928 +dlabel StepUpLastY .space 4 dlabel D_8010C92C @@ -84,7 +84,7 @@ dlabel JumpedOnSwitchZ dlabel PlayerRunStateTime .space 4 -dlabel D_8010C984 +dlabel StepUpLastYaw .space 4 dlabel D_8010C988 diff --git a/ver/ique/asm/bss2_2.s b/ver/ique/asm/bss2_2.s index dd58463ae89..7e31df700c6 100644 --- a/ver/ique/asm/bss2_2.s +++ b/ver/ique/asm/bss2_2.s @@ -51,10 +51,10 @@ dlabel NextPartnerCommand dlabel wPartner .space 4 -dlabel D_8010CFF0 +dlabel PrevTimeInAir .space 4 -dlabel D_8010CFF4 +dlabel LandedTimeInAir .space 4 dlabel D_8010CFF8 diff --git a/ver/jp/asm/bss2.s b/ver/jp/asm/bss2.s index fd1019a9270..0ba15dfb6d0 100644 --- a/ver/jp/asm/bss2.s +++ b/ver/jp/asm/bss2.s @@ -15,7 +15,7 @@ dlabel PulseStoneNotificationCallback dlabel D_8010C924 .space 4 -dlabel D_8010C928 +dlabel StepUpLastY .space 4 dlabel D_8010C92C @@ -84,7 +84,7 @@ dlabel JumpedOnSwitchZ dlabel PlayerRunStateTime .space 4 -dlabel D_8010C984 +dlabel StepUpLastYaw .space 4 dlabel D_8010C988 diff --git a/ver/jp/asm/bss2_2.s b/ver/jp/asm/bss2_2.s index dd58463ae89..7e31df700c6 100644 --- a/ver/jp/asm/bss2_2.s +++ b/ver/jp/asm/bss2_2.s @@ -51,10 +51,10 @@ dlabel NextPartnerCommand dlabel wPartner .space 4 -dlabel D_8010CFF0 +dlabel PrevTimeInAir .space 4 -dlabel D_8010CFF4 +dlabel LandedTimeInAir .space 4 dlabel D_8010CFF8 diff --git a/ver/pal/asm/bss2.s b/ver/pal/asm/bss2.s index fd1019a9270..0ba15dfb6d0 100644 --- a/ver/pal/asm/bss2.s +++ b/ver/pal/asm/bss2.s @@ -15,7 +15,7 @@ dlabel PulseStoneNotificationCallback dlabel D_8010C924 .space 4 -dlabel D_8010C928 +dlabel StepUpLastY .space 4 dlabel D_8010C92C @@ -84,7 +84,7 @@ dlabel JumpedOnSwitchZ dlabel PlayerRunStateTime .space 4 -dlabel D_8010C984 +dlabel StepUpLastYaw .space 4 dlabel D_8010C988 diff --git a/ver/pal/asm/bss2_2.s b/ver/pal/asm/bss2_2.s index dd58463ae89..7e31df700c6 100644 --- a/ver/pal/asm/bss2_2.s +++ b/ver/pal/asm/bss2_2.s @@ -51,10 +51,10 @@ dlabel NextPartnerCommand dlabel wPartner .space 4 -dlabel D_8010CFF0 +dlabel PrevTimeInAir .space 4 -dlabel D_8010CFF4 +dlabel LandedTimeInAir .space 4 dlabel D_8010CFF8 diff --git a/ver/us/asm/bss2.s b/ver/us/asm/bss2.s index fd1019a9270..0ba15dfb6d0 100644 --- a/ver/us/asm/bss2.s +++ b/ver/us/asm/bss2.s @@ -15,7 +15,7 @@ dlabel PulseStoneNotificationCallback dlabel D_8010C924 .space 4 -dlabel D_8010C928 +dlabel StepUpLastY .space 4 dlabel D_8010C92C @@ -84,7 +84,7 @@ dlabel JumpedOnSwitchZ dlabel PlayerRunStateTime .space 4 -dlabel D_8010C984 +dlabel StepUpLastYaw .space 4 dlabel D_8010C988 diff --git a/ver/us/asm/bss2_2.s b/ver/us/asm/bss2_2.s index dd58463ae89..7e31df700c6 100644 --- a/ver/us/asm/bss2_2.s +++ b/ver/us/asm/bss2_2.s @@ -51,10 +51,10 @@ dlabel NextPartnerCommand dlabel wPartner .space 4 -dlabel D_8010CFF0 +dlabel PrevTimeInAir .space 4 -dlabel D_8010CFF4 +dlabel LandedTimeInAir .space 4 dlabel D_8010CFF8 diff --git a/ver/us/splat.yaml b/ver/us/splat.yaml index f7f17dbab1e..f0e9594120e 100644 --- a/ver/us/splat.yaml +++ b/ver/us/splat.yaml @@ -47,8 +47,7 @@ vram_classes: - { name: filemenu_pause, vram: 0x80242BA0, vram_symbol: ui_images_filemenu_pause_VRAM_END } # World - - { name: world_model_anim, vram: 0x80234000, vram_symbol: Vine0Base } # ??? - - { name: map, vram: 0x80240000, follows_classes: [world_model_anim] } + - { name: map, vram: 0x80240000 } - { name: heaps2, vram: 0x80267FF0, follows_classes: [map] } - { name: world_script_api, vram: 0x80280000, follows_classes: [heaps2] } @@ -72,6 +71,9 @@ vram_classes: - [entity_model_anim, 0x00000000] - { name: dgb_01_smash_bridges, vram: 0x80200000, vram_symbol: D_80200000 } asset_stack: + - star_rod_build + - wua + - dx - us segments: - { name: header, type: header, start: 0x0000 } @@ -99,8 +101,13 @@ segments: - [auto, c, 43F0] - [auto, c, heap] - [auto, c, fio] + - [auto, c, dx/versioning] - [auto, c, curtains] - [auto, c, crash_screen] + - [auto, c, dx/utils] + - [auto, c, dx/backtrace] + - [auto, c, dx/debug_menu] + - [auto, c, dx/profiling] - [auto, c, os/nusys/nugfxtaskmgr, -fforce-addr] - [auto, c, os/nusys/nusimgr] - [auto, c, load_obfuscation_shims] @@ -335,6 +342,7 @@ segments: - [auto, c, os/strcpy, gcc_272 -O1] - [auto, c, os/strcmp, gcc_272 -O1] - [auto, c, os/memset, gcc_272 -O1] + - [auto, a, libgcc_vr4300] - [auto, hasm, os/decode_yay0] - [auto, c, os/osFlash] - [0x4AC90, pm_effect_loads, effect_loads] @@ -5937,789 +5945,13 @@ segments: #################### ### Battle Areas ### #################### - - dir: battle/area/kmr_part_1 + - dir: battle/area/ham type: code - start: 0x4309A0 vram_class: battle_area subalign: 4 subsegments: - [auto, c, area] - - [auto, c, actor/goomba] - - [auto, c, actor/spiked_goomba] - - [auto, c, actor/paragoomba] - - [auto, c, stage/kmr_02] - - [auto, c, stage/kmr_03] - - [auto, c, stage/kmr_04] - - [auto, c, stage/kmr_05] - - [auto, c, stage/kmr_06] - - dir: battle/area/kmr_part_2 - type: code - start: 0x439A90 - vram_class: battle_area - subalign: 4 - subsegments: - - [auto, c, area] - - [auto, c, actor/blue_goomba_1] - - [auto, c, actor/red_goomba_1] - - [auto, c, actor/blue_goomba_2] - - [auto, c, actor/red_goomba_2] - - [auto, c, actor/goomba_king] - - [auto, c, actor/goomnut_tree] - - [auto, c, stage/kmr_02] - - [auto, c, stage/kmr_03] - - [auto, c, stage/kmr_04] - - [auto, c, stage/kmr_05] - - [auto, c, stage/kmr_06] - - dir: battle/area/kmr_part_3 - type: code - start: 0x447440 - vram_class: battle_area - subalign: 4 - subsegments: - - [auto, c, area] - - [auto, c, actor/tutorial_spiked_goomba] - - [auto, c, actor/tutorial_paragoomba] - - [auto, c, actor/paragoomba] - - [auto, c, actor/jr_troopa] - - [auto, c, actor/egg_jr_troopa] - - [auto, c, actor/para_jr_troopa] - - [auto, c, actor/spiked_para_jr_troopa] - - [auto, c, actor/mage_jr_troopa] - - [auto, c, actor/final_jr_troopa] - - [auto, c, stage/kmr_02] - - [auto, c, stage/kmr_03] - - [auto, c, stage/kmr_04] - - [auto, c, stage/kmr_05b] - - [auto, c, stage/kmr_06] - - [auto, c, stage/nok_01] - - [auto, c, stage/mim_01] - - [auto, c, stage/sam_01] - - [auto, c, stage/mac_01] - - [auto, c, stage/kpa_13] - - dir: battle/area/mac - type: code - start: 0x464490 - vram_class: battle_area - subsegments: - - [auto, c, actor/chan] - - [auto, c, actor/lee] - - [auto, c, actor/master1] - - [auto, c, actor/master2] - - [auto, c, actor/master3] - - [auto, c, stage/mac_01] - - [auto, c, stage/mac_02] - - [auto, c, area] - - dir: battle/area/hos - type: code - start: 0x47F0B0 - vram_class: battle_area - subsegments: - - [auto, c, actor/goombario_tutor] - - [auto, c, actor/ember] - - [auto, c, actor/magikoopa] - - [auto, c, stage/hos_01] - - [auto, c, stage/hos_00] - - [auto, c, stage/hos_02] - - [auto, c, area] - - dir: battle/area/nok - type: code - start: 0x48D1A0 - vram_class: battle_area - subalign: 4 - subsegments: - - [auto, c, area] - - [auto, c, actor/goomba] - - [auto, c, actor/paragoomba] - - [auto, c, actor/spiked_goomba] - - [auto, c, actor/koopa_troopa] - - [auto, c, actor/fuzzy] - - [auto, c, actor/paratroopa] - - [auto, c, actor/kent_c_koopa] - - [auto, c, stage/nok_01] - - [auto, c, stage/nok_02] - - [auto, c, stage/nok_03] - - [auto, c, stage/nok_04] - - dir: battle/area/trd_part_1 - type: code - start: 0x4A10A0 - vram_class: battle_area - subsegments: - - [auto, c, area] - - [auto, c, actor/bullet_bill] - - [auto, c, actor/bill_blaster] - - [auto, c, actor/bob_omb] - - [auto, c, actor/koopa_troopa] - - [auto, c, actor/paratroopa] - - [auto, c, stage/trd_01] - - [auto, c, stage/trd_02] - - [auto, c, stage/trd_02b] - - [auto, c, stage/trd_03] - - [auto, c, stage/trd_04] - - [auto, c, stage/trd_05] - - [auto, c, stage/trd_00] - - [auto, c, stage/trd_02c] - - [auto, c, stage/trd_02d] - - [auto, c, stage/trd_05b] - - [auto, c, stage/trd_05c] - - [auto, c, stage/trd_05d] - - [auto, c, stage/trd_05e] - - [auto, c, stage/trd_05f] - - dir: battle/area/trd_part_2 - type: code - start: 0x4B11F0 - vram_class: battle_area - subalign: 4 - subsegments: - - [auto, c, area] - - [auto, c, actor/fake_bowser] - - [auto, c, actor/koopa_bros_green] - - [auto, c, actor/koopa_bros_red] - - [auto, c, actor/koopa_bros_black] - - [auto, c, actor/koopa_bros_yellow] - - [auto, c, stage/trd_00] - - [auto, c, stage/trd_01] - - [auto, c, stage/trd_02] - - [auto, c, stage/trd_02b] - - [auto, c, stage/trd_03] - - [auto, c, stage/trd_04] - - [auto, c, stage/trd_05] - - [auto, c, stage/trd_05b] - - [auto, c, stage/trd_05c] - - [auto, c, stage/trd_05d] - - [auto, c, stage/trd_05e] - - [auto, c, stage/trd_05f] - - dir: battle/area/trd_part_3 - type: code - start: 0x4CF1B0 - vram_class: battle_area - subsegments: - - [auto, c, area] - - [auto, c, actor/eldstar] - - [auto, c, stage/nok_01] - - dir: battle/area/iwa - type: code - start: 0x4D01F0 - vram_class: battle_area - subalign: 4 - subsegments: - - [auto, c, area] - - [auto, c, actor/cleft] - - [auto, c, actor/monty_mole] - - [auto, c, actor/buzzar] - - [auto, c, actor/whacka] - - [auto, c, stage/iwa_01] - - [auto, c, stage/iwa_01b] - - [auto, c, stage/iwa_02] - - dir: battle/area/sbk - type: code - start: 0x4DA5E0 - vram_class: battle_area - subalign: 16 # BSS alignment hack - subsegments: - - [auto, c, actor/pokey] - - [auto, c, actor/bandit] - - [auto, c, stage/sbk_02] - - [auto, c, area] - - dir: battle/area/isk_part_1 - type: code - start: 0x4E2740 - vram_class: battle_area - subsegments: - - [auto, c, actor/pokey_mummy] - - [auto, c, actor/swooper] - - [auto, c, actor/buzzy_beetle] - - [auto, c, actor/stone_chomp] - - [auto, c, stage/isk_00] - - [auto, c, stage/isk_01] - - [auto, c, stage/isk_02] - - [auto, c, stage/isk_03] - - [auto, c, stage/isk_04] - - [auto, c, stage/isk_05] - - [auto, c, stage/isk_06] - - [auto, c, stage/isk_07] - - [auto, c, stage/isk_07] - - [auto, c, stage/isk_03b] - - [auto, c, stage/isk_02b] - - [auto, c, stage/isk_02c] - - [auto, c, stage/isk_06b] - - [auto, c, stage/isk_08] - - [auto, c, area] - - dir: battle/area/isk_part_2 - type: code - start: 0x4EF4A0 - vram_class: battle_area - subsegments: - - [auto, c, actor/chain_chomp] - - [auto, c, actor/tutankoopa] - - [auto, c, stage/isk_00] - - [auto, c, stage/isk_01] - - [auto, c, stage/isk_02] - - [auto, c, stage/isk_02b] - - [auto, c, stage/isk_02c] - - [auto, c, stage/isk_03] - - [auto, c, stage/isk_03b] - - [auto, c, stage/isk_04] - - [auto, c, stage/isk_05] - - [auto, c, stage/isk_06] - - [auto, c, stage/isk_06b] - - [auto, c, stage/isk_07] - - [auto, c, area] - - dir: battle/area/mim - type: code - start: 0x4F7BE0 - vram_class: battle_area - subsegments: - - [auto, c, actor/forest_fuzzy] - - [auto, c, actor/bzzap] - - [auto, c, actor/piranha_plant] - - [auto, c, stage/mim_01] - - [auto, c, area] - - dir: battle/area/arn - type: code - start: 0x4FEA50 - vram_class: battle_area - subsegments: - - [auto, c, actor/hyper_goomba] - - [auto, c, actor/hyper_paragoomba] - - [auto, c, actor/hyper_cleft] - - [auto, c, actor/tubbas_heart] - - [auto, c, actor/tubba_blubba] - - [auto, c, stage/arn_01] - - [auto, c, stage/arn_02] - - [auto, c, stage/arn_03] - - [auto, c, stage/arn_04] - - [auto, c, stage/arn_05] - - [auto, c, stage/arn_06] - - [auto, c, area] - - dir: battle/area/dgb - type: code - start: 0x50F020 - vram_class: battle_area - subsegments: - - [auto, c, actor/clubba] - - [auto, c, actor/tubba_blubba] - - [auto, c, stage/dgb_01] - - [auto, c, stage/dgb_02] - - [auto, c, stage/dgb_03] - - [auto, c, stage/dgb_04] - - [auto, c, stage/dgb_05] - - [auto, c, area] - - dir: battle/area/omo - type: code - start: 0x5125D0 - vram_class: battle_area - subsegments: - - [auto, c, actor/red_shy_guy] - - [auto, c, actor/blue_shy_guy] - - [auto, c, actor/yellow_shy_guy] - - [auto, c, actor/pink_shy_guy] - - [auto, c, actor/green_shy_guy] - - [auto, c, actor/anti_guy] - - [auto, c, actor/medi_guy] - - [auto, c, actor/groove_guy] - - [auto, c, actor/spy_guy] - - [auto, c, actor/sky_guy] - - [auto, c, actor/pyro_guy] - - [auto, c, stage/omo_01] - - [auto, c, stage/omo_02] - - [auto, c, stage/omo_03] - - [auto, c, stage/omo_03b] - - [auto, c, stage/omo_04] - - [auto, c, stage/omo_05] - - [auto, c, stage/omo_05b] - - [auto, c, stage/omo_06] - - [auto, c, stage/omo_07] - - [auto, c, area] - - dir: battle/area/omo2 - type: code - start: 0x52B6A0 - vram_class: battle_area - subsegments: - - [auto, c, actor/general_guy] - - [auto, c, actor/toy_tank] - - [auto, c, actor/light_bulb] - - [auto, c, stage/omo_07] - - [auto, c, area] - - dir: battle/area/omo2_1 - type: code - start: 0x543570 - vram_class: battle_area2 - subsegments: - - [auto, c, actor/shy_squad] - - dir: battle/area/omo2_2 - type: code - start: 0x5483E0 - vram_class: battle_area2 - subsegments: - - [auto, c, actor/stilt_guy] - - dir: battle/area/omo2_3 - type: code - start: 0x54CC70 - vram_class: battle_area2 - subsegments: - - [auto, c, actor/shy_stack] - - dir: battle/area/omo2_4 - type: code - start: 0x552440 - vram_class: battle_area2 - subsegments: - - [auto, c, actor/signal_guy] - - dir: battle/area/omo2_5 - type: code - start: 0x552BB0 - vram_class: battle_area2 - subsegments: - - [auto, c, actor/shy_squad_redux] - - dir: battle/area/omo2_6 - type: code - start: 0x556C90 - vram_class: battle_area2 - subsegments: - - [auto, c, actor/shy_squad_stub] - - dir: battle/area/omo3 - type: code - start: 0x5573E0 - vram_class: battle_area - subsegments: - - [auto, c, actor/big_lantern_ghost] - - [auto, c, stage/omo_01] - - [auto, c, stage/omo_02] - - [auto, c, stage/omo_03] - - [auto, c, stage/omo_03b] - - [auto, c, stage/omo_04] - - [auto, c, stage/omo_05] - - [auto, c, stage/omo_05b] - - [auto, c, stage/omo_06] - - [auto, c, stage/omo_07] - - [auto, c, actor/goomba] - - [auto, c, actor/clubba] - - [auto, c, actor/fuzzy] - - [auto, c, actor/hammer_bro] - - [auto, c, actor/pokey] - - [auto, c, actor/koopatrol] - - [auto, c, actor/red_shy_guy] - - [auto, c, area] - - dir: battle/area/kgr - type: code - start: 0x56E2A0 - vram_class: battle_area - subsegments: - - [auto, c, actor/fuzzipede] - - [auto, c, stage/kgr_01] - - [auto, c, area] - - dir: battle/area/jan - type: code - start: 0x573920 - vram_class: battle_area - subsegments: - - [auto, c, actor/spear_guy] - - [auto, c, actor/hurt_plant] - - [auto, c, actor/jungle_fuzzy] - - [auto, c, actor/m_bush] - - [auto, c, actor/medi_guy] - - [auto, c, actor/spike_top] - - [auto, c, stage/jan_00] - - [auto, c, stage/jan_01] - - [auto, c, stage/jan_01b] - - [auto, c, stage/jan_02] - - [auto, c, stage/jan_03] - - [auto, c, stage/jan_03b] - - [auto, c, stage/jan_04] - - [auto, c, stage/jan_04b] - - [auto, c, area] - - dir: battle/area/jan2 - type: code - start: 0x584940 - vram_class: battle_area - subsegments: - - [auto, c, actor/putrid_piranha] - - [auto, c, actor/white_magikoopa] - - [auto, c, stage/jan_00] - - [auto, c, stage/jan_01] - - [auto, c, stage/jan_01b] - - [auto, c, stage/jan_02] - - [auto, c, stage/jan_03] - - [auto, c, stage/jan_03b] - - [auto, c, stage/jan_04] - - [auto, c, stage/jan_04b] - - [auto, c, area] - - dir: battle/area/kzn - type: code - start: 0x58C2F0 - vram_class: battle_area - subsegments: - - [auto, c, actor/lava_bubble] - - [auto, c, actor/putrid_piranha] - - [auto, c, actor/spike_top] - - [auto, c, actor/medi_guy] - - [auto, c, actor/red_magikoopa] - - [auto, c, actor/white_magikoopa] - - [auto, c, stage/kzn_01] - - [auto, c, stage/kzn_01b] - - [auto, c, stage/kzn_02] - - [auto, c, stage/kzn_04] - - [auto, c, stage/kzn_04b] - - [auto, c, stage/kzn_04c] - - [auto, c, stage/kzn_05] - - [auto, c, area] - - dir: battle/area/kzn2 - type: code - start: 0x59E6E0 - vram_class: battle_area - symbol_name_format: $VRAM_$ROM - subsegments: - - [auto, c, anim/unused_gfx] - - [auto, c, anim/lava_piranha_anim] - - [auto, c, actor/lava_piranha] - - [auto, c, actor/petit_piranha] - - [auto, c, actor/lava_bud] - - [auto, c, actor/petit_piranha_bomb] - - [auto, c, stage/kzn_01] - - [auto, c, stage/kzn_01b] - - [auto, c, stage/kzn_02] - - [auto, c, stage/kzn_04] - - [auto, c, stage/kzn_04b] - - [auto, c, stage/kzn_04c] - - [auto, c, stage/kzn_05] - - [auto, c, area] - - start: 0x59F530 - type: .data - name: anim/unused_gfx - subsegments: - - [0x59F530, vtx, vtx1] - - [0x59F6B0, vtx, vtx2] - - [0x59F7D0, vtx, vtx3] - - [0x59F930, vtx, vtx4] - - [0x59FA30, vtx, vtx5] - - [0x59FB90, vtx, vtx6] - - [0x59FD30, vtx, vtx7] - - [0x59FEB0, vtx, vtx8] - - [0x5A0030, vtx, vtx9] - - [0x5A0190, vtx, vtx10] - - [0x5A02B0, vtx, vtx11] - - [0x5A02E0, vtx, vtx12] - - [0x5A0310, vtx, vtx13] - - [0x5A0340, vtx, vtx14] - - [0x5A0370, vtx, vtx15] - - [0x5A03A0, vtx, vtx16] - - [0x5A03D0, vtx, vtx17] - - [0x5A0400, vtx, vtx18] - - [0x5A0430, gfx, gfx1] - - [0x5A0500, gfx, gfx2] - - [0x5A0540, gfx, gfx3] - - [0x5A0590, gfx, gfx4] - - [0x5A05E0, gfx, gfx5] - - [0x5A0630, gfx, gfx6] - - [0x5A0690, gfx, gfx7] - - [0x5A06E0, gfx, gfx8] - - [0x5A0720, gfx, gfx9] - - [0x5A0770, gfx, gfx10] - - [0x5A07B0, gfx, gfx11] - - [0x5A0800] - - start: 0x5A2E80 - type: .data - name: actor/lava_piranha - subsegments: - - [0x5A2E80] - - [0x5A3020, ci4, lava_piranha_vine, 64, 32] - - [0x5A3420, palette, lava_piranha_vine] - - [0x5A3620, gfx, lava_piranha_vine] - - [0x5A36F8] - - [0x5B1240] - - dir: battle/area/flo - type: code - start: 0x5B14B0 - vram_class: battle_area - subsegments: - - [auto, c, actor/lakitu] - - [auto, c, actor/spiny] - - [auto, c, actor/crazee_dayzee] - - [auto, c, actor/bzzap] - - [auto, c, actor/amazy_dayzee] - - [auto, c, actor/ruff_puff] - - [auto, c, actor/medi_guy] - - [auto, c, actor/red_magikoopa] - - [auto, c, actor/green_magikoopa] - - [auto, c, actor/white_magikoopa] - - [auto, c, actor/yellow_magikoopa] - - [auto, c, stage/flo_01] - - [auto, c, stage/flo_01b] - - [auto, c, stage/flo_01c] - - [auto, c, stage/flo_02] - - [auto, c, stage/flo_02b] - - [auto, c, stage/flo_02c] - - [auto, c, stage/flo_03] - - [auto, c, stage/flo_04] - - [auto, c, stage/flo_05] - - [auto, c, stage/flo_06] - - [auto, c, area] - - dir: battle/area/flo2 - type: code - start: 0x5CE690 - vram_class: battle_area - subsegments: - - [auto, c, actor/huff_n_puff] - - [auto, c, actor/tuff_puff] - - [auto, c, actor/monty_mole_boss] - - [auto, c, actor/spike] - - [auto, c, stage/flo_01] - - [auto, c, stage/flo_01b] - - [auto, c, stage/flo_01c] - - [auto, c, stage/flo_02] - - [auto, c, stage/flo_02b] - - [auto, c, stage/flo_02c] - - [auto, c, stage/flo_03] - - [auto, c, stage/flo_04] - - [auto, c, stage/flo_05] - - [auto, c, stage/flo_06] - - [auto, c, area] - - dir: battle/area/tik - type: code - start: 0x5EC490 - vram_class: battle_area - subsegments: - - [auto, c, actor/dark_koopa] - - [auto, c, actor/dark_paratroopa] - - [auto, c, actor/gloomba] - - [auto, c, actor/spiked_gloomba] - - [auto, c, actor/paragloomba] - - [auto, c, actor/buzzy_beetle] - - [auto, c, actor/spike_top] - - [auto, c, actor/spiny] - - [auto, c, stage/tik_01] - - [auto, c, stage/tik_02] - - [auto, c, stage/tik_03] - - [auto, c, stage/tik_04] - - [auto, c, stage/tik_05] - - [auto, c, area] - - dir: battle/area/tik2 - type: code - start: 0x608AB0 - vram_class: battle_area - subsegments: - - [auto, c, actor/blooper] - - [auto, c, actor/electro_blooper] - - [auto, c, actor/super_blooper] - - [auto, c, actor/blooper_baby] - - [auto, c, stage/tik_01] - - [auto, c, stage/tik_02] - - [auto, c, stage/tik_03] - - [auto, c, stage/tik_04] - - [auto, c, stage/tik_05] - - [auto, c, area] - - dir: battle/area/tik3 - type: code - start: 0x6186F0 - vram_class: battle_area - subsegments: - - [auto, c, actor/swooper] - - [auto, c, actor/swoopula] - - [auto, c, stage/tik_01] - - [auto, c, stage/tik_02] - - [auto, c, stage/tik_03] - - [auto, c, stage/tik_04] - - [auto, c, stage/tik_05] - - [auto, c, area] - - dir: battle/area/sam - type: code - start: 0x623BA0 - vram_class: battle_area - subsegments: - - [auto, c, actor/duplighost] - - [auto, c, actor/gulpit] - - [auto, c, actor/gulpit_rocks] - - [auto, c, actor/white_clubba] - - [auto, c, actor/frost_piranha] - - [auto, c, actor/gray_magikoopa] - - [auto, c, stage/sam_01] - - [auto, c, stage/sam_02] - - [auto, c, stage/sam_02b] - - [auto, c, stage/sam_02c] - - [auto, c, stage/sam_02d] - - [auto, c, stage/sam_03] - - [auto, c, area] - - dir: battle/area/sam2 - type: code - start: 0x63D1E0 - vram_class: battle_area - subsegments: - - [auto, c, actor/monstar] - - [auto, c, actor/paragoomba] - - [auto, c, actor/gray_magikoopa] - - [auto, c, stage/sam_01] - - [auto, c, stage/sam_02] - - [auto, c, stage/sam_02b] - - [auto, c, stage/sam_02c] - - [auto, c, stage/sam_02d] - - [auto, c, stage/sam_03] - - [auto, c, area] - - [auto, c, dlist] - - start: 0x63F040 - type: .data - name: actor/monstar - subsegments: - - [0x63F040] - - [0x63F278, ci4, actor/img, 32, 32] - - [0x63F478, palette, actor/img] - - [0x63F498] - - start: 0x648860 - type: .data - name: vtx - subsegments: - - [0x648860, vtx, monstar_bubbles] - - [0x648C80] - - dir: battle/area/pra - type: code - start: 0x648E10 - vram_class: battle_area - subsegments: - - [auto, c, actor/swoopula] - - [auto, c, actor/albino_dino] - - [auto, c, actor/white_clubba] - - [auto, c, actor/red_magikoopa] - - [auto, c, actor/green_magikoopa] - - [auto, c, actor/yellow_magikoopa] - - [auto, c, actor/gray_magikoopa] - - [auto, c, actor/white_magikoopa] - - [auto, c, stage/pra_01] - - [auto, c, stage/pra_02] - - [auto, c, stage/pra_03] - - [auto, c, stage/pra_03b] - - [auto, c, stage/pra_03c] - - [auto, c, stage/pra_04] - - [auto, c, area] - - dir: battle/area/pra2 - type: code - start: 0x660750 - vram_class: battle_area - subalign: 16 # BSS alignment hack - subsegments: - - [auto, c, actor/crystal_king] - - [auto, c, actor/crystal_bit] - - [auto, c, stage/sam_04] - - [auto, c, area] - - dir: battle/area/pra3 - type: code - start: 0x669D80 - vram_class: battle_area - subsegments: - - [auto, c, actor/duplighost] - - [auto, c, actor/swoopula] - - [auto, c, actor/white_clubba] - - [auto, c, actor/red_magikoopa] - - [auto, c, actor/gray_magikoopa] - - [auto, c, stage/pra_01] - - [auto, c, stage/pra_02] - - [auto, c, stage/pra_03] - - [auto, c, stage/pra_03b] - - [auto, c, stage/pra_03c] - - [auto, c, stage/pra_04] - - [auto, c, area] - - dir: battle/area/kpa - type: code - start: 0x684A30 - vram_class: battle_area - subsegments: - - [auto, c, actor/bony_beetle] - - [auto, c, actor/dry_bones] - - [auto, c, actor/hammer_bro] - - [auto, c, actor/koopatrol] - - [auto, c, actor/magikoopa] - - [auto, c, actor/ember] - - [auto, c, stage/kpa_01] - - [auto, c, stage/kpa_01b] - - [auto, c, stage/kpa_02] - - [auto, c, stage/kpa_03] - - [auto, c, stage/kpa_04] - - [auto, c, stage/kpa_04b] - - [auto, c, stage/kpa_04c] - - [auto, c, stage/kpa_05] - - [auto, c, stage/kpa_07] - - [auto, c, stage/kpa_08] - - [auto, c, stage/kpa_09] - - [auto, c, stage/kpa_11] - - [auto, c, stage/kpa_13] - - [auto, c, stage/kpa_14] - - [auto, c, area] - - dir: battle/area/kpa2 - type: code - start: 0x69F200 - vram_class: battle_area - subsegments: - - [auto, c, actor/unused_bowser] - - [auto, c, actor/intro_bowser] - - [auto, c, actor/hallway_bowser] - - [auto, c, actor/final_bowser_1] - - [auto, c, actor/final_bowser_2] - - [auto, c, stage/kpa_01] - - [auto, c, stage/kkj_01] - - [auto, c, stage/kkj_02] - - [auto, c, area] - - dir: battle/area/kpa3 - type: code - start: 0x6BBB90 - vram_class: battle_area - subsegments: - - [auto, c, actor/anti_guy] - - [auto, c, actor/duplighost] - - [auto, c, stage/kpa_01] - - [auto, c, area] - - dir: battle/area/kpa4 - type: code - start: 0x6CC070 - vram_class: battle_area - subsegments: - - [auto, c, actor/bombshell_blaster] - - [auto, c, actor/bombshell_bill] - - [auto, c, actor/koopatrol] - - [auto, c, actor/magikoopa] - - [auto, c, stage/kpa_01] - - [auto, c, stage/kpa_01b] - - [auto, c, stage/kpa_02] - - [auto, c, stage/kpa_03] - - [auto, c, stage/kpa_04] - - [auto, c, stage/kpa_04b] - - [auto, c, stage/kpa_04c] - - [auto, c, stage/kpa_05] - - [auto, c, stage/kpa_07] - - [auto, c, stage/kpa_08] - - [auto, c, stage/kpa_09] - - [auto, c, stage/kpa_11] - - [auto, c, stage/kpa_13] - - [auto, c, stage/kpa_14] - - [auto, c, area] - - dir: battle/area/kkj - type: code - start: 0x6DBDA0 - vram_class: battle_area - subsegments: - - [auto, c, area] - - [auto, c, actor/kammy_koopa] - - [auto, c, stage/kpa_05] - - dir: battle/area/dig - type: code - start: 0x6DDDC0 - vram_class: battle_area - subsegments: - - [auto, c, actor/koopa_troopa] - - [auto, c, actor/fuzzy] - - [auto, c, actor/pokey] - - [auto, c, actor/bandit] - - [auto, c, actor/red_shy_guy] - - [auto, c, actor/tubba_blubba] - - [auto, c, actor/monty_mole] - - [auto, c, actor/whacka] - - [auto, c, stage/dig_01] - - [auto, c, stage/dig_02] - - [auto, c, stage/dig_03] - - [auto, c, stage/dig_04] - - [auto, c, stage/dig_05] - - [auto, c, area] - - [auto, c, script/dig_01] - - [auto, c, script/dig_02] - - [auto, c, script/dig_03] - - [auto, c, script/dig_04] - - [auto, c, script/dig_05] + - [0x6F0B30] ####################### ### Battle Partners ### @@ -7447,5686 +6679,225 @@ segments: - [0x79F0D8, vtx, level_up/draw_second_L] - [0x79F158, vtx, level_up/draw_L] - [0x79F1D8, vtx, level_up/draw_P] - - [0x79F258, vtx, level_up/draw_U] - - [0x79F2D8, vtx, level_up/draw_exclamation_mark] - - [0x79F358, ia8, level_up/big_V, 64, 64] - - [0x7A0358, gfx, level_up/big_V] - - [0x7A03D0, ia8, level_up/big_P, 64, 64] - - [0x7A13D0, gfx, level_up/big_P] - - [0x7A1448, ia8, level_up/big_exclamation_mark, 64, 64] - - [0x7A2448, gfx, level_up/big_exclamation_mark] - - [0x7A24C0, ia8, level_up/big_U, 64, 64] - - [0x7A34C0, gfx, level_up/big_U] - - [0x7A3538, ia8, level_up/big_L, 64, 64] - - [0x7A4538, gfx, level_up/big_L] - - [0x7A45B0, ia8, level_up/big_E, 64, 64] - - [0x7A55B0, gfx, level_up/big_E] - - [0x7A5628] - - [0x7A59F0, ci4, level_up/heart, 40, 40] - - [0x7A5D10, palette, level_up/heart] - - [0x7A5D30, ci4, level_up/flower, 40, 40] - - [0x7A6050, palette, level_up/flower] - - [0x7A6070, ci4, level_up/leaves, 40, 40] - - [0x7A6390, palette, level_up/leaves] - - [0x7A63B0, ci4, level_up/badge, 40, 40] - - [0x7A66D0, palette, level_up/badge] - - [0x7A66F0, ci4, level_up/FP, 32, 24] - - [0x7A6870, palette, level_up/FP] - - [0x7A6890, ci4, level_up/BP, 32, 24] - - [0x7A6A10, palette, level_up/BP] - - [0x7A6A30, ci4, level_up/HP, 32, 24] - - [0x7A6BB0, palette, level_up/HP] - - [0x7A6BD0, ci4, level_up/digit_0, 8, 16] - - [0x7A6C10, palette, level_up/digit_0] - - [0x7A6C30, ci4, level_up/digit_1, 8, 16] - - [0x7A6C70, palette, level_up/digit_1] - - [0x7A6C90, ci4, level_up/digit_2, 8, 16] - - [0x7A6CD0, palette, level_up/digit_2] - - [0x7A6CF0, ci4, level_up/digit_3, 8, 16] - - [0x7A6D30, palette, level_up/digit_3] - - [0x7A6D50, ci4, level_up/digit_4, 8, 16] - - [0x7A6D90, palette, level_up/digit_4] - - [0x7A6DB0, ci4, level_up/digit_5, 8, 16] - - [0x7A6DF0, palette, level_up/digit_5] - - [0x7A6E10, ci4, level_up/digit_6, 8, 16] - - [0x7A6E50, palette, level_up/digit_6] - - [0x7A6E70, ci4, level_up/digit_7, 8, 16] - - [0x7A6EB0, palette, level_up/digit_7] - - [0x7A6ED0, ci4, level_up/digit_8, 8, 16] - - [0x7A6F10, palette, level_up/digit_8] - - [0x7A6F30, ci4, level_up/digit_9, 8, 16] - - [0x7A6F70, palette, level_up/digit_9] - - [0x7A6F90, ci4, level_up/small_digit_0, 8, 8] - - [0x7A6FB0, palette, level_up/small_digit_0] - - [0x7A6FD0, ci4, level_up/small_digit_1, 8, 8] - - [0x7A6FF0, palette, level_up/small_digit_1] - - [0x7A7010, ci4, level_up/small_digit_2, 8, 8] - - [0x7A7030, palette, level_up/small_digit_2] - - [0x7A7050, ci4, level_up/small_digit_3, 8, 8] - - [0x7A7070, palette, level_up/small_digit_3] - - [0x7A7090, ci4, level_up/small_digit_4, 8, 8] - - [0x7A70B0, palette, level_up/small_digit_4] - - [0x7A70D0, ci4, level_up/small_digit_5, 8, 8] - - [0x7A70F0, palette, level_up/small_digit_5] - - [0x7A7110, ci4, level_up/small_digit_6, 8, 8] - - [0x7A7130, palette, level_up/small_digit_6] - - [0x7A7150, ci4, level_up/small_digit_7, 8, 8] - - [0x7A7170, palette, level_up/small_digit_7] - - [0x7A7190, ci4, level_up/small_digit_8, 8, 8] - - [0x7A71B0, palette, level_up/small_digit_8] - - [0x7A71D0, ci4, level_up/small_digit_9, 8, 8] - - [0x7A71F0, palette, level_up/small_digit_9] - - [0x7A7210, ci4, level_up/small_arrow, 8, 8] - - [0x7A7230, palette, level_up/small_arrow] - - [0x7A7250, palette, level_up/digit_0.red] - - [0x7A7270, palette, level_up/digit_1.red] - - [0x7A7290, palette, level_up/digit_2.red] - - [0x7A72B0, palette, level_up/digit_3.red] - - [0x7A72D0, palette, level_up/digit_4.red] - - [0x7A72F0, palette, level_up/digit_5.red] - - [0x7A7310, palette, level_up/digit_6.red] - - [0x7A7330, palette, level_up/digit_7.red] - - [0x7A7350, palette, level_up/digit_8.red] - - [0x7A7370, palette, level_up/digit_9.red] - - [0x7A7390, palette, level_up/small_digit_0.red] - - [0x7A73B0, palette, level_up/small_digit_1.red] - - [0x7A73D0, palette, level_up/small_digit_2.red] - - [0x7A73F0, palette, level_up/small_digit_3.red] - - [0x7A7410, palette, level_up/small_digit_4.red] - - [0x7A7430, palette, level_up/small_digit_5.red] - - [0x7A7450, palette, level_up/small_digit_6.red] - - [0x7A7470, palette, level_up/small_digit_7.red] - - [0x7A7490, palette, level_up/small_digit_8.red] - - [0x7A74B0, palette, level_up/small_digit_9.red] - - [0x7A74D0, palette, level_up/small_arrow.red] - - [0x7A74F0, palette, level_up/digit_0.blue] - - [0x7A7510, palette, level_up/digit_1.blue] - - [0x7A7530, palette, level_up/digit_2.blue] - - [0x7A7550, palette, level_up/digit_3.blue] - - [0x7A7570, palette, level_up/digit_4.blue] - - [0x7A7590, palette, level_up/digit_5.blue] - - [0x7A75B0, palette, level_up/digit_6.blue] - - [0x7A75D0, palette, level_up/digit_7.blue] - - [0x7A75F0, palette, level_up/digit_8.blue] - - [0x7A7610, palette, level_up/digit_9.blue] - - [0x7A7630, palette, level_up/small_digit_0.blue] - - [0x7A7650, palette, level_up/small_digit_1.blue] - - [0x7A7670, palette, level_up/small_digit_2.blue] - - [0x7A7690, palette, level_up/small_digit_3.blue] - - [0x7A76B0, palette, level_up/small_digit_4.blue] - - [0x7A76D0, palette, level_up/small_digit_5.blue] - - [0x7A76F0, palette, level_up/small_digit_6.blue] - - [0x7A7710, palette, level_up/small_digit_7.blue] - - [0x7A7730, palette, level_up/small_digit_8.blue] - - [0x7A7750, palette, level_up/small_digit_9.blue] - - [0x7A7770, palette, level_up/small_arrow.blue] - - [0x7A7790, ci4, level_up/select_one_to_upgrade, 208, 16] - - [0x7A7E10, palette, level_up/select_one_to_upgrade] - - [0x7A7E30] - - type: code - name: starpoint - start: 0x7A89A0 - vram_class: battle_move - symbol_name_format: $VRAM_$ROM - subsegments: - - [auto, c, starpoint] - - start: 0x7A89A0 - type: .data - name: starpoint - subsegments: - - [0x7A89A0] - - [0x7A89B8, ia8, starpoint/starpoint, 128, 32] - - [0x7A99B8, gfx, starpoint/load_starpoint] - - [0x7A9A30, vtx, starpoint/starpoint] - - [0x7A9A70] - - [0x7A9B38, vtx, starpoint/starpoints] - - [0x7A9B78, ia8, starpoint/starpoints, 128, 32] - - [0x7AAB78, gfx, starpoint/load_starpoints] - - [0x7AABF0] - - [0x7AACA0, vtx, starpoint/digit_0] - - [0x7AACE0, ia8, starpoint/digit_0, 64, 64] - - [0x7ABCE0, gfx, starpoint/load_digit_0] - - [0x7ABD58, gfx, starpoint/__render_digit_0] - - [0x7ABDA0, gfx, starpoint/_render_digit_0] - - [0x7ABDB0, gfx, starpoint/render_digit_0] - - [0x7ABDC0, vtx, starpoint/digit_1] - - [0x7ABE00, ia8, starpoint/digit_1, 64, 64] - - [0x7ACE00, gfx, starpoint/load_digit_1] - - [0x7ACE78, gfx, starpoint/__render_digit_1] - - [0x7ACEC0, gfx, starpoint/_render_digit_1] - - [0x7ACED0, gfx, starpoint/render_digit_1] - - [0x7ACEE0, vtx, starpoint/digit_2] - - [0x7ACF20, ia8, starpoint/digit_2, 64, 64] - - [0x7ADF20, gfx, starpoint/load_digit_2] - - [0x7ADF98, gfx, starpoint/__render_digit_2] - - [0x7ADFE0, gfx, starpoint/_render_digit_2] - - [0x7ADFF0, gfx, starpoint/render_digit_2] - - [0x7AE000, vtx, starpoint/digit_3] - - [0x7AE040, ia8, starpoint/digit_3, 64, 64] - - [0x7AF040, gfx, starpoint/load_digit_3] - - [0x7AF0B8, gfx, starpoint/__render_digit_3] - - [0x7AF100, gfx, starpoint/_render_digit_3] - - [0x7AF110, gfx, starpoint/render_digit_3] - - [0x7AF120, vtx, starpoint/digit_4] - - [0x7AF160, ia8, starpoint/digit_4, 64, 64] - - [0x7B0160, gfx, starpoint/load_digit_4] - - [0x7B01D8, gfx, starpoint/__render_digit_4] - - [0x7B0220, gfx, starpoint/_render_digit_4] - - [0x7B0230, gfx, starpoint/render_digit_4] - - [0x7B0240, vtx, starpoint/digit_5] - - [0x7B0280, ia8, starpoint/digit_5, 64, 64] - - [0x7B1280, gfx, starpoint/load_digit_5] - - [0x7B12F8, gfx, starpoint/__render_digit_5] - - [0x7B1340, gfx, starpoint/_render_digit_5] - - [0x7B1350, gfx, starpoint/render_digit_5] - - [0x7B1360, vtx, starpoint/digit_6] - - [0x7B13A0, ia8, starpoint/digit_6, 64, 64] - - [0x7B23A0, gfx, starpoint/load_digit_6] - - [0x7B2418, gfx, starpoint/__render_digit_6] - - [0x7B2460, gfx, starpoint/_render_digit_6] - - [0x7B2470, gfx, starpoint/render_digit_6] - - [0x7B2480, vtx, starpoint/digit_7] - - [0x7B24C0, ia8, starpoint/digit_7, 64, 64] - - [0x7B34C0, gfx, starpoint/load_digit_7] - - [0x7B3538, gfx, starpoint/__render_digit_7] - - [0x7B3580, gfx, starpoint/_render_digit_7] - - [0x7B3590, gfx, starpoint/render_digit_7] - - [0x7B35A0, vtx, starpoint/digit_8] - - [0x7B35E0, ia8, starpoint/digit_8, 64, 64] - - [0x7B45E0, gfx, starpoint/load_digit_8] - - [0x7B4658, gfx, starpoint/__render_digit_8] - - [0x7B46A0, gfx, starpoint/_render_digit_8] - - [0x7B46B0, gfx, starpoint/render_digit_8] - - [0x7B46C0, vtx, starpoint/digit_9] - - [0x7B4700, ia8, starpoint/digit_9, 64, 64] - - [0x7B5700, gfx, starpoint/load_digit_9] - - [0x7B5778, gfx, starpoint/__render_digit_9] - - [0x7B57C0, gfx, starpoint/_render_digit_9] - - [0x7B57D0, gfx, starpoint/render_digit_9] - - [0x7B57E0] - - name: world_model_anim_kzn_01 - dir: world/model_anim/kzn - type: code - start: 0x7B5960 - vram_class: world_model_anim - subsegments: - - [auto, c, "01"] - - name: world_model_anim_kzn_00 - dir: world/model_anim/kzn - type: code - start: 0x7B6690 - vram_class: world_model_anim - subsegments: - - [auto, c, "00"] - - name: world_model_anim_kzn_04 - dir: world/model_anim/kzn - type: code - start: 0x7B70E0 - vram_class: world_model_anim - subsegments: - - [auto, c, "04"] - - name: world_model_anim_kzn_05 - dir: world/model_anim/kzn - type: code - start: 0x7B8030 - vram_class: world_model_anim - subsegments: - - [auto, c, "05"] - - name: world_model_anim_kzn_06 - dir: world/model_anim/kzn - type: code - start: 0x7B8D30 - vram_class: world_model_anim - subsegments: - - [auto, c, "06"] - - name: world_model_anim_kzn_07 - dir: world/model_anim/kzn - type: code - start: 0x7B97E0 - vram_class: world_model_anim - subsegments: - - [auto, c, "07"] - - name: world_model_anim_kzn_08 - dir: world/model_anim/kzn - type: code - start: 0x7BA280 - vram_class: world_model_anim - subsegments: - - [auto, c, "08"] - - name: world_model_anim_kzn_09 - dir: world/model_anim/kzn - type: code - start: 0x7BB050 - vram_class: world_model_anim - subsegments: - - [auto, c, "09"] - - name: world_model_anim_kzn_0A - dir: world/model_anim/kzn - type: code - start: 0x7BBD80 - vram_class: world_model_anim - subsegments: - - [auto, c, "0A"] - - name: world_model_anim_kzn_0B - dir: world/model_anim/kzn - type: code - start: 0x7BEDD0 - vram_class: world_model_anim - subsegments: - - [auto, c, "0B"] - - name: world_model_anim_kzn_0C - dir: world/model_anim/kzn - type: code - start: 0x7C16C0 - vram_class: world_model_anim - subsegments: - - [auto, c, "0C"] - - name: world_model_anim_kzn_0D - dir: world/model_anim/kzn - type: code - start: 0x7C3A00 - vram_class: world_model_anim - subsegments: - - [auto, c, "0D"] - - name: world_model_anim_kzn_0E - dir: world/model_anim/kzn - type: code - start: 0x7C44D0 - vram_class: world_model_anim - subsegments: - - [auto, c, "0E"] - - name: world_model_anim_kzn_02 - dir: world/model_anim/kzn - type: code - start: 0x7C4F50 - vram_class: world_model_anim - subsegments: - - [auto, c, "02"] - - name: world_model_anim_kzn_03 - dir: world/model_anim/kzn - type: code - start: 0x7C7410 - vram_class: world_model_anim - subsegments: - - [auto, c, "03"] - - name: world_model_anim_kzn_0F - dir: world/model_anim/kzn - type: code - start: 0x7C7E50 - vram_class: world_model_anim - subsegments: - - [auto, c, "0F"] - - name: world_model_anim_kzn_10 - dir: world/model_anim/kzn - type: code - start: 0x7CA850 - vram_class: world_model_anim - subsegments: - - [auto, c, "10"] - - name: world_model_anim_kzn_11 - dir: world/model_anim/kzn - type: code - start: 0x7CD5F0 - vram_class: world_model_anim - subsegments: - - [auto, c, "11"] - - name: world_model_anim_kzn_12 - dir: world/model_anim/kzn - type: code - start: 0x7CDB30 - vram_class: world_model_anim - subsegments: - - [auto, c, "12"] - - name: world_model_anim_kzn_13 - dir: world/model_anim/kzn - type: code - start: 0x7CEFF0 - vram_class: world_model_anim - subsegments: - - [auto, c, "13"] - - name: world_model_anim_kzn_14 - dir: world/model_anim/kzn - type: code - start: 0x7CFCC0 - vram_class: world_model_anim - subsegments: - - [auto, c, "14"] - - name: world_model_anim_kzn_15 - dir: world/model_anim/kzn - type: code - start: 0x7D0860 - vram_class: world_model_anim - subsegments: - - [auto, c, "15"] - - name: world_model_anim_kzn_16 - dir: world/model_anim/kzn - type: code - start: 0x7D14E0 - vram_class: world_model_anim - subsegments: - - [auto, c, "16"] - - name: world_model_anim_kzn_17 - dir: world/model_anim/kzn - type: code - start: 0x7D2080 - vram_class: world_model_anim - subsegments: - - [auto, c, "17"] - - name: world_model_anim_kzn_18 - dir: world/model_anim/kzn - type: code - start: 0x7D2960 - vram_class: world_model_anim - subsegments: - - [auto, c, "18"] - - name: world_model_anim_kzn_19 - dir: world/model_anim/kzn - type: code - start: 0x7D3260 - vram_class: world_model_anim - subsegments: - - [auto, c, "19"] - - name: world_model_anim_kzn_1A - dir: world/model_anim/kzn - type: code - start: 0x7D5570 - vram_class: world_model_anim - subsegments: - - [auto, c, "1A"] - - name: world_model_anim_kzn_1B - dir: world/model_anim/kzn - type: code - start: 0x7D6F80 - vram_class: world_model_anim - subsegments: - - [auto, c, "1B"] - - name: world_model_anim_kzn_1C - dir: world/model_anim/kzn - type: code - start: 0x7D76B0 - vram_class: world_model_anim - subsegments: - - [auto, c, "1C"] - - name: world_model_anim_kzn_1D - dir: world/model_anim/kzn - type: code - start: 0x7D8FF0 - vram_class: world_model_anim - subsegments: - - [auto, c, "1D"] - - name: world_model_anim_kzn_1E - dir: world/model_anim/kzn - type: code - start: 0x7D96E0 - vram_class: world_model_anim - subsegments: - - [auto, c, "1E"] - - name: world_model_anim_kzn_1F - dir: world/model_anim/kzn - type: code - start: 0x7D98E0 - vram_class: world_model_anim - subsegments: - - [auto, c, "1F"] - - name: world_model_anim_kzn_20 - dir: world/model_anim/kzn - type: code - start: 0x7DA140 - vram_class: world_model_anim - subsegments: - - [auto, c, "20"] - - name: world_model_anim_kzn_21 - dir: world/model_anim/kzn - type: code - start: 0x7DC180 - vram_class: world_model_anim - subsegments: - - [auto, c, "21"] - - name: world_model_anim_kzn_22 - dir: world/model_anim/kzn - type: code - start: 0x7DE970 - vram_class: world_model_anim - subsegments: - - [auto, c, "22"] - - name: world_model_anim_kzn_23 - dir: world/model_anim/kzn - type: code - start: 0x7DF2B0 - vram_class: world_model_anim - subsegments: - - [auto, c, "23"] - - name: world_model_anim_kzn_24 - dir: world/model_anim/kzn - type: code - start: 0x7E03B0 - vram_class: world_model_anim - subsegments: - - [auto, c, "24"] - - name: world_script_api - dir: world/script_api - type: code - start: 0x7E0E80 - vram_class: world_script_api - subsegments: - - [auto, c, shops] - - [auto, c, rooms] - - [auto, c, push_blocks] - - [auto, c, enter_exit] - - name: texture_memory - type: code - start: 0x7E73A0 - vram_class: texture_memory - subsegments: - - [auto, c, texture_memory] - - -############ -### maps ### -############ - - name: machi - dir: world/area_mac/machi - type: code - start: 0x7E73A0 - vram_class: map - subsegments: - - [auto, c, machi_0_header] - - [auto, c, machi_1_tables] - - [auto, c, machi_2_main] - - [auto, c, machi_3_entity] - - [auto, c, machi_4_goomba_king] - - [auto, c, machi_5_npc] - - [auto, c, machi_6_misstar] - - [auto, c, machi_7_partner] - - name: mac_00 - dir: world/area_mac/mac_00 - type: code - start: 0x7EAD10 - vram_class: map - subsegments: - - [auto, c, mac_00_0_header] - - [auto, c, mac_00_1_music] - - [auto, c, mac_00_2_main] - - [auto, c, mac_00_3_entity] - - [auto, c, mac_00_4_rooms] - - [auto, c, mac_00_5_npc] - - [auto, c, mac_00_6_shop] - - [auto, c, mac_00_7_music_mix] - - [auto, c, mac_00_8_demo] - - [auto, c, mac_00_9_water_gfx] - - [auto, c, mac_00_10_shared_npc] - - [auto, c, mac_00_11_intro_npc] - - [auto, c, mac_00_12_intro] - - [auto, c, mac_00_13_epilogue_npc] - - [auto, c, mac_00_14_epilogue] - - name: mac_01 - dir: world/area_mac/mac_01 - type: code - start: 0x800880 - vram_class: map - subsegments: - - [auto, c, mac_01_0_header] - - [auto, c, mac_01_1_music] - - [auto, c, mac_01_2_main] - - [auto, c, mac_01_3_entity] - - [auto, c, mac_01_4_rooms] - - [auto, c, mac_01_5_shop] - - [auto, c, mac_01_6_crystal_ball_gfx] - - [auto, c, mac_01_7_bulletin] - - [auto, c, mac_01_8_music_mix] - - [auto, c, mac_01_9_npc] - - [auto, c, mac_01_10_intro_npc] - - [auto, c, mac_01_11_epilogue_npc] - - [auto, c, mac_01_12_intro] - - [auto, c, mac_01_13_foliage] - - start: 0x8091F0 - type: .data - name: mac_01_9_npc - subsegments: - - [0x970C40] - - [0x80BE10, vtx_common, ../../toad_house/blanket] - - [0x80D3F0, gfx_common, ../../toad_house/blanket] - - [0x80D558, rgba16, ../../toad_house/blanket, 16, 32, namespaced] - - [0x80D958] - - [0x81F9C0] - - name: mac_02 - dir: world/area_mac/mac_02 - type: code - start: 0x8232C0 - vram_class: map - subsegments: - - [auto, c, mac_02_0_header] - - [auto, c, mac_02_1_music] - - [auto, c, mac_02_2_main] - - [auto, c, mac_02_3_rooms] - - [auto, c, mac_02_4_foliage] - - [auto, c, mac_02_5_entity] - - [auto, c, mac_02_6_npc] - - [auto, c, mac_02_7_music_mix] - - name: mac_03 - dir: world/area_mac/mac_03 - type: code - start: 0x831800 - vram_class: map - subsegments: - - [auto, c, mac_03_0_header] - - [auto, c, mac_03_1_music] - - [auto, c, mac_03_2_main] - - [auto, c, mac_03_3_train] - - [auto, c, mac_03_4_npc] - - [auto, c, mac_03_5_entity] - - [auto, c, mac_03_6_foliage] - - [auto, c, mac_03_7_oinks] - - [auto, c, mac_03_8_demo] - - name: mac_04 - dir: world/area_mac/mac_04 - type: code - start: 0x842BD0 - vram_class: map - subsegments: - - [auto, c, mac_04_0_header] - - [auto, c, mac_04_1_music] - - [auto, c, mac_04_2_main] - - [auto, c, mac_04_3_rooms] - - [auto, c, mac_04_4_foliage] - - [auto, c, mac_04_5_shop] - - [auto, c, mac_04_6_npc] - - [auto, c, mac_04_7_wish_scene] - - [auto, c, mac_04_8_entity] - - [auto, c, mac_04_9_music_mix] - - name: mac_05 - dir: world/area_mac/mac_05 - type: code - start: 0x852170 - vram_class: map - subsegments: - - [auto, c, mac_05_0_header] - - [auto, c, mac_05_1_music] - - [auto, c, mac_05_2_entity] - - [auto, c, mac_05_3_main] - - [auto, c, mac_05_4_npc] - - [auto, c, mac_05_5_whale] - - [auto, c, mac_05_6_rooms] - - [auto, c, mac_05_7_club64_sign] - - name: mac_06 - dir: world/area_mac/mac_06 - type: code - start: 0x864B40 - vram_class: map - subsegments: - - [auto, c, mac_06_0_header] - - [auto, c, mac_06_1_main] - - [auto, c, mac_06_2_whale] - - [auto, c, mac_06_3_npc] - - name: tik_01 - dir: world/area_tik/tik_01 - type: code - start: 0x8694B0 - vram_class: map - subsegments: - - [auto, c, tik_01_0_header] - - [auto, c, tik_01_1_music] - - [auto, c, tik_01_2_main] - - [auto, c, tik_01_3_drips] - - [auto, c, tik_01_4_entity] - - [auto, c, tik_01_5_npc] - - name: tik_02 - dir: world/area_tik/tik_02 - type: code - start: 0x86C740 - vram_class: map - subsegments: - - [auto, c, tik_02_0_header] - - [auto, c, tik_02_1_music] - - [auto, c, tik_02_2_main] - - [auto, c, tik_02_3_entity] - - [auto, c, tik_02_4_drips] - - [auto, c, tik_02_5_npc] - - name: tik_03 - dir: world/area_tik/tik_03 - type: code - start: 0x86EB00 - vram_class: map - subsegments: - - [auto, c, tik_03_0_header] - - [auto, c, tik_03_1_music] - - [auto, c, tik_03_2_main] - - [auto, c, tik_03_3_drips] - - [auto, c, tik_03_4_platforms] - - [auto, c, tik_03_5_entity] - - [auto, c, tik_03_6_demo] - - name: tik_04 - dir: world/area_tik/tik_04 - type: code - start: 0x871A30 - vram_class: map - subsegments: - - [auto, c, tik_04_0_header] - - [auto, c, tik_04_1_music] - - [auto, c, tik_04_2_main] - - [auto, c, tik_04_3_drips] - - [auto, c, tik_04_4_platforms] - - [auto, c, tik_04_5_npc] - - name: tik_05 - dir: world/area_tik/tik_05 - type: code - start: 0x874DC0 - vram_class: map - subsegments: - - [auto, c, tik_05_0_header] - - [auto, c, tik_05_1_music] - - [auto, c, tik_05_2_main] - - [auto, c, tik_05_3_drips] - - [auto, c, tik_05_4_entity] - - [auto, c, tik_05_5_npc] - - name: tik_06 - dir: world/area_tik/tik_06 - type: code - start: 0x876EE0 - vram_class: map - subsegments: - - [auto, c, tik_06_0_header] - - [auto, c, tik_06_1_music] - - [auto, c, tik_06_2_main] - - [auto, c, tik_06_3_drips] - - [auto, c, tik_06_4_entity] - - name: tik_07 - dir: world/area_tik/tik_07 - type: code - start: 0x879BE0 - vram_class: map - subsegments: - - [auto, c, tik_07_0_header] - - [auto, c, tik_07_1_music] - - [auto, c, tik_07_2_main] - - [auto, c, tik_07_3_entity] - - [auto, c, tik_07_4_drips] - - [auto, c, tik_07_5_platforms] - - [auto, c, tik_07_6_npc] - - name: tik_08 - dir: world/area_tik/tik_08 - type: code - start: 0x87EDF0 - vram_class: map - subsegments: - - [auto, c, tik_08_0_header] - - [auto, c, tik_08_1_music] - - [auto, c, tik_08_2_main] - - [auto, c, tik_08_3_drips] - - [auto, c, tik_08_4_entity] - - [auto, c, tik_08_5_npc] - - name: tik_09 - dir: world/area_tik/tik_09 - type: code - start: 0x8821C0 - vram_class: map - subsegments: - - [auto, c, tik_09_0_header] - - [auto, c, tik_09_1_music] - - [auto, c, tik_09_2_main] - - [auto, c, tik_09_3_drips] - - [auto, c, tik_09_4_entity] - - [auto, c, tik_09_5_npc] - - name: tik_10 - dir: world/area_tik/tik_10 - type: code - start: 0x8863C0 - vram_class: map - subsegments: - - [auto, c, tik_10_0_header] - - [auto, c, tik_10_1_music] - - [auto, c, tik_10_2_main] - - [auto, c, tik_10_3_drips] - - [auto, c, tik_10_4_entity] - - name: tik_12 - dir: world/area_tik/tik_12 - type: code - start: 0x888BD0 - vram_class: map - subsegments: - - [auto, c, tik_12_0_header] - - [auto, c, tik_12_1_music] - - [auto, c, tik_12_2_main] - - [auto, c, tik_12_3_drips] - - [auto, c, tik_12_4_entity] - - [auto, c, tik_12_5_npc] - - name: tik_14 - dir: world/area_tik/tik_14 - type: code - start: 0x88D600 - vram_class: map - subsegments: - - [auto, c, tik_14_0_header] - - [auto, c, tik_14_1_music] - - [auto, c, tik_14_2_main] - - [auto, c, tik_14_3_drips] - - [auto, c, tik_14_4_entity] - - name: tik_15 - dir: world/area_tik/tik_15 - type: code - start: 0x88FBA0 - vram_class: map - subsegments: - - [auto, c, tik_15_0_header] - - [auto, c, tik_15_1_music] - - [auto, c, tik_15_2_main] - - [auto, c, tik_15_3_entity] - - [auto, c, tik_15_4_drips] - - [auto, c, tik_15_5_npc] - - name: tik_17 - dir: world/area_tik/tik_17 - type: code - start: 0x892A20 - vram_class: map - subsegments: - - [auto, c, tik_17_0_header] - - [auto, c, tik_17_1_music] - - [auto, c, tik_17_2_entity] - - [auto, c, tik_17_3_main] - - name: tik_18 - dir: world/area_tik/tik_18 - type: code - start: 0x8956E0 - vram_class: map - subsegments: - - [auto, c, tik_18_0_header] - - [auto, c, tik_18_1_music] - - [auto, c, tik_18_2_main] - - [auto, c, tik_18_3_drips] - - [auto, c, tik_18_4_npc] - - [auto, c, tik_18_5_entity] - - name: tik_19 - dir: world/area_tik/tik_19 - type: code - start: 0x8975E0 - vram_class: map - subsegments: - - [auto, c, tik_19_0_header] - - [auto, c, tik_19_1_music] - - [auto, c, tik_19_2_main] - - [auto, c, tik_19_3_entity] - - name: tik_20 - dir: world/area_tik/tik_20 - type: code - start: 0x89A350 - vram_class: map - subsegments: - - [auto, c, tik_20_0_header] - - [auto, c, tik_20_1_music] - - [auto, c, tik_20_2_main] - - [auto, c, tik_20_3_npc] - - [auto, c, tik_20_4_entity] - - name: tik_21 - dir: world/area_tik/tik_21 - type: code - start: 0x89D7A0 - vram_class: map - subsegments: - - [auto, c, tik_21_0_header] - - [auto, c, tik_21_1_music] - - [auto, c, tik_21_2_main] - - [auto, c, tik_21_3_entity] - - name: tik_22 - dir: world/area_tik/tik_22 - type: code - start: 0x89FEC0 - vram_class: map - subsegments: - - [auto, c, tik_22_0_header] - - [auto, c, tik_22_1_music] - - [auto, c, tik_22_2_main] - - name: tik_23 - dir: world/area_tik/tik_23 - type: code - start: 0x8A23D0 - vram_class: map - subsegments: - - [auto, c, tik_23_0_header] - - [auto, c, tik_23_1_music] - - [auto, c, tik_23_2_main] - - [auto, c, tik_23_3_entity] - - [auto, c, tik_23_4_npc] - - name: tik_24 - dir: world/area_tik/tik_24 - type: code - start: 0x8A5A80 - vram_class: map - subsegments: - - [auto, c, tik_24_0_header] - - [auto, c, tik_24_1_music] - - [auto, c, tik_24_2_main] - - [auto, c, tik_24_3_drips] - - [auto, c, tik_24_4_entity] - - [auto, c, tik_24_5_npc] - - name: tik_25 - dir: world/area_tik/tik_25 - type: code - start: 0x8A7F80 - vram_class: map - subsegments: - - [auto, c, tik_25_0_header] - - [auto, c, tik_25_1_music] - - [auto, c, tik_25_2_main] - - [auto, c, tik_25_3_entity] - - name: kgr_01 - dir: world/area_kgr/kgr_01 - type: code - start: 0x8A9A10 - vram_class: map - subsegments: - - [auto, c, kgr_01_1_main] - - [auto, c, kgr_01_2_wiggle] - - [auto, c, kgr_01_3_extra] - - name: kgr_02 - dir: world/area_kgr/kgr_02 - type: code - start: 0x8AA450 - vram_class: map - subsegments: - - [auto, c, kgr_02_1_main] - - [auto, c, kgr_02_2_unused] - - [auto, c, kgr_02_3_npc] - - [auto, c, kgr_02_4_extra] - - name: kmr_00 - dir: world/area_kmr/kmr_00 - type: code - start: 0x8ABF90 - vram_class: map - subsegments: - - [auto, c, kmr_00_0_header] - - [auto, c, kmr_00_1_music] - - [auto, c, kmr_00_2_main] - - [auto, c, kmr_00_3_revival] - - [auto, c, kmr_00_4_npc] - - [auto, c, kmr_00_5_entity] - - name: kmr_02 - dir: world/area_kmr/kmr_02 - type: code - start: 0x8B0070 - vram_class: map - subsegments: - - [auto, c, kmr_02_0_header] - - [auto, c, kmr_02_1_music] - - [auto, c, kmr_02_2_main] - - [auto, c, kmr_02_3_npc] - - [auto, c, kmr_02_4_rooms_1] - - [auto, c, kmr_02_5_entity] - - [auto, c, kmr_02_6_rooms_2] - - [auto, c, kmr_02_7_kammy] - - [auto, c, kmr_02_8_foliage] - - [auto, c, kmr_02_9_images] - - start: 0x8C7B70 - type: .data - name: kmr_02_9_images - subsegments: - - [0x8C7B70, ci4, heart_block, 32, 32] - - [0x8C7D70, palette, heart_block] - - [0x8C7D90] - - name: kmr_03 - dir: world/area_kmr/kmr_03 - type: code - start: 0x8C7F90 - vram_class: map - subsegments: - - [auto, c, kmr_03_0_header] - - [auto, c, kmr_03_1_music] - - [auto, c, kmr_03_2_main] - - [auto, c, kmr_03_3_npc] - - [auto, c, kmr_03_4_entity] - - [auto, c, kmr_03_5_foliage] - - [auto, c, kmr_03_6_fall_down] - - name: kmr_04 - dir: world/area_kmr/kmr_04 - type: code - start: 0x8CA900 - vram_class: map - subsegments: - - [auto, c, kmr_04_0_header] - - [auto, c, kmr_04_1_music] - - [auto, c, kmr_04_2_main] - - [auto, c, kmr_04_3_npc] - - [auto, c, kmr_04_4_entity] - - [auto, c, kmr_04_5_foliage] - - start: 0x8CC4F0 - type: .data - name: kmr_04_5_foliage - subsegments: - - [0x8CC4F0, ci4, hammer_block_message, 48, 48] - - [0x8CC970, palette, hammer_block_message] - - [0x8CC990] - - name: kmr_05 - dir: world/area_kmr/kmr_05 - type: code - start: 0x8CE070 - vram_class: map - subsegments: - - [auto, c, kmr_05_0_header] - - [auto, c, kmr_05_1_music] - - [auto, c, kmr_05_2_main] - - [auto, c, kmr_05_3_npc] - - [auto, c, kmr_05_4_entity] - - [auto, c, kmr_05_5_foliage] - - name: kmr_06 - dir: world/area_kmr/kmr_06 - type: code - start: 0x8D1510 - vram_class: map - subsegments: - - [auto, c, kmr_06_0_header] - - [auto, c, kmr_06_1_music] - - [auto, c, kmr_06_2_main] - - [auto, c, kmr_06_3_npc] - - [auto, c, kmr_06_4_entity] - - [auto, c, kmr_06_5_sticker_sign] - - name: kmr_07 - dir: world/area_kmr/kmr_07 - type: code - start: 0x8D3DC0 - vram_class: map - subsegments: - - [auto, c, kmr_07_0_header] - - [auto, c, kmr_07_1_music] - - [auto, c, kmr_07_2_main] - - [auto, c, kmr_07_3_npc] - - [auto, c, kmr_07_4_entity] - - name: kmr_09 - dir: world/area_kmr/kmr_09 - type: code - start: 0x8D5E00 - vram_class: map - subsegments: - - [auto, c, kmr_09_0_header] - - [auto, c, kmr_09_1_music] - - [auto, c, kmr_09_2_main] - - [auto, c, kmr_09_3_npc] - - [auto, c, kmr_09_4_entity] - - name: kmr_10 - dir: world/area_kmr/kmr_10 - type: code - start: 0x8D84D0 - vram_class: map - subsegments: - - [auto, c, kmr_10_0_header] - - [auto, c, kmr_10_1_music] - - [auto, c, kmr_10_2_main] - - [auto, c, kmr_10_3_npc] - - [auto, c, kmr_10_4_entity] - - [auto, c, kmr_10_5_foliage] - - name: kmr_11 - dir: world/area_kmr/kmr_11 - type: code - start: 0x8DA100 - vram_class: map - subsegments: - - [auto, c, kmr_11_0_header] - - [auto, c, kmr_11_1_music] - - [auto, c, kmr_11_2_main] - - [auto, c, kmr_11_3_scenes] - - [auto, c, kmr_11_4_npc] - - [auto, c, kmr_11_5_entity] - - [auto, c, kmr_11_6_kammy] - - [auto, c, kmr_11_7_foliage] - - [auto, c, kmr_11_8_fortress_skeleton] - - [auto, c, kmr_11_9_fortress_animation] - - [auto, c, kmr_11_10_bridge_skeleton] - - [auto, c, kmr_11_11_bridge_animation] - - name: kmr_12 - dir: world/area_kmr/kmr_12 - type: code - start: 0x8EB360 - vram_class: map - subsegments: - - [auto, c, kmr_12_0_header] - - [auto, c, kmr_12_1_music] - - [auto, c, kmr_12_2_main] - - [auto, c, kmr_12_3_npc] - - [auto, c, kmr_12_4_entity] - - name: kmr_20 - dir: world/area_kmr/kmr_20 - type: code - start: 0x8EBE20 - vram_class: map - subsegments: - - [auto, c, kmr_20_0_header] - - [auto, c, kmr_20_1_music] - - [auto, c, kmr_20_2_main] - - [auto, c, kmr_20_3_rooms] - - [auto, c, kmr_20_4_documents] - - [auto, c, kmr_20_5_entity] - - [auto, c, kmr_20_6_trees] - - [auto, c, kmr_20_7_bushes] - - [auto, c, kmr_20_8_bed] - - [auto, c, kmr_20_9_npc_scenes] - - [auto, c, kmr_20_10_npc] - - [auto, c, kmr_20_11_npc_intro] - - [auto, c, kmr_20_12_npc_epilogue] - - [auto, c, kmr_20_13_records] - - start: 0x8FEB70 - type: .data - name: kmr_20_13_records - subsegments: - - [0x8FEB70, gfx, records_screen] - - [0x8FEBE0] - - name: kmr_21 - dir: world/area_kmr/kmr_21 - type: code - start: 0x8FEE80 - vram_class: map - subsegments: - - [auto, c, kmr_21_0_header] - - [auto, c, kmr_21_1_main] - - name: kmr_22 - dir: world/area_kmr/kmr_22 - type: code - start: 0x8FF670 - vram_class: map - subsegments: - - [auto, c, kmr_22_0_header] - - [auto, c, kmr_22_1_main] - - [auto, c, kmr_22_2_npc] - - start: 0x900A80 - type: .data - name: kmr_22_2_npc - subsegments: - - [0x900A80] - - [0x900F70, ci4, lava_piranha_vine, 64, 32] - - [0x901370, palette, lava_piranha_vine] - - [0x901570, gfx, lava_piranha_vine] - - [0x901650] - - name: kmr_23 - dir: world/area_kmr/kmr_23 - type: code - start: 0x907A30 - vram_class: map - subsegments: - - [auto, c, kmr_23_0_header] - - [auto, c, kmr_23_1_main] - - [auto, c, kmr_23_2_npc] - - start: 0x909090 - type: .data - name: kmr_23_2_npc - subsegments: - - [0x909090] - - [0x9090F8, ia8, window_ul, 8, 8] - - [0x909138, ia8, window_ur, 8, 8] - - [0x909178, ia8, window_ll, 8, 8] - - [0x9091B8, ia8, window_lr, 8, 8] - - [0x9091F8] - - name: kmr_24 - dir: world/area_kmr/kmr_24 - type: code - start: 0x90B240 - vram_class: map - subsegments: - - [auto, c, kmr_24_0_header] - - [auto, c, kmr_24_1_main] - - name: kmr_30 - dir: world/area_kmr/kmr_30 - type: code - start: 0x90B6D0 - vram_class: map - subsegments: - - [auto, c, kmr_30_0_header] - - [auto, c, kmr_30_1_main] - - [auto, c, kmr_30_2_npc] - - [auto, c, kmr_30_3_the_end] - - name: iwa_00 - dir: world/area_iwa/iwa_00 - type: code - start: 0x90CC40 - vram_class: map - subsegments: - - [auto, c, iwa_00_0_header] - - [auto, c, iwa_00_1_main] - - [auto, c, iwa_00_2_entity] - - [auto, c, iwa_00_3_npc] - - [auto, c, iwa_00_4_slide] - - name: iwa_01 - dir: world/area_iwa/iwa_01 - type: code - start: 0x90F6B0 - vram_class: map - subsegments: - - [auto, c, iwa_01_0_header] - - [auto, c, iwa_01_1_main] - - [auto, c, iwa_01_2_entity] - - [auto, c, iwa_01_3_splash] - - [auto, c, iwa_01_4_npc] - - [auto, c, iwa_01_5_slide] - - start: 0x913070 - type: .data - name: iwa_01_3_splash - subsegments: - - [0x913070, i8, splash, 32, 32] - - [0x913470, vtx, splash] - - [0x9134B0, gfx, splash] - - [0x913578] - - name: iwa_02 - dir: world/area_iwa/iwa_02 - type: code - start: 0x915D70 - vram_class: map - subsegments: - - [auto, c, iwa_02_0_header] - - [auto, c, iwa_02_1_main] - - [auto, c, iwa_02_2_entity] - - [auto, c, iwa_02_3_npc] - - name: iwa_03 - dir: world/area_iwa/iwa_03 - type: code - start: 0x918BB0 - vram_class: map - subsegments: - - [auto, c, iwa_03_0_header] - - [auto, c, iwa_03_1_main] - - [auto, c, iwa_03_2_entity] - - [auto, c, iwa_03_3_npc] - - [auto, c, iwa_03_4_slide] - - name: iwa_04 - dir: world/area_iwa/iwa_04 - type: code - start: 0x91B8E0 - vram_class: map - subsegments: - - [auto, c, iwa_04_0_header] - - [auto, c, iwa_04_1_music] - - [auto, c, iwa_04_2_main] - - [auto, c, iwa_04_3_entity] - - [auto, c, iwa_04_4_npc] - - name: iwa_10 - dir: world/area_iwa/iwa_10 - type: code - start: 0x91E570 - vram_class: map - subsegments: - - [auto, c, iwa_10_0_header] - - [auto, c, iwa_10_1_music] - - [auto, c, iwa_10_2_main] - - [auto, c, iwa_10_3_npc] - - [auto, c, iwa_10_4_train] - - [auto, c, iwa_10_5_entity] - - [auto, c, iwa_10_6_parakarry] - - [auto, c, iwa_10_7_new_partner] - - [auto, c, iwa_10_8_foliage] - - name: iwa_11 - dir: world/area_iwa/iwa_11 - type: code - start: 0x9269F0 - vram_class: map - subsegments: - - [auto, c, iwa_11_0_header] - - [auto, c, iwa_11_1_music] - - [auto, c, iwa_11_2_main] - - [auto, c, iwa_11_3_train] - - [auto, c, iwa_11_4_scenery] - - [auto, c, iwa_11_5_npc] - - name: sbk_00 - dir: world/area_sbk/sbk_00 - type: code - start: 0x929270 - vram_class: map - subsegments: - - [auto, c, sbk_00_0_header] - - [auto, c, sbk_00_1_main] - - [auto, c, sbk_00_2_npc] - - [auto, c, sbk_00_3_entity] - - name: sbk_01 - dir: world/area_sbk/sbk_01 - type: code - start: 0x929A90 - vram_class: map - subsegments: - - [auto, c, sbk_01_1_main] - - [auto, c, sbk_01_2_npc] - - name: sbk_02 #TODO - dir: world/area_sbk/sbk_02 - type: code - start: 0x92A2B0 - vram_class: map - subsegments: - - [auto, c, sbk_02_0_header] - - [auto, c, sbk_02_1_music] - - [auto, c, sbk_02_2_main] - - [auto, c, sbk_02_3_ruins] - - [auto, c, sbk_02_4_npc] - - [auto, c, sbk_02_5_entity] - - name: sbk_03 - dir: world/area_sbk/sbk_03 - type: code - start: 0x92F8B0 - vram_class: map - subsegments: - - [auto, c, sbk_03_1_main] - - [auto, c, sbk_03_2_npc] - - name: sbk_04 - dir: world/area_sbk/sbk_04 - type: code - start: 0x9304D0 - vram_class: map - subsegments: - - [auto, c, sbk_04_1_main] - - [auto, c, sbk_04_2_npc] - - name: sbk_05 - dir: world/area_sbk/sbk_05 - type: code - start: 0x930CF0 - vram_class: map - subsegments: - - [auto, c, sbk_05_1_main] - - [auto, c, sbk_05_2_entity] - - [auto, c, sbk_05_3_npc] - - name: sbk_06 - dir: world/area_sbk/sbk_06 - type: code - start: 0x9325C0 - vram_class: map - subsegments: - - [auto, c, sbk_06_1_main] - - [auto, c, sbk_06_2_npc] - - [auto, c, sbk_06_3_foliage] - - [auto, c, sbk_06_4_entity] - - name: sbk_10 - dir: world/area_sbk/sbk_10 - type: code - start: 0x933C80 - vram_class: map - subsegments: - - [auto, c, sbk_10_1_main] - - [auto, c, sbk_10_2_entity] - - name: sbk_11 - dir: world/area_sbk/sbk_11 - type: code - start: 0x934040 - vram_class: map - subsegments: - - [auto, c, sbk_11_1_main] - - [auto, c, sbk_11_2_npc] - - name: sbk_12 - dir: world/area_sbk/sbk_12 - type: code - start: 0x934D40 - vram_class: map - subsegments: - - [auto, c, sbk_12_1_main] - - [auto, c, sbk_12_2_npc] - - name: sbk_13 - dir: world/area_sbk/sbk_13 - type: code - start: 0x9357E0 - vram_class: map - subsegments: - - [auto, c, sbk_13_1_main] - - [auto, c, sbk_13_2_npc] - - name: sbk_14 - dir: world/area_sbk/sbk_14 - type: code - start: 0x9366E0 - vram_class: map - subsegments: - - [auto, c, sbk_14_1_main] - - [auto, c, sbk_14_2_entity] - - name: sbk_15 - dir: world/area_sbk/sbk_15 - type: code - start: 0x936CD0 - vram_class: map - subsegments: - - [auto, c, sbk_15_1_main] - - [auto, c, sbk_15_2_npc] - - name: sbk_16 - dir: world/area_sbk/sbk_16 - type: code - start: 0x937570 - vram_class: map - subsegments: - - [auto, c, sbk_16_1_main] - - [auto, c, sbk_16_2_foliage] - - name: sbk_20 - dir: world/area_sbk/sbk_20 - type: code - start: 0x938590 - vram_class: map - subsegments: - - [auto, c, sbk_20_1_main] - - [auto, c, sbk_20_2_entity] - - [auto, c, sbk_20_2_npc] - - name: sbk_21 - dir: world/area_sbk/sbk_21 - type: code - start: 0x939560 - vram_class: map - subsegments: - - [auto, c, sbk_21_1_main] - - name: sbk_22 - dir: world/area_sbk/sbk_22 - type: code - start: 0x939930 - vram_class: map - subsegments: - - [auto, c, sbk_22_1_main] - - [auto, c, sbk_22_2_npc] - - [auto, c, sbk_22_3_entity] - - name: sbk_23 - dir: world/area_sbk/sbk_23 - type: code - start: 0x93A760 - vram_class: map - subsegments: - - [auto, c, sbk_23_1_main] - - [auto, c, sbk_23_2_entity] - - name: sbk_24 - dir: world/area_sbk/sbk_24 - type: code - start: 0x93AC30 - vram_class: map - subsegments: - - [auto, c, sbk_24_1_main] - - [auto, c, sbk_24_2_npc] - - [auto, c, sbk_24_3_entity] - - [auto, c, sbk_24_4_foliage] - - name: sbk_25 - dir: world/area_sbk/sbk_25 - type: code - start: 0x93C280 - vram_class: map - subsegments: - - [auto, c, sbk_25_1_main] - - [auto, c, sbk_25_2_npc] - - [auto, c, sbk_25_3_foliage] - - [auto, c, sbk_25_4_entity] - - name: sbk_26 - dir: world/area_sbk/sbk_26 - type: code - start: 0x93DCD0 - vram_class: map - subsegments: - - [auto, c, sbk_26_1_main] - - [auto, c, sbk_26_2_npc] - - [auto, c, sbk_26_3_foliage] - - name: sbk_30 - dir: world/area_sbk/sbk_30 - type: code - start: 0x93F5B0 - vram_class: map - subsegments: - - [auto, c, sbk_30_0_header] - - [auto, c, sbk_30_1_music] - - [auto, c, sbk_30_2_main] - - [auto, c, sbk_30_3_npc] - - [auto, c, sbk_30_4_foliage] - - name: sbk_31 - dir: world/area_sbk/sbk_31 - type: code - start: 0x944000 - vram_class: map - subsegments: - - [auto, c, sbk_31_1_main] - - [auto, c, sbk_31_2_npc] - - name: sbk_32 - dir: world/area_sbk/sbk_32 - type: code - start: 0x944A60 - vram_class: map - subsegments: - - [auto, c, sbk_32_1_main] - - [auto, c, sbk_32_2_npc] - - name: sbk_33 - dir: world/area_sbk/sbk_33 - type: code - start: 0x9459D0 - vram_class: map - subsegments: # unusual organization - - [auto, c, sbk_33_0_header] - - [auto, c, sbk_33_1_entity] - - [auto, c, sbk_33_2_main] - - name: sbk_34 - dir: world/area_sbk/sbk_34 - type: code - start: 0x945ED0 - vram_class: map - subsegments: - - [auto, c, sbk_34_1_main] - - [auto, c, sbk_34_2_npc] - - [auto, c, sbk_34_3_foliage] - - name: sbk_35 - dir: world/area_sbk/sbk_35 - type: code - start: 0x9486B0 - vram_class: map - subsegments: - - [auto, c, sbk_35_1_main] - - [auto, c, sbk_35_2_npc] - - [auto, c, sbk_35_3_foliage] - - name: sbk_36 - dir: world/area_sbk/sbk_36 - type: code - start: 0x949E60 - vram_class: map - subsegments: - - [auto, c, sbk_36_1_main] - - [auto, c, sbk_36_2_foliage] - - [auto, c, sbk_36_3_entity] - - name: sbk_40 - dir: world/area_sbk/sbk_40 - type: code - start: 0x94B3A0 - vram_class: map - subsegments: - - [auto, c, sbk_40_1_main] - - [auto, c, sbk_40_2_npc] - - [auto, c, sbk_40_3_entity] - - name: sbk_41 - dir: world/area_sbk/sbk_41 - type: code - start: 0x94C040 - vram_class: map - subsegments: - - [auto, c, sbk_41_1_main] - - [auto, c, sbk_41_2_entity] - - name: sbk_42 - dir: world/area_sbk/sbk_42 - type: code - start: 0x94C510 - vram_class: map - subsegments: - - [auto, c, sbk_42_1_main] - - [auto, c, sbk_42_2_npc] - - name: sbk_43 - dir: world/area_sbk/sbk_43 - type: code - start: 0x94D170 - vram_class: map - subsegments: - - [auto, c, sbk_43_1_main] - - [auto, c, sbk_43_2_entity] - - name: sbk_44 - dir: world/area_sbk/sbk_44 - type: code - start: 0x94D5A0 - vram_class: map - subsegments: - - [auto, c, sbk_44_1_main] - - [auto, c, sbk_44_2_npc] - - name: sbk_45 - dir: world/area_sbk/sbk_45 - type: code - start: 0x94E4A0 - vram_class: map - subsegments: - - [auto, c, sbk_45_1_main] - - [auto, c, sbk_45_2_entity] - - name: sbk_46 - dir: world/area_sbk/sbk_46 - type: code - start: 0x94E9A0 - vram_class: map - subsegments: - - [auto, c, sbk_46_1_main] - - [auto, c, sbk_46_2_npc] - - [auto, c, sbk_46_3_foliage] - - [auto, c, sbk_46_4_entity] - - name: sbk_50 - dir: world/area_sbk/sbk_50 - type: code - start: 0x950610 - vram_class: map - subsegments: - - [auto, c, sbk_50_1_main] - - name: sbk_51 - dir: world/area_sbk/sbk_51 - type: code - start: 0x950970 - vram_class: map - subsegments: - - [auto, c, sbk_51_1_main] - - [auto, c, sbk_51_2_npc] - - name: sbk_52 - dir: world/area_sbk/sbk_52 - type: code - start: 0x951670 - vram_class: map - subsegments: - - [auto, c, sbk_52_1_main] - - [auto, c, sbk_52_2_entity] - - name: sbk_53 - dir: world/area_sbk/sbk_53 - type: code - start: 0x951AE0 - vram_class: map - subsegments: - - [auto, c, sbk_53_1_main] - - [auto, c, sbk_53_2_npc] - - name: sbk_54 - dir: world/area_sbk/sbk_54 - type: code - start: 0x952580 - vram_class: map - subsegments: - - [auto, c, sbk_54_1_main] - - [auto, c, sbk_54_2_entity] - - name: sbk_55 - dir: world/area_sbk/sbk_55 - type: code - start: 0x952A50 - vram_class: map - subsegments: - - [auto, c, sbk_55_1_main] - - [auto, c, sbk_55_2_npc] - - [auto, c, sbk_55_3_foliage] - - [auto, c, sbk_55_4_entity] - - name: sbk_56 - dir: world/area_sbk/sbk_56 - type: code - start: 0x953FC0 - vram_class: map - subsegments: - - [auto, c, sbk_56_1_main] - - [auto, c, sbk_56_2_entity] - - [auto, c, sbk_56_3_foliage] - - name: sbk_60 - dir: world/area_sbk/sbk_60 - type: code - start: 0x9569F0 - vram_class: map - subsegments: - - [auto, c, sbk_60_1_main] - - [auto, c, sbk_60_2_npc] - - name: sbk_61 - dir: world/area_sbk/sbk_61 - type: code - start: 0x956F90 - vram_class: map - subsegments: - - [auto, c, sbk_61_1_main] - - [auto, c, sbk_61_2_entity] - - name: sbk_62 - dir: world/area_sbk/sbk_62 - type: code - start: 0x957350 - vram_class: map - subsegments: - - [auto, c, sbk_62_1_main] - - [auto, c, sbk_62_2_npc] - - name: sbk_63 - dir: world/area_sbk/sbk_63 - type: code - start: 0x957D70 - vram_class: map - subsegments: - - [auto, c, sbk_63_1_main] - - [auto, c, sbk_63_2_npc] - - name: sbk_64 - dir: world/area_sbk/sbk_64 - type: code - start: 0x958590 - vram_class: map - subsegments: - - [auto, c, sbk_64_1_main] - - [auto, c, sbk_64_2_entity] - - name: sbk_65 - dir: world/area_sbk/sbk_65 - type: code - start: 0x958950 - vram_class: map - subsegments: - - [auto, c, sbk_65_1_main] - - name: sbk_66 - dir: world/area_sbk/sbk_66 - type: code - start: 0x958CB0 - vram_class: map - subsegments: - - [auto, c, sbk_66_1_main] - - [auto, c, sbk_66_2_npc] - - [auto, c, sbk_66_3_foliage] - - [auto, c, sbk_66_4_entity] - - name: sbk_99 - dir: world/area_sbk/sbk_99 - type: code - start: 0x95AEB0 - vram_class: map - subsegments: - - [auto, c, sbk_99_1_main] - - [auto, c, sbk_99_2_entity] - - name: dro_01 - dir: world/area_dro/dro_01 - type: code - start: 0x95B200 - vram_class: map - subsegments: - - [auto, c, dro_01_0_header] - - [auto, c, dro_01_1_music] - - [auto, c, dro_01_2_main] - - [auto, c, dro_01_3_npc] - - [auto, c, dro_01_4_shop] - - [auto, c, dro_01_5_rooms] - - [auto, c, dro_01_6_entity] - - [auto, c, dro_01_7_foliage] - - name: dro_02 - dir: world/area_dro/dro_02 - type: code - start: 0x9691C0 - vram_class: map - subsegments: - - [auto, c, dro_02_0_header] - - [auto, c, dro_02_1_music] - - [auto, c, dro_02_2_entity] - - [auto, c, dro_02_3_main] - - [auto, c, dro_02_4_rooms] - - [auto, c, dro_02_5_npc] - - start: 0x96DFA0 - type: .data - name: dro_02_5_npc - subsegments: - - [0x96DFA0] - - [0x9707A8, ci4, card, 32, 32] - - [0x9709A8, palette, card] - - [0x9709C8, vtx, card_1] - - [0x970A48, vtx, card_2] - - [0x970A88, gfx, card_setup] - - [0x970B78, gfx, card_1] - - [0x970BF8, gfx, card_2] - - [0x970C40] - - [0x971F98] # unmapped vtx/gfx for toad house blanket - - [0x973AE0] - - [0x9780D0] - - name: isk_01 - dir: world/area_isk/isk_01 - type: code - start: 0x978140 - vram_class: map - subsegments: - - [auto, c, isk_01_0_header] - - [auto, c, isk_01_1_music] - - [auto, c, isk_01_2_main] - - [auto, c, isk_01_3_haze] - - [auto, c, isk_01_4_entity] - - name: isk_02 - dir: world/area_isk/isk_02 - type: code - start: 0x978710 - vram_class: map - subsegments: - - [auto, c, isk_02_0_header] - - [auto, c, isk_02_1_main] - - [auto, c, isk_02_2_lock] - - [auto, c, isk_02_3_ambush] - - [auto, c, isk_02_4_entity] - - [auto, c, isk_02_5_npc] - - name: isk_03 - dir: world/area_isk/isk_03 - type: code - start: 0x979E50 - vram_class: map - subsegments: - - [auto, c, isk_03_0_header] - - [auto, c, isk_03_1_main] - - [auto, c, isk_03_2_sand] - - [auto, c, isk_03_3_entity] - - [auto, c, isk_03_4_switch] - - name: isk_04 - dir: world/area_isk/isk_04 - type: code - start: 0x97B630 - vram_class: map - subsegments: - - [auto, c, isk_04_0_header] - - [auto, c, isk_04_1_music] - - [auto, c, isk_04_2_main] - - [auto, c, isk_04_3_obstructions] - - [auto, c, isk_04_4_entity] - - [auto, c, isk_04_5_npc] - - [auto, c, isk_04_6_demo] - - name: isk_05 - dir: world/area_isk/isk_05 - type: code - start: 0x97DAD0 - vram_class: map - subsegments: - - [auto, c, isk_05_0_header] - - [auto, c, isk_05_1_main] - - [auto, c, isk_05_2_entity] - - [auto, c, isk_05_3_npc] - - name: isk_06 - dir: world/area_isk/isk_06 - type: code - start: 0x980A20 - vram_class: map - subsegments: - - [auto, c, isk_06_0_header] - - [auto, c, isk_06_1_main] - - [auto, c, isk_06_2_entity] - - [auto, c, isk_06_3_sand] - - [auto, c, isk_06_4_switch] - - name: isk_07 - dir: world/area_isk/isk_07 - type: code - start: 0x982440 - vram_class: map - subsegments: - - [auto, c, isk_07_0_header] - - [auto, c, isk_07_1_main] - - [auto, c, isk_07_2_entity] - - [auto, c, isk_07_3_npc] - - [auto, c, isk_07_4_stairs] - - [auto, c, isk_07_5_lock] - - [auto, c, isk_07_6_switch] - - [auto, c, isk_07_7_ambush] - - name: isk_08 - dir: world/area_isk/isk_08 - type: code - start: 0x984E30 - vram_class: map - subsegments: - - [auto, c, isk_08_0_header] - - [auto, c, isk_08_1_main] - - [auto, c, isk_08_2_npc] - - [auto, c, isk_08_3_entity] - - name: isk_09 - dir: world/area_isk/isk_09 - type: code - start: 0x9864E0 - vram_class: map - subsegments: - - [auto, c, isk_09_0_header] - - [auto, c, isk_09_1_music] - - [auto, c, isk_09_2_main] - - [auto, c, isk_09_3_entity] - - [auto, c, isk_09_4_stairs] - - [auto, c, isk_09_5_switch] - - name: isk_10 - dir: world/area_isk/isk_10 - type: code - start: 0x988B60 - vram_class: map - subsegments: - - [auto, c, isk_10_0_header] - - [auto, c, isk_10_1_main] - - [auto, c, isk_10_2_entity] - - [auto, c, isk_10_3_bombable] - - name: isk_11 - dir: world/area_isk/isk_11 - type: code - start: 0x98AA10 - vram_class: map - subsegments: - - [auto, c, isk_11_0_header] - - [auto, c, isk_11_1_music] - - [auto, c, isk_11_2_main] - - [auto, c, isk_11_3_entity] - - [auto, c, isk_11_4_scene] - - [auto, c, isk_11_5_puzzle] - - [auto, c, isk_11_6_lock] - - name: isk_12 - dir: world/area_isk/isk_12 - type: code - start: 0x98D640 - vram_class: map - subsegments: - - [auto, c, isk_12_0_header] - - [auto, c, isk_12_1_main] - - [auto, c, isk_12_2_entity] - - [auto, c, isk_12_3_sand] - - [auto, c, isk_12_4_switch] - - name: isk_13 - dir: world/area_isk/isk_13 - type: code - start: 0x98F7E0 - vram_class: map - subsegments: - - [auto, c, isk_13_0_header] - - [auto, c, isk_13_1_main] - - [auto, c, isk_13_2_entity] - - [auto, c, isk_13_3_npc] - - name: isk_14 - dir: world/area_isk/isk_14 - type: code - start: 0x992730 - vram_class: map - subsegments: - - [auto, c, isk_14_0_header] - - [auto, c, isk_14_1_main] - - [auto, c, isk_14_2_entity] - - [auto, c, isk_14_3_npc] - - name: isk_16 - dir: world/area_isk/isk_16 - type: code - start: 0x9951F0 - vram_class: map - subsegments: - - [auto, c, isk_16_0_header] - - [auto, c, isk_16_1_main] - - [auto, c, isk_16_2_npc] - - [auto, c, isk_16_3_boss] - - [auto, c, isk_16_4_entity] - - name: isk_18 - dir: world/area_isk/isk_18 - type: code - start: 0x997F70 - vram_class: map - subsegments: - - [auto, c, isk_18_0_header] - - [auto, c, isk_18_1_main] - - [auto, c, isk_18_2_npc] - - [auto, c, isk_18_3_entity] - - name: isk_19 - dir: world/area_isk/isk_19 - type: code - start: 0x999740 - vram_class: map - subsegments: - - [auto, c, isk_19_0_header] - - [auto, c, isk_19_1_music] - - [auto, c, isk_19_2_main] - - [auto, c, isk_19_3_entity] - - name: trd_00 - dir: world/area_trd/trd_00 - type: code - start: 0x999C70 - vram_class: map - subsegments: - - [auto, c, trd_00_0_header] - - [auto, c, trd_00_1_main] - - [auto, c, trd_00_2_entity] - - [auto, c, trd_00_3_npc] - - name: trd_01 - dir: world/area_trd/trd_01 - type: code - start: 0x99C990 - vram_class: map - subsegments: - - [auto, c, trd_01_0_header] - - [auto, c, trd_01_1_main] - - [auto, c, trd_01_2_entity] - - [auto, c, trd_01_3_npc] - - name: trd_02 - dir: world/area_trd/trd_02 - type: code - start: 0x9A0FE0 - vram_class: map - subsegments: - - [auto, c, trd_02_0_header] - - [auto, c, trd_02_1_main] - - [auto, c, trd_02_2_entity] - - [auto, c, trd_02_3_npc] - - name: trd_03 - dir: world/area_trd/trd_03 - type: code - start: 0x9A4650 - vram_class: map - subsegments: - - [auto, c, trd_03_0_header] - - [auto, c, trd_03_1_main] - - [auto, c, trd_03_2_entity] - - [auto, c, trd_03_3_npc] - - [auto, c, trd_03_4_puzzle] - - name: trd_04 - dir: world/area_trd/trd_04 - type: code - start: 0x9A83F0 - vram_class: map - subsegments: - - [auto, c, trd_04_0_header] - - [auto, c, trd_04_1_main] - - [auto, c, trd_04_2_entity] - - [auto, c, trd_04_3_npc] - - name: trd_05 - dir: world/area_trd/trd_05 - type: code - start: 0x9AE700 - vram_class: map - subsegments: - - [auto, c, trd_05_0_header] - - [auto, c, trd_05_1_main] - - [auto, c, trd_05_2_entity] - - [auto, c, trd_05_3_trap] - - [auto, c, trd_05_4_npc] - - name: trd_06 - dir: world/area_trd/trd_06 - type: code - start: 0x9B1790 - vram_class: map - subsegments: - - [auto, c, trd_06_0_header] - - [auto, c, trd_06_1_main] - - [auto, c, trd_06_2_falling] - - [auto, c, trd_06_3_npc_prisoners] - - [auto, c, trd_06_4_npc_koopa_bros] - - [auto, c, trd_06_5_entity] - - name: trd_07 - dir: world/area_trd/trd_07 - type: code - start: 0x9B6980 - vram_class: map - subsegments: - - [auto, c, trd_07_0_header] - - [auto, c, trd_07_1_main] - - [auto, c, trd_07_2_npc] - - [auto, c, trd_07_3_magic_doors] - - name: trd_08 - dir: world/area_trd/trd_08 - type: code - start: 0x9BB2A0 - vram_class: map - subsegments: - - [auto, c, trd_08_0_header] - - [auto, c, trd_08_1_main] - - [auto, c, trd_08_2_entity] - - [auto, c, trd_08_3_npc] - - name: trd_09 - dir: world/area_trd/trd_09 - type: code - start: 0x9BD660 - vram_class: map - subsegments: - - [auto, c, trd_09_0_header] - - [auto, c, trd_09_1_main] - - [auto, c, trd_09_2_entity] - - [auto, c, trd_09_3_npc] - - [auto, c, trd_09_4_demo] - - name: trd_10 - dir: world/area_trd/trd_10 - type: code - start: 0x9C2910 - vram_class: map - subsegments: - - [auto, c, trd_10_0_header] - - [auto, c, trd_10_1_main] - - [auto, c, trd_10_2_npc] - - [auto, c, trd_10_3_fake_bowser] - - name: nok_01 - dir: world/area_nok/nok_01 - type: code - start: 0x9C53E0 - vram_class: map - subsegments: - - [auto, c, nok_01_0_header] - - [auto, c, nok_01_1_music] - - [auto, c, nok_01_2_main] - - [auto, c, nok_01_3_entity] - - [auto, c, nok_01_4_npc] - - [auto, c, nok_01_5_shop] - - [auto, c, nok_01_6_rooms] - - [auto, c, nok_01_7_radio] - - [auto, c, nok_01_8_foliage] - - name: nok_02 - dir: world/area_nok/nok_02 - type: code - start: 0x9D7020 - vram_class: map - subsegments: - - [auto, c, nok_02_0_header] - - [auto, c, nok_02_1_music] - - [auto, c, nok_02_2_main] - - [auto, c, nok_02_3_entity] - - [auto, c, nok_02_4_rooms] - - [auto, c, nok_02_5_bookshelf] - - [auto, c, nok_02_6_npc] - - [auto, c, nok_02_7_demo] - - [auto, c, nok_02_8_koot_favors] - - [auto, c, nok_02_9_foliage] - - [auto, c, nok_02_10_epilogue] - - name: nok_03 - dir: world/area_nok/nok_03 - type: code - start: 0x9EB7F0 - vram_class: map - subsegments: - - [auto, c, nok_03_0_header] - - [auto, c, nok_03_1_music] - - [auto, c, nok_03_2_main] - - [auto, c, nok_03_3_entity] - - [auto, c, nok_03_4_npc] - - name: nok_04 - dir: world/area_nok/nok_04 - type: code - start: 0x9EDBF0 - vram_class: map - subsegments: - - [auto, c, nok_04_0_header] - - [auto, c, nok_04_1_music] - - [auto, c, nok_04_2_main] - - [auto, c, nok_04_3_entity] - - [auto, c, nok_04_4_npc] - - [auto, c, nok_04_5_new_partner] - - name: nok_11 - dir: world/area_nok/nok_11 - type: code - start: 0x9F4A40 - vram_class: map - subsegments: - - [auto, c, nok_11_0_header] - - [auto, c, nok_11_1_music] - - [auto, c, nok_11_2_main] - - [auto, c, nok_11_3_entity] - - [auto, c, nok_11_4_npc] - - name: nok_12 - dir: world/area_nok/nok_12 - type: code - start: 0x9FA7F0 - vram_class: map - subsegments: - - [auto, c, nok_12_0_header] - - [auto, c, nok_12_1_music] - - [auto, c, nok_12_2_main] - - [auto, c, nok_12_3_entity] - - [auto, c, nok_12_4_bridge] - - [auto, c, nok_12_5_foliage] - - [auto, c, nok_12_6_npc] - - [auto, c, nok_12_7_demo] - - name: nok_13 - dir: world/area_nok/nok_13 - type: code - start: 0xA00600 - vram_class: map - subsegments: - - [auto, c, nok_13_0_header] - - [auto, c, nok_13_1_music] - - [auto, c, nok_13_2_main] - - [auto, c, nok_13_3_entity] - - [auto, c, nok_13_4_npc] - - [auto, c, nok_13_5] - - name: nok_14 - dir: world/area_nok/nok_14 - type: code - start: 0xA02840 - vram_class: map - subsegments: - - [auto, c, nok_14_0_header] - - [auto, c, nok_14_1_music] - - [auto, c, nok_14_2_main] - - [auto, c, nok_14_3_entity] - - [auto, c, nok_14_4_bridge] - - [auto, c, nok_14_5_npc] - - name: nok_15 - dir: world/area_nok/nok_15 - type: code - start: 0xA06F00 - vram_class: map - subsegments: - - [auto, c, nok_15_0_header] - - [auto, c, nok_15_1_music] - - [auto, c, nok_15_2_main] - - [auto, c, nok_15_3_entity] - - [auto, c, nok_15_4_npc] - - [auto, c, nok_15_5_foliage] - - name: hos_00 - dir: world/area_hos/hos_00 - type: code - start: 0xA0BCF0 - vram_class: map - subsegments: - - [auto, c, hos_00_0_header] - - [auto, c, hos_00_1_music] - - [auto, c, hos_00_2_main] - - [auto, c, hos_00_3_unused] - - [auto, c, hos_00_4_npc] - - [auto, c, hos_00_5_entity] - - [auto, c, hos_00_6_scenes] - - [auto, c, hos_00_7_shade_gfx] - - name: hos_01 - dir: world/area_hos/hos_01 - type: code - start: 0xA10880 - vram_class: map - subsegments: - - [auto, c, hos_01_0_header] - - [auto, c, hos_01_1_music] - - [auto, c, hos_01_2_main] - - [auto, c, hos_01_3_model_fx] - - [auto, c, hos_01_4_npc] - - [auto, c, hos_01_5_entity] - - [auto, c, hos_01_6_star_way] - - name: hos_02 - dir: world/area_hos/hos_02 - type: code - start: 0xA16220 - vram_class: map - subsegments: - - [auto, c, hos_02_0_header] - - [auto, c, hos_02_1_music] - - [auto, c, hos_02_2_main] - - [auto, c, hos_02_3_model_fx] - - [auto, c, hos_02_4_unused] - - [auto, c, hos_02_5_npc] - - [auto, c, hos_02_6_descent] - - name: hos_03 - dir: world/area_hos/hos_03 - type: code - start: 0xA1B100 - vram_class: map - subsegments: - - [auto, c, hos_03_0_header] - - [auto, c, hos_03_1_music] - - [auto, c, hos_03_2_main] - - [auto, c, hos_03_3_model_fx] - - [auto, c, hos_03_4_rooms] - - [auto, c, hos_03_5_foliage] - - [auto, c, hos_03_6_npc] - - [auto, c, hos_03_7_shop] - - [auto, c, hos_03_8_entity] - - name: hos_04 - dir: world/area_hos/hos_04 - type: code - start: 0xA26ED0 - vram_class: map - subsegments: - - [auto, c, hos_04_0_header] - - [auto, c, hos_04_1_music] - - [auto, c, hos_04_2_main] - - [auto, c, hos_04_3_fountains] - - [auto, c, hos_04_4_unused] - - [auto, c, hos_04_6_intro] - - [auto, c, hos_04_7_starship] - - [auto, c, hos_04_8_narrator] - - name: hos_05 - dir: world/area_hos/hos_05 - type: code - start: 0xA2A240 - vram_class: map - subsegments: - - [auto, c, hos_05_0_header] - - [auto, c, hos_05_1_music] - - [auto, c, hos_05_2_main] - - [auto, c, hos_05_3_misc] - - [auto, c, hos_05_4_npc] - - [auto, c, hos_05_5_intro] - - [auto, c, hos_05_6_narrator] - - [auto, c, hos_05_7_model_fx] - - [auto, c, hos_05_8_star_ship] - - name: hos_06 - dir: world/area_hos/hos_06 - type: code - start: 0xA394E0 - vram_class: map - subsegments: - - [auto, c, hos_06_0_header] - - [auto, c, hos_06_1_entity] - - [auto, c, hos_06_2_main] - - [auto, c, hos_06_3_merlow] - - [auto, c, hos_06_4_rooms] - - [auto, c, hos_06_5_merluvlee] - - [auto, c, hos_06_6_chest] - - name: hos_10 - dir: world/area_hos/hos_10 - type: code - start: 0xA3F740 - vram_class: map - subsegments: - - [auto, c, hos_10_0_header] - - [auto, c, hos_10_1_music] - - [auto, c, hos_10_2_npc1] - - [auto, c, hos_10_3_npc2] - - [auto, c, hos_10_4_main] - - [auto, c, hos_10_5_intro] - - [auto, c, hos_10_6_pre_title] - - [auto, c, hos_10_7_ending] - - name: hos_20 - dir: world/area_hos/hos_20 - type: code - start: 0xA45930 - vram_class: map - subsegments: - - [auto, c, hos_20_0_header] - - [auto, c, hos_20_1_main] - - [auto, c, hos_20_2_starship] - - name: kpa_01 - dir: world/area_kpa/kpa_01 - type: code - start: 0xA46F60 - vram_class: map - subsegments: - - [auto, c, kpa_01_0_header] - - [auto, c, kpa_01_1_music] - - [auto, c, kpa_01_2_main] - - [auto, c, kpa_01_3_npc] - - [auto, c, kpa_01_4_entity] - - name: kpa_03 - dir: world/area_kpa/kpa_03 - type: code - start: 0xA485C0 - vram_class: map - subsegments: - - [auto, c, kpa_03_0_header] - - [auto, c, kpa_03_1_music] - - [auto, c, kpa_03_2_main] - - [auto, c, kpa_03_3_npc] - - [auto, c, kpa_03_4_entity] - - name: kpa_04 - dir: world/area_kpa/kpa_04 - type: code - start: 0xA4BF60 - vram_class: map - subsegments: - - [auto, c, kpa_04_0_header] - - [auto, c, kpa_04_1_music] - - [auto, c, kpa_04_2_main] - - [auto, c, kpa_04_3_statues] - - name: kpa_08 - dir: world/area_kpa/kpa_08 - type: code - start: 0xA4CA20 - vram_class: map - subsegments: - - [auto, c, kpa_08_0_header] - - [auto, c, kpa_08_1_music] - - [auto, c, kpa_08_2_main] - - [auto, c, kpa_08_3_entity] - - [auto, c, kpa_08_4_npc] - - name: kpa_09 - dir: world/area_kpa/kpa_09 - type: code - start: 0xA4F000 - vram_class: map - subsegments: - - [auto, c, kpa_09_0_header] - - [auto, c, kpa_09_1_music] - - [auto, c, kpa_09_2_main] - - [auto, c, kpa_09_3_entity] - - [auto, c, kpa_09_4_npc] - - name: kpa_10 - dir: world/area_kpa/kpa_10 - type: code - start: 0xA51980 - vram_class: map - subsegments: - - [auto, c, kpa_10_0_header] - - [auto, c, kpa_10_1_music] - - [auto, c, kpa_10_2_main] - - [auto, c, kpa_10_3_npc] - - [auto, c, kpa_10_4_entity] - - name: kpa_11 - dir: world/area_kpa/kpa_11 - type: code - start: 0xA528C0 - vram_class: map - subsegments: - - [auto, c, kpa_11_0_header] - - [auto, c, kpa_11_1_music] - - [auto, c, kpa_11_2_main] - - [auto, c, kpa_11_3_entity] - - [auto, c, kpa_11_4_npc] - - name: kpa_12 - dir: world/area_kpa/kpa_12 - type: code - start: 0xA54950 - vram_class: map - subsegments: - - [auto, c, kpa_12_0_header] - - [auto, c, kpa_12_1_music] - - [auto, c, kpa_12_2_main] - - [auto, c, kpa_12_3_platforms] - - name: kpa_13 - dir: world/area_kpa/kpa_13 - type: code - start: 0xA55F20 - vram_class: map - subsegments: - - [auto, c, kpa_13_0_header] - - [auto, c, kpa_13_1_music] - - [auto, c, kpa_13_2_main] - - [auto, c, kpa_13_3_entity] - - [auto, c, kpa_13_4_platforms] - - name: kpa_14 - dir: world/area_kpa/kpa_14 - type: code - start: 0xA574B0 - vram_class: map - subsegments: - - [auto, c, kpa_14_0_header] - - [auto, c, kpa_14_1_music] - - [auto, c, kpa_14_2_main] - - [auto, c, kpa_14_3_entity] - - [auto, c, kpa_14_4_platforms] - - name: kpa_15 - dir: world/area_kpa/kpa_15 - type: code - start: 0xA59390 - vram_class: map - subsegments: - - [auto, c, kpa_15_0_header] - - [auto, c, kpa_15_1_music] - - [auto, c, kpa_15_2_main] - - [auto, c, kpa_15_3_entity] - - name: kpa_16 - dir: world/area_kpa/kpa_16 - type: code - start: 0xA5A030 - vram_class: map - subsegments: - - [auto, c, kpa_16_0_header] - - [auto, c, kpa_16_1_music] - - [auto, c, kpa_16_2_main] - - [auto, c, kpa_16_3_entity] - - [auto, c, kpa_16_4_npc] - - name: kpa_17 - dir: world/area_kpa/kpa_17 - type: code - start: 0xA5CA20 - vram_class: map - subsegments: - - [auto, c, kpa_17_0_header] - - [auto, c, kpa_17_1_music] - - [auto, c, kpa_17_2_entity] - - [auto, c, kpa_17_3_main] - - [auto, c, kpa_17_4_npc] - - name: kpa_32 - dir: world/area_kpa/kpa_32 - type: code - start: 0xA5E0C0 - vram_class: map - subsegments: - - [auto, c, kpa_32_0_header] - - [auto, c, kpa_32_1_music] - - [auto, c, kpa_32_2_entity] - - [auto, c, kpa_32_3_main] - - name: kpa_33 - dir: world/area_kpa/kpa_33 - type: code - start: 0xA5F080 - vram_class: map - subsegments: - - [auto, c, kpa_33_0_header] - - [auto, c, kpa_33_1_music] - - [auto, c, kpa_33_2_entity] - - [auto, c, kpa_33_3_main] - - name: kpa_40 - dir: world/area_kpa/kpa_40 - type: code - start: 0xA60040 - vram_class: map - subsegments: - - [auto, c, kpa_40_0_header] - - [auto, c, kpa_40_1_music] - - [auto, c, kpa_40_2_main] - - name: kpa_41 - dir: world/area_kpa/kpa_41 - type: code - start: 0xA60470 - vram_class: map - subsegments: - - [auto, c, kpa_41_0_header] - - [auto, c, kpa_41_1_music] - - [auto, c, kpa_41_2_main] - - name: kpa_50 - dir: world/area_kpa/kpa_50 - type: code - start: 0xA609D0 - vram_class: map - subsegments: - - [auto, c, kpa_50_0_header] - - [auto, c, kpa_50_1_music] - - [auto, c, kpa_50_2_main] - - [auto, c, kpa_50_3_npc] - - name: kpa_51 - dir: world/area_kpa/kpa_51 - type: code - start: 0xA64090 - vram_class: map - subsegments: - - [auto, c, kpa_51_0_header] - - [auto, c, kpa_51_1_music] - - [auto, c, kpa_51_2_main] - - [auto, c, kpa_51_3_npc] - - name: kpa_52 - dir: world/area_kpa/kpa_52 - type: code - start: 0xA67100 - vram_class: map - subsegments: - - [auto, c, kpa_52_0_header] - - [auto, c, kpa_52_1_music] - - [auto, c, kpa_52_2_entity] - - [auto, c, kpa_52_3_main] - - [auto, c, kpa_52_4_npc] - - name: kpa_53 - dir: world/area_kpa/kpa_53 - type: code - start: 0xA6ACA0 - vram_class: map - subsegments: - - [auto, c, kpa_53_0_header] - - [auto, c, kpa_53_1_music] - - [auto, c, kpa_53_2_main] - - [auto, c, kpa_53_3_npc] - - [auto, c, kpa_53_4_entity] - - name: kpa_60 - dir: world/area_kpa/kpa_60 - type: code - start: 0xA6CB00 - vram_class: map - subsegments: - - [auto, c, kpa_60_0_header] - - [auto, c, kpa_60_1_music] - - [auto, c, kpa_60_2_entity] - - [auto, c, kpa_60_3_main] - - [auto, c, kpa_60_4_scenes] - - name: kpa_61 - dir: world/area_kpa/kpa_61 - type: code - start: 0xA6E3E0 - vram_class: map - subsegments: - - [auto, c, kpa_61_0_header] - - [auto, c, kpa_61_1_music] - - [auto, c, kpa_61_2_main] - - [auto, c, kpa_61_3_npc] - - [auto, c, kpa_61_4_entity] - - name: kpa_62 - dir: world/area_kpa/kpa_62 - type: code - start: 0xA72220 - vram_class: map - subsegments: - - [auto, c, kpa_62_0_header] - - [auto, c, kpa_62_1_music] - - [auto, c, kpa_62_2_entity] - - [auto, c, kpa_62_3_main] - - name: kpa_63 - dir: world/area_kpa/kpa_63 - type: code - start: 0xA735B0 - vram_class: map - subsegments: - - [auto, c, kpa_63_0_header] - - [auto, c, kpa_63_1_music] - - [auto, c, kpa_63_2_entity] - - [auto, c, kpa_63_3_main] - - [auto, c, kpa_63_4_scenes] - - name: kpa_70 - dir: world/area_kpa/kpa_70 - type: code - start: 0xA74870 - vram_class: map - subsegments: - - [auto, c, kpa_70_0_header] - - [auto, c, kpa_70_1_music] - - [auto, c, kpa_70_2_main] - - [auto, c, kpa_70_3_npc] - - [auto, c, kpa_70_4_chain_skele] - - [auto, c, kpa_70_5_chain_anim] - - name: kpa_81 - dir: world/area_kpa/kpa_81 - type: code - start: 0xA784C0 - vram_class: map - subsegments: - - [auto, c, kpa_81_0_header] - - [auto, c, kpa_81_1_music] - - [auto, c, kpa_81_2_main] - - [auto, c, kpa_81_3_npc] - - name: kpa_82 - dir: world/area_kpa/kpa_82 - type: code - start: 0xA7A500 - vram_class: map - subsegments: - - [auto, c, kpa_82_0_header] - - [auto, c, kpa_82_1_music] - - [auto, c, kpa_82_2_main] - - [auto, c, kpa_82_3_npc] - - name: kpa_83 - dir: world/area_kpa/kpa_83 - type: code - start: 0xA83490 - vram_class: map - subsegments: - - [auto, c, kpa_83_0_header] - - [auto, c, kpa_83_1_music] - - [auto, c, kpa_83_2_main] - - [auto, c, kpa_83_3_npc] - - name: kpa_90 - dir: world/area_kpa/kpa_90 - type: code - start: 0xA867B0 - vram_class: map - subsegments: - - [auto, c, kpa_90_0_header] - - [auto, c, kpa_90_1_music] - - [auto, c, kpa_90_2_main] - - name: kpa_91 - dir: world/area_kpa/kpa_91 - type: code - start: 0xA86A50 - vram_class: map - subsegments: - - [auto, c, kpa_91_0_header] - - [auto, c, kpa_91_1_music] - - [auto, c, kpa_91_2_main] - - [auto, c, kpa_91_3_npc] - - [auto, c, kpa_91_4_entity] - - name: kpa_94 - dir: world/area_kpa/kpa_94 - type: code - start: 0xA8C7C0 - vram_class: map - subsegments: - - [auto, c, kpa_94_0_header] - - [auto, c, kpa_94_1_music] - - [auto, c, kpa_94_2_main] - - name: kpa_95 - dir: world/area_kpa/kpa_95 - type: code - start: 0xA8CA80 - vram_class: map - subsegments: - - [auto, c, kpa_95_0_header] - - [auto, c, kpa_95_1_music] - - [auto, c, kpa_95_2_entity] - - [auto, c, kpa_95_3_main] - - [auto, c, kpa_95_4_npc] - - name: kpa_96 - dir: world/area_kpa/kpa_96 - type: code - start: 0xA927C0 - vram_class: map - subsegments: - - [auto, c, kpa_96_0_header] - - [auto, c, kpa_96_1_music] - - [auto, c, kpa_96_2_main] - - [auto, c, kpa_96_3_npc] - - name: kpa_100 - dir: world/area_kpa/kpa_100 - type: code - start: 0xA93160 - vram_class: map - subsegments: - - [auto, c, kpa_100_0_header] - - [auto, c, kpa_100_1_music] - - [auto, c, kpa_100_2_main] - - [auto, c, kpa_100_3_entity] - - name: kpa_101 - dir: world/area_kpa/kpa_101 - type: code - start: 0xA93440 - vram_class: map - subsegments: - - [auto, c, kpa_101_0_header] - - [auto, c, kpa_101_1_music] - - [auto, c, kpa_101_2_main] - - [auto, c, kpa_101_3_entity] - - name: kpa_102 - dir: world/area_kpa/kpa_102 - type: code - start: 0xA93740 - vram_class: map - subsegments: - - [auto, c, kpa_102_0_header] - - [auto, c, kpa_102_1_music] - - [auto, c, kpa_102_2_main] - - [auto, c, kpa_102_3_npc] - - name: kpa_111 - dir: world/area_kpa/kpa_111 - type: code - start: 0xA99590 - vram_class: map - subsegments: - - [auto, c, kpa_111_0_header] - - [auto, c, kpa_111_1_music] - - [auto, c, kpa_111_2_main] - - [auto, c, kpa_111_3_statues] - - [auto, c, kpa_111_4_npc] - - [auto, c, kpa_111_5_entity] - - name: kpa_112 - dir: world/area_kpa/kpa_112 - type: code - start: 0xA9C990 - vram_class: map - subsegments: - - [auto, c, kpa_112_0_header] - - [auto, c, kpa_112_1_music] - - [auto, c, kpa_112_2_main] - - name: kpa_113 - dir: world/area_kpa/kpa_113 - type: code - start: 0xA9CC30 - vram_class: map - subsegments: - - [auto, c, kpa_113_0_header] - - [auto, c, kpa_113_1_music] - - [auto, c, kpa_113_2_main] - - [auto, c, kpa_113_3_entity] - - [auto, c, kpa_113_4_statues] - - [auto, c, kpa_113_5_npc] - - name: kpa_114 - dir: world/area_kpa/kpa_114 - type: code - start: 0xA9E980 - vram_class: map - subsegments: - - [auto, c, kpa_114_0_header] - - [auto, c, kpa_114_1_music] - - [auto, c, kpa_114_2_main] - - [auto, c, kpa_114_3_entity] - - name: kpa_115 - dir: world/area_kpa/kpa_115 - type: code - start: 0xA9ED40 - vram_class: map - subsegments: - - [auto, c, kpa_115_0_header] - - [auto, c, kpa_115_1_music] - - [auto, c, kpa_115_2_main] - - [auto, c, kpa_115_3_statues] - - [auto, c, kpa_115_4_npc] - - name: kpa_116 - dir: world/area_kpa/kpa_116 - type: code - start: 0xAA1EE0 - vram_class: map - subsegments: - - [auto, c, kpa_116_0_header] - - [auto, c, kpa_116_1_music] - - [auto, c, kpa_116_2_main] - - name: kpa_117 - dir: world/area_kpa/kpa_117 - type: code - start: 0xAA2180 - vram_class: map - subsegments: - - [auto, c, kpa_117_0_header] - - [auto, c, kpa_117_1_music] - - [auto, c, kpa_117_2_main] - - name: kpa_118 - dir: world/area_kpa/kpa_118 - type: code - start: 0xAA23C0 - vram_class: map - subsegments: - - [auto, c, kpa_118_0_header] - - [auto, c, kpa_118_1_music] - - [auto, c, kpa_118_2_main] - - name: kpa_119 - dir: world/area_kpa/kpa_119 - type: code - start: 0xAA2660 - vram_class: map - subsegments: - - [auto, c, kpa_119_0_header] - - [auto, c, kpa_119_1_music] - - [auto, c, kpa_119_2_entity] - - [auto, c, kpa_119_3_main] - - name: kpa_121 - dir: world/area_kpa/kpa_121 - type: code - start: 0xAA28F0 - vram_class: map - subsegments: - - [auto, c, kpa_121_0_header] - - [auto, c, kpa_121_1_music] - - [auto, c, kpa_121_2_main] - - name: kpa_130 - dir: world/area_kpa/kpa_130 - type: code - start: 0xAA2D20 - vram_class: map - subsegments: - - [auto, c, kpa_130_0_header] - - [auto, c, kpa_130_1_music] - - [auto, c, kpa_130_2_main] - - [auto, c, kpa_130_3_npc] - - name: kpa_133 - dir: world/area_kpa/kpa_133 - type: code - start: 0xAA7480 - vram_class: map - subsegments: - - [auto, c, kpa_133_0_header] - - [auto, c, kpa_133_1_music] - - [auto, c, kpa_133_2_main] - - [auto, c, kpa_133_3_entity] - - [auto, c, kpa_133_4_npc] - - [auto, c, kpa_133_5_water] - - [auto, c, kpa_133_6] - - name: kpa_134 - dir: world/area_kpa/kpa_134 - type: code - start: 0xAA8FA0 - vram_class: map - subsegments: - - [auto, c, kpa_134_0_header] - - [auto, c, kpa_134_1_music] - - [auto, c, kpa_134_2_main] - - [auto, c, kpa_134_3_chains] - - [auto, c, kpa_134_4_npc] - - [auto, c, kpa_134_5_panels] - - [auto, c, kpa_134_6_entity] - - name: osr_00 - dir: world/area_osr/osr_00 - type: code - start: 0xAAC830 - vram_class: map - subsegments: - - [auto, c, osr_00_0_header] - - [auto, c, osr_00_1_music] - - [auto, c, osr_00_2_main] - - [auto, c, osr_00_3_npc_intro] - - [auto, c, osr_00_4_npc_epilogue] - - [auto, c, osr_00_5_scenes] - - name: osr_01 - dir: world/area_osr/osr_01 - type: code - start: 0xAAFFF0 - vram_class: map - subsegments: - - [auto, c, osr_01_0_header] - - [auto, c, osr_01_1_music] - - [auto, c, osr_01_2_main] - - [auto, c, osr_01_3_npc] - - name: osr_02 - dir: world/area_osr/osr_02 - type: code - start: 0xAB2170 - vram_class: map - subsegments: - - [auto, c, osr_02_0_header] - - [auto, c, osr_02_1_main] - - [auto, c, osr_02_2_entity] - - [auto, c, osr_02_3_npc] - - [auto, c, osr_02_4_npc_peach] - - name: osr_03 - dir: world/area_osr/osr_03 - type: code - start: 0xAB6290 - vram_class: map - subsegments: - - [auto, c, osr_03_0_header] - - [auto, c, osr_03_1_main] - - [auto, c, osr_03_2_npc] - - [auto, c, osr_03_3_intro] - - [auto, c, osr_03_4_starship] - - [auto, c, osr_03_5_interlude] - - [auto, c, osr_03_6_ending] - - name: osr_04 - dir: world/area_osr/osr_04 - type: code - start: 0xAB92B0 - vram_class: map - subsegments: - - [auto, c, osr_04_0_header] - - [auto, c, osr_04_1_main] - - [auto, c, osr_04_2_assault] - - name: kkj_00 - dir: world/area_kkj/kkj_00 - type: code - start: 0xABB290 - vram_class: map - subsegments: - - [auto, c, kkj_00_0_header] - - [auto, c, kkj_00_1_music] - - [auto, c, kkj_00_2_main] - - [auto, c, kkj_00_3_npc_intro] - - [auto, c, kkj_00_4_scene_intro] - - [auto, c, kkj_00_5_npc_ending] - - [auto, c, kkj_00_6_scene_ending] - - name: kkj_01 - dir: world/area_kkj/kkj_01 - type: code - start: 0xAC5170 - vram_class: map - subsegments: - - [auto, c, kkj_01_0_header] - - [auto, c, kkj_01_1_music] - - [auto, c, kkj_01_2_main] - - [auto, c, kkj_01_3_npc] - - name: kkj_02 - dir: world/area_kkj/kkj_02 - type: code - start: 0xAC8D20 - vram_class: map - subsegments: - - [auto, c, kkj_02_0_header] - - [auto, c, kkj_02_1_music] - - [auto, c, kkj_02_2_main] - - [auto, c, kkj_02_3_npc] - - name: kkj_03 - dir: world/area_kkj/kkj_03 - type: code - start: 0xAC9710 - vram_class: map - subsegments: - - [auto, c, kkj_03_0_header] - - [auto, c, kkj_03_1_music] - - [auto, c, kkj_03_2_main] - - [auto, c, kkj_03_3_npc] - - [auto, c, kkj_03_4_scenes] - - name: kkj_10 - dir: world/area_kkj/kkj_10 - type: code - start: 0xACAB20 - vram_class: map - subsegments: - - [auto, c, kkj_10_0_header] - - [auto, c, kkj_10_1_main] - - [auto, c, kkj_10_2_entity] - - [auto, c, kkj_10_3_npcs_early] - - [auto, c, kkj_10_4_npcs_later] - - name: kkj_11 - dir: world/area_kkj/kkj_11 - type: code - start: 0xACE140 - vram_class: map - subsegments: - - [auto, c, kkj_11_0_header] - - [auto, c, kkj_11_1_main] - - [auto, c, kkj_11_2_entity] - - [auto, c, kkj_11_3_scene] - - [auto, c, kkj_11_4_demo] - - [auto, c, kkj_11_5_npcs_early] - - [auto, c, kkj_11_6_npcs_later] - - name: kkj_12 - dir: world/area_kkj/kkj_12 - type: code - start: 0xAD4090 - vram_class: map - subsegments: - - [auto, c, kkj_12_0_header] - - [auto, c, kkj_12_1_main] - - [auto, c, kkj_12_2_npc] - - name: kkj_13 - dir: world/area_kkj/kkj_13 - type: code - start: 0xAD5ED0 - vram_class: map - subsegments: - - [auto, c, kkj_13_0_header] - - [auto, c, kkj_13_1_music] - - [auto, c, kkj_13_2_main] - - [auto, c, kkj_13_3_npcs_finale] - - [auto, c, kkj_13_4_npcs_intro] - - [auto, c, kkj_13_5_intro_scenes] - - name: kkj_14 - dir: world/area_kkj/kkj_14 - type: code - start: 0xADAEA0 - vram_class: map - subsegments: - - [auto, c, kkj_14_0_header] - - [auto, c, kkj_14_1_music] - - [auto, c, kkj_14_2_main] - - [auto, c, kkj_14_3_interactables] - - [auto, c, kkj_14_4_npc_guards] - - [auto, c, kkj_14_5_npc_ch0] - - [auto, c, kkj_14_6_npc_ch2] - - [auto, c, kkj_14_7_npc_ch7] - - [auto, c, kkj_14_8_chapter0] - - [auto, c, kkj_14_9_chapter1] - - [auto, c, kkj_14_10_chapter2] - - [auto, c, kkj_14_11_chapter3] - - [auto, c, kkj_14_12_chapter4] - - [auto, c, kkj_14_13_chapter5] - - [auto, c, kkj_14_14_chapter6] - - [auto, c, kkj_14_15_chapter7] - - name: kkj_15 - dir: world/area_kkj/kkj_15 - type: code - start: 0xAE5590 - vram_class: map - subsegments: - - [auto, c, kkj_15_0_header] - - [auto, c, kkj_15_1_music] - - [auto, c, kkj_15_2_main] - - [auto, c, kkj_15_3_rotating_wall] - - [auto, c, kkj_15_4_chapter0] - - [auto, c, kkj_15_5_chapter1] - - [auto, c, kkj_15_6_chapter2] - - [auto, c, kkj_15_7_chapter3] - - [auto, c, kkj_15_8_npc_chapter0] - - [auto, c, kkj_15_9_npc_chapter1] - - [auto, c, kkj_15_10_npc_chapter3] - - name: kkj_16 - dir: world/area_kkj/kkj_16 - type: code - start: 0xAED410 - vram_class: map - subsegments: - - [auto, c, kkj_16_0_header] - - [auto, c, kkj_16_1_main] - - [auto, c, kkj_16_2_npcs_early] - - [auto, c, kkj_16_3_npcs_later] - - [auto, c, kkj_16_4_stealth] - - [auto, c, kkj_16_5_entity] - - name: kkj_17 - dir: world/area_kkj/kkj_17 - type: code - start: 0xAF1C60 - vram_class: map - subsegments: - - [auto, c, kkj_17_0_header] - - [auto, c, kkj_17_1_main] - - [auto, c, kkj_17_2_entity] - - [auto, c, kkj_17_3_chest] - - name: kkj_18 - dir: world/area_kkj/kkj_18 - type: code - start: 0xAF2CA0 - vram_class: map - subsegments: - - [auto, c, kkj_18_0_header] - - [auto, c, kkj_18_1_music] - - [auto, c, kkj_18_2_main] - - [auto, c, kkj_18_3_npc] - - [auto, c, kkj_18_4_gourmet] - - name: kkj_19 - dir: world/area_kkj/kkj_19 - type: code - start: 0xAF7950 - vram_class: map - subsegments: - - [auto, c, kkj_19_0_header] - - [auto, c, kkj_19_1_music] - - [auto, c, kkj_19_2_main] - - [auto, c, kkj_19_3_npcs_intro] - - [auto, c, kkj_19_4_npcs_peach] - - [auto, c, kkj_19_5_baking] - - name: kkj_20 - dir: world/area_kkj/kkj_20 - type: code - start: 0xAFDB40 - vram_class: map - subsegments: - - [auto, c, kkj_20_0_header] - - [auto, c, kkj_20_1_music] - - [auto, c, kkj_20_2_main] - - [auto, c, kkj_20_3_entity] - - [auto, c, kkj_20_4_npc] - - name: kkj_21 - dir: world/area_kkj/kkj_21 - type: code - start: 0xB022A0 - vram_class: map - subsegments: - - [auto, c, kkj_21_0_header] - - [auto, c, kkj_21_1_main] - - name: kkj_22 - dir: world/area_kkj/kkj_22 - type: code - start: 0xB024F0 - vram_class: map - subsegments: - - [auto, c, kkj_22_0_header] - - [auto, c, kkj_22_1_music] - - [auto, c, kkj_22_2_main] - - name: kkj_23 - dir: world/area_kkj/kkj_23 - type: code - start: 0xB02880 - vram_class: map - subsegments: - - [auto, c, kkj_23_0_header] - - [auto, c, kkj_23_1_music] - - [auto, c, kkj_23_2_main] - - [auto, c, kkj_23_3_npcs_finale] - - [auto, c, kkj_23_4_npcs_peach] - - [auto, c, kkj_23_5_scene] - - name: kkj_24 - dir: world/area_kkj/kkj_24 - type: code - start: 0xB06570 - vram_class: map - subsegments: - - [auto, c, kkj_24_0_header] - - [auto, c, kkj_24_1_music] - - [auto, c, kkj_24_2_main] - - [auto, c, kkj_24_3_entity] - - name: kkj_25 - dir: world/area_kkj/kkj_25 - type: code - start: 0xB06A00 - vram_class: map - subsegments: - - [auto, c, kkj_25_0_header] - - [auto, c, kkj_25_1_main] - - [auto, c, kkj_25_2_npc_initial] - - [auto, c, kkj_25_3_npc_midpoint] - - [auto, c, kkj_25_4_npc_final] - - [auto, c, kkj_25_5_arena] - - [auto, c, kkj_25_6_peach_free] - - [auto, c, kkj_25_7_kammy_defeated] - - [auto, c, kkj_25_8_bowser_defeated] - - [auto, c, kkj_25_9_entity] - - name: kkj_26 - dir: world/area_kkj/kkj_26 - type: code - start: 0xB13120 - vram_class: map - subsegments: - - [auto, c, kkj_26_0_header] - - [auto, c, kkj_26_1_main] - - [auto, c, kkj_26_2_scenes] - - [auto, c, kkj_26_3_demo] - - name: kkj_27 - dir: world/area_kkj/kkj_27 - type: code - start: 0xB13D70 - vram_class: map - subsegments: - - [auto, c, kkj_27_0_header] - - [auto, c, kkj_27_1_music] - - [auto, c, kkj_27_2_main] - - [auto, c, kkj_27_3_rotating_wall] - - name: kkj_28 - dir: world/area_kkj/kkj_28 - type: code - start: 0xB14EA0 - vram_class: map - subsegments: - - [auto, c, kkj_28_0_header] - - [auto, c, kkj_28_1_main] - - name: kkj_29 - dir: world/area_kkj/kkj_29 - type: code - start: 0xB150B0 - vram_class: map - subsegments: - - [auto, c, kkj_29_0_header] - - [auto, c, kkj_29_1_main] - - [auto, c, kkj_29_2_npc] - - [auto, c, kkj_29_3_quiz] - - name: tst_01 - dir: world/area_tst/tst_01 - type: code - start: 0xB1A900 - vram_class: map - subsegments: - - [auto, c, tst_01_1_main] - - [auto, c, tst_01_2_entity] - - name: tst_02 - dir: world/area_tst/tst_02 - type: code - start: 0xB1AC30 - vram_class: map - subsegments: - - [auto, c, tst_02_1_main] - - [auto, c, tst_02_2_entity] - - name: tst_03 - dir: world/area_tst/tst_03 - type: code - start: 0xB1AF80 - vram_class: map - subsegments: - - [auto, c, tst_03_1_main] - - [auto, c, tst_03_2_entity] - - name: tst_04 - dir: world/area_tst/tst_04 - type: code - start: 0xB1B570 - vram_class: map - subsegments: - - [auto, c, tst_04_1_main] - - [auto, c, tst_04_2_entity] - - [auto, c, tst_04_3_reflection] - - [auto, c, tst_04_4_npc] - - name: tst_10 - dir: world/area_tst/tst_10 - type: code - start: 0xB1C540 - vram_class: map - subsegments: - - [auto, c, tst_10_1_main] - - name: tst_11 - dir: world/area_tst/tst_11 - type: code - start: 0xB1CA50 - vram_class: map - subsegments: - - [auto, c, tst_11_1_main] - - [auto, c, tst_11_2_extra] - - name: tst_12 - dir: world/area_tst/tst_12 - type: code - start: 0xB1D2F0 - vram_class: map - subsegments: - - [auto, c, tst_12_1_main] - - name: tst_13 - dir: world/area_tst/tst_13 - type: code - start: 0xB1D760 - vram_class: map - subsegments: - - [auto, c, tst_13_1_main] - - start: 0xB1DB20 - type: .data - name: tst_13_1_main - subsegments: - - [0xB1DB20] - - [0xB1FA10, vtx, shockwave] - - [0xB1FFC0, gfx, shockwave] - - [0xB20350] - - name: tst_20 - dir: world/area_tst/tst_20 - type: code - start: 0xB20470 - vram_class: map - subsegments: - - [auto, c, tst_20_1_main] - - name: jan_00 - dir: world/area_jan/jan_00 - type: code - start: 0xB20540 - vram_class: map - subsegments: - - [auto, c, jan_00_0_header] - - [auto, c, jan_00_1_main] - - [auto, c, jan_00_2_npc] - - [auto, c, jan_00_3_entity] - - [auto, c, jan_00_4_whale] - - [auto, c, jan_00_5_foliage] - - name: jan_01 - dir: world/area_jan/jan_01 - type: code - start: 0xB28030 - vram_class: map - subsegments: - - [auto, c, jan_01_0_header] - - [auto, c, jan_01_1_music] - - [auto, c, jan_01_2_main] - - [auto, c, jan_01_3_npc] - - [auto, c, jan_01_4_entity] - - [auto, c, jan_01_5_foliage] - - name: jan_02 - dir: world/area_jan/jan_02 - type: code - start: 0xB2C470 - vram_class: map - subsegments: - - [auto, c, jan_02_0_header] - - [auto, c, jan_02_1_music] - - [auto, c, jan_02_2_main] - - [auto, c, jan_02_3_npc] - - [auto, c, jan_02_4_entity] - - [auto, c, jan_02_5_foliage] - - name: jan_03 - dir: world/area_jan/jan_03 - type: code - start: 0xB34BD0 - vram_class: map - subsegments: - - [auto, c, jan_03_0_header] - - [auto, c, jan_03_1_music] - - [auto, c, jan_03_2_main] - - [auto, c, jan_03_3_shop] - - [auto, c, jan_03_4_npc] - - [auto, c, jan_03_5_entity] - - [auto, c, jan_03_6_rooms] - - [auto, c, jan_03_7_foliage] - - name: jan_04 - dir: world/area_jan/jan_04 - type: code - start: 0xB44770 - vram_class: map - subsegments: - - [auto, c, jan_04_0_header] - - [auto, c, jan_04_1_music] - - [auto, c, jan_04_2_main] - - [auto, c, jan_04_3_entity] - - [auto, c, jan_04_4_npc] - - [auto, c, jan_04_5_unused] - - [auto, c, jan_04_6_trees] - - [auto, c, jan_04_7_scenes] - - [auto, c, jan_04_8_treasure] - - [auto, c, jan_04_9_bushes] - - [auto, c, jan_04_10_demo] - - name: jan_05 - dir: world/area_jan/jan_05 - type: code - start: 0xB4AA70 - vram_class: map - subsegments: - - [auto, c, jan_05_0_header] - - [auto, c, jan_05_1_music] - - [auto, c, jan_05_2_main] - - [auto, c, jan_05_3_log] - - [auto, c, jan_05_4_bushes] - - [auto, c, jan_05_5_npc] - - [auto, c, jan_05_6_trees] - - [auto, c, jan_05_7_entity] - - name: jan_06 - dir: world/area_jan/jan_06 - type: code - start: 0xB52830 - vram_class: map - subsegments: - - [auto, c, jan_06_0_header] - - [auto, c, jan_06_1_main] - - [auto, c, jan_06_2_statue] - - [auto, c, jan_06_3_log] - - [auto, c, jan_06_4_trees] - - [auto, c, jan_06_5_entity] - - [auto, c, jan_06_6_npc] - - [auto, c, jan_06_7_bushes] - - name: jan_07 - dir: world/area_jan/jan_07 - type: code - start: 0xB59870 - vram_class: map - subsegments: - - [auto, c, jan_07_0_header] - - [auto, c, jan_07_1_music] - - [auto, c, jan_07_2_main] - - [auto, c, jan_07_3_npc] - - [auto, c, jan_07_4_trees] - - [auto, c, jan_07_5_bushes] - - name: jan_08 - dir: world/area_jan/jan_08 - type: code - start: 0xB5E2B0 - vram_class: map - subsegments: - - [auto, c, jan_08_0_header] - - [auto, c, jan_08_1_music] - - [auto, c, jan_08_2_main] - - [auto, c, jan_08_3_bushes] - - [auto, c, jan_08_4_entity] - - [auto, c, jan_08_5_npc] - - [auto, c, jan_08_6_trees] - - name: jan_09 - dir: world/area_jan/jan_09 - type: code - start: 0xB65AB0 - vram_class: map - subsegments: - - [auto, c, jan_09_0_header] - - [auto, c, jan_09_1_main] - - [auto, c, jan_09_2_bushes] - - [auto, c, jan_09_3_npc] - - [auto, c, jan_09_4_trees] - - [auto, c, jan_09_5_entity] - - name: jan_10 - dir: world/area_jan/jan_10 - type: code - start: 0xB6C390 - vram_class: map - subsegments: - - [auto, c, jan_10_0_header] - - [auto, c, jan_10_1_music] - - [auto, c, jan_10_2_main] - - [auto, c, jan_10_3_npc] - - [auto, c, jan_10_4_log] - - [auto, c, jan_10_5_trees] - - [auto, c, jan_10_6_bushes] - - [auto, c, jan_10_7_entity] - - name: jan_11 - dir: world/area_jan/jan_11 - type: code - start: 0xB70860 - vram_class: map - subsegments: - - [auto, c, jan_11_0_header] - - [auto, c, jan_11_1_music] - - [auto, c, jan_11_2_main] - - [auto, c, jan_11_3_npc] - - name: jan_12 - dir: world/area_jan/jan_12 - type: code - start: 0xB730B0 - vram_class: map - subsegments: - - [auto, c, jan_12_0_header] - - [auto, c, jan_12_1_main] - - [auto, c, jan_12_2_vines] - - [auto, c, jan_12_3_trees] - - [auto, c, jan_12_4_entity] - - [auto, c, jan_12_5_npc] - - name: jan_13 - dir: world/area_jan/jan_13 - type: code - start: 0xB767B0 - vram_class: map - subsegments: - - [auto, c, jan_13_0_header] - - [auto, c, jan_13_1_main] - - [auto, c, jan_13_2_puzzle] - - [auto, c, jan_13_3_trees] - - [auto, c, jan_13_4_entity] - - name: jan_14 - dir: world/area_jan/jan_14 - type: code - start: 0xB7A050 - vram_class: map - subsegments: - - [auto, c, jan_14_0_header] - - [auto, c, jan_14_1_main] - - [auto, c, jan_14_2_vines] - - [auto, c, jan_14_3_trees] - - [auto, c, jan_14_4_npc] - - name: jan_15 - dir: world/area_jan/jan_15 - type: code - start: 0xB7D920 - vram_class: map - subsegments: - - [auto, c, jan_15_0_header] - - [auto, c, jan_15_1_main] - - [auto, c, jan_15_2_npc] - - [auto, c, jan_15_3_trees] - - [auto, c, jan_15_4_entity] - - name: jan_16 - dir: world/area_jan/jan_16 - type: code - start: 0xB80000 - vram_class: map - subsegments: - - [auto, c, jan_16_0_header] - - [auto, c, jan_16_1_music] - - [auto, c, jan_16_2_main] - - [auto, c, jan_16_3_npc] - - [auto, c, jan_16_4_entity] - - [auto, c, jan_16_5_bushes] - - name: jan_17 - dir: world/area_jan/jan_17 - type: code - start: 0xB837C0 - vram_class: map - subsegments: - - [auto, c, jan_17_0_header] - - [auto, c, jan_17_1_music] - - [auto, c, jan_17_2_main] - - [auto, c, jan_17_3_entity] - - name: jan_18 - dir: world/area_jan/jan_18 - type: code - start: 0xB83B90 - vram_class: map - subsegments: - - [auto, c, jan_18_0_header] - - [auto, c, jan_18_1_music] - - [auto, c, jan_18_2_main] - - [auto, c, jan_18_3_entity] - - name: jan_19 - dir: world/area_jan/jan_19 - type: code - start: 0xB83E60 - vram_class: map - subsegments: - - [auto, c, jan_19_0_header] - - [auto, c, jan_19_1_music] - - [auto, c, jan_19_2_main] - - [auto, c, jan_19_3_entity] - - name: jan_22 - dir: world/area_jan/jan_22 - type: code - start: 0xB84180 - vram_class: map - subsegments: - - [auto, c, jan_22_0_header] - - [auto, c, jan_22_1_music] - - [auto, c, jan_22_2_main] - - [auto, c, jan_22_3_npc] - - [auto, c, jan_22_4_entity] - - [auto, c, jan_22_5_zipline] - - [auto, c, jan_22_6_bushes] - - [auto, c, jan_22_7_trees] - - name: jan_23 - dir: world/area_jan/jan_23 - type: code - start: 0xB8FCD0 - vram_class: map - subsegments: - - [auto, c, jan_23_0_header] - - [auto, c, jan_23_1_music] - - [auto, c, jan_23_2_main] - - [auto, c, jan_23_3_npc] - - name: mim_01 - dir: world/area_mim/mim_01 - type: code - start: 0xB93440 - vram_class: map - subsegments: - - [auto, c, mim_01_0_header] - - [auto, c, mim_01_1_music] - - [auto, c, mim_01_2_main] - - [auto, c, mim_01_3_entity] - - [auto, c, mim_01_4_hint] - - [auto, c, mim_01_5_gate] - - [auto, c, mim_01_6_npc] - - name: mim_02 - dir: world/area_mim/mim_02 - type: code - start: 0xB97C00 - vram_class: map - subsegments: - - [auto, c, mim_02_0_header] - - [auto, c, mim_02_1_music] - - [auto, c, mim_02_2_main] - - [auto, c, mim_02_3_npc] - - [auto, c, mim_02_4_gate] - - [auto, c, mim_02_5_hint] - - name: mim_03 - dir: world/area_mim/mim_03 - type: code - start: 0xB9B480 - vram_class: map - subsegments: - - [auto, c, mim_03_0_header] - - [auto, c, mim_03_1_music] - - [auto, c, mim_03_2_main] - - [auto, c, mim_03_3_entity] - - [auto, c, mim_03_4_hint] - - [auto, c, mim_03_5_gate] - - [auto, c, mim_03_6_npc] - - name: mim_04 - dir: world/area_mim/mim_04 - type: code - start: 0xB9D960 - vram_class: map - subsegments: - - [auto, c, mim_04_0_header] - - [auto, c, mim_04_1_music] - - [auto, c, mim_04_2_main] - - [auto, c, mim_04_3_entity] - - [auto, c, mim_04_4_hint] - - [auto, c, mim_04_5_gate] - - [auto, c, mim_04_6_npc] - - name: mim_05 - dir: world/area_mim/mim_05 - type: code - start: 0xBA0730 - vram_class: map - subsegments: - - [auto, c, mim_05_0_header] - - [auto, c, mim_05_1_music] - - [auto, c, mim_05_2_main] - - [auto, c, mim_05_3_entity] - - [auto, c, mim_05_4_hint] - - [auto, c, mim_05_5_gate] - - [auto, c, mim_05_6_npc] - - name: mim_06 - dir: world/area_mim/mim_06 - type: code - start: 0xBA4780 - vram_class: map - subsegments: - - [auto, c, mim_06_0_header] - - [auto, c, mim_06_1_music] - - [auto, c, mim_06_2_main] - - [auto, c, mim_06_3_entity] - - [auto, c, mim_06_4_hint] - - [auto, c, mim_06_5_gate] - - [auto, c, mim_06_6_npc] - - name: mim_07 - dir: world/area_mim/mim_07 - type: code - start: 0xBAA140 - vram_class: map - subsegments: - - [auto, c, mim_07_0_header] - - [auto, c, mim_07_1_music] - - [auto, c, mim_07_2_main] - - [auto, c, mim_07_3_entity] - - [auto, c, mim_07_4_hint] - - [auto, c, mim_07_5_gate] - - [auto, c, mim_07_6_npc] - - name: mim_08 - dir: world/area_mim/mim_08 - type: code - start: 0xBAD940 - vram_class: map - subsegments: - - [auto, c, mim_08_0_header] - - [auto, c, mim_08_1_music] - - [auto, c, mim_08_2_main] - - [auto, c, mim_08_3_entity] - - [auto, c, mim_08_4_gate] - - [auto, c, mim_08_5_npc] - - name: mim_09 - dir: world/area_mim/mim_09 - type: code - start: 0xBB2E00 - vram_class: map - subsegments: - - [auto, c, mim_09_0_header] - - [auto, c, mim_09_1_music] - - [auto, c, mim_09_2_main] - - [auto, c, mim_09_3_entity] - - [auto, c, mim_09_4_hint] - - [auto, c, mim_09_5_gate] - - [auto, c, mim_09_6_npc] - - name: mim_10 - dir: world/area_mim/mim_10 - type: code - start: 0xBB59E0 - vram_class: map - subsegments: - - [auto, c, mim_10_0_header] - - [auto, c, mim_10_1_music] - - [auto, c, mim_10_2_entity] - - [auto, c, mim_10_3_main] - - [auto, c, mim_10_4_npc] - - name: mim_11 - dir: world/area_mim/mim_11 - type: code - start: 0xBB7070 - vram_class: map - subsegments: - - [auto, c, mim_11_0_header] - - [auto, c, mim_11_1_music] - - [auto, c, mim_11_2_main] - - [auto, c, mim_11_3_gate] - - [auto, c, mim_11_4_entity] - - [auto, c, mim_11_5_npc] - - [auto, c, mim_11_6_foliage] - - name: mim_12 - dir: world/area_mim/mim_12 - type: code - start: 0xBBB380 - vram_class: map - subsegments: - - [auto, c, mim_12_0_header] - - [auto, c, mim_12_1_music] - - [auto, c, mim_12_2_entity] - - [auto, c, mim_12_3_main] - - [auto, c, mim_12_4_npc] - - [auto, c, mim_12_5_gate] - - name: obk_01 - dir: world/area_obk/obk_01 - type: code - start: 0xBBD1A0 - vram_class: map - subsegments: - - [auto, c, obk_01_0_header] - - [auto, c, obk_01_1_music] - - [auto, c, obk_01_2_main] - - [auto, c, obk_01_3_chandelier] - - [auto, c, obk_01_4_portrait] - - [auto, c, obk_01_5_jump_scare] - - [auto, c, obk_01_6_npc] - - [auto, c, obk_01_7_entity] - - name: obk_02 - dir: world/area_obk/obk_02 - type: code - start: 0xBC2A90 - vram_class: map - subsegments: - - [auto, c, obk_02_0_header] - - [auto, c, obk_02_1_music] - - [auto, c, obk_02_2_main] - - [auto, c, obk_02_3_npc] - - [auto, c, obk_02_4_bombable] - - [auto, c, obk_02_5_clock] - - [auto, c, obk_02_6_entity] - - name: obk_03 - dir: world/area_obk/obk_03 - type: code - start: 0xBC4280 - vram_class: map - subsegments: - - [auto, c, obk_03_0_header] - - [auto, c, obk_03_1_music] - - [auto, c, obk_03_2_main] - - [auto, c, obk_03_3_shop] - - [auto, c, obk_03_4_entity] - - [auto, c, obk_03_5_stairs] - - [auto, c, obk_03_6_npc] - - [auto, c, obk_03_7_rocking_chair] - - name: obk_04 - dir: world/area_obk/obk_04 - type: code - start: 0xBC7E60 - vram_class: map - subsegments: - - [auto, c, obk_04_0_header] - - [auto, c, obk_04_1_music] - - [auto, c, obk_04_2_entity] - - [auto, c, obk_04_3_npc] - - [auto, c, obk_04_4_main] - - [auto, c, obk_04_5_hole] - - [auto, c, obk_04_6_game] - - name: obk_05 - dir: world/area_obk/obk_05 - type: code - start: 0xBCD060 - vram_class: map - subsegments: - - [auto, c, obk_05_0_header] - - [auto, c, obk_05_1_music] - - [auto, c, obk_05_2_main] - - [auto, c, obk_05_3_rocking_chair] - - [auto, c, obk_05_4_hole] - - [auto, c, obk_05_5_npc] - - [auto, c, obk_05_6_entity] - - name: obk_06 - dir: world/area_obk/obk_06 - type: code - start: 0xBCE690 - vram_class: map - subsegments: - - [auto, c, obk_06_0_header] - - [auto, c, obk_06_1_music] - - [auto, c, obk_06_2_main] - - [auto, c, obk_06_3_bombable] - - [auto, c, obk_06_4_entity] - - name: obk_07 - dir: world/area_obk/obk_07 - type: code - start: 0xBCEBF0 - vram_class: map - subsegments: - - [auto, c, obk_07_0_header] - - [auto, c, obk_07_1_music] - - [auto, c, obk_07_2_main] - - [auto, c, obk_07_3_entity] - - [auto, c, obk_07_4_fireplace] - - [auto, c, obk_07_5_npc] - - [auto, c, obk_07_6_phonograph] - - name: obk_08 - dir: world/area_obk/obk_08 - type: code - start: 0xBD3870 - vram_class: map - subsegments: - - [auto, c, obk_08_0_header] - - [auto, c, obk_08_1_music] - - [auto, c, obk_08_2_main] - - [auto, c, obk_08_3_cabinets] - - [auto, c, obk_08_4_entity] - - [auto, c, obk_08_5_npc] - - [auto, c, obk_08_6_game] - - name: obk_09 - dir: world/area_obk/obk_09 - type: code - start: 0xBDA7B0 - vram_class: map - subsegments: - - [auto, c, obk_09_0_header] - - [auto, c, obk_09_1_music] - - [auto, c, obk_09_2_main] - - [auto, c, obk_09_3_meet_bow] - - [auto, c, obk_09_4_npc] - - [auto, c, obk_09_5_new_partner] - - [auto, c, obk_09_6_epilogue] - - name: arn_02 - dir: world/area_arn/arn_02 - type: code - start: 0xBDD1B0 - vram_class: map - subsegments: - - [auto, c, arn_02_0_header] - - [auto, c, arn_02_1_music] - - [auto, c, arn_02_2_main] - - [auto, c, arn_02_3_entity] - - [auto, c, arn_02_4_npc] - - name: arn_03 - dir: world/area_arn/arn_03 - type: code - start: 0xBDED90 - vram_class: map - subsegments: - - [auto, c, arn_03_0_header] - - [auto, c, arn_03_1_music] - - [auto, c, arn_03_2_main] - - [auto, c, arn_03_3_npc] - - [auto, c, arn_03_4_entity] - - name: arn_04 - dir: world/area_arn/arn_04 - type: code - start: 0xBE37B0 - vram_class: map - subsegments: - - [auto, c, arn_04_0_header] - - [auto, c, arn_04_1_music] - - [auto, c, arn_04_2_main] - - [auto, c, arn_04_3_npc] - - [auto, c, arn_04_4_entity] - - name: arn_05 - dir: world/area_arn/arn_05 - type: code - start: 0xBE7BE0 - vram_class: map - subsegments: - - [auto, c, arn_05_0_header] - - [auto, c, arn_05_1_music] - - [auto, c, arn_05_2_main] - - [auto, c, arn_05_3_npc] - - [auto, c, arn_05_4_entity] - - name: arn_07 - dir: world/area_arn/arn_07 - type: code - start: 0xBECDF0 - vram_class: map - subsegments: - - [auto, c, arn_07_0_header] - - [auto, c, arn_07_1_music] - - [auto, c, arn_07_2_main] - - [auto, c, arn_07_3_windmill] - - [auto, c, arn_07_4_entity] - - [auto, c, arn_07_5_npc] - - name: arn_08 - dir: world/area_arn/arn_08 - type: code - start: 0xBF47A0 - vram_class: map - subsegments: - - [auto, c, arn_08_0_header] - - [auto, c, arn_08_1_music] - - [auto, c, arn_08_2_main] - - [auto, c, arn_08_3_well] - - [auto, c, arn_08_4_gears] - - [auto, c, arn_08_5_demo] - - [auto, c, arn_08_6_npc] - - [auto, c, arn_08_7_entity] - - name: arn_09 - dir: world/area_arn/arn_09 - type: code - start: 0xBF6060 - vram_class: map - subsegments: - - [auto, c, arn_09_0_header] - - [auto, c, arn_09_1_music] - - [auto, c, arn_09_2_main] - - [auto, c, arn_09_3_entity] - - [auto, c, arn_09_4_launch] - - [auto, c, arn_09_5_npc] - - name: arn_10 - dir: world/area_arn/arn_10 - type: code - start: 0xBF6A00 - vram_class: map - subsegments: - - [auto, c, arn_10_0_header] - - [auto, c, arn_10_1_music] - - [auto, c, arn_10_2_main] - - [auto, c, arn_10_3_npc] - - [auto, c, arn_10_4_entity] - - name: arn_11 - dir: world/area_arn/arn_11 - type: code - start: 0xBF7680 - vram_class: map - subsegments: - - [auto, c, arn_11_0_header] - - [auto, c, arn_11_1_music] - - [auto, c, arn_11_2_main] - - [auto, c, arn_11_3_npc] - - name: arn_12 - dir: world/area_arn/arn_12 - type: code - start: 0xBF8790 - vram_class: map - subsegments: - - [auto, c, arn_12_0_header] - - [auto, c, arn_12_1_music] - - [auto, c, arn_12_2_main] - - [auto, c, arn_12_3_npc] - - [auto, c, arn_12_4_entity] - - name: arn_13 - dir: world/area_arn/arn_13 - type: code - start: 0xBF9410 - vram_class: map - subsegments: - - [auto, c, arn_13_0_header] - - [auto, c, arn_13_1_music] - - [auto, c, arn_13_2_main] - - [auto, c, arn_13_3_npc] - - [auto, c, arn_13_4_entity] - - name: dgb_00 - dir: world/area_dgb/dgb_00 - type: code - start: 0xBFA0A0 - vram_class: map - subsegments: - - [auto, c, dgb_00_0_header] - - [auto, c, dgb_00_1_music] - - [auto, c, dgb_00_2_main] - - [auto, c, dgb_00_3_npc] - - [auto, c, dgb_00_4_entity] - - name: dgb_01 - dir: world/area_dgb/dgb_01 - type: code - start: 0xBFD880 - vram_class: map - subsegments: - - [auto, c, dgb_01_0_header] - - [auto, c, dgb_01_1_music] - - [auto, c, dgb_01_2_main] - - [auto, c, dgb_01_3_bridges] - - [auto, c, dgb_01_4_entity] - - [auto, c, dgb_01_5_npc] - - [auto, c, dgb_01_6_img0] - - [auto, c, dgb_01_6_img1] - - [auto, c, dgb_01_6_img2] - - [auto, c, dgb_01_6_img3] - - [auto, c, dgb_01_6_img4] - - [auto, c, dgb_01_6_img5] - - [auto, c, dgb_01_6_img6] - - [auto, c, dgb_01_6_img7] - - [auto, c, dgb_01_7] - - start: 0xC047F0 - type: .data - name: dgb_01_6_img0 - subsegments: - - [0xC047F0, rgba16, img0, 64, 32] - - [0xC057F0, gfx, img0] - - start: 0xC05870 - type: .data - name: dgb_01_6_img1 - subsegments: - - [0xC05870, rgba16, img1, 64, 32] - - [0xC06870, gfx, img1] - - start: 0xC068F0 - type: .data - name: dgb_01_6_img2 - subsegments: - - [0xC068F0, rgba16, img2, 32, 32] - - [0xC070F0, gfx, img2] - - start: 0xC07170 - type: .data - name: dgb_01_6_img3 - subsegments: - - [0xC07170, rgba16, img3, 16, 32] - - [0xC07570, gfx, img3] - - start: 0xC075F0 - type: .data - name: dgb_01_6_img4 - subsegments: - - [0xC075F0, rgba16, img4, 16, 32] - - [0xC079F0, gfx, img4] - - start: 0xC07A70 - type: .data - name: dgb_01_6_img5 - subsegments: - - [0xC07A70, rgba16, img5, 16, 32] - - [0xC07E70, gfx, img5] - - start: 0xC07EF0 - type: .data - name: dgb_01_6_img6 - subsegments: - - [0xC07EF0, rgba16, img6, 32, 32] - - [0xC086F0, gfx, img6] - - start: 0xC08770 - type: .data - name: dgb_01_6_img7 - subsegments: - - [0xC08770, rgba16, img7, 32, 32] - - [0xC08F70, gfx, img7] - - [0xC08FF0, .data, dgb_01_7] # TODO needs additioanl cleanup and gfx splitting - - [0xC20C70] - - name: dgb_01_smash_bridges # DMAd at the beginning of tubba blubba's castle (bridge cutscene) - type: code - dir: world/area_dgb - start: 0xC20F40 - vram_class: dgb_01_smash_bridges - subsegments: - - [auto, c, dgb_01_smash_bridges] - - start: 0xC20F40 - type: .data - name: dgb_01_smash_bridges - subsegments: - - [0xC20F40, vtx, vtx/C20F40] - - [0xC21100, vtx, vtx/C21100] - - [0xC21130, vtx, vtx/C21130] - - [0xC211E0, vtx, vtx/C211E0] - - [0xC211F0, vtx, vtx/C211F0] - - [0xC21240, vtx, vtx/C21240] - - [0xC21360, vtx, vtx/C21360] - - [0xC213C0, vtx, vtx/C213C0] - - [0xC215A0, vtx, vtx/C215A0] - - [0xC21700, vtx, vtx/C21700] - - [0xC21770, vtx, vtx/C21770] - - [0xC21810, vtx, vtx/C21810] - - [0xC21930, vtx, vtx/C21930] - - [0xC21AE0, vtx, vtx/C21AE0] - - [0xC21B20, vtx, vtx/C21B20] - - [0xC21BD0, vtx, vtx/C21BD0] - - [0xC21C90, vtx, vtx/C21C90] - - [0xC21D30, vtx, vtx/C21D30] - - [0xC21DD0, vtx, vtx/C21DD0] - - [0xC21E00, vtx, vtx/C21E00] - - [0xC21F30, vtx, vtx/C21F30] - - [0xC22050, vtx, vtx/C22050] - - [0xC22190, vtx, vtx/C22190] - - [0xC222D0, vtx, vtx/C222D0] - - [0xC22330, vtx, vtx/C22330] - - [0xC224A0, vtx, vtx/C224A0] - - [0xC224E0, vtx, vtx/C224E0] - - [0xC22510, vtx, vtx/C22510] - - [0xC22620, vtx, vtx/C22620] - - [0xC22780, vtx, vtx/C22780] - - [0xC22810, vtx, vtx/C22810] - - [0xC22870, vtx, vtx/C22870] - - [0xC228F0, vtx, vtx/C228F0] - - [0xC22950, vtx, vtx/C22950] - - [0xC229F0, vtx, vtx/C229F0] - - [0xC22B00, vtx, vtx/C22B00] - - [0xC22C00, vtx, vtx/C22C00] - - [0xC22E00, vtx, vtx/C22E00] - - [0xC22EC0, vtx, vtx/C22EC0] - - [0xC230A0, vtx, vtx/C230A0] - - [0xC23240, vtx, vtx/C23240] - - [0xC23260, vtx, vtx/C23260] - - [0xC232A0, vtx, vtx/C232A0] - - [0xC23330, vtx, vtx/C23330] - - [0xC233D0, vtx, vtx/C233D0] - - [0xC23480, vtx, vtx/C23480] - - [0xC234B0, vtx, vtx/C234B0] - - [0xC235C0, vtx, vtx/C235C0] - - [0xC236E0, vtx, vtx/C236E0] - - [0xC23810, vtx, vtx/C23810] - - [0xC238B0, vtx, vtx/C238B0] - - [0xC239D0, vtx, vtx/C239D0] - - [0xC23A70, vtx, vtx/C23A70] - - [0xC23B70, vtx, vtx/C23B70] - - [0xC23BA0, vtx, vtx/C23BA0] - - [0xC23C70, vtx, vtx/C23C70] - - [0xC23C90, vtx, vtx/C23C90] - - [0xC23CE0, vtx, vtx/C23CE0] - - [0xC23D20, vtx, vtx/C23D20] - - [0xC23D60, vtx, vtx/C23D60] - - [0xC23DD0, vtx, vtx/C23DD0] - - [0xC23E00, vtx, vtx/C23E00] - - [0xC23E20, vtx, vtx/C23E20] - - [0xC23E50, vtx, vtx/C23E50] - - [0xC23F10, vtx, vtx/C23F10] - - [0xC23FD0, vtx, vtx/C23FD0] - - [0xC240D0, vtx, vtx/C240D0] - - [0xC241D0, vtx, vtx/C241D0] - - [0xC24350, vtx, vtx/C24350] - - [0xC24510, vtx, vtx/C24510] - - [0xC24540, vtx, vtx/C24540] - - [0xC24600, vtx, vtx/C24600] - - [0xC24690, vtx, vtx/C24690] - - [0xC24720, vtx, vtx/C24720] - - [0xC24730, vtx, vtx/C24730] - - [0xC24840, vtx, vtx/C24840] - - [0xC24960, vtx, vtx/C24960] - - [0xC24980, vtx, vtx/C24980] - - [0xC24AD0, vtx, vtx/C24AD0] - - [0xC24AF0, vtx, vtx/C24AF0] - - [0xC24CD0, vtx, vtx/C24CD0] - - [0xC24EB0, vtx, vtx/C24EB0] - - [0xC24F30, vtx, vtx/C24F30] - - [0xC24FB0, vtx, vtx/C24FB0] - - [0xC25050, vtx, vtx/C25050] - - [0xC25250, vtx, vtx/C25250] - - [0xC25310, vtx, vtx/C25310] - - [0xC25350, vtx, vtx/C25350] - - [0xC25500, vtx, vtx/C25500] - - [0xC25600, vtx, vtx/C25600] - - [0xC256D0, vtx, vtx/C256D0] - - [0xC25710, vtx, vtx/C25710] - - [0xC257D0, vtx, vtx/C257D0] - - [0xC257F0, vtx, vtx/C257F0] - - [0xC25900, vtx, vtx/C25900] - - [0xC25950, vtx, vtx/C25950] - - [0xC25A30, vtx, vtx/C25A30] - - [0xC25AB0, vtx, vtx/C25AB0] - - [0xC25B30, vtx, vtx/C25B30] - - [0xC25BD0, vtx, vtx/C25BD0] - - [0xC25C00, vtx, vtx/C25C00] - - [0xC25C20, vtx, vtx/C25C20] - - [0xC25C80, vtx, vtx/C25C80] - - [0xC25CF0, vtx, vtx/C25CF0] - - [0xC25D30, vtx, vtx/C25D30] - - [0xC25DA0, vtx, vtx/C25DA0] - - [0xC25DD0, vtx, vtx/C25DD0] - - [0xC25EA0, vtx, vtx/C25EA0] - - [0xC25F00, vtx, vtx/C25F00] - - [0xC25F90, vtx, vtx/C25F90] - - [0xC26040, vtx, vtx/C26040] - - [0xC26090, vtx, vtx/C26090] - - [0xC26130, vtx, vtx/C26130] - - [0xC26250, vtx, vtx/C26250] - - [0xC26290, vtx, vtx/C26290] - - [0xC262D0, vtx, vtx/C262D0] - - [0xC26310, vtx, vtx/C26310] - - [0xC26350, vtx, vtx/C26350] - - [0xC26390, vtx, vtx/C26390] - - [0xC263D0, vtx, vtx/C263D0] - - [0xC26410, vtx, vtx/C26410] - - [0xC26450, vtx, vtx/C26450] - - [0xC26490, vtx, vtx/C26490] - - [0xC264D0, vtx, vtx/C264D0] - - [0xC26510, vtx, vtx/C26510] - - [0xC26550, vtx, vtx/C26550] - - [0xC26590, vtx, vtx/C26590] - - [0xC265D0, vtx, vtx/C265D0] - - [0xC26610, vtx, vtx/C26610] - - [0xC26650, vtx, vtx/C26650] - - [0xC26690, vtx, vtx/C26690] - - [0xC266D0, vtx, vtx/C266D0] - - [0xC26710, vtx, vtx/C26710] - - [0xC26750, vtx, vtx/C26750] - - [0xC26890, vtx, vtx/C26890] - - [0xC26A60, vtx, vtx/C26A60] - - [0xC26AE0, vtx, vtx/C26AE0] - - [0xC26CC0, vtx, vtx/C26CC0] - - [0xC26EB0, vtx, vtx/C26EB0] - - [0xC26F40, vtx, vtx/C26F40] - - [0xC26FB0, vtx, vtx/C26FB0] - - [0xC27110, vtx, vtx/C27110] - - [0xC27180, vtx, vtx/C27180] - - [0xC27220, vtx, vtx/C27220] - - [0xC27300, vtx, vtx/C27300] - - [0xC273A0, vtx, vtx/C273A0] - - [0xC27460, vtx, vtx/C27460] - - [0xC27580, vtx, vtx/C27580] - - [0xC27740, vtx, vtx/C27740] - - [0xC27770, vtx, vtx/C27770] - - [0xC27880, vtx, vtx/C27880] - - [0xC27A40, vtx, vtx/C27A40] - - [0xC27A70, vtx, vtx/C27A70] - - [0xC27B80, vtx, vtx/C27B80] - - [0xC27D60, vtx, vtx/C27D60] - - [0xC27F20, vtx, vtx/C27F20] - - [0xC27FC0, vtx, vtx/C27FC0] - - [0xC27FE0, vtx, vtx/C27FE0] - - [0xC28080, vtx, vtx/C28080] - - [0xC28110, vtx, vtx/C28110] - - [0xC28190, vtx, vtx/C28190] - - [0xC281B0, vtx, vtx/C281B0] - - [0xC281E0, vtx, vtx/C281E0] - - [0xC282D0, vtx, vtx/C282D0] - - [0xC282F0, vtx, vtx/C282F0] - - [0xC28310, vtx, vtx/C28310] - - [0xC28420, vtx, vtx/C28420] - - [0xC284F0, vtx, vtx/C284F0] - - [0xC28550, vtx, vtx/C28550] - - [0xC28690, vtx, vtx/C28690] - - [0xC28720, vtx, vtx/C28720] - - [0xC287A0, vtx, vtx/C287A0] - - [0xC28890, vtx, vtx/C28890] - - [0xC28970, vtx, vtx/C28970] - - [0xC28A70, vtx, vtx/C28A70] - - [0xC28BB0, vtx, vtx/C28BB0] - - [0xC28D90, vtx, vtx/C28D90] - - [0xC28F70, vtx, vtx/C28F70] - - [0xC29150, vtx, vtx/C29150] - - [0xC29330, vtx, vtx/C29330] - - [0xC29470, vtx, vtx/C29470] - - [0xC294A0, vtx, vtx/C294A0] - - [0xC294F0, vtx, vtx/C294F0] - - [0xC29540, vtx, vtx/C29540] - - [0xC29570, vtx, vtx/C29570] - - [0xC295B0, vtx, vtx/C295B0] - - [0xC29630, vtx, vtx/C29630] - - [0xC29650, vtx, vtx/C29650] - - [0xC296C0, vtx, vtx/C296C0] - - [0xC29750, vtx, vtx/C29750] - - [0xC297F0, vtx, vtx/C297F0] - - [0xC298E0, vtx, vtx/C298E0] - - [0xC29A40, vtx, vtx/C29A40] - - [0xC29AB0, vtx, vtx/C29AB0] - - [0xC29BB0, vtx, vtx/C29BB0] - - [0xC29CD0, vtx, vtx/C29CD0] - - [0xC29E00, vtx, vtx/C29E00] - - [0xC29F50, vtx, vtx/C29F50] - - [0xC2A080, vtx, vtx/C2A080] - - [0xC2A180, vtx, vtx/C2A180] - - [0xC2A2C0, vtx, vtx/C2A2C0] - - [0xC2A3C0, vtx, vtx/C2A3C0] - - [0xC2A540, vtx, vtx/C2A540] - - [0xC2A700, vtx, vtx/C2A700] - - [0xC2A740, vtx, vtx/C2A740] - - [0xC2A790, vtx, vtx/C2A790] - - [0xC2A8D0, vtx, vtx/C2A8D0] - - [0xC2AAB0, vtx, vtx/C2AAB0] - - [0xC2AC90, vtx, vtx/C2AC90] - - [0xC2AD20, vtx, vtx/C2AD20] - - [0xC2AD70, vtx, vtx/C2AD70] - - [0xC2AE50, vtx, vtx/C2AE50] - - [0xC2AE70, vtx, vtx/C2AE70] - - [0xC2AEB0, vtx, vtx/C2AEB0] - - [0xC2AF60, vtx, vtx/C2AF60] - - [0xC2AF80, vtx, vtx/C2AF80] - - [0xC2B010, vtx, vtx/C2B010] - - [0xC2B050, vtx, vtx/C2B050] - - [0xC2B220, vtx, vtx/C2B220] - - [0xC2B250, vtx, vtx/C2B250] - - [0xC2B2D0, vtx, vtx/C2B2D0] - - [0xC2B340, vtx, vtx/C2B340] - - [0xC2B3C0, vtx, vtx/C2B3C0] - - [0xC2B3E0, vtx, vtx/C2B3E0] - - [0xC2B410, vtx, vtx/C2B410] - - [0xC2B560, vtx, vtx/C2B560] - - [0xC2B6D0, vtx, vtx/C2B6D0] - - [0xC2B800, vtx, vtx/C2B800] - - [0xC2B850, vtx, vtx/C2B850] - - [0xC2B8E0, vtx, vtx/C2B8E0] - - [0xC2B9B0, vtx, vtx/C2B9B0] - - [0xC2BA50, vtx, vtx/C2BA50] - - [0xC2BB50, vtx, vtx/C2BB50] - - [0xC2BD50, vtx, vtx/C2BD50] - - [0xC2BE50, vtx, vtx/C2BE50] - - [0xC2BF50, vtx, vtx/C2BF50] - - [0xC2BF60, vtx, vtx/C2BF60] - - [0xC2BFD0, vtx, vtx/C2BFD0] - - [0xC2C080, vtx, vtx/C2C080] - - [0xC2C0B0, vtx, vtx/C2C0B0] - - [0xC2C0F0, vtx, vtx/C2C0F0] - - [0xC2C130, vtx, vtx/C2C130] - - [0xC2C1C0, vtx, vtx/C2C1C0] - - [0xC2C300, vtx, vtx/C2C300] - - [0xC2C4E0, vtx, vtx/C2C4E0] - - [0xC2C6C0, vtx, vtx/C2C6C0] - - [0xC2C8A0, vtx, vtx/C2C8A0] - - [0xC2CA20, vtx, vtx/C2CA20] - - [0xC2CBA0, vtx, vtx/C2CBA0] - - [0xC2CD20, vtx, vtx/C2CD20] - - [0xC2CEA0, vtx, vtx/C2CEA0] - - [0xC2CED0, vtx, vtx/C2CED0] - - [0xC2CF00, vtx, vtx/C2CF00] - - [0xC2CFC0, vtx, vtx/C2CFC0] - - [0xC2D140, vtx, vtx/C2D140] - - [0xC2D170, vtx, vtx/C2D170] - - [0xC2D1A0, vtx, vtx/C2D1A0] - - [0xC2D260, vtx, vtx/C2D260] - - [0xC2D3E0, vtx, vtx/C2D3E0] - - [0xC2D410, vtx, vtx/C2D410] - - [0xC2D440, vtx, vtx/C2D440] - - [0xC2D500, vtx, vtx/C2D500] - - [0xC2D560, vtx, vtx/C2D560] - - [0xC2D5C0, vtx, vtx/C2D5C0] - - [0xC2D620, vtx, vtx/C2D620] - - [0xC2D660, vtx, vtx/C2D660] - - [0xC2D6A0, vtx, vtx/C2D6A0] - - [0xC2D6E0, vtx, vtx/C2D6E0] - - [0xC2D830, vtx, vtx/C2D830] - - [0xC2D8F0, vtx, vtx/C2D8F0] - - [0xC2DA20, vtx, vtx/C2DA20] - - [0xC2DBE0, vtx, vtx/C2DBE0] - - [0xC2DCB0, vtx, vtx/C2DCB0] - - [0xC2DD50, vtx, vtx/C2DD50] - - [0xC2DD90, vtx, vtx/C2DD90] - - [0xC2DEA0, vtx, vtx/C2DEA0] - - [0xC2DFC0, vtx, vtx/C2DFC0] - - [0xC2E020, vtx, vtx/C2E020] - - [0xC2E1E0, vtx, vtx/C2E1E0] - - [0xC2E2B0, vtx, vtx/C2E2B0] - - [0xC2E360, vtx, vtx/C2E360] - - [0xC2E390, vtx, vtx/C2E390] - - [0xC2E4A0, vtx, vtx/C2E4A0] - - [0xC2E5D0, vtx, vtx/C2E5D0] - - [0xC2E620, vtx, vtx/C2E620] - - [0xC2E7B0, vtx, vtx/C2E7B0] - - [0xC2E800, vtx, vtx/C2E800] - - [0xC2E8C0, vtx, vtx/C2E8C0] - - [0xC2E980, vtx, vtx/C2E980] - - [0xC2EA60, vtx, vtx/C2EA60] - - name: dgb_02 - dir: world/area_dgb/dgb_02 - type: code - start: 0xC2EBA0 - vram_class: map - subsegments: - - [auto, c, dgb_02_0_header] - - [auto, c, dgb_02_1_music] - - [auto, c, dgb_02_2_main] - - [auto, c, dgb_02_3_npc] - - name: dgb_03 - dir: world/area_dgb/dgb_03 - type: code - start: 0xC314E0 - vram_class: map - subsegments: - - [auto, c, dgb_03_0_header] - - [auto, c, dgb_03_1_music] - - [auto, c, dgb_03_2_main] - - [auto, c, dgb_03_3_clock] - - [auto, c, dgb_03_4_entity] - - [auto, c, dgb_03_5_npc] - - name: dgb_04 - dir: world/area_dgb/dgb_04 - type: code - start: 0xC36530 - vram_class: map - subsegments: - - [auto, c, dgb_04_0_header] - - [auto, c, dgb_04_1_music] - - [auto, c, dgb_04_2_main] - - [auto, c, dgb_04_3_npc] - - [auto, c, dgb_04_4_entity] - - name: dgb_05 - dir: world/area_dgb/dgb_05 - type: code - start: 0xC3AA10 - vram_class: map - subsegments: - - [auto, c, dgb_05_0_header] - - [auto, c, dgb_05_1_music] - - [auto, c, dgb_05_2_main] - - [auto, c, dgb_05_3_hole] - - [auto, c, dgb_05_4_entity] - - [auto, c, dgb_05_5_npc] - - name: dgb_06 - dir: world/area_dgb/dgb_06 - type: code - start: 0xC3D080 - vram_class: map - subsegments: - - [auto, c, dgb_06_0_header] - - [auto, c, dgb_06_1_music] - - [auto, c, dgb_06_2_main] - - [auto, c, dgb_06_3_entity] - - [auto, c, dgb_06_4_npc] - - name: dgb_07 - dir: world/area_dgb/dgb_07 - type: code - start: 0xC3DBF0 - vram_class: map - subsegments: - - [auto, c, dgb_07_0_header] - - [auto, c, dgb_07_1_music] - - [auto, c, dgb_07_2_main] - - [auto, c, dgb_07_3_entity] - - [auto, c, dgb_07_4_npc] - - name: dgb_08 - dir: world/area_dgb/dgb_08 - type: code - start: 0xC3FDB0 - vram_class: map - subsegments: - - [auto, c, dgb_08_0_header] - - [auto, c, dgb_08_1_music] - - [auto, c, dgb_08_2_main] - - [auto, c, dgb_08_3_npc] - - [auto, c, dgb_08_4_entity] - - name: dgb_09 - dir: world/area_dgb/dgb_09 - type: code - start: 0xC46BE0 - vram_class: map - subsegments: - - [auto, c, dgb_09_0_header] - - [auto, c, dgb_09_1_music] - - [auto, c, dgb_09_2_main] - - [auto, c, dgb_09_3_breakable] - - [auto, c, dgb_09_4_npc] - - name: dgb_10 - dir: world/area_dgb/dgb_10 - type: code - start: 0xC4C390 - vram_class: map - subsegments: - - [auto, c, dgb_10_0_header] - - [auto, c, dgb_10_1_music] - - [auto, c, dgb_10_2_main] - - [auto, c, dgb_10_3_hole] - - [auto, c, dgb_10_4_entity] - - name: dgb_11 - dir: world/area_dgb/dgb_11 - type: code - start: 0xC4D3E0 - vram_class: map - subsegments: - - [auto, c, dgb_11_0_header] - - [auto, c, dgb_11_1_music] - - [auto, c, dgb_11_2_main] - - [auto, c, dgb_11_3_entity] - - name: dgb_12 - dir: world/area_dgb/dgb_12 - type: code - start: 0xC4DEF0 - vram_class: map - subsegments: - - [auto, c, dgb_12_0_header] - - [auto, c, dgb_12_1_music] - - [auto, c, dgb_12_2_main] - - [auto, c, dgb_12_3_spikes] - - [auto, c, dgb_12_4_entity] - - name: dgb_13 - dir: world/area_dgb/dgb_13 - type: code - start: 0xC4E960 - vram_class: map - subsegments: - - [auto, c, dgb_13_0_header] - - [auto, c, dgb_13_1_music] - - [auto, c, dgb_13_2_main] - - [auto, c, dgb_13_3_entity] - - [auto, c, dgb_13_4_drawer] - - name: dgb_14 - dir: world/area_dgb/dgb_14 - type: code - start: 0xC4F030 - vram_class: map - subsegments: - - [auto, c, dgb_14_0_header] - - [auto, c, dgb_14_1_music] - - [auto, c, dgb_14_2_main] - - [auto, c, dgb_14_3_entity] - - name: dgb_15 - dir: world/area_dgb/dgb_15 - type: code - start: 0xC4F510 - vram_class: map - subsegments: - - [auto, c, dgb_15_0_header] - - [auto, c, dgb_15_1_music] - - [auto, c, dgb_15_2_main] - - [auto, c, dgb_15_3_npc] - - [auto, c, dgb_15_4_entity] - - name: dgb_16 - dir: world/area_dgb/dgb_16 - type: code - start: 0xC52540 - vram_class: map - subsegments: - - [auto, c, dgb_16_0_header] - - [auto, c, dgb_16_1_music] - - [auto, c, dgb_16_2_main] - - [auto, c, dgb_16_3_entity] - - [auto, c, dgb_16_4_npc] - - name: dgb_17 - dir: world/area_dgb/dgb_17 - type: code - start: 0xC55A60 - vram_class: map - subsegments: - - [auto, c, dgb_17_0_header] - - [auto, c, dgb_17_1_music] - - [auto, c, dgb_17_2_main] - - [auto, c, dgb_17_3_entity] - - name: dgb_18 - dir: world/area_dgb/dgb_18 - type: code - start: 0xC55F40 - vram_class: map - subsegments: - - [auto, c, dgb_18_0_header] - - [auto, c, dgb_18_1_music] - - [auto, c, dgb_18_2_main] - - [auto, c, dgb_18_3_npc] - - [auto, c, dgb_18_4_entity] - - name: kzn_01 - dir: world/area_kzn/kzn_01 - type: code - start: 0xC599D0 - vram_class: map - subsegments: - - [auto, c, kzn_01_0_header] - - [auto, c, kzn_01_1_main] - - [auto, c, kzn_01_2_npc] - - name: kzn_02 - dir: world/area_kzn/kzn_02 - type: code - start: 0xC5A740 - vram_class: map - subsegments: - - [auto, c, kzn_02_0_header] - - [auto, c, kzn_02_1_main] - - [auto, c, kzn_02_2_platforms] - - [auto, c, kzn_02_3_npc] - - [auto, c, kzn_02_4_demo] - - name: kzn_03 - dir: world/area_kzn/kzn_03 - type: code - start: 0xC60D10 - vram_class: map - subsegments: - - [auto, c, kzn_03_0_header] - - [auto, c, kzn_03_1_main] - - [auto, c, kzn_03_2_npc] - - [auto, c, kzn_03_3_entity] - - [auto, c, kzn_03_4_ziplines] - - name: kzn_04 - dir: world/area_kzn/kzn_04 - type: code - start: 0xC68130 - vram_class: map - subsegments: - - [auto, c, kzn_04_0_header] - - [auto, c, kzn_04_1_main] - - [auto, c, kzn_04_2_entity] - - [auto, c, kzn_04_3_npc] - - name: kzn_05 - dir: world/area_kzn/kzn_05 - type: code - start: 0xC6C0D0 - vram_class: map - subsegments: - - [auto, c, kzn_05_0_header] - - [auto, c, kzn_05_1_main] - - name: kzn_06 - dir: world/area_kzn/kzn_06 - type: code - start: 0xC6C920 - vram_class: map - subsegments: - - [auto, c, kzn_06_0_header] - - [auto, c, kzn_06_1_main] - - [auto, c, kzn_06_2_entity] - - [auto, c, kzn_06_3_extra] - - name: kzn_07 - dir: world/area_kzn/kzn_07 - type: code - start: 0xC6E330 - vram_class: map - subsegments: - - [auto, c, kzn_07_0_header] - - [auto, c, kzn_07_1_music] - - [auto, c, kzn_07_2_main] - - [auto, c, kzn_07_3_entity] - - [auto, c, kzn_07_4_npc] - - name: kzn_08 - dir: world/area_kzn/kzn_08 - type: code - start: 0xC71480 - vram_class: map - subsegments: - - [auto, c, kzn_08_0_header] - - [auto, c, kzn_08_1_main] - - [auto, c, kzn_08_2_entity] - - [auto, c, kzn_08_3_npc] - - [auto, c, kzn_08_4_extra] - - name: kzn_09 - dir: world/area_kzn/kzn_09 - type: code - start: 0xC76CE0 - vram_class: map - subsegments: - - [auto, c, kzn_09_0_header] - - [auto, c, kzn_09_1_main] - - [auto, c, kzn_09_2_entity] - - [auto, c, kzn_09_3_zipline] - - [auto, c, kzn_09_4_npc] - - name: kzn_10 - dir: world/area_kzn/kzn_10 - type: code - start: 0xC7E180 - vram_class: map - subsegments: - - [auto, c, kzn_10_0_header] - - [auto, c, kzn_10_1_main] - - [auto, c, kzn_10_2_tromp] - - name: kzn_11 - dir: world/area_kzn/kzn_11 - type: code - start: 0xC801A0 - vram_class: map - subsegments: - - [auto, c, kzn_11_0_header] - - [auto, c, kzn_11_1_main] - - [auto, c, kzn_11_2_platforms] - - [auto, c, kzn_11_3_npc] - - name: kzn_17 - dir: world/area_kzn/kzn_17 - type: code - start: 0xC85AB0 - vram_class: map - subsegments: - - [auto, c, kzn_17_0_header] - - [auto, c, kzn_17_1_main] - - [auto, c, kzn_17_2_entity] - - [auto, c, kzn_17_3_npc] - - [auto, c, kzn_17_4_tromp] - - name: kzn_18 - dir: world/area_kzn/kzn_18 - type: code - start: 0xC8C0A0 - vram_class: map - subsegments: - - [auto, c, kzn_18_0_header] - - [auto, c, kzn_18_1_main] - - [auto, c, kzn_18_2_npc] - - [auto, c, kzn_18_3_entity] - - name: kzn_19 - dir: world/area_kzn/kzn_19 - type: code - start: 0xC8DBB0 - vram_class: map - subsegments: - - [auto, c, kzn_19_0_header] - - [auto, c, kzn_19_1_music] - - [auto, c, kzn_19_2_main] - - [auto, c, kzn_19_3_npc_settings] - - [auto, c, kzn_19_4_npc] - - [auto, c, kzn_19_5_eruption] - - [auto, c, kzn_19_6_entity] - - start: 0xC90BF0 - type: .data - name: kzn_19_4_npc - subsegments: - - [0xC90BF0] - - [0xC91088, ci4, ../../lava_piranha/vine, 64, 32] - - [0xC91488, palette, ../../lava_piranha/vine] - - [0xC91688, gfx_common, ../../lava_piranha/vine] - - [0xC91768] - - name: kzn_20 - dir: world/area_kzn/kzn_20 - type: code - start: 0xC95F30 - vram_class: map - subsegments: - - [auto, c, kzn_20_0_header] - - [auto, c, kzn_20_1_music] - - [auto, c, kzn_20_2_main] - - [auto, c, kzn_20_3_npc] - - name: kzn_22 - dir: world/area_kzn/kzn_22 - type: code - start: 0xC9A200 - vram_class: map - subsegments: - - [auto, c, kzn_22_0_header] - - [auto, c, kzn_22_1_music] - - [auto, c, kzn_22_2_main] - - [auto, c, kzn_22_3_entity] - - [auto, c, kzn_22_4_npc] - - name: kzn_23 - dir: world/area_kzn/kzn_23 - type: code - start: 0xC9C300 - vram_class: map - subsegments: - - [auto, c, kzn_23_0_header] - - [auto, c, kzn_23_1_music] - - [auto, c, kzn_23_2_main] - - [auto, c, kzn_23_3_npc] - - name: flo_00 - dir: world/area_flo/flo_00 - type: code - start: 0xC9DF20 - vram_class: map - subsegments: - - [auto, c, flo_00_0_header] - - [auto, c, flo_00_1_music] - - [auto, c, flo_00_2_main] - - [auto, c, flo_00_3_npc] - - [auto, c, flo_00_4_epilogue] - - [auto, c, flo_00_5_beanstalk] - - [auto, c, flo_00_6_entity] - - name: flo_03 - dir: world/area_flo/flo_03 - type: code - start: 0xCA72A0 - vram_class: map - subsegments: - - [auto, c, flo_03_0_header] - - [auto, c, flo_03_1_music] - - [auto, c, flo_03_2_main] - - [auto, c, flo_03_3_npc] - - [auto, c, flo_03_4_foliage] - - [auto, c, flo_03_5_entity] - - name: flo_07 - dir: world/area_flo/flo_07 - type: code - start: 0xCAC1F0 - vram_class: map - subsegments: - - [auto, c, flo_07_0_header] - - [auto, c, flo_07_1_music] - - [auto, c, flo_07_2_main] - - [auto, c, flo_07_3_npc] - - name: flo_08 - dir: world/area_flo/flo_08 - type: code - start: 0xCAED40 - vram_class: map - subsegments: - - [auto, c, flo_08_0_header] - - [auto, c, flo_08_1_music] - - [auto, c, flo_08_2_entity] - - [auto, c, flo_08_3_main] - - [auto, c, flo_08_4_npc] - - [auto, c, flo_08_5_foliage] - - [auto, c, flo_08_6_vines] - - name: flo_09 - dir: world/area_flo/flo_09 - type: code - start: 0xCB5000 - vram_class: map - subsegments: - - [auto, c, flo_09_0_header] - - [auto, c, flo_09_1_music] - - [auto, c, flo_09_2_main] - - [auto, c, flo_09_3_vines] - - [auto, c, flo_09_4_foliage] - - [auto, c, flo_09_5_npc] - - name: flo_10 - dir: world/area_flo/flo_10 - type: code - start: 0xCB9200 - vram_class: map - subsegments: - - [auto, c, flo_10_0_header] - - [auto, c, flo_10_1_music] - - [auto, c, flo_10_2_entity] - - [auto, c, flo_10_3_main] - - [auto, c, flo_10_4_fountain] - - [auto, c, flo_10_5_npc] - - [auto, c, flo_10_6_waterfx] - - [auto, c, flo_10_7_foliage] - - name: flo_11 - dir: world/area_flo/flo_11 - type: code - start: 0xCBDCD0 - vram_class: map - subsegments: - - [auto, c, flo_11_0_header] - - [auto, c, flo_11_1_music] - - [auto, c, flo_11_2_main] - - [auto, c, flo_11_3_npc] - - [auto, c, flo_11_4_entity] - - name: flo_12 - dir: world/area_flo/flo_12 - type: code - start: 0xCC0E30 - vram_class: map - subsegments: - - [auto, c, flo_12_0_header] - - [auto, c, flo_12_1_music] - - [auto, c, flo_12_2_main] - - [auto, c, flo_12_3_npc] - - name: flo_13 - dir: world/area_flo/flo_13 - type: code - start: 0xCC3810 - vram_class: map - subsegments: - - [auto, c, flo_13_0_header] - - [auto, c, flo_13_1_music] - - [auto, c, flo_13_2_entity] - - [auto, c, flo_13_3_main] - - [auto, c, flo_13_4_npc] - - [auto, c, flo_13_5_new_partner] - - name: flo_14 - dir: world/area_flo/flo_14 - type: code - start: 0xCCB310 - vram_class: map - subsegments: - - [auto, c, flo_14_0_header] - - [auto, c, flo_14_1_music] - - [auto, c, flo_14_2_main] - - [auto, c, flo_14_3_bubbles] - - [auto, c, flo_14_4_npc] - - [auto, c, flo_14_5_entity] - - [auto, c, flo_14_6_logs] - - name: flo_15 - dir: world/area_flo/flo_15 - type: code - start: 0xCD06C0 - vram_class: map - subsegments: - - [auto, c, flo_15_0_header] - - [auto, c, flo_15_1_music] - - [auto, c, flo_15_2_main] - - [auto, c, flo_15_3_npc] - - [auto, c, flo_15_4_entity] - - [auto, c, flo_15_5_stairs] - - name: flo_16 - dir: world/area_flo/flo_16 - type: code - start: 0xCD1E30 - vram_class: map - subsegments: - - [auto, c, flo_16_0_header] - - [auto, c, flo_16_1_music] - - [auto, c, flo_16_2_main] - - [auto, c, flo_16_3_vines] - - [auto, c, flo_16_4_entity] - - [auto, c, flo_16_5_npc] - - [auto, c, flo_16_6_puzzle] - - name: flo_17 - dir: world/area_flo/flo_17 - type: code - start: 0xCD72E0 - vram_class: map - subsegments: - - [auto, c, flo_17_0_header] - - [auto, c, flo_17_1_music] - - [auto, c, flo_17_2_main] - - [auto, c, flo_17_3_logs] - - [auto, c, flo_17_4_npc] - - [auto, c, flo_17_5_entity] - - name: flo_18 - dir: world/area_flo/flo_18 - type: code - start: 0xCDC6A0 - vram_class: map - subsegments: - - [auto, c, flo_18_0_header] - - [auto, c, flo_18_1_music] - - [auto, c, flo_18_2_main] - - [auto, c, flo_18_3_machine] - - [auto, c, flo_18_4_npc] - - [auto, c, flo_18_5_foliage] - - name: flo_19 - dir: world/area_flo/flo_19 - type: code - start: 0xCE36F0 - vram_class: map - subsegments: - - [auto, c, flo_19_0_header] - - [auto, c, flo_19_1_music] - - [auto, c, flo_19_2_entity] - - [auto, c, flo_19_3_main] - - [auto, c, flo_19_4_clouds] - - [auto, c, flo_19_5_beanstalk] - - name: flo_21 - dir: world/area_flo/flo_21 - type: code - start: 0xCE6700 - vram_class: map - subsegments: - - [auto, c, flo_21_0_header] - - [auto, c, flo_21_1_music] - - [auto, c, flo_21_2_main] - - [auto, c, flo_21_3_clouds] - - [auto, c, flo_21_4_npc] - - name: flo_22 - dir: world/area_flo/flo_22 - type: code - start: 0xCEC240 - vram_class: map - subsegments: - - [auto, c, flo_22_0_header] - - [auto, c, flo_22_1_music] - - [auto, c, flo_22_2_main] - - [auto, c, flo_22_3_npc] - - [auto, c, flo_22_4_well] - - [auto, c, flo_22_5_foliage] - - name: flo_23 - dir: world/area_flo/flo_23 - type: code - start: 0xCEE260 - vram_class: map - subsegments: - - [auto, c, flo_23_0_header] - - [auto, c, flo_23_1_music] - - [auto, c, flo_23_2_main] - - [auto, c, flo_23_3_npc] - - [auto, c, flo_23_4_entity] - - name: flo_24 - dir: world/area_flo/flo_24 - type: code - start: 0xCF0940 - vram_class: map - subsegments: - - [auto, c, flo_24_0_header] - - [auto, c, flo_24_1_music] - - [auto, c, flo_24_2_main] - - [auto, c, flo_24_3_foliage] - - [auto, c, flo_24_4_water] - - [auto, c, flo_24_5_entity] - - name: flo_25 - dir: world/area_flo/flo_25 - type: code - start: 0xCF2BD0 - vram_class: map - subsegments: - - [auto, c, flo_25_0_header] - - [auto, c, flo_25_1_music] - - [auto, c, flo_25_2_main] - - [auto, c, flo_25_3_npc] - - [auto, c, flo_25_4_entity] - - [auto, c, flo_25_5_foliage] - - [auto, c, flo_25_6_vine] - - name: sam_01 - dir: world/area_sam/sam_01 - type: code - start: 0xCF7B70 - vram_class: map - subsegments: - - [auto, c, sam_01_0_header] - - [auto, c, sam_01_1_music] - - [auto, c, sam_01_2_main] - - [auto, c, sam_01_3_rooms] - - [auto, c, sam_01_4_npc] - - [auto, c, sam_01_5_scenes] - - [auto, c, sam_01_6_entity] - - name: sam_02 - dir: world/area_sam/sam_02 - type: code - start: 0xD05730 - vram_class: map - subsegments: - - [auto, c, sam_02_0_header] - - [auto, c, sam_02_1_music] - - [auto, c, sam_02_2_main] - - [auto, c, sam_02_3_rooms] - - [auto, c, sam_02_4_npc] - - [auto, c, sam_02_5_entity] - - [auto, c, sam_02_6_shop] - - name: sam_03 - dir: world/area_sam/sam_03 - type: code - start: 0xD110C0 - vram_class: map - subsegments: - - [auto, c, sam_03_0_header] - - [auto, c, sam_03_1_music] - - [auto, c, sam_03_2_main] - - [auto, c, sam_03_3_npc1] - - [auto, c, sam_03_4_npc2] - - name: sam_04 - dir: world/area_sam/sam_04 - type: code - start: 0xD135D0 - vram_class: map - subsegments: - - [auto, c, sam_04_0_header] - - [auto, c, sam_04_1_music] - - [auto, c, sam_04_2_main] - - [auto, c, sam_04_3_snowmen] - - [auto, c, sam_04_4_npc] - - [auto, c, sam_04_5_entity] - - name: sam_05 - dir: world/area_sam/sam_05 - type: code - start: 0xD187E0 - vram_class: map - subsegments: - - [auto, c, sam_05_0_header] - - [auto, c, sam_05_1_music] - - [auto, c, sam_05_2_main] - - [auto, c, sam_05_3_entity] - - [auto, c, sam_05_4_npc] - - [auto, c, sam_05_5_scenes] - - [auto, c, sam_05_6_monstar_gfx] - - [auto, c, sam_05_7_monstar_vtx] - - start: 0xD1A900 - type: .data - name: sam_05_4_npc - subsegments: - - [0xD1A900] - - [0xD1AF50, ci4, monstar, 32, 32] - - [0xD1B150, ia4, monstar_blank1, 32, 32] - - [0xD1B350, ia4, monstar_blank2, 32, 32] - - [0xD1B550, ia4, monstar_blank3, 32, 32] - - [0xD1B750, palette, monstar] - - [0xD1B770] - - start: 0xD1F780 - type: .data - name: sam_05_6_monstar_gfx - subsegments: - - [0xD1F780, gfx, monstar] - - start: 0xD1F890 - type: .data - name: sam_05_7_monstar_vtx - subsegments: - - [0xD1F890, vtx, monstar] - - [0xD1FCB0] - - name: sam_06 - dir: world/area_sam/sam_06 - type: code - start: 0xD1FE90 - vram_class: map - subsegments: - - [auto, c, sam_06_0_header] - - [auto, c, sam_06_1_music] - - [auto, c, sam_06_2_main] - - [auto, c, sam_06_3_rooms] - - [auto, c, sam_06_4_npc] - - [auto, c, sam_06_5_entity] - - name: sam_07 - dir: world/area_sam/sam_07 - type: code - start: 0xD2BD30 - vram_class: map - subsegments: - - [auto, c, sam_07_0_header] - - [auto, c, sam_07_1_music] - - [auto, c, sam_07_2_main] - - [auto, c, sam_07_3_entity] - - [auto, c, sam_07_4_frozen_pit] - - [auto, c, sam_07_5_npc] - - name: sam_08 - dir: world/area_sam/sam_08 - type: code - start: 0xD2FC80 - vram_class: map - subsegments: - - [auto, c, sam_08_0_header] - - [auto, c, sam_08_1_music] - - [auto, c, sam_08_2_main] - - [auto, c, sam_08_3_entity] - - [auto, c, sam_08_4_npc] - - [auto, c, sam_08_5_scenes] - - name: sam_09 - dir: world/area_sam/sam_09 - type: code - start: 0xD362F0 - vram_class: map - subsegments: - - [auto, c, sam_09_0_header] - - [auto, c, sam_09_1_music] - - [auto, c, sam_09_2_main] - - [auto, c, sam_09_3_entity] - - [auto, c, sam_09_4_sockets] - - name: sam_10 - dir: world/area_sam/sam_10 - type: code - start: 0xD37800 - vram_class: map - subsegments: - - [auto, c, sam_10_0_header] - - [auto, c, sam_10_1_music] - - [auto, c, sam_10_2_main] - - [auto, c, sam_10_3_entity] - - [auto, c, sam_10_4_stairs] - - [auto, c, sam_10_5_npc] - - name: sam_11 - dir: world/area_sam/sam_11 - type: code - start: 0xD3A5D0 - vram_class: map - subsegments: - - [auto, c, sam_11_0_header] - - [auto, c, sam_11_1_music] - - [auto, c, sam_11_2_main] - - [auto, c, sam_11_3_rooms] - - [auto, c, sam_11_4_entity] - - [auto, c, sam_11_5_npc] - - [auto, c, sam_11_6_pond] - - [auto, c, sam_11_7_staircase] - - [auto, c, sam_11_8_pond_anim] - - [auto, c, sam_11_9_pond_skele] - - name: sam_12 - dir: world/area_sam/sam_12 - type: code - start: 0xD4BA20 - vram_class: map - subsegments: - - [auto, c, sam_12_0_header] - - [auto, c, sam_12_1_music] - - [auto, c, sam_12_2_main] - - [auto, c, sam_12_3_npc] - - [auto, c, sam_12_4_scenes] - - [auto, c, sam_12_5_entity] - - name: pra_01 - dir: world/area_pra/pra_01 - type: code - start: 0xD4D040 - vram_class: map - subsegments: - - [auto, c, pra_01_0_header] - - [auto, c, pra_01_1_music] - - [auto, c, pra_01_2_main] - - [auto, c, pra_01_3_npc] - - [auto, c, pra_01_4_entity] - - name: pra_02 - dir: world/area_pra/pra_02 - type: code - start: 0xD4FFF0 - vram_class: map - subsegments: - - [auto, c, pra_02_0_header] - - [auto, c, pra_02_1_music] - - [auto, c, pra_02_2_main] - - [auto, c, pra_02_3_npc] - - [auto, c, pra_02_4_entity] - - name: pra_03 - dir: world/area_pra/pra_03 - type: code - start: 0xD53CB0 - vram_class: map - subsegments: - - [auto, c, pra_03_0_header] - - [auto, c, pra_03_1_music] - - [auto, c, pra_03_2_main] - - [auto, c, pra_03_3_entity] - - name: pra_04 - dir: world/area_pra/pra_04 - type: code - start: 0xD54690 - vram_class: map - subsegments: - - [auto, c, pra_04_0_header] - - [auto, c, pra_04_1_music] - - [auto, c, pra_04_2_main] - - [auto, c, pra_04_3_entity] - - [auto, c, pra_04_4_npc] - - name: pra_05 - dir: world/area_pra/pra_05 - type: code - start: 0xD55BB0 - vram_class: map - subsegments: - - [auto, c, pra_05_0_header] - - [auto, c, pra_05_1_music] - - [auto, c, pra_05_2_main] - - [auto, c, pra_05_3_entity] - - name: pra_06 - dir: world/area_pra/pra_06 - type: code - start: 0xD57430 - vram_class: map - subsegments: - - [auto, c, pra_06_0_header] - - [auto, c, pra_06_1_music] - - [auto, c, pra_06_2_main] - - [auto, c, pra_06_3_entity] - - name: pra_09 - dir: world/area_pra/pra_09 - type: code - start: 0xD58890 - vram_class: map - subsegments: - - [auto, c, pra_09_0_header] - - [auto, c, pra_09_1_music] - - [auto, c, pra_09_2_main] - - [auto, c, pra_09_3_npc] - - name: pra_10 - dir: world/area_pra/pra_10 - type: code - start: 0xD5F2B0 - vram_class: map - subsegments: - - [auto, c, pra_10_0_header] - - [auto, c, pra_10_1_music] - - [auto, c, pra_10_2_main] - - [auto, c, pra_10_3_npc] - - name: pra_11 - dir: world/area_pra/pra_11 - type: code - start: 0xD61500 - vram_class: map - subsegments: - - [auto, c, pra_11_0_header] - - [auto, c, pra_11_1_music] - - [auto, c, pra_11_2_main] - - [auto, c, pra_11_3_entity] - - name: pra_12 - dir: world/area_pra/pra_12 - type: code - start: 0xD62D10 - vram_class: map - subsegments: - - [auto, c, pra_12_0_header] - - [auto, c, pra_12_1_music] - - [auto, c, pra_12_2_main] - - [auto, c, pra_12_3_entity] - - name: pra_13 - dir: world/area_pra/pra_13 - type: code - start: 0xD645E0 - vram_class: map - subsegments: - - [auto, c, pra_13_0_header] - - [auto, c, pra_13_1_music] - - [auto, c, pra_13_2_main] - - [auto, c, pra_13_3_npc] - - name: pra_14 - dir: world/area_pra/pra_14 - type: code - start: 0xD67D00 - vram_class: map - subsegments: - - [auto, c, pra_14_0_header] - - [auto, c, pra_14_1_music] - - [auto, c, pra_14_2_main] - - [auto, c, pra_14_3_entity] - - name: pra_15 - dir: world/area_pra/pra_15 - type: code - start: 0xD69810 - vram_class: map - subsegments: - - [auto, c, pra_15_0_header] - - [auto, c, pra_15_1_music] - - [auto, c, pra_15_2_main] - - [auto, c, pra_15_3_entity] - - name: pra_16 - dir: world/area_pra/pra_16 - type: code - start: 0xD69B20 - vram_class: map - subsegments: - - [auto, c, pra_16_0_header] - - [auto, c, pra_16_1_music] - - [auto, c, pra_16_2_main] - - name: pra_18 - dir: world/area_pra/pra_18 - type: code - start: 0xD6B620 - vram_class: map - subsegments: - - [auto, c, pra_18_0_header] - - [auto, c, pra_18_1_music] - - [auto, c, pra_18_2_main] - - [auto, c, pra_18_3_npc] - - name: pra_19 - dir: world/area_pra/pra_19 - type: code - start: 0xD6E9B0 - vram_class: map - subsegments: - - [auto, c, pra_19_0_header] - - [auto, c, pra_19_1_music] - - [auto, c, pra_19_2_main] - - [auto, c, pra_19_3_npc] - - name: pra_20 - dir: world/area_pra/pra_20 - type: code - start: 0xD763A0 - vram_class: map - subsegments: - - [auto, c, pra_20_0_header] - - [auto, c, pra_20_1_music] - - [auto, c, pra_20_2_main] - - name: pra_21 - dir: world/area_pra/pra_21 - type: code - start: 0xD77F20 - vram_class: map - subsegments: - - [auto, c, pra_21_0_header] - - [auto, c, pra_21_1_music] - - [auto, c, pra_21_2_main] - - [auto, c, pra_21_3_entity] - - name: pra_22 - dir: world/area_pra/pra_22 - type: code - start: 0xD78880 - vram_class: map - subsegments: - - [auto, c, pra_22_0_header] - - [auto, c, pra_22_1_music] - - [auto, c, pra_22_2_main] - - [auto, c, pra_22_3_entity] - - name: pra_27 - dir: world/area_pra/pra_27 - type: code - start: 0xD799F0 - vram_class: map - subsegments: - - [auto, c, pra_27_0_header] - - [auto, c, pra_27_1_music] - - [auto, c, pra_27_2_main] - - [auto, c, pra_27_3_entity] - - name: pra_28 - dir: world/area_pra/pra_28 - type: code - start: 0xD7B2A0 - vram_class: map - subsegments: - - [auto, c, pra_28_0_header] - - [auto, c, pra_28_1_music] - - [auto, c, pra_28_2_main] - - [auto, c, pra_28_3_entity] - - name: pra_29 - dir: world/area_pra/pra_29 - type: code - start: 0xD7CB50 - vram_class: map - subsegments: - - [auto, c, pra_29_0_header] - - [auto, c, pra_29_1_music] - - [auto, c, pra_29_2_entity] - - [auto, c, pra_29_3_main] - - [auto, c, pra_29_4_bridge] - - name: pra_31 - dir: world/area_pra/pra_31 - type: code - start: 0xD7ED60 - vram_class: map - subsegments: - - [auto, c, pra_31_0_header] - - [auto, c, pra_31_1_music] - - [auto, c, pra_31_2_npc] - - [auto, c, pra_31_3_main] - - [auto, c, pra_31_4_puzzle] - - [auto, c, pra_31_5_texture_1] - - [auto, c, pra_31_6_texture_2] - - [auto, c, pra_31_7_texture_3] - - [auto, c, pra_31_8_stairs_skele] - - [auto, c, pra_31_9_stairs_anim] - - [auto, c, pra_31_10_stairs_lights] - - [auto, c, pra_31_11_stairs_vtx] - - start: 0xD82270 - type: .data - name: pra_31_5_texture_1 - subsegments: - - [0xD82270, ci4, texture_1, 64, 64] - - [0xD82A70, palette, texture_1] - - [0xD82A90, gfx, texture_1] - - [0xD82B48] - - start: 0xD82B50 - type: .data - name: pra_31_6_texture_2 - subsegments: - - [0xD82B50, ci4, texture_2, 64, 64] - - [0xD83350, palette, texture_2] - - [0xD83370, gfx, texture_2] - - [0xD83418] - - start: 0xD83420 - type: .data - name: pra_31_7_texture_3 - subsegments: - - [0xD83420, rgba16, texture_3, 32, 32] - - [0xD83C20, gfx, texture_3] - - [0xD83CA8] - - start: 0xD83CB0 - type: .data - name: pra_31_8_stairs_skele - subsegments: - - [0xD83CB0, gfx, unk_01] - - [0xD83D28, gfx, unk_02] - - [0xD83D60, gfx, unk_03] - - [0xD83DC8, gfx, unk_04] - - [0xD83E00, gfx, unk_05] - - [0xD83E78, gfx, unk_06] - - [0xD83EB0, gfx, unk_07] - - [0xD83F28, gfx, unk_08] - - [0xD83F60, gfx, unk_09] - - [0xD83FC8, gfx, unk_10] - - [0xD84000, gfx, unk_11] - - [0xD84078, gfx, unk_12] - - [0xD840B0, gfx, unk_13] - - [0xD84128, gfx, unk_14] - - [0xD84160, gfx, unk_15] - - [0xD841C8, gfx, unk_16] - - [0xD84200, gfx, unk_17] - - [0xD84278, gfx, unk_18] - - [0xD842B0, gfx, unk_19] - - [0xD84328, gfx, unk_20] - - [0xD84360, gfx, unk_21] - - [0xD843C8, gfx, unk_22] - - [0xD84400, gfx, unk_23] - - [0xD84478, gfx, unk_24] - - [0xD844B0, gfx, unk_25] - - [0xD84528, gfx, unk_26] - - [0xD84560, gfx, unk_27] - - [0xD845C8, gfx, unk_28] - - [0xD84628, gfx, unk_29] - - [0xD84690, gfx, unk_30] - - [0xD846D8, gfx, unk_31] - - [0xD84768, gfx, unk_32] - - [0xD84790, gfx, unk_33] - - [0xD847B8, gfx, unk_34] - - [0xD847F0] - - start: 0xD864A0 - type: .data - name: pra_31_11_stairs_vtx - subsegments: - - [0xD864A0] - - [0xD86820, vtx, stairs] - - [0xD869E0] - - [0xD869E0] - - name: pra_32 - dir: world/area_pra/pra_32 - type: code - start: 0xD86A00 - vram_class: map - subsegments: - - [auto, c, pra_32_0_header] - - [auto, c, pra_32_1_music] - - [auto, c, pra_32_2_main] - - [auto, c, pra_32_3_npc] - - name: pra_33 - dir: world/area_pra/pra_33 - type: code - start: 0xD896E0 - vram_class: map - subsegments: - - [auto, c, pra_33_0_header] - - [auto, c, pra_33_1_music] - - [auto, c, pra_33_2_main] - - [auto, c, pra_33_3_entity] - - name: pra_34 - dir: world/area_pra/pra_34 - type: code - start: 0xD8B3B0 - vram_class: map - subsegments: - - [auto, c, pra_34_0_header] - - [auto, c, pra_34_1_music] - - [auto, c, pra_34_2_main] - - [auto, c, pra_34_3_entity] - - name: pra_35 - dir: world/area_pra/pra_35 - type: code - start: 0xD8D250 - vram_class: map - subsegments: - - [auto, c, pra_35_0_header] - - [auto, c, pra_35_1_music] - - [auto, c, pra_35_2_main] - - [auto, c, pra_35_3_npc] - - [auto, c, pra_35_4_entity] - - name: pra_36 - dir: world/area_pra/pra_36 - type: code - start: 0xD91700 - vram_class: map - subsegments: - - [auto, c, pra_36_0_header] - - [auto, c, pra_36_1_music] - - [auto, c, pra_36_2_main] - - [auto, c, pra_36_3_npc] - - name: pra_37 - dir: world/area_pra/pra_37 - type: code - start: 0xD92F40 - vram_class: map - subsegments: - - [auto, c, pra_37_0_header] - - [auto, c, pra_37_1_music] - - [auto, c, pra_37_2_main] - - [auto, c, pra_37_3_npc] - - name: pra_38 - dir: world/area_pra/pra_38 - type: code - start: 0xD955F0 - vram_class: map - subsegments: - - [auto, c, pra_38_0_header] - - [auto, c, pra_38_1_music] - - [auto, c, pra_38_2_main] - - [auto, c, pra_38_3_npc] - - name: pra_39 - dir: world/area_pra/pra_39 - type: code - start: 0xD97890 - vram_class: map - subsegments: - - [auto, c, pra_39_0_header] - - [auto, c, pra_39_1_music] - - [auto, c, pra_39_2_main] - - [auto, c, pra_39_3_npc] - - name: pra_40 - dir: world/area_pra/pra_40 - type: code - start: 0xD999B0 - vram_class: map - subsegments: - - [auto, c, pra_40_0_header] - - [auto, c, pra_40_1_music] - - [auto, c, pra_40_2_main] - - [auto, c, pra_40_3_entity] - - name: omo_01 - dir: world/area_omo/omo_01 - type: code - start: 0xD9AEF0 - vram_class: map - subsegments: - - [auto, c, omo_01_0_header] - - [auto, c, omo_01_1_music] - - [auto, c, omo_01_2_main] - - [auto, c, omo_01_3_gizmos] - - [auto, c, omo_01_4_npc] - - [auto, c, omo_01_5_entity] - - name: omo_02 - dir: world/area_omo/omo_02 - type: code - start: 0xD9D4D0 - vram_class: map - subsegments: - - [auto, c, omo_02_0_header] - - [auto, c, omo_02_1_music] - - [auto, c, omo_02_2_main] - - [auto, c, omo_02_3_entity] - - [auto, c, omo_02_4_gizmos] - - [auto, c, omo_02_5_barricade] - - [auto, c, omo_02_6_npc] - - name: omo_03 - dir: world/area_omo/omo_03 - type: code - start: 0xDA5240 - vram_class: map - subsegments: - - [auto, c, omo_03_0_header] - - [auto, c, omo_03_1_music] - - [auto, c, omo_03_2_main] - - [auto, c, omo_03_3_gizmos] - - [auto, c, omo_03_4_entity] - - [auto, c, omo_03_5_npc] - - [auto, c, omo_03_6_train] - - [auto, c, omo_03_7_train_drop] - - [auto, c, omo_03_8_epilogue] - - name: omo_04 - dir: world/area_omo/omo_04 - type: code - start: 0xDAD400 - vram_class: map - subsegments: - - [auto, c, omo_04_0_header] - - [auto, c, omo_04_1_music] - - [auto, c, omo_04_2_main] - - [auto, c, omo_04_3_gizmos] - - [auto, c, omo_04_4_entity] - - [auto, c, omo_04_5_npc] - - [auto, c, omo_04_6_scenes] - - name: omo_05 - dir: world/area_omo/omo_05 - type: code - start: 0xDB22C0 - vram_class: map - subsegments: - - [auto, c, omo_05_0_header] - - [auto, c, omo_05_1_music] - - [auto, c, omo_05_2_main] - - [auto, c, omo_05_3_gizmos] - - [auto, c, omo_05_4_npc] - - [auto, c, omo_05_5_entity] - - name: omo_06 - dir: world/area_omo/omo_06 - type: code - start: 0xDB7910 - vram_class: map - subsegments: - - [auto, c, omo_06_0_header] - - [auto, c, omo_06_1_music] - - [auto, c, omo_06_2_main] - - [auto, c, omo_06_3_gizmos] - - [auto, c, omo_06_4_train] - - [auto, c, omo_06_5_npc] - - [auto, c, omo_06_6_entity] - - name: omo_07 - dir: world/area_omo/omo_07 - type: code - start: 0xDBD2B0 - vram_class: map - subsegments: - - [auto, c, omo_07_0_header] - - [auto, c, omo_07_1_music] - - [auto, c, omo_07_2_main] - - [auto, c, omo_07_3_gizmos] - - [auto, c, omo_07_4_npc] - - [auto, c, omo_07_5_entity] - - [auto, c, omo_07_6_scenes] - - name: omo_08 - dir: world/area_omo/omo_08 - type: code - start: 0xDC43D0 - vram_class: map - subsegments: - - [auto, c, omo_08_0_header] - - [auto, c, omo_08_1_music] - - [auto, c, omo_08_2_main] - - [auto, c, omo_08_3_boxes] - - [auto, c, omo_08_4_train] - - [auto, c, omo_08_5_entity] - - [auto, c, omo_08_6_npc] - - name: omo_09 - dir: world/area_omo/omo_09 - type: code - start: 0xDCCCD0 - vram_class: map - subsegments: - - [auto, c, omo_09_0_header] - - [auto, c, omo_09_1_music] - - [auto, c, omo_09_2_main] - - [auto, c, omo_09_3_conveyors] - - [auto, c, omo_09_4_slot_machine] - - [auto, c, omo_09_5_gizmos] - - [auto, c, omo_09_6_entity] - - [auto, c, omo_09_7_npc] - - [auto, c, omo_09_8_scenes] - - name: omo_10 - dir: world/area_omo/omo_10 - type: code - start: 0xDD79B0 - vram_class: map - subsegments: - - [auto, c, omo_10_0_header] - - [auto, c, omo_10_1_music] - - [auto, c, omo_10_2_main] - - [auto, c, omo_10_3_gizmos] - - [auto, c, omo_10_4_train] - - [auto, c, omo_10_5_npc] - - [auto, c, omo_10_6_entity] - - name: omo_11 - dir: world/area_omo/omo_11 - type: code - start: 0xDDC830 - vram_class: map - subsegments: - - [auto, c, omo_11_0_header] - - [auto, c, omo_11_1_music] - - [auto, c, omo_11_2_main] - - [auto, c, omo_11_3_gizmos] - - [auto, c, omo_11_4_entity] - - [auto, c, omo_11_5_npc] - - name: omo_12 - dir: world/area_omo/omo_12 - type: code - start: 0xDDF310 - vram_class: map - subsegments: - - [auto, c, omo_12_0_header] - - [auto, c, omo_12_1_music] - - [auto, c, omo_12_2_main] - - [auto, c, omo_12_3_npc] - - [auto, c, omo_12_4_new_partner] - - name: omo_13 - dir: world/area_omo/omo_13 - type: code - start: 0xDE2490 - vram_class: map - subsegments: - - [auto, c, omo_13_0_header] - - [auto, c, omo_13_1_music] - - [auto, c, omo_13_2_main] - - [auto, c, omo_13_3_gizmos] - - [auto, c, omo_13_4_npc] - - [auto, c, omo_13_5_entity] - - name: omo_14 - dir: world/area_omo/omo_14 - type: code - start: 0xDE56B0 - vram_class: map - subsegments: - - [auto, c, omo_14_0_header] - - [auto, c, omo_14_1_music] - - [auto, c, omo_14_2_main] - - [auto, c, omo_14_3_npc] - - name: omo_15 - dir: world/area_omo/omo_15 - type: code - start: 0xDE8770 - vram_class: map - subsegments: - - [auto, c, omo_15_0_header] - - [auto, c, omo_15_1_music] - - [auto, c, omo_15_2_main] - - [auto, c, omo_15_3_npc] - - name: omo_16 - dir: world/area_omo/omo_16 - type: code - start: 0xDEBED0 - vram_class: map - subsegments: - - [auto, c, omo_16_0_header] - - [auto, c, omo_16_1_main] - - [auto, c, omo_16_2_train] - - [auto, c, omo_16_3_npc] - - name: omo_17 - dir: world/area_omo/omo_17 - type: code - start: 0xDEEEA0 - vram_class: map - subsegments: - - [auto, c, omo_17_0_header] - - [auto, c, omo_17_1_main] - - [auto, c, omo_17_2_gizmos] - - [auto, c, omo_17_3_train] - - [auto, c, omo_17_4_npc] - - [auto, c, omo_17_5_entity] - - name: end_00 - dir: world/area_end/end_00 - type: code - start: 0xDF6A00 - vram_class: map - subsegments: - - [auto, c, end_00_0_header] - - [auto, c, end_00_1_main] - - [auto, c, end_00_2_credits] - - [auto, c, end_00_3_parade_setup] - - [auto, c, end_00_4_allies] - - [auto, c, end_00_5_koopas] - - [auto, c, end_00_6_caravan] - - [auto, c, end_00_7_boos] - - [auto, c, end_00_8_yoshis] - - [auto, c, end_00_9_huff_n_puff] - - [auto, c, end_00_A_crystal_king] - - [auto, c, end_00_B_bowser] - - name: end_01 - dir: world/area_end/end_01 - type: code - start: 0xE05360 - vram_class: map - subsegments: - - [auto, c, end_01_0_header] - - [auto, c, end_01_1_main] - - [auto, c, end_01_2_credits] - - [auto, c, end_01_3_parade_setup] - - [auto, c, end_01_4_opera_float] - - [auto, c, end_01_5_flower_float] - - [auto, c, end_01_6_shyguy_float] - - [auto, c, end_01_7_peach_float] - - name: mgm_00 - dir: world/area_mgm/mgm_00 - type: code - start: 0xE0E7A0 - vram_class: map - subsegments: - - [auto, c, mgm_00_0_header] - - [auto, c, mgm_00_1_main] - - [auto, c, mgm_00_2_npc] - - [auto, c, mgm_00_3_scoreboard] - - name: mgm_01 - dir: world/area_mgm/mgm_01 - type: code - start: 0xE12760 - vram_class: map - subsegments: - - [auto, c, mgm_01_0_header] - - [auto, c, mgm_01_1_main] - - [auto, c, mgm_01_2_npc] - - [auto, c, mgm_01_3_entity] - - [auto, c, mgm_01_4_images] - - start: 0xE15440 - type: .data - name: mgm_01_4_images - subsegments: - - [0xE15440, ci4, panel_1_coin, 32, 32] - - [0xE15640, palette, panel_1_coin] - - [0xE15660, ci4, panel_5_coins, 32, 32] - - [0xE15860, palette, panel_5_coins] - - [0xE15880, ci4, panel_times_5, 32, 32] - - [0xE15A80, palette, panel_times_5] - - [0xE15AA0, ci4, panel_bowser, 32, 32] - - [0xE15CA0, palette, panel_bowser] - - [0xE15CC0] - - name: mgm_02 - dir: world/area_mgm/mgm_02 - type: code - start: 0xE15D80 - vram_class: map + - [0x79F258, vtx, level_up/draw_U] + - [0x79F2D8, vtx, level_up/draw_exclamation_mark] + - [0x79F358, ia8, level_up/big_V, 64, 64] + - [0x7A0358, gfx, level_up/big_V] + - [0x7A03D0, ia8, level_up/big_P, 64, 64] + - [0x7A13D0, gfx, level_up/big_P] + - [0x7A1448, ia8, level_up/big_exclamation_mark, 64, 64] + - [0x7A2448, gfx, level_up/big_exclamation_mark] + - [0x7A24C0, ia8, level_up/big_U, 64, 64] + - [0x7A34C0, gfx, level_up/big_U] + - [0x7A3538, ia8, level_up/big_L, 64, 64] + - [0x7A4538, gfx, level_up/big_L] + - [0x7A45B0, ia8, level_up/big_E, 64, 64] + - [0x7A55B0, gfx, level_up/big_E] + - [0x7A5628] + - [0x7A59F0, ci4, level_up/heart, 40, 40] + - [0x7A5D10, palette, level_up/heart] + - [0x7A5D30, ci4, level_up/flower, 40, 40] + - [0x7A6050, palette, level_up/flower] + - [0x7A6070, ci4, level_up/leaves, 40, 40] + - [0x7A6390, palette, level_up/leaves] + - [0x7A63B0, ci4, level_up/badge, 40, 40] + - [0x7A66D0, palette, level_up/badge] + - [0x7A66F0, ci4, level_up/FP, 32, 24] + - [0x7A6870, palette, level_up/FP] + - [0x7A6890, ci4, level_up/BP, 32, 24] + - [0x7A6A10, palette, level_up/BP] + - [0x7A6A30, ci4, level_up/HP, 32, 24] + - [0x7A6BB0, palette, level_up/HP] + - [0x7A6BD0, ci4, level_up/digit_0, 8, 16] + - [0x7A6C10, palette, level_up/digit_0] + - [0x7A6C30, ci4, level_up/digit_1, 8, 16] + - [0x7A6C70, palette, level_up/digit_1] + - [0x7A6C90, ci4, level_up/digit_2, 8, 16] + - [0x7A6CD0, palette, level_up/digit_2] + - [0x7A6CF0, ci4, level_up/digit_3, 8, 16] + - [0x7A6D30, palette, level_up/digit_3] + - [0x7A6D50, ci4, level_up/digit_4, 8, 16] + - [0x7A6D90, palette, level_up/digit_4] + - [0x7A6DB0, ci4, level_up/digit_5, 8, 16] + - [0x7A6DF0, palette, level_up/digit_5] + - [0x7A6E10, ci4, level_up/digit_6, 8, 16] + - [0x7A6E50, palette, level_up/digit_6] + - [0x7A6E70, ci4, level_up/digit_7, 8, 16] + - [0x7A6EB0, palette, level_up/digit_7] + - [0x7A6ED0, ci4, level_up/digit_8, 8, 16] + - [0x7A6F10, palette, level_up/digit_8] + - [0x7A6F30, ci4, level_up/digit_9, 8, 16] + - [0x7A6F70, palette, level_up/digit_9] + - [0x7A6F90, ci4, level_up/small_digit_0, 8, 8] + - [0x7A6FB0, palette, level_up/small_digit_0] + - [0x7A6FD0, ci4, level_up/small_digit_1, 8, 8] + - [0x7A6FF0, palette, level_up/small_digit_1] + - [0x7A7010, ci4, level_up/small_digit_2, 8, 8] + - [0x7A7030, palette, level_up/small_digit_2] + - [0x7A7050, ci4, level_up/small_digit_3, 8, 8] + - [0x7A7070, palette, level_up/small_digit_3] + - [0x7A7090, ci4, level_up/small_digit_4, 8, 8] + - [0x7A70B0, palette, level_up/small_digit_4] + - [0x7A70D0, ci4, level_up/small_digit_5, 8, 8] + - [0x7A70F0, palette, level_up/small_digit_5] + - [0x7A7110, ci4, level_up/small_digit_6, 8, 8] + - [0x7A7130, palette, level_up/small_digit_6] + - [0x7A7150, ci4, level_up/small_digit_7, 8, 8] + - [0x7A7170, palette, level_up/small_digit_7] + - [0x7A7190, ci4, level_up/small_digit_8, 8, 8] + - [0x7A71B0, palette, level_up/small_digit_8] + - [0x7A71D0, ci4, level_up/small_digit_9, 8, 8] + - [0x7A71F0, palette, level_up/small_digit_9] + - [0x7A7210, ci4, level_up/small_arrow, 8, 8] + - [0x7A7230, palette, level_up/small_arrow] + - [0x7A7250, palette, level_up/digit_0.red] + - [0x7A7270, palette, level_up/digit_1.red] + - [0x7A7290, palette, level_up/digit_2.red] + - [0x7A72B0, palette, level_up/digit_3.red] + - [0x7A72D0, palette, level_up/digit_4.red] + - [0x7A72F0, palette, level_up/digit_5.red] + - [0x7A7310, palette, level_up/digit_6.red] + - [0x7A7330, palette, level_up/digit_7.red] + - [0x7A7350, palette, level_up/digit_8.red] + - [0x7A7370, palette, level_up/digit_9.red] + - [0x7A7390, palette, level_up/small_digit_0.red] + - [0x7A73B0, palette, level_up/small_digit_1.red] + - [0x7A73D0, palette, level_up/small_digit_2.red] + - [0x7A73F0, palette, level_up/small_digit_3.red] + - [0x7A7410, palette, level_up/small_digit_4.red] + - [0x7A7430, palette, level_up/small_digit_5.red] + - [0x7A7450, palette, level_up/small_digit_6.red] + - [0x7A7470, palette, level_up/small_digit_7.red] + - [0x7A7490, palette, level_up/small_digit_8.red] + - [0x7A74B0, palette, level_up/small_digit_9.red] + - [0x7A74D0, palette, level_up/small_arrow.red] + - [0x7A74F0, palette, level_up/digit_0.blue] + - [0x7A7510, palette, level_up/digit_1.blue] + - [0x7A7530, palette, level_up/digit_2.blue] + - [0x7A7550, palette, level_up/digit_3.blue] + - [0x7A7570, palette, level_up/digit_4.blue] + - [0x7A7590, palette, level_up/digit_5.blue] + - [0x7A75B0, palette, level_up/digit_6.blue] + - [0x7A75D0, palette, level_up/digit_7.blue] + - [0x7A75F0, palette, level_up/digit_8.blue] + - [0x7A7610, palette, level_up/digit_9.blue] + - [0x7A7630, palette, level_up/small_digit_0.blue] + - [0x7A7650, palette, level_up/small_digit_1.blue] + - [0x7A7670, palette, level_up/small_digit_2.blue] + - [0x7A7690, palette, level_up/small_digit_3.blue] + - [0x7A76B0, palette, level_up/small_digit_4.blue] + - [0x7A76D0, palette, level_up/small_digit_5.blue] + - [0x7A76F0, palette, level_up/small_digit_6.blue] + - [0x7A7710, palette, level_up/small_digit_7.blue] + - [0x7A7730, palette, level_up/small_digit_8.blue] + - [0x7A7750, palette, level_up/small_digit_9.blue] + - [0x7A7770, palette, level_up/small_arrow.blue] + - [0x7A7790, ci4, level_up/select_one_to_upgrade, 208, 16] + - [0x7A7E10, palette, level_up/select_one_to_upgrade] + - [0x7A7E30] + - type: code + name: starpoint + start: 0x7A89A0 + vram_class: battle_move + symbol_name_format: $VRAM_$ROM subsegments: - - [auto, c, mgm_02_0_header] - - [auto, c, mgm_02_1_main] - - [auto, c, mgm_02_2_npc] - - [auto, c, mgm_02_3_images] - - start: 0xE1E020 + - [auto, c, starpoint] + - start: 0x7A89A0 type: .data - name: mgm_02_3_images + name: starpoint subsegments: - - [0xE1E020, ci4, panel_peach, 32, 32] - - [0xE1E220, palette, panel_peach] - - [0xE1E240] - - name: mgm_03 - dir: world/area_mgm/mgm_03 + - [0x7A89A0] + - [0x7A89B8, ia8, starpoint/starpoint, 128, 32] + - [0x7A99B8, gfx, starpoint/load_starpoint] + - [0x7A9A30, vtx, starpoint/starpoint] + - [0x7A9A70] + - [0x7A9B38, vtx, starpoint/starpoints] + - [0x7A9B78, ia8, starpoint/starpoints, 128, 32] + - [0x7AAB78, gfx, starpoint/load_starpoints] + - [0x7AABF0] + - [0x7AACA0, vtx, starpoint/digit_0] + - [0x7AACE0, ia8, starpoint/digit_0, 64, 64] + - [0x7ABCE0, gfx, starpoint/load_digit_0] + - [0x7ABD58, gfx, starpoint/__render_digit_0] + - [0x7ABDA0, gfx, starpoint/_render_digit_0] + - [0x7ABDB0, gfx, starpoint/render_digit_0] + - [0x7ABDC0, vtx, starpoint/digit_1] + - [0x7ABE00, ia8, starpoint/digit_1, 64, 64] + - [0x7ACE00, gfx, starpoint/load_digit_1] + - [0x7ACE78, gfx, starpoint/__render_digit_1] + - [0x7ACEC0, gfx, starpoint/_render_digit_1] + - [0x7ACED0, gfx, starpoint/render_digit_1] + - [0x7ACEE0, vtx, starpoint/digit_2] + - [0x7ACF20, ia8, starpoint/digit_2, 64, 64] + - [0x7ADF20, gfx, starpoint/load_digit_2] + - [0x7ADF98, gfx, starpoint/__render_digit_2] + - [0x7ADFE0, gfx, starpoint/_render_digit_2] + - [0x7ADFF0, gfx, starpoint/render_digit_2] + - [0x7AE000, vtx, starpoint/digit_3] + - [0x7AE040, ia8, starpoint/digit_3, 64, 64] + - [0x7AF040, gfx, starpoint/load_digit_3] + - [0x7AF0B8, gfx, starpoint/__render_digit_3] + - [0x7AF100, gfx, starpoint/_render_digit_3] + - [0x7AF110, gfx, starpoint/render_digit_3] + - [0x7AF120, vtx, starpoint/digit_4] + - [0x7AF160, ia8, starpoint/digit_4, 64, 64] + - [0x7B0160, gfx, starpoint/load_digit_4] + - [0x7B01D8, gfx, starpoint/__render_digit_4] + - [0x7B0220, gfx, starpoint/_render_digit_4] + - [0x7B0230, gfx, starpoint/render_digit_4] + - [0x7B0240, vtx, starpoint/digit_5] + - [0x7B0280, ia8, starpoint/digit_5, 64, 64] + - [0x7B1280, gfx, starpoint/load_digit_5] + - [0x7B12F8, gfx, starpoint/__render_digit_5] + - [0x7B1340, gfx, starpoint/_render_digit_5] + - [0x7B1350, gfx, starpoint/render_digit_5] + - [0x7B1360, vtx, starpoint/digit_6] + - [0x7B13A0, ia8, starpoint/digit_6, 64, 64] + - [0x7B23A0, gfx, starpoint/load_digit_6] + - [0x7B2418, gfx, starpoint/__render_digit_6] + - [0x7B2460, gfx, starpoint/_render_digit_6] + - [0x7B2470, gfx, starpoint/render_digit_6] + - [0x7B2480, vtx, starpoint/digit_7] + - [0x7B24C0, ia8, starpoint/digit_7, 64, 64] + - [0x7B34C0, gfx, starpoint/load_digit_7] + - [0x7B3538, gfx, starpoint/__render_digit_7] + - [0x7B3580, gfx, starpoint/_render_digit_7] + - [0x7B3590, gfx, starpoint/render_digit_7] + - [0x7B35A0, vtx, starpoint/digit_8] + - [0x7B35E0, ia8, starpoint/digit_8, 64, 64] + - [0x7B45E0, gfx, starpoint/load_digit_8] + - [0x7B4658, gfx, starpoint/__render_digit_8] + - [0x7B46A0, gfx, starpoint/_render_digit_8] + - [0x7B46B0, gfx, starpoint/render_digit_8] + - [0x7B46C0, vtx, starpoint/digit_9] + - [0x7B4700, ia8, starpoint/digit_9, 64, 64] + - [0x7B5700, gfx, starpoint/load_digit_9] + - [0x7B5778, gfx, starpoint/__render_digit_9] + - [0x7B57C0, gfx, starpoint/_render_digit_9] + - [0x7B57D0, gfx, starpoint/render_digit_9] + - [0x7B57E0] + - name: world_script_api + dir: world/script_api type: code - start: 0xE1E380 - vram_class: map + start: 0x7E0E80 + vram_class: world_script_api + subsegments: + - [auto, c, shops] + - [auto, c, rooms] + - [auto, c, push_blocks] + - [auto, c, enter_exit] + - name: texture_memory + type: code + start: 0x7E73A0 + vram_class: texture_memory subsegments: - - [auto, c, mgm_03_0_header] - - [auto, c, mgm_03_1_main] + - [auto, c, texture_memory] + + +############ +### maps ### +############ + # new maps go here! - name: gv_01 dir: world/area_gv/gv_01 type: code @@ -13135,6 +6906,14 @@ segments: subsegments: - [auto, c, gv_01_0_header] - [auto, c, gv_01_1_main] + - name: ham_01 + dir: world/area_ham/ham_01 + type: code + vram_class: map + subsegments: + - [auto, c, ham_01_main] + - [auto, c, ham_01_entrances] + - [auto, c, ham_01_tex_panners] - name: heaps2 type: code start: 0xE20110 @@ -14494,299 +8273,6 @@ segments: - [0xE9DE90, ci4, BombableRock, 64, 64] - [0xE9E690, palette, BombableRock] - [0xE9E6B0] - -################# -### Dead maps ### -################# - - [0xE9ECD0, bin, dead_kzn_11_end] # tail of dead kzn_11 - #- name: dead_kzn_11 - # dir: world/dead/area_kzn/kzn_11 - # type: code - # start: 0xE9AFF0 - # vram_class: map - # subsegments: - # - [auto, c, kzn_11_0_header] - # - [auto, c, kzn_11_1_main] - # - [auto, c, kzn_11_2_platforms] - # - [auto, c, kzn_11_3_npc] - # - [0xE9D650] - - name: dead_kzn_17 - dir: world/dead/area_kzn/kzn_17 - type: code - start: 0xEA0900 - vram_class: map - dead_code: True - subsegments: - - [auto, c, kzn_17_0_header] - - [auto, c, kzn_17_1_main] - - [auto, c, kzn_17_2_entity] - - [auto, c, kzn_17_3_npc] - - [auto, c, kzn_17_4_tromp] - - name: dead_kzn_18 - dir: world/dead/area_kzn/kzn_18 - type: code - start: 0xEA6FD0 - vram_class: map - dead_code: True - subsegments: - - [auto, c, kzn_18_0_header] - - [auto, c, kzn_18_1_main] - - [auto, c, kzn_18_2_npc] - - [auto, c, kzn_18_3_entity] - - name: dead_kzn_19 - dir: world/dead/area_kzn/kzn_19 - type: code - start: 0xEA8AE0 - vram_class: map - dead_code: True - subsegments: - - [auto, c, kzn_19_0_header] - - [auto, c, kzn_19_1_music] - - [auto, c, kzn_19_2_main] - - [auto, c, kzn_19_3_npc_settings] - - [auto, c, kzn_19_4_npc] - - [auto, c, kzn_19_5_eruption] - - [auto, c, kzn_19_6_entity] - - start: 0xEABB20 - type: .data - name: kzn_19_4_npc - subsegments: - - [0xEABB20] - - [0xEABFB8, ci4, ../../lava_piranha/vine, 64, 32] - - [0xEAC3B8, palette, ../../lava_piranha/vine] - - [0xEAC5B8, gfx_common, ../../lava_piranha/vine] - - [0xEAC698] - - name: dead_kzn_20 - dir: world/dead/area_kzn/kzn_20 - type: code - start: 0xEB0E60 - vram_class: map - dead_code: True - subsegments: - - [auto, c, kzn_20_0_header] - - [auto, c, kzn_20_1_music] - - [auto, c, kzn_20_2_main] - - [auto, c, kzn_20_3_npc] - - name: dead_kzn_22 - dir: world/dead/area_kzn/kzn_22 - type: code - start: 0xEB5130 - vram_class: map - dead_code: True - subsegments: - - [auto, c, kzn_22_0_header] - - [auto, c, kzn_22_1_music] - - [auto, c, kzn_22_2_main] - - [auto, c, kzn_22_3_entity] - - [auto, c, kzn_22_4_npc] - - name: dead_kzn_23 - dir: world/dead/area_kzn/kzn_23 - type: code - start: 0xEB7230 - vram_class: map - dead_code: True - subsegments: - - [auto, c, kzn_23_0_header] - - [auto, c, kzn_23_1_music] - - [auto, c, kzn_23_2_main] - - [auto, c, kzn_23_3_npc] - - name: dead_flo_00 - dir: world/dead/area_flo/flo_00 - type: code - start: 0xEB8E50 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_00_0_header] - - [auto, c, flo_00_1_music] - - [auto, c, flo_00_2_main] - - [auto, c, flo_00_3_npc] - - [auto, c, flo_00_4_epilogue] - - [auto, c, flo_00_5_beanstalk] - - [auto, c, flo_00_6_entity] - - name: dead_flo_03 - dir: world/dead/area_flo/flo_03 - type: code - start: 0xEC2200 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_03_0_header] - - [auto, c, flo_03_1_music] - - [auto, c, flo_03_2_main] - - [auto, c, flo_03_3_npc] - - [auto, c, flo_03_4_foliage] - - [auto, c, flo_03_5_entity] - - name: dead_flo_07 - dir: world/dead/area_flo/flo_07 - type: code - start: 0xEC71B0 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_07_0_header] - - [auto, c, flo_07_1_music] - - [auto, c, flo_07_2_main] - - [auto, c, flo_07_3_npc] - - name: dead_flo_08 - dir: world/dead/area_flo/flo_08 - type: code - start: 0xEC9D00 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_08_0_header] - - [auto, c, flo_08_1_music] - - [auto, c, flo_08_2_entity] - - [auto, c, flo_08_3_main] - - [auto, c, flo_08_4_npc] - - [auto, c, flo_08_5_foliage] - - [auto, c, flo_08_6_vines] - - name: dead_flo_09 - dir: world/dead/area_flo/flo_09 - type: code - start: 0xECFFF0 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_09_0_header] - - [auto, c, flo_09_1_music] - - [auto, c, flo_09_2_main] - - [auto, c, flo_09_3_vines] - - [auto, c, flo_09_4_foliage] - - [auto, c, flo_09_5_npc] - - name: dead_flo_10 - dir: world/dead/area_flo/flo_10 - type: code - start: 0xED4220 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_10_0_header] - - [auto, c, flo_10_1_music] - - [auto, c, flo_10_2_entity] - - [auto, c, flo_10_3_main] - - [auto, c, flo_10_4_fountain] - - [auto, c, flo_10_5_npc] - - [auto, c, flo_10_6_waterfx] - - [auto, c, flo_10_7_foliage] - - name: dead_flo_11 - dir: world/dead/area_flo/flo_11 - type: code - start: 0xED8E20 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_11_0_header] - - [auto, c, flo_11_1_music] - - [auto, c, flo_11_2_main] - - [auto, c, flo_11_3_npc] - - [auto, c, flo_11_4_entity] - - name: dead_flo_12 - dir: world/dead/area_flo/flo_12 - type: code - start: 0xEDBFE0 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_12_0_header] - - [auto, c, flo_12_1_music] - - [auto, c, flo_12_2_main] - - [auto, c, flo_12_3_npc] - - name: dead_flo_13 - dir: world/dead/area_flo/flo_13 - type: code - start: 0xEDE9C0 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_13_0_header] - - [auto, c, flo_13_1_music] - - [auto, c, flo_13_2_entity] - - [auto, c, flo_13_3_main] - - [auto, c, flo_13_4_npc] - - [auto, c, flo_13_5_new_partner] - - name: dead_flo_14 - dir: world/dead/area_flo/flo_14 - type: code - start: 0xEE65B0 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_14_0_header] - - [auto, c, flo_14_1_music] - - [auto, c, flo_14_2_main] - - [auto, c, flo_14_3_bubbles] - - [auto, c, flo_14_4_npc] - - [auto, c, flo_14_5_entity] - - [auto, c, flo_14_6_logs] - - name: dead_flo_15 - dir: world/dead/area_flo/flo_15 - type: code - start: 0xEEB990 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_15_0_header] - - [auto, c, flo_15_1_music] - - [auto, c, flo_15_2_main] - - [auto, c, flo_15_3_npc] - - [auto, c, flo_15_4_entity] - - [auto, c, flo_15_5_stairs] - - name: dead_flo_16 - dir: world/dead/area_flo/flo_16 - type: code - start: 0xEED100 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_16_0_header] - - [auto, c, flo_16_1_music] - - [auto, c, flo_16_2_main] - - [auto, c, flo_16_3_vines] - - [auto, c, flo_16_4_entity] - - [auto, c, flo_16_5_npc] - - [auto, c, flo_16_6_puzzle] - - name: dead_flo_17 - dir: world/dead/area_flo/flo_17 - type: code - start: 0xEF2610 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_17_0_header] - - [auto, c, flo_17_1_music] - - [auto, c, flo_17_2_main] - - [auto, c, flo_17_3_logs] - - [auto, c, flo_17_4_npc] - - [auto, c, flo_17_5_entity] - - name: dead_flo_18 - dir: world/dead/area_flo/flo_18 - type: code - start: 0xEF7A80 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_18_0_header] - - [auto, c, flo_18_1_music] - - [auto, c, flo_18_2_main] - - [auto, c, flo_18_3_machine] - - [auto, c, flo_18_4_npc] - - [auto, c, flo_18_5_foliage] - - name: dead_flo_19 - dir: world/dead/area_flo/flo_19 - type: code - start: 0xEFEB00 - vram_class: map - dead_code: True - subsegments: - - [auto, c, flo_19_0_header] - - [auto, c, flo_19_1_music] - - [auto, c, flo_19_2_entity] - - [auto, c, flo_19_3_main] - - [auto, c, flo_19_4_clouds] - - [auto, c, flo_19_5_beanstalk] - - [0xF00000, pm_sbn, audio] - [0x1942C40, bin, copy_1942C40] # copy of 0x1642C40 - 0x1643000 - { start: 0x1943000, align: 8, type: pm_sprites, name: sprites } @@ -14842,6 +8328,7 @@ segments: - 2C_QuizQuestions - 2D_QuizChoices - 2E_Credits + - 2F_Misc - [0x1C84D30, bin, unk_1C84D30] # junk(?) - [0x1E00000, bin, copy_1E00000] # copy of 0x1943000 - 0x1983000 - [0x1E40000, pm_map_data, mapfs] diff --git a/ver/us/symbol_addrs.txt b/ver/us/symbol_addrs.txt index b121f3530b4..005130f4146 100644 --- a/ver/us/symbol_addrs.txt +++ b/ver/us/symbol_addrs.txt @@ -3100,8 +3100,8 @@ D_800F7B48 = 0x800F7B48; // rom:0x90FF8 D_800F7B4C = 0x800F7B4C; // rom:0x90FFC GravityParamsStartJump = 0x800F7B50; // rom:0x91000 GravityParamsStartFall = 0x800F7B60; // rom:0x91010 -D_800F7B70 = 0x800F7B70; // rom:0x91020 -DefaultMoveSpeeds = 0x800F7B74; // rom:0x91024 +DefaultWalkSpeed = 0x800F7B70; // rom:0x91020 +DefaultMoveSpeed = 0x800F7B74; // rom:0x91024 D_800F7B80 = 0x800F7B80; // rom:0x91030 D_800F7B84 = 0x800F7B84; // rom:0x91034 D_800F7B90 = 0x800F7B90; // rom:0x91040 @@ -3781,7 +3781,7 @@ NpcHitQueryBehindLeftY = 0x8010C974; // rom:0xA5E24 NpcHitQueryColliderID = 0x8010C978; // rom:0xA5E28 JumpedOnSwitchZ = 0x8010C97C; // rom:0xA5E2C PlayerRunStateTime = 0x8010C980; // rom:0xA5E30 -D_8010C984 = 0x8010C984; // rom:0xA5E34 +StepUpLastYaw = 0x8010C984; // rom:0xA5E34 D_8010C988 = 0x8010C988; // rom:0xA5E38 NpcHitQueryAheadCollider = 0x8010C98C; // rom:0xA5E3C PlayerNormalPitch = 0x8010C990; // rom:0xA5E40 @@ -3828,8 +3828,8 @@ D_8010CFE0 = 0x8010CFE0; // rom:0xA6490 NextPartnerID = 0x8010CFE4; // rom:0xA6494 func_8010FD98 = 0x8010FD98; // type:func rom:0xA6498 wPartner = 0x8010CFEC; // rom:0xA649C -D_8010CFF0 = 0x8010CFF0; // rom:0xA64A0 -D_8010CFF4 = 0x8010CFF4; // rom:0xA64A4 +PrevTimeInAir = 0x8010CFF0; // rom:0xA64A0 +LandedTimeInAir = 0x8010CFF4; // rom:0xA64A4 D_8010CFF8 = 0x8010CFF8; // rom:0xA64A8 D_8010D000 = 0x8010D000; // rom:0xA64B0 D_8010D004 = 0x8010D004; // rom:0xA64B4 @@ -15212,9 +15212,6 @@ D_802626E0_822F60 = 0x802626E0; // rom:0x822F60 D_802626E8_822F68 = 0x802626E8; // rom:0x822F68 D_80262890_823110 = 0x80262890; // rom:0x823110 D_80262898_823118 = 0x80262898; // rom:0x823118 -mac_01_toad_house_blanket_vtx = 0x8024B590; // segment:mac_01 rom:0x80BE10 size:0x15E0 -mac_01_toad_house_blanket_gfx = 0x8024CB70; // segment:mac_01 rom:0x80D3F0 -mac_01_toad_house_blanket_img = 0x8024CCD8; // segment:mac_01 rom:0x80D558 mac_02_Pipe_SetAnimFlag = 0x80240000; // type:func rom:0x8232C0 mac_02_Pipe_GetCurrentFloor = 0x80240020; // type:func rom:0x8232E0 mac_02_Pipe_AwaitDownInput = 0x80240034; // type:func rom:0x8232F4 @@ -17123,13 +17120,6 @@ dro_02_npcSettings_802475B0 = 0x802475B0; // rom:0x970770 dro_02_D_802475DC_97079C = 0x802475DC; // rom:0x97079C dro_02_D_802475E0_9707A0 = 0x802475E0; // rom:0x9707A0 dro_02_pad_XX111 = 0x802475E4; // rom:0x9707A4 -dro_02_card = 0x802475E8; // segment:dro_02 rom:0x9707A8 -dro_02_card_pal = 0x802477E8; // segment:dro_02 rom:0x9709A8 -dro_02_card_1_vtx = 0x80247808; // segment:dro_02 rom:0x9709C8 size:0x80 -dro_02_card_2_vtx = 0x80247888; // segment:dro_02 rom:0x970A48 size:0x40 -dro_02_card_setup_gfx = 0x802478C8; // segment:dro_02 rom:0x970A88 -dro_02_card_1_gfx = 0x802479B8; // segment:dro_02 rom:0x970B78 -dro_02_card_2_gfx = 0x80247A38; // segment:dro_02 rom:0x970BF8 dro_02_init_80247A80 = 0x80247A80; // rom:0x970C40 dro_02_npcAI_80247A90 = 0x80247A90; // rom:0x970C50 dro_02_80247AA0 = 0x80247AA0; // rom:0x970C60 @@ -17161,9 +17151,6 @@ dro_02_D_80248D08_971EC8 = 0x80248D08; // rom:0x971EC8 dro_02_D_80248D34_971EF4 = 0x80248D34; // rom:0x971EF4 dro_02_D_80248D60_971F20 = 0x80248D60; // rom:0x971F20 dro_02_D_80248D8C_971F4C = 0x80248D8C; // rom:0x971F4C -dro_02_toad_house_blanket_vtx = 0x80248DD8; // segment:dro_02 rom:0x971F98 size:0x15E0 -dro_02_toad_house_blanket_gfx = 0x8024A3B8; // segment:dro_02 rom:0x973578 -dro_02_toad_house_blanket_img = 0x8024A520; // segment:dro_02 rom:0x9736E0 dro_02_8024AC14 = 0x8024AC14; // rom:0x973DD4 dro_02_8024AC8C = 0x8024AC8C; // rom:0x973E4C dro_02_EVS_NpcInteract_ToadHouseKeeper = 0x8024ADE4; // rom:0x973FA4 @@ -19091,8 +19078,6 @@ tst_11_test_reflection_worker_partner = 0x80240730; // type:func rom:0xB1D180 tst_11_func_80240000_B1D760 = 0x80240000; // type:func rom:0xB1D760 tst_13_UnkDistFunc2 = 0x802400A0; // type:func rom:0xB1D800 tst_13_func_8024013C_B1D89C = 0x8024013C; // type:func rom:0xB1D89C -tst_13_shockwave_vtx = 0x802422B0; // rom:0xB1FA10 segment:tst_13 size:0x5B0 -tst_13_shockwave_gfx = 0x80242860; // rom:0xB1FFC0 segment:tst_13 tst_13_dummy_gfx = 0x80242BF0; // rom:0xB20350 tst_13_D_80242BF8_B20358 = 0x80242BF8; // rom:0xB20358 tst_13_D_80242BFC_B2035C = 0x80242D00; // rom:0xB20460 @@ -20550,22 +20535,6 @@ dgb_01_npcGroupList_80246E50 = 0x80246E50; // rom:0xC046D0 dgb_01_npcGroupList_80246E8C = 0x80246E8C; // rom:0xC0470C dgb_01_npcGroupList_80246ED4 = 0x80246ED4; // rom:0xC04754 dgb_01_npcGroupList_80246F1C = 0x80246F1C; // rom:0xC0479C -dgb_01_img0_png = 0x80246F70; // segment:dgb_01 rom:0xC047F0 -dgb_01_img0_gfx = 0x80247F70; // segment:dgb_01 rom:0xC057F0 -dgb_01_img1_png = 0x80247FF0; // segment:dgb_01 rom:0xC05870 -dgb_01_img1_gfx = 0x80248FF0; // segment:dgb_01 rom:0xC06870 -dgb_01_img2_png = 0x80249070; // segment:dgb_01 rom:0xC068F0 -dgb_01_img2_gfx = 0x80249870; // segment:dgb_01 rom:0xC070F0 -dgb_01_img3_png = 0x802498F0; // segment:dgb_01 rom:0xC07170 -dgb_01_img3_gfx = 0x80249CF0; // segment:dgb_01 rom:0xC07570 -dgb_01_img4_png = 0x80249D70; // segment:dgb_01 rom:0xC075F0 -dgb_01_img4_gfx = 0x8024A170; // segment:dgb_01 rom:0xC079F0 -dgb_01_img5_png = 0x8024A1F0; // segment:dgb_01 rom:0xC07A70 -dgb_01_img5_gfx = 0x8024A5F0; // segment:dgb_01 rom:0xC07E70 -dgb_01_img6_png = 0x8024A670; // segment:dgb_01 rom:0xC07EF0 -dgb_01_img6_gfx = 0x8024AE70; // segment:dgb_01 rom:0xC086F0 -dgb_01_img7_png = 0x8024AEF0; // segment:dgb_01 rom:0xC08770 -dgb_01_img7_gfx = 0x8024B6F0; // segment:dgb_01 rom:0xC08F70 D_8024B770_C08FF0 = 0x8024B770; // rom:0xC08FF0 D_8024B8F8_C09178 = 0x8024B8F8; // rom:0xC09178 D_8024BAA0_C09320 = 0x8024BAA0; // rom:0xC09320 @@ -23613,8 +23582,6 @@ sam_05_PiranhaPlantAI_14 = 0x80241668; // type:func rom:0xD19E48 sam_05_PiranhaPlantAI_Main = 0x80241754; // type:func rom:0xD19F34 sam_05_monstar_png = 0x80242770; // type:func rom:0xD1AF50 sam_05_monstar_pal = 0x80242F70; // type:func rom:0xD1B750 -sam_05_monstar_vtx = 0x802470B0; // segment:sam_05 rom:0xD1F890 size:0x420 -sam_05_monstar_gfx = 0x80246FA0; // segment:sam_05 rom:0xD1F780 func_802419A4_D1A184 = 0x802419A4; // type:func rom:0xD1A184 func_80241D20_D1A500 = 0x80241D20; // type:func rom:0xD1A500 D_80242F90_D1B770 = 0x80242F90; // rom:0xD1B770 @@ -24210,64 +24177,6 @@ EndBlockPushingState = 0x80240FD0; // type:func rom:0xD7FD30 pra_31_UnkFunc11 = 0x80240FF0; // type:func rom:0xD7FD50 pra_31_ItemChoice_HasSelectedItem = 0x8024119C; // rom:0xD7FEFC pra_31_ItemChoice_SelectedItemID = 0x802411A0; // rom:0xD7FF00 -pra_31_texture_1_img = 0x80243510; // segment:pra_31 rom:0xD82270 -pra_31_texture_1_pal = 0x80243D10; // segment:pra_31 rom:0xD82A70 -pra_31_texture_1_gfx = 0x80243D30; // segment:pra_31 rom:0xD82A90 -pra_31_texture_2_img = 0x80243DF0; // segment:pra_31 rom:0xD82B50 -pra_31_texture_2_pal = 0x802445F0; // segment:pra_31 rom:0xD83350 -pra_31_texture_2_gfx = 0x80244610; // segment:pra_31 rom:0xD83370 -pra_31_texture_3_img = 0x802446C0; // segment:pra_31 rom:0xD83420 -pra_31_texture_3_gfx = 0x80244EC0; // segment:pra_31 rom:0xD83C20 -pra_31_unk_01_gfx = 0x80244F50; // segment:pra_31 rom:0xD83CB0 -pra_31_unk_02_gfx = 0x80244FC8; // segment:pra_31 rom:0xD83D28 -pra_31_unk_03_gfx = 0x80245000; // segment:pra_31 rom:0xD83D60 -pra_31_unk_04_gfx = 0x80245068; // segment:pra_31 rom:0xD83DC8 -pra_31_unk_05_gfx = 0x802450A0; // segment:pra_31 rom:0xD83E00 -pra_31_unk_06_gfx = 0x80245118; // segment:pra_31 rom:0xD83E78 -pra_31_unk_07_gfx = 0x80245150; // segment:pra_31 rom:0xD83EB0 -pra_31_unk_08_gfx = 0x802451C8; // segment:pra_31 rom:0xD83F28 -pra_31_unk_09_gfx = 0x80245200; // segment:pra_31 rom:0xD83F60 -pra_31_unk_10_gfx = 0x80245268; // segment:pra_31 rom:0xD83FC8 -pra_31_unk_11_gfx = 0x802452A0; // segment:pra_31 rom:0xD84000 -pra_31_unk_12_gfx = 0x80245318; // segment:pra_31 rom:0xD84078 -pra_31_unk_13_gfx = 0x80245350; // segment:pra_31 rom:0xD840B0 -pra_31_unk_14_gfx = 0x802453C8; // segment:pra_31 rom:0xD84128 -pra_31_unk_15_gfx = 0x80245400; // segment:pra_31 rom:0xD84160 -pra_31_unk_16_gfx = 0x80245468; // segment:pra_31 rom:0xD841C8 -pra_31_unk_17_gfx = 0x802454A0; // segment:pra_31 rom:0xD84200 -pra_31_unk_18_gfx = 0x80245518; // segment:pra_31 rom:0xD84278 -pra_31_unk_19_gfx = 0x80245550; // segment:pra_31 rom:0xD842B0 -pra_31_unk_20_gfx = 0x802455C8; // segment:pra_31 rom:0xD84328 -pra_31_unk_21_gfx = 0x80245600; // segment:pra_31 rom:0xD84360 -pra_31_unk_22_gfx = 0x80245668; // segment:pra_31 rom:0xD843C8 -pra_31_unk_23_gfx = 0x802456A0; // segment:pra_31 rom:0xD84400 -pra_31_unk_24_gfx = 0x80245718; // segment:pra_31 rom:0xD84478 -pra_31_unk_25_gfx = 0x80245750; // segment:pra_31 rom:0xD844B0 -pra_31_unk_26_gfx = 0x802457C8; // segment:pra_31 rom:0xD84528 -pra_31_unk_27_gfx = 0x80245800; // segment:pra_31 rom:0xD84560 -pra_31_unk_28_gfx = 0x80245868; // segment:pra_31 rom:0xD845C8 -pra_31_unk_29_gfx = 0x802458C8; // segment:pra_31 rom:0xD84628 -pra_31_unk_30_gfx = 0x80245930; // segment:pra_31 rom:0xD84690 -pra_31_unk_31_gfx = 0x80245978; // segment:pra_31 rom:0xD846D8 -pra_31_unk_32_gfx = 0x80245A08; // segment:pra_31 rom:0xD84768 -pra_31_unk_33_gfx = 0x80245A30; // segment:pra_31 rom:0xD84790 -pra_31_unk_34_gfx = 0x80245A58; // segment:pra_31 rom:0xD847B8 -pra_31_unk_30_mtx = 0x80247740; // segment:pra_31 rom:0xD864A0 -pra_31_unk_26_mtx = 0x80247780; // segment:pra_31 rom:0xD864E0 -pra_31_unk_24_mtx = 0x802477C0; // segment:pra_31 rom:0xD86520 -pra_31_unk_22_mtx = 0x80247800; // segment:pra_31 rom:0xD86560 -pra_31_unk_20_mtx = 0x80247840; // segment:pra_31 rom:0xD865A0 -pra_31_unk_18_mtx = 0x80247880; // segment:pra_31 rom:0xD865E0 -pra_31_unk_16_mtx = 0x802478C0; // segment:pra_31 rom:0xD86620 -pra_31_unk_14_mtx = 0x80247900; // segment:pra_31 rom:0xD86660 -pra_31_unk_12_mtx = 0x80247940; // segment:pra_31 rom:0xD866A0 -pra_31_unk_10_mtx = 0x80247980; // segment:pra_31 rom:0xD866E0 -pra_31_unk_08_mtx = 0x802479C0; // segment:pra_31 rom:0xD86720 -pra_31_unk_06_mtx = 0x80247A00; // segment:pra_31 rom:0xD86760 -pra_31_unk_04_mtx = 0x80247A40; // segment:pra_31 rom:0xD867A0 -pra_31_unk_02_mtx = 0x80247A80; // segment:pra_31 rom:0xD867E0 -pra_31_stairs_lights = 0x80247720; // segment:pra_31 rom:0xD86480 -pra_31_stairs_vtx = 0x80247AC0; // segment:pra_31 rom:0xD86820 size:0x1D0 D_802424F0_D81250 = 0x802424F0; // rom:0xD81250 D_80242514_D81274 = 0x80242514; // rom:0xD81274 D_80242538_D81298 = 0x80242538; // rom:0xD81298 diff --git a/ver/us/undefined_syms.txt b/ver/us/undefined_syms.txt index 927b249ac3a..76916f70bb8 100644 --- a/ver/us/undefined_syms.txt +++ b/ver/us/undefined_syms.txt @@ -40,342 +40,3 @@ obfuscated_load_engine_data = load_engine_data - 0x315; obfuscated_create_audio_system = create_audio_system - 0x7B; obfuscated_obfuscation_shims_VRAM = obfuscation_shims_VRAM - 0xA912928; obfuscated_obfuscation_shims_ROM_START = obfuscation_shims_ROM_START - 0x8939221; - -// Invalid pointers from dead code -dead_transform_point = transform_point + 0x12F0; -dead_dma_copy = dma_copy + 0x12F0; -dead_rand_int = rand_int + 0x12F0; -dead_clamp_angle = clamp_angle + 0x12F0; -dead_get_clamped_angle_diff = get_clamped_angle_diff + 0x12F0; -dead_atan2 = atan2 + 0x12F0; -dead_dist2D = dist2D + 0x12F0; -dead_dist3D = dist3D + 0x12F0; -dead_add_vec2D_polar = add_vec2D_polar + 0x12F0; -dead_sin_rad = sin_rad + 0x12F0; -dead_cos_rad = cos_rad + 0x12F0; -dead_sin_cos_deg = sin_cos_deg + 0x12F0; -dead_sin_deg = sin_deg + 0x12F0; -dead_cos_deg = cos_deg + 0x12F0; -dead_update_lerp = update_lerp + 0x12F0; -dead_general_heap_malloc = general_heap_malloc + 0x12F0; -dead_general_heap_free = general_heap_free + 0x12F0; -dead_heap_malloc = heap_malloc + 0x12F0; -dead_heap_free = heap_free + 0x12F0; -dead_get_screen_coords = get_screen_coords + 0x1784; -dead_get_npc_by_index = get_npc_by_index + 0x3960; -dead_npc_move_heading = npc_move_heading + 0x39D0; -dead_get_npc_unsafe = get_npc_unsafe + 0x39D0; -dead_get_npc_safe = get_npc_safe + 0x39EC; -dead_disable_npc_shadow = disable_npc_shadow + 0x39EC; -dead_set_npc_yaw = set_npc_yaw + 0x3A10; -dead_spawn_surface_effects = spawn_surface_effects + 0x3A20; -dead_get_enemy = get_enemy + 0x3E0C; -dead_SetEncounterStatusFlags = SetEncounterStatusFlags + 0x40A0; -dead_IsStartingConversation = IsStartingConversation + 0x40A0; -dead_func_80044238 = func_80044238 + 0x40A0; -dead_MakeNpcs = MakeNpcs + 0x40A0; -dead_RemoveNpc = RemoveNpc + 0x40A0; -dead_GetBattleOutcome = GetBattleOutcome + 0x40A0; -dead_GetOwnerEncounterTrigger = GetOwnerEncounterTrigger + 0x40A0; -dead_DoNpcDefeat = DoNpcDefeat + 0x40A0; -dead_StartBossBattle = StartBossBattle + 0x40A0; -dead_BindNpcAI = BindNpcAI + 0x40A0; -dead_BindNpcIdle = BindNpcIdle + 0x40B0; -dead_EnableNpcAI = EnableNpcAI + 0x40B0; -dead_SetNpcAux = SetNpcAux + 0x40B0; -dead_BindNpcAux = BindNpcAux + 0x40B0; -dead_BindNpcInteract = BindNpcInteract + 0x40B0; -dead_BindNpcHit = BindNpcHit + 0x40B0; -dead_BindNpcDefeat = BindNpcDefeat + 0x40B0; -dead_SetSelfVar = SetSelfVar + 0x40B0; -dead_GetSelfVar = GetSelfVar + 0x40B0; -dead_SetNpcVar = SetNpcVar + 0x40B0; -dead_SetSelfEnemyFlagBits = SetSelfEnemyFlagBits + 0x40B0; -dead_SelfEnemyOverrideSyncPos = SelfEnemyOverrideSyncPos + 0x40B0; -dead_GetSelfNpcID = GetSelfNpcID + 0x40B0; -dead_SetEnemyFlagBits = SetEnemyFlagBits + 0x40B0; -dead_GetSelfAnimationFromTable = GetSelfAnimationFromTable + 0x40B0; -dead_OnPlayerFled = OnPlayerFled + 0x40B0; -dead_is_point_within_region = is_point_within_region + 0x40F0; -dead_basic_ai_check_player_dist = basic_ai_check_player_dist + 0x40F0; -dead_ai_enemy_play_sound = ai_enemy_play_sound + 0x4340; -dead_basic_ai_wander_init = basic_ai_wander_init + 0x4420; -dead_basic_ai_wander = basic_ai_wander + 0x4420; -dead_basic_ai_loiter_init = basic_ai_loiter_init + 0x4420; -dead_basic_ai_loiter = basic_ai_loiter + 0x4420; -dead_basic_ai_found_player_jump_init = basic_ai_found_player_jump_init + 0x4420; -dead_basic_ai_found_player_jump = basic_ai_found_player_jump + 0x4420; -dead_basic_ai_chase_init = basic_ai_chase_init + 0x4420; -dead_basic_ai_chase = basic_ai_chase + 0x4420; -dead_basic_ai_lose_player = basic_ai_lose_player + 0x4420; -dead_BasicAI_Main = BasicAI_Main + 0x4420; -dead_basic_ai_suspend = basic_ai_suspend + 0x4450; -dead_snd_ambient_mute = snd_ambient_mute + 0x44B0; -dead_get_current_map_settings = get_current_map_settings + 0x4540; -dead_load_asset_by_name = load_asset_by_name + 0x4550; -dead_osVirtualToPhysical = osVirtualToPhysical + 0x5150; -dead_sqrtf = sqrtf + 0x5150; -dead_guMtxIdentF = guMtxIdentF + 0x51C0; -dead_guMtxF2L = guMtxF2L + 0x51C0; -dead_guMtxCatF = guMtxCatF + 0x51C0; -dead_guTranslateF = guTranslateF + 0x51C0; -dead_decode_yay0 = decode_yay0 + 0x5280; -dead_fx_emote = fx_emote + 0x5280; -dead_fx_sparkles = fx_sparkles + 0x5280; -dead_fx_radial_shimmer = fx_radial_shimmer + 0x5280; -dead_fx_motion_blur_flame = fx_motion_blur_flame + 0x5280; -dead_fx_energy_orb_wave = fx_energy_orb_wave + 0x5280; -dead_fx_misc_particles = fx_misc_particles + 0x5280; -dead_fx_spirit_card = fx_spirit_card + 0x5280; -dead_fx_sun = fx_sun + 0x5280; -dead_fx_sun_undeclared = dead_fx_sun; -dead_fx_star_spirits_energy = fx_star_spirits_energy + 0x5280; -dead_gGameStatusPtr = gGameStatusPtr + 0x5294; -dead_gMatrixListPos = gMatrixListPos + 0x5350; -dead_gCurrentCameraID = gCurrentCameraID + 0x5350; -dead_EnemyNpcHit = EnemyNpcHit + 0x5450; -dead_EnemyNpcDefeat = EnemyNpcDefeat + 0x5450; -dead_gItemTable = gItemTable + 0x59E0; -dead_gPartnerPopupProperties = gPartnerPopupProperties + 0x59E0; -dead_EVS_NpcHitRecoil = EVS_NpcHitRecoil + 0x59E0; -dead_nuGfxZBuffer = nuGfxZBuffer + 0x6F54; -dead_gCurrentCamID = gCurrentCamID + 0x6F58; -dead_nuGfxCfb_ptr = nuGfxCfb_ptr + 0x6F58; -dead_gOverrideFlags = gOverrideFlags + 0x6F58; -dead_gMainGfxPos = gMainGfxPos + 0x6F58; -dead_gDisplayContext = gDisplayContext + 0x6F58; -dead_gCurrentEncounter = gCurrentEncounter + 0x6FE0; -dead_gCameras = gCameras + 0x7000; -dead_npc_raycast_down_sides = npc_raycast_down_sides + 0x76C0; -dead_npc_test_move_simple_with_slipping = npc_test_move_simple_with_slipping + 0x76C0; -dead_npc_test_move_simple_without_slipping = npc_test_move_simple_without_slipping + 0x76C0; -dead_decrement_status_bar_disabled = decrement_status_bar_disabled + 0x7BC4; -dead_increment_status_bar_disabled = increment_status_bar_disabled + 0x7BC4; -dead_sync_status_bar = sync_status_bar + 0x7BC4; -dead_set_max_star_power = set_max_star_power + 0x7BC4; -dead_subtract_hp = subtract_hp + 0x7BC4; -dead_switch_to_partner = switch_to_partner + 0x7BF4; -dead_func_800EB2A4 = func_800EB2A4 + 0x7BF4; -dead_partner_clear_player_tracking = partner_clear_player_tracking + 0x7E1C; -dead_hide_popup_menu = hide_popup_menu + 0x7EB0; -dead_destroy_popup_menu = destroy_popup_menu + 0x7EB0; -dead_create_standard_popup_menu = create_standard_popup_menu + 0x7ECC; -dead_gPlayerStatusPtr = gPlayerStatusPtr + 0x8160; -dead_wPartnerHudScripts = wPartnerHudScripts + 0x8160; -dead_wDisabledPartnerHudScripts = wDisabledPartnerHudScripts + 0x8160; -dead_gPartnerStatus = gPartnerStatus + 0x85B0; -dead_gPlayerStatus = gPlayerStatus + 0x85B0; -dead_gPlayerData = gPlayerData + 0x85B0; -dead_get_entity_by_index = get_entity_by_index + 0x85C8; -dead_MakeEntity = MakeEntity + 0x8854; -dead_AssignScript = AssignScript + 0x8854; -dead_AssignBlockFlag = AssignBlockFlag + 0x8854; -dead_AssignPanelFlag = AssignPanelFlag + 0x8854; -dead_create_shadow_type = create_shadow_type + 0x8854; -dead_get_model_from_list_index = get_model_from_list_index + 0xA214; -dead_get_model_list_index_from_tree_index = get_model_list_index_from_tree_index + 0xA260; -dead_set_main_pan_u = set_main_pan_u + 0xA448; -dead_set_main_pan_v = set_main_pan_v + 0xA448; -dead_set_aux_pan_u = set_aux_pan_u + 0xA448; -dead_set_aux_pan_v = set_aux_pan_v + 0xA448; -dead_mdl_get_copied_vertices = mdl_get_copied_vertices + 0xA448; -dead_mdl_get_copied_gfx = mdl_get_copied_gfx + 0xA448; -dead_queue_render_task = queue_render_task + 0xAC00; -dead_create_worker_world = create_worker_world + 0xAE90; -dead_set_message_images = set_message_images + 0xB138; -dead_set_message_text_var = set_message_text_var + 0xB138; -dead_get_item_entity = get_item_entity + 0xC040; -dead_set_screen_overlay_params_front = set_screen_overlay_params_front + 0xC3F0; -dead_set_screen_overlay_params_back = set_screen_overlay_params_back + 0xC3F0; -dead_set_screen_overlay_color = set_screen_overlay_color + 0xC3F0; -dead_sfx_adjust_env_sound_pos = sfx_adjust_env_sound_pos + 0xD660; -dead_sfx_play_sound_with_params = sfx_play_sound_with_params + 0xD660; -dead_sfx_get_spatialized_sound_params = sfx_get_spatialized_sound_params + 0xD6D8; -dead_gCollisionStatus = gCollisionStatus + 0xF5C0; -dead_CreatePushBlockGrid = CreatePushBlockGrid + 0x140; -dead_SetPushBlock = SetPushBlock + 0x1D0; -dead_EnterWalk = EnterWalk + 0x310; -dead_EnterSavePoint = EnterSavePoint + 0x310; -dead_ExitWalk = ExitWalk + 0x310; -dead_Entity_BombableRock = Entity_BombableRock + 0x10000; -dead_evt_get_variable = evt_get_variable + 0xD3D0; -dead_evt_set_variable = evt_set_variable + 0xD3D0; -dead_evt_get_float_variable = evt_get_float_variable + 0xD3D0; -dead_evt_set_float_variable = evt_set_float_variable + 0xD3D0; -dead_TranslateModel = TranslateModel + 0xD480; -dead_RotateModel = RotateModel + 0xD480; -dead_ScaleModel = ScaleModel + 0xD480; -dead_CloneModel = CloneModel + 0xD480; -dead_GetModelCenter = GetModelCenter + 0xD480; -dead_SetTexPanner = SetTexPanner + 0xD480; -dead_SetModelCustomGfx = SetModelCustomGfx + 0xD480; -dead_EnableTexPanning = EnableTexPanning + 0xD480; -dead_EnableModel = EnableModel + 0xD480; -dead_SetGroupVisibility = SetGroupVisibility + 0xD480; -dead_SetTexPanOffset = SetTexPanOffset + 0xD480; -dead_SetCustomGfxBuilders = SetCustomGfxBuilders + 0xD480; -dead_TranslateGroup = TranslateGroup + 0xD4AC; -dead_RotateGroup = RotateGroup + 0xD4AC; -dead_ScaleGroup = ScaleGroup + 0xD4AC; -dead_EnableGroup = EnableGroup + 0xD4AC; -dead_MakeLocalVertexCopy = MakeLocalVertexCopy + 0xD4AC; -dead_ModifyColliderFlags = ModifyColliderFlags + 0xD4AC; -dead_ResetFromLava = ResetFromLava + 0xD4AC; -dead_ParentColliderToModel = ParentColliderToModel + 0xD4AC; -dead_UpdateColliderTransform = UpdateColliderTransform + 0xD4AC; -dead_GotoMap = GotoMap + 0xD4AC; -dead_GotoMapSpecial = GotoMapSpecial + 0xD4AC; -dead_GetEntryID = GetEntryID + 0xD4AC; -dead_GetLoadType = GetLoadType + 0xD4AC; -dead_PlaySoundAtModel = PlaySoundAtModel + 0xD4AC; -dead_PlaySoundAtCollider = PlaySoundAtCollider + 0xD4AC; -dead_SetCamEnabled = SetCamEnabled + 0xD4B0; -dead_SetCamPerspective = SetCamPerspective + 0xD4B0; -dead_SetCamBGColor = SetCamBGColor + 0xD4B0; -dead_SetCamTarget = SetCamTarget + 0xD4B0; -dead_ShakeCam = ShakeCam + 0xD4B0; -dead_SetCamLeadPlayer = SetCamLeadPlayer + 0xD4E0; -dead_PanToTarget = PanToTarget + 0xD4E0; -dead_UseSettingsFrom = UseSettingsFrom + 0xD4E0; -dead_SetCamType = SetCamType + 0xD4F4; -dead_SetCamPitch = SetCamPitch + 0xD4F4; -dead_SetCamDistance = SetCamDistance + 0xD4F4; -dead_SetCamPosA = SetCamPosA + 0xD4F4; -dead_SetCamPosB = SetCamPosB + 0xD4F4; -dead_SetCamPosC = SetCamPosC + 0xD4F4; -dead_SetPanTarget = SetPanTarget + 0xD4F4; -dead_SetCamSpeed = SetCamSpeed + 0xD4F4; -dead_GetCamPitch = GetCamPitch + 0xD4F4; -dead_GetCamDistance = GetCamDistance + 0xD4F4; -dead_WaitForCam = WaitForCam + 0xD4F4; -dead_SetCamProperties = SetCamProperties + 0xD4F4; -dead_AdjustCam = AdjustCam + 0xD508; -dead_ResetCam = ResetCam + 0xD51C; -dead_LoadAnimatedModel = LoadAnimatedModel + 0xD530; -dead_PlayModelAnimation = PlayModelAnimation + 0xD530; -dead_SetAnimatedModelRootPosition = SetAnimatedModelRootPosition + 0xD530; -dead_SetAnimatorFlags = SetAnimatorFlags + 0xD530; -dead_GetAnimatedPositionByTreeIndex = GetAnimatedPositionByTreeIndex + 0xD53C; -dead_GetAnimatedRotationByTreeIndex = GetAnimatedRotationByTreeIndex + 0xD53C; -dead_GetNpcPointer = GetNpcPointer + 0xD560; -dead_SetNpcPos = SetNpcPos + 0xD560; -dead_SetNpcRotation = SetNpcRotation + 0xD560; -dead_SetNpcRotationPivot = SetNpcRotationPivot + 0xD560; -dead_SetNpcCollisionSize = SetNpcCollisionSize + 0xD560; -dead_SetNpcSpeed = SetNpcSpeed + 0xD560; -dead_SetNpcJumpscale = SetNpcJumpscale + 0xD560; -dead_SetNpcAnimation = SetNpcAnimation + 0xD560; -dead_NpcMoveTo = NpcMoveTo + 0xD560; -dead_NpcJump0 = NpcJump0 + 0xD560; -dead_NpcJump1 = NpcJump1 + 0xD560; -dead_NpcFlyTo = NpcFlyTo + 0xD560; -dead_GetNpcYaw = GetNpcYaw + 0xD560; -dead_SetNpcYaw = SetNpcYaw + 0xD560; -dead_InterpNpcYaw = InterpNpcYaw + 0xD560; -dead_NpcFacePlayer = NpcFacePlayer + 0xD560; -dead_NpcFaceNpc = NpcFaceNpc + 0xD560; -dead_SetNpcFlagBits = SetNpcFlagBits + 0xD560; -dead_GetNpcPos = GetNpcPos + 0xD560; -dead_EnableNpcShadow = EnableNpcShadow + 0xD560; -dead_ClearPartnerMoveHistory = ClearPartnerMoveHistory + 0xD560; -dead_DisablePartnerAI = DisablePartnerAI + 0xD560; -dead_EnablePartnerAI = EnablePartnerAI + 0xD560; -dead_func_802CF56C = func_802CF56C + 0xD560; -dead_BringPartnerOut = BringPartnerOut + 0xD560; -dead_PutPartnerAway = PutPartnerAway + 0xD560; -dead_GetCurrentPartnerID = GetCurrentPartnerID + 0xD560; -dead_SetNpcImgFXParams = SetNpcImgFXParams + 0xD560; -dead_SetNpcPaletteSwapMode = SetNpcPaletteSwapMode + 0xD560; -dead_SetNpcPaletteSwapping = SetNpcPaletteSwapping + 0xD560; -dead_PlaySoundAtNpc = PlaySoundAtNpc + 0xD560; -dead_SpeakToPlayer = SpeakToPlayer + 0xD560; -dead_EndSpeech = EndSpeech + 0xD560; -dead_ContinueSpeech = ContinueSpeech + 0xD560; -dead_SpeakToNpc = SpeakToNpc + 0xD560; -dead_ShowMessageAtScreenPos = ShowMessageAtScreenPos + 0xD578; -dead_ShowMessageAtWorldPos = ShowMessageAtWorldPos + 0xD590; -dead_CloseMessage = CloseMessage + 0xD5A8; -dead_SwitchMessage = SwitchMessage + 0xD5B0; -dead_ShowChoice = ShowChoice + 0xD5CC; -dead_HidePlayerShadow = HidePlayerShadow + 0xD620; -dead_DisablePlayerPhysics = DisablePlayerPhysics + 0xD620; -dead_DisablePlayerInput = DisablePlayerInput + 0xD620; -dead_SetPlayerPos = SetPlayerPos + 0xD620; -dead_SetPlayerSpeed = SetPlayerSpeed + 0xD620; -dead_SetPlayerJumpscale = SetPlayerJumpscale + 0xD620; -dead_SetPlayerAnimation = SetPlayerAnimation + 0xD620; -dead_SetPlayerActionState = SetPlayerActionState + 0xD620; -dead_PlayerMoveTo = PlayerMoveTo + 0xD620; -dead_PlayerJump = PlayerJump + 0xD620; -dead_PlayerJump1 = PlayerJump1 + 0xD620; -dead_InterpPlayerYaw = InterpPlayerYaw + 0xD620; -dead_PlayerFaceNpc = PlayerFaceNpc + 0xD620; -dead_GetPlayerTargetYaw = GetPlayerTargetYaw + 0xD620; -dead_SetPlayerFlagBits = SetPlayerFlagBits + 0xD620; -dead_GetPlayerActionState = GetPlayerActionState + 0xD620; -dead_GetPlayerPos = GetPlayerPos + 0xD620; -dead_GetPlayerAnimation = GetPlayerAnimation + 0xD620; -dead_UseExitHeading = UseExitHeading + 0xD620; -dead_IsPlayerOnValidFloor = IsPlayerOnValidFloor + 0xD620; -dead_WaitForPlayerInputEnabled = WaitForPlayerInputEnabled + 0xD620; -dead_UpdatePlayerImgFX = UpdatePlayerImgFX + 0xD620; -dead_SetPlayerImgFXFlags = SetPlayerImgFXFlags + 0xD64C; -dead_FacePlayerTowardPoint = FacePlayerTowardPoint + 0xD64C; -dead_GetPartnerInUse = GetPartnerInUse + 0xD64C; -dead_InterruptUsePartner = InterruptUsePartner + 0xD64C; -dead_func_802D2C14 = func_802D2C14 + 0xD64C; -dead_PlaySoundAtPlayer = PlaySoundAtPlayer + 0xD64C; -dead_MakeLerp = MakeLerp + 0xD650; -dead_UpdateLerp = UpdateLerp + 0xD650; -dead_RandInt = RandInt + 0xD650; -dead_GetAngleBetweenNPCs = GetAngleBetweenNPCs + 0xD650; -dead_GetAngleToPlayer = GetAngleToPlayer + 0xD650; -dead_AwaitPlayerApproach = AwaitPlayerApproach + 0xD650; -dead_IsPlayerWithin = IsPlayerWithin + 0xD650; -dead_AwaitPlayerLeave = AwaitPlayerLeave + 0xD650; -dead_LoadPath = LoadPath + 0xD650; -dead_GetNextPathPos = GetNextPathPos + 0xD650; -dead_SetTimeFreezeMode = SetTimeFreezeMode + 0xD650; -dead_ModifyGlobalOverrideFlags = ModifyGlobalOverrideFlags + 0xD650; -dead_SetValueByRef = SetValueByRef + 0xD650; -dead_GetValueByRef = GetValueByRef + 0xD650; -dead_FadeOutMusic = FadeOutMusic + 0xD650; -dead_SetMusicTrack = SetMusicTrack + 0xD650; -dead_FadeInMusic = FadeInMusic + 0xD650; -dead_PopSong = PopSong + 0xD650; -dead_PushSong = PushSong + 0xD650; -dead_PlayAmbientSounds = PlayAmbientSounds + 0xD650; -dead_PlaySound = PlaySound + 0xD650; -dead_PlaySoundAt = PlaySoundAt + 0xD650; -dead_StopSound = StopSound + 0xD650; -dead_StopTrackingSoundPos = StopTrackingSoundPos + 0xD650; -dead_ShowKeyChoicePopup = ShowKeyChoicePopup + 0xD650; -dead_ShowConsumableChoicePopup = ShowConsumableChoicePopup + 0xD650; -dead_RemoveKeyItemAt = RemoveKeyItemAt + 0xD650; -dead_RemoveItemAt = RemoveItemAt + 0xD650; -dead_AddKeyItem = AddKeyItem + 0xD650; -dead_CloseChoicePopup = CloseChoicePopup + 0xD650; -dead_FindKeyItem = FindKeyItem + 0xD650; -dead_FindItem = FindItem + 0xD650; -dead_MakeItemEntity = MakeItemEntity + 0xD650; -dead_DropItemEntity = DropItemEntity + 0xD650; -dead_RemoveItemEntity = RemoveItemEntity + 0xD650; -dead_SetItemPos = SetItemPos + 0xD650; -dead_AddStarPieces = AddStarPieces + 0xD650; -dead_ShowGotItem = ShowGotItem + 0xD650; -dead_ShowEmote = ShowEmote + 0xD650; -dead_DismissEffect = DismissEffect + 0xD650; -dead_PlayEffect_impl = PlayEffect_impl + 0xD650; -dead_SetSpriteShading = SetSpriteShading + 0xD850; -dead_entity_upgrade_block_hide_content = entity_upgrade_block_hide_content + 0xE470; -dead_Entity_SavePoint = Entity_SavePoint + 0xE4B0; -dead_Entity_MulticoinBlock = Entity_MulticoinBlock + 0xE4B0; -dead_Entity_Hammer3Block = Entity_Hammer3Block + 0xE4B0; -dead_Entity_YellowBlock = Entity_YellowBlock + 0xE4B0; -dead_Entity_HiddenYellowBlock = Entity_HiddenYellowBlock + 0xE4B0; -dead_Entity_HeartBlock = Entity_HeartBlock + 0xE4B0; -dead_Entity_SuperBlock = Entity_SuperBlock + 0xE4B0; -dead_Entity_ScriptSpring = Entity_ScriptSpring + 0xE4B0; -dead_Entity_HiddenPanel = Entity_HiddenPanel + 0xE4B0; -dead_Entity_Chest = Entity_Chest + 0xE4B0; -func_8004D8E0 = 0x8004D8E0;