diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index a76549287..0ba636ea2 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -23602,59 +23602,24 @@ glabel hudRenderAmmo /* f0abacc: 00000000 */ nop ); -GLOBAL_ASM( -glabel func0f0abad0 -/* f0abad0: 3c03800a */ lui $v1,%hi(g_Vars) -/* f0abad4: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f0abad8: 8c6e045c */ lw $t6,0x45c($v1) -/* f0abadc: 27bdffd8 */ addiu $sp,$sp,-40 -/* f0abae0: afbf0024 */ sw $ra,0x24($sp) -/* f0abae4: 01c47821 */ addu $t7,$t6,$a0 -/* f0abae8: 29e14651 */ slti $at,$t7,0x4651 -/* f0abaec: 14200003 */ bnez $at,.L0f0abafc -/* f0abaf0: ac6f045c */ sw $t7,0x45c($v1) -/* f0abaf4: 24194650 */ addiu $t9,$zero,0x4650 -/* f0abaf8: ac79045c */ sw $t9,0x45c($v1) -.L0f0abafc: -/* f0abafc: 8c680464 */ lw $t0,0x464($v1) -/* f0abb00: 5500001b */ bnezl $t0,.L0f0abb70 -/* f0abb04: 8fbf0024 */ lw $ra,0x24($sp) -/* f0abb08: 0fc5ae15 */ jal getEffectiveSlowMotion -/* f0abb0c: 00000000 */ nop -/* f0abb10: 10400003 */ beqz $v0,.L0f0abb20 -/* f0abb14: 3c048009 */ lui $a0,%hi(var80095200) -/* f0abb18: 10000002 */ b .L0f0abb24 -/* f0abb1c: 240202ad */ addiu $v0,$zero,0x2ad -.L0f0abb20: -/* f0abb20: 240205c9 */ addiu $v0,$zero,0x5c9 -.L0f0abb24: -/* f0abb24: 3c01bf80 */ lui $at,0xbf80 -/* f0abb28: 44812000 */ mtc1 $at,$f4 -/* f0abb2c: 00022c00 */ sll $a1,$v0,0x10 -/* f0abb30: 00054c03 */ sra $t1,$a1,0x10 -/* f0abb34: 240affff */ addiu $t2,$zero,-1 -/* f0abb38: 240bffff */ addiu $t3,$zero,-1 -/* f0abb3c: 240cffff */ addiu $t4,$zero,-1 -/* f0abb40: afac001c */ sw $t4,0x1c($sp) -/* f0abb44: afab0018 */ sw $t3,0x18($sp) -/* f0abb48: afaa0010 */ sw $t2,0x10($sp) -/* f0abb4c: 01202825 */ or $a1,$t1,$zero -/* f0abb50: 8c845200 */ lw $a0,%lo(var80095200)($a0) -/* f0abb54: 00003025 */ or $a2,$zero,$zero -/* f0abb58: 2407ffff */ addiu $a3,$zero,-1 -/* f0abb5c: 0c004241 */ jal audioStart -/* f0abb60: e7a40014 */ swc1 $f4,0x14($sp) -/* f0abb64: 3c03800a */ lui $v1,%hi(g_Vars) -/* f0abb68: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f0abb6c: 8fbf0024 */ lw $ra,0x24($sp) -.L0f0abb70: -/* f0abb70: 240d0001 */ addiu $t5,$zero,0x1 -/* f0abb74: ac6d0464 */ sw $t5,0x464($v1) -/* f0abb78: 03e00008 */ jr $ra -/* f0abb7c: 27bd0028 */ addiu $sp,$sp,0x28 -); +void speedpillAddBoost(s32 amount) +{ + g_Vars.speedpilltime += amount; -void func0f0abb80(s32 amount) + if (g_Vars.speedpilltime > 5 * 60 * 60) { // 5 minutes + g_Vars.speedpilltime = 5 * 60 * 60; + } + + if (!g_Vars.speedpillwant) { + u32 sound = getEffectiveSlowMotion() ? 0x2ad : 0x5c9; + + audioStart(var80095200, sound, 0, -1, -1, -1, -1, -1); + } + + g_Vars.speedpillwant = true; +} + +void speedpillRevert(s32 amount) { g_Vars.speedpilltime -= amount; @@ -23667,18 +23632,18 @@ void func0f0abb80(s32 amount) void func0f0abba8(void) { if (getEffectiveSlowMotion()) { - func0f0abb80(1200); + speedpillRevert(SECSTOTIME60(20)); } else { - func0f0abad0(600); + speedpillAddBoost(SECSTOTIME60(10)); } } void func0f0abbe8(void) { if (getEffectiveSlowMotion()) { - func0f0abad0(1200); + speedpillAddBoost(SECSTOTIME60(20)); } else { - func0f0abb80(600); + speedpillRevert(SECSTOTIME60(10)); } } diff --git a/src/game/game_17f930.c b/src/game/game_17f930.c index 88e687e35..3210136b5 100644 --- a/src/game/game_17f930.c +++ b/src/game/game_17f930.c @@ -802,7 +802,7 @@ void scenarioHtbCallback14(struct chrdata *chr) if (chr->aibot->unk09c_00) { chr->aibot->unk0a0 += g_Vars.lvupdate240; - if (chr->aibot->unk0a0 >= SECSTOFRAMES240(30)) { + if (chr->aibot->unk0a0 >= SECSTOTIME240(30)) { // Point scored sound audioStart(var80095200, 0x5b8, NULL, -1, -1, -1, -1, -1); var800ac500[mpPlayerGetIndex(chr)]->unk3e++; @@ -815,7 +815,7 @@ void scenarioHtbCallback14(struct chrdata *chr) if (currentPlayerHasBriefcase()) { g_Vars.currentplayerstats->tokenheldtime += g_Vars.lvupdate240; - if (g_Vars.currentplayerstats->tokenheldtime >= SECSTOFRAMES240(30)) { + if (g_Vars.currentplayerstats->tokenheldtime >= SECSTOTIME240(30)) { // Point scored sound audioStart(var80095200, 0x5b8, NULL, -1, -1, -1, -1, -1); var800ac500[g_Vars.currentplayernum]->unk3e++; @@ -4807,7 +4807,7 @@ glabel scenarioPacCallback10 // g_Vars.players[g_ScenarioData.pac.victims[g_ScenarioData.pac.victimindex]]->isdead == false) { // g_ScenarioData.pac.age240 += g_Vars.lvupdate240; // -// if (g_ScenarioData.pac.age240 > SECSTOFRAMES240(60)) { +// if (g_ScenarioData.pac.age240 > SECSTOTIME240(60)) { // g_ScenarioData.pac.age240 = 0; // g_ScenarioData.pac.wincounts[g_ScenarioData.pac.victims[g_ScenarioData.pac.victimindex]]++; // func0f1866b8(g_ScenarioData.pac.victims[g_ScenarioData.pac.victimindex], langGet(L_MPWEAPONS(7))); // "Have a point for living!" diff --git a/src/game/training.c b/src/game/training.c index c85cf0d0d..29ed50a0c 100644 --- a/src/game/training.c +++ b/src/game/training.c @@ -497,7 +497,7 @@ void frInitDefaults(void) g_FrData.targets[i].scriptoffset = 0; g_FrData.targets[i].travelspeed = 0; - g_FrData.targets[i].scriptsleep = SECSTOFRAMES60(255); + g_FrData.targets[i].scriptsleep = SECSTOTIME60(255); g_FrData.targets[i].timeuntilrotate = 0; g_FrData.targets[i].rotating = false; @@ -1161,7 +1161,7 @@ void frExecuteHelpScript(void) g_FrData.helpscriptoffset += 2; break; case FRCMD_HELPWAITSECONDS: - g_FrData.helpscriptsleep = SECSTOFRAMES60(script[offset + 1]); + g_FrData.helpscriptsleep = SECSTOTIME60(script[offset + 1]); g_FrData.helpscriptoffset += 2; break; case FRCMD_WAITUNTILSHOOT: @@ -1443,7 +1443,7 @@ glabel var7f1b941c // switch (script[offset]) { // case FRCMD_END: // g_FrData.targets[targetnum].scriptenabled = true; -// g_FrData.targets[targetnum].scriptsleep = SECSTOFRAMES60(255); +// g_FrData.targets[targetnum].scriptsleep = SECSTOTIME60(255); // return true; // case FRCMD_GOTOPAD: // frpadnum = frResolveFrPad(script[offset + 1]); @@ -1476,7 +1476,7 @@ glabel var7f1b941c // g_FrData.targets[targetnum].travelling = true; // } // -// g_FrData.targets[targetnum].scriptsleep = SECSTOFRAMES60(script[offset + 3]); +// g_FrData.targets[targetnum].scriptsleep = SECSTOTIME60(script[offset + 3]); // g_FrData.targets[targetnum].donestopsound = false; // g_FrData.targets[targetnum].scriptoffset += 4; // return true; @@ -1485,7 +1485,7 @@ glabel var7f1b941c // return true; // case FRCMD_WAITSECONDS: // g_FrData.targets[targetnum].scriptenabled = true; -// g_FrData.targets[targetnum].scriptsleep = SECSTOFRAMES60(script[offset + 1]); +// g_FrData.targets[targetnum].scriptsleep = SECSTOTIME60(script[offset + 1]); // g_FrData.targets[targetnum].scriptoffset += 2; // return true; // case FRCMD_ROTATE: @@ -3840,7 +3840,7 @@ glabel var7f1b94e4 // // // 398 // if (g_FrData.timelimit != 255 -// && g_FrData.timetaken >= SECSTOFRAMES60(g_FrData.timelimit)) { +// && g_FrData.timetaken >= SECSTOTIME60(g_FrData.timelimit)) { // frSetFailReason(FRFAILREASON_TIMEOVER); // return; // } @@ -4005,7 +4005,7 @@ glabel var7f1b94e4 // // // 854 // if (g_FrData.targets[i].scriptenabled -// && g_FrData.targets[i].scriptsleep != SECSTOFRAMES60(255)) { +// && g_FrData.targets[i].scriptsleep != SECSTOTIME60(255)) { // // 874 // g_FrData.targets[i].scriptsleep -= g_Vars.lvupdate240_60; // diff --git a/src/include/constants.h b/src/include/constants.h index 428d3f5b5..808cc6089 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -11,20 +11,20 @@ #define S32_MAX 2147483647 #define U32_MAX 4294967295 -#define ABS(val) ((val) > 0 ? (val) : -(val)) -#define ALIGN8(val) (((val) + 0x7 | 0x7) ^ 0x7) -#define ALIGN16(val) (((val) + 0xf | 0xf) ^ 0xf) -#define ALIGN64(val) ((((u32)val) + 0x3f | 0x3f) ^ 0x3f) -#define ARRAYCOUNT(a) (s32)(sizeof(a) / sizeof(a[0])) -#define CHRRACE(chr) (chr ? chr->race : RACE_HUMAN) -#define FRAMEDURATION (1 / 60.0f) -#define IS4MB() (g_Is4Mb == true) -#define PLAYERCOUNT() ((g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0)) -#define PLAYERCOUNT3012() ((g_Vars.players[3] ? 1 : 0) + (g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0)) -#define SECSTOFRAMES240(secs) (secs * 240) -#define SECSTOFRAMES60(secs) (secs * 60) -#define TEXT(bankid, index) ((bankid << 9) | index) -#define VOLUME(volume) (volume > 0x5000 ? 0x5000 : volume) +#define ABS(val) ((val) > 0 ? (val) : -(val)) +#define ALIGN8(val) (((val) + 0x7 | 0x7) ^ 0x7) +#define ALIGN16(val) (((val) + 0xf | 0xf) ^ 0xf) +#define ALIGN64(val) ((((u32)val) + 0x3f | 0x3f) ^ 0x3f) +#define ARRAYCOUNT(a) (s32)(sizeof(a) / sizeof(a[0])) +#define CHRRACE(chr) (chr ? chr->race : RACE_HUMAN) +#define FRAMEDURATION (1 / 60.0f) +#define IS4MB() (g_Is4Mb == true) +#define PLAYERCOUNT() ((g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0)) +#define PLAYERCOUNT3012() ((g_Vars.players[3] ? 1 : 0) + (g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0)) +#define SECSTOTIME240(secs) (secs * 240) +#define SECSTOTIME60(secs) (secs * 60) +#define TEXT(bankid, index) ((bankid << 9) | index) +#define VOLUME(volume) (volume > 0x5000 ? 0x5000 : volume) // These actions are assigned to chr->actiontype #define ACT_INIT 0 diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index 3fb2832de..6492b4775 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -167,8 +167,8 @@ u32 func0f0a9d94(void); u32 func0f0a9da8(void); u32 func0f0a9fc0(void); Gfx *hudRenderAmmo(Gfx *gdl); -void func0f0abad0(s32 arg0); -void func0f0abb80(s32 arg0); +void speedpillAddBoost(s32 arg0); +void speedpillRevert(s32 arg0); void func0f0abba8(void); void func0f0abbe8(void); void speedpillTick(void);