sm64/bgcheck.s

1975 lines
39 KiB
ArmAsm

.verstamp 3 19
.option pic0
.lcomm move_mapplane 40
.lcomm hit_mapplane 40
.lcomm hit_roofplane 40
.lcomm Xwall 208
.lcomm static_bgdata 56
.extern bgcheck_arealist 6144
.extern movebg_head 24
.extern DBF_BGnull 4
.extern waterline 4
.text
.align 2
.file 2 "bgcheck.c"
.loc 2 75
# 75 {
.ent BG_WallCheck 2
BG_WallCheck:
.option O1
subu $sp, 80
.frame $sp, 80, $31
.loc 2 75
.loc 2 81
# 76
# 77 // int counter;
# 78 float A,B,C,D,dR,dRf;
# 79 float x1,x2,x3,y1,y2,y3;
# 80
# 81 float px = wallcheckp->wx;
l.s $f4, 0($5)
s.s $f4, 28($sp)
.loc 2 82
# 82 float py = (wallcheckp->wy) + (wallcheckp->offsetY);
l.s $f6, 4($5)
l.s $f8, 12($5)
add.s $f10, $f6, $f8
s.s $f10, 24($sp)
.loc 2 83
# 83 float pz = wallcheckp->wz;
l.s $f16, 8($5)
s.s $f16, 20($sp)
.loc 2 84
# 84 float r = wallcheckp->r;
l.s $f18, 16($5)
s.s $f18, 16($sp)
.loc 2 86
# 85
# 86 int wallflag = 0; /* hit OFF/ON 0/1 */
sw $0, 12($sp)
.loc 2 92
# 87 int g_flag;
# 88 BGCheckData *wall; /* bgcheck data */
# 89
# 90
# 91
# 92 while( bgcheck_list != NULL ){
beq $4, 0, $46
$32:
.loc 2 92
.loc 2 96
# 93
# 94 // counter++;
# 95
# 96 wall = bgcheck_list->data;
lw $14, 4($4)
sw $14, 4($sp)
.loc 2 97
# 97 bgcheck_list = bgcheck_list->next;
lw $4, 0($4)
.loc 2 99
# 98
# 99 if ( wall->a < -0.707 || 0.707 < wall->a){
lw $15, 4($sp)
l.s $f4, 36($15)
cvt.d.s $f6, $f4
li.d $f8, -7.0699999999999996e-01
c.lt.d $f6, $f8
bc1t $33
li.d $f10, 0.707
c.lt.d $f10, $f6
bc1f $37
$33:
.loc 2 99
.loc 2 100
# 100 x1 = -(wall->z1); x2 = -(wall->z2); x3 = -(wall->z3);
lw $24, 4($sp)
lh $25, 20($24)
negu $8, $25
mtc1 $8, $f16
cvt.s.w $f18, $f16
s.s $f18, 52($sp)
.loc 2 100
lh $9, 26($24)
negu $10, $9
mtc1 $10, $f4
cvt.s.w $f8, $f4
s.s $f8, 48($sp)
.loc 2 100
lh $11, 32($24)
negu $12, $11
mtc1 $12, $f10
cvt.s.w $f6, $f10
s.s $f6, 44($sp)
.loc 2 101
# 101 y1 = wall->y1; y2 = wall->y2; y3 = wall->y3;
lh $13, 18($24)
mtc1 $13, $f16
cvt.s.w $f4, $f16
s.s $f4, 40($sp)
.loc 2 101
lh $14, 24($24)
mtc1 $14, $f10
cvt.s.w $f6, $f10
s.s $f6, 36($sp)
.loc 2 101
lh $15, 30($24)
mtc1 $15, $f16
cvt.s.w $f10, $f16
s.s $f10, 32($sp)
.loc 2 102
# 102 g_flag = 0;
sw $0, 8($sp)
.loc 2 103
# 103 if ( gaiseki(-pz,py,x1,y1,x2,y2) > 0 ) g_flag++;
l.s $f16, 24($sp)
sub.s $f10, $f4, $f16
sub.s $f16, $f8, $f18
mul.s $f8, $f10, $f16
l.s $f10, 20($sp)
neg.s $f16, $f10
sub.s $f10, $f18, $f16
sub.s $f18, $f6, $f4
mul.s $f16, $f10, $f18
sub.s $f6, $f8, $f16
li.s $f4, 0.0000000000000000e+00
c.lt.s $f4, $f6
bc1f $34
.loc 2 103
li $25, 1
sw $25, 8($sp)
$34:
.loc 2 104
# 104 if ( gaiseki(-pz,py,x2,y2,x3,y3) > 0 ) g_flag++;
l.s $f10, 36($sp)
l.s $f18, 24($sp)
sub.s $f8, $f10, $f18
l.s $f16, 44($sp)
l.s $f6, 48($sp)
sub.s $f4, $f16, $f6
mul.s $f18, $f8, $f4
l.s $f16, 20($sp)
neg.s $f8, $f16
sub.s $f4, $f6, $f8
l.s $f16, 32($sp)
sub.s $f6, $f16, $f10
mul.s $f8, $f4, $f6
sub.s $f16, $f18, $f8
li.s $f10, 0.0000000000000000e+00
c.lt.s $f10, $f16
bc1f $35
.loc 2 104
lw $8, 8($sp)
addu $9, $8, 1
sw $9, 8($sp)
$35:
.loc 2 105
# 105 if ( gaiseki(-pz,py,x3,y3,x1,y1) > 0 ) g_flag++;
l.s $f4, 32($sp)
l.s $f6, 24($sp)
sub.s $f18, $f4, $f6
l.s $f8, 52($sp)
l.s $f16, 44($sp)
sub.s $f10, $f8, $f16
mul.s $f6, $f18, $f10
l.s $f8, 20($sp)
neg.s $f18, $f8
sub.s $f10, $f16, $f18
l.s $f8, 40($sp)
sub.s $f16, $f8, $f4
mul.s $f18, $f10, $f16
sub.s $f8, $f6, $f18
li.s $f4, 0.0000000000000000e+00
c.lt.s $f4, $f8
bc1f $36
.loc 2 105
lw $10, 8($sp)
addu $11, $10, 1
sw $11, 8($sp)
$36:
.loc 2 106
# 106 if ( g_flag == 1 || g_flag == 2 ) continue;
lw $12, 8($sp)
beq $12, 1, $45
bne $12, 2, $41
.loc 2 106
b $45
$37:
.loc 2 108
# 107
# 108 } else {
.loc 2 109
# 109 x1 = wall->x1; x2 = wall->x2; x3 = wall->x3;
lw $13, 4($sp)
lh $14, 16($13)
mtc1 $14, $f10
cvt.s.w $f16, $f10
s.s $f16, 52($sp)
.loc 2 109
lh $24, 22($13)
mtc1 $24, $f6
cvt.s.w $f18, $f6
s.s $f18, 48($sp)
.loc 2 109
lh $15, 28($13)
mtc1 $15, $f8
cvt.s.w $f4, $f8
s.s $f4, 44($sp)
.loc 2 110
# 110 y1 = wall->y1; y2 = wall->y2; y3 = wall->y3;
lh $25, 18($13)
mtc1 $25, $f10
cvt.s.w $f6, $f10
s.s $f6, 40($sp)
.loc 2 110
lh $8, 24($13)
mtc1 $8, $f8
cvt.s.w $f4, $f8
s.s $f4, 36($sp)
.loc 2 110
lh $9, 30($13)
mtc1 $9, $f10
cvt.s.w $f8, $f10
s.s $f8, 32($sp)
.loc 2 111
# 111 g_flag = 0;
sw $0, 8($sp)
.loc 2 112
# 112 if ( gaiseki(px,py,x1,y1,x2,y2) > 0 ) g_flag++;
l.s $f10, 24($sp)
sub.s $f8, $f6, $f10
sub.s $f10, $f18, $f16
mul.s $f18, $f8, $f10
l.s $f8, 28($sp)
sub.s $f10, $f16, $f8
sub.s $f16, $f4, $f6
mul.s $f8, $f10, $f16
sub.s $f4, $f18, $f8
li.s $f6, 0.0000000000000000e+00
c.lt.s $f6, $f4
bc1f $38
.loc 2 112
li $10, 1
sw $10, 8($sp)
$38:
.loc 2 113
# 113 if ( gaiseki(px,py,x2,y2,x3,y3) > 0 ) g_flag++;
l.s $f10, 36($sp)
l.s $f16, 24($sp)
sub.s $f18, $f10, $f16
l.s $f8, 44($sp)
l.s $f4, 48($sp)
sub.s $f6, $f8, $f4
mul.s $f16, $f18, $f6
l.s $f8, 28($sp)
sub.s $f18, $f4, $f8
l.s $f6, 32($sp)
sub.s $f4, $f6, $f10
mul.s $f8, $f18, $f4
sub.s $f6, $f16, $f8
li.s $f10, 0.0000000000000000e+00
c.lt.s $f10, $f6
bc1f $39
.loc 2 113
lw $11, 8($sp)
addu $12, $11, 1
sw $12, 8($sp)
$39:
.loc 2 114
# 114 if ( gaiseki(px,py,x3,y3,x1,y1) > 0 ) g_flag++;
l.s $f18, 32($sp)
l.s $f4, 24($sp)
sub.s $f16, $f18, $f4
l.s $f8, 52($sp)
l.s $f6, 44($sp)
sub.s $f10, $f8, $f6
mul.s $f4, $f16, $f10
l.s $f8, 28($sp)
sub.s $f16, $f6, $f8
l.s $f10, 40($sp)
sub.s $f6, $f10, $f18
mul.s $f8, $f16, $f6
sub.s $f10, $f4, $f8
li.s $f18, 0.0000000000000000e+00
c.lt.s $f18, $f10
bc1f $40
.loc 2 114
lw $14, 8($sp)
addu $24, $14, 1
sw $24, 8($sp)
$40:
.loc 2 115
# 115 if ( g_flag == 1 || g_flag == 2 ) continue;
lw $15, 8($sp)
beq $15, 1, $45
beq $15, 2, $45
.loc 2 115
$41:
.loc 2 118
# 116 }
# 117
# 118 A = wall->a;
lw $25, 4($sp)
l.s $f16, 36($25)
s.s $f16, 76($sp)
.loc 2 119
# 119 B = wall->b;
l.s $f6, 40($25)
s.s $f6, 72($sp)
.loc 2 120
# 120 C = wall->c;
l.s $f4, 44($25)
s.s $f4, 68($sp)
.loc 2 121
# 121 D = wall->d;
l.s $f8, 48($25)
s.s $f8, 64($sp)
.loc 2 123
# 122
# 123 dR = A*px+B*py+C*pz+D;
l.s $f10, 28($sp)
mul.s $f18, $f16, $f10
l.s $f16, 24($sp)
mul.s $f10, $f6, $f16
add.s $f6, $f18, $f10
l.s $f16, 20($sp)
mul.s $f18, $f4, $f16
add.s $f10, $f6, $f18
add.s $f4, $f10, $f8
s.s $f4, 60($sp)
.loc 2 124
# 124 dRf = Mabs(dR);
li.s $f16, 0.0000000000000000e+00
c.le.s $f16, $f4
bc1f $42
s.s $f4, 56($sp)
b $43
$42:
l.s $f6, 60($sp)
neg.s $f18, $f6
s.s $f18, 56($sp)
$43:
.loc 2 127
# 125
# 126
# 127 if ( dRf < r ){
l.s $f10, 56($sp)
l.s $f8, 16($sp)
c.lt.s $f10, $f8
bc1f $45
.loc 2 127
.loc 2 132
# 128
# 129 // dbPrint("dr %d",(int)dR );
# 130 // rmonPrintf("A%f,B%f,C%f,%f\n",A,B,C,dR);
# 131
# 132 wallcheckp->wx += A*(r-dR); /* Xposition offset */
l.s $f16, 60($sp)
sub.s $f4, $f8, $f16
l.s $f6, 76($sp)
mul.s $f18, $f6, $f4
l.s $f10, 0($5)
add.s $f8, $f10, $f18
s.s $f8, 0($5)
.loc 2 133
# 133 wallcheckp->wz += C*(r-dR); /* Zposition offset */
l.s $f16, 16($sp)
l.s $f6, 60($sp)
sub.s $f4, $f16, $f6
l.s $f10, 68($sp)
mul.s $f18, $f10, $f4
l.s $f8, 8($5)
add.s $f16, $f8, $f18
s.s $f16, 8($5)
.loc 2 135
# 134
# 135 if ( wallcheckp->walllistptr < WALLPLANELIST_MAX ){
lh $8, 22($5)
bge $8, 4, $44
.loc 2 135
.loc 2 137
# 136
# 137 wallcheckp->wall[wallcheckp->walllistptr] = &Xwall[wallcheckp->walllistptr];
lh $13, 22($5)
mul $9, $13, 52
la $10, Xwall
addu $11, $9, $10
lh $12, 22($5)
mul $14, $12, 4
addu $24, $5, $14
sw $11, 24($24)
.loc 2 138
# 138 Xwall[wallcheckp->walllistptr].a = wall->a;
lw $15, 4($sp)
l.s $f6, 36($15)
lh $25, 22($5)
mul $8, $25, 52
s.s $f6, Xwall+24($8)
.loc 2 139
# 139 Xwall[wallcheckp->walllistptr].b = wall->b;
lw $13, 4($sp)
l.s $f10, 40($13)
lh $9, 22($5)
mul $10, $9, 52
s.s $f10, Xwall+28($10)
.loc 2 140
# 140 Xwall[wallcheckp->walllistptr].c = wall->c;
lw $12, 4($sp)
l.s $f4, 44($12)
lh $14, 22($5)
mul $11, $14, 52
s.s $f4, Xwall+32($11)
.loc 2 141
# 141 Xwall[wallcheckp->walllistptr].d = wall->d;
lw $24, 4($sp)
l.s $f8, 48($24)
lh $15, 22($5)
mul $25, $15, 52
s.s $f8, Xwall+36($25)
.loc 2 143
# 142
# 143 (wallcheckp->walllistptr)++;
lh $8, 22($5)
addu $13, $8, 1
sh $13, 22($5)
$44:
.loc 2 147
# 144
# 145 }
# 146
# 147 wallflag++;
lw $9, 12($sp)
addu $10, $9, 1
sw $10, 12($sp)
$45:
bne $4, 0, $32
$46:
.loc 2 155
# 155 return(wallflag);
lw $2, 12($sp)
.livereg 0x2000FF0E,0x00000FFF
addu $sp, 80
j $31
.end BG_WallCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl WallCheck
.loc 2 172
# 172 {
.ent WallCheck 2
WallCheck:
.option O1
subu $sp, 72
sw $31, 20($sp)
sw $4, 72($sp)
sw $5, 76($sp)
sw $6, 80($sp)
sw $7, 84($sp)
.mask 0x80000000, -52
.frame $sp, 72, $31
.loc 2 172
.loc 2 175
# 173
# 174 WallCheckRecord wall;
# 175 int wallcount = 0;
sw $0, 28($sp)
.loc 2 177
# 176
# 177 wall.offsetY = offsetY;
l.s $f4, 84($sp)
s.s $f4, 44($sp)
.loc 2 178
# 178 wall.r = r;
l.s $f6, 88($sp)
s.s $f6, 48($sp)
.loc 2 179
# 179 wall.wx = *wX; wall.wy = *wY; wall.wz = *wZ;
lw $14, 72($sp)
l.s $f8, 0($14)
s.s $f8, 32($sp)
.loc 2 179
lw $15, 76($sp)
l.s $f10, 0($15)
s.s $f10, 36($sp)
.loc 2 179
lw $24, 80($sp)
l.s $f16, 0($24)
s.s $f16, 40($sp)
.loc 2 181
# 180
# 181 wallcount = mcWallCheck(&wall);
addu $4, $sp, 32
.livereg 0x0800000E,0x00000000
jal mcWallCheck
sw $2, 28($sp)
.loc 2 183
# 182
# 183 *wX = wall.wx; *wY = wall.wy; *wZ = wall.wz;
l.s $f18, 32($sp)
lw $25, 72($sp)
s.s $f18, 0($25)
.loc 2 183
l.s $f4, 36($sp)
lw $8, 76($sp)
s.s $f4, 0($8)
.loc 2 183
l.s $f6, 40($sp)
lw $9, 80($sp)
s.s $f6, 0($9)
.loc 2 185
# 184
# 185 return(wallcount);
lw $2, 28($sp)
.livereg 0x2000FF0E,0x00000FFF
lw $31, 20($sp)
addu $sp, 72
j $31
.end WallCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcWallCheck
.loc 2 190
# 186
# 187 }
# 188 /*-------------------------------------------------------------------------------*/
# 189 extern int mcWallCheck(WallCheckRecord *wall)
# 190 {
.ent mcWallCheck 2
mcWallCheck:
.option O1
subu $sp, 48
sw $31, 28($sp)
sw $4, 48($sp)
sw $16, 24($sp)
.mask 0x80010000, -20
.frame $sp, 48, $31
.loc 2 190
.loc 2 194
# 191
# 192 BGCheckList *bgcheck_list;
# 193 short area_x,area_z;
# 194 int wallcount = 0;
sw $0, 36($sp)
.loc 2 195
# 195 wall->walllistptr = 0; /* Walllist pointer Reset!! */
lw $14, 48($sp)
sh $0, 22($14)
.loc 2 197
# 196
# 197 if ( wall->wx < MAP_LIMIT_MIN || MAP_LIMIT_MAX < wall->wx ) return( wallcount );
lw $15, 48($sp)
l.s $f4, 0($15)
li.s $f6, -8.1910000000000000e+03
c.lt.s $f4, $f6
bc1t $47
li.s $f8, 8.1920000000000000e+03
c.lt.s $f8, $f4
bc1f $48
$47:
.loc 2 197
lw $2, 36($sp)
b $51
$48:
.loc 2 198
# 198 if ( wall->wz < MAP_LIMIT_MIN || MAP_LIMIT_MAX < wall->wz ) return( wallcount );
lw $24, 48($sp)
l.s $f10, 8($24)
li.s $f16, -8.1910000000000000e+03
c.lt.s $f10, $f16
bc1t $49
li.s $f18, 8.1920000000000000e+03
c.lt.s $f18, $f10
bc1f $50
$49:
.loc 2 198
lw $2, 36($sp)
b $51
$50:
.loc 2 202
# 199
# 200 #if 1
# 201 /*--- static ----*/
# 202 area_x = ( (wall->wx) + MAP_HALF_SIZE ) / 1024;
lw $25, 48($sp)
l.s $f6, 0($25)
li.s $f8, 8.1920000000000000e+03
add.s $f4, $f6, $f8
li.s $f16, 1.0240000000000000e+03
div.s $f18, $f4, $f16
trunc.w.s $f10, $f18, $8
mfc1 $9, $f10
sh $9, 42($sp)
.loc 2 203
# 203 area_z = ( (wall->wz) + MAP_HALF_SIZE ) / 1024;
l.s $f6, 8($25)
li.s $f8, 8.1920000000000000e+03
add.s $f4, $f6, $f8
li.s $f16, 1.0240000000000000e+03
div.s $f18, $f4, $f16
trunc.w.s $f10, $f18, $10
mfc1 $11, $f10
sh $11, 40($sp)
.loc 2 204
# 204 bgcheck_list = bgcheck_arealist[area_z][area_x].root[_CHECK_WALL].next;
sll $12, $11, 16
sra $13, $12, 16
mul $14, $13, 384
sll $15, $9, 16
sra $24, $15, 16
mul $8, $24, 24
addu $10, $14, $8
lw $11, bgcheck_arealist+16($10)
sw $11, 44($sp)
.loc 2 205
# 205 wallcount += BG_WallCheck(bgcheck_list,wall);
move $4, $11
move $5, $25
.livereg 0x0C00000E,0x00000000
jal BG_WallCheck
move $16, $2
lw $12, 36($sp)
addu $13, $12, $16
sw $13, 36($sp)
.loc 2 209
# 206 #endif
# 207
# 208 /*--- dynamic ---*/
# 209 bgcheck_list = movebg_head.root[_CHECK_WALL].next;
la $9, movebg_head
lw $15, 16($9)
sw $15, 44($sp)
.loc 2 210
# 210 wallcount += BG_WallCheck(bgcheck_list,wall);
move $4, $15
lw $5, 48($sp)
.livereg 0x0C00000E,0x00000000
jal BG_WallCheck
move $16, $2
lw $24, 36($sp)
addu $14, $24, $16
sw $14, 36($sp)
.loc 2 213
# 211
# 212
# 213 return(wallcount);
move $2, $14
$51:
.livereg 0x2000FF0E,0x00000FFF
lw $16, 24($sp)
lw $31, 28($sp)
addu $sp, 48
j $31
.end mcWallCheck
.text
.align 2
.file 2 "bgcheck.c"
.loc 2 233
# 233 {
.ent BG_RoofCheck 2
BG_RoofCheck:
.option O1
subu $sp, 56
sw $5, 60($sp)
sw $6, 64($sp)
sw $7, 68($sp)
.frame $sp, 56, $31
.loc 2 233
.loc 2 239
# 234
# 235 BGCheckData *bgcheck_data, *bgcheck_hitdata;
# 236 float x1,z1,x2,z2,x3,z3; /* polygon pointdata */
# 237 float A,B,C,D,roofY;
# 238
# 239 bgcheck_hitdata = NULL;
sw $0, 48($sp)
.loc 2 241
# 240
# 241 while ( bgcheck_list != NULL ){
beq $4, 0, $54
$52:
.loc 2 241
.loc 2 243
# 242
# 243 bgcheck_data = bgcheck_list->data; /* Next DataCheck !! */
lw $14, 4($4)
sw $14, 52($sp)
.loc 2 244
# 244 bgcheck_list = bgcheck_list->next; /* next BGcheck !! */
lw $4, 0($4)
.loc 2 246
# 245
# 246 x1 = bgcheck_data->x1; x2 = bgcheck_data->x2; x3 = bgcheck_data->x3;
lw $15, 52($sp)
lh $24, 16($15)
mtc1 $24, $f4
cvt.s.w $f6, $f4
s.s $f6, 44($sp)
.loc 2 246
lh $25, 22($15)
mtc1 $25, $f8
cvt.s.w $f10, $f8
s.s $f10, 36($sp)
.loc 2 246
lh $8, 28($15)
mtc1 $8, $f16
cvt.s.w $f18, $f16
s.s $f18, 28($sp)
.loc 2 247
# 247 z1 = bgcheck_data->z1; z2 = bgcheck_data->z2; z3 = bgcheck_data->z3;
lh $9, 20($15)
mtc1 $9, $f4
cvt.s.w $f8, $f4
s.s $f8, 40($sp)
.loc 2 247
lh $10, 26($15)
mtc1 $10, $f16
cvt.s.w $f18, $f16
s.s $f18, 32($sp)
.loc 2 247
lh $11, 32($15)
mtc1 $11, $f4
cvt.s.w $f16, $f4
s.s $f16, 24($sp)
.loc 2 249
# 248
# 249 if ( gaiseki(x,z,x1,z1,x2,z2) > 0 ) continue;
l.s $f4, 68($sp)
sub.s $f16, $f8, $f4
sub.s $f4, $f10, $f6
mul.s $f10, $f16, $f4
l.s $f16, 60($sp)
sub.s $f4, $f6, $f16
sub.s $f6, $f18, $f8
mul.s $f16, $f4, $f6
sub.s $f18, $f10, $f16
li.s $f8, 0.0000000000000000e+00
c.lt.s $f8, $f18
bc1t $53
.loc 2 249
.loc 2 250
# 250 if ( gaiseki(x,z,x2,z2,x3,z3) > 0 ) continue;
l.s $f4, 32($sp)
l.s $f6, 68($sp)
sub.s $f10, $f4, $f6
l.s $f16, 28($sp)
l.s $f18, 36($sp)
sub.s $f8, $f16, $f18
mul.s $f6, $f10, $f8
l.s $f16, 60($sp)
sub.s $f10, $f18, $f16
l.s $f8, 24($sp)
sub.s $f18, $f8, $f4
mul.s $f16, $f10, $f18
sub.s $f8, $f6, $f16
li.s $f4, 0.0000000000000000e+00
c.lt.s $f4, $f8
bc1t $53
.loc 2 250
.loc 2 251
# 251 if ( gaiseki(x,z,x3,z3,x1,z1) > 0 ) continue;
l.s $f10, 24($sp)
l.s $f18, 68($sp)
sub.s $f6, $f10, $f18
l.s $f16, 44($sp)
l.s $f8, 28($sp)
sub.s $f4, $f16, $f8
mul.s $f18, $f6, $f4
l.s $f16, 60($sp)
sub.s $f6, $f8, $f16
l.s $f4, 40($sp)
sub.s $f8, $f4, $f10
mul.s $f16, $f6, $f8
sub.s $f4, $f18, $f16
li.s $f10, 0.0000000000000000e+00
c.lt.s $f10, $f4
bc1t $53
.loc 2 251
.loc 2 253
# 252
# 253 A = bgcheck_data->a;
lw $12, 52($sp)
l.s $f6, 36($12)
s.s $f6, 20($sp)
.loc 2 254
# 254 B = bgcheck_data->b;
l.s $f8, 40($12)
s.s $f8, 16($sp)
.loc 2 255
# 255 C = bgcheck_data->c;
l.s $f18, 44($12)
s.s $f18, 12($sp)
.loc 2 256
# 256 D = bgcheck_data->d;
l.s $f16, 48($12)
s.s $f16, 8($sp)
.loc 2 257
# 257 roofY = -(A*x+C*z+D)/B;
l.s $f4, 60($sp)
mul.s $f10, $f6, $f4
l.s $f6, 68($sp)
mul.s $f4, $f18, $f6
add.s $f18, $f10, $f4
add.s $f6, $f18, $f16
neg.s $f10, $f6
div.s $f4, $f10, $f8
s.s $f4, 4($sp)
.loc 2 259
# 258
# 259 if ( y-(roofY-(MAX_speedY)) > 0 ) continue;
li.s $f18, -1.5000000000000000e+02
sub.s $f16, $f4, $f18
l.s $f6, 64($sp)
sub.s $f10, $f6, $f16
li.s $f8, 0.0000000000000000e+00
c.lt.s $f8, $f10
bc1t $53
.loc 2 259
.loc 2 261
# 260
# 261 *planeY = roofY;
l.s $f4, 4($sp)
lw $13, 72($sp)
s.s $f4, 0($13)
.loc 2 262
# 262 bgcheck_hitdata = bgcheck_data;
lw $14, 52($sp)
sw $14, 48($sp)
.loc 2 263
# 263 break; /* Hakken Shita !! */
b $54
$53:
bne $4, 0, $52
$54:
.loc 2 267
# 264
# 265 }
# 266
# 267 return(bgcheck_hitdata);
lw $2, 48($sp)
.livereg 0x2000FF0E,0x00000FFF
addu $sp, 56
j $31
.end BG_RoofCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl RoofCheck
.loc 2 277
# 277 {
.ent RoofCheck 2
RoofCheck:
.option O1
subu $sp, 32
sw $31, 20($sp)
sw $6, 40($sp)
sw $7, 44($sp)
s.s $f12, 32($sp)
s.s $f14, 36($sp)
.mask 0x80000000, -12
.frame $sp, 32, $31
.loc 2 277
.loc 2 279
# 278
# 279 float planeY = roofnull_height; /* initialize */
li.s $f4, 2.0000000000000000e+04
s.s $f4, 28($sp)
.loc 2 280
# 280 *hitplane = NULL; /* initilaize */
lw $14, 44($sp)
sw $0, 0($14)
.loc 2 281
# 281 planeY = mcRoofCheck(px,py,pz,hitplane);
l.s $f12, 32($sp)
l.s $f14, 36($sp)
lw $6, 40($sp)
lw $7, 44($sp)
.livereg 0x0300000E,0x000A0000
jal mcRoofCheck
s.s $f0, 28($sp)
.loc 2 282
# 282 return(planeY);
l.s $f0, 28($sp)
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 20($sp)
addu $sp, 32
j $31
.end RoofCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcBGRoofCheck
.loc 2 288
# 283
# 284 }
# 285
# 286 /*-----------------------------------------------------------------------------*/
# 287 extern float mcBGRoofCheck(float px, float py, float pz,BGCheckData **bgdata)
# 288 {
.ent mcBGRoofCheck 2
mcBGRoofCheck:
.option O1
subu $sp, 56
sw $31, 28($sp)
sw $6, 64($sp)
sw $7, 68($sp)
s.s $f12, 56($sp)
s.s $f14, 60($sp)
.mask 0x80000000, -28
.frame $sp, 56, $31
.loc 2 288
.loc 2 294
# 289
# 290 short area_z,area_x;
# 291 BGCheckData *bgcheck_data;
# 292 BGCheckData *bgcheck_data_dynamic;
# 293 BGCheckList *bgcheck_list;
# 294 float planeY = roofnull_height; /* initialize */
li.s $f4, 2.0000000000000000e+04
s.s $f4, 36($sp)
.loc 2 295
# 295 float planeY_dynamic = roofnull_height; /* initialize */
li.s $f6, 2.0000000000000000e+04
s.s $f6, 32($sp)
.loc 2 296
# 296 *bgdata = NULL;
lw $14, 68($sp)
sw $0, 0($14)
.loc 2 301
# 297
# 298
# 299 /*--- Map OverFlow Check ---*/
# 300
# 301 if ( px < MAP_LIMIT_MIN || MAP_LIMIT_MAX < px ) return( planeY );
l.s $f8, 56($sp)
li.s $f10, -8.1910000000000000e+03
c.lt.s $f8, $f10
bc1t $55
li.s $f16, 8.1920000000000000e+03
c.lt.s $f16, $f8
bc1f $56
$55:
.loc 2 301
l.s $f0, 36($sp)
b $60
$56:
.loc 2 302
# 302 if ( pz < MAP_LIMIT_MIN || MAP_LIMIT_MAX < pz ) return( planeY );
l.s $f18, 64($sp)
li.s $f4, -8.1910000000000000e+03
c.lt.s $f18, $f4
bc1t $57
li.s $f6, 8.1920000000000000e+03
c.lt.s $f6, $f18
bc1f $58
$57:
.loc 2 302
l.s $f0, 36($sp)
b $60
$58:
.loc 2 305
# 303
# 304 /*--- dynamic ---*/
# 305 bgcheck_list = movebg_head.root[_CHECK_ROOF].next;
la $15, movebg_head
lw $24, 8($15)
sw $24, 40($sp)
.loc 2 306
# 306 bgcheck_data_dynamic = BG_RoofCheck(bgcheck_list,px,py,pz,&planeY_dynamic);
move $4, $24
lw $5, 56($sp)
lw $6, 60($sp)
lw $7, 64($sp)
addu $25, $sp, 32
sw $25, 16($sp)
.livereg 0x0F00000E,0x00000000
jal BG_RoofCheck
sw $2, 44($sp)
.loc 2 309
# 307
# 308 /*--- static ----*/
# 309 area_x = (short)( ( px + MAP_HALF_SIZE ) / MAP_AREA_SIZE );
l.s $f10, 56($sp)
li.s $f16, 8.1920000000000000e+03
add.s $f8, $f10, $f16
li.s $f4, 1.0240000000000000e+03
div.s $f6, $f8, $f4
trunc.w.s $f18, $f6, $8
mfc1 $9, $f18
sh $9, 52($sp)
.loc 2 310
# 310 area_z = (short)( ( pz + MAP_HALF_SIZE ) / MAP_AREA_SIZE );
l.s $f16, 64($sp)
li.s $f8, 8.1920000000000000e+03
add.s $f4, $f16, $f8
li.s $f6, 1.0240000000000000e+03
div.s $f18, $f4, $f6
trunc.w.s $f8, $f18, $10
mfc1 $11, $f8
sh $11, 54($sp)
.loc 2 311
# 311 bgcheck_list = bgcheck_arealist[area_z][area_x].root[_CHECK_ROOF].next;
sll $12, $11, 16
sra $13, $12, 16
mul $14, $13, 384
sll $15, $9, 16
sra $24, $15, 16
mul $25, $24, 24
addu $8, $14, $25
lw $10, bgcheck_arealist+8($8)
sw $10, 40($sp)
.loc 2 312
# 312 bgcheck_data = BG_RoofCheck(bgcheck_list,px,py,pz,&planeY);
move $4, $10
mfc1 $5, $f10
lw $6, 60($sp)
mfc1 $7, $f16
addu $11, $sp, 36
sw $11, 16($sp)
.livereg 0x0F00000E,0x00000000
jal BG_RoofCheck
sw $2, 48($sp)
.loc 2 315
# 313
# 314 /*---- height check !! ---*/
# 315 if ( planeY_dynamic < planeY ){
l.s $f4, 32($sp)
l.s $f6, 36($sp)
c.lt.s $f4, $f6
bc1f $59
.loc 2 315
.loc 2 316
# 316 bgcheck_data = bgcheck_data_dynamic;
lw $12, 44($sp)
sw $12, 48($sp)
.loc 2 317
# 317 planeY = planeY_dynamic;
s.s $f4, 36($sp)
$59:
.loc 2 320
# 318 }
# 319
# 320 *bgdata = bgcheck_data;
lw $13, 48($sp)
lw $9, 68($sp)
sw $13, 0($9)
.loc 2 322
# 321
# 322 return(planeY);
l.s $f0, 36($sp)
$60:
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 28($sp)
addu $sp, 56
j $31
.end mcBGRoofCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcRoofCheck
.loc 2 328
# 323
# 324 }
# 325
# 326 /*-----------------------------------------------------------------------------*/
# 327 extern float mcRoofCheck(float px, float py, float pz,Plane **hitplane)
# 328 {
.ent mcRoofCheck 2
mcRoofCheck:
.option O1
subu $sp, 32
sw $31, 20($sp)
sw $6, 40($sp)
sw $7, 44($sp)
s.s $f12, 32($sp)
s.s $f14, 36($sp)
.mask 0x80000000, -12
.frame $sp, 32, $31
.loc 2 328
.loc 2 332
# 329
# 330 float planeY;
# 331 BGCheckData *bgcheck_data;
# 332 *hitplane = NULL; /* initilaize */
lw $14, 44($sp)
sw $0, 0($14)
.loc 2 334
# 333
# 334 planeY = mcBGRoofCheck(px,py,pz,&bgcheck_data);
l.s $f12, 32($sp)
l.s $f14, 36($sp)
lw $6, 40($sp)
addu $7, $sp, 24
.livereg 0x0300000E,0x000A0000
jal mcBGRoofCheck
s.s $f0, 28($sp)
.loc 2 336
# 335
# 336 if ( bgcheck_data != NULL ){
lw $15, 24($sp)
beq $15, 0, $61
.loc 2 336
.loc 2 337
# 337 hit_roofplane.a = bgcheck_data->a;
l.s $f4, 36($15)
s.s $f4, hit_roofplane+16
.loc 2 338
# 338 hit_roofplane.b = bgcheck_data->b;
l.s $f6, 40($15)
s.s $f6, hit_roofplane+20
.loc 2 339
# 339 hit_roofplane.c = bgcheck_data->c;
l.s $f8, 44($15)
s.s $f8, hit_roofplane+24
.loc 2 340
# 340 hit_roofplane.d = bgcheck_data->d;
l.s $f10, 48($15)
s.s $f10, hit_roofplane+28
.loc 2 341
# 341 *hitplane = &hit_roofplane;
la $24, hit_roofplane
lw $25, 44($sp)
sw $24, 0($25)
$61:
.loc 2 344
# 342 }
# 343
# 344 return(planeY);
l.s $f0, 28($sp)
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 20($sp)
addu $sp, 32
j $31
.end mcRoofCheck
.text
.align 2
.file 2 "bgcheck.c"
.loc 2 367
# 367 {
.ent BG_GroundCheck 2
BG_GroundCheck:
.option O1
subu $sp, 56
sw $5, 60($sp)
sw $6, 64($sp)
sw $7, 68($sp)
.frame $sp, 56, $31
.loc 2 367
.loc 2 374
# 374 bgcheck_hitdata = NULL;
sw $0, 48($sp)
.loc 2 376
# 375
# 376 while ( bgcheck_list != NULL ){
beq $4, 0, $64
$62:
.loc 2 376
.loc 2 378
# 377
# 378 bgcheck_data = bgcheck_list->data; /* Next DataCheck !! */
lw $14, 4($4)
sw $14, 52($sp)
.loc 2 379
# 379 bgcheck_list = bgcheck_list->next; /* next BGcheck !! */
lw $4, 0($4)
.loc 2 381
# 380
# 381 x1 = bgcheck_data->x1; x2 = bgcheck_data->x2; x3 = bgcheck_data->x3;
lw $15, 52($sp)
lh $24, 16($15)
mtc1 $24, $f4
cvt.s.w $f6, $f4
s.s $f6, 44($sp)
.loc 2 381
lh $25, 22($15)
mtc1 $25, $f8
cvt.s.w $f10, $f8
s.s $f10, 36($sp)
.loc 2 381
lh $8, 28($15)
mtc1 $8, $f16
cvt.s.w $f18, $f16
s.s $f18, 28($sp)
.loc 2 382
# 382 z1 = bgcheck_data->z1; z2 = bgcheck_data->z2; z3 = bgcheck_data->z3;
lh $9, 20($15)
mtc1 $9, $f4
cvt.s.w $f8, $f4
s.s $f8, 40($sp)
.loc 2 382
lh $10, 26($15)
mtc1 $10, $f16
cvt.s.w $f18, $f16
s.s $f18, 32($sp)
.loc 2 382
lh $11, 32($15)
mtc1 $11, $f4
cvt.s.w $f16, $f4
s.s $f16, 24($sp)
.loc 2 384
# 383
# 384 if ( gaiseki(x,z,x1,z1,x2,z2) < 0 ) continue;
l.s $f4, 68($sp)
sub.s $f16, $f8, $f4
sub.s $f4, $f10, $f6
mul.s $f10, $f16, $f4
l.s $f16, 60($sp)
sub.s $f4, $f6, $f16
sub.s $f6, $f18, $f8
mul.s $f16, $f4, $f6
sub.s $f18, $f10, $f16
li.s $f8, 0.0000000000000000e+00
c.lt.s $f18, $f8
bc1t $63
.loc 2 384
.loc 2 385
# 385 if ( gaiseki(x,z,x2,z2,x3,z3) < 0 ) continue;
l.s $f4, 32($sp)
l.s $f6, 68($sp)
sub.s $f10, $f4, $f6
l.s $f16, 28($sp)
l.s $f18, 36($sp)
sub.s $f8, $f16, $f18
mul.s $f6, $f10, $f8
l.s $f16, 60($sp)
sub.s $f10, $f18, $f16
l.s $f8, 24($sp)
sub.s $f18, $f8, $f4
mul.s $f16, $f10, $f18
sub.s $f8, $f6, $f16
li.s $f4, 0.0000000000000000e+00
c.lt.s $f8, $f4
bc1t $63
.loc 2 385
.loc 2 386
# 386 if ( gaiseki(x,z,x3,z3,x1,z1) < 0 ) continue;
l.s $f10, 24($sp)
l.s $f18, 68($sp)
sub.s $f6, $f10, $f18
l.s $f16, 44($sp)
l.s $f8, 28($sp)
sub.s $f4, $f16, $f8
mul.s $f18, $f6, $f4
l.s $f16, 60($sp)
sub.s $f6, $f8, $f16
l.s $f4, 40($sp)
sub.s $f8, $f4, $f10
mul.s $f16, $f6, $f8
sub.s $f4, $f18, $f16
li.s $f10, 0.0000000000000000e+00
c.lt.s $f4, $f10
bc1t $63
.loc 2 386
.loc 2 388
# 387
# 388 A = bgcheck_data->a;
lw $12, 52($sp)
l.s $f6, 36($12)
s.s $f6, 20($sp)
.loc 2 389
# 389 B = bgcheck_data->b;
l.s $f8, 40($12)
s.s $f8, 16($sp)
.loc 2 390
# 390 C = bgcheck_data->c;
l.s $f18, 44($12)
s.s $f18, 12($sp)
.loc 2 391
# 391 D = bgcheck_data->d;
l.s $f16, 48($12)
s.s $f16, 8($sp)
.loc 2 392
# 392 groundY = -(A*x+C*z+D)/B;
l.s $f4, 60($sp)
mul.s $f10, $f6, $f4
l.s $f6, 68($sp)
mul.s $f4, $f18, $f6
add.s $f18, $f10, $f4
add.s $f6, $f18, $f16
neg.s $f10, $f6
div.s $f4, $f10, $f8
s.s $f4, 4($sp)
.loc 2 394
# 393
# 394 if ( y-(groundY+MAX_speedY) < 0 ) continue;
li.s $f18, -1.5000000000000000e+02
add.s $f16, $f4, $f18
l.s $f6, 64($sp)
sub.s $f10, $f6, $f16
li.s $f8, 0.0000000000000000e+00
c.lt.s $f10, $f8
bc1t $63
.loc 2 394
.loc 2 396
# 395
# 396 *planeY = groundY;
l.s $f4, 4($sp)
lw $13, 72($sp)
s.s $f4, 0($13)
.loc 2 397
# 397 bgcheck_hitdata = bgcheck_data;
lw $14, 52($sp)
sw $14, 48($sp)
.loc 2 398
# 398 break; /* Hakken Shita !! */
b $64
$63:
bne $4, 0, $62
$64:
.loc 2 402
# 399
# 400 }
# 401
# 402 return(bgcheck_hitdata);
lw $2, 48($sp)
.livereg 0x2000FF0E,0x00000FFF
addu $sp, 56
j $31
.end BG_GroundCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl BGcheck
.loc 2 413
# 413 {
.ent BGcheck 2
BGcheck:
.option O1
subu $sp, 32
sw $31, 20($sp)
sw $6, 40($sp)
s.s $f12, 32($sp)
s.s $f14, 36($sp)
.mask 0x80000000, -12
.frame $sp, 32, $31
.loc 2 413
.loc 2 416
# 414 BGCheckData *bgdata;
# 415 float planeY;
# 416 planeY = mcBGGroundCheck(px,py,pz,&bgdata);
l.s $f12, 32($sp)
l.s $f14, 36($sp)
lw $6, 40($sp)
addu $7, $sp, 28
.livereg 0x0300000E,0x000A0000
jal mcBGGroundCheck
s.s $f0, 24($sp)
.loc 2 417
# 417 return(planeY);
l.s $f0, 24($sp)
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 20($sp)
addu $sp, 32
j $31
.end BGcheck
.text
.align 2
.file 2 "bgcheck.c"
.globl GroundCheck
.loc 2 423
# 418
# 419 }
# 420
# 421 /*-----------------------------------------------------------------------------*/
# 422 extern float GroundCheck(float px, float py, float pz,Plane **hitplane)
# 423 {
.ent GroundCheck 2
GroundCheck:
.option O1
subu $sp, 32
sw $31, 20($sp)
sw $6, 40($sp)
sw $7, 44($sp)
s.s $f12, 32($sp)
s.s $f14, 36($sp)
.mask 0x80000000, -12
.frame $sp, 32, $31
.loc 2 423
.loc 2 425
# 424
# 425 float planeY = null_height; /* initialize */
li.s $f4, -1.1000000000000000e+04
s.s $f4, 28($sp)
.loc 2 426
# 426 *hitplane = NULL; /* initilaize */
lw $14, 44($sp)
sw $0, 0($14)
.loc 2 427
# 427 planeY = mcGroundCheck(px,py,pz,hitplane);
l.s $f12, 32($sp)
l.s $f14, 36($sp)
lw $6, 40($sp)
lw $7, 44($sp)
.livereg 0x0300000E,0x000A0000
jal mcGroundCheck
s.s $f0, 28($sp)
.loc 2 428
# 428 return(planeY);
l.s $f0, 28($sp)
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 20($sp)
addu $sp, 32
j $31
.end GroundCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcMoveGroundCheck
.loc 2 434
# 429
# 430 }
# 431
# 432 /*-----------------------------------------------------------------------------*/
# 433 extern float mcMoveGroundCheck(float px, float py, float pz,BGCheckData **bgcheck_data)
# 434 {
.ent mcMoveGroundCheck 2
mcMoveGroundCheck:
.option O1
subu $sp, 48
sw $31, 28($sp)
sw $6, 56($sp)
sw $7, 60($sp)
s.s $f12, 48($sp)
s.s $f14, 52($sp)
.mask 0x80000000, -20
.frame $sp, 48, $31
.loc 2 434
.loc 2 438
# 435
# 436 BGCheckList *bgcheck_list;
# 437 BGCheckData *bgcheck_data_dynamic;
# 438 float planeY = null_height; /* initialize */
li.s $f4, -1.1000000000000000e+04
s.s $f4, 36($sp)
.loc 2 441
# 439
# 440 /*--- dynamic ---*/
# 441 bgcheck_list = movebg_head.root[_CHECK_GROUND].next;
la $14, movebg_head
lw $15, 0($14)
sw $15, 44($sp)
.loc 2 442
# 442 bgcheck_data_dynamic = BG_GroundCheck(bgcheck_list,px,py,pz,&planeY);
move $4, $15
lw $5, 48($sp)
lw $6, 52($sp)
lw $7, 56($sp)
addu $24, $sp, 36
sw $24, 16($sp)
.livereg 0x0F00000E,0x00000000
jal BG_GroundCheck
sw $2, 40($sp)
.loc 2 444
# 443
# 444 *bgcheck_data = bgcheck_data_dynamic;
lw $25, 40($sp)
lw $8, 60($sp)
sw $25, 0($8)
.loc 2 446
# 445
# 446 return(planeY);
l.s $f0, 36($sp)
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 28($sp)
addu $sp, 48
j $31
.end mcMoveGroundCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcBGGroundCheck
.loc 2 453
# 453 {
.ent mcBGGroundCheck 2
mcBGGroundCheck:
.option O1
subu $sp, 56
sw $31, 28($sp)
sw $6, 64($sp)
sw $7, 68($sp)
s.s $f12, 56($sp)
s.s $f14, 60($sp)
.mask 0x80000000, -28
.frame $sp, 56, $31
.loc 2 453
.loc 2 459
# 454
# 455 short area_z,area_x;
# 456 BGCheckData *bgcheck_data;
# 457 BGCheckData *bgcheck_data_dynamic;
# 458 BGCheckList *bgcheck_list;
# 459 float planeY = null_height; /* initialize */
li.s $f4, -1.1000000000000000e+04
s.s $f4, 36($sp)
.loc 2 460
# 460 float planeY_dynamic = null_height; /* initialize */
li.s $f6, -1.1000000000000000e+04
s.s $f6, 32($sp)
.loc 2 461
# 461 *bgdata = NULL;
lw $14, 68($sp)
sw $0, 0($14)
.loc 2 463
# 462
# 463 if ( px < MAP_LIMIT_MIN || MAP_LIMIT_MAX < px ) return( planeY );
l.s $f8, 56($sp)
li.s $f10, -8.1910000000000000e+03
c.lt.s $f8, $f10
bc1t $65
li.s $f16, 8.1920000000000000e+03
c.lt.s $f16, $f8
bc1f $66
$65:
.loc 2 463
l.s $f0, 36($sp)
b $71
$66:
.loc 2 464
# 464 if ( pz < MAP_LIMIT_MIN || MAP_LIMIT_MAX < pz ) return( planeY );
l.s $f18, 64($sp)
li.s $f4, -8.1910000000000000e+03
c.lt.s $f18, $f4
bc1t $67
li.s $f6, 8.1920000000000000e+03
c.lt.s $f6, $f18
bc1f $68
$67:
.loc 2 464
l.s $f0, 36($sp)
b $71
$68:
.loc 2 467
# 465
# 466 /*--- dynamic ---*/
# 467 bgcheck_list = movebg_head.root[_CHECK_GROUND].next;
la $15, movebg_head
lw $24, 0($15)
sw $24, 40($sp)
.loc 2 468
# 468 bgcheck_data_dynamic = BG_GroundCheck(bgcheck_list,px,py,pz,&planeY_dynamic);
move $4, $24
lw $5, 56($sp)
lw $6, 60($sp)
lw $7, 64($sp)
addu $25, $sp, 32
sw $25, 16($sp)
.livereg 0x0F00000E,0x00000000
jal BG_GroundCheck
sw $2, 44($sp)
.loc 2 471
# 469
# 470 /*---- static ---*/
# 471 area_x = (short)( ( px + MAP_HALF_SIZE ) / MAP_AREA_SIZE );
l.s $f10, 56($sp)
li.s $f16, 8.1920000000000000e+03
add.s $f8, $f10, $f16
li.s $f4, 1.0240000000000000e+03
div.s $f6, $f8, $f4
trunc.w.s $f18, $f6, $8
mfc1 $9, $f18
sh $9, 52($sp)
.loc 2 472
# 472 area_z = (short)( ( pz + MAP_HALF_SIZE ) / MAP_AREA_SIZE );
l.s $f16, 64($sp)
li.s $f8, 8.1920000000000000e+03
add.s $f4, $f16, $f8
li.s $f6, 1.0240000000000000e+03
div.s $f18, $f4, $f6
trunc.w.s $f8, $f18, $10
mfc1 $11, $f8
sh $11, 54($sp)
.loc 2 473
# 473 bgcheck_list = bgcheck_arealist[area_z][area_x].root[_CHECK_GROUND].next;
sll $12, $11, 16
sra $13, $12, 16
mul $14, $13, 384
sll $15, $9, 16
sra $24, $15, 16
mul $25, $24, 24
addu $8, $14, $25
lw $10, bgcheck_arealist($8)
sw $10, 40($sp)
.loc 2 474
# 474 bgcheck_data = BG_GroundCheck(bgcheck_list,px,py,pz,&planeY);
move $4, $10
mfc1 $5, $f10
lw $6, 60($sp)
mfc1 $7, $f16
addu $11, $sp, 36
sw $11, 16($sp)
.livereg 0x0F00000E,0x00000000
jal BG_GroundCheck
sw $2, 48($sp)
.loc 2 477
# 475
# 476 /*== ERR CHECK ==*/
# 477 if ( bgcheck_data == NULL ) DBF_BGnull++;
lw $12, 48($sp)
bne $12, 0, $69
.loc 2 477
lw $13, DBF_BGnull
addu $9, $13, 1
sw $9, DBF_BGnull
$69:
.loc 2 480
# 478
# 479 /*---- height check !! ---*/
# 480 if ( planeY_dynamic > planeY ){
l.s $f4, 32($sp)
l.s $f6, 36($sp)
c.lt.s $f6, $f4
bc1f $70
.loc 2 480
.loc 2 481
# 481 bgcheck_data = bgcheck_data_dynamic;
lw $15, 44($sp)
sw $15, 48($sp)
.loc 2 482
# 482 planeY = planeY_dynamic;
s.s $f4, 36($sp)
$70:
.loc 2 485
# 483 }
# 484
# 485 *bgdata = bgcheck_data;
lw $24, 48($sp)
lw $14, 68($sp)
sw $24, 0($14)
.loc 2 497
# 497 return(planeY);
l.s $f0, 36($sp)
$71:
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 28($sp)
addu $sp, 56
j $31
.end mcBGGroundCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcGroundCheck
.loc 2 503
# 498
# 499 }
# 500
# 501 /*-----------------------------------------------------------------------------*/
# 502 extern float mcGroundCheck(float px, float py, float pz,Plane **hitplane)
# 503 {
.ent mcGroundCheck 2
mcGroundCheck:
.option O1
subu $sp, 32
sw $31, 20($sp)
sw $6, 40($sp)
sw $7, 44($sp)
s.s $f12, 32($sp)
s.s $f14, 36($sp)
.mask 0x80000000, -12
.frame $sp, 32, $31
.loc 2 503
.loc 2 507
# 504
# 505 float planeY;
# 506 BGCheckData *bgcheck_data;
# 507 *hitplane = NULL; /* initilaize */
lw $14, 44($sp)
sw $0, 0($14)
.loc 2 508
# 508 planeY = mcBGGroundCheck(px,py,pz,&bgcheck_data);
l.s $f12, 32($sp)
l.s $f14, 36($sp)
lw $6, 40($sp)
addu $7, $sp, 24
.livereg 0x0300000E,0x000A0000
jal mcBGGroundCheck
s.s $f0, 28($sp)
.loc 2 510
# 509
# 510 if ( bgcheck_data != NULL ){
lw $15, 24($sp)
beq $15, 0, $72
.loc 2 510
.loc 2 512
# 511 /* Set Normal Vector */
# 512 hit_mapplane.a = bgcheck_data->a;
l.s $f4, 36($15)
s.s $f4, hit_mapplane+16
.loc 2 513
# 513 hit_mapplane.b = bgcheck_data->b;
l.s $f6, 40($15)
s.s $f6, hit_mapplane+20
.loc 2 514
# 514 hit_mapplane.c = bgcheck_data->c;
l.s $f8, 44($15)
s.s $f8, hit_mapplane+24
.loc 2 515
# 515 hit_mapplane.d = bgcheck_data->d;
l.s $f10, 48($15)
s.s $f10, hit_mapplane+28
.loc 2 516
# 516 *hitplane = &hit_mapplane;
la $24, hit_mapplane
lw $25, 44($sp)
sw $24, 0($25)
$72:
.loc 2 519
# 517 }
# 518
# 519 return(planeY);
l.s $f0, 28($sp)
.livereg 0x0000FF0E,0xA0000FFF
lw $31, 20($sp)
addu $sp, 32
j $31
.end mcGroundCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcWaterCheck
.loc 2 538
# 538 {
.ent mcWaterCheck 2
mcWaterCheck:
.option O1
subu $sp, 40
.frame $sp, 40, $31
.loc 2 538
.loc 2 543
# 539
# 540 int i,loop;
# 541 short code;
# 542 float Xmin,Xmax,Zmin,Zmax;
# 543 float waterY = -11000;
li.s $f4, -1.1000000000000000e+04
s.s $f4, 8($sp)
.loc 2 544
# 544 short *water = waterline;
lw $14, waterline
sw $14, 4($sp)
.loc 2 546
# 545
# 546 if ( water != NULL ){
beq $14, 0, $75
.loc 2 546
.loc 2 548
# 547
# 548 loop = *water++;
lh $15, 0($14)
sw $15, 32($sp)
addu $24, $14, 2
sw $24, 4($sp)
.loc 2 550
# 549
# 550 for(i=0;i<loop;i++){
sw $0, 36($sp)
ble $15, 0, $75
$73:
.loc 2 550
.loc 2 552
# 551
# 552 code = *water++;
lw $25, 4($sp)
lh $8, 0($25)
sh $8, 30($sp)
addu $9, $25, 2
sw $9, 4($sp)
.loc 2 553
# 553 Xmin = *water++;
lh $10, 0($9)
mtc1 $10, $f6
cvt.s.w $f8, $f6
s.s $f8, 24($sp)
addu $11, $9, 2
sw $11, 4($sp)
.loc 2 554
# 554 Zmin = *water++;
lh $12, 2($9)
mtc1 $12, $f10
cvt.s.w $f16, $f10
s.s $f16, 16($sp)
addu $13, $11, 2
sw $13, 4($sp)
.loc 2 555
# 555 Xmax = *water++;
lh $14, 2($11)
mtc1 $14, $f18
cvt.s.w $f4, $f18
s.s $f4, 20($sp)
addu $24, $13, 2
sw $24, 4($sp)
.loc 2 556
# 556 Zmax = *water++;
lh $15, 2($13)
mtc1 $15, $f6
cvt.s.w $f8, $f6
s.s $f8, 12($sp)
addu $8, $24, 2
sw $8, 4($sp)
.loc 2 558
# 557
# 558 if ( (Xmin<wx) && (wx<Xmax) && (Zmin<wz) && (wz<Zmax) ){
l.s $f10, 24($sp)
c.lt.s $f10, $f12
bc1f $74
l.s $f16, 20($sp)
c.lt.s $f12, $f16
bc1f $74
l.s $f18, 16($sp)
c.lt.s $f18, $f14
bc1f $74
l.s $f4, 12($sp)
c.lt.s $f14, $f4
bc1f $74
.loc 2 558
.loc 2 559
# 559 waterY = *water;
lh $25, 0($8)
mtc1 $25, $f6
cvt.s.w $f8, $f6
s.s $f8, 8($sp)
.loc 2 560
# 560 break;
b $75
$74:
.loc 2 562
# 561 }
# 562 water++;
lw $10, 4($sp)
addu $9, $10, 2
sw $9, 4($sp)
.loc 2 550
# 550 for(i=0;i<loop;i++){
lw $12, 36($sp)
addu $11, $12, 1
sw $11, 36($sp)
lw $14, 32($sp)
blt $11, $14, $73
$75:
.loc 2 566
# 566 return(waterY);
l.s $f0, 8($sp)
.livereg 0x0000FF0E,0xA0000FFF
addu $sp, 40
j $31
.end mcWaterCheck
.text
.align 2
.file 2 "bgcheck.c"
.globl mcPlaneCheck
.loc 2 588
# 588 {
.ent mcPlaneCheck 2
mcPlaneCheck:
.option O1
subu $sp, 32
sw $31, 20($sp)
sw $6, 40($sp)
sw $7, 44($sp)
s.s $f12, 32($sp)
s.s $f14, 36($sp)
.mask 0x80000000, -12
.frame $sp, 32, $31
.loc 2 588
.loc 2 591
# 589
# 590 Plane *hitplane;
# 591 float bgY = mcGroundCheck(px,py,pz,&hitplane);
l.s $f12, 32($sp)
l.s $f14, 36($sp)
lw $6, 40($sp)
addu $7, $sp, 28
.livereg 0x0300000E,0x000A0000
jal mcGroundCheck
s.s $f0, 24($sp)
.loc 2 593
# 592
# 593 plane->counter = 0;
lw $14, 44($sp)
sh $0, 0($14)
.loc 2 595
# 594
# 595 if ( hitplane != NULL ){
lw $15, 28($sp)
beq $15, 0, $76
.loc 2 595
.loc 2 597
# 596
# 597 plane->counter = 1;
li $24, 1
lw $25, 44($sp)
sh $24, 0($25)
.loc 2 598
# 598 plane->plane[0].a = hitplane->a;
lw $8, 28($sp)
l.s $f4, 16($8)
lw $9, 44($sp)
s.s $f4, 4($9)
.loc 2 599
# 599 plane->plane[0].b = hitplane->b;
lw $10, 28($sp)
l.s $f6, 20($10)
lw $11, 44($sp)
s.s $f6, 8($11)
.loc 2 600
# 600 plane->plane[0].c = hitplane->c;
lw $12, 28($sp)
l.s $f8, 24($12)
lw $13, 44($sp)
s.s $f8, 12($13)
.loc 2 601
# 601 plane->plane[0].d = -( (hitplane->a)*px + (hitplane->b)*bgY + (hitplane->c)*pz );
lw $14, 28($sp)
l.s $f10, 16($14)
l.s $f16, 32($sp)
mul.s $f18, $f10, $f16
l.s $f4, 20($14)
l.s $f6, 24($sp)
mul.s $f8, $f4, $f6
add.s $f10, $f18, $f8
l.s $f16, 24($14)
l.s $f4, 40($sp)
mul.s $f6, $f16, $f4
add.s $f18, $f10, $f6
neg.s $f8, $f18
lw $15, 44($sp)
s.s $f8, 16($15)
b $77
$76:
.loc 2 603
# 602
# 603 } else {
.loc 2 605
# 604
# 605 plane->plane[0].a = 0.0;
li.s $f16, 0.0000000000000000e+00
lw $24, 44($sp)
s.s $f16, 4($24)
.loc 2 606
# 606 plane->plane[0].b = 1.0;
li.s $f4, 1.0000000000000000e+00
lw $25, 44($sp)
s.s $f4, 8($25)
.loc 2 607
# 607 plane->plane[0].c = 0.0;
li.s $f10, 0.0000000000000000e+00
lw $8, 44($sp)
s.s $f10, 12($8)
.loc 2 608
# 608 plane->plane[0].d = 11000;
li.s $f6, 1.1000000000000000e+04
lw $9, 44($sp)
s.s $f6, 16($9)
.loc 2 613
# 609
# 610 }
# 611
# 612
# 613 }
$77:
.livereg 0x2000FF0E,0x00000FFF
lw $31, 20($sp)
addu $sp, 32
j $31
.end mcPlaneCheck