From 489ec9043d6e1b3c52a4adc1ebbe9bb7dcaafd20 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 5 Nov 2022 22:15:15 +1000 Subject: [PATCH] Remove unused object types --- ld/libfiles.ntsc-final.inc | 1 - src/game/body.c | 192 --- src/game/bondgun.c | 14 - src/game/bot.c | 6 - src/game/chr.c | 38 - src/game/chraction.c | 22 - src/game/inv.c | 6 - src/game/lv.c | 3 - src/game/padhalllv.c | 107 -- src/game/prop.c | 79 -- src/game/propobj.c | 2479 +----------------------------------- src/game/setup.c | 810 ------------ src/game/smoke.c | 5 - src/lib/path.c | 27 - 14 files changed, 5 insertions(+), 3784 deletions(-) delete mode 100644 src/lib/path.c diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index c7d083690..859378a79 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -46,7 +46,6 @@ build/ROMID/lib/mtxasm.o (section); \ build/ROMID/lib/mtx.o (section); \ build/ROMID/lib/lib_17ce0.o (section); \ - build/ROMID/lib/path.o (section); \ build/ROMID/lib/modelasm.o (section); \ build/ROMID/lib/model.o (section); \ build/ROMID/lib/anim.o (section); \ diff --git a/src/game/body.c b/src/game/body.c index fae66edc2..8a8c5d564 100644 --- a/src/game/body.c +++ b/src/game/body.c @@ -250,198 +250,6 @@ struct model *bodyAllocateModel(s32 bodynum, s32 headnum, u32 spawnflags) return body0f02d338(bodynum, headnum, NULL, NULL, sunglasses, varyheight); } -s32 body0f02d3f8(void) -{ - return g_BondBodies[var80062c80]; -} - -s32 bodyChooseHead(s32 bodynum) -{ - s32 head; - - if (g_HeadsAndBodies[bodynum].ismale) { - head = g_ActiveMaleHeads[g_ActiveMaleHeadsIndex++]; - - if (g_ActiveMaleHeadsIndex == g_NumActiveHeadsPerGender) { - g_ActiveMaleHeadsIndex = 0; - } - } else if (bodynum == BODY_FEM_GUARD) { - head = g_FemGuardHeads[random() % 3]; - } else { - head = g_ActiveFemaleHeads[g_ActiveFemaleHeadsIndex++]; - - if (g_ActiveFemaleHeadsIndex == g_NumActiveHeadsPerGender) { - g_ActiveFemaleHeadsIndex = 0; - } - } - - return head; -} - -/** - * Read a "packed" chr definition and create a runtime chr from it. - * - * Chr definitions are stored in a packed format in each stage's setup file. - * The packed format is used for space saving reasons. - */ -void bodyAllocateChr(s32 stagenum, struct packedchr *packed, s32 cmdindex) -{ - struct pad pad; - s16 rooms[2]; - struct chrdata *chr; - struct modelfiledata *headfiledata; - struct model *model; - struct prop *prop; - s32 bodynum; - s32 headnum; - f32 angle; - s32 index; - - padUnpack(packed->padnum, PADFIELD_POS | PADFIELD_LOOK | PADFIELD_ROOM, &pad); - - rooms[0] = pad.room; - rooms[1] = -1; - - if (cdTestVolume(&pad.pos, 20, rooms, CDTYPE_ALL, CHECKVERTICAL_YES, 200, -200) == CDRESULT_COLLISION - && packed->chair == -1 - && (packed->spawnflags & SPAWNFLAG_IGNORECOLLISION) == 0) { - return; - } - - if (packed->spawnflags & (SPAWNFLAG_ONLYONA | SPAWNFLAG_ONLYONSA | SPAWNFLAG_ONLYONPA)) { - if ((packed->spawnflags & (SPAWNFLAG_ONLYONA | SPAWNFLAG_ONLYONSA | SPAWNFLAG_ONLYONPA)) == 0) { - return; - } - - if (((packed->spawnflags & SPAWNFLAG_ONLYONA) && lvGetDifficulty() == DIFF_A) - || ((packed->spawnflags & SPAWNFLAG_ONLYONSA) && lvGetDifficulty() == DIFF_SA) - || ((packed->spawnflags & SPAWNFLAG_ONLYONPA) && lvGetDifficulty() == DIFF_PA)) { - // ok - } else { - return; - } - } - - headnum = -55555; - headfiledata = NULL; - - if (packed->bodynum == 255) { - bodynum = body0f02d3f8(); - } else { - bodynum = packed->bodynum; - } - - if (!g_HeadsAndBodies[bodynum].unk00_01) { - if (packed->headnum >= 0) { - headnum = packed->headnum; - } else if (headnum == -55555) { - headnum = bodyChooseHead(bodynum); - } - } - - if (headnum < 0) { - index = -1 - headnum; - - if (index >= 0 && index < 22) { - headfiledata = func0f18e57c(index, &headnum); - } - - model = body0f02ce8c(bodynum, headnum, NULL, headfiledata, false, NULL, false, false); - } else { - model = bodyAllocateModel(bodynum, headnum, packed->spawnflags); - } - - if (model != NULL) { - angle = atan2f(pad.look.x, pad.look.z); - prop = chrAllocate(model, &pad.pos, rooms, angle); - - if (prop != NULL) { - propActivate(prop); - propEnable(prop); - - chr = prop->chr; - chrSetChrnum(chr, packed->chrnum); - chr->hearingscale = packed->hearscale / 1000.0f; - chr->visionrange = packed->viewdist; - chr->padpreset1 = packed->padpreset; - chr->chrpreset1 = packed->chrpreset; - chr->headnum = headnum; - chr->bodynum = bodynum; - chr->race = bodyGetRace(chr->bodynum); - - chr->rtracked = false; - - if (packed->spawnflags & SPAWNFLAG_INVINCIBLE) { - chr->chrflags |= CHRCFLAG_INVINCIBLE; - } - - if (packed->spawnflags & SPAWNFLAG_00000200) { - chr->hidden |= CHRHFLAG_00400000; - } - - if (packed->spawnflags & SPAWNFLAG_ANTINONINTERACTABLE) { - chr->hidden |= CHRHFLAG_ANTINONINTERACTABLE; - } - - if (packed->spawnflags & SPAWNFLAG_DONTSHOOTME) { - chr->hidden |= CHRHFLAG_DONTSHOOTME; - } - - if (packed->spawnflags & SPAWNFLAG_HIDDEN) { - chr->chrflags |= CHRCFLAG_HIDDEN; - } - - if (packed->spawnflags & SPAWNFLAG_RTRACKED) { - chr->rtracked = true; - } - - if (packed->spawnflags & SPAWNFLAG_NOBLOOD) { - chr->noblood = true; - } - - if (packed->spawnflags & SPAWNFLAG_BLUESIGHT) { - chr->hidden2 |= CHRH2FLAG_BLUESIGHT; - } - - chr->flags = packed->flags; - chr->flags2 = packed->flags2; - chr->team = packed->team; - chr->squadron = packed->squadron; - chr->aibot = NULL; - - if (packed->tude != 4) { - chr->tude = packed->tude; - } else { - chr->tude = random() % 4; - } - - chr->voicebox = random() % 3; - - if (!g_HeadsAndBodies[chr->bodynum].ismale) { - chr->voicebox = VOICEBOX_FEMALE; - } - - chr->naturalanim = packed->naturalanim; - chr->myspecial = packed->chair; - chr->yvisang = packed->yvisang; - - packed->chrindex = chr - g_ChrSlots; - - chr->teamscandist = packed->teamscandist; - chr->convtalk = packed->convtalk; - - if (chr->flags & CHRFLAG0_CAN_HEARSPAWN) { - chr->chrflags |= CHRCFLAG_CLONEABLE; - } - - if (random() % 5 == 0) { - // Make chr punch slower - chr->flags2 |= CHRFLAG1_ADJUSTPUNCHSPEED; - } - } - } -} - /** * Tweak the head's Y offset to suit the body. * diff --git a/src/game/bondgun.c b/src/game/bondgun.c index 013c2ad13..e0022a704 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -10632,20 +10632,6 @@ void bgunRender(Gfx **gdlptr) gSPPerspNormalize(gdl++, mtx00016dcc(0, 300)); - // There is support for guns having a TV screen on them - // but no guns have this model part so it's not used. - node = modelGetPart(hand->gunmodel.filedata, MODELPART_0010); - - if (node) { - union modelrwdata *rwdata = modelGetNodeRwData(&hand->gunmodel, modelGetPart(hand->gunmodel.filedata, MODELPART_0011)); - - if (rwdata) { - rwdata->toggle.visible = true; - } - - gdl = tvscreenRender(&hand->gunmodel, node, &var8009cf88, gdl, 0, 1); - } - renderdata.gdl = gdl; renderdata.unk30 = 4; diff --git a/src/game/bot.c b/src/game/bot.c index 9dda547d1..973361779 100644 --- a/src/game/bot.c +++ b/src/game/bot.c @@ -479,12 +479,6 @@ bool botTestPropForPickup(struct prop *prop, struct chrdata *chr) return false; } - if (!objCanPickupFromSafe(obj)) { - return false; - } - - if (1); - if (obj->type == OBJTYPE_WEAPON) { weaponobj = prop->weapon; itemtype = botinvGetItemType(chr, weaponobj->weaponnum); diff --git a/src/game/chr.c b/src/game/chr.c index 2cc74c988..51d2c96b4 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -2375,44 +2375,6 @@ s32 chrTick(struct prop *prop) child = next; } - if (chr->weapons_held[2] != NULL) { - s32 index; - struct defaultobj *obj = chr->weapons_held[2]->obj; - struct model *hatmodel = obj->model; - - if (chr->headnum >= HEAD_SHAUN && chr->headnum <= HEAD_SHAUN) { - struct coord hatpos = {0, 0, 0}; - f32 spe4; - f32 spe0; - f32 spdc; - Mtxf sp9c; - Mtxf sp5c; - s32 hattype = hatGetType(chr->weapons_held[2]); - u8 stack[0x0c]; - - index = chr->headnum - HEAD_SHAUN; - - hatpos.x = var8007dae4[index][hattype].x * 21.3f; - hatpos.y = var8007dae4[index][hattype].y * 21.3f; - hatpos.z = var8007dae4[index][hattype].z * 21.3f; - - spe4 = var8007dae4[index][hattype].unk0c; - spe0 = var8007dae4[index][hattype].unk10; - spdc = var8007dae4[index][hattype].unk14; - - mtx4LoadTranslation(&hatpos, &sp9c); - mtx00015e24(spe4, &sp9c); - mtx00015e80(spe0, &sp9c); - mtx00015edc(spdc, &sp9c); - mtx00015be4(hatmodel->matrices, &sp9c, &sp5c); - mtx4Copy(&sp5c, hatmodel->matrices); - - if (hattype == HATTYPE_2) { - hatvisible = false; - } - } - } - if (model->filedata->skel == &g_SkelChr) { struct modelnode *headspotnode = modelGetPart(model->filedata, MODELPART_CHR_HEADSPOT); diff --git a/src/game/chraction.c b/src/game/chraction.c index 583e511a0..e4bf21bc0 100644 --- a/src/game/chraction.c +++ b/src/game/chraction.c @@ -2164,28 +2164,6 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse } } - // Handle hat shots. This is left over from GE, as hats don't exist in PD - if (damage > 0 && hitpart == HITPART_HAT && chr->weapons_held[2]) { - s32 type = hatGetType(chr->weapons_held[2]); - - if (type == HATTYPE_CLOTH) { - // Hat remains on head and damages the chr (eg. Moonraker Elite) - hitpart = HITPART_HEAD; - } else if (type != HATTYPE_METAL) { - // Normal hat - damage = 0; - objSetDropped(chr->weapons_held[2], DROPTYPE_HAT); - chr->hidden |= CHRHFLAG_00000001; - } else { - // Metal helmets don't fall off and make a metallic chink noise when shot - u16 sounds[] = { SFX_HIT_METAL_807B, SFX_HIT_METAL_8079, SFX_HATHIT_807C }; - damage = 0; - - propsnd0f0939f8(NULL, chr->prop, sounds[random() % 3], -1, - -1, 0, 0, 0, NULL, -1, NULL, -1, -1, -1, -1); - } - } - // Handle incrementing player shot count if (aprop && aprop->type == PROPTYPE_PLAYER && !explosion) { bool alreadydead = false; diff --git a/src/game/inv.c b/src/game/inv.c index daccd81b8..b502d0e5e 100644 --- a/src/game/inv.c +++ b/src/game/inv.c @@ -938,12 +938,6 @@ char *invGetShortNameByIndex(s32 index) return bgunGetShortName(weaponnum); } -void invInsertTextOverride(struct textoverride *override) -{ - override->next = g_Vars.textoverrides; - g_Vars.textoverrides = override; -} - u32 invGetCurrentIndex(void) { return g_Vars.currentplayer->equipcuritem; diff --git a/src/game/lv.c b/src/game/lv.c index ad945ac87..00b56ad99 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -1448,8 +1448,6 @@ void lvUpdateSoloHandicaps(void) frac = (totalhealth - 0.125f) * 0.5f / 0.47500002384186f + 0.5f; } - g_CctvWaitScale = 2; - g_CctvDamageRxScale = 2; g_AutogunAccuracyScale = 0.5f * frac; g_AutogunDamageTxScale = 0.5f * frac; g_AutogunDamageRxScale = 2; @@ -1779,7 +1777,6 @@ void lvTick(void) musicTick(); langTick(); - propsTickPadEffects(); } } diff --git a/src/game/padhalllv.c b/src/game/padhalllv.c index cfddac821..c3b7cfa61 100644 --- a/src/game/padhalllv.c +++ b/src/game/padhalllv.c @@ -562,110 +562,3 @@ s32 waypointFindRoute(struct waypoint *frompoint, struct waypoint *topoint, stru return arrptr - arr; } - -/** - * Disable the segment from A to B. - * - * This works by removing B from A's neighbour list. If B isn't a neighbour of - * A (ie. segment is already disabled) then no operation is performed. - * - * Once B is removed from A's list, the function then updates the group - * neighbours too. If the segment being removed is the last link between - * A's group and B's group then group B is removed from group A's neighbour - * list. - */ -void waypointDisableSegmentInDirection(struct waypoint *a, struct waypoint *b) -{ - struct waygroup *agroup = &g_StageSetup.waygroups[a->groupnum]; - s32 bindex = b - g_StageSetup.waypoints; - s32 bgroupnum = b->groupnum; - bool foundlink = false; - s32 i; - s32 j; - s32 tmp; - - // Find index of the neighbour point to remove, or index of end if not found - for (i = 0; (tmp = a->neighbours[i]) >= 0 && (tmp & 0x3fff) != bindex; i++); - - // If neighbour was found, shuffle the rest of the neighbour list back by - // one, effectively removing it. - if ((tmp & 0x3fff) == bindex) { - for (; a->neighbours[i] >= 0; i++) { - a->neighbours[i] = a->neighbours[i + 1]; - } - } - - // Check if group A still contains any waypoints who have neighbours in - // group B. - for (i = 0; (tmp = agroup->waypoints[i]) >= 0 && !foundlink; i++) { - struct waypoint *apoint = &g_StageSetup.waypoints[tmp]; - - for (j = 0; (tmp = apoint->neighbours[j]) >= 0 && !foundlink; j++) { - struct waypoint *neighbour = &g_StageSetup.waypoints[tmp & 0x3fff]; - - if (neighbour->groupnum == bgroupnum) { - foundlink = true; - } - } - } - - // If no link was found, remove group B from group A's neighbour list - if (!foundlink) { - for (i = 0; (tmp = agroup->neighbours[i]) >= 0 && (tmp & 0x3fff) != bgroupnum; i++); - - if ((tmp & 0x3fff) == bgroupnum) { - for (; agroup->neighbours[i] >= 0; i++) { - agroup->neighbours[i] = agroup->neighbours[i + 1]; - } - } - } -} - -/** - * Enable the segment from A to B. - * - * This works by adding B to A's neighbour list. If B is already a neighbour of - * A (ie. segment is already enabled) then no operation is performed. - * - * This code assumes that A's neighbours array is big enough to add the new - * neighbour, which it will be if B was disabled previously. - */ -void waypointEnableSegmentInDirection(struct waypoint *a, struct waypoint *b) -{ - struct waygroup *agroup = &g_StageSetup.waygroups[a->groupnum]; - s32 bpointnum = b - g_StageSetup.waypoints; - s32 bgroupnum = b->groupnum; - s32 neighbournum; - s32 i; - - // Find index in A's neighbour list where B can be added. - // This will either be at the -1 terminator, or if B already exists in the - // list then the index of B. - for (i = 0; (neighbournum = a->neighbours[i]) >= 0 && (neighbournum & 0x3fff) != bpointnum; i++); - - // Add B to A's neighbour list if it doesn't exist - if ((neighbournum & 0x3fff) != bpointnum) { - a->neighbours[i] = bpointnum; - a->neighbours[i + 1] = -1; - } - - // Now the same for groups. Make sure B's group is a neighbour of A's group. - for (i = 0; (neighbournum = agroup->neighbours[i]) >= 0 && (neighbournum & 0x3fff) != bgroupnum; i++); - - if (bgroupnum != (neighbournum & 0x3fff)) { - agroup->neighbours[i] = bgroupnum; - agroup->neighbours[i + 1] = -1; - } -} - -void waypointDisableSegment(struct waypoint *a, struct waypoint *b) -{ - waypointDisableSegmentInDirection(a, b); - waypointDisableSegmentInDirection(b, a); -} - -void waypointEnableSegment(struct waypoint *a, struct waypoint *b) -{ - waypointEnableSegmentInDirection(a, b); - waypointEnableSegmentInDirection(b, a); -} diff --git a/src/game/prop.c b/src/game/prop.c index cae035d3d..a582d371a 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -2199,80 +2199,6 @@ void propsTickPlayer(bool islastplayer) chr0f02472c(); } -void propsTickPadEffects(void) -{ - s32 i; - struct pad pad; - u32 stack; - struct coord up; - s16 rooms[2]; - s16 rooms2[2]; - s32 type; - - if (g_LastPadEffectIndex >= 0) { - for (i = 0; i <= g_LastPadEffectIndex; i++) { - struct padeffectobj *effect = &g_PadEffects[i]; - - padUnpack(effect->pad, PADFIELD_ROOM, &pad); - - if (roomIsOnscreen(pad.room)) { - switch (effect->effect) { - case PADEFFECT_SPARKS: - case PADEFFECT_SPARKS2: - rooms[0] = pad.room; - rooms[1] = -1; - - padUnpack(effect->pad, PADFIELD_POS | PADFIELD_UP, &pad); - - up.x = -pad.up.x; - up.y = -pad.up.y; - up.z = -pad.up.z; - - if ((random() % 2048) <= 50) { - sparksCreate(rooms[0], NULL, &pad.pos, &up, &pad.up, SPARKTYPE_ENVIRONMENTAL1); - propsnd0f0939f8(NULL, NULL, propsndGetRandomSparkSound(), -1, -1, 0, 0, 0, &pad.pos, -1, rooms, -1, -1, -1, -1); - } - - if ((random() % 2048) <= 15) { - sparksCreate(rooms[0], NULL, &pad.pos, &up, &pad.up, SPARKTYPE_ENVIRONMENTAL1); - sparksCreate(rooms[0], NULL, &pad.pos, &up, &pad.up, SPARKTYPE_ENVIRONMENTAL2); - propsnd0f0939f8(NULL, NULL, propsndGetRandomSparkSound(), -1, -1, 0, 0, 0, &pad.pos, -1, rooms, -1, -1, -1, -1); - } - - if ((random() % 2048) <= 5) { - sparksCreate(rooms[0], NULL, &pad.pos, &up, &pad.up, SPARKTYPE_ENVIRONMENTAL1); - sparksCreate(rooms[0], NULL, &pad.pos, &up, &pad.up, SPARKTYPE_ENVIRONMENTAL3); - propsnd0f0939f8(NULL, NULL, propsndGetRandomSparkSound(), -1, -1, 0, 0, 0, &pad.pos, -1, rooms, -1, -1, -1, -1); - } - break; - case PADEFFECT_SPLASH: - case PADEFFECT_SMOKE: - type = SMOKETYPE_WATER; - - switch (effect->effect) { - case PADEFFECT_SPLASH: - type = SMOKETYPE_WATER; - break; - case PADEFFECT_SMOKE: - case PADEFFECT_OUTROSMOKE: - type = SMOKETYPE_DEBRIS; - break; - } - - rooms2[0] = pad.room; - rooms2[1] = -1; - - padUnpack(effect->pad, PADFIELD_POS | PADFIELD_UP, &pad); - smokeCreateAtPadEffect(effect, &pad.pos, rooms2, type); - break; - case PADEFFECT_01: - break; - } - } - } - } -} - void propSetPerimEnabled(struct prop *prop, s32 enable) { if (prop->type == PROPTYPE_CHR) { @@ -2796,11 +2722,6 @@ bool propIsOfCdType(struct prop *prop, u32 types) result = false; } - if ((types & CDTYPE_OBJSNOTSAFEORHELI) - && (obj->type == OBJTYPE_SAFE || obj->type == OBJTYPE_HELI)) { - result = false; - } - if ((obj->flags & OBJFLAG_PATHBLOCKER)) { if ((types & CDTYPE_PATHBLOCKER) == 0) { result = false; diff --git a/src/game/propobj.c b/src/game/propobj.c index 537df3772..80b0bc431 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -105,23 +105,15 @@ u32 g_PlayersDetonatingMines = 0x00000000; s32 g_NextWeaponSlot = 0; s32 g_NextHatSlot = 0; struct linkliftdoorobj *g_LiftDoors = NULL; -struct padlockeddoorobj *g_PadlockedDoors = NULL; -struct safeitemobj *g_SafeItems = NULL; -struct linksceneryobj *g_LinkedScenery = NULL; -struct blockedpathobj *g_BlockedPaths = NULL; struct prop *g_EmbedProp = NULL; s32 g_EmbedHitPart = 0; u32 g_EmbedSide = 0x00000000; s16 var8006993c[3] = {0}; u32 var80069944 = 0x00000000; -f32 g_CctvWaitScale = 1; -f32 g_CctvDamageRxScale = 1; f32 g_AutogunAccuracyScale = 1; f32 g_AutogunDamageTxScale = 1; f32 g_AutogunDamageRxScale = 1; f32 g_AmmoQuantityScale = 1; -struct padeffectobj *g_PadEffects = NULL; -s32 g_LastPadEffectIndex = -1; struct autogunobj *g_ThrownLaptops = NULL; struct beam *g_ThrownLaptopBeams = NULL; s32 g_MaxThrownLaptops = 0; @@ -209,47 +201,6 @@ bool doorCallLift(struct prop *doorprop, bool allowclose) return handled; } -bool doorIsPadlockFree(struct doorobj *door) -{ - if (door->base.hidden & OBJHFLAG_PADLOCKEDDOOR) { - struct padlockeddoorobj *padlockeddoor = g_PadlockedDoors; - - while (padlockeddoor) { - if (door == padlockeddoor->door - && padlockeddoor->lock - && padlockeddoor->lock->prop - && objIsHealthy(padlockeddoor->lock)) { - return false; - } - - padlockeddoor = padlockeddoor->next; - } - } - - return true; -} - -bool objCanPickupFromSafe(struct defaultobj *obj) -{ - if (obj->flags2 & OBJFLAG2_LINKEDTOSAFE) { - struct safeitemobj *link = g_SafeItems; - - while (link) { - struct defaultobj *loopobj = link->item; - - if (obj == link->item && link->door && link->door->base.prop) { - if (link->door->frac <= 0.5f * link->door->maxfrac) { - return false; - } - } - - link = link->next; - } - } - - return true; -} - f32 objGetLocalXMin(struct modelrodata_bbox *bbox) { return bbox->xmin; @@ -7764,11 +7715,6 @@ void doorTick(struct prop *doorprop) } } - // Open fall-away doors if padlock free (GE only) - if (door->doortype == DOORTYPE_FALLAWAY && doorIsClosed(door) && doorIsPadlockFree(door)) { - doorsActivate(doorprop, false); - } - // Update frac if (door->lastcalc60 < g_Vars.lvframe60 || g_Vars.lvupdate240 == 0) { doorsCalcFrac(door); @@ -8275,281 +8221,6 @@ void escastepTick(struct prop *prop) } } -void cctvTick(struct prop *camprop) -{ - struct cctvobj *camera = (struct cctvobj *)camprop->obj; - struct defaultobj *obj = camprop->obj; - f32 yaw; - struct prop *playerprop; - f32 xdist; - f32 ydist; - f32 zdist; - bool canseeplayer = true; - - playerprop = g_Vars.bond->prop; - - // Check distance - xdist = playerprop->pos.x - camprop->pos.x; - ydist = playerprop->pos.y - camprop->pos.y; - zdist = playerprop->pos.z - camprop->pos.z; - - yaw = camera->toleft ? camera->yleft : camera->yright; - - if (camera->maxdist > 0) { - if (xdist * xdist + ydist * ydist + zdist * zdist > camera->maxdist * camera->maxdist) { - canseeplayer = false; - } - } - - if (g_Vars.bondvisible == false - || (obj->flags & OBJFLAG_CAMERA_DISABLED) - || (playerprop->chr->hidden & CHRHFLAG_CLOAKED)) { - canseeplayer = false; - } - - // Check horizontal angle - if (canseeplayer) { - f32 angle = atan2f(xdist, zdist); - f32 yrot = camera->yrot; - f32 finalangle; - - if (yrot < 0) { - yrot += M_BADTAU; - } else if (yrot >= M_BADTAU) { - yrot -= M_BADTAU; - } - - yrot += camera->yzero; - - if (yrot >= M_BADTAU) { - yrot -= M_BADTAU; - } - - finalangle = angle - yrot; - - if (angle < yrot) { - finalangle += M_BADTAU; - } - - finalangle -= M_BADPI; - - if (finalangle < 0) { - finalangle += M_BADTAU; - } - - if (finalangle > M_BADPI) { - finalangle -= M_BADTAU; - } - - if (finalangle > 0.7852731347084f || finalangle < -0.7852731347084f) { - canseeplayer = false; - } - } - - // Check vertical angle - if (canseeplayer) { - f32 angle = atan2f(ydist, sqrtf(xdist * xdist + zdist * zdist)); - f32 finalangle = angle - camera->xzero; - - if (angle < camera->xzero) { - finalangle = angle - camera->xzero + M_BADTAU; - } - - if (finalangle > M_BADTAU) { - finalangle -= M_BADTAU; - } - - if (finalangle > M_BADPI) { - finalangle -= M_BADTAU; - } - - if (finalangle); - - if (finalangle > 0.7852731347084f || finalangle < -0.7852731347084f) { - canseeplayer = false; - } - } - - // Check line of sight - if (canseeplayer) { - playerSetPerimEnabled(playerprop, false); - - if (!cdTestLos05(&camprop->pos, camprop->rooms, &playerprop->pos, playerprop->rooms, - CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER | CDTYPE_BG | CDTYPE_AIOPAQUE, - GEOFLAG_BLOCK_SIGHT)) { - canseeplayer = false; - } - - playerSetPerimEnabled(playerprop, true); - } - - if (canseeplayer) { - obj->flags |= OBJFLAG_CAMERA_BONDINVIEW; - camera->seebondtime60 += g_Vars.lvupdate60; - - if (camera->seebondtime60 >= (s32)(TICKS(300) * g_CctvWaitScale)) { - alarmActivate(); - camera->seebondtime60 = 0; - } - } else { - obj->flags &= ~OBJFLAG_CAMERA_BONDINVIEW; - } - - // Update yaw - if (camera->yrot < yaw) { - f32 tmp = camera->yspeed * camera->yspeed * 764.06536865234f; - - if (camera->yrot >= yaw - tmp) { - camera->yspeed -= 0.00065439427271485f * g_Vars.lvupdate60freal; - - if (camera->yspeed < 0.00065439427271485f) { - camera->yspeed = 0.00065439427271485f; - } - } else if (camera->yspeed < camera->ymaxspeed) { - f32 newspeed = camera->yspeed + 0.00065439427271485f * g_Vars.lvupdate60freal; - - if (newspeed > camera->ymaxspeed) { - newspeed = camera->ymaxspeed; - } - - if (camera->yrot < yaw - newspeed * newspeed * 764.06536865234f) { - camera->yspeed = newspeed; - } - } - - camera->yrot += camera->yspeed * g_Vars.lvupdate60freal; - - if (camera->yrot >= yaw) { - camera->yrot = yaw; - camera->toleft = false; - camera->yspeed = 0; - } - } else { - f32 tmp = camera->yspeed * camera->yspeed * 764.06536865234f; - - if (camera->yrot <= yaw + tmp) { - camera->yspeed -= 0.00065439427271485f * g_Vars.lvupdate60freal; - - if (camera->yspeed < 0.00065439427271485f) { - camera->yspeed = 0.00065439427271485f; - } - } else if (camera->yspeed < camera->ymaxspeed) { - f32 newspeed = camera->yspeed + 0.00065439427271485f * g_Vars.lvupdate60freal; - - if (newspeed > camera->ymaxspeed) { - newspeed = camera->ymaxspeed; - } - - if (camera->yrot > yaw + newspeed * newspeed * 764.06536865234f) { - camera->yspeed = newspeed; - } - } - - camera->yrot -= camera->yspeed * g_Vars.lvupdate60freal; - - if (camera->yrot <= yaw) { - camera->yrot = yaw; - camera->toleft = true; - camera->yspeed = 0; - } - } -} - -void cctvInitMatrices(struct prop *prop, Mtxf *mtx) -{ - struct cctvobj *cctv = (struct cctvobj *)prop->obj; - struct model *model = cctv->base.model; - Mtxf *matrices = model->matrices; - union modelrodata *rodata = modelGetPartRodata(model->filedata, MODELPART_CCTV_CASING); - struct coord sp64; - Mtxf sp24; - f32 yrot = cctv->yrot; - - if (yrot < 0) { - yrot += M_BADTAU; - } else if (yrot >= M_BADTAU) { - yrot -= M_BADTAU; - } - - mtx4LoadYRotation(yrot, &sp24); - mtx4MultMtx4(&sp24, &cctv->camrotm, &matrices[1]); - - sp64.x = rodata->position.pos.x; - sp64.y = rodata->position.pos.y; - sp64.z = rodata->position.pos.z; - - mtx4TransformVecInPlace(mtx, &sp64); - mtx4SetTranslation(&sp64, &matrices[1]); - mtx00015be0(camGetWorldToScreenMtxf(), &matrices[1]); -} - -void fanTick(struct prop *prop) -{ - struct defaultobj *obj = (struct defaultobj *)prop->obj; - struct fanobj *fan = (struct fanobj *)prop->obj; - - // If activated, toggle the power state - if (obj->hidden & (OBJHFLAG_ACTIVATED_BY_BOND | OBJHFLAG_ACTIVATED_BY_COOP)) { - if (fan->on == true) { - fan->on = false; - obj->hidden &= ~(OBJHFLAG_ACTIVATED_BY_BOND | OBJHFLAG_ACTIVATED_BY_COOP); - } else { - fan->on = true; - obj->hidden &= ~(OBJHFLAG_ACTIVATED_BY_BOND | OBJHFLAG_ACTIVATED_BY_COOP); - } - } - - // Adjust fan speed - if (fan->on == true) { - // Accelerating - fan->yspeed += fan->yaccel * g_Vars.lvupdate60freal; - - if (fan->yspeed > fan->ymaxspeed) { - fan->yspeed = fan->ymaxspeed; - } - } else if (fan->yspeed > 0) { - // Decelerating - s32 i; - - for (i = 0; i < g_Vars.lvupdate240; i++) { - fan->yspeed -= fan->yaccel * 0.2f; - } - - if (fan->yspeed <= fan->ymaxspeed * 0.01f) { - fan->yspeed = 0; - } - } - - // Rotate - if (fan->yspeed > 0) { - fan->yrot += fan->yspeed * g_Vars.lvupdate60freal; - - while (fan->yrot >= 1.5705462694168f) { // almost BADDEG2RAD(90) - fan->yrot -= 1.5705462694168f; - } - - fan->yrotprev = fan->yrot; - } -} - -void fanUpdateModel(struct prop *prop) -{ - struct fanobj *fan = (struct fanobj *) prop->obj; - Mtxf sp6c; - f32 sp48[3][3]; - f32 sp24[3][3]; - f32 angle = fan->yspeed * g_Vars.lvupdate60freal; - - while (angle >= M_BADTAU) { - angle -= M_BADTAU; - } - - mtx4LoadYRotation(angle, &sp6c); - mtx4ToMtx3(&sp6c, sp48); - mtx00016140(fan->base.realrot, sp48, sp24); - mtx3Copy(sp24, fan->base.realrot); -} - void autogunTick(struct prop *prop) { struct autogunobj *autogun; @@ -9398,39 +9069,6 @@ void weaponInitMatrices(struct prop *prop) } } -/** - * This function relates to hanging monitor objects, but PD has none of these. - * There is no hanging monitor model in the ROM either, so it's impossible to - * know which model node types the below part numbers refer to. The only clue is - * that the rodata starts with a coordinate. There's at least 3 node types that - * fit this criteria. - * - * An assumption has been made these are position node types. - */ -void hangingmonitorInitMatrices(struct prop *prop) -{ - struct defaultobj *obj = prop->obj; - struct model *model = obj->model; - Mtxf *matrices = model->matrices; - union modelrodata *rodata; - - rodata = modelGetPartRodata(model->filedata, MODELPART_0000); - mtx4LoadTranslation(&rodata->position.pos, &matrices[1]); - mtx00015be0(matrices, &matrices[1]); - - rodata = modelGetPartRodata(model->filedata, MODELPART_0001); - mtx4LoadTranslation(&rodata->position.pos, &matrices[2]); - mtx00015be0(matrices, &matrices[2]); - - rodata = modelGetPartRodata(model->filedata, MODELPART_0002); - mtx4LoadTranslation(&rodata->position.pos, &matrices[3]); - mtx00015be0(matrices, &matrices[3]); - - rodata = modelGetPartRodata(model->filedata, MODELPART_0003); - mtx4LoadTranslation(&rodata->position.pos, &matrices[4]); - mtx00015be0(matrices, &matrices[4]); -} - void objInitMatrices(struct prop *prop) { struct defaultobj *obj = prop->obj; @@ -9443,14 +9081,10 @@ void objInitMatrices(struct prop *prop) mtx4SetTranslation(&prop->pos, &mtx); mtx00015be4(camGetWorldToScreenMtxf(), &mtx, obj->model->matrices); - if (obj->type == OBJTYPE_CCTV) { - cctvInitMatrices(prop, &mtx); - } else if (obj->type == OBJTYPE_AUTOGUN) { + if (obj->type == OBJTYPE_AUTOGUN) { autogunInitMatrices(prop, &mtx); } else if (obj->type == OBJTYPE_WEAPON) { weaponInitMatrices(prop); - } else if (obj->type == OBJTYPE_HANGINGMONITORS) { - hangingmonitorInitMatrices(prop); } else { if (obj->model->filedata->nummatrices >= 2) { struct modelrenderdata thing = {NULL, 1, 3}; @@ -9825,10 +9459,6 @@ s32 objTickPlayer(struct prop *prop) if (obj->type == OBJTYPE_DOOR) { doorTick(prop); - } else if (obj->type == OBJTYPE_CCTV && (obj->flags & OBJFLAG_DEACTIVATED) == 0) { - cctvTick(prop); - } else if (obj->type == OBJTYPE_FAN) { - fanTick(prop); } else if (obj->type == OBJTYPE_AUTOGUN && (obj->flags & OBJFLAG_DEACTIVATED) == 0) { autogunTick(prop); } else if (obj->type == OBJTYPE_HOVERPROP) { @@ -9872,9 +9502,7 @@ s32 objTickPlayer(struct prop *prop) prop->flags |= PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONTHISSCREENTHISTICK; - if (obj->type == OBJTYPE_FAN) { - fanUpdateModel(prop); - } else if (obj->model->filedata->skel == &g_SkelDropship) { + if (obj->model->filedata->skel == &g_SkelDropship) { dropshipUpdateInterior(prop); } @@ -9942,9 +9570,6 @@ Gfx *propsRenderBeams(Gfx *gdl) if (obj->type == OBJTYPE_AUTOGUN) { struct autogunobj *autogun = (struct autogunobj *)prop->obj; gdl = beamRender(gdl, autogun->beam, true, false); - } else if (obj->type == OBJTYPE_CHOPPER) { - struct chopperobj *chopper = (struct chopperobj *)prop->obj; - gdl = beamRender(gdl, chopper->fireslotthing->beam, true, true); } } else if (prop->type == PROPTYPE_PLAYER) { if (prop->chr && playermgrGetPlayerNumByProp(prop) != g_Vars.currentplayernum) { @@ -9966,1931 +9591,6 @@ Gfx *propsRenderBeams(Gfx *gdl) return gdl; } -void tvscreenSetCmdlist(struct tvscreen *screen, u32 *cmdlist) -{ - screen->cmdlist = cmdlist; - screen->offset = 0; -} - -u32 g_TvCmdlist00[] = { - tvcmd_settexture(29), - tvcmd_setcolour(0x008000ff, 1), - tvcmd_scrollrely(-512, 80), - tvcmd_pause(120), - tvcmd_scrollrely(-256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(-128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(-512, 40), - tvcmd_pause(60), - tvcmd_scrollrely(-64, 30), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist01[] = { - tvcmd_setcolour(0x202020ff, 1), - tvcmd_settexture(28), - tvcmd_scrollrelx(2048, 120), - tvcmd_pause(120), - tvcmd_scaleabsx(256, 1), - tvcmd_scaleabsy(512, 60), - tvcmd_scrollrelx(-8192, 120), - tvcmd_pause(120), - tvcmd_scaleabsx(1024, 1), - tvcmd_scaleabsy(1024, 60), - tvcmd_scaleabsy(1024, 60), - tvcmd_scrollrelx(2048, 120), - tvcmd_pause(120), - tvcmd_scaleabsx(128, 1), - tvcmd_scaleabsy(2048, 60), - tvcmd_scaleabsy(1024, 120), - tvcmd_scrollrely(1024, 60), - tvcmd_scrollrelx(512, 120), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist02[] = { - tvcmd_setcolour(0x202020ff, 1), - tvcmd_settexture(28), - tvcmd_scaleabsx(128, 1), - tvcmd_scaleabsy(2048, 60), - tvcmd_scaleabsy(1024, 120), - tvcmd_scrollrely(1024, 10), - tvcmd_scrollrelx(512, 40), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist03[] = { - tvcmd_settexture(29), - tvcmd_setcolour(0x008000ff, 1), - tvcmd_scrollrely(-512, 80), - tvcmd_pause(120), - tvcmd_scrollrely(-256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(-128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(-512, 40), - tvcmd_pause(60), - tvcmd_scrollrely(-64, 30), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist15[] = { - tvcmd_settexture(50), - tvcmd_setcolour(0x008000fe, 1), - tvcmd_scrollrely(-512, 80), - tvcmd_pause(120), - tvcmd_scrollrely(-256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(-128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(-512, 40), - tvcmd_pause(60), - tvcmd_scrollrely(-64, 30), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist04[] = { - tvcmd_settexture(29), - tvcmd_setcolour(0x280000ff, 1), - tvcmd_scrollrely(512, 80), - tvcmd_pause(120), - tvcmd_scrollrely(256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(512, 40), - tvcmd_pause(60), - tvcmd_scrollrely(64, 30), - tvcmd_pause(120), - tvcmd_scrollrely(256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(128, 10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist05[] = { - tvcmd_settexture(29), - tvcmd_setcolour(0x003c00ff, 1), - tvcmd_scrollrely(512, 80), - tvcmd_pause(120), - tvcmd_scrollrely(128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(512, 40), - tvcmd_pause(60), - tvcmd_scrollrely(64, 30), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist06[] = { - tvcmd_settexture(30), - tvcmd_setcolour(0x404000ff, 1), - tvcmd_scrollrelx(640, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist07[] = { - tvcmd_settexture(30), - tvcmd_setcolour(0x004040ff, 1), - tvcmd_scrollrelx(640, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist08[] = { - tvcmd_settexture(30), - tvcmd_setcolour(0x008000ff, 1), - tvcmd_scrollrelx(-640, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist0F[] = { - tvcmd_settexture(49), - tvcmd_scaleabsx(512, 0), - tvcmd_scaleabsy(512, 0), - tvcmd_setcolour(0xdc2828ff, 60), - tvcmd_pause(60), - tvcmd_setcolour(0x323232ff, 10), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist10[] = { - tvcmd_settexture(49), - tvcmd_scaleabsx(512, 0), - tvcmd_scaleabsy(512, 0), - tvcmd_setcolour(0x32c832ff, 60), - tvcmd_pause(60), - tvcmd_setcolour(0x323232ff, 10), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist11[] = { - tvcmd_settexture(49), - tvcmd_scaleabsx(512, 0), - tvcmd_scaleabsy(512, 0), - tvcmd_setcolour(0x323232ff, 10), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist12[] = { - tvcmd_settexture(49), - tvcmd_scaleabsx(512, 0), - tvcmd_scaleabsy(512, 0), - tvcmd_setcolour(0xdc2828ff, 10), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist13[] = { - tvcmd_settexture(49), - tvcmd_scaleabsx(512, 0), - tvcmd_scaleabsy(512, 0), - tvcmd_setcolour(0x32c832ff, 10), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist16[] = { - tvcmd_settexture(51), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist17[] = { - tvcmd_settexture(72), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist18[] = { - tvcmd_settexture(73), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist19[] = { - tvcmd_settexture(74), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist1A[] = { - tvcmd_settexture(75), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist1B[] = { - tvcmd_settexture(76), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist1C[] = { - tvcmd_settexture(77), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist24[] = { - tvcmd_setcolour(0x000000ff, 1), - tvcmd_settexture(75), - tvcmd_pause(1), - tvcmd_setcolour(0xffffffff, 180), - tvcmd_pause(360), - tvcmd_setcolour(0x000000ff, 30), - tvcmd_pause(30), - tvcmd_settexture(76), - tvcmd_pause(1), - tvcmd_setcolour(0xffffffff, 180), - tvcmd_pause(360), - tvcmd_setcolour(0x000000ff, 30), - tvcmd_pause(30), - tvcmd_settexture(77), - tvcmd_pause(1), - tvcmd_setcolour(0xffffffff, 180), - tvcmd_pause(360), - tvcmd_setcolour(0x000000ff, 29), - tvcmd_pause(29), - tvcmd_restart(), -}; - -u32 g_TvCmdlist1D[] = { - tvcmd_settexture(78), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 var8006a4dc[] = { - tvcmd_settexture(52), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(5), - tvcmd_settexture(53), - tvcmd_pause(5), - tvcmd_settexture(54), - tvcmd_pause(5), - tvcmd_settexture(55), - tvcmd_pause(5), - tvcmd_restart(), -}; - -u32 var8006a52c[] = { - tvcmd_settexture(79), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(5), - tvcmd_settexture(80), - tvcmd_pause(5), - tvcmd_settexture(81), - tvcmd_pause(5), - tvcmd_settexture(82), - tvcmd_pause(5), - tvcmd_restart(), -}; - -u32 var8006a57c[] = { - tvcmd_settexture(56), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_settexture(57), - tvcmd_pause(10), - tvcmd_settexture(58), - tvcmd_pause(10), - tvcmd_settexture(59), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 var8006a5cc[] = { - tvcmd_settexture(60), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(15), - tvcmd_settexture(61), - tvcmd_pause(15), - tvcmd_restart(), -}; - -u32 var8006a5fc[] = { - tvcmd_settexture(62), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_settexture(63), - tvcmd_pause(10), - tvcmd_settexture(64), - tvcmd_pause(10), - tvcmd_settexture(65), - tvcmd_pause(10), - tvcmd_settexture(66), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 var8006a65c[] = { - tvcmd_settexture(67), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_settexture(68), - tvcmd_pause(10), - tvcmd_settexture(69), - tvcmd_pause(10), - tvcmd_settexture(70), - tvcmd_pause(10), - tvcmd_settexture(71), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist25[] = { - tvcmd_settexture(83), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist26[] = { - tvcmd_settexture(84), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist27[] = { - tvcmd_settexture(85), - tvcmd_setcolour(0x008000ff, 1), - tvcmd_scrollrely(-512, 80), - tvcmd_pause(80), - tvcmd_restart(), -}; - -u32 g_TvCmdlist28[] = { - tvcmd_settexture(85), - tvcmd_setcolour(0x0032c8ff, 1), - tvcmd_scrollrely(512, 80), - tvcmd_pause(80), - tvcmd_restart(), -}; - -u32 g_TvCmdlist29[] = { - tvcmd_settexture(86), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist2A[] = { - tvcmd_settexture(86), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_scrollrely(-512, 80), - tvcmd_pause(80), - tvcmd_restart(), -}; - -u32 g_TvCmdlist2B[] = { - tvcmd_settexture(87), - tvcmd_setcolour(0x008000ff, 1), - tvcmd_scrollrely(-512, 80), - tvcmd_pause(80), - tvcmd_restart(), -}; - -u32 g_TvCmdlist2C[] = { - tvcmd_settexture(87), - tvcmd_setcolour(0x0032c8ff, 1), - tvcmd_scrollrely(512, 80), - tvcmd_pause(80), - tvcmd_restart(), -}; - -u32 g_TvCmdlist2D[] = { - tvcmd_settexture(88), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist2E[] = { - tvcmd_settexture(89), - tvcmd_setcolour(0x007f00ff, 1), - tvcmd_scrollrely(-512, 80), - tvcmd_pause(120), - tvcmd_scrollrely(-256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(-128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(-512, 40), - tvcmd_pause(60), - tvcmd_scrollrely(-64, 30), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist2F[] = { - tvcmd_settexture(89), - tvcmd_setcolour(0xff7f00ff, 1), - tvcmd_scrollrely(512, 80), - tvcmd_pause(120), - tvcmd_scrollrely(256, 20), - tvcmd_pause(120), - tvcmd_scrollrely(128, 10), - tvcmd_pause(40), - tvcmd_scrollrely(512, 40), - tvcmd_pause(60), - tvcmd_scrollrely(64, 30), - tvcmd_pause(120), - tvcmd_restart(), -}; - -u32 g_TvCmdlist30[] = { - tvcmd_settexture(90), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist31[] = { - tvcmd_settexture(91), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist32[] = { - tvcmd_settexture(92), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist33[] = { - tvcmd_setcolour(0x000000ff, 1), - tvcmd_settexture(90), - tvcmd_pause(1), - tvcmd_setcolour(0xffffffff, 180), - tvcmd_pause(360), - tvcmd_setcolour(0x000000ff, 30), - tvcmd_pause(30), - tvcmd_settexture(91), - tvcmd_pause(1), - tvcmd_setcolour(0xffffffff, 180), - tvcmd_pause(360), - tvcmd_setcolour(0x000000ff, 30), - tvcmd_pause(30), - tvcmd_settexture(92), - tvcmd_pause(1), - tvcmd_setcolour(0xffffffff, 180), - tvcmd_pause(360), - tvcmd_setcolour(0x000000ff, 29), - tvcmd_pause(29), - tvcmd_restart(), -}; - -u32 g_TvCmdlist34[] = { - tvcmd_settexture(93), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist35[] = { - tvcmd_settexture(94), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist36[] = { - tvcmd_settexture(95), - tvcmd_setcolour(0xffffffff, 1), - tvcmd_pause(10), - tvcmd_restart(), -}; - -u32 g_TvCmdlist14[] = { - tvcmd_settexture(0), - tvcmd_setcolour(0x000000ff, 0), - tvcmd_yield(), - // flow on to next cmdlist -}; - -u32 var8006aaa0[] = { - tvcmd_scaleabsx(1024, 0), - tvcmd_scaleabsy(1024, 0), - tvcmd_pause(1), - tvcmd_scaleabsx(4096, 20), - tvcmd_scaleabsy(4096, 20), - tvcmd_pause(20), - tvcmd_restart(), -}; - -u32 var8006aae4[] = { - tvcmd_settexture(0), - tvcmd_scrollrelx(1024, 20), - tvcmd_pause(20), - tvcmd_scrollrely(1024, 20), - tvcmd_setcolour(0x000000ff, 20), - tvcmd_pause(20), - tvcmd_scaleabsx(512, 20), - tvcmd_scaleabsy(512, 20), - tvcmd_setcolour(0xffffffff, 20), - tvcmd_pause(20), - tvcmd_scaleabsx(1024, 20), - tvcmd_scaleabsy(1024, 20), - tvcmd_pause(20), - tvcmd_restart(), -}; - -void tvscreenSetImageByNum(struct tvscreen *screen, s32 imagenum) -{ - u32 *image = g_TvCmdlist00; - - switch (imagenum) { - case TVCMDLIST_01: image = g_TvCmdlist01; break; - case TVCMDLIST_02: image = g_TvCmdlist02; break; - case TVCMDLIST_03: image = g_TvCmdlist03; break; - case TVCMDLIST_04: image = g_TvCmdlist04; break; - case TVCMDLIST_05: image = g_TvCmdlist05; break; - case TVCMDLIST_06: image = g_TvCmdlist06; break; - case TVCMDLIST_07: image = g_TvCmdlist07; break; - case TVCMDLIST_08: image = g_TvCmdlist08; break; - case TVCMDLIST_09: image = g_TvCmdlist03; break; - case TVCMDLIST_0A: image = g_TvCmdlist03; break; - case TVCMDLIST_0B: image = g_TvCmdlist03; break; - case TVCMDLIST_0C: image = g_TvCmdlist03; break; - case TVCMDLIST_0D: image = g_TvCmdlist03; break; - case TVCMDLIST_0E: image = g_TvCmdlist03; break; - case TVCMDLIST_0F: image = g_TvCmdlist0F; break; - case TVCMDLIST_10: image = g_TvCmdlist10; break; - case TVCMDLIST_11: image = g_TvCmdlist11; break; - case TVCMDLIST_12: image = g_TvCmdlist12; break; - case TVCMDLIST_13: image = g_TvCmdlist13; break; - case TVCMDLIST_14: image = g_TvCmdlist14; break; - case TVCMDLIST_15: image = g_TvCmdlist15; break; - case TVCMDLIST_16: image = g_TvCmdlist16; break; - case TVCMDLIST_17: image = g_TvCmdlist17; break; - case TVCMDLIST_18: image = g_TvCmdlist18; break; - case TVCMDLIST_19: image = g_TvCmdlist19; break; - case TVCMDLIST_1A: image = g_TvCmdlist1A; break; - case TVCMDLIST_1B: image = g_TvCmdlist1B; break; - case TVCMDLIST_1C: image = g_TvCmdlist1C; break; - case TVCMDLIST_1D: image = g_TvCmdlist1D; break; - case TVCMDLIST_24: image = g_TvCmdlist24; break; - case TVCMDLIST_1E: image = g_TvCmdlist08; break; - case TVCMDLIST_1F: image = g_TvCmdlist08; break; - case TVCMDLIST_20: image = g_TvCmdlist08; break; - case TVCMDLIST_21: image = g_TvCmdlist08; break; - case TVCMDLIST_22: image = g_TvCmdlist08; break; - case TVCMDLIST_23: image = g_TvCmdlist08; break; - case TVCMDLIST_25: image = g_TvCmdlist25; break; - case TVCMDLIST_26: image = g_TvCmdlist26; break; - case TVCMDLIST_27: image = g_TvCmdlist27; break; - case TVCMDLIST_28: image = g_TvCmdlist28; break; - case TVCMDLIST_29: image = g_TvCmdlist29; break; - case TVCMDLIST_2A: image = g_TvCmdlist2A; break; - case TVCMDLIST_2B: image = g_TvCmdlist2B; break; - case TVCMDLIST_2C: image = g_TvCmdlist2C; break; - case TVCMDLIST_2D: image = g_TvCmdlist2D; break; - case TVCMDLIST_2E: image = g_TvCmdlist2E; break; - case TVCMDLIST_2F: image = g_TvCmdlist2F; break; - case TVCMDLIST_30: image = g_TvCmdlist30; break; - case TVCMDLIST_31: image = g_TvCmdlist31; break; - case TVCMDLIST_32: image = g_TvCmdlist32; break; - case TVCMDLIST_33: image = g_TvCmdlist33; break; - case TVCMDLIST_34: image = g_TvCmdlist34; break; - case TVCMDLIST_35: image = g_TvCmdlist35; break; - case TVCMDLIST_36: image = g_TvCmdlist36; break; - case TVCMDLIST_00: - break; - } - - tvscreenSetCmdlist(screen, image); -} - -void tvscreenSetTexture(struct tvscreen *screen, s32 texturenum) -{ - screen->tconfig = (struct textureconfig *)texturenum; -} - -#if MATCHING -GLOBAL_ASM( -glabel tvscreenRender -.late_rodata -glabel var7f1aa7cc -.word 0x40c907a9 -glabel var7f1aa7d0 -.word 0x38c907a9 -glabel var7f1aa7d4 -.word tvscreenRender+0xec # f07fce4 -glabel var7f1aa7d8 -.word tvscreenRender+0x100 # f07fcf8 -glabel var7f1aa7dc -.word tvscreenRender+0x170 # f07fd68 -glabel var7f1aa7e0 -.word tvscreenRender+0x1e0 # f07fdd8 -glabel var7f1aa7e4 -.word tvscreenRender+0x24c # f07fe44 -glabel var7f1aa7e8 -.word tvscreenRender+0x2b8 # f07feb0 -glabel var7f1aa7ec -.word tvscreenRender+0x324 # f07ff1c -glabel var7f1aa7f0 -.word tvscreenRender+0x390 # f07ff88 -glabel var7f1aa7f4 -.word tvscreenRender+0x3bc # f07ffb4 -glabel var7f1aa7f8 -.word tvscreenRender+0x408 # f080000 -glabel var7f1aa7fc -.word tvscreenRender+0x428 # f080020 -glabel var7f1aa800 -.word tvscreenRender+0x47c # f080074 -glabel var7f1aa804 -.word tvscreenRender+0x484 # f08007c -glabel var7f1aa808 -.word tvscreenRender+0x48c # f080084 -glabel var7f1aa80c -.word tvscreenRender+0x524 # f08011c -glabel var7f1aa810 -.word tvscreenRender+0x548 # f080140 -glabel var7f1aa814 -.word 0x38c907a9 -glabel var7f1aa818 -.word 0x38c907a9 -glabel var7f1aa81c -.word 0x38c907a9 -glabel var7f1aa820 -.word 0x3fc907a9 -glabel var7f1aa824 -.word 0x3fb50481 -.text -/* f07fbf8: 27bdff48 */ addiu $sp,$sp,-184 -/* f07fbfc: afb10048 */ sw $s1,0x48($sp) -/* f07fc00: afb00044 */ sw $s0,0x44($sp) -/* f07fc04: 00c08025 */ or $s0,$a2,$zero -/* f07fc08: 00a08825 */ or $s1,$a1,$zero -/* f07fc0c: afbf004c */ sw $ra,0x4c($sp) -/* f07fc10: f7ba0038 */ sdc1 $f26,0x38($sp) -/* f07fc14: f7b80030 */ sdc1 $f24,0x30($sp) -/* f07fc18: f7b60028 */ sdc1 $f22,0x28($sp) -/* f07fc1c: f7b40020 */ sdc1 $f20,0x20($sp) -/* f07fc20: afa400b8 */ sw $a0,0xb8($sp) -/* f07fc24: 10a0035d */ beqz $a1,.L0f08099c -/* f07fc28: afa700c4 */ sw $a3,0xc4($sp) -/* f07fc2c: 94ae0000 */ lhu $t6,0x0($a1) -/* f07fc30: 24010018 */ addiu $at,$zero,0x18 -/* f07fc34: 31cf00ff */ andi $t7,$t6,0xff -/* f07fc38: 55e10359 */ bnel $t7,$at,.L0f0809a0 -/* f07fc3c: 8fbf004c */ lw $ra,0x4c($sp) -/* f07fc40: 0fc59e59 */ jal gfxAllocateVertices -/* f07fc44: 24040004 */ addiu $a0,$zero,0x4 -/* f07fc48: afa200b4 */ sw $v0,0xb4($sp) -/* f07fc4c: 0fc59e73 */ jal gfxAllocateColours -/* f07fc50: 24040001 */ addiu $a0,$zero,0x1 -/* f07fc54: 8fb800c4 */ lw $t8,0xc4($sp) -/* f07fc58: afa200b0 */ sw $v0,0xb0($sp) -/* f07fc5c: 8fa400b8 */ lw $a0,0xb8($sp) -/* f07fc60: 27190008 */ addiu $t9,$t8,0x8 -/* f07fc64: afb900c4 */ sw $t9,0xc4($sp) -/* f07fc68: afb800ac */ sw $t8,0xac($sp) -/* f07fc6c: 8e290004 */ lw $t1,0x4($s1) -/* f07fc70: 02202825 */ or $a1,$s1,$zero -/* f07fc74: 0c006a87 */ jal modelGetNodeRwData -/* f07fc78: afa900a8 */ sw $t1,0xa8($sp) -/* f07fc7c: 3c017f1b */ lui $at,%hi(var7f1aa7cc) -/* f07fc80: c43aa7cc */ lwc1 $f26,%lo(var7f1aa7cc)($at) -/* f07fc84: 3c013a80 */ lui $at,0x3a80 -/* f07fc88: 4481c000 */ mtc1 $at,$f24 -/* f07fc8c: 3c013f80 */ lui $at,0x3f80 -/* f07fc90: 4481a000 */ mtc1 $at,$f20 -/* f07fc94: 3c017f1b */ lui $at,%hi(var7f1aa7d0) -/* f07fc98: 3c06800a */ lui $a2,%hi(g_Vars) -/* f07fc9c: 4480b000 */ mtc1 $zero,$f22 -/* f07fca0: afa200a4 */ sw $v0,0xa4($sp) -/* f07fca4: 00008825 */ or $s1,$zero,$zero -/* f07fca8: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars) -/* f07fcac: c422a7d0 */ lwc1 $f2,%lo(var7f1aa7d0)($at) -/* f07fcb0: 96020004 */ lhu $v0,0x4($s0) -.L0f07fcb4: -/* f07fcb4: 8e0a0000 */ lw $t2,0x0($s0) -/* f07fcb8: 00025880 */ sll $t3,$v0,0x2 -/* f07fcbc: 014b1821 */ addu $v1,$t2,$t3 -/* f07fcc0: 8c6c0000 */ lw $t4,0x0($v1) -/* f07fcc4: 2d810010 */ sltiu $at,$t4,0x10 -/* f07fcc8: 10200139 */ beqz $at,.L0f0801b0 -/* f07fccc: 000c6080 */ sll $t4,$t4,0x2 -/* f07fcd0: 3c017f1b */ lui $at,%hi(var7f1aa7d4) -/* f07fcd4: 002c0821 */ addu $at,$at,$t4 -/* f07fcd8: 8c2ca7d4 */ lw $t4,%lo(var7f1aa7d4)($at) -/* f07fcdc: 01800008 */ jr $t4 -/* f07fce0: 00000000 */ nop -/* f07fce4: 244d0001 */ addiu $t5,$v0,0x1 -/* f07fce8: e6160040 */ swc1 $f22,0x40($s0) -/* f07fcec: e6160054 */ swc1 $f22,0x54($s0) -/* f07fcf0: 1000012f */ b .L0f0801b0 -/* f07fcf4: a60d0004 */ sh $t5,0x4($s0) -/* f07fcf8: e616003c */ swc1 $f22,0x3c($s0) -/* f07fcfc: 8c620008 */ lw $v0,0x8($v1) -/* f07fd00: 54400004 */ bnezl $v0,.L0f07fd14 -/* f07fd04: 44822000 */ mtc1 $v0,$f4 -/* f07fd08: 1000000a */ b .L0f07fd34 -/* f07fd0c: e6140040 */ swc1 $f20,0x40($s0) -/* f07fd10: 44822000 */ mtc1 $v0,$f4 -.L0f07fd14: -/* f07fd14: 3c014f80 */ lui $at,0x4f80 -/* f07fd18: 04410004 */ bgez $v0,.L0f07fd2c -/* f07fd1c: 468021a0 */ cvt.s.w $f6,$f4 -/* f07fd20: 44814000 */ mtc1 $at,$f8 -/* f07fd24: 00000000 */ nop -/* f07fd28: 46083180 */ add.s $f6,$f6,$f8 -.L0f07fd2c: -/* f07fd2c: 4606a283 */ div.s $f10,$f20,$f6 -/* f07fd30: e60a0040 */ swc1 $f10,0x40($s0) -.L0f07fd34: -/* f07fd34: c6000038 */ lwc1 $f0,0x38($s0) -/* f07fd38: 960f0004 */ lhu $t7,0x4($s0) -/* f07fd3c: e6000044 */ swc1 $f0,0x44($s0) -/* f07fd40: 8c6e0004 */ lw $t6,0x4($v1) -/* f07fd44: 25f80003 */ addiu $t8,$t7,0x3 -/* f07fd48: a6180004 */ sh $t8,0x4($s0) -/* f07fd4c: 448e9000 */ mtc1 $t6,$f18 -/* f07fd50: 00000000 */ nop -/* f07fd54: 46809120 */ cvt.s.w $f4,$f18 -/* f07fd58: 46182202 */ mul.s $f8,$f4,$f24 -/* f07fd5c: 46080180 */ add.s $f6,$f0,$f8 -/* f07fd60: 10000113 */ b .L0f0801b0 -/* f07fd64: e6060048 */ swc1 $f6,0x48($s0) -/* f07fd68: e6160050 */ swc1 $f22,0x50($s0) -/* f07fd6c: 8c620008 */ lw $v0,0x8($v1) -/* f07fd70: 54400004 */ bnezl $v0,.L0f07fd84 -/* f07fd74: 44825000 */ mtc1 $v0,$f10 -/* f07fd78: 1000000a */ b .L0f07fda4 -/* f07fd7c: e6140054 */ swc1 $f20,0x54($s0) -/* f07fd80: 44825000 */ mtc1 $v0,$f10 -.L0f07fd84: -/* f07fd84: 3c014f80 */ lui $at,0x4f80 -/* f07fd88: 04410004 */ bgez $v0,.L0f07fd9c -/* f07fd8c: 468054a0 */ cvt.s.w $f18,$f10 -/* f07fd90: 44812000 */ mtc1 $at,$f4 -/* f07fd94: 00000000 */ nop -/* f07fd98: 46049480 */ add.s $f18,$f18,$f4 -.L0f07fd9c: -/* f07fd9c: 4612a203 */ div.s $f8,$f20,$f18 -/* f07fda0: e6080054 */ swc1 $f8,0x54($s0) -.L0f07fda4: -/* f07fda4: c600004c */ lwc1 $f0,0x4c($s0) -/* f07fda8: 96090004 */ lhu $t1,0x4($s0) -/* f07fdac: e6000058 */ swc1 $f0,0x58($s0) -/* f07fdb0: 8c790004 */ lw $t9,0x4($v1) -/* f07fdb4: 252a0003 */ addiu $t2,$t1,0x3 -/* f07fdb8: a60a0004 */ sh $t2,0x4($s0) -/* f07fdbc: 44993000 */ mtc1 $t9,$f6 -/* f07fdc0: 00000000 */ nop -/* f07fdc4: 468032a0 */ cvt.s.w $f10,$f6 -/* f07fdc8: 46185102 */ mul.s $f4,$f10,$f24 -/* f07fdcc: 46040480 */ add.s $f18,$f0,$f4 -/* f07fdd0: 100000f7 */ b .L0f0801b0 -/* f07fdd4: e612005c */ swc1 $f18,0x5c($s0) -/* f07fdd8: e616003c */ swc1 $f22,0x3c($s0) -/* f07fddc: 8c620008 */ lw $v0,0x8($v1) -/* f07fde0: 54400004 */ bnezl $v0,.L0f07fdf4 -/* f07fde4: 44824000 */ mtc1 $v0,$f8 -/* f07fde8: 1000000a */ b .L0f07fe14 -/* f07fdec: e6140040 */ swc1 $f20,0x40($s0) -/* f07fdf0: 44824000 */ mtc1 $v0,$f8 -.L0f07fdf4: -/* f07fdf4: 3c014f80 */ lui $at,0x4f80 -/* f07fdf8: 04410004 */ bgez $v0,.L0f07fe0c -/* f07fdfc: 468041a0 */ cvt.s.w $f6,$f8 -/* f07fe00: 44815000 */ mtc1 $at,$f10 -/* f07fe04: 00000000 */ nop -/* f07fe08: 460a3180 */ add.s $f6,$f6,$f10 -.L0f07fe0c: -/* f07fe0c: 4606a103 */ div.s $f4,$f20,$f6 -/* f07fe10: e6040040 */ swc1 $f4,0x40($s0) -.L0f07fe14: -/* f07fe14: c6120038 */ lwc1 $f18,0x38($s0) -/* f07fe18: 960c0004 */ lhu $t4,0x4($s0) -/* f07fe1c: e6120044 */ swc1 $f18,0x44($s0) -/* f07fe20: 8c6b0004 */ lw $t3,0x4($v1) -/* f07fe24: 258d0003 */ addiu $t5,$t4,0x3 -/* f07fe28: a60d0004 */ sh $t5,0x4($s0) -/* f07fe2c: 448b4000 */ mtc1 $t3,$f8 -/* f07fe30: 00000000 */ nop -/* f07fe34: 468042a0 */ cvt.s.w $f10,$f8 -/* f07fe38: 46185182 */ mul.s $f6,$f10,$f24 -/* f07fe3c: 100000dc */ b .L0f0801b0 -/* f07fe40: e6060048 */ swc1 $f6,0x48($s0) -/* f07fe44: e6160050 */ swc1 $f22,0x50($s0) -/* f07fe48: 8c620008 */ lw $v0,0x8($v1) -/* f07fe4c: 54400004 */ bnezl $v0,.L0f07fe60 -/* f07fe50: 44822000 */ mtc1 $v0,$f4 -/* f07fe54: 1000000a */ b .L0f07fe80 -/* f07fe58: e6140054 */ swc1 $f20,0x54($s0) -/* f07fe5c: 44822000 */ mtc1 $v0,$f4 -.L0f07fe60: -/* f07fe60: 3c014f80 */ lui $at,0x4f80 -/* f07fe64: 04410004 */ bgez $v0,.L0f07fe78 -/* f07fe68: 468024a0 */ cvt.s.w $f18,$f4 -/* f07fe6c: 44814000 */ mtc1 $at,$f8 -/* f07fe70: 00000000 */ nop -/* f07fe74: 46089480 */ add.s $f18,$f18,$f8 -.L0f07fe78: -/* f07fe78: 4612a283 */ div.s $f10,$f20,$f18 -/* f07fe7c: e60a0054 */ swc1 $f10,0x54($s0) -.L0f07fe80: -/* f07fe80: c606004c */ lwc1 $f6,0x4c($s0) -/* f07fe84: 960f0004 */ lhu $t7,0x4($s0) -/* f07fe88: e6060058 */ swc1 $f6,0x58($s0) -/* f07fe8c: 8c6e0004 */ lw $t6,0x4($v1) -/* f07fe90: 25f80003 */ addiu $t8,$t7,0x3 -/* f07fe94: a6180004 */ sh $t8,0x4($s0) -/* f07fe98: 448e2000 */ mtc1 $t6,$f4 -/* f07fe9c: 00000000 */ nop -/* f07fea0: 46802220 */ cvt.s.w $f8,$f4 -/* f07fea4: 46184482 */ mul.s $f18,$f8,$f24 -/* f07fea8: 100000c1 */ b .L0f0801b0 -/* f07feac: e612005c */ swc1 $f18,0x5c($s0) -/* f07feb0: e6160014 */ swc1 $f22,0x14($s0) -/* f07feb4: 8c620008 */ lw $v0,0x8($v1) -/* f07feb8: 54400004 */ bnezl $v0,.L0f07fecc -/* f07febc: 44825000 */ mtc1 $v0,$f10 -/* f07fec0: 1000000a */ b .L0f07feec -/* f07fec4: e6140018 */ swc1 $f20,0x18($s0) -/* f07fec8: 44825000 */ mtc1 $v0,$f10 -.L0f07fecc: -/* f07fecc: 3c014f80 */ lui $at,0x4f80 -/* f07fed0: 04410004 */ bgez $v0,.L0f07fee4 -/* f07fed4: 468051a0 */ cvt.s.w $f6,$f10 -/* f07fed8: 44812000 */ mtc1 $at,$f4 -/* f07fedc: 00000000 */ nop -/* f07fee0: 46043180 */ add.s $f6,$f6,$f4 -.L0f07fee4: -/* f07fee4: 4606a203 */ div.s $f8,$f20,$f6 -/* f07fee8: e6080018 */ swc1 $f8,0x18($s0) -.L0f07feec: -/* f07feec: c6120010 */ lwc1 $f18,0x10($s0) -/* f07fef0: 96090004 */ lhu $t1,0x4($s0) -/* f07fef4: e612001c */ swc1 $f18,0x1c($s0) -/* f07fef8: 8c790004 */ lw $t9,0x4($v1) -/* f07fefc: 252a0003 */ addiu $t2,$t1,0x3 -/* f07ff00: a60a0004 */ sh $t2,0x4($s0) -/* f07ff04: 44995000 */ mtc1 $t9,$f10 -/* f07ff08: 00000000 */ nop -/* f07ff0c: 46805120 */ cvt.s.w $f4,$f10 -/* f07ff10: 46182182 */ mul.s $f6,$f4,$f24 -/* f07ff14: 100000a6 */ b .L0f0801b0 -/* f07ff18: e6060020 */ swc1 $f6,0x20($s0) -/* f07ff1c: e6160028 */ swc1 $f22,0x28($s0) -/* f07ff20: 8c620008 */ lw $v0,0x8($v1) -/* f07ff24: 54400004 */ bnezl $v0,.L0f07ff38 -/* f07ff28: 44824000 */ mtc1 $v0,$f8 -/* f07ff2c: 1000000a */ b .L0f07ff58 -/* f07ff30: e614002c */ swc1 $f20,0x2c($s0) -/* f07ff34: 44824000 */ mtc1 $v0,$f8 -.L0f07ff38: -/* f07ff38: 3c014f80 */ lui $at,0x4f80 -/* f07ff3c: 04410004 */ bgez $v0,.L0f07ff50 -/* f07ff40: 468044a0 */ cvt.s.w $f18,$f8 -/* f07ff44: 44815000 */ mtc1 $at,$f10 -/* f07ff48: 00000000 */ nop -/* f07ff4c: 460a9480 */ add.s $f18,$f18,$f10 -.L0f07ff50: -/* f07ff50: 4612a103 */ div.s $f4,$f20,$f18 -/* f07ff54: e604002c */ swc1 $f4,0x2c($s0) -.L0f07ff58: -/* f07ff58: c6060024 */ lwc1 $f6,0x24($s0) -/* f07ff5c: 960c0004 */ lhu $t4,0x4($s0) -/* f07ff60: e6060030 */ swc1 $f6,0x30($s0) -/* f07ff64: 8c6b0004 */ lw $t3,0x4($v1) -/* f07ff68: 258d0003 */ addiu $t5,$t4,0x3 -/* f07ff6c: a60d0004 */ sh $t5,0x4($s0) -/* f07ff70: 448b4000 */ mtc1 $t3,$f8 -/* f07ff74: 00000000 */ nop -/* f07ff78: 468042a0 */ cvt.s.w $f10,$f8 -/* f07ff7c: 46185482 */ mul.s $f18,$f10,$f24 -/* f07ff80: 1000008b */ b .L0f0801b0 -/* f07ff84: e6120034 */ swc1 $f18,0x34($s0) -/* f07ff88: 02002025 */ or $a0,$s0,$zero -/* f07ff8c: 0fc1fefc */ jal tvscreenSetTexture -/* f07ff90: 8c650004 */ lw $a1,0x4($v1) -/* f07ff94: 960e0004 */ lhu $t6,0x4($s0) -/* f07ff98: 3c017f1b */ lui $at,%hi(var7f1aa814) -/* f07ff9c: 3c06800a */ lui $a2,%hi(g_Vars) -/* f07ffa0: 25cf0002 */ addiu $t7,$t6,0x2 -/* f07ffa4: a60f0004 */ sh $t7,0x4($s0) -/* f07ffa8: c422a814 */ lwc1 $f2,%lo(var7f1aa814)($at) -/* f07ffac: 10000080 */ b .L0f0801b0 -/* f07ffb0: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars) -/* f07ffb4: 86020006 */ lh $v0,0x6($s0) -/* f07ffb8: 0442000e */ bltzl $v0,.L0f07fff4 -/* f07ffbc: 8c6c0004 */ lw $t4,0x4($v1) -/* f07ffc0: 8cd80038 */ lw $t8,0x38($a2) -/* f07ffc4: 0058c823 */ subu $t9,$v0,$t8 -/* f07ffc8: a6190006 */ sh $t9,0x6($s0) -/* f07ffcc: 86090006 */ lh $t1,0x6($s0) -/* f07ffd0: 05220004 */ bltzl $t1,.L0f07ffe4 -/* f07ffd4: 960a0004 */ lhu $t2,0x4($s0) -/* f07ffd8: 10000075 */ b .L0f0801b0 -/* f07ffdc: 24110001 */ addiu $s1,$zero,0x1 -/* f07ffe0: 960a0004 */ lhu $t2,0x4($s0) -.L0f07ffe4: -/* f07ffe4: 254b0002 */ addiu $t3,$t2,0x2 -/* f07ffe8: 10000071 */ b .L0f0801b0 -/* f07ffec: a60b0004 */ sh $t3,0x4($s0) -/* f07fff0: 8c6c0004 */ lw $t4,0x4($v1) -.L0f07fff4: -/* f07fff4: 24110001 */ addiu $s1,$zero,0x1 -/* f07fff8: 1000006d */ b .L0f0801b0 -/* f07fffc: a60c0006 */ sh $t4,0x6($s0) -/* f080000: 02002025 */ or $a0,$s0,$zero -/* f080004: 0fc1fe46 */ jal tvscreenSetCmdlist -/* f080008: 8c650004 */ lw $a1,0x4($v1) -/* f08000c: 3c017f1b */ lui $at,%hi(var7f1aa818) -/* f080010: 3c06800a */ lui $a2,%hi(g_Vars) -/* f080014: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars) -/* f080018: 10000065 */ b .L0f0801b0 -/* f08001c: c422a818 */ lwc1 $f2,%lo(var7f1aa818)($at) -/* f080020: 0c004b70 */ jal random -/* f080024: afa30098 */ sw $v1,0x98($sp) -/* f080028: 8fa30098 */ lw $v1,0x98($sp) -/* f08002c: 00026c02 */ srl $t5,$v0,0x10 -/* f080030: 02002025 */ or $a0,$s0,$zero -/* f080034: 8c6e0008 */ lw $t6,0x8($v1) -/* f080038: 01ae082b */ sltu $at,$t5,$t6 -/* f08003c: 50200006 */ beqzl $at,.L0f080058 -/* f080040: 960f0004 */ lhu $t7,0x4($s0) -/* f080044: 0fc1fe46 */ jal tvscreenSetCmdlist -/* f080048: 8c650004 */ lw $a1,0x4($v1) -/* f08004c: 10000004 */ b .L0f080060 -/* f080050: 00000000 */ nop -/* f080054: 960f0004 */ lhu $t7,0x4($s0) -.L0f080058: -/* f080058: 25f80003 */ addiu $t8,$t7,0x3 -/* f08005c: a6180004 */ sh $t8,0x4($s0) -.L0f080060: -/* f080060: 3c017f1b */ lui $at,%hi(var7f1aa81c) -/* f080064: 3c06800a */ lui $a2,%hi(g_Vars) -/* f080068: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars) -/* f08006c: 10000050 */ b .L0f0801b0 -/* f080070: c422a81c */ lwc1 $f2,%lo(var7f1aa81c)($at) -/* f080074: 1000004e */ b .L0f0801b0 -/* f080078: a6000004 */ sh $zero,0x4($s0) -/* f08007c: 1000004c */ b .L0f0801b0 -/* f080080: 24110001 */ addiu $s1,$zero,0x1 -/* f080084: e616006c */ swc1 $f22,0x6c($s0) -/* f080088: 8c620008 */ lw $v0,0x8($v1) -/* f08008c: 54400004 */ bnezl $v0,.L0f0800a0 -/* f080090: 44822000 */ mtc1 $v0,$f4 -/* f080094: 1000000a */ b .L0f0800c0 -/* f080098: e6140070 */ swc1 $f20,0x70($s0) -/* f08009c: 44822000 */ mtc1 $v0,$f4 -.L0f0800a0: -/* f0800a0: 3c014f80 */ lui $at,0x4f80 -/* f0800a4: 04410004 */ bgez $v0,.L0f0800b8 -/* f0800a8: 468021a0 */ cvt.s.w $f6,$f4 -/* f0800ac: 44814000 */ mtc1 $at,$f8 -/* f0800b0: 00000000 */ nop -/* f0800b4: 46083180 */ add.s $f6,$f6,$f8 -.L0f0800b8: -/* f0800b8: 4606a283 */ div.s $f10,$f20,$f6 -/* f0800bc: e60a0070 */ swc1 $f10,0x70($s0) -.L0f0800c0: -/* f0800c0: 92190060 */ lbu $t9,0x60($s0) -/* f0800c4: 920c0063 */ lbu $t4,0x63($s0) -/* f0800c8: 92180066 */ lbu $t8,0x66($s0) -/* f0800cc: a2190061 */ sb $t9,0x61($s0) -/* f0800d0: 8c690004 */ lw $t1,0x4($v1) -/* f0800d4: a20c0064 */ sb $t4,0x64($s0) -/* f0800d8: 960e0004 */ lhu $t6,0x4($s0) -/* f0800dc: 00095e02 */ srl $t3,$t1,0x18 -/* f0800e0: a20b0062 */ sb $t3,0x62($s0) -/* f0800e4: 8c6d0004 */ lw $t5,0x4($v1) -/* f0800e8: a2180067 */ sb $t8,0x67($s0) -/* f0800ec: 920b0069 */ lbu $t3,0x69($s0) -/* f0800f0: 000d7c02 */ srl $t7,$t5,0x10 -/* f0800f4: a20f0065 */ sb $t7,0x65($s0) -/* f0800f8: 8c790004 */ lw $t9,0x4($v1) -/* f0800fc: a20b006a */ sb $t3,0x6a($s0) -/* f080100: 25cf0003 */ addiu $t7,$t6,0x3 -/* f080104: 00195202 */ srl $t2,$t9,0x8 -/* f080108: a20a0068 */ sb $t2,0x68($s0) -/* f08010c: 8c6d0004 */ lw $t5,0x4($v1) -/* f080110: a60f0004 */ sh $t7,0x4($s0) -/* f080114: 10000026 */ b .L0f0801b0 -/* f080118: a20d006b */ sb $t5,0x6b($s0) -/* f08011c: 8c780004 */ lw $t8,0x4($v1) -/* f080120: 24590002 */ addiu $t9,$v0,0x2 -/* f080124: a6190004 */ sh $t9,0x4($s0) -/* f080128: 44989000 */ mtc1 $t8,$f18 -/* f08012c: 00000000 */ nop -/* f080130: 46809120 */ cvt.s.w $f4,$f18 -/* f080134: 46022202 */ mul.s $f8,$f4,$f2 -/* f080138: 1000001d */ b .L0f0801b0 -/* f08013c: e608000c */ swc1 $f8,0xc($s0) -/* f080140: 8c690004 */ lw $t1,0x4($v1) -/* f080144: c4c60044 */ lwc1 $f6,0x44($a2) -/* f080148: 44895000 */ mtc1 $t1,$f10 -/* f08014c: 00000000 */ nop -/* f080150: 468054a0 */ cvt.s.w $f18,$f10 -/* f080154: c60a000c */ lwc1 $f10,0xc($s0) -/* f080158: 46123102 */ mul.s $f4,$f6,$f18 -/* f08015c: 00000000 */ nop -/* f080160: 46022202 */ mul.s $f8,$f4,$f2 -/* f080164: 46085180 */ add.s $f6,$f10,$f8 -/* f080168: e606000c */ swc1 $f6,0xc($s0) -/* f08016c: c60c000c */ lwc1 $f12,0xc($s0) -/* f080170: 460cd03e */ c.le.s $f26,$f12 -/* f080174: 00000000 */ nop -/* f080178: 45000004 */ bc1f .L0f08018c -/* f08017c: 00000000 */ nop -/* f080180: 461a6481 */ sub.s $f18,$f12,$f26 -/* f080184: e612000c */ swc1 $f18,0xc($s0) -/* f080188: c60c000c */ lwc1 $f12,0xc($s0) -.L0f08018c: -/* f08018c: 4616603c */ c.lt.s $f12,$f22 -/* f080190: 00000000 */ nop -/* f080194: 45020004 */ bc1fl .L0f0801a8 -/* f080198: 960a0004 */ lhu $t2,0x4($s0) -/* f08019c: 461a6100 */ add.s $f4,$f12,$f26 -/* f0801a0: e604000c */ swc1 $f4,0xc($s0) -/* f0801a4: 960a0004 */ lhu $t2,0x4($s0) -.L0f0801a8: -/* f0801a8: 254b0002 */ addiu $t3,$t2,0x2 -/* f0801ac: a60b0004 */ sh $t3,0x4($s0) -.L0f0801b0: -/* f0801b0: 5220fec0 */ beqzl $s1,.L0f07fcb4 -/* f0801b4: 96020004 */ lhu $v0,0x4($s0) -/* f0801b8: c6000018 */ lwc1 $f0,0x18($s0) -/* f0801bc: 4600b03c */ c.lt.s $f22,$f0 -/* f0801c0: 00000000 */ nop -/* f0801c4: 45000017 */ bc1f .L0f080224 -/* f0801c8: 3c02800a */ lui $v0,%hi(g_Vars) -/* f0801cc: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars) -/* f0801d0: c4480044 */ lwc1 $f8,0x44($v0) -/* f0801d4: c60a0014 */ lwc1 $f10,0x14($s0) -/* f0801d8: 46080182 */ mul.s $f6,$f0,$f8 -/* f0801dc: 46065480 */ add.s $f18,$f10,$f6 -/* f0801e0: e6120014 */ swc1 $f18,0x14($s0) -/* f0801e4: c6020014 */ lwc1 $f2,0x14($s0) -/* f0801e8: 4614103c */ c.lt.s $f2,$f20 -/* f0801ec: 00000000 */ nop -/* f0801f0: 45020009 */ bc1fl .L0f080218 -/* f0801f4: c6120020 */ lwc1 $f18,0x20($s0) -/* f0801f8: c600001c */ lwc1 $f0,0x1c($s0) -/* f0801fc: c6040020 */ lwc1 $f4,0x20($s0) -/* f080200: 46002201 */ sub.s $f8,$f4,$f0 -/* f080204: 46024282 */ mul.s $f10,$f8,$f2 -/* f080208: 460a0180 */ add.s $f6,$f0,$f10 -/* f08020c: 10000005 */ b .L0f080224 -/* f080210: e6060010 */ swc1 $f6,0x10($s0) -/* f080214: c6120020 */ lwc1 $f18,0x20($s0) -.L0f080218: -/* f080218: e6140014 */ swc1 $f20,0x14($s0) -/* f08021c: e6160018 */ swc1 $f22,0x18($s0) -/* f080220: e6120010 */ swc1 $f18,0x10($s0) -.L0f080224: -/* f080224: c600002c */ lwc1 $f0,0x2c($s0) -/* f080228: 3c02800a */ lui $v0,%hi(g_Vars) -/* f08022c: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars) -/* f080230: 4600b03c */ c.lt.s $f22,$f0 -/* f080234: 00000000 */ nop -/* f080238: 45020017 */ bc1fl .L0f080298 -/* f08023c: c6000040 */ lwc1 $f0,0x40($s0) -/* f080240: c4480044 */ lwc1 $f8,0x44($v0) -/* f080244: c6040028 */ lwc1 $f4,0x28($s0) -/* f080248: 46080282 */ mul.s $f10,$f0,$f8 -/* f08024c: 460a2180 */ add.s $f6,$f4,$f10 -/* f080250: e6060028 */ swc1 $f6,0x28($s0) -/* f080254: c6020028 */ lwc1 $f2,0x28($s0) -/* f080258: 4614103c */ c.lt.s $f2,$f20 -/* f08025c: 00000000 */ nop -/* f080260: 45020009 */ bc1fl .L0f080288 -/* f080264: c6060034 */ lwc1 $f6,0x34($s0) -/* f080268: c6000030 */ lwc1 $f0,0x30($s0) -/* f08026c: c6120034 */ lwc1 $f18,0x34($s0) -/* f080270: 46009201 */ sub.s $f8,$f18,$f0 -/* f080274: 46024102 */ mul.s $f4,$f8,$f2 -/* f080278: 46040280 */ add.s $f10,$f0,$f4 -/* f08027c: 10000005 */ b .L0f080294 -/* f080280: e60a0024 */ swc1 $f10,0x24($s0) -/* f080284: c6060034 */ lwc1 $f6,0x34($s0) -.L0f080288: -/* f080288: e6140028 */ swc1 $f20,0x28($s0) -/* f08028c: e616002c */ swc1 $f22,0x2c($s0) -/* f080290: e6060024 */ swc1 $f6,0x24($s0) -.L0f080294: -/* f080294: c6000040 */ lwc1 $f0,0x40($s0) -.L0f080298: -/* f080298: 4600b03c */ c.lt.s $f22,$f0 -/* f08029c: 00000000 */ nop -/* f0802a0: 45020017 */ bc1fl .L0f080300 -/* f0802a4: c6000054 */ lwc1 $f0,0x54($s0) -/* f0802a8: c4480044 */ lwc1 $f8,0x44($v0) -/* f0802ac: c612003c */ lwc1 $f18,0x3c($s0) -/* f0802b0: 46080102 */ mul.s $f4,$f0,$f8 -/* f0802b4: 46049280 */ add.s $f10,$f18,$f4 -/* f0802b8: e60a003c */ swc1 $f10,0x3c($s0) -/* f0802bc: c602003c */ lwc1 $f2,0x3c($s0) -/* f0802c0: 4614103c */ c.lt.s $f2,$f20 -/* f0802c4: 00000000 */ nop -/* f0802c8: 45020009 */ bc1fl .L0f0802f0 -/* f0802cc: c60a0048 */ lwc1 $f10,0x48($s0) -/* f0802d0: c6000044 */ lwc1 $f0,0x44($s0) -/* f0802d4: c6060048 */ lwc1 $f6,0x48($s0) -/* f0802d8: 46003201 */ sub.s $f8,$f6,$f0 -/* f0802dc: 46024482 */ mul.s $f18,$f8,$f2 -/* f0802e0: 46120100 */ add.s $f4,$f0,$f18 -/* f0802e4: 10000005 */ b .L0f0802fc -/* f0802e8: e6040038 */ swc1 $f4,0x38($s0) -/* f0802ec: c60a0048 */ lwc1 $f10,0x48($s0) -.L0f0802f0: -/* f0802f0: e614003c */ swc1 $f20,0x3c($s0) -/* f0802f4: e6160040 */ swc1 $f22,0x40($s0) -/* f0802f8: e60a0038 */ swc1 $f10,0x38($s0) -.L0f0802fc: -/* f0802fc: c6000054 */ lwc1 $f0,0x54($s0) -.L0f080300: -/* f080300: 4600b03c */ c.lt.s $f22,$f0 -/* f080304: 00000000 */ nop -/* f080308: 45020017 */ bc1fl .L0f080368 -/* f08030c: c6020070 */ lwc1 $f2,0x70($s0) -/* f080310: c4480044 */ lwc1 $f8,0x44($v0) -/* f080314: c6060050 */ lwc1 $f6,0x50($s0) -/* f080318: 46080482 */ mul.s $f18,$f0,$f8 -/* f08031c: 46123100 */ add.s $f4,$f6,$f18 -/* f080320: e6040050 */ swc1 $f4,0x50($s0) -/* f080324: c6020050 */ lwc1 $f2,0x50($s0) -/* f080328: 4614103c */ c.lt.s $f2,$f20 -/* f08032c: 00000000 */ nop -/* f080330: 45020009 */ bc1fl .L0f080358 -/* f080334: c604005c */ lwc1 $f4,0x5c($s0) -/* f080338: c6000058 */ lwc1 $f0,0x58($s0) -/* f08033c: c60a005c */ lwc1 $f10,0x5c($s0) -/* f080340: 46005201 */ sub.s $f8,$f10,$f0 -/* f080344: 46024182 */ mul.s $f6,$f8,$f2 -/* f080348: 46060480 */ add.s $f18,$f0,$f6 -/* f08034c: 10000005 */ b .L0f080364 -/* f080350: e612004c */ swc1 $f18,0x4c($s0) -/* f080354: c604005c */ lwc1 $f4,0x5c($s0) -.L0f080358: -/* f080358: e6140050 */ swc1 $f20,0x50($s0) -/* f08035c: e6160054 */ swc1 $f22,0x54($s0) -/* f080360: e604004c */ swc1 $f4,0x4c($s0) -.L0f080364: -/* f080364: c6020070 */ lwc1 $f2,0x70($s0) -.L0f080368: -/* f080368: 4602b03c */ c.lt.s $f22,$f2 -/* f08036c: 00000000 */ nop -/* f080370: 4502003f */ bc1fl .L0f080470 -/* f080374: 8faa00a4 */ lw $t2,0xa4($sp) -/* f080378: c4480044 */ lwc1 $f8,0x44($v0) -/* f08037c: c60a006c */ lwc1 $f10,0x6c($s0) -/* f080380: 46081182 */ mul.s $f6,$f2,$f8 -/* f080384: 46065480 */ add.s $f18,$f10,$f6 -/* f080388: e612006c */ swc1 $f18,0x6c($s0) -/* f08038c: c600006c */ lwc1 $f0,0x6c($s0) -/* f080390: 4614003c */ c.lt.s $f0,$f20 -/* f080394: 00000000 */ nop -/* f080398: 4502002b */ bc1fl .L0f080448 -/* f08039c: 920e0062 */ lbu $t6,0x62($s0) -/* f0803a0: 92020061 */ lbu $v0,0x61($s0) -/* f0803a4: 920c0062 */ lbu $t4,0x62($s0) -/* f0803a8: 92030064 */ lbu $v1,0x64($s0) -/* f0803ac: 92190065 */ lbu $t9,0x65($s0) -/* f0803b0: 01826823 */ subu $t5,$t4,$v0 -/* f0803b4: 448d2000 */ mtc1 $t5,$f4 -/* f0803b8: 03234823 */ subu $t1,$t9,$v1 -/* f0803bc: 44899000 */ mtc1 $t1,$f18 -/* f0803c0: 46802220 */ cvt.s.w $f8,$f4 -/* f0803c4: 920d0068 */ lbu $t5,0x68($s0) -/* f0803c8: 92040067 */ lbu $a0,0x67($s0) -/* f0803cc: 9209006b */ lbu $t1,0x6b($s0) -/* f0803d0: 9205006a */ lbu $a1,0x6a($s0) -/* f0803d4: 46809120 */ cvt.s.w $f4,$f18 -/* f0803d8: 46004282 */ mul.s $f10,$f8,$f0 -/* f0803dc: 01a47023 */ subu $t6,$t5,$a0 -/* f0803e0: 01255023 */ subu $t2,$t1,$a1 -/* f0803e4: 46002202 */ mul.s $f8,$f4,$f0 -/* f0803e8: 4600518d */ trunc.w.s $f6,$f10 -/* f0803ec: 4600428d */ trunc.w.s $f10,$f8 -/* f0803f0: 440f3000 */ mfc1 $t7,$f6 -/* f0803f4: 448e3000 */ mtc1 $t6,$f6 -/* f0803f8: 440b5000 */ mfc1 $t3,$f10 -/* f0803fc: 468034a0 */ cvt.s.w $f18,$f6 -/* f080400: 448a5000 */ mtc1 $t2,$f10 -/* f080404: 004fc021 */ addu $t8,$v0,$t7 -/* f080408: 006b6021 */ addu $t4,$v1,$t3 -/* f08040c: a2180060 */ sb $t8,0x60($s0) -/* f080410: 468051a0 */ cvt.s.w $f6,$f10 -/* f080414: 46009102 */ mul.s $f4,$f18,$f0 -/* f080418: a20c0063 */ sb $t4,0x63($s0) -/* f08041c: 46003482 */ mul.s $f18,$f6,$f0 -/* f080420: 4600220d */ trunc.w.s $f8,$f4 -/* f080424: 4600910d */ trunc.w.s $f4,$f18 -/* f080428: 44184000 */ mfc1 $t8,$f8 -/* f08042c: 440c2000 */ mfc1 $t4,$f4 -/* f080430: 0098c821 */ addu $t9,$a0,$t8 -/* f080434: a2190066 */ sb $t9,0x66($s0) -/* f080438: 00ac6821 */ addu $t5,$a1,$t4 -/* f08043c: 1000000b */ b .L0f08046c -/* f080440: a20d0069 */ sb $t5,0x69($s0) -/* f080444: 920e0062 */ lbu $t6,0x62($s0) -.L0f080448: -/* f080448: 920f0065 */ lbu $t7,0x65($s0) -/* f08044c: 92180068 */ lbu $t8,0x68($s0) -/* f080450: 9219006b */ lbu $t9,0x6b($s0) -/* f080454: e614006c */ swc1 $f20,0x6c($s0) -/* f080458: e6160070 */ swc1 $f22,0x70($s0) -/* f08045c: a20e0060 */ sb $t6,0x60($s0) -/* f080460: a20f0063 */ sb $t7,0x63($s0) -/* f080464: a2180066 */ sb $t8,0x66($s0) -/* f080468: a2190069 */ sb $t9,0x69($s0) -.L0f08046c: -/* f08046c: 8faa00a4 */ lw $t2,0xa4($sp) -.L0f080470: -/* f080470: 8fa400a8 */ lw $a0,0xa8($sp) -/* f080474: 8fa300b4 */ lw $v1,0xb4($sp) -/* f080478: 8fa800b0 */ lw $t0,0xb0($sp) -/* f08047c: 8fa900c4 */ lw $t1,0xc4($sp) -/* f080480: ad430000 */ sw $v1,0x0($t2) -/* f080484: ad480008 */ sw $t0,0x8($t2) -/* f080488: ad490004 */ sw $t1,0x4($t2) -/* f08048c: 8c8b000c */ lw $t3,0xc($a0) -/* f080490: 89610000 */ lwl $at,0x0($t3) -/* f080494: 99610003 */ lwr $at,0x3($t3) -/* f080498: a8610000 */ swl $at,0x0($v1) -/* f08049c: b8610003 */ swr $at,0x3($v1) -/* f0804a0: 896d0004 */ lwl $t5,0x4($t3) -/* f0804a4: 996d0007 */ lwr $t5,0x7($t3) -/* f0804a8: a86d0004 */ swl $t5,0x4($v1) -/* f0804ac: b86d0007 */ swr $t5,0x7($v1) -/* f0804b0: 89610008 */ lwl $at,0x8($t3) -/* f0804b4: 9961000b */ lwr $at,0xb($t3) -/* f0804b8: a8610008 */ swl $at,0x8($v1) -/* f0804bc: b861000b */ swr $at,0xb($v1) -/* f0804c0: 8c8e000c */ lw $t6,0xc($a0) -/* f0804c4: 89c1000c */ lwl $at,0xc($t6) -/* f0804c8: 99c1000f */ lwr $at,0xf($t6) -/* f0804cc: a861000c */ swl $at,0xc($v1) -/* f0804d0: b861000f */ swr $at,0xf($v1) -/* f0804d4: 89d80010 */ lwl $t8,0x10($t6) -/* f0804d8: 99d80013 */ lwr $t8,0x13($t6) -/* f0804dc: a8780010 */ swl $t8,0x10($v1) -/* f0804e0: b8780013 */ swr $t8,0x13($v1) -/* f0804e4: 89c10014 */ lwl $at,0x14($t6) -/* f0804e8: 99c10017 */ lwr $at,0x17($t6) -/* f0804ec: 3c0e800b */ lui $t6,%hi(g_TexScreenConfigs) -/* f0804f0: a8610014 */ swl $at,0x14($v1) -/* f0804f4: b8610017 */ swr $at,0x17($v1) -/* f0804f8: 8c99000c */ lw $t9,0xc($a0) -/* f0804fc: 8b210018 */ lwl $at,0x18($t9) -/* f080500: 9b21001b */ lwr $at,0x1b($t9) -/* f080504: a8610018 */ swl $at,0x18($v1) -/* f080508: b861001b */ swr $at,0x1b($v1) -/* f08050c: 8b2a001c */ lwl $t2,0x1c($t9) -/* f080510: 9b2a001f */ lwr $t2,0x1f($t9) -/* f080514: a86a001c */ swl $t2,0x1c($v1) -/* f080518: b86a001f */ swr $t2,0x1f($v1) -/* f08051c: 8b210020 */ lwl $at,0x20($t9) -/* f080520: 9b210023 */ lwr $at,0x23($t9) -/* f080524: a8610020 */ swl $at,0x20($v1) -/* f080528: b8610023 */ swr $at,0x23($v1) -/* f08052c: 8c8c000c */ lw $t4,0xc($a0) -/* f080530: 89810024 */ lwl $at,0x24($t4) -/* f080534: 99810027 */ lwr $at,0x27($t4) -/* f080538: a8610024 */ swl $at,0x24($v1) -/* f08053c: b8610027 */ swr $at,0x27($v1) -/* f080540: 898d0028 */ lwl $t5,0x28($t4) -/* f080544: 998d002b */ lwr $t5,0x2b($t4) -/* f080548: a86d0028 */ swl $t5,0x28($v1) -/* f08054c: b86d002b */ swr $t5,0x2b($v1) -/* f080550: 8981002c */ lwl $at,0x2c($t4) -/* f080554: 9981002f */ lwr $at,0x2f($t4) -/* f080558: a861002c */ swl $at,0x2c($v1) -/* f08055c: b861002f */ swr $at,0x2f($v1) -/* f080560: 8e020008 */ lw $v0,0x8($s0) -/* f080564: 2c410064 */ sltiu $at,$v0,0x64 -/* f080568: 10200007 */ beqz $at,.L0f080588 -/* f08056c: 00408825 */ or $s1,$v0,$zero -/* f080570: 00027880 */ sll $t7,$v0,0x2 -/* f080574: 8dceb594 */ lw $t6,%lo(g_TexScreenConfigs)($t6) -/* f080578: 01e27823 */ subu $t7,$t7,$v0 -/* f08057c: 000f7880 */ sll $t7,$t7,0x2 -/* f080580: 10000001 */ b .L0f080588 -/* f080584: 01ee8821 */ addu $s1,$t7,$t6 -.L0f080588: -/* f080588: 122000aa */ beqz $s1,.L0f080834 -/* f08058c: 3c013f00 */ lui $at,0x3f00 -/* f080590: 44810000 */ mtc1 $at,$f0 -/* f080594: c6080010 */ lwc1 $f8,0x10($s0) -/* f080598: c60a0024 */ lwc1 $f10,0x24($s0) -/* f08059c: c60c000c */ lwc1 $f12,0xc($s0) -/* f0805a0: 46004502 */ mul.s $f20,$f8,$f0 -/* f0805a4: 460cb032 */ c.eq.s $f22,$f12 -/* f0805a8: 46005602 */ mul.s $f24,$f10,$f0 -/* f0805ac: 4600a386 */ mov.s $f14,$f20 -/* f0805b0: 45010016 */ bc1t .L0f08060c -/* f0805b4: 4600c406 */ mov.s $f16,$f24 -/* f0805b8: e7ae0058 */ swc1 $f14,0x58($sp) -/* f0805bc: 0c0068f4 */ jal cosf -/* f0805c0: e7b00054 */ swc1 $f16,0x54($sp) -/* f0805c4: 3c017f1b */ lui $at,%hi(var7f1aa824) -/* f0805c8: c43aa824 */ lwc1 $f26,%lo(var7f1aa824)($at) -/* f0805cc: c60c000c */ lwc1 $f12,0xc($s0) -/* f0805d0: 461a0582 */ mul.s $f22,$f0,$f26 -/* f0805d4: 0c0068f7 */ jal sinf -/* f0805d8: 00000000 */ nop -/* f0805dc: 4616a502 */ mul.s $f20,$f20,$f22 -/* f0805e0: c7ae0058 */ lwc1 $f14,0x58($sp) -/* f0805e4: c7b00054 */ lwc1 $f16,0x54($sp) -/* f0805e8: 461a0082 */ mul.s $f2,$f0,$f26 -/* f0805ec: 8fa800b0 */ lw $t0,0xb0($sp) -/* f0805f0: 8fa300b4 */ lw $v1,0xb4($sp) -/* f0805f4: 4602c602 */ mul.s $f24,$f24,$f2 -/* f0805f8: 00000000 */ nop -/* f0805fc: 46027382 */ mul.s $f14,$f14,$f2 -/* f080600: 00000000 */ nop -/* f080604: 46168402 */ mul.s $f16,$f16,$f22 -/* f080608: 00000000 */ nop -.L0f08060c: -/* f08060c: 92380004 */ lbu $t8,0x4($s1) -/* f080610: 3c014200 */ lui $at,0x4200 -/* f080614: 44810000 */ mtc1 $at,$f0 -/* f080618: 44989000 */ mtc1 $t8,$f18 -/* f08061c: 3c014f80 */ lui $at,0x4f80 -/* f080620: 07010004 */ bgez $t8,.L0f080634 -/* f080624: 46809120 */ cvt.s.w $f4,$f18 -/* f080628: 44814000 */ mtc1 $at,$f8 -/* f08062c: 00000000 */ nop -/* f080630: 46082100 */ add.s $f4,$f4,$f8 -.L0f080634: -/* f080634: c60a0038 */ lwc1 $f10,0x38($s0) -/* f080638: 3c014f80 */ lui $at,0x4f80 -/* f08063c: 46145180 */ add.s $f6,$f10,$f20 -/* f080640: 46062482 */ mul.s $f18,$f4,$f6 -/* f080644: 00000000 */ nop -/* f080648: 46009202 */ mul.s $f8,$f18,$f0 -/* f08064c: 4600428d */ trunc.w.s $f10,$f8 -/* f080650: 44195000 */ mfc1 $t9,$f10 -/* f080654: 00000000 */ nop -/* f080658: a4790008 */ sh $t9,0x8($v1) -/* f08065c: 922a0005 */ lbu $t2,0x5($s1) -/* f080660: 448a2000 */ mtc1 $t2,$f4 -/* f080664: 05410004 */ bgez $t2,.L0f080678 -/* f080668: 468021a0 */ cvt.s.w $f6,$f4 -/* f08066c: 44819000 */ mtc1 $at,$f18 -/* f080670: 00000000 */ nop -/* f080674: 46123180 */ add.s $f6,$f6,$f18 -.L0f080678: -/* f080678: c608004c */ lwc1 $f8,0x4c($s0) -/* f08067c: 3c014f80 */ lui $at,0x4f80 -/* f080680: 46184280 */ add.s $f10,$f8,$f24 -/* f080684: 460a3102 */ mul.s $f4,$f6,$f10 -/* f080688: 00000000 */ nop -/* f08068c: 46002482 */ mul.s $f18,$f4,$f0 -/* f080690: 4600920d */ trunc.w.s $f8,$f18 -/* f080694: 440c4000 */ mfc1 $t4,$f8 -/* f080698: 00000000 */ nop -/* f08069c: a46c000a */ sh $t4,0xa($v1) -/* f0806a0: 922d0004 */ lbu $t5,0x4($s1) -/* f0806a4: 448d3000 */ mtc1 $t5,$f6 -/* f0806a8: 05a10004 */ bgez $t5,.L0f0806bc -/* f0806ac: 468032a0 */ cvt.s.w $f10,$f6 -/* f0806b0: 44812000 */ mtc1 $at,$f4 -/* f0806b4: 00000000 */ nop -/* f0806b8: 46045280 */ add.s $f10,$f10,$f4 -.L0f0806bc: -/* f0806bc: c6120038 */ lwc1 $f18,0x38($s0) -/* f0806c0: 3c014f80 */ lui $at,0x4f80 -/* f0806c4: 460e9201 */ sub.s $f8,$f18,$f14 -/* f0806c8: 46085182 */ mul.s $f6,$f10,$f8 -/* f0806cc: 00000000 */ nop -/* f0806d0: 46003102 */ mul.s $f4,$f6,$f0 -/* f0806d4: 4600248d */ trunc.w.s $f18,$f4 -/* f0806d8: 440e9000 */ mfc1 $t6,$f18 -/* f0806dc: 00000000 */ nop -/* f0806e0: a46e0014 */ sh $t6,0x14($v1) -/* f0806e4: 92380005 */ lbu $t8,0x5($s1) -/* f0806e8: 44985000 */ mtc1 $t8,$f10 -/* f0806ec: 07010004 */ bgez $t8,.L0f080700 -/* f0806f0: 46805220 */ cvt.s.w $f8,$f10 -/* f0806f4: 44813000 */ mtc1 $at,$f6 -/* f0806f8: 00000000 */ nop -/* f0806fc: 46064200 */ add.s $f8,$f8,$f6 -.L0f080700: -/* f080700: c604004c */ lwc1 $f4,0x4c($s0) -/* f080704: 3c014f80 */ lui $at,0x4f80 -/* f080708: 46102480 */ add.s $f18,$f4,$f16 -/* f08070c: 46124282 */ mul.s $f10,$f8,$f18 -/* f080710: 00000000 */ nop -/* f080714: 46005182 */ mul.s $f6,$f10,$f0 -/* f080718: 4600310d */ trunc.w.s $f4,$f6 -/* f08071c: 44192000 */ mfc1 $t9,$f4 -/* f080720: 00000000 */ nop -/* f080724: a4790016 */ sh $t9,0x16($v1) -/* f080728: 922a0004 */ lbu $t2,0x4($s1) -/* f08072c: 448a4000 */ mtc1 $t2,$f8 -/* f080730: 05410004 */ bgez $t2,.L0f080744 -/* f080734: 468044a0 */ cvt.s.w $f18,$f8 -/* f080738: 44815000 */ mtc1 $at,$f10 -/* f08073c: 00000000 */ nop -/* f080740: 460a9480 */ add.s $f18,$f18,$f10 -.L0f080744: -/* f080744: c6060038 */ lwc1 $f6,0x38($s0) -/* f080748: 3c014f80 */ lui $at,0x4f80 -/* f08074c: 46143101 */ sub.s $f4,$f6,$f20 -/* f080750: 46049202 */ mul.s $f8,$f18,$f4 -/* f080754: 00000000 */ nop -/* f080758: 46004282 */ mul.s $f10,$f8,$f0 -/* f08075c: 4600518d */ trunc.w.s $f6,$f10 -/* f080760: 440c3000 */ mfc1 $t4,$f6 -/* f080764: 00000000 */ nop -/* f080768: a46c0020 */ sh $t4,0x20($v1) -/* f08076c: 922d0005 */ lbu $t5,0x5($s1) -/* f080770: 448d9000 */ mtc1 $t5,$f18 -/* f080774: 05a10004 */ bgez $t5,.L0f080788 -/* f080778: 46809120 */ cvt.s.w $f4,$f18 -/* f08077c: 44814000 */ mtc1 $at,$f8 -/* f080780: 00000000 */ nop -/* f080784: 46082100 */ add.s $f4,$f4,$f8 -.L0f080788: -/* f080788: c60a004c */ lwc1 $f10,0x4c($s0) -/* f08078c: 3c014f80 */ lui $at,0x4f80 -/* f080790: 46185181 */ sub.s $f6,$f10,$f24 -/* f080794: 46062482 */ mul.s $f18,$f4,$f6 -/* f080798: 00000000 */ nop -/* f08079c: 46009202 */ mul.s $f8,$f18,$f0 -/* f0807a0: 4600428d */ trunc.w.s $f10,$f8 -/* f0807a4: 440e5000 */ mfc1 $t6,$f10 -/* f0807a8: 00000000 */ nop -/* f0807ac: a46e0022 */ sh $t6,0x22($v1) -/* f0807b0: 92380004 */ lbu $t8,0x4($s1) -/* f0807b4: 44982000 */ mtc1 $t8,$f4 -/* f0807b8: 07010004 */ bgez $t8,.L0f0807cc -/* f0807bc: 468021a0 */ cvt.s.w $f6,$f4 -/* f0807c0: 44819000 */ mtc1 $at,$f18 -/* f0807c4: 00000000 */ nop -/* f0807c8: 46123180 */ add.s $f6,$f6,$f18 -.L0f0807cc: -/* f0807cc: c6080038 */ lwc1 $f8,0x38($s0) -/* f0807d0: 3c014f80 */ lui $at,0x4f80 -/* f0807d4: 460e4280 */ add.s $f10,$f8,$f14 -/* f0807d8: 460a3102 */ mul.s $f4,$f6,$f10 -/* f0807dc: 00000000 */ nop -/* f0807e0: 46002482 */ mul.s $f18,$f4,$f0 -/* f0807e4: 4600920d */ trunc.w.s $f8,$f18 -/* f0807e8: 44194000 */ mfc1 $t9,$f8 -/* f0807ec: 00000000 */ nop -/* f0807f0: a479002c */ sh $t9,0x2c($v1) -/* f0807f4: 922a0005 */ lbu $t2,0x5($s1) -/* f0807f8: 448a3000 */ mtc1 $t2,$f6 -/* f0807fc: 05410004 */ bgez $t2,.L0f080810 -/* f080800: 468032a0 */ cvt.s.w $f10,$f6 -/* f080804: 44812000 */ mtc1 $at,$f4 -/* f080808: 00000000 */ nop -/* f08080c: 46045280 */ add.s $f10,$f10,$f4 -.L0f080810: -/* f080810: c612004c */ lwc1 $f18,0x4c($s0) -/* f080814: 46109201 */ sub.s $f8,$f18,$f16 -/* f080818: 46085182 */ mul.s $f6,$f10,$f8 -/* f08081c: 00000000 */ nop -/* f080820: 46003102 */ mul.s $f4,$f6,$f0 -/* f080824: 4600248d */ trunc.w.s $f18,$f4 -/* f080828: 440c9000 */ mfc1 $t4,$f18 -/* f08082c: 00000000 */ nop -/* f080830: a46c002e */ sh $t4,0x2e($v1) -.L0f080834: -/* f080834: 920d0060 */ lbu $t5,0x60($s0) -/* f080838: 24190002 */ addiu $t9,$zero,0x2 -/* f08083c: 3c0cb700 */ lui $t4,0xb700 -/* f080840: a10d0000 */ sb $t5,0x0($t0) -/* f080844: 920f0063 */ lbu $t7,0x63($s0) -/* f080848: 240d2000 */ addiu $t5,$zero,0x2000 -/* f08084c: 27a400c4 */ addiu $a0,$sp,0xc4 -/* f080850: a10f0001 */ sb $t7,0x1($t0) -/* f080854: 920e0066 */ lbu $t6,0x66($s0) -/* f080858: 02202825 */ or $a1,$s1,$zero -/* f08085c: a10e0002 */ sb $t6,0x2($t0) -/* f080860: 92180069 */ lbu $t8,0x69($s0) -/* f080864: a1180003 */ sb $t8,0x3($t0) -/* f080868: a0600007 */ sb $zero,0x7($v1) -/* f08086c: a0600013 */ sb $zero,0x13($v1) -/* f080870: a060001f */ sb $zero,0x1f($v1) -/* f080874: a060002b */ sb $zero,0x2b($v1) -/* f080878: 92090069 */ lbu $t1,0x69($s0) -/* f08087c: 292100ff */ slti $at,$t1,0xff -/* f080880: 50200003 */ beqzl $at,.L0f080890 -/* f080884: 8faa00c4 */ lw $t2,0xc4($sp) -/* f080888: afb900cc */ sw $t9,0xcc($sp) -/* f08088c: 8faa00c4 */ lw $t2,0xc4($sp) -.L0f080890: -/* f080890: 240f0002 */ addiu $t7,$zero,0x2 -/* f080894: 240e0001 */ addiu $t6,$zero,0x1 -/* f080898: 254b0008 */ addiu $t3,$t2,0x8 -/* f08089c: afab00c4 */ sw $t3,0xc4($sp) -/* f0808a0: ad4d0004 */ sw $t5,0x4($t2) -/* f0808a4: ad4c0000 */ sw $t4,0x0($t2) -/* f0808a8: afa00018 */ sw $zero,0x18($sp) -/* f0808ac: afae0014 */ sw $t6,0x14($sp) -/* f0808b0: afaf0010 */ sw $t7,0x10($sp) -/* f0808b4: 8fa700c8 */ lw $a3,0xc8($sp) -/* f0808b8: 0fc2ce70 */ jal texSelect -/* f0808bc: 8fa600cc */ lw $a2,0xcc($sp) -/* f0808c0: 8fb000c4 */ lw $s0,0xc4($sp) -/* f0808c4: 3c190102 */ lui $t9,0x102 -/* f0808c8: 37390040 */ ori $t9,$t9,0x40 -/* f0808cc: 26090008 */ addiu $t1,$s0,0x8 -/* f0808d0: afa900c4 */ sw $t1,0xc4($sp) -/* f0808d4: ae190000 */ sw $t9,0x0($s0) -/* f0808d8: 8faa00b8 */ lw $t2,0xb8($sp) -/* f0808dc: 0c012d20 */ jal osVirtualToPhysical -/* f0808e0: 8d44000c */ lw $a0,0xc($t2) -/* f0808e4: ae020004 */ sw $v0,0x4($s0) -/* f0808e8: 8fb100c4 */ lw $s1,0xc4($sp) -/* f0808ec: 3c0dbc00 */ lui $t5,0xbc00 -/* f0808f0: 35ad1006 */ ori $t5,$t5,0x1006 -/* f0808f4: 262c0008 */ addiu $t4,$s1,0x8 -/* f0808f8: afac00c4 */ sw $t4,0xc4($sp) -/* f0808fc: ae2d0000 */ sw $t5,0x0($s1) -/* f080900: 0c012d20 */ jal osVirtualToPhysical -/* f080904: 8fa400b4 */ lw $a0,0xb4($sp) -/* f080908: ae220004 */ sw $v0,0x4($s1) -/* f08090c: 8fb000c4 */ lw $s0,0xc4($sp) -/* f080910: 3c180700 */ lui $t8,0x700 -/* f080914: 37180004 */ ori $t8,$t8,0x4 -/* f080918: 260e0008 */ addiu $t6,$s0,0x8 -/* f08091c: afae00c4 */ sw $t6,0xc4($sp) -/* f080920: ae180000 */ sw $t8,0x0($s0) -/* f080924: 0c012d20 */ jal osVirtualToPhysical -/* f080928: 8fa400b0 */ lw $a0,0xb0($sp) -/* f08092c: ae020004 */ sw $v0,0x4($s0) -/* f080930: 8fa900c4 */ lw $t1,0xc4($sp) -/* f080934: 3c0a0430 */ lui $t2,0x430 -/* f080938: 354a0030 */ ori $t2,$t2,0x30 -/* f08093c: 25390008 */ addiu $t9,$t1,0x8 -/* f080940: afb900c4 */ sw $t9,0xc4($sp) -/* f080944: 3c0b0400 */ lui $t3,0x400 -/* f080948: ad2b0004 */ sw $t3,0x4($t1) -/* f08094c: ad2a0000 */ sw $t2,0x0($t1) -/* f080950: 8fac00c4 */ lw $t4,0xc4($sp) -/* f080954: 3c0fb100 */ lui $t7,0xb100 -/* f080958: 35ef0032 */ ori $t7,$t7,0x32 -/* f08095c: 258d0008 */ addiu $t5,$t4,0x8 -/* f080960: afad00c4 */ sw $t5,0xc4($sp) -/* f080964: 240e2010 */ addiu $t6,$zero,0x2010 -/* f080968: ad8e0004 */ sw $t6,0x4($t4) -/* f08096c: ad8f0000 */ sw $t7,0x0($t4) -/* f080970: 8fb800c4 */ lw $t8,0xc4($sp) -/* f080974: 3c19b800 */ lui $t9,0xb800 -/* f080978: 3c0a0601 */ lui $t2,0x601 -/* f08097c: 27090008 */ addiu $t1,$t8,0x8 -/* f080980: afa900c4 */ sw $t1,0xc4($sp) -/* f080984: af000004 */ sw $zero,0x4($t8) -/* f080988: af190000 */ sw $t9,0x0($t8) -/* f08098c: 8fa600ac */ lw $a2,0xac($sp) -/* f080990: acca0000 */ sw $t2,0x0($a2) -/* f080994: 8fab00c4 */ lw $t3,0xc4($sp) -/* f080998: accb0004 */ sw $t3,0x4($a2) -.L0f08099c: -/* f08099c: 8fbf004c */ lw $ra,0x4c($sp) -.L0f0809a0: -/* f0809a0: 8fa200c4 */ lw $v0,0xc4($sp) -/* f0809a4: d7b40020 */ ldc1 $f20,0x20($sp) -/* f0809a8: d7b60028 */ ldc1 $f22,0x28($sp) -/* f0809ac: d7b80030 */ ldc1 $f24,0x30($sp) -/* f0809b0: d7ba0038 */ ldc1 $f26,0x38($sp) -/* f0809b4: 8fb00044 */ lw $s0,0x44($sp) -/* f0809b8: 8fb10048 */ lw $s1,0x48($sp) -/* f0809bc: 03e00008 */ jr $ra -/* f0809c0: 27bd00b8 */ addiu $sp,$sp,0xb8 -); -#else -struct tvcmd { - u32 type; - s32 arg1; - u32 arg2; -}; - -Gfx *tvscreenRender(struct model *model, struct modelnode *node, struct tvscreen *screen, Gfx *gdl, s32 arg4, s32 arg5) -{ - if (node && (node->type & 0xff) == MODELNODETYPE_DL) { - struct gfxvtx *vertices = gfxAllocateVertices(4); // b4 - struct colour *colours = gfxAllocateColours(1); // b0 - Gfx *savedgdl = gdl++; // ac - union modelrodata *rodata = node->rodata; // a8 - union modelrwdata *rwdata = modelGetNodeRwData(model, node); // a4 - struct textureconfig *tconfig; - bool yielding = false; - - while (!yielding) { - struct tvcmd *cmd = (struct tvcmd *) &screen->cmdlist[screen->offset]; // 98 - - switch (cmd->type) { - case TVCMD_STOPSCROLL: - screen->xmidinc = 0.0f; - screen->ymidinc = 0.0f; - screen->offset++; - break; - case TVCMD_SCROLLRELX: - screen->xmidfrac = 0.0f; - screen->xmidinc = cmd->arg2 == 0 ? 1.0f : 1.0f / cmd->arg2; - screen->xmidold = screen->xmid; - screen->xmidnew = screen->xmid + cmd->arg1 * (1.0f / 1024.0f); - screen->offset += 3; - break; - case TVCMD_SCROLLRELY: - screen->ymidfrac = 0.0f; - screen->ymidinc = cmd->arg2 == 0 ? 1.0f : 1.0f / cmd->arg2; - screen->ymidold = screen->ymid; - screen->ymidnew = screen->ymid + cmd->arg1 * (1.0f / 1024.0f); - screen->offset += 3; - break; - case TVCMD_SCROLLABSX: - screen->xmidfrac = 0.0f; - screen->xmidinc = cmd->arg2 == 0 ? 1.0f : 1.0f / cmd->arg2; - screen->xmidold = screen->xmid; - screen->xmidnew = cmd->arg1 * (1.0f / 1024.0f); - screen->offset += 3; - break; - case TVCMD_SCROLLABSY: - screen->ymidfrac = 0.0f; - screen->ymidinc = cmd->arg2 == 0 ? 1.0f : 1.0f / cmd->arg2; - screen->ymidold = screen->ymid; - screen->ymidnew = cmd->arg1 * (1.0f / 1024.0f); - screen->offset += 3; - break; - case TVCMD_SCALEABSX: - screen->xscalefrac = 0.0f; - screen->xscaleinc = cmd->arg2 == 0 ? 1.0f : 1.0f / cmd->arg2; - screen->xscaleold = screen->xscale; - screen->xscalenew = cmd->arg1 * (1.0f / 1024.0f); - screen->offset += 3; - break; - case TVCMD_SCALEABSY: - screen->yscalefrac = 0.0f; - screen->yscaleinc = cmd->arg2 == 0 ? 1.0f : 1.0f / cmd->arg2; - screen->yscaleold = screen->yscale; - screen->yscalenew = cmd->arg1 * (1.0f / 1024.0f); - screen->offset += 3; - break; - case TVCMD_SETTEXTURE: - tvscreenSetTexture(screen, cmd->arg1); - screen->offset += 2; - break; - case TVCMD_PAUSE: - if (screen->pause60 >= 0) { - screen->pause60 -= g_Vars.lvupdate60; - - if (screen->pause60 >= 0) { - yielding = true; - } else { - screen->offset += 2; - } - } else { - yielding = true; - screen->pause60 = cmd->arg1; - } - break; - case TVCMD_SETCMDLIST: - tvscreenSetCmdlist(screen, (u32 *) cmd->arg1); - break; - case TVCMD_RANDSETCMDLIST: - if ((random() >> 16) < cmd->arg2) { - tvscreenSetCmdlist(screen, (u32 *) cmd->arg1); - } else { - screen->offset += 3; - } - break; - case TVCMD_RESTART: - screen->offset = 0; - break; - case TVCMD_YIELD: - yielding = true; - break; - case TVCMD_SETCOLOUR: - screen->colfrac = 0.0f; - screen->colinc = cmd->arg2 == 0 ? 1.0f : 1.0f / cmd->arg2; - - screen->redold = screen->red; - screen->rednew = ((u32)cmd->arg1 >> 24) & 0xff; - - screen->greenold = screen->green; - screen->greennew = ((u32)cmd->arg1 >> 16) & 0xff; - - screen->blueold = screen->blue; - screen->bluenew = ((u32)cmd->arg1 >> 8) & 0xff; - - screen->alphaold = screen->alpha; - screen->alphanew = cmd->arg1 & 0xff; - - screen->offset += 3; - break; - case TVCMD_ROTATEABS: - screen->rot = cmd->arg1 * (M_BADTAU / 65536.0f); - screen->offset += 2; - break; - case TVCMD_ROTATEREL: - screen->rot += g_Vars.lvupdate60f * cmd->arg1 * (M_BADTAU / 65536.0f); - - if (screen->rot >= M_BADTAU) { - screen->rot -= M_BADTAU; - } - - if (screen->rot < 0.0f) { - screen->rot += M_BADTAU; - } - - screen->offset += 2; - break; - } - } - - // Increment X scale - if (screen->xscaleinc > 0.0f) { - screen->xscalefrac += screen->xscaleinc * g_Vars.lvupdate60f; - - if (screen->xscalefrac < 1.0f) { - screen->xscale = screen->xscaleold + (screen->xscalenew - screen->xscaleold) * screen->xscalefrac; - } else { - screen->xscalefrac = 1.0f; - screen->xscaleinc = 0.0f; - screen->xscale = screen->xscalenew; - } - } - - // Increment Y scale - if (screen->yscaleinc > 0.0f) { - screen->yscalefrac += screen->yscaleinc * g_Vars.lvupdate60f; - - if (screen->yscalefrac < 1.0f) { - screen->yscale = screen->yscaleold + (screen->yscalenew - screen->yscaleold) * screen->yscalefrac; - } else { - screen->yscalefrac = 1.0f; - screen->yscaleinc = 0.0f; - screen->yscale = screen->yscalenew; - } - } - - // Increment X scroll - if (screen->xmidinc > 0.0f) { - screen->xmidfrac += screen->xmidinc * g_Vars.lvupdate60f; - - if (screen->xmidfrac < 1.0f) { - screen->xmid = screen->xmidold + (screen->xmidnew - screen->xmidold) * screen->xmidfrac; - } else { - screen->xmidfrac = 1.0f; - screen->xmidinc = 0.0f; - screen->xmid = screen->xmidnew; - } - } - - // Increment Y scroll - if (screen->ymidinc > 0.0f) { - screen->ymidfrac += screen->ymidinc * g_Vars.lvupdate60f; - - if (screen->ymidfrac < 1.0f) { - screen->ymid = screen->ymidold + (screen->ymidnew - screen->ymidold) * screen->ymidfrac; - } else { - screen->ymidfrac = 1.0f; - screen->ymidinc = 0.0f; - screen->ymid = screen->ymidnew; - } - } - - // Increment colour change - if (screen->colinc > 0.0f) { - screen->colfrac += screen->colinc * g_Vars.lvupdate60f; - - if (screen->colfrac < 1.0f) { - screen->red = screen->redold + (s32) ((screen->rednew - screen->redold) * screen->colfrac); - screen->green = screen->greenold + (s32) ((screen->greennew - screen->greenold) * screen->colfrac); - screen->blue = screen->blueold + (s32) ((screen->bluenew - screen->blueold) * screen->colfrac); - screen->alpha = screen->alphaold + (s32) ((screen->alphanew - screen->alphaold) * screen->colfrac); - } else { - screen->colfrac = 1.0f; - screen->colinc = 0.0f; - screen->red = screen->rednew; - screen->green = screen->greennew; - screen->blue = screen->bluenew; - screen->alpha = screen->alphanew; - } - } - - // Set up everything for rendering - rwdata->dl.gdl = gdl; - rwdata->dl.vertices = vertices; - rwdata->dl.colours = colours; - - vertices[0] = rodata->dl.vertices[0]; - vertices[1] = rodata->dl.vertices[1]; - vertices[2] = rodata->dl.vertices[2]; - vertices[3] = rodata->dl.vertices[3]; - - if ((u32)screen->tconfig < 100) { - tconfig = &g_TexScreenConfigs[(s32)screen->tconfig]; - } else { - tconfig = screen->tconfig; - } - - if (tconfig != NULL) { - u32 stack[13]; - f32 f20; - f32 f24; - f32 f14; // 58 - f32 f16; // 54 - u8 stack2[0x8]; - f32 a; - f32 b; - - f20 = screen->xscale / 2.0f; - f24 = screen->yscale / 2.0f; - f14 = f20; - f16 = f24; - - if (1); - if (1); - if (1); - if (1); - if (1); - - if (screen->rot != 0.0f) { - f32 f22; - f32 f2; - - f22 = cosf(screen->rot) * 1.4142f; - f2 = sinf(screen->rot) * 1.4142f; - - f20 *= f22; - f24 *= f2; - f14 *= f2; - f16 *= f22; - } - - vertices[0].s = tconfig->width * (screen->xmid + f20) * 32.0f; - vertices[0].t = tconfig->height * (screen->ymid + f24) * 32.0f; - vertices[1].s = tconfig->width * (screen->xmid - f14) * 32.0f; - vertices[1].t = tconfig->height * (screen->ymid + f16) * 32.0f; - vertices[2].s = tconfig->width * (screen->xmid - f20) * 32.0f; - vertices[2].t = tconfig->height * (screen->ymid - f24) * 32.0f; - vertices[3].s = tconfig->width * (screen->xmid + f14) * 32.0f; - vertices[3].t = tconfig->height * (screen->ymid - f16) * 32.0f; - } - - colours[0].r = screen->red; - colours[0].g = screen->green; - colours[0].b = screen->blue; - colours[0].a = screen->alpha; - - vertices[0].colour = 0; - vertices[1].colour = 0; - vertices[2].colour = 0; - vertices[3].colour = 0; - - if (screen->alpha < 255) { - arg5 = 2; - } - - // Render the image - gSPSetGeometryMode(gdl++, G_CULL_BACK); - - if (1); - - texSelect(&gdl, tconfig, arg5, arg4, 2, 1, NULL); - - gSPMatrix(gdl++, osVirtualToPhysical(model->matrices), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(vertices)); - gDPSetColorArray(gdl++, osVirtualToPhysical(colours), 1); - gDPSetVerticeArray(gdl++, SPSEGMENT_MODEL_VTX << 24, 4); - gDPTri2(gdl++, 0, 1, 2, 0, 2, 3); - gSPEndDisplayList(gdl++); - - gSPBranchList(savedgdl++, gdl); - } - - return gdl; -} -#endif - void objRenderProp(struct prop *prop, struct modelrenderdata *renderdata, bool xlupass) { if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) { @@ -11906,48 +9606,6 @@ void objRenderProp(struct prop *prop, struct modelrenderdata *renderdata, bool x gdl = renderdata->gdl; - if (obj->type == OBJTYPE_SINGLEMONITOR) { - if (renderdata->flags & 1) { - struct singlemonitorobj *monitor = (struct singlemonitorobj *) prop->obj; - - if (obj->flags2 & OBJFLAG2_DRAWONTOP) { - sp60 = 0; - } else if (obj->flags & OBJFLAG_DEACTIVATED) { - sp60 = wallhit0f140750(&prop->pos); - } else { - sp60 = 1; - } - - gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0000), &monitor->screen, gdl, sp60, 1); - } - } else if (obj->type == OBJTYPE_MULTIMONITOR) { - if (renderdata->flags & 1) { - struct multimonitorobj *monitor = (struct multimonitorobj *) prop->obj; - - if (obj->flags2 & OBJFLAG2_DRAWONTOP) { - sp60 = 0; - } else if (obj->flags & OBJFLAG_DEACTIVATED) { - sp60 = wallhit0f140750(&prop->pos); - } else { - sp60 = 1; - } - - gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0000), &monitor->screens[0], gdl, sp60, 1); - - if (obj->flags2 & OBJFLAG2_DRAWONTOP) { - sp60 = 0; - } else if (obj->flags & (OBJFLAG_DEACTIVATED | OBJFLAG_20000000)) { - sp60 = wallhit0f140750(&prop->pos); - } else { - sp60 = 1; - } - - gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0001), &monitor->screens[1], gdl, sp60, 1); - gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0002), &monitor->screens[2], gdl, sp60, 1); - gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0003), &monitor->screens[3], gdl, sp60, 1); - } - } - if (obj->type == OBJTYPE_DOOR) { struct doorobj *door = prop->door; @@ -13134,9 +10792,7 @@ void objCheckDestroyed(struct defaultobj *obj, struct coord *pos, s32 playernum) s32 shotstaken = objGetShotsTaken(obj); if ((shotstaken % 4) == 0) { - if (obj->type != OBJTYPE_CHOPPER && obj->type != OBJTYPE_HOVERCAR) { - objDeform(obj, (shotstaken >> 2) + 1); - } + objDeform(obj, (shotstaken >> 2) + 1); func0f065e74(&rootprop->pos, rootprop->rooms, pos, rooms); @@ -13518,30 +11174,6 @@ void doorDestroyGlass(struct doorobj *door) rwdata->toggle.visible = false; } -void cctvHandleLensShot(struct defaultobj *obj) -{ - struct prop *prop = obj->prop; - struct model *model = obj->model; - union modelrodata *rodata; - union modelrwdata *rwdata; - Mtxf *sp7c; - Mtxf matrix; - - if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) { - rodata = modelGetPartRodata(model->filedata, MODELPART_CCTV_0002); - sp7c = model0001a5cc(model, modelGetPart(model->filedata, MODELPART_CCTV_LENS), 0); - mtx00015be4(camGetProjectionMtxF(), sp7c, &matrix); - - shardsCreate((struct coord *) matrix.m[3], matrix.m[0], matrix.m[1], matrix.m[2], - rodata->bbox.xmin, rodata->bbox.xmax, rodata->bbox.ymin, rodata->bbox.ymax, - SHARDTYPE_GLASS, prop); - } - - wallhitsFreeByProp(prop, 1); - rwdata = modelGetNodeRwData(model, modelGetPart(model->filedata, MODELPART_CCTV_0003)); - rwdata->toggle.visible = false; -} - void func0f085050(struct prop *prop, f32 damage, struct coord *pos, s32 arg3, s32 playernum) { struct defaultobj *obj = prop->obj; @@ -13699,11 +11331,6 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon } } - // Tweak damage and apply it - if (obj->type == OBJTYPE_CHOPPER) { - damage *= 0.25f; - } - if (objGetDestroyedLevel(obj) == 0) { // Not destroyed damage *= 250; @@ -13731,9 +11358,7 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon } // Handle objects that do things when damaged - if (obj->modelnum == MODEL_TARGET) { - // empty - } else { + { if (obj->type == OBJTYPE_GLASS || obj->type == OBJTYPE_TINTEDGLASS) { if (obj->damage >= obj->maxdamage) { glassDestroy(obj); @@ -13799,37 +11424,6 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon i = (i + 1) % ARRAYCOUNT(crate->slots); } while (i != startindex); } - } else if (obj->type == OBJTYPE_CHOPPER) { - struct chopperobj *chopper = (struct chopperobj *) obj; - - if (chopper->attackmode != CHOPPERMODE_FALL) { - chopper->attackmode = CHOPPERMODE_COMBAT; - } - } else if (obj->type == OBJTYPE_AUTOGUN) { - obj->flags |= OBJFLAG_AUTOGUN_DAMAGED; - - if (objGetDestroyedLevel(obj) == 1) { - obj->flags |= OBJFLAG_DEACTIVATED; - } - } else if (obj->type == OBJTYPE_CCTV) { - if (objGetDestroyedLevel(obj) == 1) { - obj->flags |= OBJFLAG_DEACTIVATED; - } - } else if (obj->type == OBJTYPE_SINGLEMONITOR) { - struct singlemonitorobj *monitor = (struct singlemonitorobj *) obj; - - if (objGetDestroyedLevel(obj) == 1) { - tvscreenSetCmdlist(&monitor->screen, g_TvCmdlist14); - } - } else if (obj->type == OBJTYPE_MULTIMONITOR) { - struct multimonitorobj *monitor = (struct multimonitorobj *) obj; - - if (objGetDestroyedLevel(obj) == 1) { - tvscreenSetCmdlist(&monitor->screens[0], g_TvCmdlist14); - tvscreenSetCmdlist(&monitor->screens[1], g_TvCmdlist14); - tvscreenSetCmdlist(&monitor->screens[2], g_TvCmdlist14); - tvscreenSetCmdlist(&monitor->screens[3], g_TvCmdlist14); - } } else if (obj->type == OBJTYPE_SHIELD) { struct shieldobj *shield = (struct shieldobj *) obj; @@ -14115,8 +11709,7 @@ void objHit(struct shotdata *shotdata, struct hit *hit) spc4 = false; spcc = random() % surfacetype->numwallhittexes; - if ((obj->model->filedata->skel == &g_SkelWindowedDoor && hit->unk44 == modelGetPart(obj->model->filedata, MODELPART_WINDOWEDDOOR_0003)) - || (obj->model->filedata->skel == &g_SkelCctv && hit->unk44 == modelGetPart(obj->model->filedata, MODELPART_CCTV_LENS))) { + if (obj->model->filedata->skel == &g_SkelWindowedDoor && hit->unk44 == modelGetPart(obj->model->filedata, MODELPART_WINDOWEDDOOR_0003)) { spcb = true; } @@ -14144,16 +11737,6 @@ void objHit(struct shotdata *shotdata, struct hit *hit) if (obj->type == OBJTYPE_AUTOGUN) { damage *= g_AutogunDamageRxScale; - } else if (obj->type == OBJTYPE_CCTV) { - // Leftover from GE: shots to a CCTV's lens is a one hit kill - if (obj->model->filedata->skel == &g_SkelCctv) { - if (modelGetPart(obj->model->filedata, MODELPART_CCTV_LENS) == hit->unk44) { - damage *= 100.0f; - cctvHandleLensShot(obj); - } - } - - damage *= g_CctvDamageRxScale; } else if (explosiveshells) { if (obj->type == OBJTYPE_GLASS || obj->type == OBJTYPE_TINTEDGLASS) { damage *= 100.0f; @@ -15567,10 +13150,6 @@ s32 objTestForPickup(struct prop *prop) } } - if (!objCanPickupFromSafe(obj)) { - return TICKOP_NONE; - } - if (obj->type == OBJTYPE_WEAPON) { struct weaponobj *weapon = prop->weapon; bool maybe = true; @@ -15755,45 +13334,6 @@ s32 objTestForPickup(struct prop *prop) return TICKOP_NONE; } -struct prop *hatApplyToChr(struct hatobj *hat, struct chrdata *chr, struct modelfiledata *filedata, struct prop *prop, struct model *model) -{ - if (chr->model->filedata->skel == &g_SkelChr) { - prop = objInit(&hat->base, filedata, prop, model); - - if (prop && hat->base.model) { - f32 scale = hat->base.extrascale * (1.0f / 256.0f); - - modelSetScale(hat->base.model, scale * hat->base.model->scale); - - hat->base.model->attachedtomodel = chr->model; - hat->base.model->attachedtonode = modelGetPart(chr->model->filedata, MODELPART_CHR_0006); - - propReparent(prop, chr->prop); - - chr->weapons_held[2] = prop; - } - } - - if (hat); - - return prop; -} - -void hatLoadAndApplyToChr(struct hatobj *hat, struct chrdata *chr) -{ - u32 stack; - s32 modelnum = hat->base.modelnum; - - setupLoadModeldef(modelnum); - - hatApplyToChr(hat, chr, g_ModelStates[modelnum].filedata, NULL, NULL); -} - -void hatAssignToChr(struct hatobj *hat, struct chrdata *chr) -{ - hatLoadAndApplyToChr(hat, chr); -} - struct weaponobj *weaponCreate(bool musthaveprop, bool musthavemodel, struct modelfiledata *filedata) { s32 i; @@ -16607,11 +14147,6 @@ void weaponSetGunfireVisible(struct prop *prop, bool visible, s16 room) } } -s32 hatGetType(struct prop *prop) -{ - return -1; -} - bool doorIsUnlocked(struct prop *playerprop, struct prop *doorprop) { struct doorobj *door = doorprop->door; @@ -16635,10 +14170,6 @@ bool doorIsUnlocked(struct prop *playerprop, struct prop *doorprop) } } - if (!doorIsPadlockFree(door)) { - canopen = false; - } - return canopen; } diff --git a/src/game/setup.c b/src/game/setup.c index 44f6de68a..ff1ed3c3e 100644 --- a/src/game/setup.c +++ b/src/game/setup.c @@ -39,132 +39,6 @@ u32 var8009cc34; u32 var8009cc38; u32 var8009cc3c; -struct tvscreen var80061a80 = { - g_TvCmdlist00, // cmdlist - 0, // offset - 0xffff, // pause60 - 0, // tconfig - 0, // rot - 1, // xscale - 0, // xscalefrac - 0, // xscaleinc - 1, // xscaleold - 1, // xscalenew - 1, // yscale - 0, // yscalefrac - 0, // yscaleinc - 1, // yscaleold - 1, // yscalenew - 0.5, // xmid - 0, // xmidfrac - 0, // xmidinc - 0.5, // xmidold - 0.5, // xmidnew - 0.5, // ymid - 0, // ymidfrac - 0, // ymidinc - 0.5, // ymidold - 0.5, // ymidnew - 0xff, // red - 0xff, // redold - 0xff, // rednew - 0xff, // green - 0xff, // greenold - 0xff, // greennew - 0xff, // blue - 0xff, // blueold - 0xff, // bluenew - 0xff, // alpha - 0xff, // alphaold - 0xff, // alphanew - 1, // colfrac - 0, // colinc -}; - -struct tvscreen var80061af4 = { - var8006aaa0, // cmdlist - 0, // offset - 0xffff, // pause60 - 0, // tconfig - 0, // rot - 1, // xscale - 0, // xscalefrac - 0, // xscaleinc - 1, // xscaleold - 1, // xscalenew - 1, // yscale - 0, // yscalefrac - 0, // yscaleinc - 1, // yscaleold - 1, // yscalenew - 0.5, // xmid - 0, // xmidfrac - 0, // xmidinc - 0.5, // xmidold - 0.5, // xmidnew - 0.5, // ymid - 0, // ymidfrac - 0, // ymidinc - 0.5, // ymidold - 0.5, // ymidnew - 0xff, // red - 0xff, // redold - 0xff, // rednew - 0xff, // green - 0xff, // greenold - 0xff, // greennew - 0xff, // blue - 0xff, // blueold - 0xff, // bluenew - 0xff, // alpha - 0xff, // alphaold - 0xff, // alphanew - 1, // colfrac - 0, // colinc -}; - -struct tvscreen var80061b68 = { - var8006aae4, // cmdlist - 0, // offset - 0xffff, // pause60 - 0, // tconfig - 0, // rot - 1, // xscale - 0, // xscalefrac - 0, // xscaleinc - 1, // xscaleold - 1, // xscalenew - 1, // yscale - 0, // yscalefrac - 0, // yscaleinc - 1, // yscaleold - 1, // yscalenew - 0.5, // xmid - 0, // xmidfrac - 0, // xmidinc - 0.5, // xmidold - 0.5, // xmidnew - 0.5, // ymid - 0, // ymidfrac - 0, // ymidinc - 0.5, // ymidold - 0.5, // ymidnew - 0xff, // red - 0xff, // redold - 0xff, // rednew - 0xff, // green - 0xff, // greenold - 0xff, // greennew - 0xff, // blue - 0xff, // blueold - 0xff, // bluenew - 0xff, // alpha - 0xff, // alphaold - 0xff, // alphanew - 1, // colfrac - 0, // colinc -}; - u32 var80061bdc = 0x00000000; f32 g_DoorScale = 1; u32 var80061be4 = 0x00000000; @@ -191,26 +65,8 @@ void propsReset(void) g_MaxEmbedments = 0; } - setupReset0f00cc8c(); setupResetProxyMines(); - g_AlarmTimer = 0; - g_AlarmAudioHandle = NULL; - g_AlarmSpeakerWeight = 64; - - g_GasReleaseTimer240 = 0; - g_GasReleasing = false; - g_GasPos.x = 0; - g_GasPos.y = 0; - g_GasPos.z = 0; - g_GasLastCough60 = 0; - g_GasSoundTimer240 = 0; - g_GasAudioHandle = NULL; - - g_CountdownTimerOff = COUNTDOWNTIMERREASON_AI; - g_CountdownTimerRunning = false; - g_CountdownTimerValue60 = 0; - g_PlayersDetonatingMines = 0; g_TintedGlassEnabled = false; @@ -257,15 +113,9 @@ void propsReset(void) } g_LiftDoors = NULL; - g_PadlockedDoors = NULL; - g_SafeItems = NULL; - g_LinkedScenery = NULL; - g_BlockedPaths = NULL; g_EmbedProp = NULL; g_EmbedHitPart = -1; - g_CctvWaitScale = 1; - g_CctvDamageRxScale = 1; g_AutogunAccuracyScale = 1; g_AutogunDamageTxScale = 1; g_AutogunDamageRxScale = 1; @@ -287,46 +137,6 @@ void setupCreateLiftDoor(struct linkliftdoorobj *link) g_LiftDoors = link; } -void setupCreatePadlockedDoor(struct padlockeddoorobj *link) -{ - link->next = g_PadlockedDoors; - g_PadlockedDoors = link; -} - -void setupCreateSafeItem(struct safeitemobj *link) -{ - link->next = g_SafeItems; - g_SafeItems = link; -} - -void setupCreateConditionalScenery(struct linksceneryobj *link) -{ - link->next = g_LinkedScenery; - g_LinkedScenery = link; -} - -void setupCreateBlockedPath(struct blockedpathobj *blockedpath) -{ - blockedpath->next = g_BlockedPaths; - g_BlockedPaths = blockedpath; -} - -void setupReset0f00cc8c(void) -{ - struct tvscreen tmp1; - struct tvscreen tmp2; - struct tvscreen tmp3; - - tmp1 = var80061a80; - var8009ce98 = tmp1; - - tmp2 = var80061af4; - var8009cf10 = tmp2; - - tmp3 = var80061b68; - var8009cf88 = tmp3; -} - void setupResetProxyMines(void) { s32 i; @@ -656,226 +466,6 @@ void setupPlaceWeapon(struct weaponobj *weapon, s32 cmdindex) } } -void setupCreateHat(struct hatobj *hat, s32 cmdindex) -{ - if (hat->base.flags & OBJFLAG_ASSIGNEDTOCHR) { - struct chrdata *chr = chrFindByLiteralId(hat->base.pad); - - if (chr && chr->prop && chr->model) { - hatAssignToChr(hat, chr); - } - } else { - setupCreateObject(&hat->base, cmdindex); - } -} - -void setupCreateKey(struct keyobj *key, s32 cmdindex) -{ - setupCreateObject(&key->base, cmdindex); -} - -void setupCreateMine(struct mineobj *mine, s32 cmdindex) -{ - mine->base.type = OBJTYPE_WEAPON; - - setupCreateObject(&mine->base, cmdindex); - - mine->base.prop->forcetick = true; -} - -void setupCreateCctv(struct cctvobj *cctv, s32 cmdindex) -{ - struct defaultobj *obj = &cctv->base; - - setupCreateObject(obj, cmdindex); - - if (cctv->lookatpadnum >= 0) { - struct coord lenspos; - union modelrodata *lens = modelGetPartRodata(obj->model->filedata, MODELPART_CCTV_CASING); - struct pad pad; - f32 xdiff; - f32 ydiff; - f32 zdiff; - - padUnpack(cctv->lookatpadnum, PADFIELD_POS, &pad); - - lenspos.x = lens->position.pos.x; - lenspos.y = lens->position.pos.y; - lenspos.z = lens->position.pos.z; - - mtx00016208(obj->realrot, &lenspos); - - lenspos.x += obj->prop->pos.x; - lenspos.y += obj->prop->pos.y; - lenspos.z += obj->prop->pos.z; - - xdiff = lenspos.x - pad.pos.x; - ydiff = lenspos.y - pad.pos.y; - zdiff = lenspos.z - pad.pos.z; - - if (ydiff) { - // empty - } - - mtx00016d58(&cctv->camrotm, 0.0f, 0.0f, 0.0f, xdiff, ydiff, zdiff, 0.0f, 1.0f, 0.0f); - mtx00015f04(obj->model->scale, &cctv->camrotm); - - cctv->toleft = 0; - cctv->yleft = *(s32 *)&cctv->yleft * M_BADTAU / 65536.0f; - cctv->yright = *(s32 *)&cctv->yright * M_BADTAU / 65536.0f; - cctv->yspeed = 0.0f; - cctv->ymaxspeed = *(s32 *)&cctv->ymaxspeed * M_BADTAU / 65536.0f; - cctv->maxdist = *(s32 *)&cctv->maxdist; - cctv->yrot = cctv->yleft; - - cctv->yzero = atan2f(xdiff, zdiff); - cctv->xzero = M_BADTAU - atan2f(ydiff, sqrtf(xdiff * xdiff + zdiff * zdiff)); - - if (xdiff || zdiff) { - // empty - } - - cctv->seebondtime60 = 0; - } -} - -void setupCreateAutogun(struct autogunobj *autogun, s32 cmdindex) -{ - setupCreateObject(&autogun->base, cmdindex); - - autogun->maxspeed = *(s32 *)&autogun->maxspeed * PALUPF(M_BADTAU) / 65536.0f; - autogun->aimdist = *(s32 *)&autogun->aimdist * 100.0f / 65536.0f; - autogun->ymaxleft = *(s32 *)&autogun->ymaxleft * M_BADTAU / 65536.0f; - autogun->ymaxright = *(s32 *)&autogun->ymaxright * M_BADTAU / 65536.0f; - - autogun->firecount = 0; - autogun->lastseebond60 = -1; - autogun->lastaimbond60 = -1; - autogun->allowsoundframe = -1; - autogun->yrot = 0; - autogun->yspeed = 0; - autogun->yzero = 0; - autogun->xrot = 0; - autogun->xspeed = 0; - autogun->xzero = 0; - autogun->barrelspeed = 0; - autogun->barrelrot = 0; - autogun->beam = mempAlloc(ALIGN16(sizeof(struct beam)), MEMPOOL_STAGE); - autogun->beam->age = -1; - autogun->firing = false; - autogun->ammoquantity = 255; - autogun->shotbondsum = 0; - - if (autogun->targetpad >= 0) { - u32 stack1; - f32 xdiff; - f32 ydiff; - f32 zdiff; - u32 stack2; - struct pad pad; - - padUnpack(autogun->targetpad, PADFIELD_POS, &pad); - - xdiff = pad.pos.x - autogun->base.prop->pos.x; - ydiff = pad.pos.y - autogun->base.prop->pos.y; - zdiff = pad.pos.z - autogun->base.prop->pos.z; - - autogun->yzero = atan2f(xdiff, zdiff); - autogun->xzero = atan2f(ydiff, sqrtf(xdiff * xdiff + zdiff * zdiff)); - } else if (autogun->base.modelnum == MODEL_CETROOFGUN) { - // Deep Sea roofgun - autogun->xzero = -1.5705462694168f; - } -} - -void setupCreateHangingMonitors(struct hangingmonitorsobj *monitors, s32 cmdindex) -{ - setupCreateObject(&monitors->base, cmdindex); -} - -void setupCreateSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex) -{ - u32 stack[2]; - - monitor->screen = var8009ce98; - tvscreenSetImageByNum(&monitor->screen, monitor->imagenum); - - // In GE, monitors with a negative pad are hanging TVs which attach to a - // hangingmonitors object, which is actually just the mount. In PD, hanging - // monitors do not exist in the setup files so this code is unused. - if (monitor->base.pad < 0 && (monitor->base.flags & OBJFLAG_INSIDEANOTHEROBJ) == 0) { - s32 modelnum = monitor->base.modelnum; - struct defaultobj *owner = (struct defaultobj *)setupGetCmdByIndex(cmdindex + monitor->owneroffset); - struct prop *prop; - f32 scale; - struct coord spa4; - Mtxf sp64; - Mtxf sp24; - - setupLoadModeldef(modelnum); - - scale = monitor->base.extrascale * (1.0f / 256.0f); - - if (g_Vars.normmplayerisrunning || g_Vars.lvmpbotlevel) { - monitor->base.hidden2 |= OBJH2FLAG_CANREGEN; - } - - prop = objInitWithAutoModel(&monitor->base); - monitor->base.embedment = embedmentAllocate(); - - if (prop && monitor->base.embedment) { - monitor->base.hidden |= OBJHFLAG_EMBEDDED; - modelSetScale(monitor->base.model, monitor->base.model->scale * scale); - monitor->base.model->attachedtomodel = owner->model; - - if (monitor->ownerpart == MODELPART_0000) { - monitor->base.model->attachedtonode = modelGetPart(owner->model->filedata, MODELPART_0000); - } else if (monitor->ownerpart == MODELPART_0001) { - monitor->base.model->attachedtonode = modelGetPart(owner->model->filedata, MODELPART_0001); - } else if (monitor->ownerpart == MODELPART_0002) { - monitor->base.model->attachedtonode = modelGetPart(owner->model->filedata, MODELPART_0002); - } else { - monitor->base.model->attachedtonode = modelGetPart(owner->model->filedata, MODELPART_0003); - } - - propReparent(prop, owner->prop); - mtx4LoadXRotation(0.3664608001709f, &sp64); - mtx00015f04(monitor->base.model->scale / owner->model->scale, &sp64); - modelGetRootPosition(monitor->base.model, &spa4); - - spa4.x = -spa4.x; - spa4.y = -spa4.y; - spa4.z = -spa4.z; - - mtx4LoadTranslation(&spa4, &sp24); - mtx00015be4(&sp64, &sp24, &monitor->base.embedment->matrix); - } - } else { - setupCreateObject(&monitor->base, cmdindex); - } - - if (monitor->base.prop && (monitor->base.flags & OBJFLAG_MONITOR_RENDERPOSTBG)) { - monitor->base.prop->flags |= PROPFLAG_RENDERPOSTBG; - } -} - -void setupCreateMultiMonitor(struct multimonitorobj *monitor, s32 cmdindex) -{ - monitor->screens[0] = var8009ce98; - tvscreenSetImageByNum(&monitor->screens[0], monitor->imagenums[0]); - - monitor->screens[1] = var8009ce98; - tvscreenSetImageByNum(&monitor->screens[1], monitor->imagenums[1]); - - monitor->screens[2] = var8009ce98; - tvscreenSetImageByNum(&monitor->screens[2], monitor->imagenums[2]); - - monitor->screens[3] = var8009ce98; - tvscreenSetImageByNum(&monitor->screens[3], monitor->imagenums[3]); - - setupCreateObject(&monitor->base, cmdindex); -} - s32 setupGetPortalByPad(s32 padnum) { f32 mult; @@ -1109,9 +699,6 @@ void setupLoadFiles(s32 stagenum) u16 filenum; bool modified; - g_PadEffects = NULL; - g_LastPadEffectIndex = -1; - g_DoorScale = 1; for (i = 0; i < NUM_MODELS; i++) { @@ -1281,88 +868,11 @@ void setupCreateProps(s32 stagenum) while (obj->type != OBJTYPE_END) { switch (obj->type) { - case OBJTYPE_GRENADEPROB: - { - struct grenadeprobobj *grenadeprob = (struct grenadeprobobj *)obj; - u8 probability = grenadeprob->probability; - struct chrdata *chr = chrFindByLiteralId(grenadeprob->chrnum); - - if (chr && chr->prop && chr->model) { - chr->grenadeprob = probability; - } - } - break; - case OBJTYPE_CHR: - if (withchrs) { - bodyAllocateChr(stagenum, (struct packedchr *) obj, index); - } - break; case OBJTYPE_DOOR: if (withobjs && (obj->flags2 & diffflag) == 0) { setupCreateDoor((struct doorobj *)obj, index); } break; - case OBJTYPE_DOORSCALE: - { - struct doorscaleobj *scale = (struct doorscaleobj *)obj; - g_DoorScale = scale->scale / 65536.0f; - } - break; - case OBJTYPE_WEAPON: - if (withchrs && (obj->flags2 & diffflag) == 0) { - setupPlaceWeapon((struct weaponobj *)obj, index); - } - break; - case OBJTYPE_KEY: - if (withchrs && (obj->flags2 & diffflag) == 0) { - setupCreateKey((struct keyobj *)obj, index); - } - break; - case OBJTYPE_HAT: - if (withchrs && (obj->flags2 & diffflag) == 0) { - setupCreateHat((struct hatobj *)obj, index); - } - break; - case OBJTYPE_CCTV: - if (withobjs && (obj->flags2 & diffflag) == 0) { - setupCreateCctv((struct cctvobj *)obj, index); - } - break; - case OBJTYPE_AUTOGUN: - if (withobjs && (obj->flags2 & diffflag) == 0) { - setupCreateAutogun((struct autogunobj *)obj, index); - } - break; - case OBJTYPE_HANGINGMONITORS: - if (withobjs && (obj->flags2 & diffflag) == 0) { - setupCreateHangingMonitors((struct hangingmonitorsobj *)obj, index); - } - break; - case OBJTYPE_SINGLEMONITOR: - if (withobjs && (obj->flags2 & diffflag) == 0) { - setupCreateSingleMonitor((struct singlemonitorobj *)obj, index); - } - break; - case OBJTYPE_MULTIMONITOR: - if (withobjs && (obj->flags2 & diffflag) == 0) { - setupCreateMultiMonitor((struct multimonitorobj *)obj, index); - } - break; - case OBJTYPE_SHIELD: - if (withobjs) { -#if VERSION >= VERSION_JPN_FINAL - if ((obj->flags2 & diffflag) == 0) -#else - if ((obj->flags2 & diffflag) == 0 || g_Jpn) -#endif - { - struct shieldobj *shield = (struct shieldobj *)obj; - shield->initialamount = *(s32 *)&shield->initialamount / 65536.0f; - shield->amount = shield->initialamount; - setupCreateObject(obj, index); - } - } - break; case OBJTYPE_TINTEDGLASS: if (withobjs && (obj->flags2 & diffflag) == 0) { if (obj->flags & OBJFLAG_GLASS_HASPORTAL) { @@ -1443,17 +953,6 @@ void setupCreateProps(s32 stagenum) setupCreateHov(obj, &hoverprop->hov); } break; - case OBJTYPE_FAN: - if (withobjs && (obj->flags2 & diffflag) == 0) { - struct fanobj *fan = (struct fanobj *)obj; - - fan->yrot = 0; - fan->ymaxspeed = PALUPF(*(s32 *)&fan->ymaxspeed) / 65536.0f; - fan->yaccel = PALUPF(*(s32 *)&fan->yaccel) / 65536.0f; - - setupCreateObject(obj, index); - } - break; case OBJTYPE_GLASS: if (withobjs && (obj->flags2 & diffflag) == 0) { if (obj->flags & OBJFLAG_GLASS_HASPORTAL) { @@ -1464,49 +963,8 @@ void setupCreateProps(s32 stagenum) setupCreateObject(obj, index); } break; - case OBJTYPE_ESCASTEP: - if (withobjs && (obj->flags2 & diffflag) == 0) { - struct escalatorobj *step = (struct escalatorobj *)obj; - struct prop *prop; - - // TODO: There is a stack problem here that should be - // resolved. sp1a8 is really an Mtxf which doesn't fit - // in its current location in the stack. - f32 sp1a8[12]; - f32 sp184[3][3]; - - setupCreateObject(obj, index); - - prop = obj->prop; - - if (prop) { - step->prevpos.x = prop->pos.x; - step->prevpos.y = prop->pos.y; - step->prevpos.z = prop->pos.z; - } - - if (obj->flags & OBJFLAG_ESCSTEP_ZALIGNED) { - step->frame = escstepy; - escstepy += 40; - mtx4LoadYRotation(4.7116389274597f, (Mtxf *)sp1a8); - mtx4ToMtx3((Mtxf *)sp1a8, sp184); - mtx00016110(sp184, obj->realrot); - } else { - step->frame = escstepx; - escstepx += 40; - mtx4LoadYRotation(M_BADPI, (Mtxf *)sp1a8); - mtx4ToMtx3((Mtxf *)sp1a8, sp184); - mtx00016110(sp184, obj->realrot); - } - } - break; case OBJTYPE_BASIC: - case OBJTYPE_ALARM: case OBJTYPE_AMMOCRATE: - case OBJTYPE_DEBRIS: - case OBJTYPE_GASBOTTLE: - case OBJTYPE_29: - case OBJTYPE_SAFE: if (withobjs && (obj->flags2 & diffflag) == 0) { setupCreateObject(obj, index); } @@ -1541,158 +999,6 @@ void setupCreateProps(s32 stagenum) } } break; - case OBJTYPE_TRUCK: - if (withobjs && (obj->flags2 & diffflag) == 0) { - struct truckobj *truck = (struct truckobj *)obj; - - setupCreateObject(obj, index); - - if (obj->model) { - struct modelnode *node = modelGetPart(obj->model->filedata, 5); - - if (node) { - union modelrwdata *rwdata = modelGetNodeRwData(obj->model, node); - rwdata->type05.unk00 = ((obj->flags & OBJFLAG_DEACTIVATED) == 0); - } - } - - truck->speed = 0; - truck->wheelxrot = 0; - truck->wheelyrot = 0; - truck->speedaim = 0; - truck->speedtime60 = -1; - truck->turnrot60 = 0; - truck->roty = 0; - truck->path = NULL; - truck->nextstep = 0; - } - break; - case OBJTYPE_HOVERCAR: - if (withhovercars && withobjs && (obj->flags2 & diffflag) == 0) { - struct hovercarobj *car = (struct hovercarobj *)obj; - struct prop *prop; - - setupCreateObject(obj, index); - - prop = obj->prop; - - car->speed = 0; - car->speedaim = 0; - car->turnrot60 = 0; - car->roty = 0; - car->rotx = 0; - car->speedtime60 = -1; - car->path = NULL; - car->nextstep = 0; - - if (obj->flags & OBJFLAG_CHOPPER_INACTIVE) { - prop->pos.y = cdFindFloorYColourTypeAtPos(&prop->pos, prop->rooms, NULL, 0) + 30; - } - - prop->forcetick = true; - } - break; - case OBJTYPE_CHOPPER: - if (withobjs && (obj->flags2 & diffflag) == 0) { - struct chopperobj *chopper = (struct chopperobj *)obj; - - setupCreateObject(obj, index); - - obj->flags |= OBJFLAG_20000000; - obj->prop->forcetick = true; - - chopper->turnrot60 = 0; - chopper->roty = 0; - chopper->rotx = 0; - chopper->gunroty = 0; - chopper->gunrotx = 0; - chopper->barrelrot = 0; - chopper->barrelrotspeed = 0; - chopper->path = NULL; - chopper->nextstep = 0; - chopper->target = -1; - chopper->targetvisible = false; - chopper->attackmode = CHOPPERMODE_PATROL; - chopper->vz = 0; - chopper->vy = 0; - chopper->vx = 0; - chopper->otz = 0; - chopper->oty = 0; - chopper->otx = 0; - chopper->power = 0; - chopper->bob = 0; - chopper->bobstrength = 0.05f; - chopper->timer60 = 0; - chopper->patroltimer60 = 0; - chopper->cw = 0; - chopper->weaponsarmed = true; - chopper->fireslotthing = mempAlloc(sizeof(struct fireslotthing), MEMPOOL_STAGE); - chopper->fireslotthing->beam = mempAlloc(ALIGN16(sizeof(struct beam)), MEMPOOL_STAGE); - chopper->fireslotthing->beam->age = -1; - chopper->fireslotthing->unk08 = -1; - chopper->fireslotthing->unk00 = 0; - chopper->fireslotthing->unk01 = 0; - chopper->fireslotthing->unk0c = 0.85f; - chopper->fireslotthing->unk10 = 0.2f; - chopper->fireslotthing->unk14 = 0; - chopper->dead = false; - } - break; - case OBJTYPE_HELI: - if (withobjs && (obj->flags2 & diffflag) == 0) { - struct heliobj *heli = (struct heliobj *)obj; - - setupCreateObject(obj, index); - - heli->speed = 0; - heli->speedaim = 0; - heli->rotoryrot = 0; - heli->rotoryspeed = 0; - heli->rotoryspeedaim = 0; - heli->yrot = 0; - heli->speedtime60 = -1; - heli->rotoryspeedtime = -1; - heli->path = NULL; - heli->nextstep = 0; - } - break; - case OBJTYPE_RENAMEOBJ: - { - struct textoverride *override = (struct textoverride *)obj; - struct defaultobj *targetobj = setupGetObjByCmdIndex(override->objoffset + index); - override->obj = targetobj; - - if (targetobj) { - targetobj->hidden |= OBJHFLAG_HASTEXTOVERRIDE; - } - - invInsertTextOverride(override); - } - break; - case OBJTYPE_CAMERAPOS: - { - struct cameraposobj *camera = (struct cameraposobj *)obj; - camera->x = *(s32 *)&camera->x / 100.0f; - camera->y = *(s32 *)&camera->y / 100.0f; - camera->z = *(s32 *)&camera->z / 100.0f; - camera->theta = *(s32 *)&camera->theta / 65536.0f; - camera->verta = *(s32 *)&camera->verta / 65536.0f; - } - break; - case OBJTYPE_PADEFFECT: - { - struct padeffectobj *padeffect = (struct padeffectobj *)obj; - if (g_LastPadEffectIndex == -1) { - g_PadEffects = padeffect; - } - g_LastPadEffectIndex++; - } - break; - case OBJTYPE_MINE: - if (withobjs && (obj->flags2 & diffflag) == 0) { - setupCreateMine((struct mineobj *)obj, index); - } - break; } obj = (struct defaultobj *)((u32 *)obj + setupGetCmdLength((u32 *)obj)); @@ -1786,123 +1092,7 @@ void setupCreateProps(s32 stagenum) } } break; - case OBJTYPE_SAFEITEM: - { - struct safeitemobj *link = (struct safeitemobj *)obj; - s32 itemoffset = (s32)link->item; - s32 safeoffset = (s32)link->safe; - s32 dooroffset = (s32)link->door; - struct defaultobj *item = setupGetObjByCmdIndex(index + itemoffset); - struct defaultobj *safe = setupGetObjByCmdIndex(index + safeoffset); - struct defaultobj *door = setupGetObjByCmdIndex(index + dooroffset); - - if (item && item->prop - && safe && safe->prop && safe->type == OBJTYPE_SAFE - && door && door->prop && door->type == OBJTYPE_DOOR) { - link->item = item; - link->safe = (struct safeobj *)safe; - link->door = (struct doorobj *)door; - - setupCreateSafeItem(link); - - item->flags2 |= OBJFLAG2_LINKEDTOSAFE; - door->flags2 |= OBJFLAG2_LINKEDTOSAFE; - } - } - break; - case OBJTYPE_PADLOCKEDDOOR: - { - struct padlockeddoorobj *link = (struct padlockeddoorobj *)obj; - s32 dooroffset = (s32)link->door; - s32 lockoffset = (s32)link->lock; - struct defaultobj *door = setupGetObjByCmdIndex(index + dooroffset); - struct defaultobj *lock = setupGetObjByCmdIndex(index + lockoffset); - - if (door && door->prop && lock && lock->prop - && door->type == OBJTYPE_DOOR) { - link->door = (struct doorobj *)door; - link->lock = lock; - - setupCreatePadlockedDoor(link); - - door->hidden |= OBJHFLAG_PADLOCKEDDOOR; - } - } - break; - case OBJTYPE_CONDITIONALSCENERY: - { - struct linksceneryobj *link = (struct linksceneryobj *)obj; - s32 triggeroffset = (s32)link->trigger; - s32 unexpoffset = (s32)link->unexp; - s32 expoffset = (s32)link->exp; - struct defaultobj *trigger = setupGetObjByCmdIndex(index + triggeroffset); - struct defaultobj *unexp = NULL; - struct defaultobj *exp = NULL; - s32 alwayszero = 0; - - if (unexpoffset) { - unexp = setupGetObjByCmdIndex(index + unexpoffset); - } - - if (expoffset) { - exp = setupGetObjByCmdIndex(index + expoffset); - } - - if (trigger && trigger->prop - && (unexpoffset == 0 || (unexp && unexp->prop)) - && (expoffset == 0 || (exp && exp->prop))) { - link->trigger = trigger; - link->unexp = unexp; - link->exp = exp; - - setupCreateConditionalScenery(link); - - trigger->hidden |= OBJHFLAG_CONDITIONALSCENERY; - - if (unexpoffset) { - unexp->hidden |= OBJHFLAG_CONDITIONALSCENERY; - } - - // This gets optimised out but makes v0 unavailable - // for storing OBJHFLAG_CONDITIONALSCENERY, which is required - // for a match. Any function call would work; I just - // copied the one above. - if (alwayszero) { - setupCreateConditionalScenery(link); - } - - if (expoffset) { - exp->hidden |= OBJHFLAG_CONDITIONALSCENERY; - exp->flags2 |= OBJFLAG2_INVISIBLE; - } - - if (trigger->hidden & OBJHFLAG_02000000) { - objSetBlockedPathUnblocked(trigger, false); - } - } - } - break; - case OBJTYPE_BLOCKEDPATH: - { - struct blockedpathobj *blockedpath = (struct blockedpathobj *)obj; - s32 objoffset = (s32)blockedpath->blocker; - struct defaultobj *blocker = setupGetObjByCmdIndex(index + objoffset); - - if (blocker && blocker->prop) { - blockedpath->blocker = blocker; - - setupCreateBlockedPath(blockedpath); - - blocker->hidden |= OBJHFLAG_02000000; - - if (blocker->hidden & OBJHFLAG_CONDITIONALSCENERY) { - objSetBlockedPathUnblocked(blocker, false); - } - } - } - break; } - obj = (struct defaultobj *)((u32 *)obj + setupGetCmdLength((u32 *)obj)); index++; } diff --git a/src/game/smoke.c b/src/game/smoke.c index b077040b3..4f3fc6506 100644 --- a/src/game/smoke.c +++ b/src/game/smoke.c @@ -415,11 +415,6 @@ void smokeCreateAtProp(struct prop *prop, s16 type) smokeCreateWithSource(prop, &prop->pos, prop->rooms, type, false); } -void smokeCreateAtPadEffect(struct padeffectobj *effect, struct coord *pos, s16 *rooms, s16 type) -{ - smokeCreateWithSource(effect, pos, rooms, type, true); -} - void smokeClearForProp(struct prop *prop) { s32 i; diff --git a/src/lib/path.c b/src/lib/path.c deleted file mode 100644 index 6e1e64e3c..000000000 --- a/src/lib/path.c +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include "constants.h" -#include "bss.h" -#include "data.h" -#include "game/padhalllv.h" -#include "types.h" - -void objSetBlockedPathUnblocked(struct defaultobj *blocker, bool unblocked) -{ - if (blocker->hidden & OBJHFLAG_02000000) { - struct blockedpathobj *bp = g_BlockedPaths; - - while (bp) { - if (bp->blocker == blocker) { - if (unblocked) { - waypointEnableSegment(&g_StageSetup.waypoints[bp->waypoint1], &g_StageSetup.waypoints[bp->waypoint2]); - break; - } else { - waypointDisableSegment(&g_StageSetup.waypoints[bp->waypoint1], &g_StageSetup.waypoints[bp->waypoint2]); - break; - } - } - - bp = bp->next; - } - } -}