From e2eb20ce23539db58e70a4f6fe4b575483c680ff Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 1 Nov 2020 17:49:00 +1000 Subject: [PATCH] Decompile cameraDoAnimation --- src/game/bondmove.c | 2 +- src/game/chr/chr.c | 2 +- src/game/dlights.c | 2 +- src/game/game_01bea0.c | 2 +- src/game/game_097ba0.c | 2 +- src/game/game_0b63b0.c | 108 ++++++++++++++------------------------ src/game/game_167ae0.c | 12 ++--- src/game/music.c | 4 +- src/game/propobj.c | 8 +-- src/game/weathertick.c | 2 +- src/gvars/gvars.c | 2 +- src/include/constants.h | 2 +- src/include/gvars/gvars.h | 2 +- 13 files changed, 59 insertions(+), 91 deletions(-) diff --git a/src/game/bondmove.c b/src/game/bondmove.c index cd46536db..67252600f 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -5142,7 +5142,7 @@ glabel var7f1ad8e4 // // b478 // cancycleweapons = true; // -// if (g_Vars.tickmode == TICKMODE_6) { +// if (g_Vars.tickmode == TICKMODE_CUTSCENE) { // cancycleweapons = false; // } // diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 5ffd0b119..2dd1ebbe1 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -3723,7 +3723,7 @@ void func0f0220ec(struct chrdata *chr, s32 arg1, s32 arg2) { struct model *model = chr->model; - if (g_Vars.tickmode == TICKMODE_6) { + if (g_Vars.tickmode == TICKMODE_CUTSCENE) { if (chr->prop->type == PROPTYPE_PLAYER) { chr->hidden &= ~CHRHFLAG_KEEP_CORPSE; } diff --git a/src/game/dlights.c b/src/game/dlights.c index 04a60eff1..a8c66e304 100644 --- a/src/game/dlights.c +++ b/src/game/dlights.c @@ -2294,7 +2294,7 @@ void func0f0035c0(void) void func0f00372c(void) { if (g_Vars.tickmode != var80061458) { - if (TICKMODE_6 == g_Vars.tickmode && TICKMODE_6 != var80061458) { + if (TICKMODE_CUTSCENE == g_Vars.tickmode && TICKMODE_CUTSCENE != var80061458) { func0f003444(); } else if (TICKMODE_1 == g_Vars.tickmode && TICKMODE_1 != var80061458) { func0f0035c0(); diff --git a/src/game/game_01bea0.c b/src/game/game_01bea0.c index 5179b8c92..7e0b6aa84 100644 --- a/src/game/game_01bea0.c +++ b/src/game/game_01bea0.c @@ -2077,7 +2077,7 @@ glabel var7f1a863c // if (var80062940 == 0 && g_Vars.stagenum == STAGE_CITRAINING) { // g_PlayersWithControl[0] = false; // -// if (g_Vars.lvframenum > 30 && g_Vars.tickmode != TICKMODE_6) { +// if (g_Vars.lvframenum > 30 && g_Vars.tickmode != TICKMODE_CUTSCENE) { // g_Menus[0].unk83c = 0; // g_Menus[1].unk83c = 0; // g_Menus[2].unk83c = 0; diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 7a63de9db..ab4bc8f6a 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -20997,7 +20997,7 @@ void currentPlayerTickInventory(bool triggeron) } } - if (g_Vars.tickmode == TICKMODE_6) { + if (g_Vars.tickmode == TICKMODE_CUTSCENE) { triggeron = false; g_Vars.currentplayer->hands[1].unk063c = 0; g_Vars.currentplayer->hands[0].unk063c = 0; diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index 624d83f91..dbebff545 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -4317,7 +4317,7 @@ glabel var7f1ad5cc void func0f0ba010(void) { - setTickMode(TICKMODE_6); + setTickMode(TICKMODE_CUTSCENE); var80070744 = 0; setMoveModeForAllPlayers(MOVEMODE_CUTSCENE); func0f0c1d20(); @@ -4327,65 +4327,33 @@ void func0f0ba010(void) var8009de2c = -1; var80070764 = 1; func0f11dcb0(1); - g_Vars.in_cutscene = g_Vars.tickmode == TICKMODE_6 && var8009de10 < animGetNumFrames(var8009de18) - 1; + g_Vars.in_cutscene = g_Vars.tickmode == TICKMODE_CUTSCENE && var8009de10 < animGetNumFrames(g_CameraAnimNum) - 1; g_Vars.unk0004e2 = 0; } -GLOBAL_ASM( -glabel cameraDoAnimation -/* f0ba0d4: 3c0e8006 */ lui $t6,%hi(var800624a4) -/* f0ba0d8: 8dce24a4 */ lw $t6,%lo(var800624a4)($t6) -/* f0ba0dc: 27bdffe8 */ addiu $sp,$sp,-24 -/* f0ba0e0: afbf0014 */ sw $ra,0x14($sp) -/* f0ba0e4: 15c00004 */ bnez $t6,.L0f0ba0f8 -/* f0ba0e8: afa40018 */ sw $a0,0x18($sp) -/* f0ba0ec: 3c0f800a */ lui $t7,%hi(g_Vars+0x4d3) -/* f0ba0f0: 81efa493 */ lb $t7,%lo(g_Vars+0x4d3)($t7) -/* f0ba0f4: 11e00008 */ beqz $t7,.L0f0ba118 -.L0f0ba0f8: -/* f0ba0f8: 3c18800a */ lui $t8,%hi(g_Vars+0x4cc) -/* f0ba0fc: 8f18a48c */ lw $t8,%lo(g_Vars+0x4cc)($t8) -/* f0ba100: 3c19800a */ lui $t9,%hi(var8009de24) -/* f0ba104: 13000004 */ beqz $t8,.L0f0ba118 -/* f0ba108: 00000000 */ nop -/* f0ba10c: 8f39de24 */ lw $t9,%lo(var8009de24)($t9) -/* f0ba110: 5720001c */ bnezl $t9,.L0f0ba184 -/* f0ba114: 8fbf0014 */ lw $ra,0x14($sp) -.L0f0ba118: -/* f0ba118: 0c004f75 */ jal contDisableTemporarily -/* f0ba11c: 00000000 */ nop -/* f0ba120: 3c02800a */ lui $v0,%hi(g_Vars+0x2ac) -/* f0ba124: 8c42a26c */ lw $v0,%lo(g_Vars+0x2ac)($v0) -/* f0ba128: 24030006 */ addiu $v1,$zero,0x6 -/* f0ba12c: 3c01800a */ lui $at,%hi(var8009de24) -/* f0ba130: 10620005 */ beq $v1,$v0,.L0f0ba148 -/* f0ba134: 00000000 */ nop -/* f0ba138: 44802000 */ mtc1 $zero,$f4 -/* f0ba13c: ac20de24 */ sw $zero,%lo(var8009de24)($at) -/* f0ba140: 3c01800a */ lui $at,%hi(var8009de28) -/* f0ba144: e424de28 */ swc1 $f4,%lo(var8009de28)($at) -.L0f0ba148: -/* f0ba148: 50620004 */ beql $v1,$v0,.L0f0ba15c -/* f0ba14c: 87a8001a */ lh $t0,0x1a($sp) -/* f0ba150: 0fc2e17e */ jal func0f0b85f8 -/* f0ba154: 00000000 */ nop -/* f0ba158: 87a8001a */ lh $t0,0x1a($sp) -.L0f0ba15c: -/* f0ba15c: 3c09800a */ lui $t1,%hi(g_Vars+0x284) -/* f0ba160: 8d29a244 */ lw $t1,%lo(g_Vars+0x284)($t1) -/* f0ba164: 3c01800a */ lui $at,%hi(var8009de18) -/* f0ba168: a428de18 */ sh $t0,%lo(var8009de18)($at) -/* f0ba16c: 8d2a19c8 */ lw $t2,0x19c8($t1) -/* f0ba170: 51400004 */ beqzl $t2,.L0f0ba184 -/* f0ba174: 8fbf0014 */ lw $ra,0x14($sp) -/* f0ba178: 0fc2e804 */ jal func0f0ba010 -/* f0ba17c: 00000000 */ nop -/* f0ba180: 8fbf0014 */ lw $ra,0x14($sp) -.L0f0ba184: -/* f0ba184: 27bd0018 */ addiu $sp,$sp,0x18 -/* f0ba188: 03e00008 */ jr $ra -/* f0ba18c: 00000000 */ nop -); +void cameraDoAnimation(s16 animnum) +{ + if ((!var800624a4 && g_Vars.unk0004d3 == 0) + || g_Vars.in_cutscene == 0 + || var8009de24 == 0) { + contDisableTemporarily(); + + if (g_Vars.tickmode != TICKMODE_CUTSCENE) { + var8009de24 = 0; + var8009de28 = 0; + } + + if (g_Vars.tickmode != TICKMODE_CUTSCENE) { + func0f0b85f8(); + } + + g_CameraAnimNum = animnum; + + if (g_Vars.currentplayer->haschrbody) { + func0f0ba010(); + } + } +} GLOBAL_ASM( glabel func0f0ba190 @@ -4401,30 +4369,30 @@ glabel var7f1ad5d8 /* f0ba194: 27bdff60 */ addiu $sp,$sp,-160 /* f0ba198: ac24de2c */ sw $a0,%lo(var8009de2c)($at) /* f0ba19c: afbf0024 */ sw $ra,0x24($sp) -/* f0ba1a0: 3c04800a */ lui $a0,%hi(var8009de18) +/* f0ba1a0: 3c04800a */ lui $a0,%hi(g_CameraAnimNum) /* f0ba1a4: 0c008dda */ jal animGetNumFrames -/* f0ba1a8: 8484de18 */ lh $a0,%lo(var8009de18)($a0) +/* f0ba1a8: 8484de18 */ lh $a0,%lo(g_CameraAnimNum)($a0) /* f0ba1ac: 244effff */ addiu $t6,$v0,-1 -/* f0ba1b0: 3c04800a */ lui $a0,%hi(var8009de18) +/* f0ba1b0: 3c04800a */ lui $a0,%hi(g_CameraAnimNum) /* f0ba1b4: afae0034 */ sw $t6,0x34($sp) /* f0ba1b8: 0c008f4e */ jal func00023d38 -/* f0ba1bc: 8484de18 */ lh $a0,%lo(var8009de18)($a0) -/* f0ba1c0: 3c04800a */ lui $a0,%hi(var8009de18) -/* f0ba1c4: 8484de18 */ lh $a0,%lo(var8009de18)($a0) +/* f0ba1bc: 8484de18 */ lh $a0,%lo(g_CameraAnimNum)($a0) +/* f0ba1c0: 3c04800a */ lui $a0,%hi(g_CameraAnimNum) +/* f0ba1c4: 8484de18 */ lh $a0,%lo(g_CameraAnimNum)($a0) /* f0ba1c8: 0c008eac */ jal func00023ab0 /* f0ba1cc: 8fa50034 */ lw $a1,0x34($sp) /* f0ba1d0: 0c008f43 */ jal func00023d0c /* f0ba1d4: a3a2007b */ sb $v0,0x7b($sp) /* f0ba1d8: 93af007b */ lbu $t7,0x7b($sp) /* f0ba1dc: 3c068008 */ lui $a2,%hi(stagethinglist_221b4) -/* f0ba1e0: 3c07800a */ lui $a3,%hi(var8009de18) +/* f0ba1e0: 3c07800a */ lui $a3,%hi(g_CameraAnimNum) /* f0ba1e4: 27b80094 */ addiu $t8,$sp,0x94 /* f0ba1e8: 27b90088 */ addiu $t9,$sp,0x88 /* f0ba1ec: 27a8007c */ addiu $t0,$sp,0x7c /* f0ba1f0: afa8001c */ sw $t0,0x1c($sp) /* f0ba1f4: afb90018 */ sw $t9,0x18($sp) /* f0ba1f8: afb80014 */ sw $t8,0x14($sp) -/* f0ba1fc: 84e7de18 */ lh $a3,%lo(var8009de18)($a3) +/* f0ba1fc: 84e7de18 */ lh $a3,%lo(g_CameraAnimNum)($a3) /* f0ba200: 24c6c194 */ addiu $a2,$a2,%lo(stagethinglist_221b4) /* f0ba204: 00002025 */ or $a0,$zero,$zero /* f0ba208: 00002825 */ or $a1,$zero,$zero @@ -4497,8 +4465,8 @@ glabel var7f1ad5dc .L0f0ba2f4: /* f0ba2f4: a7a0010c */ sh $zero,0x10c($sp) .L0f0ba2f8: -/* f0ba2f8: 3c12800a */ lui $s2,%hi(var8009de18) -/* f0ba2fc: 2652de18 */ addiu $s2,$s2,%lo(var8009de18) +/* f0ba2f8: 3c12800a */ lui $s2,%hi(g_CameraAnimNum) +/* f0ba2fc: 2652de18 */ addiu $s2,$s2,%lo(g_CameraAnimNum) /* f0ba300: 0c008f4e */ jal func00023d38 /* f0ba304: 86440000 */ lh $a0,0x0($s2) /* f0ba308: 0c008dda */ jal animGetNumFrames @@ -10488,7 +10456,7 @@ glabel var7f1ad6ac // u32 playernum = g_Vars.currentplayernum; // // // dd28 -// if (g_Vars.tickmode == TICKMODE_6) { +// if (g_Vars.tickmode == TICKMODE_CUTSCENE) { // struct chrdata *chr = eyespy->prop->chr; // eyespy->initialised = false; // eyespy->init = true; @@ -10569,12 +10537,12 @@ glabel var7f1ad6ac // } // // // dfb8 -// if (g_Vars.tickmode != TICKMODE_6) { +// if (g_Vars.tickmode != TICKMODE_CUTSCENE) { // var80070764 = 0; // } // // // dfc8 -// if (g_Vars.tickmode == TICKMODE_6) { +// if (g_Vars.tickmode == TICKMODE_CUTSCENE) { // s32 i; // // func0f0b8ba0(); diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index 2c734187f..b39954d40 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -2491,17 +2491,17 @@ glabel var7f1b7868 /* f16a364: 00000000 */ nop /* f16a368: 8e6d04b4 */ lw $t5,0x4b4($s3) /* f16a36c: 2401004e */ addiu $at,$zero,0x4e -/* f16a370: 3c04800a */ lui $a0,%hi(var8009de18) +/* f16a370: 3c04800a */ lui $a0,%hi(g_CameraAnimNum) /* f16a374: 15a10095 */ bne $t5,$at,.L0f16a5cc /* f16a378: 00008025 */ or $s0,$zero,$zero /* f16a37c: 44800000 */ mtc1 $zero,$f0 -/* f16a380: 8484de18 */ lh $a0,%lo(var8009de18)($a0) +/* f16a380: 8484de18 */ lh $a0,%lo(g_CameraAnimNum)($a0) /* f16a384: 0c008dda */ jal animGetNumFrames /* f16a388: e7a000c4 */ swc1 $f0,0xc4($sp) /* f16a38c: 3c03800a */ lui $v1,%hi(var8009de10) /* f16a390: 8c63de10 */ lw $v1,%lo(var8009de10)($v1) /* f16a394: c7a000c4 */ lwc1 $f0,0xc4($sp) -/* f16a398: 3c0f800a */ lui $t7,%hi(var8009de18) +/* f16a398: 3c0f800a */ lui $t7,%hi(g_CameraAnimNum) /* f16a39c: 2861005a */ slti $at,$v1,0x5a /* f16a3a0: 10200009 */ beqz $at,.L0f16a3c8 /* f16a3a4: 2444ffff */ addiu $a0,$v0,-1 @@ -2514,7 +2514,7 @@ glabel var7f1b7868 /* f16a3c0: 460a4403 */ div.s $f16,$f8,$f10 /* f16a3c4: 46109001 */ sub.s $f0,$f18,$f16 .L0f16a3c8: -/* f16a3c8: 85efde18 */ lh $t7,%lo(var8009de18)($t7) +/* f16a3c8: 85efde18 */ lh $t7,%lo(g_CameraAnimNum)($t7) /* f16a3cc: 2401046c */ addiu $at,$zero,0x46c /* f16a3d0: 2498ffe2 */ addiu $t8,$a0,-30 /* f16a3d4: 11e1000d */ beq $t7,$at,.L0f16a40c @@ -2649,8 +2649,8 @@ glabel var7f1b7868 /* f16a5c4: af2b0004 */ sw $t3,0x4($t9) /* f16a5c8: 00409025 */ or $s2,$v0,$zero .L0f16a5cc: -/* f16a5cc: 3c10800a */ lui $s0,%hi(var8009de18) -/* f16a5d0: 8610de18 */ lh $s0,%lo(var8009de18)($s0) +/* f16a5cc: 3c10800a */ lui $s0,%hi(g_CameraAnimNum) +/* f16a5d0: 8610de18 */ lh $s0,%lo(g_CameraAnimNum)($s0) /* f16a5d4: 24010181 */ addiu $at,$zero,0x181 /* f16a5d8: 3c048008 */ lui $a0,%hi(var80084098) /* f16a5dc: 12010011 */ beq $s0,$at,.L0f16a624 diff --git a/src/game/music.c b/src/game/music.c index e07ca753e..4a3b2f50d 100644 --- a/src/game/music.c +++ b/src/game/music.c @@ -215,7 +215,7 @@ void musicStartAmbient(f32 arg0) if (g_TemporaryAmbientTrack != -1) { pass = true; } else if (musicIsAnyPlayerInAmbientRoom()) { - if (g_Vars.tickmode != TICKMODE_6 && AMBIENTTRACK() != stageGetAmbientTrack(g_MusicStageNum)) { + if (g_Vars.tickmode != TICKMODE_CUTSCENE && AMBIENTTRACK() != stageGetAmbientTrack(g_MusicStageNum)) { musicEnd(TRACKTYPE_AMBIENT); musicStartTemporary(stageGetAmbientTrack(g_MusicStageNum)); return; @@ -238,7 +238,7 @@ bool musicIsAnyPlayerInAmbientRoom(void) { s32 i; - if (g_Vars.tickmode == TICKMODE_6) { + if (g_Vars.tickmode == TICKMODE_CUTSCENE) { return false; } diff --git a/src/game/propobj.c b/src/game/propobj.c index 28ece328e..c6f68dbce 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -28341,7 +28341,7 @@ s32 objTick(struct prop *prop) if (model->anim) { if (g_Anims[model->anim->animnum].flags & 0x02) { - if (g_Vars.tickmode != TICKMODE_6 + if (g_Vars.tickmode != TICKMODE_CUTSCENE && modelGetCurAnimFrame(model) >= modelGetNumAnimFrames(model) - 1) { animTurnOff(model->anim); model->anim = NULL; @@ -28356,7 +28356,7 @@ s32 objTick(struct prop *prop) if (sp572) { s32 iVar10 = g_Vars.lvupdate240; - if (g_Vars.tickmode == TICKMODE_6 && iVar10 > 0 && g_Vars.unk0004e2 > 0) { + if (g_Vars.tickmode == TICKMODE_CUTSCENE && iVar10 > 0 && g_Vars.unk0004e2 > 0) { iVar10 += g_Vars.unk0004e2 * 4; } @@ -34230,8 +34230,8 @@ glabel func0f0841dc /* f084234: 80c6be3c */ lb $a2,%lo(propexplosiontypes+0x8)($a2) /* f084238: 17210007 */ bne $t9,$at,.L0f084258 /* f08423c: 00a01825 */ or $v1,$a1,$zero -/* f084240: 3c08800a */ lui $t0,%hi(var8009de18) -/* f084244: 8508de18 */ lh $t0,%lo(var8009de18)($t0) +/* f084240: 3c08800a */ lui $t0,%hi(g_CameraAnimNum) +/* f084244: 8508de18 */ lh $t0,%lo(g_CameraAnimNum)($t0) /* f084248: 240102d7 */ addiu $at,$zero,0x2d7 /* f08424c: 55010003 */ bnel $t0,$at,.L0f08425c /* f084250: 8ca90018 */ lw $t1,0x18($a1) diff --git a/src/game/weathertick.c b/src/game/weathertick.c index b479a4f0e..6d7883d81 100644 --- a/src/game/weathertick.c +++ b/src/game/weathertick.c @@ -16,7 +16,7 @@ void weatherTick(void) { if (!g_WeatherData || (g_StageIndex == STAGEINDEX_AIRBASE && g_Vars.currentplayer->cam_pos.z < -2000.0f) - || (g_StageIndex == STAGEINDEX_G5BUILDING && g_Vars.tickmode != TICKMODE_6)) { + || (g_StageIndex == STAGEINDEX_G5BUILDING && g_Vars.tickmode != TICKMODE_CUTSCENE)) { return; } diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index d3d0fe156..0b1aded7c 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -14807,7 +14807,7 @@ u32 var8009de08 = 0; u32 var8009de0c = 0; s32 var8009de10 = 0; u32 var8009de14 = 0; -s16 var8009de18 = 0; +s16 g_CameraAnimNum = 0; f32 var8009de1c = 0; s32 var8009de20 = 0; s32 var8009de24 = 0; diff --git a/src/include/constants.h b/src/include/constants.h index d1092c7af..428d3f5b5 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -2869,7 +2869,7 @@ #define TICKMODE_3 3 #define TICKMODE_4 4 #define TICKMODE_5 5 -#define TICKMODE_6 6 +#define TICKMODE_CUTSCENE 6 #define TICKMODE_AUTOWALK 7 #define TILEFLAG_0020 0x0020 diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index b5b24c2b5..ddf1dde9f 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -624,7 +624,7 @@ extern u32 var8009de08; extern u32 var8009de0c; extern s32 var8009de10; extern u32 var8009de14; -extern s16 var8009de18; +extern s16 g_CameraAnimNum; extern f32 var8009de1c; extern s32 var8009de20; extern s32 var8009de24;