1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-06 06:10:21 +00:00

Volvagia (ovl_Boss_Fd) and related actors (#352)

* Darkmeiro decompilation

Bg_Gnd_Darkmeiro decompiled, matched, and documented.

* Lots of functions matched. Some big ones are close.

* Five left unmatched, one close.

* Merged data and decompiled the giant function into something readable. Its branch structure has yet to be matched.

* Three unmatched, one essentially matched, the rest matched.

* More fixes.

* Documented more of the structure and cleaned up a bit.

* BossFd2, BgVbSima, and EnVbBall matched and documented

* Also removed unneeded .s files

* And need to name EnVbBall's functions

* give this a shot

* fix conflict

* one more try

* removing darkmeiro changes

* and again

* now OK from make clean

* minor cleanup

* One more matching function for BossFd

* which means it doesn't need its .s

* splitting

* splitting

* splitting

* forgot some .s

* fancy new names

* fancy new names

* trying again

* sneaky .s files

* sound effects and some hex to decimal conversions

* Sound effects and static variable cleanup

* format.sh and clean up static variables

* sfx and formatting

* ZAP and cleanup

* small cleanup

* cleanup and ZAP

* ZAP

* looking at the giant function again

* looking at the giant function again

* Only the big function left.

* Those .s files aren't mine, officer

* float literals might be fixed. regalloc still a nightmare

* almost done with the big function

* should make now

* not much of a change

* all functions match. rodata somehow doesn't.

* forgot some things

* lots of cleanup

* and a little more

* small error

* large cleanup. Also BossFd has function names and inlined variable declarations

* still more cleanup

* the quest for 0.1f continues

* forgot to put NON_MATCHING back in

* Data structures fully documented. Still more cleanup.

* DECR now works with BossFd2

* should match now

* cleanup

* small cleanup

* cleanup and names

* tiny thing

* particles and headers and stuff

* now with more enums

* merge

* test

* end test

* update

* cleanup

* object 2

* object 1

* doc object_fd2

* git subrepo pull --force tools/ZAPD

subrepo:
  subdir:   "tools/ZAPD"
  merged:   "6f874af4a"
upstream:
  origin:   "https://github.com/zeldaret/ZAPD.git"
  branch:   "master"
  commit:   "6f874af4a"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "2f68596"

* formatting

* .s

* merge actor

* vertex arrays

* a little more

* formatting

* merge opd

* fixed damage check

* cleanup

* fixes

* effect struct

* review

Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
Co-authored-by: fig02 <fig02srl@gmail.com>
This commit is contained in:
petrie911 2021-04-17 12:12:46 -05:00 committed by GitHub
parent 7306d13897
commit 7b2b88d552
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
95 changed files with 4290 additions and 11359 deletions

File diff suppressed because it is too large Load diff

View file

@ -6,9 +6,87 @@
struct BossFd2;
typedef void (*BossFd2ActionFunc)(struct BossFd2*, GlobalContext*);
typedef enum {
/* 0 */ FD2_SIGNAL_NONE,
/* 1 */ FD2_SIGNAL_FLY,
/* 2 */ FD2_SIGNAL_DEATH,
/* 100 */ FD2_SIGNAL_GROUND = 100
} BossFd2Signal;
typedef struct {
/* 0x000 */ Vec3f rot[10];
/* 0x078 */ Vec3f pos[10];
/* 0x0F0 */ Vec3f pull[10];
/* 0x168 */ f32 scale[10];
/* 0x190 */ Vec3f head;
} BossFd2Mane; // size = 0x19C
typedef struct {
/* 0x00 */ Vec3f eye;
/* 0x0C */ Vec3f at;
/* 0x18 */ Vec3f pad[2];
/* 0x30 */ Vec3f eyeVel;
/* 0x3C */ Vec3f atVel;
/* 0x48 */ Vec3f nextEye;
/* 0x54 */ Vec3f eyeMaxVel;
/* 0x60 */ Vec3f nextAt;
/* 0x6C */ Vec3f atMaxVel;
/* 0x78 */ f32 speedMod;
/* 0x7C */ f32 accel;
/* 0x80 */ f32 yMod;
/* 0x84 */ f32 shake;
} BossFd2Cam; // size = 0x88
typedef enum {
/* 0 */ FD2_TURN_TO_LINK,
/* 1 */ FD2_ACTION_STATE,
/* 2 */ FD2_UNK_TIMER,
/* 3 */ FD2_VAR_TIMER,
/* 4 */ FD2_UNUSED_4,
/* 5 */ FD2_UNUSED_5,
/* 6 */ FD2_BLINK_TIMER,
/* 7 */ FD2_SCREAM_TIMER,
/* 8 */ FD2_DAMAGE_FLASH_TIMER,
/* 9 */ FD2_HOLE_COUNTER,
/* 10 */ FD2_INVINC_TIMER,
/* 11 */ FD2_FAKEOUT_COUNT,
/* 19 */ FD2_SHORT_COUNT = 19
} BossFd2S16Var;
typedef enum {
/* 0 */ FD2_TEX1_SCROLL_X,
/* 1 */ FD2_TEX1_SCROLL_Y,
/* 2 */ FD2_TEX2_SCROLL_X,
/* 3 */ FD2_TEX2_SCROLL_Y,
/* 10 */ FD2_END_FRAME = 10,
/* 18 */ FD2_FLOAT_COUNT = 18
} BossFd2F32Var;
typedef struct BossFd2 {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x1530];
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ BossFd2ActionFunc actionFunc;
/* 0x0194 */ u8 disableAT;
/* 0x0196 */ s16 work[FD2_SHORT_COUNT];
/* 0x01BC */ s16 timers[5];
/* 0x01C8 */ f32 fwork[FD2_FLOAT_COUNT];
/* 0x0210 */ Vec3f headPos;
/* 0x021C */ Vec3s headRot;
/* 0x0222 */ char unk_222;
/* 0x0223 */ u8 eyeState;
/* 0x0224 */ char unk_224[0xC90]; // despite its size, seems to be unused.
/* 0x0EB4 */ BossFd2Mane centerMane;
/* 0x1050 */ BossFd2Mane rightMane;
/* 0x11EC */ BossFd2Mane leftMane;
/* 0x1388 */ char unk_1388[4];
/* 0x138C */ f32 jawOpening;
/* 0x1390 */ s16 deathState;
/* 0x1392 */ s16 deathCamera;
/* 0x1394 */ BossFd2Cam camData;
/* 0x141C */ ColliderJntSph collider;
/* 0x143C */ ColliderJntSphElement elements[9];
} BossFd2; // size = 0x167C
extern const ActorInit Boss_Fd2_InitVars;

View file

@ -0,0 +1,116 @@
#include "global.h"
static ColliderJntSphElementInit sJntSphElementsInit[9] = {
{
{
ELEMTYPE_UNK3,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_NONE,
BUMP_ON | BUMP_HOOKABLE,
OCELEM_ON,
},
{ 35, { { 6000, 0, 0 }, 21 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 18, { { 4000, 0, 0 }, 13 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 19, { { 3000, 0, 0 }, 13 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 20, { { 4000, 0, 0 }, 15 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 24, { { 4000, 0, 0 }, 13 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 25, { { 3000, 0, 0 }, 13 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 26, { { 3500, 1500, 0 }, 15 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 17, { { 0, 0, 0 }, 26 }, 100 },
},
{
{
ELEMTYPE_UNK2,
{ 0xFFCFFFFF, 0x00, 0x20 },
{ 0xFFCDFFFE, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 30, { { 0, 0, 0 }, 17 }, 100 },
},
};
static ColliderJntSphInit sJntSphInit = {
{
COLTYPE_METAL,
AT_ON | AT_TYPE_ENEMY,
AC_ON | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_PLAYER,
OC2_TYPE_1,
COLSHAPE_JNTSPH,
},
9,
sJntSphElementsInit,
};