diff --git a/docs/actors.md b/docs/actors.md index 0ccd1e25..a5c8d2ee 100644 --- a/docs/actors.md +++ b/docs/actors.md @@ -1,7 +1,6 @@ # Actors This file documents what is known about actors in the game. - [Actor IDs](#actor-ids) -- [Link states](#link-states) ## Actor IDs Many actors have a 4-character ID associated with it. This table shows all known IDs and their respective meanings or @@ -11,98 +10,15 @@ translations. Feel free to contribute to this list! > These IDs will appear in memory in reverse order. This is because allocation IDs are often interpreted as 32-bit integers, > and integers are stored in little-endian which effectively "reverses" the character order. - ID | Translation | Meaning --------|-------------|--------- -`NAVI` | Navi | Spirit of Courage (Ciela) -`FCNV` | Force Navi | Spirit of Power (Leaf) -`WSNV` | Wisdom Navi | Spirit of Wisdom (Neri) - -## Link states -Link's states are organized in a hierarchical structure. Similar to actor IDs, states are labelled by 4-character IDs. In -addition, the states have names in Japanese. - -> [!NOTE] -> The hierarchy and Japanese names were likely used for debugging and may have no meaning in the actual game engine. - -- `PLYR`: Player - - `PLNK`: Link motion (リンクモーション) - - `LGNR`: General (全般) - - `LWIT`: Wait (ウェイト) - - `LMOV`: Move (移動) - - `LROL`: Roll (前転) - - `LAJP`: Auto-jump (オートジャンプ) - - `LATK`: Attack (剣振り) - - `LVAT`: Vertical attack (縦切り) - - `LLAT`: Horizontal attack (横切り) - - `LSAT`: Stab attack (突き) - - `LTAT`: Spin attack (回転切り) - - `LARB`: Recoil (反動) - - `LJAT`: Jump attack (ジャンプ切り) - - `LDFC`: Defence (防御) - - `LDMG`: Damage (ダメージ) - - `LGRB`: Grab (持ち上げ) - - `LPSH`: Push/pull (押し引き) - - `LIGT`: Item get (アイテムゲット) - - `LNAV`: Navi (精霊) - - `LBOW`: Bow (弓矢) - - `LBMR`: Boomerang (ブーメラン) - - `LHMR`: Hammer (ハンマー) - - `LROP`: Rope (ロープ) - - `LSCP`: Scoop (スコップ) - - `LOIT`: Other item (他のアイテム) - - `LABN`: Abnormal state (状態異常) - - `LLOT`: Other (その他) - - `PTMP`: Temporary (一時調整) - - `PEFT`: Effect (エフェクト) - -The states can also be found in `Player/motion.bhio` in the assets. The file appears to contain configurable properties for -some of the states. The properties are labelled with up to 12 bytes (6 characters) of Japanese text, causing some labels to be cut off. - -State | Property | Type | Value | Japanese --------|--------------------------|---------|-------|---------- -`LGNR` | Shadow darkness | `int` | 26 | 影の濃さ -`LGNR` | Model type | `int` | 2 | モデルタイプ -`LGNR` | Semi-transparent model | `int` | 11 | 半透明モデル -`LGNR` | Semi-transparent R | `int` | 31 | 半透明R -`LGNR` | Semi-transparent G | `int` | 31 | 半透明G -`LGNR` | Semi-transparent B | `int` | 31 | 半透明B -`LGNR` | Area change | `int` | 15 | エリア替えフ -`LGNR` | Stairway fade | `int` | 10 | 階段フェード -`LGNR` | Other ho... | `int` | 13 | その他フェー -`LGNR` | Area movement o... | `20.12` | 1.9 | エリア移動オ -`LDMG` | Damage tie... | `int` | 0 | ダメージタイ -`LDMG` | Small damage speed | `20.12` | 2.0 | 小ダメ再生速 -`LDMG` | Small damage start frame | `20.12` | 0.0 | 小ダメ開始フ -`LDMG` | Small damage end frame | `20.12` | 10.0 | 小ダメ終了フ -`LDMG` | ??? | `int` | 6 | ビリビリ回数 -`LDMG` | ??? | `20.12` | 1.0 | ビリビリ再生 -`LDMG` | ??? | `20.12` | 1.23 | 吹き上げ高さ -`LDMG` | ??? | `20.12` | 0.2 | 吹き上げふっ -`LDMG` | ??? | `20.12` | 0.2 | フリック跳び -`LDMG` | Ice damage? | `int` | 60 | 凍りダメージ -`LGRB` | Grab speed | `20.12` | 1.6 | 持ち上げ再生 -`LGRB` | Grab start | `20.12` | 2.0 | 持ち上げ開始 -`LGRB` | Grab end | `20.12` | 10.0 | 持ち上げ終了 -`LGRB` | Throw speed | `20.12` | 1.0 | 投げ再生速度 -`LGRB` | Throw start frame | `20.12` | 0.0 | 投げ開始フレ -`LGRB` | Throw end frame | `20.12` | 15.0 | 投げ終了フレ -`LGRB` | Throw frame | `20.12` | 2.0 | 投げ離れフレ -`LPSH` | Stop time | `int` | 3 | 停止時間 -`LPSH` | Direct push | `20.12` | 0.5 | ダイレクトプ -`LIGT` | X-offset | `20.12` | 0.368 | オフセットX -`LIGT` | Y-offset | `20.12` | 1.323 | オフセットY -`LIGT` | Z-offset | `20.12` | 0.05 | オフセットZ -`LIGT` | Rotation speed | `20.12` | 0.066 | 回転速度 -`LROP` | Rope width | `20.12` | 0.12 | ロープ幅 -`LROP` | Texture... | `20.12` | 30.0 | テクスチャリ -`LROP` | High jump | `20.12` | 0.54 | ハイジャンプ -`LROP` | Lean depth? | `20.12` | 0.6 | 寄りかかり深 -`LLOT` | Breath start frame | `20.12` | 0.0 | 息吹き開始フ -`LLOT` | Breath end frame | `20.12` | 10.0 | 息吹き終了フ -`LLOT` | Walk offset | `20.12` | 1.1 | 歩きオフセッ -`LLOT` | Run offset | `20.12` | 1.7 | 走りオフセッ -`LLOT` | Stairway offset | `20.12` | 1.0 | 階段オフセッ -`LLOT` | Player ... | `20.12` | 0.01 | プレイヤー消 -`LLOT` | Warp ho... | `int` | 55 | ワープフェー -`LLOT` | Player ... | `int` | 10 | プレイヤー半 -`LLOT` | Warp rise | `20.12` | 0.03 | ワープ浮き上 + ID | Translation | Meaning +-------|--------------|--------- +`NAVI` | Navi | Spirit of Courage (Ciela) +`FCNV` | Force Navi | Spirit of Power (Leaf) +`WSNV` | Wisdom Navi | Spirit of Wisdom (Neri) +`RUPY` | Rupee +`HART` | Heart +`BOMB` | Bomb +`ARRW` | Arrow +`AMOS` | Armos +`CHUC` | Chuchu +`PLDM` | Player Dummy | Placeholder for switching between Gongoron/Link diff --git a/docs/assets.md b/docs/assets.md new file mode 100644 index 00000000..23433f3d --- /dev/null +++ b/docs/assets.md @@ -0,0 +1,38 @@ +# Assets +This file documents the purpose of various asset files in the game. +- [`/Player`](#player) + +## `/Player` +- [`item.bin` and `item.nsbtx`](#itembin-and-itemnsbtx) +- [`obj.bin` and `obj.nsbtx`](#objbin-and-objnsbtx) + +### `item.bin` and `item.nsbtx` +These files contains models, textures and animations for Link's equipment items. + +The items consist of arrow, headless arrow, bomb, bombchu, bombchu destination, bow, hammer, red potion, purple potion, yellow +potion, grapple hook, shovel, wooden shield, Oshus's sword and the phantom sword. + +`item.bin` is compressed and contains three files: +- `item.nsbca`: Joint animations + - Hammer idle/swing + - Shield block +- `item.nsbma`: Unknown +- `item.nsbmd`: Models + +Lastly, `item.nsbtx` contains textures. + +These files are loaded by `ItemModelLoader` and are stored in `ItemManager` in the field `mItemModels`. + +### `obj.bin` and `obj.nsbtx` +These files contains models, textures and animations for dungeon items. + +The items consist of boss key, force gems, circle crystal, square crystal and triangle crystal. + +`obj.bin` is compressed and contains two files: +- `obj.nsbmd`: Models +- `obj.nsbtp`: Material animations + - Force gem colors + +Lastly, `obj.nsbtx` contains textures. + +These files are loaded by `ItemModelLoader` and are stored in `ItemManager` in the field `mDungeonItemModels`. diff --git a/docs/link.md b/docs/link.md new file mode 100644 index 00000000..40f9431d --- /dev/null +++ b/docs/link.md @@ -0,0 +1,108 @@ +# Link +This file documents technical information about Link. +- [States](#states) +- [State hierarchy](#state-hierarchy) + +## State handlers +State handlers contain data and functions to process Link's state. Only one state handler is active at a time, but data can be +shared outside of the active state handler. + + Index | Name | Description +-------|---------------|------------- +0 | `LinkMove` | Handles Link's movement. +1 | `LinkItem` | Handles item usage. +2 | `LinkGrab` | Handles grabbing objects. +3 | `LinkState3` | Unknown +4 | `LinkState4` | Unknown +5 | `LinkDamage` | Handles receiving damage. +6 | `LinkItemGet` | Handles getting items. + +## State hierarchy +Link's states are organized in a hierarchical structure. Similar to actor IDs, states are labelled by 4-character IDs. In +addition, the states have names in Japanese. + +> [!NOTE] +> The hierarchy and Japanese names were likely used for debugging and may have no meaning in the actual game engine. + +- `PLYR`: Player + - `PLNK`: Link motion (リンクモーション) + - `LGNR`: General (全般) + - `LWIT`: Wait (ウェイト) + - `LMOV`: Move (移動) + - `LROL`: Roll (前転) + - `LAJP`: Auto-jump (オートジャンプ) + - `LATK`: Attack (剣振り) + - `LVAT`: Vertical attack (縦切り) + - `LLAT`: Horizontal attack (横切り) + - `LSAT`: Stab attack (突き) + - `LTAT`: Spin attack (回転切り) + - `LARB`: Recoil (反動) + - `LJAT`: Jump attack (ジャンプ切り) + - `LDFC`: Defence (防御) + - `LDMG`: Damage (ダメージ) + - `LGRB`: Grab (持ち上げ) + - `LPSH`: Push/pull (押し引き) + - `LIGT`: Item get (アイテムゲット) + - `LNAV`: Navi (精霊) + - `LBOW`: Bow (弓矢) + - `LBMR`: Boomerang (ブーメラン) + - `LHMR`: Hammer (ハンマー) + - `LROP`: Rope (ロープ) + - `LSCP`: Scoop (スコップ) + - `LOIT`: Other item (他のアイテム) + - `LABN`: Abnormal state (状態異常) + - `LLOT`: Other (その他) + - `PTMP`: Temporary (一時調整) + - `PEFT`: Effect (エフェクト) + +The states can also be found in `Player/motion.bhio` in the assets. The file appears to contain configurable properties for +some of the states. The properties are labelled with up to 12 bytes (6 characters) of Japanese text, causing some labels to be cut off. + +State | Property | Type | Value | Japanese +-------|--------------------------|---------|-------|---------- +`LGNR` | Shadow darkness | `int` | 26 | 影の濃さ +`LGNR` | Model type | `int` | 2 | モデルタイプ +`LGNR` | Semi-transparent model | `int` | 11 | 半透明モデル +`LGNR` | Semi-transparent R | `int` | 31 | 半透明R +`LGNR` | Semi-transparent G | `int` | 31 | 半透明G +`LGNR` | Semi-transparent B | `int` | 31 | 半透明B +`LGNR` | Area change | `int` | 15 | エリア替えフ +`LGNR` | Stairway fade | `int` | 10 | 階段フェード +`LGNR` | Other ho... | `int` | 13 | その他フェー +`LGNR` | Area movement offset | `20.12` | 1.9 | エリア移動オ +`LDMG` | Damage tie... | `int` | 0 | ダメージタイ +`LDMG` | Small damage speed | `20.12` | 2.0 | 小ダメ再生速 +`LDMG` | Small damage start frame | `20.12` | 0.0 | 小ダメ開始フ +`LDMG` | Small damage end frame | `20.12` | 10.0 | 小ダメ終了フ +`LDMG` | ??? | `int` | 6 | ビリビリ回数 +`LDMG` | ??? | `20.12` | 1.0 | ビリビリ再生 +`LDMG` | ??? | `20.12` | 1.23 | 吹き上げ高さ +`LDMG` | ??? | `20.12` | 0.2 | 吹き上げふっ +`LDMG` | ??? | `20.12` | 0.2 | フリック跳び +`LDMG` | Ice damage? | `int` | 60 | 凍りダメージ +`LGRB` | Grab speed | `20.12` | 1.6 | 持ち上げ再生 +`LGRB` | Grab start | `20.12` | 2.0 | 持ち上げ開始 +`LGRB` | Grab end | `20.12` | 10.0 | 持ち上げ終了 +`LGRB` | Throw speed | `20.12` | 1.0 | 投げ再生速度 +`LGRB` | Throw start frame | `20.12` | 0.0 | 投げ開始フレ +`LGRB` | Throw end frame | `20.12` | 15.0 | 投げ終了フレ +`LGRB` | Throw frame | `20.12` | 2.0 | 投げ離れフレ +`LPSH` | Stop time | `int` | 3 | 停止時間 +`LPSH` | Direct push | `20.12` | 0.5 | ダイレクトプ +`LIGT` | X-offset | `20.12` | 0.368 | オフセットX +`LIGT` | Y-offset | `20.12` | 1.323 | オフセットY +`LIGT` | Z-offset | `20.12` | 0.05 | オフセットZ +`LIGT` | Rotation speed | `20.12` | 0.066 | 回転速度 +`LROP` | Rope width | `20.12` | 0.12 | ロープ幅 +`LROP` | Texture... | `20.12` | 30.0 | テクスチャリ +`LROP` | High jump | `20.12` | 0.54 | ハイジャンプ +`LROP` | Lean depth? | `20.12` | 0.6 | 寄りかかり深 +`LLOT` | Breath start frame | `20.12` | 0.0 | 息吹き開始フ +`LLOT` | Breath end frame | `20.12` | 10.0 | 息吹き終了フ +`LLOT` | Walk offset | `20.12` | 1.1 | 歩きオフセッ +`LLOT` | Run offset | `20.12` | 1.7 | 走りオフセッ +`LLOT` | Stairway offset | `20.12` | 1.0 | 階段オフセッ +`LLOT` | Player ... | `20.12` | 0.01 | プレイヤー消 +`LLOT` | Warp ho... | `int` | 55 | ワープフェー +`LLOT` | Player ... | `int` | 10 | プレイヤー半 +`LLOT` | Warp rise | `20.12` | 0.03 | ワープ浮き上