mirror of https://github.com/blawar/ooot.git
Compare commits
26 Commits
8cdbd735dc
...
7099313e99
Author | SHA1 | Date |
---|---|---|
Blake Warner | 7099313e99 | |
Blake Warner | c005911242 | |
Blake Warner | 6892cff704 | |
Blake Warner | 1351b599f1 | |
Blake Warner | ba4b544b30 | |
Blake Warner | 384b638fb0 | |
Blake Warner | 1f47f792c5 | |
metronidazole | 0b46da7e5f | |
Amaro Martínez | 39f85a6e90 | |
metronidazole | 0056219148 | |
RyzenDew | d967ce1727 | |
Blake Warner | 0c5b195d1d | |
metronidazole | cef67aa666 | |
Pedro Cruz | db86f97f41 | |
RyzenDew | b424a9da62 | |
Blake Warner | 8b2c0692db | |
Blake Warner | 55f33e4404 | |
Blake Warner | 7d12afc985 | |
Blake Warner | 28e194cfe4 | |
lbsbezerra | 1ff3d8d073 | |
Blake Warner | 18074e0264 | |
Blake Warner | c32c014254 | |
Blake Warner | 9a314e02c5 | |
Blake Warner | 7305e2fb58 | |
Blake Warner | 951e63758f | |
Blake Warner | 0ba9fd2492 |
2
GLideN64
2
GLideN64
|
@ -1 +1 @@
|
|||
Subproject commit f495dd420927f0284211f1f98bdacf2a175388e8
|
||||
Subproject commit a50281d820d6cd1aceff7f5c86a16547cb9f278f
|
130
README.md
130
README.md
|
@ -8,8 +8,12 @@
|
|||
|
||||
**Discord:** <https://discord.com/invite/8tktBEhbZm>
|
||||
|
||||
MattsCreative has a great video tutorial on how to compile this project here: <https://youtu.be/swv1Tv-kjsU>
|
||||
[MattsCreative](http://www.youtube.com/channel/UCzoVL1aVjec7YKPeG59xKFg) has a great video tutorial on how to compile this project here: <https://youtu.be/swv1Tv-kjsU> and Compiling the dev branch to enable 30-120fps here https://www.youtube.com/watch?v=khiLvG3psPM
|
||||
|
||||
## FAQ
|
||||
|
||||
[FAQ](https://github.com/blawar/ooot/wiki/FAQ)
|
||||
Click here for more infomation on the Project!
|
||||
|
||||
## Features
|
||||
|
||||
|
@ -33,52 +37,127 @@ MattsCreative has a great video tutorial on how to compile this project here: <h
|
|||
## Contributers
|
||||
The current main contributers of this project are [blawar](https://github.com/blawar) and [DaMarkov](https://github.com/damarkov)
|
||||
|
||||
## Required Programs For Compiling Windows
|
||||
## How to Acquire the ROM needed
|
||||
|
||||
You must get that on your own and please do not ask for that in the discord due to discord's TOS.
|
||||
|
||||
### Windows and Required Programs
|
||||
|
||||
Step one install all required Programs below
|
||||
|
||||
[Python 3.10](https://www.python.org/downloads/) **Add to path during the install**
|
||||
|
||||
![68747470733a2f2f692e696d6775722e636f6d2f4544326c5139512e706e67](https://user-images.githubusercontent.com/84041391/163289314-75bf3467-9506-4df6-bdf8-ece6a7114792.png)
|
||||
|
||||
|
||||
[Git](https://git-scm.com/) **Choose x64 Build and Use the git bash to clone the repo and to run setup.py**
|
||||
|
||||
[Visual Studio Community 2022](https://visualstudio.microsoft.com/vs/community/) **During setup click C++ development**
|
||||
![vcc](https://user-images.githubusercontent.com/84041391/163289227-6fdfd616-edeb-4314-b29c-9a5ed50aa1c5.png)
|
||||
|
||||
## Installation
|
||||
|
||||
### Windows
|
||||
|
||||
**Visual Studio 2019+ is the only currently supported build environment, and only the 32-bit X86/WIN32 build**
|
||||
|
||||
You must use the ZAPD that is included with this repository, and not the main branch as it is modified.
|
||||
|
||||
Step 2 Follow what is below!
|
||||
|
||||
### PAL 1.0 RETAIL ROM
|
||||
If you are using the EUR PAL 1.0 retail rom,
|
||||
|
||||
**make Sure baserom_original.z64 or baserom_original.n64 is inside
|
||||
\ooot\roms\PAL_1.0\ If it's not the correct "hash_md5": ["c02c1d79679f7ceb9a3bde55fff8aa13"] it won't extract the assets and continue.**
|
||||
make sure baserom_original.z64 or baserom_original.n64 is inside the correct folder as shown below:
|
||||
`\ooot\roms\PAL_1.0\`
|
||||
|
||||
Open Git Bash Type ``git clone --recursive https://github.com/blawar/ooot.git`` let it run.
|
||||
After it's done type cd ooot and if you have the rom placed in the location above
|
||||
Run this command next to extract the assets from the rom (baserom_original.z64 must exist in the directory)
|
||||
![rom pal](https://user-images.githubusercontent.com/84041391/163308550-bc9afea2-ce38-4021-bafc-2a83c63d9b85.png)
|
||||
|
||||
|
||||
iF the roms hash is not correct it won't extract the assets and continue. `"hash_md5": ["c02c1d79679f7ceb9a3bde55fff8aa13"] `
|
||||
|
||||
Open git Bash or command prompt and type:
|
||||
``git clone --recursive https://github.com/blawar/ooot.git``
|
||||
|
||||
![git clone](https://user-images.githubusercontent.com/84041391/163308082-4af59ab6-4956-405e-96a3-63b6407b32be.png)
|
||||
|
||||
|
||||
after it's done type `cd ooot`
|
||||
|
||||
![cd ooot](https://user-images.githubusercontent.com/84041391/163308108-2c0bb792-9535-41b3-acd1-942730183f3e.png)
|
||||
|
||||
run this command next to extract the assets from the rom. (baserom_original.z64 must exist in the directory `\ooot\roms\PAL_1.0\`)
|
||||
|
||||
![pal](https://user-images.githubusercontent.com/84041391/163309103-8936c210-5532-45ab-b3f1-f3f21b04f1f7.png)
|
||||
|
||||
```
|
||||
setup.py -b PAL_1.0
|
||||
python setup.py -b PAL_1.0
|
||||
```
|
||||
|
||||
### EUR Masterquest Debug ROM
|
||||
If you are using the EUR Master Quest Debug rom.
|
||||
if you are using the EUR Master Quest Debug rom.
|
||||
|
||||
**make Sure baserom_original.z64 or baserom_original.n64 is inside
|
||||
\ooot\roms\EUR_MQD\ If it's not the correct "hash_md5": ["f0b7f35375f9cc8ca1b2d59d78e35405", "8ca71e87de4ce5e9f6ec916202a623e9", "f751d1a097764e2337b1ac9ba1e27699"], it won't extract the assets and continue.**
|
||||
make sure baserom_original.z64 or baserom_original.n64 is inside the correct folder as shown below:
|
||||
`\ooot\roms\EUR_MQD\`
|
||||
|
||||
![rom mq](https://user-images.githubusercontent.com/84041391/163308745-19d57f25-8ec7-45fb-9874-c0ddd865c50f.png)
|
||||
|
||||
|
||||
if the roms hash is not correct it won't extract the assets and continue. `"hash_md5": ["f0b7f35375f9cc8ca1b2d59d78e35405", "8ca71e87de4ce5e9f6ec916202a623e9"`
|
||||
|
||||
Open git Bash or command prompt and type:
|
||||
|
||||
``git clone --recursive https://github.com/blawar/ooot.git``
|
||||
|
||||
![git clone](https://user-images.githubusercontent.com/84041391/163308776-13aa98c0-7e5a-4e00-9b2c-4c44e67ecc89.png)
|
||||
|
||||
after it's done type `cd ooot`
|
||||
|
||||
![cd ooot](https://user-images.githubusercontent.com/84041391/163308819-37bec5b7-1b30-4964-bacf-6213d45a4c01.png)
|
||||
|
||||
run this command next to extract the assets from the rom. (baserom_original.z64 must exist in the directory `\ooot\roms\EUR_MQD\`)
|
||||
|
||||
![mq](https://user-images.githubusercontent.com/84041391/163309044-3956df29-5e0c-4325-8d53-c9009199ebd5.png)
|
||||
|
||||
Open Git Bash Type ``git clone --recursive https://github.com/blawar/ooot.git`` let it run.
|
||||
After it's done type cd ooot and if you have the rom placed in the location above
|
||||
Run this command next to extract the assets from the rom (baserom_original.z64 must exist in the directory)
|
||||
```
|
||||
setup.py -b EUR_MQD
|
||||
python setup.py -b EUR_MQD
|
||||
```
|
||||
|
||||
Open OOT.sln, you will find this in \ooot\vs make sure **Debug - Win32** or **Release - Win32** is selected, then hit build.
|
||||
Open `OOT.sln`, you will find this in `\ooot\vs`
|
||||
![sln](https://user-images.githubusercontent.com/84041391/163309469-165d0695-bbac-4838-ab1e-c09b29ccfb8f.png)
|
||||
|
||||
|
||||
|
||||
make sure `Debug - Win32** or **Release - Win32` is selected, then hit build.
|
||||
|
||||
Once the build completes, press F5 to start it if you are testing code but if you are compiling to play right click `oot` on the side and click build.
|
||||
|
||||
## How to Enable 60FPS
|
||||
|
||||
`git checkout dev`
|
||||
|
||||
`git pull origin dev`
|
||||
|
||||
`git submodule update --init --recursive`
|
||||
|
||||
`python setup.py -b PAL_1.0`
|
||||
|
||||
And compile as normal! when in game press F7 to go back to 20FPS and F8 to go up to 30FPs 60FPs and 120FPS!
|
||||
|
||||
## How to update local repo
|
||||
|
||||
open git bash type:
|
||||
|
||||
`cd ooot`
|
||||
|
||||
`git pull`
|
||||
|
||||
`python setup.py -b PAL_1.0`
|
||||
|
||||
`python setup.py -b EUR_MQD`
|
||||
|
||||
and Open `OOT.sln`, you will find this in `\ooot\vs` make sure `Debug - Win32** or **Release - Win32` is selected, then hit build.
|
||||
|
||||
![release](https://user-images.githubusercontent.com/84041391/163309769-b4573b11-4650-4563-90a3-56cfef390206.png)
|
||||
![debug](https://user-images.githubusercontent.com/84041391/163309770-859ea356-345a-4e6e-871c-3ffceba7c36a.png)
|
||||
|
||||
Once the build completes, press F5 to start it if you are testing code but if you are compiling to play right click oot on the side and click build.
|
||||
|
||||
### macOS
|
||||
|
||||
|
@ -90,9 +169,14 @@ Linux does not currently work. The below steps are for development purposes.
|
|||
```
|
||||
Debian/Ubuntu
|
||||
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update
|
||||
sudo apt install gcc-multilib g++-multilib
|
||||
sudo apt install libsdl2-dev
|
||||
sudo apt install libsdl2-dev:i386
|
||||
sudo apt install libpng-dev
|
||||
sudo apt install libfreetype6-dev
|
||||
sudo apt install libfreetype6-dev:i386
|
||||
sudo apt install python3
|
||||
sudo apt install python3-pip
|
||||
sudo apt install meson
|
||||
|
@ -110,18 +194,20 @@ sudo pacman -S libpng
|
|||
Fedora Linux
|
||||
|
||||
sudo dnf in gcc
|
||||
sudo dnf in sdl2-devel
|
||||
sudo dnf in SDL2-devel
|
||||
sudo dnf in meson
|
||||
sudo dnf in python3-pip
|
||||
sudo dnf in libpng
|
||||
sudo dnf in g++
|
||||
|
||||
setup.py -b EUR_MQD
|
||||
meson setup linux
|
||||
meson setup linux --cross-file x86-linux-gnu
|
||||
cd linux
|
||||
ninja
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
All contributions are welcome. This is a group effort, and even small contributions can make a difference.
|
||||
|
|
|
@ -15,6 +15,7 @@ void Math_ApproachF(CounterF* pValue, f32 target, f32 fraction, const Step& step
|
|||
void Math_ApproachS(s16* pValue, s16 target, s16 scale, const Step& step);
|
||||
void Math_ApproachS(Rotation* pValue, s16 target, s16 scale, const FStep& step);
|
||||
void Math_ApproachZeroF(f32* pValue, f32 fraction, const Step& step);
|
||||
f32 Math_ApproachZeroF(f32 pValue, f32 fraction, const Step& step);
|
||||
void Math_ApproachZeroF(CounterF* pValue, f32 fraction, const Step& step);
|
||||
s32 Math_AsymStepToF(f32* pValue, f32 target, const Step& incrStep, const Step& decrStep);
|
||||
s32 Math_AsymStepToF(CounterF* pValue, f32 target, const Step& incrStep, const Step& decrStep);
|
||||
|
|
|
@ -107,6 +107,7 @@ u32 framerate_get();
|
|||
void framerate_set_profile(FramerateProfile profile);
|
||||
FramerateProfile framerate_get_profile();
|
||||
float frameRateDivisor();
|
||||
void force20FPS(bool force);
|
||||
|
||||
class Timer
|
||||
{
|
||||
|
@ -379,7 +380,7 @@ class Timer
|
|||
{
|
||||
if(m_counterInt > m_max * m_counterScaler)
|
||||
{
|
||||
m_counterInt = (m_min * m_counterScaler) + (m_counterInt - (m_max * m_counterScaler + 1));
|
||||
m_counterInt = (m_min * m_counterScaler) + (m_counterInt - ((m_max + 1) * m_counterScaler + 0));
|
||||
|
||||
if(m_counterInt > m_max * m_counterScaler)
|
||||
{
|
||||
|
@ -389,7 +390,7 @@ class Timer
|
|||
|
||||
if(m_counterInt < m_min * m_counterScaler)
|
||||
{
|
||||
m_counterInt = (m_max * m_counterScaler) + (m_counterInt - (m_min * m_counterScaler - 1));
|
||||
m_counterInt = (m_max * m_counterScaler) + (m_counterInt - ((m_min - 1) * m_counterScaler - 0));
|
||||
|
||||
if(m_counterInt < m_min * m_counterScaler)
|
||||
{
|
||||
|
@ -733,3 +734,78 @@ namespace oot
|
|||
} // namespace oot
|
||||
|
||||
float Round(float value);
|
||||
|
||||
class rf32
|
||||
{
|
||||
public:
|
||||
rf32() : m_value(0), m_rounded(0), m_dirty(false)
|
||||
{
|
||||
}
|
||||
|
||||
rf32(float n) : m_value(n), m_rounded(Round(n))
|
||||
{
|
||||
}
|
||||
|
||||
rf32& operator++() // pre
|
||||
{
|
||||
preUpdate();
|
||||
m_value++;
|
||||
update();
|
||||
return *this;
|
||||
}
|
||||
|
||||
rf32 operator++(int) // post
|
||||
{
|
||||
auto r = *this;
|
||||
preUpdate();
|
||||
m_value++;
|
||||
update();
|
||||
return r;
|
||||
}
|
||||
|
||||
rf32& operator+=(float n)
|
||||
{
|
||||
preUpdate();
|
||||
m_value += n;
|
||||
update();
|
||||
return *this;
|
||||
}
|
||||
|
||||
rf32& operator-=(float n)
|
||||
{
|
||||
preUpdate();
|
||||
m_value -= n;
|
||||
update();
|
||||
return *this;
|
||||
}
|
||||
|
||||
void preUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
void update()
|
||||
{
|
||||
m_rounded = Round(m_value);
|
||||
}
|
||||
|
||||
operator float()
|
||||
{
|
||||
if(m_dirty)
|
||||
{
|
||||
update();
|
||||
m_dirty = false;
|
||||
}
|
||||
return m_rounded;
|
||||
}
|
||||
|
||||
float* ptr()
|
||||
{
|
||||
m_dirty = true;
|
||||
return &m_value;
|
||||
}
|
||||
|
||||
protected:
|
||||
float m_value;
|
||||
float m_rounded;
|
||||
bool m_dirty;
|
||||
};
|
||||
|
|
|
@ -42,7 +42,7 @@ enum PlayerState2
|
|||
PLAYER_STATE2_1 = 1 << 1, // 0x00000002
|
||||
PLAYER_STATE2_2 = 1 << 2, // 0x00000004
|
||||
PLAYER_STATE2_3 = 1 << 3, // 0x00000008
|
||||
PLAYER_STATE2_4 = 1 << 4, // 0x00000010
|
||||
PLAYER_STATE2_4_JYA_COBRA_TURNING = 1 << 4, // 0x00000010
|
||||
PLAYER_STATE2_5 = 1 << 5, // 0x00000020
|
||||
PLAYER_STATE2_REDIRECT_CONTROL = 1 << 6, // 0x00000040
|
||||
PLAYER_STATE2_7 = 1 << 7, // 0x00000080
|
||||
|
@ -93,9 +93,9 @@ enum BgFlag
|
|||
BG_STATE_4 = 1 << 4, // 0x00000010
|
||||
BG_STATE_5 = 1 << 5, // 0x00000020
|
||||
BG_STATE_6 = 1 << 6, // 0x00000040
|
||||
BG_STATE_7 = 1 << 7, // 0x00000080
|
||||
BG_STATE_AT_OR_BELOW_GROUND = 1 << 7, // 0x00000080
|
||||
BG_STATE_8 = 1 << 8, // 0x00000100
|
||||
BG_STATE_9 = 1 << 9, // 0x00000200
|
||||
BG_STATE_COLLIDED_OBJECT = 1 << 9, // 0x00000200
|
||||
BG_STATE_10 = 1 << 10, // 0x00000400
|
||||
BG_STATE_11 = 1 << 11, // 0x00000800
|
||||
BG_STATE_12 = 1 << 12, // 0x00001000
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"continue_playing": "Continuar a jogar?",
|
||||
"continue_playing": "Continuar?",
|
||||
"game_over": "FIM DO JOGO"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
[
|
||||
{
|
||||
"pause_botw_title": "Grund des Brunnens",
|
||||
"pause_current_position": "ORT",
|
||||
"pause_deku_title": "Im Deku-Baum",
|
||||
"pause_dodongo_title": "Dodongos Höhle",
|
||||
"pause_equipment": "AUSRÜSTUNG",
|
||||
"pause_fire_title": "Feuertempel",
|
||||
"pause_forest_title": "Waldtempel",
|
||||
"pause_ice_cavern_title": "Eishöhle",
|
||||
"pause_inside_jabu_title": "Jabu-Jabus Bauch",
|
||||
"pause_map": "KARTE",
|
||||
"pause_no": "Nein",
|
||||
"pause_quest_status": "STATUS",
|
||||
"pause_save": "SICHERN",
|
||||
"pause_save_confirmation": "Spielstand gesichert.",
|
||||
"pause_save_prompt": "Spielstand sichern ?",
|
||||
"pause_select_item": "GEGENSTÄNDE",
|
||||
"pause_shadow_title": "Schattentempel",
|
||||
"pause_spirit_title": "Geistertempel",
|
||||
"pause_to_decide": "Bestätigen mit",
|
||||
"pause_to_equip": "Ausrüsten mit",
|
||||
"pause_to_equipment": "Ausrüstung",
|
||||
"pause_to_map": "Karte",
|
||||
"pause_to_play_melody": "Melodie anhören mit",
|
||||
"pause_to_quest_status": "Status",
|
||||
"pause_to_select_item": "Gegenstände",
|
||||
"pause_water_title": "Wassertempel",
|
||||
"pause_yes": "Ja"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,31 @@
|
|||
[
|
||||
{
|
||||
"pause_botw_title": "Bottom of the Well",
|
||||
"pause_current_position": "CURRENT POSITION",
|
||||
"pause_deku_title": "Inside the Deku Tree",
|
||||
"pause_dodongo_title": "Dodongo's Cavern",
|
||||
"pause_equipment": "EQUIPMENT",
|
||||
"pause_fire_title": "Fire Temple",
|
||||
"pause_forest_title": "Forest Temple",
|
||||
"pause_ice_cavern_title": "Ice Cavern",
|
||||
"pause_inside_jabu_title": "Inside Jabu-Jabu's Belly",
|
||||
"pause_map": "MAP",
|
||||
"pause_no": "No",
|
||||
"pause_quest_status": "QUEST STATUS",
|
||||
"pause_save": "SAVE",
|
||||
"pause_save_confirmation": "Game saved.",
|
||||
"pause_save_prompt": "Would you like to save?",
|
||||
"pause_select_item": "SELECT ITEM",
|
||||
"pause_shadow_title": "Shadow Temple",
|
||||
"pause_spirit_title": "Spirit Temple",
|
||||
"pause_to_decide": "to Decide",
|
||||
"pause_to_equip": "to Equip",
|
||||
"pause_to_equipment": "To Equipment",
|
||||
"pause_to_map": "To Map",
|
||||
"pause_to_play_melody": "to Play Melody",
|
||||
"pause_to_quest_status": "To Quest Status",
|
||||
"pause_to_select_item": "To Select Item",
|
||||
"pause_water_title": "Water Temple",
|
||||
"pause_yes": "Yes"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,31 @@
|
|||
[
|
||||
{
|
||||
"pause_botw_title": "Fondo del pozo",
|
||||
"pause_current_position": "UBICACIÓN ACTUAL",
|
||||
"pause_deku_title": "Gran Árbol Deku",
|
||||
"pause_dodongo_title": "Caverna Dodongo",
|
||||
"pause_equipment": "EQUIPO",
|
||||
"pause_fire_title": "Templo del Fuego",
|
||||
"pause_forest_title": "Templo del Bosque",
|
||||
"pause_ice_cavern_title": "Caverna de hielo",
|
||||
"pause_inside_jabu_title": "En la barriga de Jabu-Jabu",
|
||||
"pause_map": "MAPA",
|
||||
"pause_no": "No",
|
||||
"pause_quest_status": "ESTADO DE LA AVENTURA",
|
||||
"pause_save": "GUARDAR",
|
||||
"pause_save_confirmation": "Partida guardada.",
|
||||
"pause_save_prompt": "¿Desea guardar la partida?",
|
||||
"pause_select_item": "OBJETOS",
|
||||
"pause_shadow_title": "Templo de las Sombras",
|
||||
"pause_spirit_title": "Templo del Espíritu",
|
||||
"pause_to_decide": "para elegir",
|
||||
"pause_to_equip": "para equipar",
|
||||
"pause_to_equipment": "Al equipo",
|
||||
"pause_to_map": "Al mapa",
|
||||
"pause_to_play_melody": "para escuchar la canción",
|
||||
"pause_to_quest_status": "Al estado de la aventura",
|
||||
"pause_to_select_item": "A objetos",
|
||||
"pause_water_title": "Templo del Agua",
|
||||
"pause_yes": "Sí"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,31 @@
|
|||
[
|
||||
{
|
||||
"pause_botw_title": "Puits",
|
||||
"pause_current_position": "POSITION ACTUELLE",
|
||||
"pause_deku_title": "Arbre Mojo",
|
||||
"pause_dodongo_title": "Caverne Dodongo",
|
||||
"pause_equipment": "EQUIPEMENT",
|
||||
"pause_fire_title": "Temple du Feu",
|
||||
"pause_forest_title": "Temple de la Forêt",
|
||||
"pause_ice_cavern_title": "Caverne Polaire",
|
||||
"pause_inside_jabu_title": "Ventre de Jabu-Jabu",
|
||||
"pause_map": "CARTE",
|
||||
"pause_no": "Non",
|
||||
"pause_quest_status": "STATUT",
|
||||
"pause_save": "SAUVEGARDER",
|
||||
"pause_save_confirmation": "Jeu sauvegardé",
|
||||
"pause_save_prompt": "Voulez-vous sauvegarder ?",
|
||||
"pause_select_item": "INVENTAIRE",
|
||||
"pause_shadow_title": "Temple de l'Ombre",
|
||||
"pause_spirit_title": "Temple de l'Esprit",
|
||||
"pause_to_decide": "pour valider",
|
||||
"pause_to_equip": "pour équiper",
|
||||
"pause_to_equipment": "Equipement",
|
||||
"pause_to_map": "Carte",
|
||||
"pause_to_play_melody": "pour entendre le chant",
|
||||
"pause_to_quest_status": "Statut",
|
||||
"pause_to_select_item": "Inventaire",
|
||||
"pause_water_title": "Temple de l'Eau",
|
||||
"pause_yes": "Oui"
|
||||
}
|
||||
]
|
|
@ -31,7 +31,7 @@
|
|||
"dungeon_map_item_name": "Mapa da Masmorra",
|
||||
"empty_bottle_item_name": "Frasco Vazio",
|
||||
"eponas_song_item_name": "Canção da Epona",
|
||||
"eyeball_frog_item_name": "Sapo-Olho",
|
||||
"eyeball_frog_item_name": "Sapo Olhudo",
|
||||
"eyedrops_item_name": "Colírio",
|
||||
"fairy_bow_item_name": "Arco de Fada",
|
||||
"fairy_ocarina_item_name": "Ocarina de Fada",
|
||||
|
@ -73,7 +73,7 @@
|
|||
"master_sword_item_name": "Espada Mestra",
|
||||
"megaton_hammer_item_name": "Martelo Megaton",
|
||||
"minuet_of_forest_item_name": "Minueto da Floresta",
|
||||
"mirror_shield_item_name": "Escudo Espelho",
|
||||
"mirror_shield_item_name": "Escudo Espelhado",
|
||||
"nayrus_love_item_name": "Amor de Nayru (MP12)",
|
||||
"nocturne_of_shadow_item_name": "Noturno das Sombras",
|
||||
"ocarina_of_time_item_name": "Ocarina do Tempo",
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
[
|
||||
{
|
||||
"death_mountain_crater_position_name": "Cratera da\nMontanha da Morte",
|
||||
"death_mountain_point_name": "Montanha da Morte",
|
||||
"death_mountain_trail_position_name": "Trilha da\nMontanha da Morte",
|
||||
"desert_colossus_position_name": "Deserto\nColosso",
|
||||
"ganons_castle_position_name": "Castelo\ndo Ganon",
|
||||
"gerudos_fortress_point_name": "Fortaleza das Gerudos",
|
||||
"gerudos_fortress_position_name": "Fortaleza\ndas Gerudos",
|
||||
"gerudo_valley_point_name": "Vale das Gerudos",
|
||||
"gerudo_valley_position_name": "Vale das\nGerudos",
|
||||
"goron_city_position_name": "Cidade dos Gorons",
|
||||
"graveyard_position_name": "Cemitério",
|
||||
"haunted_wasteland_point_name": "Terra Assombrada",
|
||||
"haunted_wasteland_position_name": "Terra\nAssombrada",
|
||||
"hylia_lakeside_point_name": "Beira do\nLago Hylia",
|
||||
"hyrulefield_point_name": "Campo de Hyrule",
|
||||
"hyrule_castle_position_name": "Castelo de\nHyrule",
|
||||
"hyrule_field_position_name": "Campos de Hyrule",
|
||||
"kakariko_village_point_name": "Vila Kakariko",
|
||||
"kakariko_village_position_name": "Vila\nKakariko",
|
||||
"kokiri_forest_point_name": "Floresta Kokiri",
|
||||
"kokiri_forest_position_name": "Floresta Kokiri",
|
||||
"lake_hylia_position_name": "Lago Hylia",
|
||||
"lon_lon_ranch_point_name": "Rancho Lon Lon",
|
||||
"lon_lon_ranch_position_name": "Rancho\nLon Lon",
|
||||
"lost_woods_point_name": "Bosque Perdido",
|
||||
"lost_woods_position_name": "Bosque Perdido",
|
||||
"market_point_name": "Mercado",
|
||||
"market_position_name": "Mercado",
|
||||
"question_mark_position_name": "?",
|
||||
"sacred_forest_meadow_position_name": "Campina da\nFloresta Sagrada",
|
||||
"zoras_domain_point_name": "Domínio dos Zoras",
|
||||
"zoras_domain_position_name": "Domínio\ndos Zoras",
|
||||
"zoras_fountain_position_name": "Fonte\ndos Zoras",
|
||||
"zoras_river_position_name": "Rio dos Zoras"
|
||||
}
|
||||
]
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -2,7 +2,7 @@
|
|||
{
|
||||
"back_alley": "Traseiras",
|
||||
"bazaar": "Bazar",
|
||||
"bombchu_bowling_alley": "Pista de Bowling com Bombchu",
|
||||
"bombchu_bowling_alley": "Pista de Bowling Bombchu",
|
||||
"bombchu_shop": "Loja de Bombchu",
|
||||
"bottom_of_the_well": "Fundo do Poço",
|
||||
"castle_courtyard_ground": "Pátio do Castelo",
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
[
|
||||
{
|
||||
"barinade_title_card": "Elektroterrestrisches Biotentakel\nBARINADE",
|
||||
"bongo_title_card": "Bestialische Schattenmonstrosität\nBONGO BONGO",
|
||||
"ganondorf_title_card": "Großmeister des Bösen\nGANONDORF",
|
||||
"ganon_title_card": "GANON",
|
||||
"gohma_title_card": "Gepanzerter Spinnenparasit\nGOHMA",
|
||||
"kingdodongo_title_card": "Infernosaurus\nKING DODONGO",
|
||||
"morpha_title_card": "Aquamöbes Wassertentakel\nMORPHA",
|
||||
"phantom_ganon_title_card": "Reitendes Unheil\nPHANTOM-GANON",
|
||||
"twinrova_title_card": "Höllische Hexenarmada\nKILLA OHMAZ",
|
||||
"volvagia_boss_title_card": "Subterraner Lavadrachoid\nVOLVAGIA"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,14 @@
|
|||
[
|
||||
{
|
||||
"barinade_title_card": "Bio-electric Anemone\nBARINADE",
|
||||
"bongo_title_card": "Phantom Shadow Beast\nBONGO BONGO",
|
||||
"ganondorf_title_card": "Great King of Evil\nGANONDORF",
|
||||
"ganon_title_card": "GANON",
|
||||
"gohma_title_card": "Parasitic Armored Arachnid\nGOHMA",
|
||||
"kingdodongo_title_card": "Infernal Dinosaur\nKING DODONGO",
|
||||
"morpha_title_card": "Giant Aquatic Amoeba\nMORPHA",
|
||||
"phantom_ganon_title_card": "Evil Spirit from Beyond\nPHANTOM GANON",
|
||||
"twinrova_title_card": "Sorceress Sisters\nTWINROVA",
|
||||
"volvagia_boss_title_card": "Subterranean Lava Dragon\nVOLVAGIA"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,14 @@
|
|||
[
|
||||
{
|
||||
"barinade_title_card": "Anémona bioeléctrica\nBARINADE",
|
||||
"bongo_title_card": "Fantasma bestial de la oscuridad\nBONGO BONGO",
|
||||
"ganondorf_title_card": "Gran Rey Demonio\nGANONDORF",
|
||||
"ganon_title_card": "GANON",
|
||||
"gohma_title_card": "Arácnido parásito acorazado\nGOHMA",
|
||||
"kingdodongo_title_card": "Dinosaurio infernal\nREY DODONGO",
|
||||
"morpha_title_card": "Ameba acuática gigante\nMORPHA",
|
||||
"phantom_ganon_title_card": "Espíritu maligno de ultratumba\nGANON FANTASMA",
|
||||
"twinrova_title_card": "Hermanas hechiceras\nBIROVA",
|
||||
"volvagia_boss_title_card": "Dragón de lava subterráneo\nVOLVAGIA"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,14 @@
|
|||
[
|
||||
{
|
||||
"barinade_title_card": "Anémone Bio-Electrique\nBARINADE",
|
||||
"bongo_title_card": "Monstre de l'Ombre\nBONGO BONGO",
|
||||
"ganondorf_title_card": "Seigneur du Malin\nGANONDORF",
|
||||
"ganon_title_card": "GANON",
|
||||
"gohma_title_card": "Monstre Insectoïde Géant\nGOHMA",
|
||||
"kingdodongo_title_card": "Dinosaure Infernal\nKING DODONGO",
|
||||
"morpha_title_card": "Amibe Aquatique Géante\nMORPHA",
|
||||
"phantom_ganon_title_card": "Esprit Maléfique de l'Au-Delà\nGANON SPECTRAL",
|
||||
"twinrova_title_card": "Sorcières Jumelles\nDUO MALEFIQUE",
|
||||
"volvagia_boss_title_card": "Dragon des Profondeurs\nVOLCANIA"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,44 @@
|
|||
[
|
||||
{
|
||||
"are_you_sure": "Sicher ?",
|
||||
"are_you_sure_2": "Sicher ?",
|
||||
"check_brightness": "KONTRAST ÜBERPRÜFEN",
|
||||
"controls": "A - Eingabe • B - Zurück",
|
||||
"copy_button": "Kopieren",
|
||||
"copy_to_which_file": "Wohin kopieren ?",
|
||||
"copy_which_file": "Welche Datei ?",
|
||||
"disk_button": "Disk",
|
||||
"end_button": "ENDE",
|
||||
"erase_button": "Löschen",
|
||||
"erase_which_file": "Welche Datei ?",
|
||||
"file_1_button": "Datei 1",
|
||||
"file_2_button": "Datei 2",
|
||||
"file_3_button": "Datei 3",
|
||||
"file_copied": "Datei kopiert.",
|
||||
"file_empty": "Datei ist leer !",
|
||||
"file_erased": "Datei gelöscht.",
|
||||
"file_in_use": "Datei ist belegt !",
|
||||
"headset": "Kopfhörer",
|
||||
"hold": "Z-Trigger halten",
|
||||
"language": "SPRACHE",
|
||||
"language_name": "Deutsch",
|
||||
"language_name_all_caps": "DEUTSCH",
|
||||
"l_targeting": "ZIELERFASSUNG (Z-TRIGGER)",
|
||||
"mono": "Mono",
|
||||
"name": "Name ?",
|
||||
"no_empty_file": "Keine leere Datei !",
|
||||
"no_file_to_copy": "Keine Datei vorhanden.",
|
||||
"no_file_to_erase": "Keine Datei vorhanden.",
|
||||
"open_this_file": "Datei öffnen ?",
|
||||
"options_button": "Optionen",
|
||||
"options": "Optionen",
|
||||
"please_select_a_file": "Datei wählen.",
|
||||
"quit_button": "Zurück",
|
||||
"select_your_language": "• Wähle eine Sprache",
|
||||
"SOUND": "SOUND",
|
||||
"stereo": "Stereo",
|
||||
"surround": "Surround",
|
||||
"switch": "Einmal drücken",
|
||||
"yes_button": "Ja"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,44 @@
|
|||
[
|
||||
{
|
||||
"are_you_sure": "Are you sure ?",
|
||||
"are_you_sure_2": "Are you sure ?",
|
||||
"check_brightness": "CHECK BRIGHTNESS",
|
||||
"controls": "A - Decide • B - Cancel",
|
||||
"copy_button": "Copy",
|
||||
"copy_to_which_file": "Copy to which file ?",
|
||||
"copy_which_file": "Copy which file ?",
|
||||
"disk_button": "Disk",
|
||||
"end_button": "END",
|
||||
"erase_button": "Erase",
|
||||
"erase_which_file": "Erase which file ?",
|
||||
"file_1_button": "File 1",
|
||||
"file_2_button": "File 2",
|
||||
"file_3_button": "File 3",
|
||||
"file_copied": "File copied.",
|
||||
"file_empty": "This is an empty file.",
|
||||
"file_erased": "File erased.",
|
||||
"file_in_use": "This file is in use.",
|
||||
"headset": "Headset",
|
||||
"hold": "Hold",
|
||||
"language": "LANGUAGE",
|
||||
"language_name": "English",
|
||||
"language_name_all_caps": "ENGLISH",
|
||||
"l_targeting": "Z TARGETING",
|
||||
"mono": "Mono",
|
||||
"name": "Name ?",
|
||||
"no_empty_file": "There is no empty file.",
|
||||
"no_file_to_copy": "No file to copy.",
|
||||
"no_file_to_erase": "No file to erase.",
|
||||
"open_this_file": "Open this file ?",
|
||||
"options_button": "Options",
|
||||
"options": "Options",
|
||||
"please_select_a_file": "Please select a file.",
|
||||
"quit_button": "Quit",
|
||||
"select_your_language": "• Select your Language",
|
||||
"SOUND": "SOUND",
|
||||
"stereo": "Stereo",
|
||||
"surround": "Surround",
|
||||
"switch": "Switch",
|
||||
"yes_button": "Yes"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,44 @@
|
|||
[
|
||||
{
|
||||
"are_you_sure": "¿Seguro?",
|
||||
"are_you_sure_2": "¿Seguro?",
|
||||
"check_brightness": "CONTROL DE BRILLO",
|
||||
"controls": "A - Elegir • B - Cancelar",
|
||||
"copy_button": "Copiar",
|
||||
"copy_to_which_file": "¿Dónde copio el archivo?",
|
||||
"copy_which_file": "¿Qué archivo copio?",
|
||||
"disk_button": "Disco",
|
||||
"end_button": "FIN",
|
||||
"erase_button": "Borrar",
|
||||
"erase_which_file": "¿Qué archivo borro?",
|
||||
"file_1_button": "Archivo 1",
|
||||
"file_2_button": "Archivo 2",
|
||||
"file_3_button": "Archivo 3",
|
||||
"file_copied": "Archivo copiado.",
|
||||
"file_empty": "Este archivo está vacío.",
|
||||
"file_erased": "Archivo borrado.",
|
||||
"file_in_use": "Este archivo está en uso.",
|
||||
"headset": "Cascos",
|
||||
"hold": "Mantener",
|
||||
"language": "IDIOMA",
|
||||
"language_name": "español",
|
||||
"language_name_all_caps": "ESPAÑOL",
|
||||
"l_targeting": "FIJAR BLANCO CON Z",
|
||||
"mono": "Mono",
|
||||
"name": "¿Nombre?",
|
||||
"no_empty_file": "No hay archivos vacíos.",
|
||||
"no_file_to_copy": "No hay archivo que copiar.",
|
||||
"no_file_to_erase": "No hay archivo que borrar.",
|
||||
"open_this_file": "¿Abro este archivo?",
|
||||
"options_button": "Opciones",
|
||||
"options": "Opciones",
|
||||
"please_select_a_file": "Elija un archivo",
|
||||
"quit_button": "Volver",
|
||||
"select_your_language": "• Seleccione su idioma",
|
||||
"SOUND": "SONIDO",
|
||||
"stereo": "Estéreo",
|
||||
"surround": "Surround",
|
||||
"switch": "Cambiar",
|
||||
"yes_button": "Sí"
|
||||
}
|
||||
]
|
|
@ -0,0 +1,44 @@
|
|||
[
|
||||
{
|
||||
"are_you_sure": "Etes-vous sûr ?",
|
||||
"are_you_sure_2": "Etes-vous sûr ?",
|
||||
"check_brightness": "CONTROLE LUMIERE",
|
||||
"controls": "A - Valider • B - Annuler",
|
||||
"copy_button": "Copier",
|
||||
"copy_to_which_file": "Copier sur quel fichier ?",
|
||||
"copy_which_file": "Copier quel fichier ?",
|
||||
"disk_button": "Disk",
|
||||
"end_button": "FIN",
|
||||
"erase_button": "Effacer",
|
||||
"erase_which_file": "Effacer quel fichier ?",
|
||||
"file_1_button": "Fichier 1",
|
||||
"file_2_button": "Fichier 2",
|
||||
"file_3_button": "Fichter 3",
|
||||
"file_copied": "Fichier copié",
|
||||
"file_empty": "Ce fichier est vide",
|
||||
"file_erased": "Fichier effacé",
|
||||
"file_in_use": "Ce fichier est utilisé",
|
||||
"headset": "Casque",
|
||||
"hold": "Maintenue",
|
||||
"language": "LANGUE",
|
||||
"language_name": "français",
|
||||
"language_name_all_caps": "FRANÇAIS",
|
||||
"l_targeting": "VISEE Z",
|
||||
"mono": "Mono",
|
||||
"name": "Nom ?",
|
||||
"no_empty_file": "Aucun fichier vide",
|
||||
"no_file_to_copy": "Aucun fichier à copier",
|
||||
"no_file_to_erase": "Aucun fichier à effacer",
|
||||
"open_this_file": "Ouvrir ce fichier ?",
|
||||
"options_button": "Options",
|
||||
"options": "Options",
|
||||
"please_select_a_file": "Veuillez choisir un fichier",
|
||||
"quit_button": "Retour",
|
||||
"select_your_language": "• Sélectionnez votre Langue",
|
||||
"SOUND": "SON",
|
||||
"stereo": "Stéréo",
|
||||
"surround": "Surround",
|
||||
"switch": "Fixe",
|
||||
"yes_button": "Oui"
|
||||
}
|
||||
]
|
|
@ -284,7 +284,7 @@ struct SkelAnime
|
|||
/* 0x0C */ f32 startFrame; // In mode 4, start of partial loop.
|
||||
/* 0x10 */ f32 endFrame; // In mode 2, Update returns true when curFrame is equal to this. In mode 4, end of partial loop.
|
||||
/* 0x14 */ f32 animLength; // Total number of frames in the current animation's file.
|
||||
/* 0x18 */ f32 curFrame; // Current frame in the animation
|
||||
/* 0x18 */ rf32 curFrame; // Current frame in the animation
|
||||
/* 0x1C */ f32 playSpeed; // Multiplied by R_UPDATE_RATE / 3 to get the animation's frame rate.
|
||||
/* 0x20 */ Vec3s* jointTable; // Current translation of model and rotations of all limbs
|
||||
/* 0x24 */ Vec3s* morphTable; // Table of values used to morph between animations
|
||||
|
|
|
@ -765,9 +765,14 @@ struct OnePointCsFull
|
|||
/* 0x04 */ s16 timerInit;
|
||||
/* 0x06 */ s16 rollTargetInit;
|
||||
/* 0x08 */ f32 fovTargetInit;
|
||||
/* 0x0C */ f32 lerpStepScale;
|
||||
/* 0x0C */ f32 m_lerpStepScale;
|
||||
/* 0x10 */ Vec3f atTargetInit;
|
||||
/* 0x1C */ Vec3f eyeTargetInit;
|
||||
|
||||
f32 lerpStepScaler()
|
||||
{
|
||||
return m_lerpStepScale * FRAMERATE_SCALER;
|
||||
}
|
||||
}; /* size = 0x28 */
|
||||
|
||||
struct Unique9Anim
|
||||
|
@ -782,7 +787,7 @@ struct Unique9Anim
|
|||
/* 0x36 */ s16 curKeyFrameIdx;
|
||||
/* 0x38 */ s16 unk_38;
|
||||
/* 0x3A */ s16 isNewKeyFrame;
|
||||
/* 0x3C */ s16 keyFrameTimer;
|
||||
/* 0x3C */ TimerS16 keyFrameTimer;
|
||||
}; // size = 0x3E
|
||||
|
||||
struct Unique9
|
||||
|
@ -946,7 +951,7 @@ struct CamColChk
|
|||
|
||||
struct Camera
|
||||
{
|
||||
/* 0x000 */ char paramData[0x50];
|
||||
/* 0x000 */ char paramData[0x100];
|
||||
/* 0x050 */ Vec3f at;
|
||||
/* 0x05C */ Vec3f eye;
|
||||
/* 0x068 */ Vec3f up;
|
||||
|
@ -1000,7 +1005,7 @@ struct Camera
|
|||
/* 0x15A */ s16 roll;
|
||||
/* 0x15C */ s16 paramFlags;
|
||||
/* 0x15E */ s16 animState;
|
||||
/* 0x160 */ s16 timer;
|
||||
/* 0x160 */ TimerS16 timer;
|
||||
/* 0x162 */ s16 parentCamIdx;
|
||||
/* 0x164 */ s16 thisIdx;
|
||||
/* 0x166 */ s16 prevCamDataIdx;
|
||||
|
|
421
meson.build
421
meson.build
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
|||
#include "actor_common.h"
|
||||
#include "overlays\misc\ovl_kaleido_scope\z_kaleido_scope.h"
|
||||
#include "overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h"
|
||||
|
||||
static const Vtx sMarkBossVtx[] = {
|
||||
VTX(-4, 4, 0, 0, 0, 255, 255, 255, 255),
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Arrow_Fire" BaseAddress="0x80865d10" RangeStart="0x9D0" RangeEnd="0x1DF0">
|
||||
<Texture Name="s1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x9D0" Static="On"/>
|
||||
<Texture Name="s2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x11D0" Static="On"/>
|
||||
<Array Name="sVtx" Count="43" Offset="0x19D0" Static="On">
|
||||
<Texture Name="sArrowFire1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x9D0" Static="On"/>
|
||||
<Texture Name="sArrowFire2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x11D0" Static="On"/>
|
||||
<Array Name="sArrowFireVtx" Count="43" Offset="0x19D0" Static="On">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1C80" Static="On"/>
|
||||
<DList Name="sModelDL" Offset="0x1D30" Static="On"/>
|
||||
<DList Name="sArrowFireMaterialDL" Offset="0x1C80" Static="On"/>
|
||||
<DList Name="sArrowFireModelDL" Offset="0x1D30" Static="On"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Arrow_Ice" BaseAddress="0x80867cd0" RangeStart="0x9F0" RangeEnd="0x1E10">
|
||||
<Texture Name="s1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x9F0" Static="On"/>
|
||||
<Texture Name="s2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x11F0" Static="On"/>
|
||||
<Array Name="sVtx" Count="43" Offset="0x19F0" Static="On">
|
||||
<Texture Name="sArrowIce1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x9F0" Static="On"/>
|
||||
<Texture Name="sArrowIce2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x11F0" Static="On"/>
|
||||
<Array Name="sArrowIceVtx" Count="43" Offset="0x19F0" Static="On">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1CA0" Static="On"/>
|
||||
<DList Name="sModelDL" Offset="0x1D50" Static="On"/>
|
||||
<DList Name="sArrowIceMaterialDL" Offset="0x1CA0" Static="On"/>
|
||||
<DList Name="sArrowIceModelDL" Offset="0x1D50" Static="On"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Arrow_Light" BaseAddress="0x80869cb0" RangeStart="0xA00" RangeEnd="0x1E20">
|
||||
<Texture Name="s1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0xA00" Static="On"/>
|
||||
<Texture Name="s2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1200" Static="On"/>
|
||||
<Array Name="sVtx" Count="43" Offset="0x1A00" Static="On">
|
||||
<Texture Name="sArrowLight1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0xA00" Static="On"/>
|
||||
<Texture Name="sArrowLight2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1200" Static="On"/>
|
||||
<Array Name="sArrowLightVtx" Count="43" Offset="0x1A00" Static="On">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1CB0" Static="On"/>
|
||||
<DList Name="sModelDL" Offset="0x1D60" Static="On"/>
|
||||
<DList Name="sArrowLightMaterialDL" Offset="0x1CB0" Static="On"/>
|
||||
<DList Name="sArrowLightModelDL" Offset="0x1D60" Static="On"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
|
||||
<DList Name="D_809AD278" Offset="0x758"/>
|
||||
|
||||
<Array Name="sCylinderVtx" Count="16" Offset="0x798">
|
||||
<Array Name="sElfMsgCylinderVtx" Count="16" Offset="0x798">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sCylinderDL" Offset="0x898"/>
|
||||
<DList Name="sElfMsgCylinderDL" Offset="0x898"/>
|
||||
|
||||
<Array Name="sCubeVtx" Count="8" Offset="0x918">
|
||||
<Array Name="sElfMsgCubeVtx" Count="8" Offset="0x918">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sCubeDL" Offset="0x998"/>
|
||||
<DList Name="sElfMsgCubeDL" Offset="0x998"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
<DList Name="D_809ADC38" Offset="0x538"/>
|
||||
|
||||
<Array Name="sCubeVtx" Count="8" Offset="0x578">
|
||||
<Array Name="sElfMsg2CubeVtx" Count="8" Offset="0x578">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sCubeDL" Offset="0x5F8"/>
|
||||
<DList Name="sElfMsg2CubeDL" Offset="0x5F8"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,38 +1,38 @@
|
|||
<Root>
|
||||
<File Name="ovl_En_Jsjutan" BaseAddress="0x80A897A0" RangeStart="0x12F8" RangeEnd="0x4C88">
|
||||
<!-- D_80A8AA98. Carpet texture. -->
|
||||
<Texture Name="sCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12F8"/>
|
||||
<Texture Name="sEnJsjutanCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12F8"/>
|
||||
|
||||
<!-- D_80A8BA98. Carpet's shadow vertices. Same vertex type as sShadowEvenVtx. Used when gameplayFrames is odd. -->
|
||||
<Array Name="gShadowOddVtx" Count="144" Offset="0x22F8">
|
||||
<Array Name="gEnJsjutanShadowOddVtx" Count="144" Offset="0x22F8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<!-- D_80A8C398. Carpet's shadow vertices. Same vertex type as gShadowOddVtx. Used when gameplayFrames is even. -->
|
||||
<Array Name="sShadowEvenVtx" Count="144" Offset="0x2BF8">
|
||||
<Array Name="sEnJsjutanShadowEvenVtx" Count="144" Offset="0x2BF8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<!-- D_80A8CC98. Carpet vertices. Same vertex type as sCarpetEvenVtx. Used when gameplayFrames is odd. -->
|
||||
<Array Name="sCarpetOddVtx" Count="144" Offset="0x34F8">
|
||||
<Array Name="sEnJsjutanCarpetOddVtx" Count="144" Offset="0x34F8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
|
||||
<!-- D_80A8E610. Variable declared in `.bss` of EnJsjutan. Used by sShadowMaterialDL -->
|
||||
<Symbol Name="sShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4E70"/>
|
||||
<Symbol Name="sEnJsjutanShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4E70"/>
|
||||
|
||||
<!-- D_80A8D598. Draws the carpet's texture. -->
|
||||
<DList Name="sCarpetMaterialDL" Offset="0x3DF8"/>
|
||||
<DList Name="sEnJsjutanCarpetMaterialDL" Offset="0x3DF8"/>
|
||||
<!-- D_80A8D618. Draws the carpet's shadow texture. -->
|
||||
<DList Name="sShadowMaterialDL" Offset="0x3E78"/>
|
||||
<DList Name="sEnJsjutanShadowMaterialDL" Offset="0x3E78"/>
|
||||
|
||||
<!-- D_80A8D688. Draws vertexs in segment 0x0C. -->
|
||||
<DList Name="sModelDL" Offset="0x3EE8"/>
|
||||
<DList Name="sEnJsjutanModelDL" Offset="0x3EE8"/>
|
||||
|
||||
<!-- D_80A8DAB8. Carpet vertices. Same vertex type as sCarpetOddVtx. Used when gameplayFrames is even. -->
|
||||
<Array Name="sCarpetEvenVtx" Count="144" Offset="0x4318">
|
||||
<Array Name="sEnJsjutanCarpetEvenVtx" Count="144" Offset="0x4318">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
|
||||
<!-- D_80A8E400 -->
|
||||
<Collision Name="sCol" Offset="0x4C60"/>
|
||||
<Collision Name="sEnJsjutanCol" Offset="0x4C60"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<Root>
|
||||
<File Name="ovl_En_Kanban" BaseAddress="0x80A91FA0" RangeStart="0x2F80" RangeEnd="0x3040">
|
||||
<Array Name="sShadowVtx" Count="4" Offset="0x2F80">
|
||||
<Array Name="sEnKanbanShadowVtx" Count="4" Offset="0x2F80">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sShadowDL" Offset="0x2FC0"/>
|
||||
<DList Name="sEnKanbanShadowDL" Offset="0x2FC0"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<Root>
|
||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||
<File Name="ovl_Magic_Dark" BaseAddress="0x80B873D0" RangeStart="0xD10" RangeEnd="0x1740">
|
||||
<Texture Name="sDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xD10"/>
|
||||
<Texture Name="sMagicDarkDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xD10"/>
|
||||
|
||||
<Array Name="sDiamondVtx" Count="20" Offset="0x1510">
|
||||
<Array Name="sMagicDarkDiamondVtx" Count="20" Offset="0x1510">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
|
||||
<DList Name="sDiamondMaterialDL" Offset="0x1650"/>
|
||||
<DList Name="sDiamondModelDL" Offset="0x1700"/>
|
||||
<DList Name="sMagicDarkDiamondMaterialDL" Offset="0x1650"/>
|
||||
<DList Name="sMagicDarkDiamondModelDL" Offset="0x1700"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Magic_Fire" BaseAddress="0x80B88D70" RangeStart="0xB90" RangeEnd="0x21E0">
|
||||
<Texture Name="sTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB90"/>
|
||||
<Array Name="sSphereVtx" Count="76" Offset="0x1B90">
|
||||
<Texture Name="sMagicFireTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB90"/>
|
||||
<Array Name="sMagicFireSphereVtx" Count="76" Offset="0x1B90">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x2050"/>
|
||||
<DList Name="sModelDL" Offset="0x2078"/>
|
||||
<DList Name="sMagicFireMaterialDL" Offset="0x2050"/>
|
||||
<DList Name="sMagicFireModelDL" Offset="0x2078"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<Root>
|
||||
<File Name="ovl_Magic_Wind" BaseAddress="0x80B8B100" RangeStart="0x780" RangeEnd="0x1C98">
|
||||
<Skeleton Name="sSkel" Type="Curve" LimbType="Curve" Offset="0x1C90"/>
|
||||
<CurveAnimation Name="sAnim" SkelOffset="0x1C90" Offset="0x1C50"/>
|
||||
<Limb Name="sRootLimb" LimbType="Curve" Offset="0x1C60"/>
|
||||
<Limb Name="sInnerCylinderLimb" LimbType="Curve" Offset="0x1C6C"/>
|
||||
<Limb Name="sOuterCylinderLimb" LimbType="Curve" Offset="0x1C78"/>
|
||||
<Array Name="sCylinderVtx" Count="36" Offset="0x780">
|
||||
<Skeleton Name="sMagicWindSkel" Type="Curve" LimbType="Curve" Offset="0x1C90"/>
|
||||
<CurveAnimation Name="sMagicWindAnim" SkelOffset="0x1C90" Offset="0x1C50"/>
|
||||
<Limb Name="sMagicWindRootLimb" LimbType="Curve" Offset="0x1C60"/>
|
||||
<Limb Name="sMagicWindInnerCylinderLimb" LimbType="Curve" Offset="0x1C6C"/>
|
||||
<Limb Name="sMagicWindOuterCylinderLimb" LimbType="Curve" Offset="0x1C78"/>
|
||||
<Array Name="sMagicWindCylinderVtx" Count="36" Offset="0x780">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<Texture Name="sTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x9C0"/>
|
||||
<DList Name="sInnerCylinderDL" Offset="0x19C0"/>
|
||||
<DList Name="sOuterCylinderDL" Offset="0x1AC8"/>
|
||||
<Texture Name="sMagicWindTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x9C0"/>
|
||||
<DList Name="sMagicWindInnerCylinderDL" Offset="0x19C0"/>
|
||||
<DList Name="sMagicWindOuterCylinderDL" Offset="0x1AC8"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Spot" BaseAddress="0x80BA6070" RangeStart="0x7F0" RangeEnd="0xEC8">
|
||||
<Texture Name="sTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x7F0"/>
|
||||
<Array Name="sCylinderVtx" Count="27" Offset="0xBF0">
|
||||
<Texture Name="sOceffSpotTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x7F0"/>
|
||||
<Array Name="sOceffSpotCylinderVtx" Count="27" Offset="0xBF0">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sCylinderMaterialDL" Offset="0xDA0"/>
|
||||
<DList Name="sCylinderModelDL" Offset="0xE38"/>
|
||||
<DList Name="sOceffSpotCylinderMaterialDL" Offset="0xDA0"/>
|
||||
<DList Name="sOceffSpotCylinderModelDL" Offset="0xE38"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<Root>
|
||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||
<File Name="ovl_Oceff_Storm" BaseAddress="0x80BA70E0" RangeStart="0x7B0" RangeEnd="0x1B40">
|
||||
<Texture Name="sTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x7B0"/>
|
||||
<DList Name="sMaterialDL" Offset="0x17B0"/>
|
||||
<Array Name="sCylinderVtx" Count="27" Offset="0x1858">
|
||||
<Texture Name="sOceffStormTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x7B0"/>
|
||||
<DList Name="sOceffStormMaterialDL" Offset="0x17B0"/>
|
||||
<Array Name="sOceffStormCylinderVtx" Count="27" Offset="0x1858">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sCylinderMaterialDL" Offset="0x1A08"/>
|
||||
<DList Name="sCylinderModelDL" Offset="0x1AB0"/>
|
||||
<DList Name="sOceffStormCylinderMaterialDL" Offset="0x1A08"/>
|
||||
<DList Name="sOceffStormCylinderModelDL" Offset="0x1AB0"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Wipe" BaseAddress="0x80BA8D90" RangeStart="0x550" RangeEnd="0xD10">
|
||||
<Texture Name="sTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x550"/>
|
||||
<Array Name="sFrustumVtx" Count="40" Offset="0x950">
|
||||
<Texture Name="sOceffWipeTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x550"/>
|
||||
<Array Name="sOceffWipeFrustumVtx" Count="40" Offset="0x950">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0xBD0"/>
|
||||
<DList Name="sFrustumDL" Offset="0xC58"/>
|
||||
<DList Name="sOceffWipeMaterialDL" Offset="0xBD0"/>
|
||||
<DList Name="sOceffWipeFrustumDL" Offset="0xC58"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Wipe2" BaseAddress="0x80BA9BB0" RangeStart="0x480" RangeEnd="0x16E8">
|
||||
<Texture Name="s1Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x480"/>
|
||||
<Texture Name="s2Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC80"/>
|
||||
<Array Name="sFrustumVtx" Count="22" Offset="0x1480">
|
||||
<Texture Name="sOceffWipe21Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x480"/>
|
||||
<Texture Name="sOceffWipe22Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC80"/>
|
||||
<Array Name="sOceffWipe2FrustumVtx" Count="22" Offset="0x1480">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x15E0"/>
|
||||
<DList Name="sFrustumDL" Offset="0x1688"/>
|
||||
<DList Name="sOceffWipe2MaterialDL" Offset="0x15E0"/>
|
||||
<DList Name="sOceffWipe2FrustumDL" Offset="0x1688"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Wipe3" BaseAddress="0x80BAB3F0" RangeStart="0x480" RangeEnd="0x16C8">
|
||||
<Texture Name="sTex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x480"/>
|
||||
<Array Name="sFrustumVtx" Count="22" Offset="0x1480">
|
||||
<Texture Name="sOceffWipe3Tex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x480"/>
|
||||
<Array Name="sOceffWipe3FrustumVtx" Count="22" Offset="0x1480">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x15E0"/>
|
||||
<DList Name="sFrustumDL" Offset="0x1668"/>
|
||||
<DList Name="sOceffWipe3MaterialDL" Offset="0x15E0"/>
|
||||
<DList Name="sOceffWipe3FrustumDL" Offset="0x1668"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<Root>
|
||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||
<File Name="ovl_Oceff_Wipe4" BaseAddress="0x80BACC10" RangeStart="0x460" RangeEnd="0xF48">
|
||||
<Texture Name="sTex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x460"/>
|
||||
<Array Name="sFrustumVtx" Count="22" Offset="0xC60">
|
||||
<Texture Name="sOceffWipe4Tex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x460"/>
|
||||
<Array Name="sOceffWipe4FrustumVtx" Count="22" Offset="0xC60">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0xDC0"/>
|
||||
<DList Name="sUnusedMaterialDL" Offset="0xE28"/>
|
||||
<DList Name="sMaterial2DL" Offset="0xE90"/>
|
||||
<DList Name="sOceffWipe4MaterialDL" Offset="0xDC0"/>
|
||||
<DList Name="sOceffWipe4UnusedMaterialDL" Offset="0xE28"/>
|
||||
<DList Name="sOceffWipe4Material2DL" Offset="0xE90"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Arrow_Fire" BaseAddress="0x80A5F6B0" RangeStart="0x960" RangeEnd="0x1D30">
|
||||
<Texture Name="s1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x960" Static="On"/>
|
||||
<Texture Name="s2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x1160" Static="On"/>
|
||||
<Array Name="sVtx" Count="43" Offset="0x1960" Static="On">
|
||||
<Texture Name="sArrowFire1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x960" Static="On"/>
|
||||
<Texture Name="sArrowFire2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x1160" Static="On"/>
|
||||
<Array Name="sArrowFireVtx" Count="43" Offset="0x1960" Static="On">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1C10" Static="On"/>
|
||||
<DList Name="sModelDL" Offset="0x1CC0" Static="On"/>
|
||||
<DList Name="sArrowFireMaterialDL" Offset="0x1C10" Static="On"/>
|
||||
<DList Name="sArrowFireModelDL" Offset="0x1CC0" Static="On"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Arrow_Ice" BaseAddress="0x80A61570" RangeStart="0x980" RangeEnd="0x1DA0">
|
||||
<Texture Name="s1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x980" Static="On"/>
|
||||
<Texture Name="s2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x1180" Static="On"/>
|
||||
<Array Name="sVtx" Count="43" Offset="0x1980" Static="On">
|
||||
<Texture Name="sArrowIce1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x980" Static="On"/>
|
||||
<Texture Name="sArrowIce2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x1180" Static="On"/>
|
||||
<Array Name="sArrowIceVtx" Count="43" Offset="0x1980" Static="On">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1C30" Static="On"/>
|
||||
<DList Name="sModelDL" Offset="0x1CE0" Static="On"/>
|
||||
<DList Name="sArrowIceMaterialDL" Offset="0x1C30" Static="On"/>
|
||||
<DList Name="sArrowIceModelDL" Offset="0x1CE0" Static="On"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Arrow_Light" BaseAddress="0x80A63450" RangeStart="0x990" RangeEnd="0x1DB0">
|
||||
<Texture Name="s1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0x990" Static="On"/>
|
||||
<Texture Name="s2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1190" Static="On"/>
|
||||
<Array Name="sVtx" Count="43" Offset="0x1990" Static="On">
|
||||
<Texture Name="sArrowLight1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0x990" Static="On"/>
|
||||
<Texture Name="sArrowLight2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1190" Static="On"/>
|
||||
<Array Name="sArrowLightVtx" Count="43" Offset="0x1990" Static="On">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1C40" Static="On"/>
|
||||
<DList Name="sModelDL" Offset="0x1CF0" Static="On"/>
|
||||
<DList Name="sArrowLightMaterialDL" Offset="0x1C40" Static="On"/>
|
||||
<DList Name="sArrowLightModelDL" Offset="0x1CF0" Static="On"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,38 +1,38 @@
|
|||
<Root>
|
||||
<File Name="ovl_En_Jsjutan" BaseAddress="0x80ADCC30" RangeStart="0x12B8" RangeEnd="0x4C48">
|
||||
<!-- D_80A8AA98. Carpet texture. -->
|
||||
<Texture Name="sCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12B8"/>
|
||||
<Texture Name="sEnJsjutanCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12B8"/>
|
||||
|
||||
<!-- D_80A8BA98. Carpet's shadow vertices. Same vertex type as sShadowEvenVtx. Used when gameplayFrames is odd. -->
|
||||
<Array Name="gShadowOddVtx" Count="144" Offset="0x22B8">
|
||||
<Array Name="gEnJsjutanShadowOddVtx" Count="144" Offset="0x22B8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<!-- D_80A8C398. Carpet's shadow vertices. Same vertex type as gShadowOddVtx. Used when gameplayFrames is even. -->
|
||||
<Array Name="sShadowEvenVtx" Count="144" Offset="0x2BB8">
|
||||
<Array Name="sEnJsjutanShadowEvenVtx" Count="144" Offset="0x2BB8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<!-- D_80A8CC98. Carpet vertices. Same vertex type as sCarpetEvenVtx. Used when gameplayFrames is odd. -->
|
||||
<Array Name="sCarpetOddVtx" Count="144" Offset="0x34B8">
|
||||
<Array Name="sEnJsjutanCarpetOddVtx" Count="144" Offset="0x34B8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
|
||||
<!-- D_80A8E610. Variable declared in `.bss` of EnJsjutan. Used by sShadowMaterialDL -->
|
||||
<Symbol Name="sShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4DC0"/>
|
||||
<Symbol Name="sEnJsjutanShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4DC0"/>
|
||||
|
||||
<!-- D_80A8D598. Draws the carpet's texture. -->
|
||||
<DList Name="sCarpetMaterialDL" Offset="0x3DB8"/>
|
||||
<DList Name="sEnJsjutanCarpetMaterialDL" Offset="0x3DB8"/>
|
||||
<!-- D_80A8D618. Draws the carpet's shadow texture. -->
|
||||
<DList Name="sShadowMaterialDL" Offset="0x3E38"/>
|
||||
<DList Name="sEnJsjutanShadowMaterialDL" Offset="0x3E38"/>
|
||||
|
||||
<!-- D_80A8D688. Draws vertexs in segment 0x0C. -->
|
||||
<DList Name="sModelDL" Offset="0x3EA8"/>
|
||||
<DList Name="sEnJsjutanModelDL" Offset="0x3EA8"/>
|
||||
|
||||
<!-- D_80A8DAB8. Carpet vertices. Same vertex type as sCarpetOddVtx. Used when gameplayFrames is even. -->
|
||||
<Array Name="sCarpetEvenVtx" Count="144" Offset="0x42D8">
|
||||
<Array Name="sEnJsjutanCarpetEvenVtx" Count="144" Offset="0x42D8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
|
||||
<!-- D_80A8E400 -->
|
||||
<Collision Name="sCol" Offset="0x4C20"/>
|
||||
<Collision Name="sEnJsjutanCol" Offset="0x4C20"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<Root>
|
||||
<File Name="ovl_En_Kanban" BaseAddress="0x80AA2A00" RangeStart="0x2E70" RangeEnd="0x2F30">
|
||||
<Array Name="sShadowVtx" Count="4" Offset="0x2E70">
|
||||
<Array Name="sEnKanbanShadowVtx" Count="4" Offset="0x2E70">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sShadowDL" Offset="0x2EB0"/>
|
||||
<DList Name="sEnKanbanShadowDL" Offset="0x2EB0"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<Root>
|
||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||
<File Name="ovl_Magic_Dark" BaseAddress="0x80A2C850" RangeStart="0xC90" RangeEnd="0x16C0">
|
||||
<Texture Name="sDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xC90"/>
|
||||
<Texture Name="sMagicDarkDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xC90"/>
|
||||
|
||||
<Array Name="sDiamondVtx" Count="20" Offset="0x1490">
|
||||
<Array Name="sMagicDarkDiamondVtx" Count="20" Offset="0x1490">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
|
||||
<DList Name="sDiamondMaterialDL" Offset="0x15D0"/>
|
||||
<DList Name="sDiamondModelDL" Offset="0x1680"/>
|
||||
<DList Name="sMagicDarkDiamondMaterialDL" Offset="0x15D0"/>
|
||||
<DList Name="sMagicDarkDiamondModelDL" Offset="0x1680"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Magic_Fire" BaseAddress="0x8095E560" RangeStart="0xB20" RangeEnd="0x2170">
|
||||
<Texture Name="sTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB20"/>
|
||||
<Array Name="sSphereVtx" Count="76" Offset="0x1B20">
|
||||
<Texture Name="sMagicFireTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB20"/>
|
||||
<Array Name="sMagicFireSphereVtx" Count="76" Offset="0x1B20">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1FE0"/>
|
||||
<DList Name="sModelDL" Offset="0x2008"/>
|
||||
<DList Name="sMagicFireMaterialDL" Offset="0x1FE0"/>
|
||||
<DList Name="sMagicFireModelDL" Offset="0x2008"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<Root>
|
||||
<File Name="ovl_Magic_Wind" BaseAddress="0x8095C860" RangeStart="0x6A0" RangeEnd="0x1BB8">
|
||||
<Skeleton Name="sSkel" Type="Curve" LimbType="Curve" Offset="0x1BB0"/>
|
||||
<CurveAnimation Name="sAnim" SkelOffset="0x1BB0" Offset="0x1B70"/>
|
||||
<Limb Name="sRootLimb" LimbType="Curve" Offset="0x1B80"/>
|
||||
<Limb Name="sInnerCylinderLimb" LimbType="Curve" Offset="0x1B8C"/>
|
||||
<Limb Name="sOuterCylinderLimb" LimbType="Curve" Offset="0x1B98"/>
|
||||
<Array Name="sCylinderVtx" Count="36" Offset="0x6A0">
|
||||
<Skeleton Name="sMagicWindSkel" Type="Curve" LimbType="Curve" Offset="0x1BB0"/>
|
||||
<CurveAnimation Name="sMagicWindAnim" SkelOffset="0x1BB0" Offset="0x1B70"/>
|
||||
<Limb Name="sMagicWindRootLimb" LimbType="Curve" Offset="0x1B80"/>
|
||||
<Limb Name="sMagicWindInnerCylinderLimb" LimbType="Curve" Offset="0x1B8C"/>
|
||||
<Limb Name="sMagicWindOuterCylinderLimb" LimbType="Curve" Offset="0x1B98"/>
|
||||
<Array Name="sMagicWindCylinderVtx" Count="36" Offset="0x6A0">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<Texture Name="sTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x8E0"/>
|
||||
<DList Name="sInnerCylinderDL" Offset="0x18E0"/>
|
||||
<DList Name="sOuterCylinderDL" Offset="0x19E8"/>
|
||||
<Texture Name="sMagicWindTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x8E0"/>
|
||||
<DList Name="sMagicWindInnerCylinderDL" Offset="0x18E0"/>
|
||||
<DList Name="sMagicWindOuterCylinderDL" Offset="0x19E8"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Spot" BaseAddress="0x80B1A890" RangeStart="0x780" RangeEnd="0xE58">
|
||||
<Texture Name="sTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x780"/>
|
||||
<Array Name="sCylinderVtx" Count="27" Offset="0xB80">
|
||||
<Texture Name="sOceffSpotTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x780"/>
|
||||
<Array Name="sOceffSpotCylinderVtx" Count="27" Offset="0xB80">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sCylinderMaterialDL" Offset="0xD30"/>
|
||||
<DList Name="sCylinderModelDL" Offset="0xDC8"/>
|
||||
<DList Name="sOceffSpotCylinderMaterialDL" Offset="0xD30"/>
|
||||
<DList Name="sOceffSpotCylinderModelDL" Offset="0xDC8"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<Root>
|
||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||
<File Name="ovl_Oceff_Storm" BaseAddress="0x80B39AA0" RangeStart="0x740" RangeEnd="0x1AD0">
|
||||
<Texture Name="sTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x740"/>
|
||||
<DList Name="sMaterialDL" Offset="0x1740"/>
|
||||
<Array Name="sCylinderVtx" Count="27" Offset="0x17E8">
|
||||
<Texture Name="sOceffStormTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x740"/>
|
||||
<DList Name="sOceffStormMaterialDL" Offset="0x1740"/>
|
||||
<Array Name="sOceffStormCylinderVtx" Count="27" Offset="0x17E8">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sCylinderMaterialDL" Offset="0x1998"/>
|
||||
<DList Name="sCylinderModelDL" Offset="0x1A40"/>
|
||||
<DList Name="sOceffStormCylinderMaterialDL" Offset="0x1998"/>
|
||||
<DList Name="sOceffStormCylinderModelDL" Offset="0x1A40"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Wipe" BaseAddress="0x80B2C7B0" RangeStart="0x4F0" RangeEnd="0xCB0">
|
||||
<Texture Name="sTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x4F0"/>
|
||||
<Array Name="sFrustumVtx" Count="40" Offset="0x8F0">
|
||||
<Texture Name="sOceffWipeTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x4F0"/>
|
||||
<Array Name="sOceffWipeFrustumVtx" Count="40" Offset="0x8F0">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0xB70"/>
|
||||
<DList Name="sFrustumDL" Offset="0xBF8"/>
|
||||
<DList Name="sOceffWipeMaterialDL" Offset="0xB70"/>
|
||||
<DList Name="sOceffWipeFrustumDL" Offset="0xBF8"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Wipe2" BaseAddress="0x80B470F0" RangeStart="0x430" RangeEnd="0x1698">
|
||||
<Texture Name="s1Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x430"/>
|
||||
<Texture Name="s2Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC30"/>
|
||||
<Array Name="sFrustumVtx" Count="22" Offset="0x1430">
|
||||
<Texture Name="sOceffWipe21Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x430"/>
|
||||
<Texture Name="sOceffWipe22Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC30"/>
|
||||
<Array Name="sOceffWipe2FrustumVtx" Count="22" Offset="0x1430">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1590"/>
|
||||
<DList Name="sFrustumDL" Offset="0x1638"/>
|
||||
<DList Name="sOceffWipe2MaterialDL" Offset="0x1590"/>
|
||||
<DList Name="sOceffWipe2FrustumDL" Offset="0x1638"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<Root>
|
||||
<File Name="ovl_Oceff_Wipe3" BaseAddress="0x80B48860" RangeStart="0x430" RangeEnd="0x1678">
|
||||
<Texture Name="sTex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x430"/>
|
||||
<Array Name="sFrustumVtx" Count="22" Offset="0x1430">
|
||||
<Texture Name="sOceffWipe3Tex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x430"/>
|
||||
<Array Name="sOceffWipe3FrustumVtx" Count="22" Offset="0x1430">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0x1590"/>
|
||||
<DList Name="sFrustumDL" Offset="0x1618"/>
|
||||
<DList Name="sOceffWipe3MaterialDL" Offset="0x1590"/>
|
||||
<DList Name="sOceffWipe3FrustumDL" Offset="0x1618"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<Root>
|
||||
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
|
||||
<File Name="ovl_Oceff_Wipe4" BaseAddress="0x80B7BC40" RangeStart="0x410" RangeEnd="0xEF8">
|
||||
<Texture Name="sTex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x410"/>
|
||||
<Array Name="sFrustumVtx" Count="22" Offset="0xC10">
|
||||
<Texture Name="sOceffWipe4Tex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x410"/>
|
||||
<Array Name="sOceffWipe4FrustumVtx" Count="22" Offset="0xC10">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="sMaterialDL" Offset="0xD70"/>
|
||||
<DList Name="sUnusedMaterialDL" Offset="0xDD8"/>
|
||||
<DList Name="sMaterial2DL" Offset="0xE40"/>
|
||||
<DList Name="sOceffWipe4MaterialDL" Offset="0xD70"/>
|
||||
<DList Name="sOceffWipe4UnusedMaterialDL" Offset="0xDD8"/>
|
||||
<DList Name="sOceffWipe4Material2DL" Offset="0xE40"/>
|
||||
</File>
|
||||
</Root>
|
||||
|
|
|
@ -230,7 +230,7 @@ void* AudioHeap_Alloc(AudioAllocPool* pool, u32 size)
|
|||
#ifdef _MSC_VER
|
||||
return _aligned_malloc(ALIGN16(size), 0x10);
|
||||
#else
|
||||
return aligned_alloc(ALIGN16(size), 0x10);
|
||||
return aligned_alloc(0x10, ALIGN16(size));
|
||||
#endif
|
||||
// return malloc(size);
|
||||
u32 aligned = ALIGN16(size);
|
||||
|
|
|
@ -21,6 +21,9 @@ bool INTERPOLATE_ANIM = false;
|
|||
u8 SKIP_GFX_FRAME_MASK = 0;
|
||||
#endif
|
||||
|
||||
static bool g_force20FPS = false;
|
||||
static float g_force20FPSLast = 20.0f;
|
||||
|
||||
static FramerateProfile g_profile = PROFILE_BOOT;
|
||||
|
||||
static Framerate g_profileRates[] = {
|
||||
|
@ -97,8 +100,10 @@ namespace oot
|
|||
return SET_FRAMERATE;
|
||||
}
|
||||
|
||||
void setMaxFramerate(float framerate)
|
||||
void setMaxFramerate(float targetFramerate)
|
||||
{
|
||||
const float framerate = g_force20FPS ? 20.0f : targetFramerate;
|
||||
|
||||
if(framerate == SET_FRAMERATE)
|
||||
{
|
||||
return;
|
||||
|
@ -258,3 +263,13 @@ float Round(float value)
|
|||
{
|
||||
return roundf(value * 100) / 100.0f;
|
||||
}
|
||||
|
||||
void force20FPS(bool force)
|
||||
{
|
||||
if(force)
|
||||
{
|
||||
g_force20FPSLast = oot::getMaxFramerate();
|
||||
}
|
||||
g_force20FPS = force;
|
||||
oot::setMaxFramerate(g_force20FPSLast);
|
||||
}
|
||||
|
|
|
@ -1413,7 +1413,7 @@ s32 func_8002E2AC(GlobalContext* globalCtx, Actor* actor, Vec3f* arg2, s32 arg3)
|
|||
arg2->y += 50.0f;
|
||||
|
||||
actor->floorHeight = BgCheck_EntityRaycastFloor5(globalCtx, &globalCtx->colCtx, &actor->floorPoly, &floorBgId, actor, arg2);
|
||||
actor->bgCheckFlags &= ~(BG_STATE_1 | BG_STATE_2 | BG_STATE_7);
|
||||
actor->bgCheckFlags &= ~(BG_STATE_1 | BG_STATE_2 | BG_STATE_AT_OR_BELOW_GROUND);
|
||||
|
||||
if(actor->floorHeight <= BGCHECK_Y_MIN)
|
||||
{
|
||||
|
@ -1425,7 +1425,7 @@ s32 func_8002E2AC(GlobalContext* globalCtx, Actor* actor, Vec3f* arg2, s32 arg3)
|
|||
|
||||
if(floorHeightDiff >= 0.0f)
|
||||
{ // actor is on or below the ground
|
||||
actor->bgCheckFlags |= BG_STATE_7;
|
||||
actor->bgCheckFlags |= BG_STATE_AT_OR_BELOW_GROUND;
|
||||
|
||||
if(actor->bgCheckFlags & BG_STATE_4)
|
||||
{
|
||||
|
|
|
@ -5890,7 +5890,7 @@ s32 Camera_Unique8(Camera* camera)
|
|||
return Camera_Noop(camera);
|
||||
}
|
||||
|
||||
s32 Camera_Unique9(Camera* camera)
|
||||
s32 Camera_OnePoint_Unique9(Camera* camera)
|
||||
{
|
||||
Vec3f atTarget;
|
||||
Vec3f eyeTarget;
|
||||
|
@ -5937,7 +5937,8 @@ s32 Camera_Unique9(Camera* camera)
|
|||
{
|
||||
camera->animState++;
|
||||
anim->curKeyFrameIdx = -1;
|
||||
anim->keyFrameTimer = 1;
|
||||
anim->keyFrameTimer = 0;
|
||||
anim->keyFrameTimer++;
|
||||
anim->unk_38 = 0;
|
||||
anim->playerPos.x = playerPosRot.pos.x;
|
||||
anim->playerPos.y = playerPosRot.pos.y;
|
||||
|
@ -6328,9 +6329,9 @@ s32 Camera_Unique9(Camera* camera)
|
|||
eyeTarget.z = F32_LERPIMP(camera->eyeNext.z, anim->eyeTarget.z, invKeyFrameTimer);
|
||||
|
||||
setEyeNext:
|
||||
camera->eyeNext.x = Camera_LERPFloorF(eyeTarget.x, camera->eyeNext.x, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->eyeNext.y = Camera_LERPFloorF(eyeTarget.y, camera->eyeNext.y, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->eyeNext.z = Camera_LERPFloorF(eyeTarget.z, camera->eyeNext.z, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->eyeNext.x = Camera_LERPFloorF(eyeTarget.x, camera->eyeNext.x, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->eyeNext.y = Camera_LERPFloorF(eyeTarget.y, camera->eyeNext.y, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->eyeNext.z = Camera_LERPFloorF(eyeTarget.z, camera->eyeNext.z, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
case 9:
|
||||
case 10:
|
||||
// linear interpolation of at/fov/roll
|
||||
|
@ -6338,41 +6339,41 @@ s32 Camera_Unique9(Camera* camera)
|
|||
atTarget.x = F32_LERPIMP(camera->at.x, anim->atTarget.x, invKeyFrameTimer);
|
||||
atTarget.y = F32_LERPIMP(camera->at.y, anim->atTarget.y, invKeyFrameTimer);
|
||||
atTarget.z = F32_LERPIMP(camera->at.z, anim->atTarget.z, invKeyFrameTimer);
|
||||
camera->at.x = Camera_LERPFloorF(atTarget.x, camera->at.x, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->at.y = Camera_LERPFloorF(atTarget.y, camera->at.y, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->at.z = Camera_LERPFloorF(atTarget.z, camera->at.z, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->fov = Camera_LERPFloorF(F32_LERPIMP(camera->fov, anim->fovTarget, invKeyFrameTimer), camera->fov, anim->curKeyFrame->lerpStepScale, 0.01f);
|
||||
camera->roll = Camera_LERPFloorS(BINANG_LERPIMPINV(camera->roll, anim->rollTarget, anim->keyFrameTimer), camera->roll, anim->curKeyFrame->lerpStepScale, 0xA);
|
||||
camera->at.x = Camera_LERPFloorF(atTarget.x, camera->at.x, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->at.y = Camera_LERPFloorF(atTarget.y, camera->at.y, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->at.z = Camera_LERPFloorF(atTarget.z, camera->at.z, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->fov = Camera_LERPFloorF(F32_LERPIMP(camera->fov, anim->fovTarget, invKeyFrameTimer), camera->fov, anim->curKeyFrame->lerpStepScaler(), 0.01f);
|
||||
camera->roll = Camera_LERPFloorS(BINANG_LERPIMPINV(camera->roll, anim->rollTarget, anim->keyFrameTimer), camera->roll, anim->curKeyFrame->lerpStepScaler(), 0xA);
|
||||
break;
|
||||
case 4:
|
||||
// linear interpolation of eye/at/fov/roll using the step scale, and spherical coordinates
|
||||
OLib_Vec3fDiffToVecSphGeo(&eyeNextAtOffset, at, eyeNext);
|
||||
OLib_Vec3fDiffToVecSphGeo(&anim->atEyeOffsetTarget, &anim->atTarget, &anim->eyeTarget);
|
||||
scratchSph.r = Camera_LERPCeilF(anim->atEyeOffsetTarget.r, eyeNextAtOffset.r, anim->curKeyFrame->lerpStepScale, 0.1f);
|
||||
scratchSph.pitch = Camera_LERPCeilS(anim->atEyeOffsetTarget.pitch, eyeNextAtOffset.pitch, anim->curKeyFrame->lerpStepScale, 1);
|
||||
scratchSph.yaw = Camera_LERPCeilS(anim->atEyeOffsetTarget.yaw, eyeNextAtOffset.yaw, anim->curKeyFrame->lerpStepScale, 1);
|
||||
scratchSph.r = Camera_LERPCeilF(anim->atEyeOffsetTarget.r, eyeNextAtOffset.r, anim->curKeyFrame->lerpStepScaler(), 0.1f);
|
||||
scratchSph.pitch = Camera_LERPCeilS(anim->atEyeOffsetTarget.pitch, eyeNextAtOffset.pitch, anim->curKeyFrame->lerpStepScaler(), 1);
|
||||
scratchSph.yaw = Camera_LERPCeilS(anim->atEyeOffsetTarget.yaw, eyeNextAtOffset.yaw, anim->curKeyFrame->lerpStepScaler(), 1);
|
||||
Camera_Vec3fVecSphGeoAdd(eyeNext, at, &scratchSph);
|
||||
goto setAtFOVRoll;
|
||||
case 3:
|
||||
// linear interplation of eye/at/fov/roll using the step scale using eyeTarget
|
||||
camera->eyeNext.x = Camera_LERPCeilF(anim->eyeTarget.x, camera->eyeNext.x, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->eyeNext.y = Camera_LERPCeilF(anim->eyeTarget.y, camera->eyeNext.y, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->eyeNext.z = Camera_LERPCeilF(anim->eyeTarget.z, camera->eyeNext.z, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->eyeNext.x = Camera_LERPCeilF(anim->eyeTarget.x, camera->eyeNext.x, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->eyeNext.y = Camera_LERPCeilF(anim->eyeTarget.y, camera->eyeNext.y, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->eyeNext.z = Camera_LERPCeilF(anim->eyeTarget.z, camera->eyeNext.z, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
case 11:
|
||||
case 12:
|
||||
setAtFOVRoll:
|
||||
// linear interpolation of at/fov/roll using the step scale.
|
||||
camera->at.x = Camera_LERPCeilF(anim->atTarget.x, camera->at.x, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->at.y = Camera_LERPCeilF(anim->atTarget.y, camera->at.y, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->at.z = Camera_LERPCeilF(anim->atTarget.z, camera->at.z, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->fov = Camera_LERPCeilF(anim->fovTarget, camera->fov, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->roll = Camera_LERPCeilS(anim->rollTarget, camera->roll, anim->curKeyFrame->lerpStepScale, 1);
|
||||
camera->at.x = Camera_LERPCeilF(anim->atTarget.x, camera->at.x, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->at.y = Camera_LERPCeilF(anim->atTarget.y, camera->at.y, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->at.z = Camera_LERPCeilF(anim->atTarget.z, camera->at.z, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->fov = Camera_LERPCeilF(anim->fovTarget, camera->fov, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->roll = Camera_LERPCeilS(anim->rollTarget, camera->roll, anim->curKeyFrame->lerpStepScaler(), 1);
|
||||
break;
|
||||
case 13:
|
||||
// linear interpolation of at, with rotation around eyeTargetInit.y
|
||||
camera->at.x = Camera_LERPCeilF(anim->atTarget.x, camera->at.x, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->at.y += camera->playerPosDelta.y * anim->curKeyFrame->lerpStepScale;
|
||||
camera->at.z = Camera_LERPCeilF(anim->atTarget.z, camera->at.z, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->at.x = Camera_LERPCeilF(anim->atTarget.x, camera->at.x, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->at.y += camera->playerPosDelta.y * anim->curKeyFrame->lerpStepScaler();
|
||||
camera->at.z = Camera_LERPCeilF(anim->atTarget.z, camera->at.z, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
OLib_Vec3fDiffToVecSphGeo(&scratchSph, at, eyeNext);
|
||||
scratchSph.yaw += DEGF_TO_BINANG(anim->curKeyFrame->eyeTargetInit.y);
|
||||
|
||||
|
@ -6388,11 +6389,11 @@ s32 Camera_Unique9(Camera* camera)
|
|||
}
|
||||
|
||||
spB4 = scratchSph.r;
|
||||
scratchSph.r = !(spB4 < anim->curKeyFrame->eyeTargetInit.z) ? Camera_LERPCeilF(anim->curKeyFrame->eyeTargetInit.z, spB4, anim->curKeyFrame->lerpStepScale, 1.0f) : scratchSph.r;
|
||||
scratchSph.r = !(spB4 < anim->curKeyFrame->eyeTargetInit.z) ? Camera_LERPCeilF(anim->curKeyFrame->eyeTargetInit.z, spB4, anim->curKeyFrame->lerpStepScaler(), 1.0f) : scratchSph.r;
|
||||
|
||||
Camera_Vec3fVecSphGeoAdd(eyeNext, at, &scratchSph);
|
||||
camera->fov = Camera_LERPCeilF(F32_LERPIMPINV(camera->fov, anim->curKeyFrame->fovTargetInit, anim->keyFrameTimer), camera->fov, anim->curKeyFrame->lerpStepScale, 1.0f);
|
||||
camera->roll = Camera_LERPCeilS(anim->rollTarget, camera->roll, anim->curKeyFrame->lerpStepScale, 1);
|
||||
camera->fov = Camera_LERPCeilF(F32_LERPIMPINV(camera->fov, anim->curKeyFrame->fovTargetInit, anim->keyFrameTimer), camera->fov, anim->curKeyFrame->lerpStepScaler(), 1.0f);
|
||||
camera->roll = Camera_LERPCeilS(anim->rollTarget, camera->roll, anim->curKeyFrame->lerpStepScaler(), 1);
|
||||
break;
|
||||
case 24:
|
||||
// Set current keyframe to the roll target?
|
||||
|
@ -6894,7 +6895,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D6AC[2].timerInit;
|
||||
camera->timer = camera->timer + D_8011D6AC[2].timerInit;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -6909,7 +6910,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D724[2].timerInit;
|
||||
camera->timer = camera->timer + D_8011D724[2].timerInit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6937,7 +6938,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D79C[2].timerInit + D_8011D79C[3].timerInit;
|
||||
camera->timer = camera->timer + D_8011D79C[2].timerInit + D_8011D79C[3].timerInit;
|
||||
}
|
||||
}
|
||||
else if(eyeTargetDist < 300.0f && eyePlayerGeo.r < 30.0f)
|
||||
|
@ -6953,7 +6954,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D83C[1].timerInit;
|
||||
camera->timer = camera->timer + D_8011D83C[1].timerInit;
|
||||
}
|
||||
}
|
||||
else if(eyeTargetDist < 700.0f && ABS(sp4A) < 0x36B0)
|
||||
|
@ -6972,7 +6973,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D88C[1].timerInit;
|
||||
camera->timer = camera->timer + D_8011D88C[1].timerInit;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -6996,7 +6997,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D8DC[1].timerInit + D_8011D8DC[2].timerInit;
|
||||
camera->timer = camera->timer + D_8011D8DC[1].timerInit + D_8011D8DC[2].timerInit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7044,7 +7045,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D954[2].timerInit + D_8011D954[3].timerInit;
|
||||
camera->timer = camera->timer + D_8011D954[2].timerInit + D_8011D954[3].timerInit;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -7084,7 +7085,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
}
|
||||
else
|
||||
{
|
||||
camera->timer += D_8011D9F4[1].timerInit + D_8011D9F4[2].timerInit;
|
||||
camera->timer = camera->timer + D_8011D9F4[1].timerInit + D_8011D9F4[2].timerInit;
|
||||
D_8011D9F4[0].rollTargetInit = D_8011D9F4[1].rollTargetInit = 0;
|
||||
}
|
||||
}
|
||||
|
@ -7132,7 +7133,7 @@ s32 Camera_Demo5(Camera* camera)
|
|||
|
||||
sDemo5PrevAction12Frame = camera->globalCtx->frames.whole();
|
||||
Camera_ChangeSettingFlags(camera, CAM_SET_CS_C, (4 | 1));
|
||||
Camera_Unique9(camera);
|
||||
Camera_OnePoint_Unique9(camera);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -3298,7 +3298,7 @@ s32 Camera_Unique5(Camera* camera);
|
|||
s32 Camera_Unique6(Camera* camera);
|
||||
s32 Camera_Unique7(Camera* camera);
|
||||
s32 Camera_Unique8(Camera* camera);
|
||||
s32 Camera_Unique9(Camera* camera);
|
||||
s32 Camera_OnePoint_Unique9(Camera* camera);
|
||||
s32 Camera_Demo0(Camera* camera);
|
||||
s32 Camera_Demo1(Camera* camera);
|
||||
s32 Camera_Demo2(Camera* camera);
|
||||
|
@ -3325,7 +3325,7 @@ s32 (*sCameraFunctions[])(Camera*) = {
|
|||
Camera_KeepOn1, Camera_KeepOn2, Camera_KeepOn3, Camera_KeepOn4, Camera_Subj0, Camera_Subj1, Camera_Subj2, Camera_Subj3, Camera_Subj4, Camera_Jump0, Camera_Jump1, Camera_Jump2,
|
||||
Camera_Jump3, Camera_Jump4, Camera_Battle0, Camera_Battle1, Camera_Battle2, Camera_Battle3, Camera_BattleChargeSpinAttack, Camera_Fixed0, Camera_Fixed1, Camera_Fixed2, Camera_Fixed3, Camera_Fixed4,
|
||||
Camera_Data0, Camera_Data1, Camera_Data2, Camera_Data3, Camera_Data4, Camera_Unique0, Camera_Unique1, Camera_Unique2, Camera_Unique3, Camera_Unique4, Camera_Unique5, Camera_Unique6,
|
||||
Camera_Unique7, Camera_Unique8, Camera_Unique9, Camera_Demo0, Camera_Demo1, Camera_Demo2, Camera_Demo3, Camera_Demo4, Camera_Demo5, Camera_Demo6, Camera_Demo7, Camera_Demo8,
|
||||
Camera_Unique7, Camera_Unique8, Camera_OnePoint_Unique9, Camera_Demo0, Camera_Demo1, Camera_Demo2, Camera_Demo3, Camera_Demo4, Camera_Demo5, Camera_Demo6, Camera_Demo7, Camera_Demo8,
|
||||
Camera_Demo9, Camera_Special0, Camera_Special1, Camera_Special2, Camera_Special3, Camera_Special4, Camera_Special5, Camera_Special6, Camera_Special7, Camera_Special8, Camera_Special9,
|
||||
};
|
||||
|
||||
|
|
|
@ -306,15 +306,15 @@ void func_8006DD9C(Actor* actor, Vec3f* arg1, s16 arg2)
|
|||
|
||||
if(x > arg2)
|
||||
{
|
||||
actor->world.rot.y += arg2;
|
||||
actor->world.rot.y = actor->world.rot.y + arg2;
|
||||
}
|
||||
else if(x < -arg2)
|
||||
{
|
||||
actor->world.rot.y -= arg2;
|
||||
actor->world.rot.y = actor->world.rot.y - arg2;
|
||||
}
|
||||
else
|
||||
{
|
||||
actor->world.rot.y += x;
|
||||
actor->world.rot.y = actor->world.rot.y + x;
|
||||
}
|
||||
|
||||
actor->shape.rot.y = actor->world.rot.y;
|
||||
|
|
|
@ -621,7 +621,7 @@ static inline f32 _Math_SmoothStepToF(T* pValue, f32 target, f32 fraction, const
|
|||
float minStep = _minStep.value();
|
||||
if(*pValue != target)
|
||||
{
|
||||
f32 stepSize = (target - *pValue) * fraction;
|
||||
f32 stepSize = (target - *pValue) * (fraction);
|
||||
|
||||
if((stepSize >= minStep) || (stepSize <= -minStep))
|
||||
{
|
||||
|
@ -733,6 +733,12 @@ void Math_ApproachZeroF(f32* pValue, f32 fraction, const Step& _step)
|
|||
*pValue -= stepSize;
|
||||
}
|
||||
|
||||
f32 Math_ApproachZeroF(f32 pValue, f32 fraction, const Step& step)
|
||||
{
|
||||
Math_ApproachZeroF(&pValue, fraction, step);
|
||||
return pValue;
|
||||
}
|
||||
|
||||
void Math_ApproachZeroF(CounterF* pValue, f32 fraction, const Step& _step)
|
||||
{
|
||||
float step = _step.value();
|
||||
|
|
|
@ -109,7 +109,7 @@ s32 OnePointCutscene_SetInfo(GlobalContext* globalCtx, s16 camIdx, s16 csId, Act
|
|||
D_801208EC[1].fovTargetInit = mainCam->fov;
|
||||
D_801208EC[1].timerInit = timer - 1;
|
||||
csCam->timer = timer + 1;
|
||||
D_801208EC[1].lerpStepScale = 1.0f / (0.5f * timer);
|
||||
D_801208EC[1].m_lerpStepScale = 1.0f / (0.5f * timer);
|
||||
|
||||
csInfo->keyFrames = D_801208EC;
|
||||
csInfo->keyFrameCnt = 3;
|
||||
|
@ -1092,10 +1092,10 @@ s32 OnePointCutscene_SetInfo(GlobalContext* globalCtx, s16 camIdx, s16 csId, Act
|
|||
func_800C0808(globalCtx, camIdx, player, CAM_SET_CS_C);
|
||||
break;
|
||||
case 4022:
|
||||
csCam->timer = D_801237CC[0].timerInit + D_801237CC[3].timerInit + D_801237CC[1].timerInit + D_801237CC[2].timerInit + D_801237CC[4].timerInit;
|
||||
csCam->timer = gGanonCastleThrowPillarKeyFrames[0].timerInit + gGanonCastleThrowPillarKeyFrames[3].timerInit + gGanonCastleThrowPillarKeyFrames[1].timerInit + gGanonCastleThrowPillarKeyFrames[2].timerInit + gGanonCastleThrowPillarKeyFrames[4].timerInit;
|
||||
|
||||
csInfo->keyFrames = D_801237CC;
|
||||
csInfo->keyFrameCnt = 5;
|
||||
csInfo->keyFrames = gGanonCastleThrowPillarKeyFrames;
|
||||
csInfo->keyFrameCnt = ARRAY_COUNT(gGanonCastleThrowPillarKeyFrames);
|
||||
|
||||
func_800C0808(globalCtx, camIdx, player, CAM_SET_CS_C);
|
||||
break;
|
||||
|
|
|
@ -539,7 +539,7 @@ static OnePointCsFull D_8012372C[4] = {
|
|||
{0x03, 0xFF, 0x4242, 60, 2, 45.0f, 0.01f, {0.0f, 150.0f, 50.0f}, {0.0f, 200.0f, -80.0f}},
|
||||
};
|
||||
|
||||
static OnePointCsFull D_801237CC[5] = {
|
||||
static OnePointCsFull gGanonCastleThrowPillarKeyFrames[5] = {
|
||||
{0x8F, 0xFF, 0x4242, 20, 0, 50.0f, 1.0f, {0.0f, 50.0f, -10.0f}, {0.0f, 0.0f, 100.0f}}, {0x0A, 0xFF, 0x0101, 80, 0, 75.0f, 1.0f, {2900.0f, 1300.0f, 530.0f}, {2800.0f, 1190.0f, 540.0f}},
|
||||
{0x0F, 0xFF, 0x0000, 10, 0, 75.0f, 1.0f, {-1.0f, -1.0f, -1.0f}, {-1.0f, -1.0f, -1.0f}}, {0x02, 0xFF, 0x0101, 55, 0, 75.0f, 1.0f, {2900.0f, 1300.0f, 530.0f}, {1500.0f, 1415.0f, 650.0f}},
|
||||
{0x0F, 0xFF, 0x0000, 100, -45, 75.0f, 1.0f, {-1.0f, -1.0f, -1.0f}, {-1.0f, -1.0f, -1.0f}},
|
||||
|
|
|
@ -3810,10 +3810,10 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
static s16 spoilingItemEntrances[] = {0x01AD, 0x0153, 0x0153};
|
||||
static f32 D_80125B54[] = {-40.0f, -35.0f}; // unused
|
||||
static s16 D_80125B5C[] = {91, 91}; // unused
|
||||
static s16 D_8015FFE0;
|
||||
static s16 D_8015FFE2;
|
||||
static s16 D_8015FFE4;
|
||||
static s16 D_8015FFE6;
|
||||
static TimerS16 gTimerBeepTimer;
|
||||
static TimerS16 gTimer_8015FFE2;
|
||||
static TimerS16 gTimer_8015FFE4;
|
||||
static TimerS16 gTimer_8015FFE6;
|
||||
static s16 timerDigits[5];
|
||||
InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
|
||||
PauseContext* pauseCtx = &globalCtx->pauseCtx;
|
||||
|
@ -4172,7 +4172,7 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
if((gSaveContext.timer2State == 5) && (Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT))
|
||||
{
|
||||
// Trade quest timer reached 0
|
||||
D_8015FFE6 = 40;
|
||||
gTimer_8015FFE6 = 40;
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
globalCtx->sceneLoadFlag = 0x14;
|
||||
globalCtx->fadeTransition = 3;
|
||||
|
@ -4221,23 +4221,23 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
switch(gSaveContext.timer1State)
|
||||
{
|
||||
case 1:
|
||||
D_8015FFE2 = 20;
|
||||
D_8015FFE0 = 20;
|
||||
gTimer_8015FFE2 = 20;
|
||||
gTimerBeepTimer = 20;
|
||||
gSaveContext.timer1Value = gSaveContext.health >> 1;
|
||||
gSaveContext.timer1State = 2;
|
||||
break;
|
||||
case 2:
|
||||
D_8015FFE2--;
|
||||
if(D_8015FFE2 == 0)
|
||||
gTimer_8015FFE2--;
|
||||
if(gTimer_8015FFE2 == 0)
|
||||
{
|
||||
D_8015FFE2 = 20;
|
||||
gTimer_8015FFE2 = 20;
|
||||
gSaveContext.timer1State = 3;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
case 11:
|
||||
D_8015FFE2 = 20;
|
||||
D_8015FFE0 = 20;
|
||||
gTimer_8015FFE2 = 20;
|
||||
gTimerBeepTimer = 20;
|
||||
if(gSaveContext.timer1State == 5)
|
||||
{
|
||||
gSaveContext.timer1State = 6;
|
||||
|
@ -4249,10 +4249,10 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
break;
|
||||
case 6:
|
||||
case 12:
|
||||
D_8015FFE2--;
|
||||
if(D_8015FFE2 == 0)
|
||||
gTimer_8015FFE2--;
|
||||
if(gTimer_8015FFE2 == 0)
|
||||
{
|
||||
D_8015FFE2 = 20;
|
||||
gTimer_8015FFE2 = 20;
|
||||
if(gSaveContext.timer1State == 6)
|
||||
{
|
||||
gSaveContext.timer1State = 7;
|
||||
|
@ -4265,23 +4265,23 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
break;
|
||||
case 3:
|
||||
case 7:
|
||||
svar1 = (gSaveContext.timerX[0] - 26) / D_8015FFE2;
|
||||
svar1 = (gSaveContext.timerX[0] - 26) / gTimer_8015FFE2;
|
||||
gSaveContext.timerX[0] -= svar1;
|
||||
|
||||
if(gSaveContext.healthCapacity > 0xA0)
|
||||
{
|
||||
svar1 = (gSaveContext.timerY[0] - 54) / D_8015FFE2;
|
||||
svar1 = (gSaveContext.timerY[0] - 54) / gTimer_8015FFE2;
|
||||
}
|
||||
else
|
||||
{
|
||||
svar1 = (gSaveContext.timerY[0] - 46) / D_8015FFE2;
|
||||
svar1 = (gSaveContext.timerY[0] - 46) / gTimer_8015FFE2;
|
||||
}
|
||||
gSaveContext.timerY[0] -= svar1;
|
||||
|
||||
D_8015FFE2--;
|
||||
if(D_8015FFE2 == 0)
|
||||
gTimer_8015FFE2--;
|
||||
if(gTimer_8015FFE2 == 0)
|
||||
{
|
||||
D_8015FFE2 = 20;
|
||||
gTimer_8015FFE2 = 20;
|
||||
gSaveContext.timerX[0] = 26;
|
||||
|
||||
if(gSaveContext.healthCapacity > 0xA0)
|
||||
|
@ -4318,68 +4318,65 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
|
||||
if((gSaveContext.timer1State >= 3) && (msgCtx->msgLength == 0))
|
||||
{
|
||||
D_8015FFE0--;
|
||||
if(D_8015FFE0 == 0)
|
||||
gTimerBeepTimer--;
|
||||
if(gTimerBeepTimer == 0)
|
||||
{
|
||||
if(gSaveContext.timer1Value != 0)
|
||||
{
|
||||
gSaveContext.timer1Value--;
|
||||
gSaveContext.timer1Value = gSaveContext.timer1Value - 1;
|
||||
}
|
||||
|
||||
D_8015FFE0 = 20;
|
||||
gTimerBeepTimer = 20;
|
||||
|
||||
if(gSaveContext.timer1Value.isWhole())
|
||||
if(gSaveContext.timer1Value == 0)
|
||||
{
|
||||
if(gSaveContext.timer1Value == 0)
|
||||
gSaveContext.timer1State = 10;
|
||||
if(D_80125A5C != 0)
|
||||
{
|
||||
gSaveContext.timer1State = 10;
|
||||
if(D_80125A5C != 0)
|
||||
{
|
||||
gSaveContext.health = 0;
|
||||
globalCtx->damagePlayer(globalCtx, -(gSaveContext.health + 2));
|
||||
}
|
||||
D_80125A5C = 0;
|
||||
gSaveContext.health = 0;
|
||||
globalCtx->damagePlayer(globalCtx, -(gSaveContext.health + 2));
|
||||
}
|
||||
else if(gSaveContext.timer1Value > 60)
|
||||
D_80125A5C = 0;
|
||||
}
|
||||
else if(gSaveContext.timer1Value > 60)
|
||||
{
|
||||
if(timerDigits[4] == 1)
|
||||
{
|
||||
if(timerDigits[4] == 1)
|
||||
{
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gAudioDefaultPos, 4, &D_801333E0, &D_801333E0, &gReverbAdd2);
|
||||
}
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_MESSAGE_WOMAN, &gAudioDefaultPos, 4, &D_801333E0, &D_801333E0, &gReverbAdd2);
|
||||
}
|
||||
else if(gSaveContext.timer1Value >= 11)
|
||||
}
|
||||
else if(gSaveContext.timer1Value >= 11)
|
||||
{
|
||||
if(timerDigits[4] & 1)
|
||||
{
|
||||
if(timerDigits[4] & 1)
|
||||
{
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gAudioDefaultPos, 4, &D_801333E0, &D_801333E0, &gReverbAdd2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_E, &gAudioDefaultPos, 4, &D_801333E0, &D_801333E0, &gReverbAdd2);
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_N, &gAudioDefaultPos, 4, &D_801333E0, &D_801333E0, &gReverbAdd2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_WARNING_COUNT_E, &gAudioDefaultPos, 4, &D_801333E0, &D_801333E0, &gReverbAdd2);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
svar1 = (gSaveContext.timerX[0] - 26) / D_8015FFE2;
|
||||
svar1 = (gSaveContext.timerX[0] - 26) / gTimer_8015FFE2;
|
||||
gSaveContext.timerX[0] -= svar1;
|
||||
|
||||
if(gSaveContext.healthCapacity > 0xA0)
|
||||
{
|
||||
svar1 = (gSaveContext.timerY[0] - 54) / D_8015FFE2;
|
||||
svar1 = (gSaveContext.timerY[0] - 54) / gTimer_8015FFE2;
|
||||
}
|
||||
else
|
||||
{
|
||||
svar1 = (gSaveContext.timerY[0] - 46) / D_8015FFE2;
|
||||
svar1 = (gSaveContext.timerY[0] - 46) / gTimer_8015FFE2;
|
||||
}
|
||||
gSaveContext.timerY[0] -= svar1;
|
||||
|
||||
D_8015FFE2--;
|
||||
if(D_8015FFE2 == 0)
|
||||
gTimer_8015FFE2--;
|
||||
if(gTimer_8015FFE2 == 0)
|
||||
{
|
||||
D_8015FFE2 = 20;
|
||||
gTimer_8015FFE2 = 20;
|
||||
gSaveContext.timerX[0] = 26;
|
||||
if(gSaveContext.healthCapacity > 0xA0)
|
||||
{
|
||||
|
@ -4407,15 +4404,15 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
|
||||
if(gSaveContext.timer1State >= 3)
|
||||
{
|
||||
D_8015FFE0--;
|
||||
if(D_8015FFE0 == 0)
|
||||
gTimerBeepTimer--;
|
||||
if(gTimerBeepTimer == 0)
|
||||
{
|
||||
gSaveContext.timer1Value++;
|
||||
D_8015FFE0 = 20;
|
||||
gSaveContext.timer1Value = gSaveContext.timer1Value + 1;
|
||||
gTimerBeepTimer = 20;
|
||||
|
||||
if(gSaveContext.timer1Value == 3599)
|
||||
{
|
||||
D_8015FFE2 = 40;
|
||||
gTimer_8015FFE2 = 40;
|
||||
gSaveContext.timer1State = 15;
|
||||
}
|
||||
else
|
||||
|
@ -4428,8 +4425,8 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
case 10:
|
||||
if(gSaveContext.timer2State != 0)
|
||||
{
|
||||
D_8015FFE6 = 20;
|
||||
D_8015FFE4 = 20;
|
||||
gTimer_8015FFE6 = 20;
|
||||
gTimer_8015FFE4 = 20;
|
||||
gSaveContext.timerX[1] = 140;
|
||||
gSaveContext.timerY[1] = 80;
|
||||
|
||||
|
@ -4456,8 +4453,8 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
{
|
||||
case 1:
|
||||
case 7:
|
||||
D_8015FFE6 = 20;
|
||||
D_8015FFE4 = 20;
|
||||
gTimer_8015FFE6 = 20;
|
||||
gTimer_8015FFE4 = 20;
|
||||
gSaveContext.timerX[1] = 140;
|
||||
gSaveContext.timerY[1] = 80;
|
||||
if(gSaveContext.timer2State == 1)
|
||||
|
@ -4471,10 +4468,10 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
break;
|
||||
case 2:
|
||||
case 8:
|
||||
D_8015FFE6--;
|
||||
if(D_8015FFE6 == 0)
|
||||
gTimer_8015FFE6--;
|
||||
if(gTimer_8015FFE6 == 0)
|
||||
{
|
||||
D_8015FFE6 = 20;
|
||||
gTimer_8015FFE6 = 20;
|
||||
if(gSaveContext.timer2State == 2)
|
||||
{
|
||||
gSaveContext.timer2State = 3;
|
||||
|
@ -4488,22 +4485,22 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
case 3:
|
||||
case 9:
|
||||
osSyncPrintf("event_xp[1]=%d, event_yp[1]=%d TOTAL_EVENT_TM=%d\n", svar5 = gSaveContext.timerX[1], svar2 = gSaveContext.timerY[1], gSaveContext.timer2Value);
|
||||
svar1 = (gSaveContext.timerX[1] - 26) / D_8015FFE6;
|
||||
svar1 = (gSaveContext.timerX[1] - 26) / gTimer_8015FFE6;
|
||||
gSaveContext.timerX[1] -= svar1;
|
||||
if(gSaveContext.healthCapacity > 0xA0)
|
||||
{
|
||||
svar1 = (gSaveContext.timerY[1] - 54) / D_8015FFE6;
|
||||
svar1 = (gSaveContext.timerY[1] - 54) / gTimer_8015FFE6;
|
||||
}
|
||||
else
|
||||
{
|
||||
svar1 = (gSaveContext.timerY[1] - 46) / D_8015FFE6;
|
||||
svar1 = (gSaveContext.timerY[1] - 46) / gTimer_8015FFE6;
|
||||
}
|
||||
gSaveContext.timerY[1] -= svar1;
|
||||
|
||||
D_8015FFE6--;
|
||||
if(D_8015FFE6 == 0)
|
||||
gTimer_8015FFE6--;
|
||||
if(gTimer_8015FFE6 == 0)
|
||||
{
|
||||
D_8015FFE6 = 20;
|
||||
gTimer_8015FFE6 = 20;
|
||||
gSaveContext.timerX[1] = 26;
|
||||
|
||||
if(gSaveContext.healthCapacity > 0xA0)
|
||||
|
@ -4540,10 +4537,10 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
|
||||
if(gSaveContext.timer2State >= 3)
|
||||
{
|
||||
D_8015FFE4--;
|
||||
if(D_8015FFE4 == 0)
|
||||
gTimer_8015FFE4--;
|
||||
if(gTimer_8015FFE4 == 0)
|
||||
{
|
||||
D_8015FFE4 = 20;
|
||||
gTimer_8015FFE4 = 20;
|
||||
if(gSaveContext.timer2State == 4)
|
||||
{
|
||||
gSaveContext.timer2Value--;
|
||||
|
@ -4554,7 +4551,7 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
if(!Flags_GetSwitch(globalCtx, 0x37) || ((globalCtx->sceneNum != SCENE_GANON_DEMO) && (globalCtx->sceneNum != SCENE_GANON_FINAL) &&
|
||||
(globalCtx->sceneNum != SCENE_GANON_SONOGO) && (globalCtx->sceneNum != SCENE_GANONTIKA_SONOGO)))
|
||||
{
|
||||
D_8015FFE6 = 40;
|
||||
gTimer_8015FFE6 = 40;
|
||||
gSaveContext.timer2State = 5;
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
Message_StartTextbox(globalCtx, 0x71B0, NULL);
|
||||
|
@ -4562,7 +4559,7 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
}
|
||||
else
|
||||
{
|
||||
D_8015FFE6 = 40;
|
||||
gTimer_8015FFE6 = 40;
|
||||
gSaveContext.timer2State = 6;
|
||||
}
|
||||
}
|
||||
|
@ -4607,8 +4604,8 @@ void Interface_Draw(GlobalContext* globalCtx)
|
|||
}
|
||||
break;
|
||||
case 6:
|
||||
D_8015FFE6--;
|
||||
if(D_8015FFE6 == 0)
|
||||
gTimer_8015FFE6--;
|
||||
if(gTimer_8015FFE6 == 0)
|
||||
{
|
||||
gSaveContext.timer2State = 0;
|
||||
}
|
||||
|
|
|
@ -1270,7 +1270,7 @@ s32 LinkAnimation_Morph(GlobalContext* globalCtx, SkelAnime* skelAnime)
|
|||
*/
|
||||
void LinkAnimation_AnimateFrame(GlobalContext* globalCtx, SkelAnime* skelAnime)
|
||||
{
|
||||
AnimationContext_SetLoadFrame(globalCtx, (LinkAnimationHeader*)skelAnime->animation, skelAnime->curFrame, skelAnime->limbCount, skelAnime->jointTable);
|
||||
AnimationContext_SetLoadFrame(globalCtx, (LinkAnimationHeader*)skelAnime->animation, (float)skelAnime->curFrame, skelAnime->limbCount, skelAnime->jointTable);
|
||||
|
||||
if(skelAnime->morphWeight != 0)
|
||||
{
|
||||
|
@ -1505,10 +1505,12 @@ void LinkAnimation_EndLoop(SkelAnime* skelAnime)
|
|||
s32 Animation_OnFrameImpl(SkelAnime* skelAnime, f32 frame, f32 updateRate)
|
||||
{
|
||||
f32 updateSpeed = skelAnime->playSpeed * updateRate;
|
||||
f32 prevFrame = skelAnime->curFrame - updateSpeed;
|
||||
f32 prevFrame = Round(skelAnime->curFrame - updateSpeed);
|
||||
f32 curFrameDiff;
|
||||
f32 prevFrameDiff;
|
||||
|
||||
frame = Round(frame);
|
||||
|
||||
if(prevFrame < 0.0f)
|
||||
{
|
||||
prevFrame += skelAnime->animLength;
|
||||
|
|
|
@ -243,6 +243,8 @@ namespace oot::save
|
|||
}
|
||||
}
|
||||
|
||||
Inventory_ChangeUpgrade(UPG_STRENGTH, 3);
|
||||
|
||||
this->entranceIndex = 0xCD;
|
||||
this->magicLevel = 0;
|
||||
this->sceneFlags[5].swch = 0x40000000;
|
||||
|
|
|
@ -111,8 +111,8 @@ void VisMono_Draw(VisMono* pthis, Gfx** gfxp)
|
|||
gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
}
|
||||
|
||||
gDPSetColor(gfx++, G_SETPRIMCOLOR, pthis->primColor.r, pthis->primColor.g, pthis->primColor.b, pthis->primColor.a);
|
||||
gDPSetColor(gfx++, G_SETENVCOLOR, pthis->envColor.r, pthis->envColor.g, pthis->envColor.b, pthis->envColor.a);
|
||||
gDPSetColor(gfx++, G_SETPRIMCOLOR, (u32)pthis->primColor);
|
||||
gDPSetColor(gfx++, G_SETENVCOLOR, (u32)pthis->envColor);
|
||||
|
||||
gDPLoadTLUT_pal256(gfx++, tlut);
|
||||
|
||||
|
|
|
@ -278,9 +278,9 @@ void ArrowFire_Draw(Actor* pthisx, GlobalContext* globalCtx2)
|
|||
Matrix_Scale(pthis->radius * 0.2f, pthis->unk_158 * 4.0f, pthis->radius * 0.2f, MTXMODE_APPLY);
|
||||
Matrix_Translate(0.0f, -700.0f, 0.0f, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_arrow_fire.c", 666), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sArrowFireMaterialDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, 255 - (uintptr_t)(stateFrames * 2) % 256, 0, 64, 32, 1, 255 - (uintptr_t)stateFrames % 256, 511 - (uintptr_t)(stateFrames * 10) % 512, 64, 64));
|
||||
gSPDisplayList(POLY_XLU_DISP++, sModelDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sArrowFireModelDL);
|
||||
|
||||
CLOSE_DISPS(globalCtx->gfxCtx, "../z_arrow_fire.c", 682);
|
||||
}
|
||||
|
|
|
@ -279,9 +279,9 @@ void ArrowIce_Draw(Actor* pthisx, GlobalContext* globalCtx)
|
|||
Matrix_Scale(pthis->radius * 0.2f, pthis->unk_160 * 3.0f, pthis->radius * 0.2f, MTXMODE_APPLY);
|
||||
Matrix_Translate(0.0f, -700.0f, 0.0f, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_arrow_ice.c", 660), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sArrowIceMaterialDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, 511 - (uintptr_t)(stateFrames * 5) % 512, 0, 128, 32, 1, 511 - (uintptr_t)(stateFrames * 10) % 512, 511 - (uintptr_t)(stateFrames * 10) % 512, 4, 16));
|
||||
gSPDisplayList(POLY_XLU_DISP++, sModelDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sArrowIceModelDL);
|
||||
|
||||
CLOSE_DISPS(globalCtx->gfxCtx, "../z_arrow_ice.c", 676);
|
||||
}
|
||||
|
|
|
@ -277,9 +277,9 @@ void ArrowLight_Draw(Actor* pthisx, GlobalContext* globalCtx)
|
|||
Matrix_Scale(pthis->radius * 0.2f, pthis->unk_160 * 4.0f, pthis->radius * 0.2f, MTXMODE_APPLY);
|
||||
Matrix_Translate(0.0f, -700.0f, 0.0f, MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_arrow_light.c", 648), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sArrowLightMaterialDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, 511 - (uintptr_t)(stateFrames * 5) % 512, 0, 4, 32, 1, 511 - (uintptr_t)(stateFrames * 10) % 512, 511 - (uintptr_t)(stateFrames * 30) % 512, 8, 16));
|
||||
gSPDisplayList(POLY_XLU_DISP++, sModelDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sArrowLightModelDL);
|
||||
|
||||
CLOSE_DISPS(globalCtx->gfxCtx, "../z_arrow_light.c", 664);
|
||||
}
|
||||
|
|
|
@ -266,7 +266,7 @@ void BgGndIceblock_Idle(BgGndIceblock* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
if(pthis->dyna.unk_150 > 0.0f)
|
||||
{
|
||||
BgGndIceblock_SetNextPosition(pthis);
|
||||
|
@ -287,7 +287,7 @@ void BgGndIceblock_Reset(BgGndIceblock* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
if(Math_StepToF(&thisx->world.pos.y, thisx->home.pos.y, 1.0f))
|
||||
|
|
|
@ -80,7 +80,7 @@ void func_8087B7E8(BgHaka* pthis, GlobalContext* globalCtx)
|
|||
if(globalCtx->sceneNum == SCENE_SPOT02 && !LINK_IS_ADULT && !gSaveContext.nightFlag)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
if(!Gameplay_InCsMode(globalCtx))
|
||||
{
|
||||
Message_StartTextbox(globalCtx, 0x5073, NULL);
|
||||
|
@ -91,7 +91,7 @@ void func_8087B7E8(BgHaka* pthis, GlobalContext* globalCtx)
|
|||
else if(0.0f < pthis->dyna.unk_150 || (globalCtx->sceneNum == SCENE_SPOT06 && !LINK_IS_ADULT && !Flags_GetSwitch(globalCtx, 0x23)))
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -115,7 +115,7 @@ void func_8087B938(BgHaka* pthis, GlobalContext* globalCtx)
|
|||
if(sp38 != 0)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
if(pthis->dyna.actor.params == 1)
|
||||
{
|
||||
Common_PlaySfx(NA_SE_SY_CORRECT_CHIME);
|
||||
|
@ -136,7 +136,7 @@ void func_8087BAAC(BgHaka* pthis, GlobalContext* globalCtx)
|
|||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ void func_8087BAE4(BgHaka* pthis, GlobalContext* globalCtx)
|
|||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
if(pthis->dyna.actor.params == 0)
|
||||
{
|
||||
|
|
|
@ -198,7 +198,7 @@ void BgHakaGate_StatueInactive(BgHakaGate* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ void BgHakaGate_StatueIdle(BgHakaGate* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
else
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
if(pthis->vTimer != 0)
|
||||
{
|
||||
|
@ -254,7 +254,7 @@ void BgHakaGate_StatueTurn(BgHakaGate* pthis, GlobalContext* globalCtx)
|
|||
turnFinished = Math_StepToS(&pthis->vTurnAngleDeg10, 600, pthis->vTurnRateDeg10);
|
||||
turnAngle = pthis->vTurnAngleDeg10 * pthis->vTurnDirection;
|
||||
pthis->dyna.actor.shape.rot.y = (pthis->vRotYDeg10 + turnAngle) * 0.1f * (0x10000 / 360.0f);
|
||||
if((player->stateFlags2 & PLAYER_STATE2_4) && (sStatueDistToPlayer > 0.0f))
|
||||
if((player->stateFlags2 & PLAYER_STATE2_4_JYA_COBRA_TURNING) && (sStatueDistToPlayer > 0.0f))
|
||||
{
|
||||
player->actor.world.pos.x = pthis->dyna.actor.home.pos.x + (Math_SinS(pthis->dyna.actor.shape.rot.y - pthis->vInitTurnAngle) * sStatueDistToPlayer);
|
||||
player->actor.world.pos.z = pthis->dyna.actor.home.pos.z + (Math_CosS(pthis->dyna.actor.shape.rot.y - pthis->vInitTurnAngle) * sStatueDistToPlayer);
|
||||
|
@ -266,7 +266,7 @@ void BgHakaGate_StatueTurn(BgHakaGate* pthis, GlobalContext* globalCtx)
|
|||
sStatueRotY = pthis->dyna.actor.shape.rot.y;
|
||||
if(turnFinished)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->vRotYDeg10 = (pthis->vRotYDeg10 + turnAngle) % 3600;
|
||||
pthis->vTurnRateDeg10 = 0;
|
||||
pthis->vTurnAngleDeg10 = 0;
|
||||
|
|
|
@ -23,8 +23,8 @@ void BgHakaMeganeBG_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
|||
void BgHakaMeganeBG_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void BgHakaMeganeBG_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
void func_8087DFF8(BgHakaMeganeBG* pthis, GlobalContext* globalCtx);
|
||||
void func_8087E040(BgHakaMeganeBG* pthis, GlobalContext* globalCtx);
|
||||
void BgHakaMeganeBG_Action_Horizontal_Wait(BgHakaMeganeBG* pthis, GlobalContext* globalCtx);
|
||||
void BgHakaMeganeBG_Action_Horizontal_Move(BgHakaMeganeBG* pthis, GlobalContext* globalCtx);
|
||||
void func_8087E10C(BgHakaMeganeBG* pthis, GlobalContext* globalCtx);
|
||||
void func_8087E1E0(BgHakaMeganeBG* pthis, GlobalContext* globalCtx);
|
||||
void func_8087E258(BgHakaMeganeBG* pthis, GlobalContext* globalCtx);
|
||||
|
@ -81,7 +81,7 @@ void BgHakaMeganeBG_Init(Actor* thisx, GlobalContext* globalCtx)
|
|||
CollisionHeader_GetVirtual(&object_haka_objects_Col_009168, &colHeader);
|
||||
thisx->flags |= ACTOR_FLAG_7;
|
||||
pthis->unk_16A = 20;
|
||||
pthis->actionFunc = func_8087DFF8;
|
||||
pthis->actionFunc = BgHakaMeganeBG_Action_Horizontal_Wait;
|
||||
}
|
||||
else if(thisx->params == 3)
|
||||
{
|
||||
|
@ -119,7 +119,7 @@ void BgHakaMeganeBG_Destroy(Actor* thisx, GlobalContext* globalCtx)
|
|||
DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, pthis->dyna.bgId);
|
||||
}
|
||||
|
||||
void func_8087DFF8(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
||||
void BgHakaMeganeBG_Action_Horizontal_Wait(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
||||
{
|
||||
if(pthis->unk_16A != 0)
|
||||
{
|
||||
|
@ -129,12 +129,12 @@ void func_8087DFF8(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
|||
if(pthis->unk_16A == 0)
|
||||
{
|
||||
pthis->unk_16A = 40;
|
||||
pthis->dyna.actor.world.rot.y += 0x8000;
|
||||
pthis->actionFunc = func_8087E040;
|
||||
pthis->dyna.actor.world.rot.y = pthis->dyna.actor.world.rot.y + 0x8000;
|
||||
pthis->actionFunc = BgHakaMeganeBG_Action_Horizontal_Move;
|
||||
}
|
||||
}
|
||||
|
||||
void func_8087E040(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
||||
void BgHakaMeganeBG_Action_Horizontal_Move(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
||||
{
|
||||
f32 xSub;
|
||||
|
||||
|
@ -145,7 +145,7 @@ void func_8087E040(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
|||
|
||||
xSub = (sinf(((pthis->unk_16A * 0.025f) + 0.5f) * M_PI) + 1.0f) * 160.0f;
|
||||
|
||||
if(pthis->dyna.actor.world.rot.y != pthis->dyna.actor.shape.rot.y)
|
||||
if(Math_AngleDiffF(BINANG_TO_DEGF(pthis->dyna.actor.world.rot.y), BINANG_TO_DEGF(pthis->dyna.actor.shape.rot.y)) < 10.0f)
|
||||
{
|
||||
xSub = 320.0f - xSub;
|
||||
}
|
||||
|
@ -155,13 +155,13 @@ void func_8087E040(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
|||
if(pthis->unk_16A == 0)
|
||||
{
|
||||
pthis->unk_16A = 20;
|
||||
pthis->actionFunc = func_8087DFF8;
|
||||
pthis->actionFunc = BgHakaMeganeBG_Action_Horizontal_Wait;
|
||||
}
|
||||
}
|
||||
|
||||
void func_8087E10C(BgHakaMeganeBG* pthis, GlobalContext* globalCtx)
|
||||
{
|
||||
pthis->dyna.actor.velocity.y += 1.0f;
|
||||
pthis->dyna.actor.velocity.y += 1.0f * FRAMERATE_SCALER;
|
||||
|
||||
if(pthis->dyna.actor.velocity.y > 20.0f)
|
||||
{
|
||||
|
|
|
@ -13,5 +13,5 @@ struct BgHakaMeganeBG
|
|||
/* 0x0000 */ DynaPolyActor dyna;
|
||||
/* 0x0164 */ BgHakaMeganeBGActionFunc actionFunc;
|
||||
/* 0x0168 */ u8 unk_168;
|
||||
/* 0x016A */ s16 unk_16A;
|
||||
/* 0x016A */ TimerS16 unk_16A;
|
||||
};
|
||||
|
|
|
@ -177,7 +177,7 @@ void func_8088B268(BgHidanRock* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(temp_v1)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
pthis->dyna.actor.home.pos.x = pthis->dyna.actor.world.pos.x;
|
||||
pthis->dyna.actor.home.pos.z = pthis->dyna.actor.world.pos.z;
|
||||
|
@ -190,7 +190,7 @@ void func_8088B268(BgHidanRock* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
else
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
if(pthis->timer != 0)
|
||||
{
|
||||
|
@ -212,7 +212,7 @@ void func_8088B268(BgHidanRock* pthis, GlobalContext* globalCtx)
|
|||
pthis->dyna.actor.world.pos.z = D_8088BF60.z;
|
||||
pthis->dyna.actor.speedXZ = 0.0f;
|
||||
D_8088BFC0_42 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->actionFunc = func_8088B79C;
|
||||
}
|
||||
|
||||
|
@ -365,7 +365,7 @@ void func_8088B990(BgHidanRock* pthis, GlobalContext* globalCtx)
|
|||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
pthis->dyna.actor.speedXZ = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
|
||||
if((pthis->type == 0 && (Math_SmoothStepToF(&pthis->dyna.actor.world.pos.y, pthis->dyna.actor.home.pos.y + 1820.0f, 0.25f, 20.0f, 0.5f) < 0.1f)) ||
|
||||
|
|
|
@ -152,7 +152,7 @@ void BgIceObjects_Idle(BgIceObjects* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
if((pthis->dyna.unk_150 > 0.0f) && !Player_InCsMode(globalCtx))
|
||||
{
|
||||
BgIceObjects_SetNextTarget(pthis, globalCtx);
|
||||
|
@ -230,7 +230,7 @@ void BgIceObjects_Reset(BgIceObjects* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
if(Math_StepToF(&thisx->world.pos.y, thisx->home.pos.y, 1.0f))
|
||||
|
@ -248,7 +248,7 @@ void BgIceObjects_Stuck(BgIceObjects* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ void BgJyaBlock_Update(Actor* thisx, GlobalContext* globalCtx)
|
|||
BgJyaBlock* pthis = (BgJyaBlock*)thisx;
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ void BgJyaCobra_Update(Actor* thisx, GlobalContext* globalCtx);
|
|||
void BgJyaCobra_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
void func_80896918(BgJyaCobra* pthis, GlobalContext* globalCtx);
|
||||
void func_80896950(BgJyaCobra* pthis, GlobalContext* globalCtx);
|
||||
void BgJyaCobra_ActionIdle(BgJyaCobra* pthis, GlobalContext* globalCtx);
|
||||
void func_808969F8(BgJyaCobra* pthis, GlobalContext* globalCtx);
|
||||
void func_80896ABC(BgJyaCobra* pthis, GlobalContext* globalCtx);
|
||||
void BgJyaCobra_ActionRotate(BgJyaCobra* pthis, GlobalContext* globalCtx);
|
||||
|
||||
#include "overlays/ovl_Bg_Jya_Cobra/ovl_Bg_Jya_Cobra.cpp"
|
||||
#include "def/code_80043480.h"
|
||||
|
@ -462,12 +462,12 @@ void BgJyaCobra_Destroy(Actor* thisx, GlobalContext* globalCtx)
|
|||
|
||||
void func_80896918(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
||||
{
|
||||
pthis->actionFunc = func_80896950;
|
||||
pthis->actionFunc = BgJyaCobra_ActionIdle;
|
||||
pthis->unk_168 = 0;
|
||||
pthis->dyna.actor.shape.rot.y = pthis->dyna.actor.world.rot.y = (pthis->unk_16C * 0x2000) + pthis->dyna.actor.home.rot.y;
|
||||
}
|
||||
|
||||
void func_80896950(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
||||
void BgJyaCobra_ActionIdle(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
||||
{
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
|
@ -487,7 +487,7 @@ void func_80896950(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
|||
if(fabsf(pthis->dyna.unk_150) > 0.001f)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -497,7 +497,7 @@ void func_808969F8(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
|||
s32 phi_a3;
|
||||
s16 temp2;
|
||||
|
||||
pthis->actionFunc = func_80896ABC;
|
||||
pthis->actionFunc = BgJyaCobra_ActionRotate;
|
||||
|
||||
temp2 = pthis->dyna.actor.yawTowardsPlayer - pthis->dyna.actor.shape.rot.y;
|
||||
phi_a3 = (s16)(pthis->dyna.actor.shape.rot.y - pthis->dyna.unk_158);
|
||||
|
@ -519,7 +519,7 @@ void func_808969F8(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
|||
pthis->unk_172 = true;
|
||||
}
|
||||
|
||||
void func_80896ABC(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
||||
void BgJyaCobra_ActionRotate(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
||||
{
|
||||
s16 temp_v0;
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
@ -537,7 +537,7 @@ void func_80896ABC(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
|||
if(Math_ScaledStepToS(&pthis->unk_170, pthis->unk_16A * 0x2000, pthis->unk_16E))
|
||||
{
|
||||
pthis->unk_16C = (pthis->unk_16C + pthis->unk_16A) & 7;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
func_80896918(pthis, globalCtx);
|
||||
}
|
||||
|
@ -546,7 +546,7 @@ void func_80896ABC(BgJyaCobra* pthis, GlobalContext* globalCtx)
|
|||
pthis->dyna.actor.shape.rot.y = pthis->dyna.actor.world.rot.y = (pthis->unk_16C * 0x2000) + pthis->dyna.actor.home.rot.y + pthis->unk_170;
|
||||
}
|
||||
|
||||
if(player->stateFlags2 & PLAYER_STATE2_4)
|
||||
if(player->stateFlags2 & PLAYER_STATE2_4_JYA_COBRA_TURNING)
|
||||
{
|
||||
if(pthis->unk_172)
|
||||
{
|
||||
|
|
|
@ -13,7 +13,7 @@ struct BgJyaZurerukabe
|
|||
/* 0x0000 */ DynaPolyActor dyna;
|
||||
/* 0x0164 */ BgJyaZurerukabeActionFunc actionFunc;
|
||||
/* 0x0168 */ s16 unk_168;
|
||||
/* 0x016A */ s16 unk_16A;
|
||||
/* 0x016A */ TimerS16 unk_16A;
|
||||
/* 0x016C */ s16 unk_16C;
|
||||
/* 0x016E */ s16 unk_16E;
|
||||
};
|
||||
|
|
|
@ -129,7 +129,7 @@ void BgMoriKaitenkabe_Wait(BgMoriKaitenkabe* pthis, GlobalContext* globalCtx)
|
|||
if(fabsf(pthis->dyna.unk_150) > 0.001f)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,11 +153,11 @@ void BgMoriKaitenkabe_Rotate(BgMoriKaitenkabe* pthis, GlobalContext* globalCtx)
|
|||
func_8002DF54(globalCtx, thisx, 7);
|
||||
if(pthis->rotDirection > 0.0f)
|
||||
{
|
||||
thisx->home.rot.y += 0x2000;
|
||||
thisx->home.rot.y = thisx->home.rot.y + 0x2000;
|
||||
}
|
||||
else
|
||||
{
|
||||
thisx->home.rot.y -= 0x2000;
|
||||
thisx->home.rot.y = thisx->home.rot.y - 0x2000;
|
||||
}
|
||||
thisx->world.rot.y = thisx->shape.rot.y = thisx->home.rot.y;
|
||||
Common_PlaySfx2(NA_SE_EV_STONEDOOR_STOP);
|
||||
|
@ -171,7 +171,7 @@ void BgMoriKaitenkabe_Rotate(BgMoriKaitenkabe* pthis, GlobalContext* globalCtx)
|
|||
if(fabsf(pthis->dyna.unk_150) > 0.001f)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
Math_Vec3f_Copy(&player->actor.world.pos, &pthis->lockedPlayerPos);
|
||||
}
|
||||
|
|
|
@ -441,7 +441,7 @@ void BgPoEvent_BlockIdle(BgPoEvent* pthis, GlobalContext* globalCtx)
|
|||
{
|
||||
if((gSaveContext.timer1Value == 0) && (sBlocksAtRest == 5))
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
sPuzzleState = 0x10;
|
||||
sBlocksAtRest = 0;
|
||||
}
|
||||
|
@ -468,13 +468,13 @@ void BgPoEvent_BlockIdle(BgPoEvent* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
else
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
DECR(pthis->direction);
|
||||
}
|
||||
|
@ -500,7 +500,7 @@ void BgPoEvent_BlockPush(BgPoEvent* pthis, GlobalContext* globalCtx)
|
|||
pthis->dyna.actor.world.pos.z = (Math_CosS(pthis->dyna.unk_158) * displacement) + pthis->dyna.actor.home.pos.z;
|
||||
if(blockStop)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
if((pthis->dyna.unk_150 > 0.0f) && (func_800435D8(globalCtx, &pthis->dyna, 0x1E, 0x32, -0x14) == 0))
|
||||
{
|
||||
Audio_PlayActorSound2(&pthis->dyna.actor, NA_SE_EV_BLOCK_BOUND);
|
||||
|
@ -529,7 +529,7 @@ void BgPoEvent_BlockReset(BgPoEvent* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
if(Math_StepToF(&pthis->dyna.actor.world.pos.y, 493.0f, 1.0f) && Math_ScaledStepToS(&pthis->dyna.actor.shape.rot.z, pthis->dyna.actor.world.rot.z - 0x4000, 0x400))
|
||||
|
@ -551,7 +551,7 @@ void BgPoEvent_BlockSolved(BgPoEvent* pthis, GlobalContext* globalCtx)
|
|||
|
||||
if(pthis->dyna.unk_150 != 0.0f)
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
if(Math_StepToF(&pthis->dyna.actor.world.pos.y, 369.0f, 2.0f))
|
||||
{
|
||||
|
|
|
@ -271,13 +271,13 @@ void func_808B40AC(BgSpot15Rrbox* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
else
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
}
|
||||
|
@ -312,7 +312,7 @@ void func_808B4194(BgSpot15Rrbox* pthis, GlobalContext* globalCtx)
|
|||
{
|
||||
actor->home.pos.x = actor->world.pos.x;
|
||||
actor->home.pos.z = actor->world.pos.z;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
pthis->unk_178 = 0.0f;
|
||||
pthis->unk_174 = 0.0f;
|
||||
|
@ -331,7 +331,7 @@ void func_808B4194(BgSpot15Rrbox* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
actor->home.pos.x = actor->world.pos.x;
|
||||
actor->home.pos.z = actor->world.pos.z;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
pthis->unk_178 = 0.0f;
|
||||
pthis->unk_174 = 0.0f;
|
||||
|
@ -360,7 +360,7 @@ void func_808B43D0(BgSpot15Rrbox* pthis, GlobalContext* globalCtx)
|
|||
if(fabsf(pthis->dyna.unk_150) > 0.001f)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
|
||||
Actor_MoveForward(actor);
|
||||
|
@ -394,7 +394,7 @@ void func_808B44CC(BgSpot15Rrbox* pthis, GlobalContext* globalCtx)
|
|||
{
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
}
|
||||
|
||||
|
|
|
@ -240,7 +240,7 @@ void func_808B8E20(BgSpot18Obj* pthis, GlobalContext* globalCtx)
|
|||
if(fabsf(pthis->dyna.unk_150) > 0.001f)
|
||||
{
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -291,7 +291,7 @@ void func_808B8F08(BgSpot18Obj* pthis, GlobalContext* globalCtx)
|
|||
pthis->dyna.actor.world.pos.x = (Math_SinS(pthis->dyna.actor.world.rot.y) * 80.0f) + pthis->dyna.actor.home.pos.x;
|
||||
pthis->dyna.actor.world.pos.z = (Math_CosS(pthis->dyna.actor.world.rot.y) * 80.0f) + pthis->dyna.actor.home.pos.z;
|
||||
pthis->dyna.unk_150 = 0.0f;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4;
|
||||
player->stateFlags2 &= ~PLAYER_STATE2_4_JYA_COBRA_TURNING;
|
||||
Flags_SetSwitch(globalCtx, (pthis->dyna.actor.params >> 8) & 0x3F);
|
||||
Common_PlaySfx(NA_SE_SY_CORRECT_CHIME);
|
||||
Audio_PlayActorSound2(&pthis->dyna.actor, NA_SE_EV_BLOCK_BOUND);
|
||||
|
|
|
@ -2196,7 +2196,7 @@ void BossVa_ZapperAttack(BossVa* pthis, GlobalContext* globalCtx)
|
|||
sp88 += ABS(tmp17);
|
||||
|
||||
pthis->skelAnime.playSpeed = 0.0f;
|
||||
if(Math_SmoothStepToF(&pthis->skelAnime.curFrame, 0.0f, 1.0f, 2.0f, 0.0f) == 0.0f)
|
||||
if(Math_SmoothStepToF(pthis->skelAnime.curFrame.ptr(), 0.0f, 1.0f, 2.0f, 0.0f) == 0.0f)
|
||||
{
|
||||
if(sp88 < sp90)
|
||||
{
|
||||
|
@ -2502,7 +2502,7 @@ void BossVa_ZapperEnraged(BossVa* pthis, GlobalContext* globalCtx)
|
|||
sp60 += ABS(tmp16);
|
||||
|
||||
pthis->skelAnime.playSpeed = 0.0f;
|
||||
if((Math_SmoothStepToF(&pthis->skelAnime.curFrame, 0.0f, 1.0f, 3.0f, 0.0f) == 0.0f) && (sp60 < 0x258))
|
||||
if((Math_SmoothStepToF(pthis->skelAnime.curFrame.ptr(), 0.0f, 1.0f, 3.0f, 0.0f) == 0.0f) && (sp60 < 0x258))
|
||||
{
|
||||
pthis->timer2 = 0;
|
||||
pthis->burst++;
|
||||
|
|
|
@ -224,11 +224,11 @@ void ElfMsg_Draw(Actor* thisx, GlobalContext* globalCtx)
|
|||
|
||||
if(thisx->params & 0x4000)
|
||||
{
|
||||
gSPDisplayList(POLY_XLU_DISP++, sCubeDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sElfMsgCubeDL);
|
||||
}
|
||||
else
|
||||
{
|
||||
gSPDisplayList(POLY_XLU_DISP++, sCylinderDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sElfMsgCylinderDL);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->gfxCtx, "../z_elf_msg.c", 457);
|
||||
|
|
|
@ -193,7 +193,7 @@ void ElfMsg2_Draw(Actor* thisx, GlobalContext* globalCtx)
|
|||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 100, 100, 255, R_NAVI_MSG_REGION_ALPHA);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_elf_msg2.c", 362), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, D_809ADC38);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sCubeDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sElfMsg2CubeDL);
|
||||
|
||||
CLOSE_DISPS(globalCtx->gfxCtx, "../z_elf_msg2.c", 367);
|
||||
#endif
|
||||
|
|
|
@ -789,7 +789,7 @@ void EnAm_Statue(EnAm* pthis, GlobalContext* globalCtx)
|
|||
((pthis->hurtCollider.base.ocFlags1 & OC1_HIT) && (ABS(moveDir) <= 0x2000)))
|
||||
{
|
||||
pthis->unk_258 = 0;
|
||||
player->stateFlags2 &= ~(PLAYER_STATE2_0 | PLAYER_STATE2_4 | PLAYER_STATE2_REDIRECT_CONTROL | PLAYER_STATE2_8);
|
||||
player->stateFlags2 &= ~(PLAYER_STATE2_0 | PLAYER_STATE2_4_JYA_COBRA_TURNING | PLAYER_STATE2_REDIRECT_CONTROL | PLAYER_STATE2_8);
|
||||
player->actor.speedXZ = 0.0f;
|
||||
pthis->dyna.unk_150 = pthis->dyna.unk_154 = 0.0f;
|
||||
}
|
||||
|
|
|
@ -29,8 +29,8 @@ struct EnBa
|
|||
/* 0x02FC */ Vec3f unk2FC;
|
||||
/* 0x0308 */ Vec3f unk308;
|
||||
/* 0x0314 */ f32 unk314;
|
||||
/* 0x0318 */ s16 unk318;
|
||||
/* 0x031A */ s16 unk31A;
|
||||
/* 0x0318 */ TimerS16 unk318;
|
||||
/* 0x031A */ TimerS16 unk31A;
|
||||
/* 0x031C */ s16 unk31C;
|
||||
/* 0x0320 */ ColliderJntSph collider;
|
||||
/* 0x0340 */ ColliderJntSphElement colliderItems[2];
|
||||
|
|
|
@ -550,6 +550,7 @@ void EnBb_Damage(EnBb* pthis, GlobalContext* globalCtx)
|
|||
{
|
||||
Math_SmoothStepToF(&pthis->actor.speedXZ, 0.0f, 1.0f, 0.5f, 0.0f);
|
||||
if(Round(pthis->actor.speedXZ) == 0.0f)
|
||||
|
||||
{
|
||||
pthis->actor.shape.yOffset = 200.0f;
|
||||
EnBb_SetupDown(pthis);
|
||||
|
|
|
@ -195,7 +195,7 @@ void EnBx_Update(Actor* thisx, GlobalContext* globalCtx)
|
|||
pthis->unk_14C--;
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
if(!((pthis->unk_14C + (i << 1)) % 4))
|
||||
if(!((pthis->unk_14C.whole() + (i << 1)) % 4))
|
||||
{
|
||||
Vec3f pos;
|
||||
s16 yaw;
|
||||
|
|
|
@ -9,8 +9,8 @@ struct EnBx;
|
|||
struct EnBx
|
||||
{
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x014C */ s16 unk_14C;
|
||||
/* 0x014E */ s16 unk_14E;
|
||||
/* 0x014C */ TimerS16 unk_14C;
|
||||
/* 0x014E */ TimerS16 unk_14E;
|
||||
/* 0x0150 */ char unk_150[0x4];
|
||||
/* 0x0154 */ Vec3f unk_154[4];
|
||||
/* 0x0184 */ Vec3f unk_184[4];
|
||||
|
|
|
@ -282,7 +282,7 @@ void EnDekunuts_Wait(EnDekunuts* pthis, GlobalContext* globalCtx)
|
|||
Audio_PlayActorSound2(&pthis->actor, NA_SE_EN_NUTS_UP);
|
||||
}
|
||||
|
||||
pthis->collider.dim.height = ((CLAMP(pthis->skelAnime.curFrame, 9.0f, 12.0f) - 9.0f) * 9.0f) + 5.0f;
|
||||
pthis->collider.dim.height = ((CLAMP((float)pthis->skelAnime.curFrame, 9.0f, 12.0f) - 9.0f) * 9.0f) + 5.0f;
|
||||
if(!hasSlowPlaybackSpeed && (pthis->actor.xzDistToPlayer < 120.0f))
|
||||
{
|
||||
EnDekunuts_SetupBurrow(pthis);
|
||||
|
@ -386,7 +386,7 @@ void EnDekunuts_Burrow(EnDekunuts* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
else
|
||||
{
|
||||
pthis->collider.dim.height = ((3.0f - CLAMP(pthis->skelAnime.curFrame, 1.0f, 3.0f)) * 12.0f) + 5.0f;
|
||||
pthis->collider.dim.height = ((3.0f - CLAMP((float)pthis->skelAnime.curFrame, 1.0f, 3.0f)) * 12.0f) + 5.0f;
|
||||
}
|
||||
if(Animation_OnFrame(&pthis->skelAnime, 4.0f))
|
||||
{
|
||||
|
|
|
@ -268,7 +268,7 @@ void EnHintnuts_Wait(EnHintnuts* pthis, GlobalContext* globalCtx)
|
|||
Audio_PlayActorSound2(&pthis->actor, NA_SE_EN_NUTS_UP);
|
||||
}
|
||||
|
||||
pthis->collider.dim.height = 5.0f + ((CLAMP(pthis->skelAnime.curFrame, 9.0f, 12.0f) - 9.0f) * 9.0f);
|
||||
pthis->collider.dim.height = 5.0f + ((CLAMP((float)pthis->skelAnime.curFrame, 9.0f, 12.0f) - 9.0f) * 9.0f);
|
||||
if(!hasSlowPlaybackSpeed && (pthis->actor.xzDistToPlayer < 120.0f))
|
||||
{
|
||||
EnHintnuts_SetupBurrow(pthis);
|
||||
|
@ -361,7 +361,7 @@ void EnHintnuts_Burrow(EnHintnuts* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
else
|
||||
{
|
||||
pthis->collider.dim.height = 5.0f + ((3.0f - CLAMP(pthis->skelAnime.curFrame, 1.0f, 3.0f)) * 12.0f);
|
||||
pthis->collider.dim.height = 5.0f + ((3.0f - CLAMP((float)pthis->skelAnime.curFrame, 1.0f, 3.0f)) * 12.0f);
|
||||
}
|
||||
if(Animation_OnFrame(&pthis->skelAnime, 4.0f))
|
||||
{
|
||||
|
|
|
@ -77,6 +77,40 @@ void EnHorse_CutsceneUpdate(EnHorse* pthis, GlobalContext* globalCtx);
|
|||
void EnHorse_UpdateHorsebackArchery(EnHorse* pthis, GlobalContext* globalCtx);
|
||||
void EnHorse_FleePlayer(EnHorse* pthis, GlobalContext* globalCtx);
|
||||
|
||||
int operator|(Hoof lhs, Hoof rhs)
|
||||
{
|
||||
return static_cast<std::underlying_type<Hoof>::type>(lhs) | static_cast<std::underlying_type<Hoof>::type>(rhs);
|
||||
}
|
||||
|
||||
int operator&(Hoof lhs, Hoof rhs)
|
||||
{
|
||||
return static_cast<std::underlying_type<Hoof>::type>(lhs) & static_cast<std::underlying_type<Hoof>::type>(rhs);
|
||||
}
|
||||
|
||||
Hoof& operator|=(Hoof& lhs, const Hoof rhs)
|
||||
{
|
||||
lhs = static_cast<Hoof>(static_cast<std::underlying_type<Hoof>::type>(lhs) | static_cast<std::underlying_type<Hoof>::type>(rhs));
|
||||
return lhs;
|
||||
}
|
||||
|
||||
Hoof& operator|=(Hoof& lhs, const int rhs)
|
||||
{
|
||||
lhs = static_cast<Hoof>(static_cast<std::underlying_type<Hoof>::type>(lhs) | static_cast<std::underlying_type<Hoof>::type>(rhs));
|
||||
return lhs;
|
||||
}
|
||||
|
||||
Hoof& operator&=(Hoof& lhs, const Hoof rhs)
|
||||
{
|
||||
lhs = static_cast<Hoof>(static_cast<std::underlying_type<Hoof>::type>(lhs) & static_cast<std::underlying_type<Hoof>::type>(rhs));
|
||||
return lhs;
|
||||
}
|
||||
|
||||
Hoof& operator&=(Hoof& lhs, const int rhs)
|
||||
{
|
||||
lhs = static_cast<Hoof>(static_cast<std::underlying_type<Hoof>::type>(lhs) & static_cast<std::underlying_type<Hoof>::type>(rhs));
|
||||
return lhs;
|
||||
}
|
||||
|
||||
static AnimationHeader* sEponaAnimHeaders[] = {
|
||||
&gEponaIdleAnim, &gEponaWhinnyAnim, &gEponaRefuseAnim, &gEponaRearingAnim, &gEponaWalkingAnim, &gEponaTrottingAnim, &gEponaGallopingAnim, &gEponaJumpingAnim, &gEponaJumpingHighAnim,
|
||||
};
|
||||
|
@ -545,11 +579,11 @@ void EnHorse_UpdateIngoRaceInfo(EnHorse* pthis, GlobalContext* globalCtx, RaceIn
|
|||
{
|
||||
if(Math_SinS(pthis->actor.yawTowardsPlayer - pthis->actor.world.rot.y) > 0.0f)
|
||||
{
|
||||
pthis->actor.world.rot.y = pthis->actor.world.rot.y - 280;
|
||||
pthis->actor.world.rot.y -= 280;
|
||||
}
|
||||
else
|
||||
{
|
||||
pthis->actor.world.rot.y = pthis->actor.world.rot.y + 280;
|
||||
pthis->actor.world.rot.y += 280;
|
||||
}
|
||||
}
|
||||
else if(playerDist < 300.0f)
|
||||
|
@ -742,9 +776,9 @@ void EnHorse_ResetHorsebackArchery(EnHorse* pthis, GlobalContext* globalCtx)
|
|||
pthis->hbaFlags = 0;
|
||||
}
|
||||
|
||||
void EnHorse_ClearDustFlags(u16* dustFlags)
|
||||
void EnHorse_ClearDustFlags(Hoof* dustFlags)
|
||||
{
|
||||
*dustFlags = 0;
|
||||
*dustFlags = Hoof::HOOF_NONE;
|
||||
}
|
||||
|
||||
void EnHorse_Init(Actor* thisx, GlobalContext* globalCtx2)
|
||||
|
@ -4235,24 +4269,24 @@ void EnHorse_Update(Actor* thisx, GlobalContext* globalCtx2)
|
|||
|
||||
if(gSaveContext.entranceIndex != 343 || gSaveContext.sceneSetupIndex != 9)
|
||||
{
|
||||
if(pthis->dustFlags & 1)
|
||||
if(pthis->dustFlags & Hoof::FRONT_RIGHT)
|
||||
{
|
||||
pthis->dustFlags &= ~1;
|
||||
pthis->dustFlags &= ~Hoof::FRONT_RIGHT;
|
||||
func_800287AC(globalCtx, &pthis->frontRightHoof, &dustVel, &dustAcc, EnHorse_RandInt(100) + 200, EnHorse_RandInt(10) + 30, EnHorse_RandInt(20) + 30);
|
||||
}
|
||||
else if(pthis->dustFlags & 2)
|
||||
else if(pthis->dustFlags & Hoof::FRONT_LEFT)
|
||||
{
|
||||
pthis->dustFlags &= ~2;
|
||||
pthis->dustFlags &= ~Hoof::FRONT_LEFT;
|
||||
func_800287AC(globalCtx, &pthis->frontLeftHoof, &dustVel, &dustAcc, EnHorse_RandInt(100) + 200, EnHorse_RandInt(10) + 30, EnHorse_RandInt(20) + 30);
|
||||
}
|
||||
else if(pthis->dustFlags & 4)
|
||||
else if(pthis->dustFlags & Hoof::REAR_RIGHT)
|
||||
{
|
||||
pthis->dustFlags &= ~4;
|
||||
pthis->dustFlags &= ~Hoof::REAR_RIGHT;
|
||||
func_800287AC(globalCtx, &pthis->backRightHoof, &dustVel, &dustAcc, EnHorse_RandInt(100) + 200, EnHorse_RandInt(10) + 30, EnHorse_RandInt(20) + 30);
|
||||
}
|
||||
else if(pthis->dustFlags & 8)
|
||||
else if(pthis->dustFlags & Hoof::REAR_LEFT)
|
||||
{
|
||||
pthis->dustFlags &= ~8;
|
||||
pthis->dustFlags &= ~Hoof::REAR_LEFT;
|
||||
func_800287AC(globalCtx, &pthis->backLeftHoof, &dustVel, &dustAcc, EnHorse_RandInt(100) + 200, EnHorse_RandInt(10) + 30, EnHorse_RandInt(20) + 30);
|
||||
}
|
||||
}
|
||||
|
@ -4360,7 +4394,7 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if(Rand_ZeroOne() < 0.6f)
|
||||
{
|
||||
pthis->dustFlags |= 1;
|
||||
pthis->dustFlags |= Hoof::FRONT_RIGHT;
|
||||
func_800A6408(skin, 28, &hoofOffset, &pthis->frontRightHoof);
|
||||
pthis->frontRightHoof.y = pthis->frontRightHoof.y - 5.0f;
|
||||
}
|
||||
|
@ -4373,13 +4407,13 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if(Rand_ZeroOne() < 0.7f)
|
||||
{
|
||||
pthis->dustFlags |= 2;
|
||||
pthis->dustFlags |= Hoof::FRONT_LEFT;
|
||||
func_800A6408(skin, 20, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->frontLeftHoof);
|
||||
}
|
||||
if(Rand_ZeroOne() < 0.7f)
|
||||
{
|
||||
pthis->dustFlags |= 1;
|
||||
pthis->dustFlags |= Hoof::FRONT_RIGHT;
|
||||
func_800A6408(skin, 28, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->frontRightHoof);
|
||||
}
|
||||
|
@ -4389,7 +4423,7 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if(Rand_ZeroOne() < 0.7f)
|
||||
{
|
||||
pthis->dustFlags |= 8;
|
||||
pthis->dustFlags |= Hoof::REAR_LEFT;
|
||||
func_800A6408(skin, 37, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backLeftHoof);
|
||||
}
|
||||
|
@ -4399,7 +4433,7 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if(Rand_ZeroOne() < 0.7f)
|
||||
{
|
||||
pthis->dustFlags |= 4;
|
||||
pthis->dustFlags |= Hoof::REAR_RIGHT;
|
||||
func_800A6408(skin, 45, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backRightHoof);
|
||||
}
|
||||
|
@ -4409,25 +4443,25 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if((frame > 14.0f) && (frame < 16.0f))
|
||||
{
|
||||
pthis->dustFlags |= 1;
|
||||
pthis->dustFlags |= Hoof::FRONT_RIGHT;
|
||||
func_800A6408(skin, 28, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 5.0f, &pthis->frontRightHoof);
|
||||
}
|
||||
else if(frame > 8.0f && frame < 10.0f)
|
||||
{
|
||||
pthis->dustFlags |= 2;
|
||||
pthis->dustFlags |= Hoof::FRONT_LEFT;
|
||||
func_800A6408(skin, 20, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->frontLeftHoof);
|
||||
}
|
||||
else if(frame > 1.0f && frame < 3.0f)
|
||||
{
|
||||
pthis->dustFlags |= 4;
|
||||
pthis->dustFlags |= Hoof::REAR_RIGHT;
|
||||
func_800A6408(skin, 45, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backRightHoof);
|
||||
}
|
||||
else if((frame > 26.0f) && (frame < 28.0f))
|
||||
{
|
||||
pthis->dustFlags |= 8;
|
||||
pthis->dustFlags |= Hoof::REAR_LEFT;
|
||||
func_800A6408(skin, 37, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backLeftHoof);
|
||||
}
|
||||
|
@ -4436,13 +4470,13 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if(Rand_ZeroOne() < 0.5f)
|
||||
{
|
||||
pthis->dustFlags |= 8;
|
||||
pthis->dustFlags |= Hoof::REAR_LEFT;
|
||||
func_800A6408(skin, 37, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backLeftHoof);
|
||||
}
|
||||
if(Rand_ZeroOne() < 0.5f)
|
||||
{
|
||||
pthis->dustFlags |= 4;
|
||||
pthis->dustFlags |= Hoof::REAR_RIGHT;
|
||||
func_800A6408(skin, 45, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backRightHoof);
|
||||
}
|
||||
|
@ -4451,13 +4485,13 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if(Rand_ZeroOne() < 0.5f)
|
||||
{
|
||||
pthis->dustFlags |= 8;
|
||||
pthis->dustFlags |= Hoof::REAR_LEFT;
|
||||
func_800A6408(skin, 37, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backLeftHoof);
|
||||
}
|
||||
if(Rand_ZeroOne() < 0.5f)
|
||||
{
|
||||
pthis->dustFlags |= 4;
|
||||
pthis->dustFlags |= Hoof::REAR_RIGHT;
|
||||
func_800A6408(skin, 45, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backRightHoof);
|
||||
}
|
||||
|
@ -4466,13 +4500,13 @@ void EnHorse_SkinCallback1(Actor* thisx, GlobalContext* globalCtx, PSkinAwb* ski
|
|||
{
|
||||
if(Rand_ZeroOne() < 0.5f)
|
||||
{
|
||||
pthis->dustFlags |= 8;
|
||||
pthis->dustFlags |= Hoof::REAR_LEFT;
|
||||
func_800A6408(skin, 37, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backLeftHoof);
|
||||
}
|
||||
else
|
||||
{
|
||||
pthis->dustFlags |= 4;
|
||||
pthis->dustFlags |= Hoof::REAR_RIGHT;
|
||||
func_800A6408(skin, 45, &hoofOffset, &sp70);
|
||||
EnHorse_RandomOffset(&sp70, 10.0f, &pthis->backRightHoof);
|
||||
}
|
||||
|
|
|
@ -6,6 +6,15 @@
|
|||
#include "z64actor.h"
|
||||
#include "z64math.h"
|
||||
|
||||
enum Hoof : u16
|
||||
{
|
||||
HOOF_NONE = 0,
|
||||
FRONT_RIGHT = 1,
|
||||
FRONT_LEFT = 2,
|
||||
REAR_RIGHT = 4,
|
||||
REAR_LEFT = 8
|
||||
};
|
||||
|
||||
enum EnHorseAction
|
||||
{
|
||||
/* 0 */ ENHORSE_ACT_FROZEN,
|
||||
|
@ -162,7 +171,7 @@ struct EnHorse
|
|||
/* 0x0228 */ Vec3f unk_228;
|
||||
/* 0x0234 */ s32 unk_234;
|
||||
/* 0x0238 */ u8 numBoosts;
|
||||
/* 0x023C */ s32 boostRegenTime;
|
||||
/* 0x023C */ TimerS32 boostRegenTime;
|
||||
/* 0x0240 */ TimerS32 boostTimer;
|
||||
/* 0x0244 */ EnHorsePostdrawFunc postDrawFunc;
|
||||
/* 0x0248 */ f32 yFront; // The y coordinate of the floor under the front feet
|
||||
|
@ -205,7 +214,7 @@ struct EnHorse
|
|||
/* 0x03C4 */ s16 bridgeJumpRelAngle;
|
||||
/* 0x03C6 */ s16 unk_3C6; // pad
|
||||
// sub struct?
|
||||
/* 0x03C8 */ u16 dustFlags;
|
||||
/* 0x03C8 */ Hoof dustFlags;
|
||||
/* 0x03CC */ Vec3f frontRightHoof;
|
||||
/* 0x03D8 */ Vec3f frontLeftHoof;
|
||||
/* 0x03E4 */ Vec3f backRightHoof;
|
||||
|
|
|
@ -29,7 +29,7 @@ void EnIn_Update(Actor* thisx, GlobalContext* globalCtx);
|
|||
void EnIn_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
void func_80A79FB0(EnIn* pthis, GlobalContext* globalCtx);
|
||||
void func_80A7A304(EnIn* pthis, GlobalContext* globalCtx);
|
||||
void EnIn_Action_HorseRace(EnIn* pthis, GlobalContext* globalCtx);
|
||||
void func_80A7A4C8(EnIn* pthis, GlobalContext* globalCtx);
|
||||
void func_80A7A568(EnIn* pthis, GlobalContext* globalCtx);
|
||||
void func_80A7A848(EnIn* pthis, GlobalContext* globalCtx);
|
||||
|
@ -430,7 +430,7 @@ s32 func_80A7975C(EnIn* pthis, GlobalContext* globalCtx)
|
|||
pthis->animationIdx = 1;
|
||||
pthis->collider.base.ocFlags1 &= ~OC1_ON;
|
||||
Animation_Change(&pthis->skelAnime, D_80A7B918[pthis->animationIdx], 1.0f, 0.0f, Animation_GetLastFrame(D_80A7B918[pthis->animationIdx]), 2, 0.0f);
|
||||
pthis->actionFunc = func_80A7A304;
|
||||
pthis->actionFunc = EnIn_Action_HorseRace;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -717,7 +717,7 @@ void func_80A79FB0(EnIn* pthis, GlobalContext* globalCtx)
|
|||
}
|
||||
}
|
||||
|
||||
void func_80A7A304(EnIn* pthis, GlobalContext* globalCtx)
|
||||
void EnIn_Action_HorseRace(EnIn* pthis, GlobalContext* globalCtx)
|
||||
{
|
||||
if(pthis->skelAnime.animation == &object_in_Anim_015814 || pthis->skelAnime.animation == &object_in_Anim_01646C)
|
||||
{
|
||||
|
@ -1084,7 +1084,7 @@ void EnIn_Update(Actor* thisx, GlobalContext* globalCtx)
|
|||
collider = &pthis->collider;
|
||||
Collider_UpdateCylinder(&pthis->actor, collider);
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &collider->base);
|
||||
if(pthis->actionFunc != func_80A7A304)
|
||||
if(pthis->actionFunc != EnIn_Action_HorseRace)
|
||||
{
|
||||
SkelAnime_Update(&pthis->skelAnime);
|
||||
if(pthis->skelAnime.animation == &object_in_Anim_001BE0 && ((gSaveContext.eventInf[0] & 0xF) != 6))
|
||||
|
@ -1095,7 +1095,7 @@ void EnIn_Update(Actor* thisx, GlobalContext* globalCtx)
|
|||
}
|
||||
EnIn_UpdateEyes(pthis);
|
||||
pthis->actionFunc(pthis, globalCtx);
|
||||
if(pthis->actionFunc != func_80A7A304)
|
||||
if(pthis->actionFunc != EnIn_Action_HorseRace)
|
||||
{
|
||||
func_80A79AB4(pthis, globalCtx);
|
||||
if(gSaveContext.timer2Value < 6 && gSaveContext.timer2State != 0 && pthis->unk_308.unk_00 == 0)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue