1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-02-02 09:34:27 +00:00

ovl_Magic_Dark 3 matching, 4 nonmatching (#310)

* match MagicDark_Init

* update struct fields and add THIS comment thanks to Ethan

* match MagicDark_Destroy

* start on func_80B874E4

* move func_80B874E4 to a comment for now

* match MagicDark_Update (again thanks to Ethan)

* comment out func_80B8772C and use macro for ACTIVE_CAM

* various changes

* implement permuter suggestion

* reorder nayru temps to fix stack

* use LINK_IS_CHILD

* match func_80B874E4 a bit more

* initially store msgMode in temp_t2

* add msgMode temp

* comment out func_80B874E4 because regalloc >:(

* comment out func_80B874E4 again

* add unk_90C to Player

* change unk_14F to an array for more explicit padding

* remove partially completed functions

* remove matched functions from asm

* clang format

* subtract SFX_FLAG

* combine unk_14F and unk_150
This commit is contained in:
Sirius902 2020-08-15 11:12:21 -07:00 committed by GitHub
parent d374d8d026
commit c9729e638d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 74 additions and 228 deletions

View file

@ -1,15 +0,0 @@
glabel MagicDark_Destroy
/* 000E0 80B874B0 3C0E8016 */ lui $t6, %hi(gSaveContext+0x13c8)
/* 000E4 80B874B4 85CEFA28 */ lh $t6, %lo(gSaveContext+0x13c8)($t6)
/* 000E8 80B874B8 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
/* 000EC 80B874BC AFA40018 */ sw $a0, 0x0018($sp)
/* 000F0 80B874C0 00A02025 */ or $a0, $a1, $zero ## $a0 = 00000000
/* 000F4 80B874C4 15C00003 */ bne $t6, $zero, .L80B874D4
/* 000F8 80B874C8 AFBF0014 */ sw $ra, 0x0014($sp)
/* 000FC 80B874CC 0C021DB2 */ jal func_800876C8
/* 00100 80B874D0 00000000 */ nop
.L80B874D4:
/* 00104 80B874D4 8FBF0014 */ lw $ra, 0x0014($sp)
/* 00108 80B874D8 27BD0018 */ addiu $sp, $sp, 0x0018 ## $sp = 00000000
/* 0010C 80B874DC 03E00008 */ jr $ra
/* 00110 80B874E0 00000000 */ nop

View file

@ -1,76 +0,0 @@
.late_rodata
glabel D_80B88BAC
.float 0.4
glabel D_80B88BB0
.float 0.6
glabel D_80B88BB4
.float 1.6
glabel D_80B88BB8
.float 0.8
.text
glabel MagicDark_Init
/* 00000 80B873D0 3C038016 */ lui $v1, %hi(gSaveContext)
/* 00004 80B873D4 2463E660 */ addiu $v1, %lo(gSaveContext)
/* 00008 80B873D8 8C6E0004 */ lw $t6, 0x0004($v1) ## 8015E664
/* 0000C 80B873DC 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
/* 00010 80B873E0 AFBF0014 */ sw $ra, 0x0014($sp)
/* 00014 80B873E4 11C00005 */ beq $t6, $zero, .L80B873FC
/* 00018 80B873E8 8CA21C44 */ lw $v0, 0x1C44($a1) ## 00001C44
/* 0001C 80B873EC 3C0180B9 */ lui $at, %hi(D_80B88BAC) ## $at = 80B90000
/* 00020 80B873F0 C4248BAC */ lwc1 $f4, %lo(D_80B88BAC)($at)
/* 00024 80B873F4 10000004 */ beq $zero, $zero, .L80B87408
/* 00028 80B873F8 E484015C */ swc1 $f4, 0x015C($a0) ## 0000015C
.L80B873FC:
/* 0002C 80B873FC 3C0180B9 */ lui $at, %hi(D_80B88BB0) ## $at = 80B90000
/* 00030 80B87400 C4268BB0 */ lwc1 $f6, %lo(D_80B88BB0)($at)
/* 00034 80B87404 E486015C */ swc1 $f6, 0x015C($a0) ## 0000015C
.L80B87408:
/* 00038 80B87408 8C580024 */ lw $t8, 0x0024($v0) ## 00000024
/* 0003C 80B8740C 24050000 */ addiu $a1, $zero, 0x0000 ## $a1 = 00000000
/* 00040 80B87410 AC980024 */ sw $t8, 0x0024($a0) ## 00000024
/* 00044 80B87414 8C4F0028 */ lw $t7, 0x0028($v0) ## 00000028
/* 00048 80B87418 AC8F0028 */ sw $t7, 0x0028($a0) ## 00000028
/* 0004C 80B8741C 8C58002C */ lw $t8, 0x002C($v0) ## 0000002C
/* 00050 80B87420 AC98002C */ sw $t8, 0x002C($a0) ## 0000002C
/* 00054 80B87424 0C00B58B */ jal Actor_SetScale
/* 00058 80B87428 AFA40018 */ sw $a0, 0x0018($sp)
/* 0005C 80B8742C 8FA40018 */ lw $a0, 0x0018($sp)
/* 00060 80B87430 3C038016 */ lui $v1, %hi(gSaveContext)
/* 00064 80B87434 2419FFFF */ addiu $t9, $zero, 0xFFFF ## $t9 = FFFFFFFF
/* 00068 80B87438 2463E660 */ addiu $v1, %lo(gSaveContext)
/* 0006C 80B8743C A0990003 */ sb $t9, 0x0003($a0) ## 00000003
/* 00070 80B87440 846813C8 */ lh $t0, 0x13C8($v1) ## 8015FA28
/* 00074 80B87444 3C0980B8 */ lui $t1, %hi(func_80B874E4) ## $t1 = 80B80000
/* 00078 80B87448 252974E4 */ addiu $t1, $t1, %lo(func_80B874E4) ## $t1 = 80B874E4
/* 0007C 80B8744C 11000012 */ beq $t0, $zero, .L80B87498
/* 00080 80B87450 3C0A80B8 */ lui $t2, %hi(func_80B87A18) ## $t2 = 80B80000
/* 00084 80B87454 254A7A18 */ addiu $t2, $t2, %lo(func_80B87A18) ## $t2 = 80B87A18
/* 00088 80B87458 AC890130 */ sw $t1, 0x0130($a0) ## 00000130
/* 0008C 80B8745C AC8A0134 */ sw $t2, 0x0134($a0) ## 00000134
/* 00090 80B87460 3C0180B9 */ lui $at, %hi(D_80B88BB4) ## $at = 80B90000
/* 00094 80B87464 C42A8BB4 */ lwc1 $f10, %lo(D_80B88BB4)($at)
/* 00098 80B87468 C488015C */ lwc1 $f8, 0x015C($a0) ## 0000015C
/* 0009C 80B8746C 3C0180B9 */ lui $at, %hi(D_80B88BB8) ## $at = 80B90000
/* 000A0 80B87470 C490015C */ lwc1 $f16, 0x015C($a0) ## 0000015C
/* 000A4 80B87474 460A4002 */ mul.s $f0, $f8, $f10
/* 000A8 80B87478 E4800058 */ swc1 $f0, 0x0058($a0) ## 00000058
/* 000AC 80B8747C E4800050 */ swc1 $f0, 0x0050($a0) ## 00000050
/* 000B0 80B87480 C4328BB8 */ lwc1 $f18, %lo(D_80B88BB8)($at)
/* 000B4 80B87484 A480014C */ sh $zero, 0x014C($a0) ## 0000014C
/* 000B8 80B87488 A080014E */ sb $zero, 0x014E($a0) ## 0000014E
/* 000BC 80B8748C 46128102 */ mul.s $f4, $f16, $f18
/* 000C0 80B87490 10000003 */ beq $zero, $zero, .L80B874A0
/* 000C4 80B87494 E4840054 */ swc1 $f4, 0x0054($a0) ## 00000054
.L80B87498:
/* 000C8 80B87498 A480014C */ sh $zero, 0x014C($a0) ## 0000014C
/* 000CC 80B8749C A46013C8 */ sh $zero, 0x13C8($v1) ## 8015FA28
.L80B874A0:
/* 000D0 80B874A0 8FBF0014 */ lw $ra, 0x0014($sp)
/* 000D4 80B874A4 27BD0018 */ addiu $sp, $sp, 0x0018 ## $sp = 00000000
/* 000D8 80B874A8 03E00008 */ jr $ra
/* 000DC 80B874AC 00000000 */ nop

View file

@ -1,132 +0,0 @@
.late_rodata
glabel D_80B88BD8
.word 0x3CB60B61
glabel D_80B88BDC
.word 0x3DAAAAAA
glabel D_80B88BE0
.word 0x38D1B717
glabel D_80B88BE4
.float 0.9
glabel D_80B88BE8
.float 0.2
glabel D_80B88BEC
.float 1.6
glabel D_80B88BF0
.float 0.8
.text
glabel MagicDark_Update
/* 004A8 80B87878 27BDFFC8 */ addiu $sp, $sp, 0xFFC8 ## $sp = FFFFFFC8
/* 004AC 80B8787C AFBF0024 */ sw $ra, 0x0024($sp)
/* 004B0 80B87880 AFB00020 */ sw $s0, 0x0020($sp)
/* 004B4 80B87884 AFA5003C */ sw $a1, 0x003C($sp)
/* 004B8 80B87888 8CAF1C44 */ lw $t7, 0x1C44($a1) ## 00001C44
/* 004BC 80B8788C 00808025 */ or $s0, $a0, $zero ## $s0 = 00000000
/* 004C0 80B87890 240500C3 */ addiu $a1, $zero, 0x00C3 ## $a1 = 000000C3
/* 004C4 80B87894 0C00BE5D */ jal func_8002F974
/* 004C8 80B87898 AFAF002C */ sw $t7, 0x002C($sp)
/* 004CC 80B8789C 8602014C */ lh $v0, 0x014C($s0) ## 0000014C
/* 004D0 80B878A0 28410023 */ slti $at, $v0, 0x0023
/* 004D4 80B878A4 5020001F */ beql $at, $zero, .L80B87924
/* 004D8 80B878A8 28410037 */ slti $at, $v0, 0x0037
/* 004DC 80B878AC 44822000 */ mtc1 $v0, $f4 ## $f4 = 0.00
/* 004E0 80B878B0 3C0180B9 */ lui $at, %hi(D_80B88BD8) ## $at = 80B90000
/* 004E4 80B878B4 C4288BD8 */ lwc1 $f8, %lo(D_80B88BD8)($at)
/* 004E8 80B878B8 468021A0 */ cvt.s.w $f6, $f4
/* 004EC 80B878BC 8FA4003C */ lw $a0, 0x003C($sp)
/* 004F0 80B878C0 46083282 */ mul.s $f10, $f6, $f8
/* 004F4 80B878C4 44055000 */ mfc1 $a1, $f10
/* 004F8 80B878C8 0C2E1DCB */ jal func_80B8772C
/* 004FC 80B878CC 00000000 */ nop
/* 00500 80B878D0 3C0180B9 */ lui $at, %hi(D_80B88BDC) ## $at = 80B90000
/* 00504 80B878D4 C4328BDC */ lwc1 $f18, %lo(D_80B88BDC)($at)
/* 00508 80B878D8 C610015C */ lwc1 $f16, 0x015C($s0) ## 0000015C
/* 0050C 80B878DC 3C0180B9 */ lui $at, %hi(D_80B88BE0) ## $at = 80B90000
/* 00510 80B878E0 C4268BE0 */ lwc1 $f6, %lo(D_80B88BE0)($at)
/* 00514 80B878E4 46128102 */ mul.s $f4, $f16, $f18
/* 00518 80B878E8 3C063D4C */ lui $a2, 0x3D4C ## $a2 = 3D4C0000
/* 0051C 80B878EC 3C073C23 */ lui $a3, 0x3C23 ## $a3 = 3C230000
/* 00520 80B878F0 34E7D70A */ ori $a3, $a3, 0xD70A ## $a3 = 3C23D70A
/* 00524 80B878F4 34C6CCCD */ ori $a2, $a2, 0xCCCD ## $a2 = 3D4CCCCD
/* 00528 80B878F8 26040050 */ addiu $a0, $s0, 0x0050 ## $a0 = 00000050
/* 0052C 80B878FC E7A60010 */ swc1 $f6, 0x0010($sp)
/* 00530 80B87900 44052000 */ mfc1 $a1, $f4
/* 00534 80B87904 0C01E0C4 */ jal Math_SmoothScaleMaxMinF
/* 00538 80B87908 00000000 */ nop
/* 0053C 80B8790C 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 00540 80B87910 0C00B58B */ jal Actor_SetScale
/* 00544 80B87914 8E050050 */ lw $a1, 0x0050($s0) ## 00000050
/* 00548 80B87918 10000038 */ beq $zero, $zero, .L80B879FC
/* 0054C 80B8791C 8602014C */ lh $v0, 0x014C($s0) ## 0000014C
/* 00550 80B87920 28410037 */ slti $at, $v0, 0x0037
.L80B87924:
/* 00554 80B87924 10200022 */ beq $at, $zero, .L80B879B0
/* 00558 80B87928 3C0980B8 */ lui $t1, %hi(func_80B874E4) ## $t1 = 80B80000
/* 0055C 80B8792C 3C0180B9 */ lui $at, %hi(D_80B88BE4) ## $at = 80B90000
/* 00560 80B87930 C42A8BE4 */ lwc1 $f10, %lo(D_80B88BE4)($at)
/* 00564 80B87934 C6080050 */ lwc1 $f8, 0x0050($s0) ## 00000050
/* 00568 80B87938 02002025 */ or $a0, $s0, $zero ## $a0 = 00000000
/* 0056C 80B8793C 460A4402 */ mul.s $f16, $f8, $f10
/* 00570 80B87940 44058000 */ mfc1 $a1, $f16
/* 00574 80B87944 0C00B58B */ jal Actor_SetScale
/* 00578 80B87948 00000000 */ nop
/* 0057C 80B8794C 8FB8002C */ lw $t8, 0x002C($sp)
/* 00580 80B87950 3C013F80 */ lui $at, 0x3F80 ## $at = 3F800000
/* 00584 80B87954 44819000 */ mtc1 $at, $f18 ## $f18 = 1.00
/* 00588 80B87958 8F05090C */ lw $a1, 0x090C($t8) ## 0000090C
/* 0058C 80B8795C 26040154 */ addiu $a0, $s0, 0x0154 ## $a0 = 00000154
/* 00590 80B87960 3C063F00 */ lui $a2, 0x3F00 ## $a2 = 3F000000
/* 00594 80B87964 3C074040 */ lui $a3, 0x4040 ## $a3 = 40400000
/* 00598 80B87968 0C01E0C4 */ jal Math_SmoothScaleMaxMinF
/* 0059C 80B8796C E7B20010 */ swc1 $f18, 0x0010($sp)
/* 005A0 80B87970 8602014C */ lh $v0, 0x014C($s0) ## 0000014C
/* 005A4 80B87974 24190036 */ addiu $t9, $zero, 0x0036 ## $t9 = 00000036
/* 005A8 80B87978 28410031 */ slti $at, $v0, 0x0031
/* 005AC 80B8797C 1420001F */ bne $at, $zero, .L80B879FC
/* 005B0 80B87980 03224023 */ subu $t0, $t9, $v0
/* 005B4 80B87984 44882000 */ mtc1 $t0, $f4 ## $f4 = 0.00
/* 005B8 80B87988 3C0180B9 */ lui $at, %hi(D_80B88BE8) ## $at = 80B90000
/* 005BC 80B8798C C4288BE8 */ lwc1 $f8, %lo(D_80B88BE8)($at)
/* 005C0 80B87990 468021A0 */ cvt.s.w $f6, $f4
/* 005C4 80B87994 8FA4003C */ lw $a0, 0x003C($sp)
/* 005C8 80B87998 46083282 */ mul.s $f10, $f6, $f8
/* 005CC 80B8799C 44055000 */ mfc1 $a1, $f10
/* 005D0 80B879A0 0C2E1DCB */ jal func_80B8772C
/* 005D4 80B879A4 00000000 */ nop
/* 005D8 80B879A8 10000014 */ beq $zero, $zero, .L80B879FC
/* 005DC 80B879AC 8602014C */ lh $v0, 0x014C($s0) ## 0000014C
.L80B879B0:
/* 005E0 80B879B0 3C0A80B8 */ lui $t2, %hi(func_80B87A18) ## $t2 = 80B80000
/* 005E4 80B879B4 252974E4 */ addiu $t1, $t1, %lo(func_80B874E4) ## $t1 = 000074E4
/* 005E8 80B879B8 254A7A18 */ addiu $t2, $t2, %lo(func_80B87A18) ## $t2 = 80B87A18
/* 005EC 80B879BC AE090130 */ sw $t1, 0x0130($s0) ## 00000130
/* 005F0 80B879C0 AE0A0134 */ sw $t2, 0x0134($s0) ## 00000134
/* 005F4 80B879C4 3C0180B9 */ lui $at, %hi(D_80B88BEC) ## $at = 80B90000
/* 005F8 80B879C8 C4328BEC */ lwc1 $f18, %lo(D_80B88BEC)($at)
/* 005FC 80B879CC C610015C */ lwc1 $f16, 0x015C($s0) ## 0000015C
/* 00600 80B879D0 3C0180B9 */ lui $at, %hi(D_80B88BF0) ## $at = 80B90000
/* 00604 80B879D4 C604015C */ lwc1 $f4, 0x015C($s0) ## 0000015C
/* 00608 80B879D8 46128002 */ mul.s $f0, $f16, $f18
/* 0060C 80B879DC E6000058 */ swc1 $f0, 0x0058($s0) ## 00000058
/* 00610 80B879E0 E6000050 */ swc1 $f0, 0x0050($s0) ## 00000050
/* 00614 80B879E4 C4268BF0 */ lwc1 $f6, %lo(D_80B88BF0)($at)
/* 00618 80B879E8 A600014C */ sh $zero, 0x014C($s0) ## 0000014C
/* 0061C 80B879EC 8602014C */ lh $v0, 0x014C($s0) ## 0000014C
/* 00620 80B879F0 46062202 */ mul.s $f8, $f4, $f6
/* 00624 80B879F4 A200014E */ sb $zero, 0x014E($s0) ## 0000014E
/* 00628 80B879F8 E6080054 */ swc1 $f8, 0x0054($s0) ## 00000054
.L80B879FC:
/* 0062C 80B879FC 244B0001 */ addiu $t3, $v0, 0x0001 ## $t3 = 00000001
/* 00630 80B87A00 A60B014C */ sh $t3, 0x014C($s0) ## 0000014C
/* 00634 80B87A04 8FBF0024 */ lw $ra, 0x0024($sp)
/* 00638 80B87A08 8FB00020 */ lw $s0, 0x0020($sp)
/* 0063C 80B87A0C 27BD0038 */ addiu $sp, $sp, 0x0038 ## $sp = 00000000
/* 00640 80B87A10 03E00008 */ jr $ra
/* 00644 80B87A14 00000000 */ nop

View file

@ -345,7 +345,9 @@ typedef struct Player {
/* 0x08B4 */ Struct_80090480_arg2 swordDimensions; // Trail active, tip, base?
/* 0x08D0 */ Struct_80090480_arg2 unk_8D0;
/* 0x08EC */ Struct_80090480_arg2 unk_8EC;
/* 0x0908 */ char unk_908[0x54];
/* 0x0908 */ char unk_908[0x04];
/* 0x090C */ f32 unk_90C;
/* 0x0910 */ char unk_910[0x4C];
/* 0x095C */ Vec3f unk_95C;
/* 0x0968 */ char unk_968[0x78];
/* 0x09E0 */ MtxF mf_9E0;

View file

@ -15,6 +15,10 @@ void MagicDark_Destroy(Actor* thisx, GlobalContext* globalCtx);
void MagicDark_Update(Actor* thisx, GlobalContext* globalCtx);
void MagicDark_Draw(Actor* thisx, GlobalContext* globalCtx);
void func_80B874E4(Actor* thisx, GlobalContext* globalCtx);
void func_80B8772C(GlobalContext* globalCtx, f32 a1);
void func_80B87A18(Actor* thisx, GlobalContext* globalCtx);
/*
const ActorInit Magic_Dark_InitVars = {
ACTOR_MAGIC_DARK,
@ -28,15 +32,72 @@ const ActorInit Magic_Dark_InitVars = {
(ActorFunc)MagicDark_Draw,
};
*/
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Magic_Dark/MagicDark_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Magic_Dark/MagicDark_Destroy.s")
void MagicDark_Init(Actor* thisx, GlobalContext* globalCtx) {
MagicDark* this = THIS;
Player* player = PLAYER;
if (LINK_IS_CHILD) {
this->unk_15C = 0.4f;
} else {
this->unk_15C = 0.6f;
}
this->actor.posRot.pos = player->actor.posRot.pos;
Actor_SetScale(&this->actor, 0.0f);
this->actor.room = -1;
if (gSaveContext.nayrusLoveTimer != 0) {
this->actor.update = func_80B874E4;
this->actor.draw = func_80B87A18;
this->actor.scale.x = this->actor.scale.z = this->unk_15C * 1.6f;
// THIS needed below to match
this->actor.scale.y = THIS->unk_15C * 0.8f;
this->unk_14C = 0;
this->unk_14E = 0;
} else {
this->unk_14C = 0;
gSaveContext.nayrusLoveTimer = 0;
}
}
void MagicDark_Destroy(Actor* thisx, GlobalContext* globalCtx) {
if (gSaveContext.nayrusLoveTimer == 0) {
func_800876C8(globalCtx);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Magic_Dark/func_80B874E4.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Magic_Dark/func_80B8772C.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Magic_Dark/MagicDark_Update.s")
void MagicDark_Update(Actor* thisx, GlobalContext* globalCtx) {
MagicDark* this = THIS;
s32 pad;
Player* player = PLAYER;
func_8002F974(&this->actor, NA_SE_PL_MAGIC_SOUL_BALL - SFX_FLAG);
if (this->unk_14C < 35) {
func_80B8772C(globalCtx, this->unk_14C * (1 / 45.0f));
Math_SmoothScaleMaxMinF(&this->actor.scale.x, this->unk_15C * (1 / 12.000001f), 0.05f, 0.01f, 0.0001f);
Actor_SetScale(&this->actor, this->actor.scale.x);
} else if (this->unk_14C < 55) {
Actor_SetScale(&this->actor, this->actor.scale.x * 0.9f);
Math_SmoothScaleMaxMinF(&this->unk_154, player->unk_90C, 0.5f, 3.0f, 1.0f);
if (this->unk_14C >= 49) {
func_80B8772C(globalCtx, (54 - this->unk_14C) * 0.2f);
}
} else {
this->actor.update = func_80B874E4;
this->actor.draw = func_80B87A18;
this->actor.scale.x = this->actor.scale.z = this->unk_15C * 1.6f;
// THIS needed below to match
this->actor.scale.y = THIS->unk_15C * 0.8f;
this->unk_14C = 0;
this->unk_14E = 0;
}
this->unk_14C += 1;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_Magic_Dark/func_80B87A18.s")

View file

@ -8,7 +8,13 @@ struct MagicDark;
typedef struct MagicDark {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x18];
/* 0x014C */ s16 unk_14C;
/* 0x014E */ u8 unk_14E;
/* 0x014F */ char unk_14F[0x5];
/* 0x0154 */ f32 unk_154;
/* 0x0158 */ char unk_158[0x4];
/* 0x015C */ f32 unk_15C;
/* 0x0160 */ char unk_160[0x4];
} MagicDark; // size = 0x0164
extern const ActorInit Magic_Dark_InitVars;