.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;icounter = 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