Decompile modelRenderNodeStarGunfire
This commit is contained in:
parent
c3397a3350
commit
f3fae2f180
|
|
@ -7833,7 +7833,7 @@ Gfx *bgRender(Gfx *gdl)
|
|||
{
|
||||
gdl = lightsSetDefault(gdl);
|
||||
|
||||
gSPSegment(gdl++, 0x0f, g_BgPrimaryData);
|
||||
gSPSegment(gdl++, SPSEGMENT_BG_DL, g_BgPrimaryData);
|
||||
|
||||
gdl = envStartFog(gdl, false);
|
||||
gdl = func0f164150(gdl);
|
||||
|
|
@ -9926,7 +9926,7 @@ Gfx *bgRenderRoomPass(Gfx *gdl, s32 roomnum, struct roomgfxdata18 *arg2, bool ar
|
|||
dyntexTickRoom(roomnum, arg2->vertices);
|
||||
}
|
||||
|
||||
gSPSegment(gdl++, 0xe, OS_PHYSICAL_TO_K0(arg2->vertices));
|
||||
gSPSegment(gdl++, SPSEGMENT_BG_VTX, OS_PHYSICAL_TO_K0(arg2->vertices));
|
||||
|
||||
roomHighlight(roomnum);
|
||||
|
||||
|
|
@ -9939,7 +9939,7 @@ Gfx *bgRenderRoomPass(Gfx *gdl, s32 roomnum, struct roomgfxdata18 *arg2, bool ar
|
|||
v0 = (u32)arg2->colours;
|
||||
}
|
||||
|
||||
gSPSegment(gdl++, 0x0d, OS_PHYSICAL_TO_K0(v0));
|
||||
gSPSegment(gdl++, SPSEGMENT_BG_COL, OS_PHYSICAL_TO_K0(v0));
|
||||
|
||||
gSPDisplayList(gdl++, OS_PHYSICAL_TO_K0(arg2->gdl));
|
||||
|
||||
|
|
|
|||
|
|
@ -14143,7 +14143,7 @@ void bgunExecuteModelCmdList(s32 *ptr)
|
|||
break;
|
||||
case 4:
|
||||
rwdata = (union modelrwdata *)ptr[1];
|
||||
rwdata->gunfire.visible = false;
|
||||
rwdata->chrgunfire.visible = false;
|
||||
ptr += 2;
|
||||
break;
|
||||
case 5:
|
||||
|
|
@ -14217,9 +14217,9 @@ s32 bgunCreateModelCmdList(struct model *model, struct modelnode *nodearg, s32 *
|
|||
ptr += 2;
|
||||
len += 8;
|
||||
break;
|
||||
case MODELNODETYPE_GUNFIRE:
|
||||
case MODELNODETYPE_CHRGUNFIRE:
|
||||
rwdata = modelGetNodeRwData(model, node);
|
||||
rwdata->gunfire.visible = false;
|
||||
rwdata->chrgunfire.visible = false;
|
||||
ptr[0] = 4;
|
||||
ptr[1] = (s32)rwdata;
|
||||
ptr += 2;
|
||||
|
|
|
|||
|
|
@ -9128,7 +9128,7 @@ bool func0f03e9f4(struct chrdata *chr, struct attackanimconfig *animcfg, bool fi
|
|||
struct modelrwdata_chrinfo *chrrwdata;
|
||||
Mtxf *sp108;
|
||||
Mtxf spc8;
|
||||
struct modelrodata_gunfire *burstrodata;
|
||||
struct modelrodata_chrgunfire *burstrodata;
|
||||
struct coord spb8;
|
||||
Mtxf *spb4;
|
||||
Mtxf *spb0;
|
||||
|
|
@ -9157,7 +9157,7 @@ bool func0f03e9f4(struct chrdata *chr, struct attackanimconfig *animcfg, bool fi
|
|||
|
||||
if (burstnode) {
|
||||
sp108 = model0001a5cc(gunmodel, burstnode, 0);
|
||||
burstrodata = &burstnode->rodata->gunfire;
|
||||
burstrodata = &burstnode->rodata->chrgunfire;
|
||||
spb4 = cam0f0b53a4((u8 *)sp108);
|
||||
|
||||
if (spb4) {
|
||||
|
|
@ -9589,7 +9589,7 @@ bool chrGetGunPos(struct chrdata *chr, s32 handnum, struct coord *gunpos)
|
|||
struct modelnode *part1;
|
||||
Mtxf *spac;
|
||||
Mtxf sp6c;
|
||||
struct modelrodata_gunfire *rodata;
|
||||
struct modelrodata_chrgunfire *rodata;
|
||||
Mtxf *sp64;
|
||||
Mtxf sp24;
|
||||
|
||||
|
|
@ -9600,7 +9600,7 @@ bool chrGetGunPos(struct chrdata *chr, s32 handnum, struct coord *gunpos)
|
|||
if ((chr->prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) && (weaponprop->flags & PROPFLAG_ONTHISSCREENTHISTICK)) {
|
||||
if ((part0 = modelGetPart(model->filedata, MODELPART_0000))) {
|
||||
spac = model0001a5cc(model, part0, 0);
|
||||
rodata = &part0->rodata->gunfire;
|
||||
rodata = &part0->rodata->chrgunfire;
|
||||
|
||||
gunpos->x = rodata->pos.x;
|
||||
gunpos->y = rodata->pos.y;
|
||||
|
|
@ -18717,7 +18717,7 @@ void robotSetMuzzleFlash(struct chrdata *chr, bool right, bool visible)
|
|||
}
|
||||
|
||||
if (rwdata) {
|
||||
rwdata->gunfire.visible = visible;
|
||||
rwdata->chrgunfire.visible = visible;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ Gfx *getitleRender(Gfx *gdl)
|
|||
{
|
||||
var80062410 = 1 - var80062410;
|
||||
|
||||
gSPSegment(gdl++, 0x02, osVirtualToPhysical(var8009cc90));
|
||||
gSPSegment(gdl++, SPSEGMENT_GETITLE, osVirtualToPhysical(var8009cc90));
|
||||
|
||||
if (var80062414 == 0 || var80062414 == 1) {
|
||||
s32 sp30;
|
||||
|
|
|
|||
|
|
@ -974,7 +974,7 @@ void lvFindThreats(void)
|
|||
*/
|
||||
Gfx *lvRender(Gfx *gdl)
|
||||
{
|
||||
gSPSegment(gdl++, 0x00, 0x00000000);
|
||||
gSPSegment(gdl++, SPSEGMENT_PHYSICAL, 0x00000000);
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
func0f0d5a7c();
|
||||
|
|
|
|||
|
|
@ -19079,9 +19079,9 @@ void autogunTickShoot(struct prop *autogunprop)
|
|||
sp108 = model0001a5cc(model, flashnode, 0);
|
||||
rodata = flashnode->rodata;
|
||||
|
||||
gunpos.x = rodata->gunfire.pos.x;
|
||||
gunpos.y = rodata->gunfire.pos.y;
|
||||
gunpos.z = rodata->gunfire.pos.z;
|
||||
gunpos.x = rodata->chrgunfire.pos.x;
|
||||
gunpos.y = rodata->chrgunfire.pos.y;
|
||||
gunpos.z = rodata->chrgunfire.pos.z;
|
||||
} else {
|
||||
sp108 = model0001a5cc(model, posnode, 0);
|
||||
|
||||
|
|
@ -19393,14 +19393,14 @@ void autogunTickShoot(struct prop *autogunprop)
|
|||
|
||||
if (node1) {
|
||||
union modelrwdata *rwdata = modelGetNodeRwData(model, node1);
|
||||
rwdata->gunfire.visible = fireleft;
|
||||
rwdata->chrgunfire.visible = fireleft;
|
||||
}
|
||||
|
||||
node2 = modelGetPart(model->filedata, MODELPART_AUTOGUN_FLASHRIGHT);
|
||||
|
||||
if (node2) {
|
||||
union modelrwdata *rwdata = modelGetNodeRwData(model, node2);
|
||||
rwdata->gunfire.visible = fireright;
|
||||
rwdata->chrgunfire.visible = fireright;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -19651,7 +19651,7 @@ void chopperIncrementBarrel(struct prop *chopperprop, bool firing)
|
|||
f32 gunturnxspeed60 = chopper->gunturnxspeed60;
|
||||
struct prop *targetprop = chopperGetTargetProp(chopper);
|
||||
struct modelnode *node;
|
||||
struct modelrwdata_gunfire *rwdata = NULL;
|
||||
struct modelrwdata_chrgunfire *rwdata = NULL;
|
||||
struct modelrodata_position *rodata;
|
||||
Mtxf sp90;
|
||||
Mtxf sp50;
|
||||
|
|
@ -37419,7 +37419,7 @@ void weaponSetGunfireVisible(struct prop *prop, bool visible, s16 room)
|
|||
|
||||
if (node1) {
|
||||
rwdata1 = modelGetNodeRwData(model, node1);
|
||||
rwdata1->gunfire.visible = visible;
|
||||
rwdata1->chrgunfire.visible = visible;
|
||||
|
||||
if (visible) {
|
||||
flash = true;
|
||||
|
|
@ -37454,7 +37454,7 @@ bool weaponIsGunfireVisible(struct prop *prop)
|
|||
node = modelGetPart(model->filedata, MODELPART_CHRGUN_GUNFIRE);
|
||||
|
||||
if (node) {
|
||||
struct modelrwdata_gunfire *rwdata = modelGetNodeRwData(model, node);
|
||||
struct modelrwdata_chrgunfire *rwdata = modelGetNodeRwData(model, node);
|
||||
return rwdata->visible;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2120,14 +2120,14 @@
|
|||
#define MODELNODETYPE_REORDER 0x09
|
||||
#define MODELNODETYPE_BBOX 0x0a
|
||||
#define MODELNODETYPE_0B 0x0b
|
||||
#define MODELNODETYPE_GUNFIRE 0x0c
|
||||
#define MODELNODETYPE_CHRGUNFIRE 0x0c
|
||||
#define MODELNODETYPE_0D 0x0d
|
||||
#define MODELNODETYPE_0E 0x0e
|
||||
#define MODELNODETYPE_0F 0x0f
|
||||
#define MODELNODETYPE_11 0x11
|
||||
#define MODELNODETYPE_TOGGLE 0x12
|
||||
#define MODELNODETYPE_POSITIONHELD 0x15
|
||||
#define MODELNODETYPE_16 0x16
|
||||
#define MODELNODETYPE_STARGUNFIRE 0x16
|
||||
#define MODELNODETYPE_HEADSPOT 0x17
|
||||
#define MODELNODETYPE_DL 0x18
|
||||
#define MODELNODETYPE_0100 0x0100
|
||||
|
|
@ -3743,6 +3743,16 @@
|
|||
#define SPEED_JOG 1
|
||||
#define SPEED_RUN 2
|
||||
|
||||
#define SPSEGMENT_PHYSICAL 0
|
||||
#define SPSEGMENT_GETITLE 2
|
||||
#define SPSEGMENT_MODEL_MTX 3
|
||||
#define SPSEGMENT_MODEL_VTX 4
|
||||
#define SPSEGMENT_MODEL_COL1 5
|
||||
#define SPSEGMENT_MODEL_COL2 6
|
||||
#define SPSEGMENT_BG_COL 13
|
||||
#define SPSEGMENT_BG_VTX 14
|
||||
#define SPSEGMENT_BG_DL 15
|
||||
|
||||
#define SQUADRON_00 0x00
|
||||
#define SQUADRON_01 0x01
|
||||
#define SQUADRON_02 0x02
|
||||
|
|
|
|||
|
|
@ -50,9 +50,6 @@ extern bool g_ModelDistanceDisabled;
|
|||
extern f32 g_ModelDistanceScale;
|
||||
extern bool var8005efbc;
|
||||
extern f32 var8005efc0;
|
||||
extern bool (*var8005efc4)(struct model *model, struct modelnode *node);
|
||||
extern struct gfxvtx *(*g_ModelVtxAllocatorFunc)(s32 numvertices);
|
||||
extern void (*g_ModelJointPositionedFunc)(s32 mtxindex, Mtxf *mtx);
|
||||
extern u8 var8005efb0_2;
|
||||
extern u32 var8005efd0;
|
||||
extern bool var8005efd8_2;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,10 @@
|
|||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
extern bool (*var8005efc4)(struct model *model, struct modelnode *node);
|
||||
extern struct gfxvtx *(*g_ModelVtxAllocatorFunc)(s32 numvertices);
|
||||
extern void (*g_ModelJointPositionedFunc)(s32 mtxindex, Mtxf *mtx);
|
||||
|
||||
bool model00018680(void);
|
||||
void modelSetDistanceScale(f32 value);
|
||||
void modelSetVtxAllocatorFunc(struct gfxvtx *(*fn)(s32 numvertices));
|
||||
|
|
@ -86,9 +90,9 @@ void model00020bdc(struct modelrenderdata *renderdata);
|
|||
void modelApplyCullMode(struct modelrenderdata *renderdata);
|
||||
void modelRenderNodeGundl(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node);
|
||||
void modelRenderNodeDl(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node);
|
||||
void modelRenderNodeType16(struct modelrenderdata *renderdata, struct modelnode *node);
|
||||
void modelRenderNodeStarGunfire(struct modelrenderdata *renderdata, struct modelnode *node);
|
||||
void model000216cc(struct modelrenderdata *renderdata, struct textureconfig *tconfig, s32 arg2);
|
||||
void modelRenderNodeGunfire(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node);
|
||||
void modelRenderNodeChrGunfire(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node);
|
||||
void modelRender(struct modelrenderdata *renderdata, struct model *model);
|
||||
bool model000220fc(struct modelrodata_bbox *bbox, Mtxf *mtx, struct coord *arg2, struct coord *arg3);
|
||||
s32 model000225d4(struct model *model, struct coord *arg1, struct coord *arg2, struct modelnode **startnode);
|
||||
|
|
|
|||
|
|
@ -471,7 +471,7 @@ struct modelrodata_type0b { // type 0x0b
|
|||
void *baseaddr;
|
||||
};
|
||||
|
||||
struct modelrodata_gunfire { // type 0x0c
|
||||
struct modelrodata_chrgunfire { // type 0x0c
|
||||
struct coord pos;
|
||||
struct coord dim;
|
||||
struct modeltexture *texture;
|
||||
|
|
@ -510,10 +510,10 @@ struct modelrodata_positionheld { // type 0x15
|
|||
s16 mtxindex;
|
||||
};
|
||||
|
||||
struct modelrodata_type16 { // type 0x16
|
||||
u32 unk00;
|
||||
void *unk04;
|
||||
Gfx *unk08;
|
||||
struct modelrodata_stargunfire { // type 0x16
|
||||
s32 unk00;
|
||||
struct gfxvtx *vertices;
|
||||
Gfx *gdl;
|
||||
void *baseaddr;
|
||||
};
|
||||
|
||||
|
|
@ -545,12 +545,12 @@ union modelrodata {
|
|||
struct modelrodata_reorder reorder;
|
||||
struct modelrodata_bbox bbox;
|
||||
struct modelrodata_type0b type0b;
|
||||
struct modelrodata_gunfire gunfire;
|
||||
struct modelrodata_chrgunfire chrgunfire;
|
||||
struct modelrodata_type0d type0d;
|
||||
struct modelrodata_type11 type11;
|
||||
struct modelrodata_toggle toggle;
|
||||
struct modelrodata_positionheld positionheld;
|
||||
struct modelrodata_type16 type16;
|
||||
struct modelrodata_stargunfire stargunfire;
|
||||
struct modelrodata_headspot headspot;
|
||||
struct modelrodata_dl dl;
|
||||
struct modelrodata_type19 type19;
|
||||
|
|
@ -635,7 +635,7 @@ struct modelrwdata_0b { // type 0x0b
|
|||
u16 unk04;
|
||||
};
|
||||
|
||||
struct modelrwdata_gunfire { // type 0x0c
|
||||
struct modelrwdata_chrgunfire { // type 0x0c
|
||||
s16 visible;
|
||||
u16 unk02;
|
||||
};
|
||||
|
|
@ -674,7 +674,7 @@ union modelrwdata {
|
|||
struct modelrwdata_distance distance;
|
||||
struct modelrwdata_reorder reorder;
|
||||
struct modelrwdata_0b type0b;
|
||||
struct modelrwdata_gunfire gunfire;
|
||||
struct modelrwdata_chrgunfire chrgunfire;
|
||||
struct modelrwdata_toggle toggle;
|
||||
struct modelrwdata_headspot headspot;
|
||||
struct modelrwdata_dl dl;
|
||||
|
|
|
|||
443
src/lib/model.c
443
src/lib/model.c
|
|
@ -336,8 +336,8 @@ void *modelGetNodeRwData(struct model *model, struct modelnode *node)
|
|||
case MODELNODETYPE_0B:
|
||||
index = node->rodata->type0b.rwdataindex;
|
||||
break;
|
||||
case MODELNODETYPE_GUNFIRE:
|
||||
index = node->rodata->gunfire.rwdataindex;
|
||||
case MODELNODETYPE_CHRGUNFIRE:
|
||||
index = node->rodata->chrgunfire.rwdataindex;
|
||||
break;
|
||||
case MODELNODETYPE_HEADSPOT:
|
||||
index = node->rodata->headspot.rwdataindex;
|
||||
|
|
@ -1340,7 +1340,7 @@ void model0001cb0c(struct model *model, struct modelnode *parent)
|
|||
case MODELNODETYPE_CHRINFO:
|
||||
case MODELNODETYPE_POSITION:
|
||||
case MODELNODETYPE_0B:
|
||||
case MODELNODETYPE_GUNFIRE:
|
||||
case MODELNODETYPE_CHRGUNFIRE:
|
||||
case MODELNODETYPE_0D:
|
||||
case MODELNODETYPE_0E:
|
||||
case MODELNODETYPE_0F:
|
||||
|
|
@ -3520,7 +3520,7 @@ void modelRenderNodeGundl(struct modelrenderdata *renderdata, struct model *mode
|
|||
}
|
||||
|
||||
if ((renderdata->flags & 1) && rodata->primary) {
|
||||
gSPSegment(renderdata->gdl++, 0x05, osVirtualToPhysical(rodata->baseaddr));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->baseaddr));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
modelApplyCullMode(renderdata);
|
||||
|
|
@ -3551,7 +3551,7 @@ void modelRenderNodeGundl(struct modelrenderdata *renderdata, struct model *mode
|
|||
}
|
||||
|
||||
if ((renderdata->flags & 2) && rodata->primary && rodata->unk12 == 4 && rodata->secondary) {
|
||||
gSPSegment(renderdata->gdl++, 0x05, osVirtualToPhysical(rodata->baseaddr));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->baseaddr));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
modelApplyCullMode(renderdata);
|
||||
|
|
@ -3575,7 +3575,7 @@ void modelRenderNodeDl(struct modelrenderdata *renderdata, struct model *model,
|
|||
union modelrwdata *rwdata = modelGetNodeRwData(model, node);
|
||||
|
||||
if (rwdata->dl.gdl) {
|
||||
gSPSegment(renderdata->gdl++, 0x05, osVirtualToPhysical(rodata->dl.colourtable));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->dl.colourtable));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
modelApplyCullMode(renderdata);
|
||||
|
|
@ -3596,8 +3596,8 @@ void modelRenderNodeDl(struct modelrenderdata *renderdata, struct model *model,
|
|||
break;
|
||||
}
|
||||
|
||||
gSPSegment(renderdata->gdl++, 0x04, osVirtualToPhysical(rwdata->dl.vertices));
|
||||
gSPSegment(renderdata->gdl++, 0x06, osVirtualToPhysical(rwdata->dl.colours));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(rwdata->dl.vertices));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL2, osVirtualToPhysical(rwdata->dl.colours));
|
||||
|
||||
gSPDisplayList(renderdata->gdl++, rwdata->dl.gdl);
|
||||
|
||||
|
|
@ -3613,14 +3613,14 @@ void modelRenderNodeDl(struct modelrenderdata *renderdata, struct model *model,
|
|||
union modelrwdata *rwdata = modelGetNodeRwData(model, node);
|
||||
|
||||
if (rwdata->dl.gdl && rodata->dl.mcount == 4 && rodata->dl.secondary) {
|
||||
gSPSegment(renderdata->gdl++, 0x05, osVirtualToPhysical(rodata->dl.colourtable));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->dl.colourtable));
|
||||
|
||||
if (renderdata->cullmode) {
|
||||
modelApplyCullMode(renderdata);
|
||||
}
|
||||
|
||||
gSPSegment(renderdata->gdl++, 0x04, osVirtualToPhysical(rwdata->dl.vertices));
|
||||
gSPSegment(renderdata->gdl++, 0x06, osVirtualToPhysical(rwdata->dl.colours));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(rwdata->dl.vertices));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL2, osVirtualToPhysical(rwdata->dl.colours));
|
||||
|
||||
model00020248(renderdata, false);
|
||||
|
||||
|
|
@ -3629,303 +3629,80 @@ void modelRenderNodeDl(struct modelrenderdata *renderdata, struct model *model,
|
|||
}
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel modelRenderNodeType16
|
||||
/* 2124c: 27bdffb8 */ addiu $sp,$sp,-72
|
||||
/* 21250: afbf003c */ sw $ra,0x3c($sp)
|
||||
/* 21254: afbe0038 */ sw $s8,0x38($sp)
|
||||
/* 21258: afb70034 */ sw $s7,0x34($sp)
|
||||
/* 2125c: afb60030 */ sw $s6,0x30($sp)
|
||||
/* 21260: afb5002c */ sw $s5,0x2c($sp)
|
||||
/* 21264: afb40028 */ sw $s4,0x28($sp)
|
||||
/* 21268: afb30024 */ sw $s3,0x24($sp)
|
||||
/* 2126c: afb20020 */ sw $s2,0x20($sp)
|
||||
/* 21270: afb1001c */ sw $s1,0x1c($sp)
|
||||
/* 21274: afb00018 */ sw $s0,0x18($sp)
|
||||
/* 21278: 8c8e0008 */ lw $t6,0x8($a0)
|
||||
/* 2127c: 00809825 */ or $s3,$a0,$zero
|
||||
/* 21280: 31cf0002 */ andi $t7,$t6,0x2
|
||||
/* 21284: 51e00106 */ beqzl $t7,.L000216a0
|
||||
/* 21288: 8fbf003c */ lw $ra,0x3c($sp)
|
||||
/* 2128c: 8ca20004 */ lw $v0,0x4($a1)
|
||||
/* 21290: 8c580008 */ lw $t8,0x8($v0)
|
||||
/* 21294: 53000102 */ beqzl $t8,.L000216a0
|
||||
/* 21298: 8fbf003c */ lw $ra,0x3c($sp)
|
||||
/* 2129c: 8c440000 */ lw $a0,0x0($v0)
|
||||
/* 212a0: 8c520004 */ lw $s2,0x4($v0)
|
||||
/* 212a4: afa20044 */ sw $v0,0x44($sp)
|
||||
/* 212a8: 0004c880 */ sll $t9,$a0,0x2
|
||||
/* 212ac: 03202025 */ or $a0,$t9,$zero
|
||||
/* 212b0: 3c198006 */ lui $t9,%hi(g_ModelVtxAllocatorFunc)
|
||||
/* 212b4: 8f39efc8 */ lw $t9,%lo(g_ModelVtxAllocatorFunc)($t9)
|
||||
/* 212b8: 0320f809 */ jalr $t9
|
||||
/* 212bc: 00000000 */ nop
|
||||
/* 212c0: 8e74000c */ lw $s4,0xc($s3)
|
||||
/* 212c4: 3c0abc00 */ lui $t2,0xbc00
|
||||
/* 212c8: 354a1006 */ ori $t2,$t2,0x1006
|
||||
/* 212cc: 26890008 */ addiu $t1,$s4,0x8
|
||||
/* 212d0: ae69000c */ sw $t1,0xc($s3)
|
||||
/* 212d4: 00408025 */ or $s0,$v0,$zero
|
||||
/* 212d8: 00402025 */ or $a0,$v0,$zero
|
||||
/* 212dc: 0c012d20 */ jal osVirtualToPhysical
|
||||
/* 212e0: ae8a0000 */ sw $t2,0x0($s4)
|
||||
/* 212e4: 8fa30044 */ lw $v1,0x44($sp)
|
||||
/* 212e8: ae820004 */ sw $v0,0x4($s4)
|
||||
/* 212ec: 8e76000c */ lw $s6,0xc($s3)
|
||||
/* 212f0: 3c0cbc00 */ lui $t4,0xbc00
|
||||
/* 212f4: 358c1806 */ ori $t4,$t4,0x1806
|
||||
/* 212f8: 26cb0008 */ addiu $t3,$s6,0x8
|
||||
/* 212fc: ae6b000c */ sw $t3,0xc($s3)
|
||||
/* 21300: aecc0000 */ sw $t4,0x0($s6)
|
||||
/* 21304: 8c6e0000 */ lw $t6,0x0($v1)
|
||||
/* 21308: 2415000c */ addiu $s5,$zero,0xc
|
||||
/* 2130c: 8c6d0004 */ lw $t5,0x4($v1)
|
||||
/* 21310: 000e7880 */ sll $t7,$t6,0x2
|
||||
/* 21314: 01f50019 */ multu $t7,$s5
|
||||
/* 21318: 0000c012 */ mflo $t8
|
||||
/* 2131c: 01b82021 */ addu $a0,$t5,$t8
|
||||
/* 21320: 24840007 */ addiu $a0,$a0,0x7
|
||||
/* 21324: 34990007 */ ori $t9,$a0,0x7
|
||||
/* 21328: 0c012d20 */ jal osVirtualToPhysical
|
||||
/* 2132c: 3b240007 */ xori $a0,$t9,0x7
|
||||
/* 21330: aec20004 */ sw $v0,0x4($s6)
|
||||
/* 21334: 8e74000c */ lw $s4,0xc($s3)
|
||||
/* 21338: 3c0bbc00 */ lui $t3,0xbc00
|
||||
/* 2133c: 356b1406 */ ori $t3,$t3,0x1406
|
||||
/* 21340: 268a0008 */ addiu $t2,$s4,0x8
|
||||
/* 21344: ae6a000c */ sw $t2,0xc($s3)
|
||||
/* 21348: ae8b0000 */ sw $t3,0x0($s4)
|
||||
/* 2134c: 8fac0044 */ lw $t4,0x44($sp)
|
||||
/* 21350: 0c012d20 */ jal osVirtualToPhysical
|
||||
/* 21354: 8d84000c */ lw $a0,0xc($t4)
|
||||
/* 21358: 8fa50044 */ lw $a1,0x44($sp)
|
||||
/* 2135c: ae820004 */ sw $v0,0x4($s4)
|
||||
/* 21360: 8e71000c */ lw $s1,0xc($s3)
|
||||
/* 21364: 3c0ff800 */ lui $t7,0xf800
|
||||
/* 21368: 3c180600 */ lui $t8,0x600
|
||||
/* 2136c: 262e0008 */ addiu $t6,$s1,0x8
|
||||
/* 21370: ae6e000c */ sw $t6,0xc($s3)
|
||||
/* 21374: ae200004 */ sw $zero,0x4($s1)
|
||||
/* 21378: ae2f0000 */ sw $t7,0x0($s1)
|
||||
/* 2137c: 8e71000c */ lw $s1,0xc($s3)
|
||||
/* 21380: 0000b025 */ or $s6,$zero,$zero
|
||||
/* 21384: 241e0200 */ addiu $s8,$zero,0x200
|
||||
/* 21388: 262d0008 */ addiu $t5,$s1,0x8
|
||||
/* 2138c: ae6d000c */ sw $t5,0xc($s3)
|
||||
/* 21390: ae380000 */ sw $t8,0x0($s1)
|
||||
/* 21394: 8cb90008 */ lw $t9,0x8($a1)
|
||||
/* 21398: 241700b5 */ addiu $s7,$zero,0xb5
|
||||
/* 2139c: ae390004 */ sw $t9,0x4($s1)
|
||||
/* 213a0: 8ca90000 */ lw $t1,0x0($a1)
|
||||
/* 213a4: 592000be */ blezl $t1,.L000216a0
|
||||
/* 213a8: 8fbf003c */ lw $ra,0x3c($sp)
|
||||
.L000213ac:
|
||||
/* 213ac: 0c004b70 */ jal random
|
||||
/* 213b0: 00000000 */ nop
|
||||
/* 213b4: 00025280 */ sll $t2,$v0,0xa
|
||||
/* 213b8: 3151ffff */ andi $s1,$t2,0xffff
|
||||
/* 213bc: 0c013ef0 */ jal coss
|
||||
/* 213c0: 3144ffff */ andi $a0,$t2,0xffff
|
||||
/* 213c4: 00025940 */ sll $t3,$v0,0x5
|
||||
/* 213c8: 01770019 */ multu $t3,$s7
|
||||
/* 213cc: 3224ffff */ andi $a0,$s1,0xffff
|
||||
/* 213d0: 0000a012 */ mflo $s4
|
||||
/* 213d4: 00146483 */ sra $t4,$s4,0x12
|
||||
/* 213d8: 0c013efc */ jal sins
|
||||
/* 213dc: 0180a025 */ or $s4,$t4,$zero
|
||||
/* 213e0: 00027140 */ sll $t6,$v0,0x5
|
||||
/* 213e4: 01d70019 */ multu $t6,$s7
|
||||
/* 213e8: 00009812 */ mflo $s3
|
||||
/* 213ec: 00137c83 */ sra $t7,$s3,0x12
|
||||
/* 213f0: 0c004b70 */ jal random
|
||||
/* 213f4: 01e09825 */ or $s3,$t7,$zero
|
||||
/* 213f8: 0c004b70 */ jal random
|
||||
/* 213fc: 00028fc2 */ srl $s1,$v0,0x1f
|
||||
/* 21400: 8a410000 */ lwl $at,0x0($s2)
|
||||
/* 21404: 9a410003 */ lwr $at,0x3($s2)
|
||||
/* 21408: 304d3fff */ andi $t5,$v0,0x3fff
|
||||
/* 2140c: 3c180001 */ lui $t8,0x1
|
||||
/* 21410: aa010000 */ swl $at,0x0($s0)
|
||||
/* 21414: ba010003 */ swr $at,0x3($s0)
|
||||
/* 21418: 8a490004 */ lwl $t1,0x4($s2)
|
||||
/* 2141c: 9a490007 */ lwr $t1,0x7($s2)
|
||||
/* 21420: 030d2023 */ subu $a0,$t8,$t5
|
||||
/* 21424: 03d44023 */ subu $t0,$s8,$s4
|
||||
/* 21428: aa090004 */ swl $t1,0x4($s0)
|
||||
/* 2142c: ba090007 */ swr $t1,0x7($s0)
|
||||
/* 21430: 8a410008 */ lwl $at,0x8($s2)
|
||||
/* 21434: 9a41000b */ lwr $at,0xb($s2)
|
||||
/* 21438: 03d33823 */ subu $a3,$s8,$s3
|
||||
/* 2143c: 00801825 */ or $v1,$a0,$zero
|
||||
/* 21440: aa010008 */ swl $at,0x8($s0)
|
||||
/* 21444: ba01000b */ swr $at,0xb($s0)
|
||||
/* 21448: 8a41000c */ lwl $at,0xc($s2)
|
||||
/* 2144c: 9a41000f */ lwr $at,0xf($s2)
|
||||
/* 21450: 26660200 */ addiu $a2,$s3,0x200
|
||||
/* 21454: 26d60001 */ addiu $s6,$s6,0x1
|
||||
/* 21458: aa01000c */ swl $at,0xc($s0)
|
||||
/* 2145c: ba01000f */ swr $at,0xf($s0)
|
||||
/* 21460: 8a4b0010 */ lwl $t3,0x10($s2)
|
||||
/* 21464: 9a4b0013 */ lwr $t3,0x13($s2)
|
||||
/* 21468: 26100030 */ addiu $s0,$s0,0x30
|
||||
/* 2146c: aa0bffe0 */ swl $t3,-0x20($s0)
|
||||
/* 21470: ba0bffe3 */ swr $t3,-0x1d($s0)
|
||||
/* 21474: 8a410014 */ lwl $at,0x14($s2)
|
||||
/* 21478: 9a410017 */ lwr $at,0x17($s2)
|
||||
/* 2147c: aa01ffe4 */ swl $at,-0x1c($s0)
|
||||
/* 21480: ba01ffe7 */ swr $at,-0x19($s0)
|
||||
/* 21484: 8a410018 */ lwl $at,0x18($s2)
|
||||
/* 21488: 9a41001b */ lwr $at,0x1b($s2)
|
||||
/* 2148c: aa01ffe8 */ swl $at,-0x18($s0)
|
||||
/* 21490: ba01ffeb */ swr $at,-0x15($s0)
|
||||
/* 21494: 8a4e001c */ lwl $t6,0x1c($s2)
|
||||
/* 21498: 9a4e001f */ lwr $t6,0x1f($s2)
|
||||
/* 2149c: aa0effec */ swl $t6,-0x14($s0)
|
||||
/* 214a0: ba0effef */ swr $t6,-0x11($s0)
|
||||
/* 214a4: 8a410020 */ lwl $at,0x20($s2)
|
||||
/* 214a8: 9a410023 */ lwr $at,0x23($s2)
|
||||
/* 214ac: aa01fff0 */ swl $at,-0x10($s0)
|
||||
/* 214b0: ba01fff3 */ swr $at,-0xd($s0)
|
||||
/* 214b4: 8a410024 */ lwl $at,0x24($s2)
|
||||
/* 214b8: 9a410027 */ lwr $at,0x27($s2)
|
||||
/* 214bc: aa01fff4 */ swl $at,-0xc($s0)
|
||||
/* 214c0: ba01fff7 */ swr $at,-0x9($s0)
|
||||
/* 214c4: 8a580028 */ lwl $t8,0x28($s2)
|
||||
/* 214c8: 9a58002b */ lwr $t8,0x2b($s2)
|
||||
/* 214cc: aa18fff8 */ swl $t8,-0x8($s0)
|
||||
/* 214d0: ba18fffb */ swr $t8,-0x5($s0)
|
||||
/* 214d4: 8a41002c */ lwl $at,0x2c($s2)
|
||||
/* 214d8: 9a41002f */ lwr $at,0x2f($s2)
|
||||
/* 214dc: a608ffd8 */ sh $t0,-0x28($s0)
|
||||
/* 214e0: a607ffda */ sh $a3,-0x26($s0)
|
||||
/* 214e4: aa01fffc */ swl $at,-0x4($s0)
|
||||
/* 214e8: ba01ffff */ swr $at,-0x1($s0)
|
||||
/* 214ec: 06210004 */ bgez $s1,.L00021500
|
||||
/* 214f0: 322d0003 */ andi $t5,$s1,0x3
|
||||
/* 214f4: 11a00002 */ beqz $t5,.L00021500
|
||||
/* 214f8: 00000000 */ nop
|
||||
/* 214fc: 25adfffc */ addiu $t5,$t5,-4
|
||||
.L00021500:
|
||||
/* 21500: 01b50019 */ multu $t5,$s5
|
||||
/* 21504: 0000c812 */ mflo $t9
|
||||
/* 21508: 02592821 */ addu $a1,$s2,$t9
|
||||
/* 2150c: 84a90000 */ lh $t1,0x0($a1)
|
||||
/* 21510: 01240019 */ multu $t1,$a0
|
||||
/* 21514: 26290001 */ addiu $t1,$s1,0x1
|
||||
/* 21518: 00005012 */ mflo $t2
|
||||
/* 2151c: 000a5c03 */ sra $t3,$t2,0x10
|
||||
/* 21520: a60bffd0 */ sh $t3,-0x30($s0)
|
||||
/* 21524: 84ac0002 */ lh $t4,0x2($a1)
|
||||
/* 21528: 01840019 */ multu $t4,$a0
|
||||
/* 2152c: 26840200 */ addiu $a0,$s4,0x200
|
||||
/* 21530: 00007012 */ mflo $t6
|
||||
/* 21534: 000e7c03 */ sra $t7,$t6,0x10
|
||||
/* 21538: a60fffd2 */ sh $t7,-0x2e($s0)
|
||||
/* 2153c: 84b80004 */ lh $t8,0x4($a1)
|
||||
/* 21540: a606ffe4 */ sh $a2,-0x1c($s0)
|
||||
/* 21544: a608ffe6 */ sh $t0,-0x1a($s0)
|
||||
/* 21548: 03030019 */ multu $t8,$v1
|
||||
/* 2154c: 00006812 */ mflo $t5
|
||||
/* 21550: 000dcc03 */ sra $t9,$t5,0x10
|
||||
/* 21554: a619ffd4 */ sh $t9,-0x2c($s0)
|
||||
/* 21558: 05210004 */ bgez $t1,.L0002156c
|
||||
/* 2155c: 312a0003 */ andi $t2,$t1,0x3
|
||||
/* 21560: 11400002 */ beqz $t2,.L0002156c
|
||||
/* 21564: 00000000 */ nop
|
||||
/* 21568: 254afffc */ addiu $t2,$t2,-4
|
||||
.L0002156c:
|
||||
/* 2156c: 01550019 */ multu $t2,$s5
|
||||
/* 21570: 00005812 */ mflo $t3
|
||||
/* 21574: 024b1021 */ addu $v0,$s2,$t3
|
||||
/* 21578: 844c0000 */ lh $t4,0x0($v0)
|
||||
/* 2157c: 01830019 */ multu $t4,$v1
|
||||
/* 21580: 262c0002 */ addiu $t4,$s1,0x2
|
||||
/* 21584: 00007012 */ mflo $t6
|
||||
/* 21588: 000e7c03 */ sra $t7,$t6,0x10
|
||||
/* 2158c: a60fffdc */ sh $t7,-0x24($s0)
|
||||
/* 21590: 84580002 */ lh $t8,0x2($v0)
|
||||
/* 21594: 03030019 */ multu $t8,$v1
|
||||
/* 21598: 00006812 */ mflo $t5
|
||||
/* 2159c: 000dcc03 */ sra $t9,$t5,0x10
|
||||
/* 215a0: a619ffde */ sh $t9,-0x22($s0)
|
||||
/* 215a4: 84490004 */ lh $t1,0x4($v0)
|
||||
/* 215a8: a604fff0 */ sh $a0,-0x10($s0)
|
||||
/* 215ac: a606fff2 */ sh $a2,-0xe($s0)
|
||||
/* 215b0: 01230019 */ multu $t1,$v1
|
||||
/* 215b4: 00005012 */ mflo $t2
|
||||
/* 215b8: 000a5c03 */ sra $t3,$t2,0x10
|
||||
/* 215bc: a60bffe0 */ sh $t3,-0x20($s0)
|
||||
/* 215c0: 05810004 */ bgez $t4,.L000215d4
|
||||
/* 215c4: 318e0003 */ andi $t6,$t4,0x3
|
||||
/* 215c8: 11c00002 */ beqz $t6,.L000215d4
|
||||
/* 215cc: 00000000 */ nop
|
||||
/* 215d0: 25cefffc */ addiu $t6,$t6,-4
|
||||
.L000215d4:
|
||||
/* 215d4: 01d50019 */ multu $t6,$s5
|
||||
/* 215d8: 00007812 */ mflo $t7
|
||||
/* 215dc: 024f1021 */ addu $v0,$s2,$t7
|
||||
/* 215e0: 84580000 */ lh $t8,0x0($v0)
|
||||
/* 215e4: 03030019 */ multu $t8,$v1
|
||||
/* 215e8: 26380003 */ addiu $t8,$s1,0x3
|
||||
/* 215ec: 00006812 */ mflo $t5
|
||||
/* 215f0: 000dcc03 */ sra $t9,$t5,0x10
|
||||
/* 215f4: a619ffe8 */ sh $t9,-0x18($s0)
|
||||
/* 215f8: 84490002 */ lh $t1,0x2($v0)
|
||||
/* 215fc: 01230019 */ multu $t1,$v1
|
||||
/* 21600: 00005012 */ mflo $t2
|
||||
/* 21604: 000a5c03 */ sra $t3,$t2,0x10
|
||||
/* 21608: a60bffea */ sh $t3,-0x16($s0)
|
||||
/* 2160c: 844c0004 */ lh $t4,0x4($v0)
|
||||
/* 21610: a607fffc */ sh $a3,-0x4($s0)
|
||||
/* 21614: a604fffe */ sh $a0,-0x2($s0)
|
||||
/* 21618: 01830019 */ multu $t4,$v1
|
||||
/* 2161c: 00007012 */ mflo $t6
|
||||
/* 21620: 000e7c03 */ sra $t7,$t6,0x10
|
||||
/* 21624: a60fffec */ sh $t7,-0x14($s0)
|
||||
/* 21628: 07010004 */ bgez $t8,.L0002163c
|
||||
/* 2162c: 330d0003 */ andi $t5,$t8,0x3
|
||||
/* 21630: 11a00002 */ beqz $t5,.L0002163c
|
||||
/* 21634: 00000000 */ nop
|
||||
/* 21638: 25adfffc */ addiu $t5,$t5,-4
|
||||
.L0002163c:
|
||||
/* 2163c: 01b50019 */ multu $t5,$s5
|
||||
/* 21640: 0000c812 */ mflo $t9
|
||||
/* 21644: 02591021 */ addu $v0,$s2,$t9
|
||||
/* 21648: 84490000 */ lh $t1,0x0($v0)
|
||||
/* 2164c: 26520030 */ addiu $s2,$s2,0x30
|
||||
/* 21650: 01230019 */ multu $t1,$v1
|
||||
/* 21654: 00005012 */ mflo $t2
|
||||
/* 21658: 000a5c03 */ sra $t3,$t2,0x10
|
||||
/* 2165c: a60bfff4 */ sh $t3,-0xc($s0)
|
||||
/* 21660: 844c0002 */ lh $t4,0x2($v0)
|
||||
/* 21664: 01830019 */ multu $t4,$v1
|
||||
/* 21668: 00007012 */ mflo $t6
|
||||
/* 2166c: 000e7c03 */ sra $t7,$t6,0x10
|
||||
/* 21670: a60ffff6 */ sh $t7,-0xa($s0)
|
||||
/* 21674: 84580004 */ lh $t8,0x4($v0)
|
||||
/* 21678: 03030019 */ multu $t8,$v1
|
||||
/* 2167c: 00006812 */ mflo $t5
|
||||
/* 21680: 000dcc03 */ sra $t9,$t5,0x10
|
||||
/* 21684: a619fff8 */ sh $t9,-0x8($s0)
|
||||
/* 21688: 8fa90044 */ lw $t1,0x44($sp)
|
||||
/* 2168c: 8d2a0000 */ lw $t2,0x0($t1)
|
||||
/* 21690: 02ca082a */ slt $at,$s6,$t2
|
||||
/* 21694: 1420ff45 */ bnez $at,.L000213ac
|
||||
/* 21698: 00000000 */ nop
|
||||
/* 2169c: 8fbf003c */ lw $ra,0x3c($sp)
|
||||
.L000216a0:
|
||||
/* 216a0: 8fb00018 */ lw $s0,0x18($sp)
|
||||
/* 216a4: 8fb1001c */ lw $s1,0x1c($sp)
|
||||
/* 216a8: 8fb20020 */ lw $s2,0x20($sp)
|
||||
/* 216ac: 8fb30024 */ lw $s3,0x24($sp)
|
||||
/* 216b0: 8fb40028 */ lw $s4,0x28($sp)
|
||||
/* 216b4: 8fb5002c */ lw $s5,0x2c($sp)
|
||||
/* 216b8: 8fb60030 */ lw $s6,0x30($sp)
|
||||
/* 216bc: 8fb70034 */ lw $s7,0x34($sp)
|
||||
/* 216c0: 8fbe0038 */ lw $s8,0x38($sp)
|
||||
/* 216c4: 03e00008 */ jr $ra
|
||||
/* 216c8: 27bd0048 */ addiu $sp,$sp,0x48
|
||||
);
|
||||
/**
|
||||
* Star gunfire is a muzzle flash in a first person perspective, where the
|
||||
* muzzle flash has 3 or 4 "arms" that flare out from the main body.
|
||||
*
|
||||
* Some weapons that use this are the Cyclone, Dragon, K7 Avenger, AR34,
|
||||
* SuperDragon and RC-P45.
|
||||
*
|
||||
* This function reads vertices from the model definition, tweaks them randomly,
|
||||
* writes them to a newly allocated vertices table and queues the node's
|
||||
* displaylist to the renderdata's DL.
|
||||
*/
|
||||
void modelRenderNodeStarGunfire(struct modelrenderdata *renderdata, struct modelnode *node)
|
||||
{
|
||||
if (renderdata->flags & 2) {
|
||||
struct modelrodata_stargunfire *rodata = &node->rodata->stargunfire;
|
||||
s32 i;
|
||||
|
||||
if (rodata->gdl) {
|
||||
struct gfxvtx *src = (struct gfxvtx *) rodata->vertices;
|
||||
struct gfxvtx *dst = g_ModelVtxAllocatorFunc(rodata->unk00 * 4);
|
||||
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(dst));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL2, osVirtualToPhysical((void *)ALIGN8((u32)&rodata->vertices[rodata->unk00 << 2])));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->baseaddr));
|
||||
|
||||
gDPSetFogColor(renderdata->gdl++, 0x00, 0x00, 0x00, 0x00);
|
||||
gSPDisplayList(renderdata->gdl++, rodata->gdl);
|
||||
|
||||
for (i = 0; i < rodata->unk00; i++) {
|
||||
u16 rand1 = (random() << 10) & 0xffff;
|
||||
s32 s4 = ((coss(rand1) << 5) * 181) >> 18;
|
||||
s32 s3 = ((sins(rand1) << 5) * 181) >> 18;
|
||||
s32 s1 = random() >> 31;
|
||||
s32 mult = 0x10000 - (random() & 0x3fff);
|
||||
s32 corner1 = 0x200 + s3;
|
||||
s32 corner2 = 0x200 - s3;
|
||||
s32 corner3 = 0x200 - s4;
|
||||
s32 corner4 = 0x200 + s4;
|
||||
|
||||
dst[0] = src[0];
|
||||
dst[1] = src[1];
|
||||
dst[2] = src[2];
|
||||
dst[3] = src[3];
|
||||
|
||||
dst[0].s = corner3;
|
||||
dst[0].t = corner2;
|
||||
dst[0].x = (src[(s1 + 0) % 4].x * mult) >> 16;
|
||||
dst[0].y = (src[(s1 + 0) % 4].y * mult) >> 16;
|
||||
dst[0].z = (src[(s1 + 0) % 4].z * mult) >> 16;
|
||||
|
||||
dst[1].s = corner1;
|
||||
dst[1].t = corner3;
|
||||
dst[1].x = (src[(s1 + 1) % 4].x * mult) >> 16;
|
||||
dst[1].y = (src[(s1 + 1) % 4].y * mult) >> 16;
|
||||
dst[1].z = (src[(s1 + 1) % 4].z * mult) >> 16;
|
||||
|
||||
dst[2].s = corner4;
|
||||
dst[2].t = corner1;
|
||||
dst[2].x = (src[(s1 + 2) % 4].x * mult) >> 16;
|
||||
dst[2].y = (src[(s1 + 2) % 4].y * mult) >> 16;
|
||||
dst[2].z = (src[(s1 + 2) % 4].z * mult) >> 16;
|
||||
|
||||
dst[3].s = corner2;
|
||||
dst[3].t = corner4;
|
||||
dst[3].x = (src[(s1 + 3) % 4].x * mult) >> 16;
|
||||
dst[3].y = (src[(s1 + 3) % 4].y * mult) >> 16;
|
||||
dst[3].z = (src[(s1 + 3) % 4].z * mult) >> 16;
|
||||
|
||||
src += 4;
|
||||
dst += 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void model000216cc(struct modelrenderdata *renderdata, struct textureconfig *tconfig, s32 arg2)
|
||||
{
|
||||
|
|
@ -3933,7 +3710,7 @@ void model000216cc(struct modelrenderdata *renderdata, struct textureconfig *tco
|
|||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel modelRenderNodeGunfire
|
||||
glabel modelRenderNodeChrGunfire
|
||||
.late_rodata
|
||||
glabel var70054454
|
||||
.word 0x40c907a9
|
||||
|
|
@ -4458,9 +4235,9 @@ glabel var70054454
|
|||
//};
|
||||
|
||||
// Mismatch: Reordered instructions near assign to spcc
|
||||
//void modelRenderNodeGunfire(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node)
|
||||
//void modelRenderNodeChrGunfire(struct modelrenderdata *renderdata, struct model *model, struct modelnode *node)
|
||||
//{
|
||||
// struct modelrodata_gunfire *rodata = &node->rodata->gunfire;
|
||||
// struct modelrodata_chrgunfire *rodata = &node->rodata->gunfire;
|
||||
// union modelrwdata *rwdata = modelGetNodeRwData(model, node);
|
||||
// struct gfxvtx *vertices;
|
||||
// f32 spf0;
|
||||
|
|
@ -4572,7 +4349,7 @@ glabel var70054454
|
|||
// vertices[3].y = sp90.f[1] - spc4;
|
||||
// vertices[3].z = sp90.f[2] + -spc8 + -spbc;
|
||||
//
|
||||
// gSPSegment(renderdata->gdl++, 0x05, osVirtualToPhysical(rodata->baseaddr));
|
||||
// gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(rodata->baseaddr));
|
||||
//
|
||||
// // d4c
|
||||
// if (rodata->texture) {
|
||||
|
|
@ -4613,7 +4390,7 @@ void modelRender(struct modelrenderdata *renderdata, struct model *model)
|
|||
u32 type;
|
||||
struct modelnode *node = model->filedata->rootnode;
|
||||
|
||||
gSPSegment(renderdata->gdl++, 0x03, osVirtualToPhysical(model->matrices));
|
||||
gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_MTX, osVirtualToPhysical(model->matrices));
|
||||
|
||||
while (node) {
|
||||
type = node->type & 0xff;
|
||||
|
|
@ -4649,8 +4426,8 @@ void modelRender(struct modelrenderdata *renderdata, struct model *model)
|
|||
case MODELNODETYPE_REORDER:
|
||||
modelRenderNodeReorder(model, node);
|
||||
break;
|
||||
case MODELNODETYPE_GUNFIRE:
|
||||
modelRenderNodeGunfire(renderdata, model, node);
|
||||
case MODELNODETYPE_CHRGUNFIRE:
|
||||
modelRenderNodeChrGunfire(renderdata, model, node);
|
||||
break;
|
||||
case MODELNODETYPE_GUNDL:
|
||||
modelRenderNodeGundl(renderdata, model, node);
|
||||
|
|
@ -4658,8 +4435,8 @@ void modelRender(struct modelrenderdata *renderdata, struct model *model)
|
|||
case MODELNODETYPE_DL:
|
||||
modelRenderNodeDl(renderdata, model, node);
|
||||
break;
|
||||
case MODELNODETYPE_16:
|
||||
modelRenderNodeType16(renderdata, node);
|
||||
case MODELNODETYPE_STARGUNFIRE:
|
||||
modelRenderNodeStarGunfire(renderdata, node);
|
||||
break;
|
||||
case MODELNODETYPE_CHRINFO:
|
||||
default:
|
||||
|
|
@ -5155,10 +4932,10 @@ void modelPromoteNodeOffsetsToPointers(struct modelnode *node, u32 vma, u32 file
|
|||
PROMOTE(rodata->type0b.unk3c);
|
||||
rodata->type0b.baseaddr = (void *)fileramaddr;
|
||||
break;
|
||||
case MODELNODETYPE_GUNFIRE:
|
||||
case MODELNODETYPE_CHRGUNFIRE:
|
||||
rodata = node->rodata;
|
||||
PROMOTE(rodata->gunfire.texture);
|
||||
rodata->gunfire.baseaddr = (void *)fileramaddr;
|
||||
PROMOTE(rodata->chrgunfire.texture);
|
||||
rodata->chrgunfire.baseaddr = (void *)fileramaddr;
|
||||
break;
|
||||
case MODELNODETYPE_0D:
|
||||
rodata = node->rodata;
|
||||
|
|
@ -5166,10 +4943,10 @@ void modelPromoteNodeOffsetsToPointers(struct modelnode *node, u32 vma, u32 file
|
|||
PROMOTE(rodata->type0d.unk14);
|
||||
rodata->type0d.baseaddr = (void *)fileramaddr;
|
||||
break;
|
||||
case MODELNODETYPE_16:
|
||||
case MODELNODETYPE_STARGUNFIRE:
|
||||
rodata = node->rodata;
|
||||
PROMOTE(rodata->type16.unk04);
|
||||
rodata->type16.baseaddr = (void *)fileramaddr;
|
||||
PROMOTE(rodata->stargunfire.vertices);
|
||||
rodata->stargunfire.baseaddr = (void *)fileramaddr;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -5285,10 +5062,10 @@ s32 modelCalculateRwDataIndexes(struct modelnode *basenode)
|
|||
rodata->type0b.rwdataindex = len;
|
||||
len += sizeof(struct modelrwdata_0b) / 4;
|
||||
break;
|
||||
case MODELNODETYPE_GUNFIRE:
|
||||
case MODELNODETYPE_CHRGUNFIRE:
|
||||
rodata = node->rodata;
|
||||
rodata->gunfire.rwdataindex = len;
|
||||
len += sizeof(struct modelrwdata_gunfire) / 4;
|
||||
rodata->chrgunfire.rwdataindex = len;
|
||||
len += sizeof(struct modelrwdata_chrgunfire) / 4;
|
||||
break;
|
||||
case MODELNODETYPE_DL:
|
||||
rodata = node->rodata;
|
||||
|
|
@ -5393,9 +5170,9 @@ void modelInitRwData(struct model *model, struct modelnode *startnode)
|
|||
rwdata = modelGetNodeRwData(model, node);
|
||||
rwdata->type0b.unk00 = 0;
|
||||
break;
|
||||
case MODELNODETYPE_GUNFIRE:
|
||||
case MODELNODETYPE_CHRGUNFIRE:
|
||||
rwdata = modelGetNodeRwData(model, node);
|
||||
rwdata->gunfire.visible = false;
|
||||
rwdata->chrgunfire.visible = false;
|
||||
break;
|
||||
case MODELNODETYPE_DL:
|
||||
rodata = node->rodata;
|
||||
|
|
@ -5568,11 +5345,11 @@ void modelIterateDisplayLists(struct modelfiledata *filedata, struct modelnode *
|
|||
gdl = rodata->dl.secondary;
|
||||
}
|
||||
break;
|
||||
case MODELNODETYPE_16:
|
||||
case MODELNODETYPE_STARGUNFIRE:
|
||||
rodata = node->rodata;
|
||||
|
||||
if (node != *nodeptr) {
|
||||
gdl = rodata->type16.unk08;
|
||||
gdl = rodata->stargunfire.gdl;
|
||||
}
|
||||
break;
|
||||
case MODELNODETYPE_DISTANCE:
|
||||
|
|
@ -5642,11 +5419,11 @@ void modelNodeReplaceGdl(u32 arg0, struct modelnode *node, Gfx *find, Gfx *repla
|
|||
return;
|
||||
}
|
||||
break;
|
||||
case MODELNODETYPE_16:
|
||||
case MODELNODETYPE_STARGUNFIRE:
|
||||
rodata = node->rodata;
|
||||
|
||||
if (rodata->type16.unk08 == find) {
|
||||
rodata->type16.unk08 = replacement;
|
||||
if (rodata->stargunfire.gdl == find) {
|
||||
rodata->stargunfire.gdl = replacement;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue