Compare commits

...

26 Commits

Author SHA1 Message Date
Blake Warner 7099313e99 force 20fps in the crawl tunnel 2022-05-15 20:25:03 -04:00
Blake Warner c005911242 fixed 60fps collision issues #252 #310 #311 2022-05-15 09:56:24 -04:00
Blake Warner 6892cff704 fix 60fps elec spires in jabu 2022-05-15 08:03:53 -04:00
Blake Warner 1351b599f1 fixed spirit temple spinning wall #277 2022-05-14 15:19:00 -04:00
Blake Warner ba4b544b30 fixed bug speeds #300 2022-05-14 14:09:00 -04:00
Blake Warner 384b638fb0 fixed counter overflow error #304 2022-05-14 09:13:18 -04:00
Blake Warner 1f47f792c5 fixed some 60fps issues 2022-05-13 20:58:05 -04:00
metronidazole 0b46da7e5f
Fixes OpenGL context for rendering graphics (#318) 2022-05-13 20:52:34 -04:00
Amaro Martínez 39f85a6e90
Added more json file translations (#317)
* Added json file translations for item pause

* Added json file translations for title static

* Added json file translations for title cards
2022-05-13 20:51:45 -04:00
metronidazole 0056219148
Fixed buffer creation in AudioHeap_Alloc (mixed params in aligned_alloc) (#319) 2022-05-13 20:51:02 -04:00
RyzenDew d967ce1727 Simple correction and added a dep for fedora
sdl2-devel > SDL2-devel
added g++
2022-05-03 23:41:08 -04:00
Blake Warner 0c5b195d1d more linux fixes 2022-05-03 11:44:26 -04:00
metronidazole cef67aa666
Improve linux compilation support (GLideN64) (#315)
* Removed non-existant files from meson.build

* Fixed ifdef for linux compatibility in xcontroller.cpp

* Updated meson to build gliden64

* Fixed function call in z_vismono

* Add json.cpp to meson.build (linux)

* Add AziAudio stub to meson.build

* Update z_vismono.cpp
2022-05-02 10:50:25 -04:00
Pedro Cruz db86f97f41
Updated message_data_pt.h and other tweaks (#313)
* Update icon_item_gameover_static_pt.json

* Update item_name_static_pt.json

* Update place_title_cards_pt.json

* Update message_data_pt.h
2022-05-02 10:15:24 -04:00
RyzenDew b424a9da62
Update readme
Update read me to match the Compile guide in the wiki for a cleaner compile guide!
2022-04-26 00:09:50 -03:00
Blake Warner 8b2c0692db fix ingo horse race turning 2022-04-22 19:38:51 -04:00
Blake Warner 55f33e4404 added full screen width/height option in config.json 2022-04-22 11:59:23 -04:00
Blake Warner 7d12afc985 save 2022-04-22 11:03:31 -04:00
Blake Warner 28e194cfe4 zords pt-BR file 2022-04-22 10:38:18 -04:00
lbsbezerra 1ff3d8d073 more text translated to PT-BR (I stopped by line 160)
added map_name_static_PT-BR.json and updated until line 170 for the translation

translated until line 266

translated everything up until line 338

Updated the translation until line 433. Also fixed some words to match with portuguese sentences.
2022-04-22 10:34:49 -04:00
Blake Warner 18074e0264 fixed weird ingo turning 2022-04-21 21:34:55 -04:00
Blake Warner c32c014254 fix horse timer beep 2022-04-21 20:54:22 -04:00
Blake Warner 9a314e02c5 fix statues in spirit temple 2022-04-21 18:55:03 -04:00
Blake Warner 7305e2fb58 fix moving platform in shadow temple 2022-04-21 16:54:15 -04:00
Blake Warner 951e63758f fix onepoint #291 2022-04-21 13:40:07 -04:00
Blake Warner 0ba9fd2492 fixed link falling light animation #281 2022-04-21 09:16:08 -04:00
129 changed files with 10634 additions and 9560 deletions

@ -1 +1 @@
Subproject commit f495dd420927f0284211f1f98bdacf2a175388e8
Subproject commit a50281d820d6cd1aceff7f5c86a16547cb9f278f

130
README.md
View File

@ -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.

View File

@ -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);

View File

@ -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;
};

View File

@ -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

View File

@ -1,6 +1,6 @@
[
{
"continue_playing": "Continuar a jogar?",
"continue_playing": "Continuar?",
"game_over": "FIM DO JOGO"
}
]

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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í"
}
]

View File

@ -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"
}
]

View File

@ -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",

View File

@ -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

View File

@ -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",

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

@ -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í"
}
]

View File

@ -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"
}
]

View File

@ -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

View File

@ -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;

File diff suppressed because one or more lines are too long

View File

@ -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),

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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);

View File

@ -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);
}

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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,
};

View File

@ -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;

View File

@ -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();

View File

@ -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;

View File

@ -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}},

View File

@ -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;
}

View File

@ -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;

View File

@ -243,6 +243,8 @@ namespace oot::save
}
}
Inventory_ChangeUpgrade(UPG_STRENGTH, 3);
this->entranceIndex = 0xCD;
this->magicLevel = 0;
this->sceneFlags[5].swch = 0x40000000;

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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))

View File

@ -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)
{

View File

@ -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;

View File

@ -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)
{

View File

@ -13,5 +13,5 @@ struct BgHakaMeganeBG
/* 0x0000 */ DynaPolyActor dyna;
/* 0x0164 */ BgHakaMeganeBGActionFunc actionFunc;
/* 0x0168 */ u8 unk_168;
/* 0x016A */ s16 unk_16A;
/* 0x016A */ TimerS16 unk_16A;
};

View File

@ -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)) ||

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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)
{

View File

@ -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;
};

View File

@ -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);
}

View File

@ -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))
{

View File

@ -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;
}

View File

@ -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);

View File

@ -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++;

View File

@ -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);

View File

@ -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

View File

@ -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;
}

View File

@ -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];

View File

@ -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);

View File

@ -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;

View File

@ -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];

View File

@ -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))
{

View File

@ -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))
{

View File

@ -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);
}

View File

@ -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;

View File

@ -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