139 lines
2.7 KiB
C
139 lines
2.7 KiB
C
#include <ultra64.h>
|
|
#include "constants.h"
|
|
#include "bss.h"
|
|
#include "lib/memp.h"
|
|
#include "data.h"
|
|
#include "types.h"
|
|
|
|
u16 *var8009cc40;
|
|
s32 var8009cc44;
|
|
u32 var8009cc48;
|
|
u32 var8009cc4c;
|
|
u32 var8009cc50;
|
|
u32 var8009cc54;
|
|
u32 var8009cc58;
|
|
u32 var8009cc5c;
|
|
u32 var8009cc60;
|
|
s32 var8009cc64;
|
|
u32 var8009cc68;
|
|
u32 var8009cc6c;
|
|
u32 var8009cc70;
|
|
u32 var8009cc74;
|
|
f32 var8009cc78;
|
|
|
|
/**
|
|
* Initialises an array of room numbers and a linked list of structs.
|
|
*
|
|
* Related to blood splats, bullet holes and scorch marks.
|
|
* With this function nopped they do not appear.
|
|
*/
|
|
void wallhitReset(void)
|
|
{
|
|
s32 stack;
|
|
s32 type = 2;
|
|
s32 i;
|
|
|
|
if (IS4MB()) {
|
|
type = 0;
|
|
} else if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() == 2) {
|
|
type = 1;
|
|
} else if (PLAYERCOUNT() >= 2) {
|
|
type = 0;
|
|
}
|
|
|
|
switch (type) {
|
|
case 0:
|
|
// 4MB or MP with 2+ players
|
|
var8009cc44 = 80;
|
|
var8009cc5c = 10;
|
|
var8009cc60 = 40;
|
|
var8009cc64 = 1;
|
|
var8009cc68 = 25;
|
|
var8009cc6c = 20;
|
|
var8009cc70 = 5;
|
|
var8009cc74 = 15;
|
|
var8009cc78 = 0.3f;
|
|
break;
|
|
case 1:
|
|
// 2 player coop/anti
|
|
var8009cc44 = 200;
|
|
var8009cc5c = 25;
|
|
var8009cc60 = 100;
|
|
var8009cc64 = 4;
|
|
var8009cc68 = 40;
|
|
var8009cc6c = 80;
|
|
var8009cc70 = 20;
|
|
var8009cc74 = 30;
|
|
var8009cc78 = 0.4f;
|
|
break;
|
|
case 2:
|
|
default:
|
|
// 1 player 8MB
|
|
var8009cc44 = 360;
|
|
var8009cc5c = 50;
|
|
var8009cc60 = 120;
|
|
var8009cc64 = 10;
|
|
var8009cc68 = 60; // max bullet holes
|
|
var8009cc6c = 180;
|
|
var8009cc70 = 25;
|
|
var8009cc74 = 40;
|
|
var8009cc78 = 0.5f;
|
|
break;
|
|
}
|
|
|
|
var8009cc40 = 0;
|
|
var8009cc48 = 0;
|
|
var8009cc4c = 0;
|
|
var8009cc50 = 0;
|
|
var8009cc54 = 0;
|
|
var8009cc58 = 0;
|
|
|
|
if (g_Vars.stagenum >= STAGE_TITLE) {
|
|
var8009cc44 = 0;
|
|
}
|
|
|
|
if (var8009cc44 == 0) {
|
|
var800a41b0 = NULL;
|
|
} else {
|
|
// Allocate an array of s16 room numbers followed by a bunch of structs
|
|
u32 numberssize;
|
|
u32 structssize;
|
|
void *ptr;
|
|
|
|
structssize = var8009cc44 * sizeof(struct wallhit);
|
|
structssize += 0xf;
|
|
structssize &= ~0xf;
|
|
|
|
numberssize = g_Vars.roomcount * 2;
|
|
numberssize += 0xf;
|
|
numberssize &= ~0xf;
|
|
|
|
ptr = mempAlloc(structssize + numberssize, MEMPOOL_STAGE);
|
|
|
|
var8009cc40 = ptr;
|
|
var800a41b0 = (struct wallhit *)((u32)ptr + numberssize);
|
|
var800a41b4 = NULL;
|
|
var800a41b8 = 0;
|
|
|
|
// Initialise structs
|
|
for (i = 0; i < var8009cc44; i++) {
|
|
var800a41b0[i].unk6d = 0;
|
|
var800a41b0[i].unk6e = 0;
|
|
var800a41b0[i].unk70_00 = 0;
|
|
var800a41b0[i].unk6f_00 = 0;
|
|
var800a41b0[i].unk68 = -1;
|
|
var800a41b0[i].prop = NULL;
|
|
var800a41b0[i].unk60 = 0;
|
|
|
|
var8009cc4c++;
|
|
var800a41b0[i].prev = var800a41b4;
|
|
var800a41b4 = &var800a41b0[i];
|
|
}
|
|
|
|
// Initialise room numbers
|
|
for (i = 0; i < g_Vars.roomcount; i++) {
|
|
var8009cc40[i] = 0;
|
|
}
|
|
}
|
|
}
|