2020-03-27 21:47:29 +01:00
# include "THISDUST.H"
# include "DEBRIS.H"
2020-04-19 12:11:33 +02:00
# include "MOTION_C.H"
# include "TEXTURE.H"
# include "PRES.H"
2020-04-19 12:52:40 +02:00
# include "DIRECTOR.H"
# include "MOTION_C.H"
2020-03-27 21:47:29 +01:00
2020-04-19 12:11:33 +02:00
TEXTURE_DETAILS digit_texture ;
2020-04-19 12:52:40 +02:00
TEXTURE_DETAILS pause ;
2020-03-27 21:47:29 +01:00
TRI_POINT debris_rot1 [ 32 ] ; // offset 0xC0A60
TRI_POINT debris_rot2 [ 32 ] ; // offset 0xC0BE0
TRI_POINT debris_rot3 [ 32 ] ; // offset 0xC0D60
TRI_POINT leaf_rot [ 32 ] ; // offset 0xC1DC0
TRI_POINT litter_rot [ 32 ] ; // offset 0xC08D0
TRI_POINT * debris_rot_table [ 5 ] = {
debris_rot1 ,
leaf_rot ,
litter_rot ,
debris_rot2 ,
debris_rot3 ,
} ;
// debris_colour[4][31]
CVECTOR debris_colour [ 124 ] =
{
{ 100u , 100u , 100u , 0u } ,
{ 214u , 214u , 244u , 0u } ,
{ 195u , 79u , 65u , 0u } ,
{ 83u , 83u , 101u , 0u } ,
{ 197u , 142u , 80u , 0u } ,
{ 222u , 204u , 196u , 0u } ,
{ 189u , 168u , 114u , 0u } ,
{ 203u , 180u , 121u , 0u } ,
{ 132u , 145u , 103u , 0u } ,
{ 168u , 143u , 122u , 0u } ,
{ 107u , 107u , 107u , 0u } ,
{ 192u , 110u , 110u , 0u } ,
{ 130u , 130u , 130u , 0u } ,
{ 101u , 129u , 145u , 0u } ,
{ 130u , 130u , 130u , 0u } ,
{ 181u , 88u , 88u , 0u } ,
{ 130u , 105u , 83u , 0u } ,
{ 164u , 164u , 164u , 0u } ,
{ 126u , 143u , 108u , 0u } ,
{ 140u , 163u , 181u , 0u } ,
{ 143u , 129u , 152u , 0u } ,
{ 156u , 138u , 118u , 0u } ,
{ 190u , 190u , 190u , 0u } ,
{ 203u , 112u , 112u , 0u } ,
{ 255u , 242u , 201u , 0u } ,
{ 167u , 145u , 90u , 0u } ,
{ 190u , 190u , 190u , 0u } ,
{ 150u , 164u , 184u , 0u } ,
{ 102u , 102u , 102u , 0u } ,
{ 140u , 114u , 99u , 0u } ,
{ 75u , 63u , 134u , 0u } ,
{ 100u , 100u , 100u , 0u } ,
{ 83u , 82u , 97u , 0u } ,
{ 138u , 179u , 201u , 0u } ,
{ 114u , 159u , 183u , 0u } ,
{ 107u , 61u , 46u , 0u } ,
{ 162u , 120u , 76u , 0u } ,
{ 235u , 227u , 214u , 0u } ,
{ 197u , 138u , 121u , 0u } ,
{ 159u , 169u , 131u , 0u } ,
{ 146u , 178u , 195u , 0u } ,
{ 181u , 151u , 101u , 0u } ,
{ 230u , 191u , 139u , 0u } ,
{ 147u , 147u , 151u , 0u } ,
{ 182u , 127u , 138u , 0u } ,
{ 160u , 165u , 127u , 0u } ,
{ 175u , 203u , 225u , 0u } ,
{ 211u , 175u , 117u , 0u } ,
{ 209u , 167u , 118u , 0u } ,
{ 157u , 147u , 140u , 0u } ,
{ 210u , 191u , 145u , 0u } ,
{ 155u , 185u , 148u , 0u } ,
{ 158u , 210u , 254u , 0u } ,
{ 206u , 176u , 134u , 0u } ,
{ 236u , 173u , 117u , 0u } ,
{ 146u , 146u , 146u , 0u } ,
{ 88u , 103u , 128u , 0u } ,
{ 96u , 96u , 96u , 0u } ,
{ 125u , 92u , 92u , 0u } ,
{ 184u , 174u , 155u , 0u } ,
{ 42u , 42u , 42u , 0u } ,
{ 219u , 37u , 130u , 0u } ,
{ 100u , 100u , 100u , 0u } ,
{ 112u , 110u , 112u , 0u } ,
{ 230u , 212u , 214u , 0u } ,
{ 178u , 181u , 175u , 0u } ,
{ 120u , 120u , 120u , 0u } ,
{ 102u , 101u , 115u , 0u } ,
{ 70u , 83u , 100u , 0u } ,
{ 206u , 108u , 88u , 0u } ,
{ 220u , 136u , 107u , 0u } ,
{ 97u , 97u , 97u , 0u } ,
{ 139u , 116u , 150u , 0u } ,
{ 173u , 173u , 173u , 0u } ,
{ 104u , 133u , 173u , 0u } ,
{ 224u , 196u , 139u , 0u } ,
{ 108u , 146u , 141u , 0u } ,
{ 82u , 82u , 82u , 0u } ,
{ 123u , 123u , 123u , 0u } ,
{ 140u , 67u , 67u , 0u } ,
{ 103u , 92u , 121u , 0u } ,
{ 219u , 192u , 148u , 0u } ,
{ 160u , 185u , 195u , 0u } ,
{ 158u , 173u , 130u , 0u } ,
{ 183u , 183u , 183u , 0u } ,
{ 126u , 98u , 84u , 0u } ,
{ 126u , 125u , 156u , 0u } ,
{ 36u , 74u , 203u , 0u } ,
{ 105u , 105u , 105u , 0u } ,
{ 162u , 179u , 183u , 0u } ,
{ 102u , 130u , 162u , 0u } ,
{ 149u , 88u , 88u , 0u } ,
{ 119u , 145u , 129u , 0u } ,
{ 100u , 100u , 100u , 0u } ,
{ 153u , 149u , 150u , 0u } ,
{ 118u , 110u , 131u , 0u } ,
{ 135u , 110u , 89u , 0u } ,
{ 191u , 102u , 66u , 0u } ,
{ 95u , 90u , 101u , 0u } ,
{ 157u , 171u , 186u , 0u } ,
{ 203u , 184u , 132u , 0u } ,
{ 221u , 100u , 100u , 0u } ,
{ 149u , 149u , 149u , 0u } ,
{ 100u , 118u , 145u , 0u } ,
{ 78u , 78u , 78u , 0u } ,
{ 105u , 128u , 107u , 0u } ,
{ 203u , 94u , 94u , 0u } ,
{ 163u , 178u , 152u , 0u } ,
{ 167u , 119u , 117u , 0u } ,
{ 117u , 139u , 142u , 0u } ,
{ 160u , 160u , 160u , 0u } ,
{ 92u , 92u , 92u , 0u } ,
{ 229u , 144u , 136u , 0u } ,
{ 145u , 167u , 149u , 0u } ,
{ 198u , 173u , 173u , 0u } ,
{ 137u , 163u , 175u , 0u } ,
{ 173u , 173u , 173u , 0u } ,
{ 143u , 143u , 143u , 0u } ,
{ 218u , 198u , 154u , 0u } ,
{ 104u , 134u , 78u , 0u } ,
{ 172u , 116u , 86u , 0u } ,
{ 155u , 170u , 185u , 0u } ,
{ 122u , 142u , 147u , 0u } ,
{ 193u , 193u , 193u , 0u }
} ;
unsigned char grassColour [ 4 ] [ 3 ] = {
{ 0x6E , 0x73 , 0x43 } ,
{ 0x40 , 0x37 , 0x31 } ,
{ 0x5B , 0x68 , 0x38 } ,
{ 0x76 , 0x6C , 0x59 }
} ;
VECTOR dummy = { 0 } ;
2020-04-05 00:53:41 +02:00
int gNight = 0 ;
char gRainCount = 30 ;
int gEffectsTimer = 41 ;
2020-03-27 21:47:29 +01:00
// decompiled code
// original method signature:
// void /*$ra*/ PlacePoolForCar(struct _CAR_DATA *cp /*$s4*/, struct CVECTOR *col /*stack 4*/, int front /*$a2*/)
// line 790, offset 0x00032c10
/* begin block 1 */
// Start line: 791
// Start offset: 0x00032C10
// Variables:
// int car_road_height; // $s2
// struct SVECTOR s[27]; // stack offset -832
// struct SVECTOR *ptr; // $s1
// struct SVECTOR sout[27]; // stack offset -616
// struct VECTOR s1[12]; // stack offset -400
// struct VECTOR *ptr1; // $s0
// struct POLY_FT4 *poly; // $t0
// struct MATRIX final_matrix; // stack offset -208
// struct VECTOR averagepos; // stack offset -176
// int in_car; // $t0
// int z; // stack offset -48
// int sub_level; // $fp
// int count; // $s3
// struct VECTOR mid_position; // stack offset -160
/* begin block 1.1 */
// Start line: 813
// Start offset: 0x00032CEC
// Variables:
// short farz; // $a2
// short nearz; // $a0
/* end block 1.1 */
// End offset: 0x00032EC0
// End Line: 898
/* begin block 1.2 */
// Start line: 904
// Start offset: 0x00032ED0
/* end block 1.2 */
// End offset: 0x00032F38
// End Line: 920
/* begin block 1.3 */
// Start line: 937
// Start offset: 0x00032FB4
// Variables:
// struct VECTOR toss; // stack offset -144
// int temp_y; // $a1
/* end block 1.3 */
// End offset: 0x0003306C
// End Line: 951
/* begin block 1.4 */
// Start line: 954
// Start offset: 0x000330A4
// Variables:
// long n[4]; // stack offset -128
/* end block 1.4 */
// End offset: 0x0003316C
// End Line: 960
/* begin block 1.5 */
// Start line: 967
// Start offset: 0x000331F0
// Variables:
// int count; // $s2
/* begin block 1.5.1 */
// Start line: 996
// Start offset: 0x000333C4
// Variables:
// long z[15]; // stack offset -112
/* begin block 1.5.1.1 */
// Start line: 1006
// Start offset: 0x0003341C
// Variables:
// char *VertIdx; // $s0
/* begin block 1.5.1.1.1 */
// Start line: 1018
// Start offset: 0x0003349C
/* end block 1.5.1.1.1 */
// End offset: 0x0003352C
// End Line: 1023
/* end block 1.5.1.1 */
// End offset: 0x0003352C
// End Line: 1024
/* end block 1.5.1 */
// End offset: 0x0003353C
// End Line: 1025
/* end block 1.5 */
// End offset: 0x0003353C
// End Line: 1027
/* end block 1 */
// End offset: 0x00033544
// End Line: 1029
/* begin block 2 */
// Start line: 1580
/* end block 2 */
// End Line: 1581
/* begin block 3 */
// Start line: 1590
/* end block 3 */
// End Line: 1591
/* WARNING: Could not reconcile some variable overlaps */
2020-04-04 06:49:28 +02:00
void PlacePoolForCar ( _CAR_DATA * cp , CVECTOR * col , int front )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
byte bVar1 ;
bool bVar2 ;
DB * pDVar3 ;
uchar uVar4 ;
undefined4 in_zero ;
undefined4 in_at ;
int iVar5 ;
int iVar6 ;
undefined4 * puVar7 ;
SVECTOR * pSVar8 ;
short sVar9 ;
uint * puVar10 ;
undefined4 uVar11 ;
undefined4 uVar12 ;
undefined4 uVar13 ;
VECTOR * pos ;
undefined4 * puVar14 ;
uint uVar15 ;
int iVar16 ;
int iVar17 ;
int iVar18 ;
undefined4 local_340 ;
undefined4 local_33c ;
undefined4 local_338 ;
undefined4 local_334 ;
undefined4 local_330 ;
undefined4 local_32c ;
undefined4 local_328 ;
undefined4 local_324 ;
SVECTOR local_268 [ 27 ] ;
VECTOR local_190 ;
undefined4 local_180 ;
int local_178 ;
undefined4 local_170 ;
int local_168 ;
undefined4 local_160 ;
int local_158 ;
undefined4 local_150 ;
int local_148 ;
undefined4 local_140 ;
int local_138 ;
undefined4 local_130 ;
int local_128 ;
undefined4 local_120 ;
int local_118 ;
undefined4 local_110 ;
int local_108 ;
undefined4 local_100 ;
int local_f8 ;
undefined4 local_f0 ;
int local_e8 ;
undefined4 local_e0 ;
int local_d8 ;
int local_b0 ;
int local_a8 ;
VECTOR local_a0 ;
uint local_90 ;
int local_8c ;
int local_88 ;
int local_80 ;
int local_7c ;
int local_78 ;
int local_30 ;
bVar2 = false ;
pos = & local_190 ;
puVar7 = & local_340 ;
if ( cp < = ( _CAR_DATA * ) ( ( int ) & cheats . MagicMirror + 3U ) ) {
while ( FrameCnt ! = 0x78654321 ) {
trap ( 0x400 ) ;
}
}
if ( ( cameraview = = 2 ) & & ( ( int ) ( cp [ - 0x503 ] . ap . old_clock + 2 ) * - 0x24ca58e9 > > 2 = = CameraCar ) ) {
bVar2 = true ;
}
if ( front = = 0 ) {
iVar17 = 0 ;
local_190 . vx = - 0xcc ;
local_180 = 0xcc ;
local_170 = 0xffffff34 ;
local_160 = 0xcc ;
local_158 = ( int ) ( ( ( uint ) ( ushort ) car_cosmetics [ ( byte ) ( cp - > ap ) . model ] . colBox . vz - 10 ) * 0x10000 )
> > 0x10 ;
local_178 = ( local_158 + 0xcc ) * 0x10000 > > 0x10 ;
}
else {
local_158 = ( int ) ( short ) - ( car_cosmetics [ ( byte ) ( cp - > ap ) . model ] . colBox . vz + 0x32 ) ;
local_108 = ( local_158 + - 0x488 ) * 0x10000 > > 0x10 ;
local_128 = local_158 ;
local_118 = local_158 ;
if ( bVar2 ) {
local_178 = local_108 + 600 ;
local_190 . vx = 0x88 ;
local_180 = 0xfffffea8 ;
local_170 = 0xffffffeb ;
local_160 = 0xffffff71 ;
local_150 = 0x158 ;
local_140 = 0xffffff78 ;
local_130 = 0x8f ;
local_120 = 0x15 ;
local_108 = local_108 + - 400 ;
local_f8 = local_158 + 10 ;
local_110 = 0xffffffae ;
local_f0 = 0x52 ;
local_100 = 0xffffffae ;
local_e0 = 0x52 ;
LightSortCorrect = - 800 ;
iVar17 = 3 ;
local_148 = local_178 ;
local_138 = local_178 ;
local_e8 = local_108 ;
local_d8 = local_f8 ;
}
else {
local_178 = local_108 + 100 ;
local_190 . vx = 0x88 ;
local_180 = 0xfffffea8 ;
local_170 = 0xffffffeb ;
local_160 = 0xffffff71 ;
local_150 = 0x158 ;
local_140 = 0xffffff78 ;
local_130 = 0x8f ;
local_120 = 0x15 ;
local_f0 = 0x52 ;
local_e0 = 0x52 ;
local_110 = 0xffffffae ;
local_100 = 0xffffffae ;
iVar17 = 3 ;
local_148 = local_178 ;
local_138 = local_178 ;
local_f8 = local_158 ;
local_e8 = local_108 ;
local_d8 = local_158 ;
if ( ( player . cameraView = = ' \x02 ' ) & & ( cp = = car_data + player . playerCarId ) ) {
LightSortCorrect = - 0x140 ;
}
else {
LightSortCorrect = - 200 ;
}
}
}
local_190 . vz = local_178 ;
local_168 = local_158 ;
SetRotMatrix ( & ( cp - > hd ) . drawCarMat ) ;
local_b0 = 0 ;
local_a8 = 0 ;
local_a0 . vx = 0 ;
local_a0 . vy = 0 ;
local_a0 . vz = - 500 ;
_MatrixRotate ( & local_a0 ) ;
local_a0 . vx = local_a0 . vx + ( cp - > hd ) . where . t [ 0 ] ;
local_a0 . vy = local_a0 . vy + ( cp - > hd ) . where . t [ 1 ] ;
local_a0 . vz = local_a0 . vz + ( cp - > hd ) . where . t [ 2 ] ;
iVar5 = MapHeight ( & local_a0 ) ;
puVar14 = puVar7 ;
iVar16 = 0 ;
while ( true ) {
bVar2 = iVar16 < 4 ;
if ( iVar17 = = 3 ) {
bVar2 = iVar16 < 0xc ;
}
if ( ! bVar2 ) break ;
pos - > vy = 0 ;
_MatrixRotate ( pos ) ;
local_90 = pos - > vx + ( cp - > hd ) . where . t [ 0 ] ;
local_8c = pos - > vy + ( cp - > hd ) . where . t [ 1 ] ;
iVar18 = ( local_90 & 0xffff ) - ( uint ) ( ushort ) camera_position . vx ;
local_88 = pos - > vz + ( cp - > hd ) . where . t [ 2 ] ;
* ( short * ) puVar14 = ( short ) iVar18 ;
* ( short * ) ( puVar14 + 1 ) = ( short ) local_88 - ( short ) camera_position . vz ;
local_b0 = local_b0 + ( iVar18 * 0x10000 > > 0x10 ) ;
local_a8 = local_a8 + * ( short * ) ( puVar14 + 1 ) ;
iVar18 = MapHeight ( ( VECTOR * ) & local_90 ) ;
sVar9 = ( short ) - iVar18 ;
iVar6 = - iVar18 + iVar5 ;
if ( iVar6 < 0 ) {
iVar6 = - iVar5 + iVar18 ;
}
if ( 500 < iVar6 ) {
sVar9 = ( short ) - iVar5 ;
}
pos = pos + 1 ;
puVar14 = puVar14 + 2 ;
* ( short * ) ( ( int ) & local_340 + iVar16 * 8 + 2 ) = sVar9 - ( short ) camera_position . vy ;
iVar16 = iVar16 + 1 ;
}
local_80 = ( ( int ) local_340 . _2_2_ * ( int ) ( short ) local_334 -
( int ) ( short ) local_33c * ( int ) local_338 . _2_2_ ) + 0x800 > > 0xc ;
local_7c = ( ( int ) ( short ) local_33c * ( int ) ( short ) local_338 -
( int ) ( short ) local_340 * ( int ) ( short ) local_334 ) + 0x800 > > 0xc ;
local_78 = ( ( int ) ( short ) local_340 * ( int ) local_338 . _2_2_ -
( int ) local_340 . _2_2_ * ( int ) ( short ) local_338 ) + 0x800 > > 0xc ;
iVar18 = local_78 * ( short ) local_32c ;
iVar5 = local_80 * ( short ) local_330 + local_7c * local_330 . _2_2_ + iVar18 ;
if ( - 1 < iVar5 ) {
if ( iVar16 = = 0 ) {
trap ( 7 ) ;
trap ( 7 ) ;
}
setCopControlWord ( 2 , 0 , inv_camera_matrix . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , inv_camera_matrix . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , inv_camera_matrix . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , inv_camera_matrix . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , inv_camera_matrix . _16_4_ ) ;
setCopControlWord ( 2 , 0x2800 , dummy . vx ) ;
setCopControlWord ( 2 , 0x3000 , dummy . vy ) ;
setCopControlWord ( 2 , 0x3800 , dummy . vz ) ;
if ( iVar17 = = 0 ) {
setCopReg ( 2 , in_zero , local_340 ) ;
setCopReg ( 2 , in_at , local_33c ) ;
setCopReg ( 2 , 0xacad0 , local_338 ) ;
setCopReg ( 2 , 0xa187c , local_334 ) ;
setCopReg ( 2 , iVar5 , local_330 ) ;
setCopReg ( 2 , iVar18 , local_32c ) ;
copFunction ( 2 , 0x280030 ) ;
puVar10 = ( uint * ) current - > primptr ;
* ( uchar * ) ( puVar10 + 3 ) = light_pool_texture . coords . u0 ;
* ( uchar * ) ( ( int ) puVar10 + 0xd ) = light_pool_texture . coords . v0 ;
* ( uchar * ) ( puVar10 + 5 ) = light_pool_texture . coords . u1 ;
* ( uchar * ) ( ( int ) puVar10 + 0x15 ) = light_pool_texture . coords . v1 ;
* ( uchar * ) ( puVar10 + 7 ) = light_pool_texture . coords . u2 ;
* ( uchar * ) ( ( int ) puVar10 + 0x1d ) = light_pool_texture . coords . v2 ;
* ( uchar * ) ( puVar10 + 9 ) = light_pool_texture . coords . u3 ;
uVar4 = light_pool_texture . coords . v3 ;
* ( char * ) ( ( int ) puVar10 + 3 ) = ' \t ' ;
* ( char * ) ( ( int ) puVar10 + 7 ) = ' . ' ;
* ( uchar * ) ( ( int ) puVar10 + 0x25 ) = uVar4 ;
* ( uchar * ) ( puVar10 + 1 ) = col - > r > > 1 ;
* ( byte * ) ( ( int ) puVar10 + 5 ) = col - > b > > 1 ;
* ( byte * ) ( ( int ) puVar10 + 6 ) = col - > g > > 1 ;
uVar15 = getCopReg ( 2 , 0xc ) ;
puVar10 [ 2 ] = uVar15 ;
uVar15 = getCopReg ( 2 , 0xd ) ;
puVar10 [ 4 ] = uVar15 ;
uVar15 = getCopReg ( 2 , 0xe ) ;
puVar10 [ 6 ] = uVar15 ;
pDVar3 = current ;
local_30 = getCopReg ( 2 , 0x13 ) ;
if ( 0x28 < local_30 ) {
local_30 = local_30 + - 0x28 ;
}
if ( 0x31 < local_30 ) {
setCopReg ( 2 , in_zero , local_328 ) ;
setCopReg ( 2 , in_at , local_324 ) ;
copFunction ( 2 , 0x180001 ) ;
* ( ushort * ) ( ( int ) puVar10 + 0x16 ) = light_pool_texture . tpageid | 0x20 ;
* ( ushort * ) ( ( int ) puVar10 + 0xe ) = light_pool_texture . clutid ;
* puVar10 = * puVar10 & 0xff000000 | pDVar3 - > ot [ local_30 > > 3 ] & 0xffffff ;
pDVar3 - > ot [ local_30 > > 3 ] =
pDVar3 - > ot [ local_30 > > 3 ] & 0xff000000 | ( uint ) puVar10 & 0xffffff ;
pDVar3 - > primptr = pDVar3 - > primptr + 0x28 ;
uVar15 = getCopReg ( 2 , 0xe ) ;
puVar10 [ 8 ] = uVar15 ;
}
}
else {
if ( iVar17 = = 3 ) {
iVar17 = 0xb ;
pSVar8 = local_268 ;
do {
setCopReg ( 2 , in_zero , * puVar7 ) ;
setCopReg ( 2 , in_at , puVar7 [ 1 ] ) ;
copFunction ( 2 , 0x480012 ) ;
uVar11 = getCopReg ( 2 , 0x4800 ) ;
uVar12 = getCopReg ( 2 , 0x5000 ) ;
uVar13 = getCopReg ( 2 , 0x5800 ) ;
pSVar8 - > vx = ( short ) uVar11 ;
pSVar8 - > vy = ( short ) uVar12 ;
pSVar8 - > vz = ( short ) uVar13 ;
pSVar8 = pSVar8 + 1 ;
iVar17 = iVar17 + - 1 ;
puVar7 = puVar7 + 2 ;
} while ( - 1 < iVar17 ) ;
uVar15 = 0 ;
do {
iVar17 = uVar15 * 4 ;
spolys = ( POLY_F3 * ) current - > primptr ;
SetRotMatrix ( & tempmatrix ) ;
setCopControlWord ( 2 , 0x2800 , dummy . vx ) ;
setCopControlWord ( 2 , 0x3000 , dummy . vy ) ;
setCopControlWord ( 2 , 0x3800 , dummy . vz ) ;
bVar1 = RightLight ;
if ( ( uVar15 & 2 ) ! = 0 ) {
bVar1 = LeftLight ;
}
sVar9 = ( ushort ) bVar1 * 4 + ( ushort ) bVar1 ;
light_col = sVar9 * 0x10 ;
if ( sVar9 ! = 0 ) {
if ( ( uVar15 & 1 ) = = 0 ) {
sQuad ( local_268 + ( byte ) ( & CHAR_08h_0009c00d ) [ iVar17 ] ,
local_268 + ( byte ) s__0009c00f [ iVar17 ] ,
local_268 + ( byte ) ( & CHAR_02h_0009c00e ) [ iVar17 ] ,
local_268 + ( byte ) ( & PoolPrimData ) [ iVar17 ] ) ;
}
else {
sQuad ( local_268 + ( byte ) ( & PoolPrimData ) [ iVar17 ] ,
local_268 + ( byte ) ( & CHAR_02h_0009c00e ) [ iVar17 ] ,
local_268 + ( byte ) s__0009c00f [ iVar17 ] ,
local_268 + ( byte ) ( & CHAR_08h_0009c00d ) [ iVar17 ] ) ;
}
* ( POLY_F3 * * ) & current - > primptr = spolys ;
}
uVar15 = uVar15 + 1 ;
} while ( ( int ) uVar15 < 4 ) ;
}
}
LightSortCorrect = - 10 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ AllocateLeaf()
// line 1297, offset 0x00039a90
/* begin block 1 */
// Start line: 8721
/* end block 1 */
// End Line: 8722
/* begin block 2 */
// Start line: 2594
/* end block 2 */
// End Line: 2595
/* begin block 3 */
// Start line: 8722
/* end block 3 */
// End Line: 8723
/* WARNING: Unknown calling convention yet parameter storage is locked */
int AllocateLeaf ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
short * psVar1 ;
if ( 0x31 < next_leaf ) {
return - 1 ;
}
psVar1 = leaf_alloc + next_leaf ;
next_leaf = next_leaf + 1 ;
return ( int ) * psVar1 ;
*/
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ReleaseLeaf(short num /*$a0*/)
// line 1313, offset 0x00039d8c
/* begin block 1 */
// Start line: 2626
/* end block 1 */
// End Line: 2627
/* begin block 2 */
// Start line: 12096
/* end block 2 */
// End Line: 12097
void ReleaseLeaf ( short num )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
next_leaf = next_leaf + - 1 ;
leaf_alloc [ next_leaf ] = num ;
return ;
*/
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ AddLeaf(struct VECTOR *Position /*$s1*/, int num_leaves /*$s5*/, int Type /*$s3*/)
// line 1327, offset 0x00033574
/* begin block 1 */
// Start line: 1328
// Start offset: 0x00033574
// Variables:
// struct LEAF *myleaf; // $a1
// int num; // $v1
// int loop; // $s2
// int temprand; // $s0
/* begin block 1.1 */
// Start line: 1343
// Start offset: 0x000335D8
/* begin block 1.1.1 */
// Start line: 1401
// Start offset: 0x000336E4
/* end block 1.1.1 */
// End offset: 0x000336F8
// End Line: 1406
/* begin block 1.1.2 */
// Start line: 1410
// Start offset: 0x0003370C
// Variables:
// int temp; // $v0
/* end block 1.1.2 */
// End offset: 0x0003370C
// End Line: 1410
/* begin block 1.1.3 */
// Start line: 1416
// Start offset: 0x00033738
// Variables:
// int temp; // $v0
/* end block 1.1.3 */
// End offset: 0x0003374C
// End Line: 1419
/* end block 1.1 */
// End offset: 0x0003374C
// End Line: 1420
/* end block 1 */
// End offset: 0x00033784
// End Line: 1428
/* begin block 2 */
// Start line: 2983
/* end block 2 */
// End Line: 2984
/* begin block 3 */
// Start line: 2989
/* end block 3 */
// End Line: 2990
2020-04-04 06:49:28 +02:00
void AddLeaf ( VECTOR * Position , int num_leaves , int Type )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
byte bVar1 ;
byte bVar2 ;
int iVar3 ;
uint uVar4 ;
int iVar5 ;
uint uVar6 ;
uint uVar7 ;
long lVar8 ;
int iVar9 ;
if ( gDoLeaves ! = 0 ) {
iVar9 = 0 ;
Position - > vy = - Position - > vy ;
iVar3 = MapHeight ( Position ) ;
Position - > pad = iVar3 ;
if ( 0 < num_leaves ) {
do {
uVar4 = rand ( ) ;
iVar3 = AllocateLeaf ( ) ;
if ( iVar3 < 0 ) {
return ;
}
leaf [ iVar3 ] . position . vx = Position - > vx + ( uVar4 & 0xfe ) ;
leaf [ iVar3 ] . position . vz = Position - > vz + ( ( int ) uVar4 > > 8 & 0xfeU ) ;
if ( Type = = 1 ) {
iVar5 = Position - > vy ;
}
else {
iVar5 = Position - > pad ;
}
leaf [ iVar3 ] . position . vy = - iVar5 ;
lVar8 = Position - > pad ;
leaf [ iVar3 ] . life = 600 ;
leaf [ iVar3 ] . flags = 2 ;
bVar1 = ( byte ) uVar4 ;
leaf [ iVar3 ] . direction . vx = 0 ;
leaf [ iVar3 ] . direction . vy = 0 ;
leaf [ iVar3 ] . direction . vz = 0 ;
leaf [ iVar3 ] . pos = ( ushort ) ( ( int ) uVar4 > > 7 ) & 0xff ;
leaf [ iVar3 ] . step = ( bVar1 & 7 ) + 1 ;
leaf [ iVar3 ] . position . pad = lVar8 ;
if ( Type = = 1 ) {
if ( ( uVar4 & 3 ) = = 0 ) {
leaf [ iVar3 ] . rgb . r = ' n ' ;
bVar2 = 0xf ;
leaf [ iVar3 ] . rgb . g = ' p ' ;
goto LAB_000336f4 ;
}
if ( ( uVar4 & 3 ) ! = 1 ) {
leaf [ iVar3 ] . rgb . r = ' < ' ;
bVar2 = 0x1e ;
leaf [ iVar3 ] . rgb . g = ' 2 ' ;
goto LAB_000336f4 ;
}
leaf [ iVar3 ] . rgb . r = ' \x14 ' ;
leaf [ iVar3 ] . rgb . g = ' , ' ;
leaf [ iVar3 ] . rgb . b = ' \0 ' ;
}
else {
bVar2 = bVar1 & 0x1f ;
leaf [ iVar3 ] . rgb . r = bVar2 ;
leaf [ iVar3 ] . rgb . g = bVar2 ;
LAB_000336f4 :
leaf [ iVar3 ] . rgb . b = bVar2 ;
}
if ( gTimeOfDay = = 3 ) {
uVar7 = 0x3f3f3f3f ;
uVar6 = ( int ) leaf [ iVar3 ] . rgb > > 2 ;
LAB_00033744 :
* ( uint * ) & leaf [ iVar3 ] . rgb = uVar6 & uVar7 ;
}
else {
if ( gWeather - 1U < 2 ) {
uVar7 = 0x7f7f7f7f ;
uVar6 = ( int ) leaf [ iVar3 ] . rgb > > 1 ;
goto LAB_00033744 ;
}
}
iVar9 = iVar9 + 1 ;
leaf [ iVar3 ] . sin_index1 = ( ushort ) uVar4 & 0xfff ;
leaf [ iVar3 ] . sin_index2 = ( ushort ) ( ( int ) uVar4 > > 4 ) & 0xfff ;
leaf [ iVar3 ] . sin_addition2 = - ( ( byte ) ( uVar4 > > 8 ) & 7 ) ;
leaf [ iVar3 ] . sin_addition1 = - ( bVar1 & 3 ) ;
leaf [ iVar3 ] . type = ( char ) Type ;
} while ( iVar9 < num_leaves ) ;
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ SwirlLeaves(struct _CAR_DATA *cp /*$a0*/)
// line 1437, offset 0x00039e54
/* begin block 1 */
// Start line: 1438
// Start offset: 0x00039E54
// Variables:
// int count; // $s2
// struct LEAF *lpLeaf; // $s0
// int XDiff; // $v0
// int ZDiff; // $a1
// struct VECTOR *CarPos; // $s1
// int WheelSpeed; // $a1
/* begin block 1.1 */
// Start line: 1475
// Start offset: 0x00039F60
/* end block 1.1 */
// End offset: 0x00039F84
// End Line: 1477
/* end block 1 */
// End offset: 0x00039F90
// End Line: 1481
/* begin block 2 */
// Start line: 17528
/* end block 2 */
// End Line: 17529
/* begin block 3 */
// Start line: 2874
/* end block 3 */
// End Line: 2875
/* begin block 4 */
// Start line: 17533
/* end block 4 */
// End Line: 17534
void SwirlLeaves ( _CAR_DATA * cp )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
int iVar2 ;
LEAF * pLVar3 ;
int iVar4 ;
if ( cp < car_data ) {
while ( FrameCnt ! = 0x78654321 ) {
trap ( 0x400 ) ;
}
}
if ( ( ( 0x1d4be < ( cp - > hd ) . wheel_speed + 39999U ) & & ( gDoLeaves ! = 0 ) ) & &
( pLVar3 = leaf , pauseflag = = 0 ) ) {
iVar4 = 0x31 ;
do {
if ( ( ( ( pLVar3 - > flags & 2 ) ! = 0 ) & & ( - 0xb4 < ( pLVar3 - > position ) . vy + ( cp - > hd ) . where . t [ 1 ] ) ) & &
( ( iVar2 = ( cp - > hd ) . where . t [ 2 ] - ( pLVar3 - > position ) . vz ,
( ( cp - > hd ) . where . t [ 0 ] - ( pLVar3 - > position ) . vx ) + 0x167U < 0x2cf & &
( ( iVar2 < 0x168 & & ( - 0x168 < iVar2 ) ) ) ) ) ) {
iVar2 = rand ( ) ;
iVar1 = ( pLVar3 - > position ) . vy ;
( pLVar3 - > direction ) . vy = - 0x19 - ( ( ushort ) iVar2 & 0x1f ) ;
( pLVar3 - > position ) . vy = iVar1 + - 1 ;
}
iVar4 = iVar4 + - 1 ;
pLVar3 = pLVar3 + 1 ;
} while ( - 1 < iVar4 ) ;
}
return ;
*/
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ InitDebrisNames()
// line 1493, offset 0x000337ac
/* begin block 1 */
// Start line: 1495
// Start offset: 0x000337AC
/* end block 1 */
// End offset: 0x00033B9C
// End Line: 1555
/* begin block 2 */
// Start line: 3607
/* end block 2 */
// End Line: 3608
/* begin block 3 */
// Start line: 3608
/* end block 3 */
// End Line: 3609
/* WARNING: Unknown calling convention yet parameter storage is locked */
2020-04-19 12:11:33 +02:00
TEXTURE_DETAILS smoke_texture ;
TEXTURE_DETAILS debris_texture ;
TEXTURE_DETAILS litter_texture ;
TEXTURE_DETAILS cop_texture ;
TEXTURE_DETAILS light_texture ;
TEXTURE_DETAILS gTyreTexture ;
TEXTURE_DETAILS flare_texture ;
TEXTURE_DETAILS sea_texture ;
TEXTURE_DETAILS bird_texture1 ;
TEXTURE_DETAILS bird_texture2 ;
TEXTURE_DETAILS lensflare_texture ;
TEXTURE_DETAILS sun_texture ;
TEXTURE_DETAILS moon_texture ;
TEXTURE_DETAILS drop_texture ;
TEXTURE_DETAILS collon_texture ;
2020-04-19 12:52:40 +02:00
2020-04-19 12:11:33 +02:00
TEXTURE_DETAILS texturePedHead ;
TEXTURE_DETAILS tannerShadow_texture ;
2020-04-19 12:52:40 +02:00
2020-04-19 12:11:33 +02:00
TEXTURE_DETAILS lightref_texture ;
TEXTURE_DETAILS light_pool_texture ;
// [D]
2020-03-27 21:47:29 +01:00
void InitDebrisNames ( void )
{
2020-04-19 12:11:33 +02:00
GetTextureDetails ( " SMOKE " , & smoke_texture ) ;
GetTextureDetails ( " DEBRIS " , & debris_texture ) ;
GetTextureDetails ( " LITTER " , & litter_texture ) ;
GetTextureDetails ( " COPLIGHT " , & cop_texture ) ;
GetTextureDetails ( " LIGHT " , & light_texture ) ;
GetTextureDetails ( " SKID " , & gTyreTexture ) ;
GetTextureDetails ( " FLARE " , & flare_texture ) ;
GetTextureDetails ( " SPLASH " , & sea_texture ) ;
GetTextureDetails ( " SWBIRD1 " , & bird_texture1 ) ;
GetTextureDetails ( " SWBIRD2 " , & bird_texture2 ) ;
GetTextureDetails ( " LENSFLR " , & lensflare_texture ) ;
GetTextureDetails ( " SKYSUN " , & sun_texture ) ;
GetTextureDetails ( " SKYMOON " , & moon_texture ) ;
GetTextureDetails ( " DROP " , & drop_texture ) ;
GetTextureDetails ( " DIGIT " , & digit_texture ) ;
SetCLUT16Flags ( digit_texture . clutid , 6 , 0 ) ;
GetTextureDetails ( " COLLON " , & collon_texture ) ;
GetTextureDetails ( " JEANS1 " , & jeans_texture ) ;
GetTextureDetails ( " ARM1 " , & arm1_texture ) ;
GetTextureDetails ( " FOREARM1 " , & forearm1_texture ) ;
GetTextureDetails ( " CHEST1 " , & chest1_texture ) ;
GetTextureDetails ( " LOWHEAD " , & head1_texture ) ;
GetTextureDetails ( " ADDCAM " , & addcam ) ;
GetTextureDetails ( " FRAMEADV " , & frameadv ) ;
GetTextureDetails ( " AUTO " , & autocam ) ;
GetTextureDetails ( " CHASEC " , & chasecar ) ;
GetTextureDetails ( " CHOOSECA " , & choosecar ) ;
GetTextureDetails ( " CLOCK " , & clock ) ;
GetTextureDetails ( " DELCAM " , & delcam ) ;
GetTextureDetails ( " EDITCAM " , & editcam ) ;
GetTextureDetails ( " FIXEDCA " , & fixedcam ) ;
GetTextureDetails ( " INCAR " , & incar ) ;
GetTextureDetails ( " LENSCHA " , & lenschan ) ;
GetTextureDetails ( " LOOKCAR " , & lookcar ) ;
GetTextureDetails ( " MOVECMP " , & movecam ) ;
GetTextureDetails ( " MOVECAM " , & movecampos ) ;
GetTextureDetails ( " OK " , & ok ) ;
GetTextureDetails ( " PAUSE " , & pause ) ;
GetTextureDetails ( " PLAYCAM " , & playcam ) ;
GetTextureDetails ( " PLAYPAU " , & playpause ) ;
GetTextureDetails ( " SAVE2CA " , & save2card ) ;
GetTextureDetails ( " RESTREP " , & restart ) ;
GetTextureDetails ( " HEAD1 " , & texturePedHead ) ;
GetTextureDetails ( " TSHADOW " , & tannerShadow_texture ) ;
2020-04-04 06:49:28 +02:00
texture_is_icon = 0 ;
head1_texture . coords . u1 = head1_texture . coords . u0 + ' \b ' ;
head1_texture . coords . u3 = head1_texture . coords . u1 ;
2020-04-19 12:11:33 +02:00
GetTextureDetails ( " LIGHTREF " , & lightref_texture ) ;
GetTextureDetails ( " LIGHT " , & light_pool_texture ) ;
2020-04-04 06:49:28 +02:00
InitButtonTextures ( ) ;
InitTannerShadow ( ) ;
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ InitDebris()
// line 1564, offset 0x00033b9c
/* begin block 1 */
// Start line: 1566
// Start offset: 0x00033B9C
// Variables:
// int loop; // $v1
// int count; // $s0
// struct TPAN texnum; // stack offset -88
// struct TRI_POINT_LONG temptri; // stack offset -80
// struct BVECTOR *debrisPTR; // $a0
/* begin block 1.1 */
// Start line: 1601
// Start offset: 0x00033CF4
/* begin block 1.1.1 */
// Start line: 1605
// Start offset: 0x00033D10
/* end block 1.1.1 */
// End offset: 0x00033D80
// End Line: 1610
/* end block 1.1 */
// End offset: 0x00033E2C
// End Line: 1627
/* end block 1 */
// End offset: 0x00033FA8
// End Line: 1674
/* begin block 2 */
// Start line: 3743
/* end block 2 */
// End Line: 3744
/* begin block 3 */
// Start line: 3753
/* end block 3 */
// End Line: 3754
/* begin block 4 */
// Start line: 3754
/* end block 4 */
// End Line: 3755
/* begin block 5 */
// Start line: 3759
/* end block 5 */
// End Line: 3760
/* WARNING: Unknown calling convention yet parameter storage is locked */
void InitDebris ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
char * pcVar1 ;
long * plVar2 ;
DAMAGED_LAMP * pDVar3 ;
long * plVar4 ;
undefined * puVar5 ;
VECTOR * pVVar6 ;
long lVar7 ;
long lVar8 ;
long lVar9 ;
int iVar10 ;
int iVar11 ;
long local_50 ;
undefined local_4c ;
undefined local_48 ;
long local_44 ;
undefined local_40 ;
undefined local_3c ;
undefined local_38 [ 4 ] ;
undefined local_34 ;
undefined local_30 ;
iVar10 = 0x13 ;
pcVar1 = & Known_Lamps [ 0x13 ] . set ;
texture_is_icon = 0 ;
do {
* pcVar1 = ' \0 ' ;
iVar10 = iVar10 + - 1 ;
pcVar1 = pcVar1 + - 0x18 ;
} while ( - 1 < iVar10 ) ;
StreakCount1 = 0 ;
main_cop_light_pos = rand ( ) ;
next_debris = 0 ;
main_cop_light_pos = main_cop_light_pos % 7 ;
do {
iVar10 = next_debris + 1 ;
( & debris_alloc ) [ next_debris ] = ( ushort ) next_debris ;
debris [ next_debris ] . pos = 0 ;
debris [ next_debris ] . num = ( ushort ) next_debris ;
next_debris = iVar10 ;
} while ( iVar10 < 0x3c ) ;
next_debris = 0 ;
do {
iVar10 = next_debris + 1 ;
ground_debris [ next_debris ] . type = 0xffff ;
next_debris = iVar10 ;
} while ( iVar10 < 0x10 ) ;
groundDebrisIndex = 0 ;
debris_rotvec . vz = 0 ;
debris_rotvec . vy = 0 ;
debris_rotvec . vx = 0 ;
leaf_rotvec . vz = 0 ;
leaf_rotvec . vy = 0 ;
leaf_rotvec . vx = 0 ;
next_debris = 0 ;
do {
RotMatrixXYZ ( & debris_mat , & debris_rotvec ) ;
RotMatrixXYZ ( & leaf_mat , & leaf_rotvec ) ;
iVar10 = 0 ;
do {
if ( iVar10 = = 1 ) {
SetRotMatrix ( & leaf_mat ) ;
}
else {
SetRotMatrix ( & debris_mat ) ;
}
plVar2 = ( long * ) debris_data5 [ iVar10 ] ;
iVar11 = iVar10 + 1 ;
plVar4 = plVar2 + 8 ;
pVVar6 = ( VECTOR * ) & local_50 ;
do {
lVar7 = plVar2 [ 1 ] ;
lVar8 = plVar2 [ 2 ] ;
lVar9 = plVar2 [ 3 ] ;
pVVar6 - > vx = * plVar2 ;
pVVar6 - > vy = lVar7 ;
pVVar6 - > vz = lVar8 ;
pVVar6 - > pad = lVar9 ;
plVar2 = plVar2 + 4 ;
pVVar6 = pVVar6 + 1 ;
} while ( plVar2 ! = plVar4 ) ;
pVVar6 - > vx = * plVar2 ;
_MatrixRotate ( ( VECTOR * ) & local_50 ) ;
_MatrixRotate ( ( VECTOR * ) & local_44 ) ;
_MatrixRotate ( ( VECTOR * ) local_38 ) ;
puVar5 = debris_rot_table5 [ iVar10 ] + next_debris * 0xc ;
* puVar5 = ( undefined ) local_50 ;
puVar5 [ 1 ] = local_4c ;
puVar5 [ 2 ] = local_48 ;
puVar5 [ 4 ] = ( undefined ) local_44 ;
puVar5 [ 5 ] = local_40 ;
puVar5 [ 6 ] = local_3c ;
puVar5 [ 8 ] = local_38 [ 0 ] ;
puVar5 [ 9 ] = local_34 ;
puVar5 [ 10 ] = local_30 ;
iVar10 = iVar11 ;
} while ( iVar11 < 5 ) ;
debris_rotvec . vx = debris_rotvec . vx + 0x80 ;
debris_rotvec . vy = debris_rotvec . vy + 0x100 ;
debris_rotvec . vz = debris_rotvec . vz + 0x80 ;
leaf_rotvec . vy = leaf_rotvec . vy + 0x80 ;
next_debris = next_debris + 1 ;
} while ( next_debris < 0x20 ) ;
next_debris = 0 ;
next_smoke = 0 ;
do {
smoke_alloc [ next_smoke ] = ( short ) next_smoke ;
iVar10 = next_smoke + 1 ;
smoke [ next_smoke ] . pos = ' \0 ' ;
smoke [ next_smoke ] . flags = 0 ;
smoke [ next_smoke ] . num = ( uchar ) next_smoke ;
next_smoke = iVar10 ;
} while ( iVar10 < 0x50 ) ;
next_smoke = 0 ;
smoke_table = ( SMOKE * ) 0x0 ;
next_leaf = 0 ;
do {
iVar11 = next_leaf + 1 ;
leaf_alloc [ next_leaf ] = ( ushort ) next_leaf ;
leaf [ next_leaf ] . pos = 0 ;
leaf [ next_leaf ] . num = ( ushort ) next_leaf ;
iVar10 = 3 ;
next_leaf = iVar11 ;
} while ( iVar11 < 0x32 ) ;
pDVar3 = DAMAGED_LAMP_ARRAY_000c1b50 ;
next_leaf = 0 ;
NextDamagedLamp = 0 ;
do {
pDVar3 - > cop = ( CELL_OBJECT * ) 0x0 ;
iVar10 = iVar10 + - 1 ;
pDVar3 = pDVar3 + - 1 ;
} while ( - 1 < iVar10 ) ;
iVar10 = 7 ;
pcVar1 = & damaged_object [ 7 ] . active ;
do {
* pcVar1 = ' \0 ' ;
iVar10 = iVar10 + - 1 ;
pcVar1 = pcVar1 + - 0x24 ;
} while ( - 1 < iVar10 ) ;
LightSortCorrect = - 10 ;
SmashablesHit = 0 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ AllocateDebris()
// line 1686, offset 0x00039a54
/* begin block 1 */
// Start line: 9103
/* end block 1 */
// End Line: 9104
/* begin block 2 */
// Start line: 3372
/* end block 2 */
// End Line: 3373
/* begin block 3 */
// Start line: 9104
/* end block 3 */
// End Line: 9105
/* WARNING: Unknown calling convention yet parameter storage is locked */
int AllocateDebris ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
short * psVar1 ;
if ( 0x3b < next_debris ) {
return - 1 ;
}
psVar1 = & debris_alloc + next_debris ;
next_debris = next_debris + 1 ;
return ( int ) * psVar1 ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ReleaseDebris(short num /*$a0*/)
// line 1704, offset 0x00039d68
/* begin block 1 */
// Start line: 12485
/* end block 1 */
// End Line: 12486
/* begin block 2 */
// Start line: 3408
/* end block 2 */
// End Line: 3409
/* begin block 3 */
// Start line: 12486
/* end block 3 */
// End Line: 12487
void ReleaseDebris ( short num )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
next_debris = next_debris + - 1 ;
( & debris_alloc ) [ next_debris ] = num ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ AllocateSmoke()
// line 1719, offset 0x00039acc
/* begin block 1 */
// Start line: 9149
/* end block 1 */
// End Line: 9150
/* begin block 2 */
// Start line: 9567
/* end block 2 */
// End Line: 9568
/* begin block 3 */
// Start line: 9569
/* end block 3 */
// End Line: 9570
/* WARNING: Unknown calling convention yet parameter storage is locked */
int AllocateSmoke ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
short * psVar1 ;
if ( 0x4f < next_smoke ) {
return - 1 ;
}
psVar1 = smoke_alloc + next_smoke ;
next_smoke = next_smoke + 1 ;
return ( int ) * psVar1 ;
*/
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ReleaseSmoke(short num /*$a0*/)
// line 1737, offset 0x00039dd4
/* begin block 1 */
// Start line: 3474
/* end block 1 */
// End Line: 3475
/* begin block 2 */
// Start line: 15398
/* end block 2 */
// End Line: 15399
void ReleaseSmoke ( short num )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
next_smoke = next_smoke + - 1 ;
smoke_alloc [ next_smoke ] = num ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ AddGroundDebris()
// line 1753, offset 0x00033fa8
/* begin block 1 */
// Start line: 1755
// Start offset: 0x00033FA8
// Variables:
// struct VECTOR Position; // stack offset -48
// int seed; // $s0
// int number; // $v0
// int count; // $s3
// int xbound; // $a1
// int zbound; // $a0
// int type; // $a2
// struct CELL_OBJECT *cop; // $s1
// struct MODEL *model; // $s2
/* begin block 1.1 */
// Start line: 1783
// Start offset: 0x0003407C
/* end block 1.1 */
// End offset: 0x00034100
// End Line: 1804
/* end block 1 */
// End offset: 0x00034110
// End Line: 1807
/* begin block 2 */
// Start line: 4269
/* end block 2 */
// End Line: 4270
/* begin block 3 */
// Start line: 4349
/* end block 3 */
// End Line: 4350
/* begin block 4 */
// Start line: 4350
/* end block 4 */
// End Line: 4351
/* begin block 5 */
// Start line: 4357
/* end block 5 */
// End Line: 4358
/* WARNING: Unknown calling convention yet parameter storage is locked */
void AddGroundDebris ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
uint uVar1 ;
uint uVar2 ;
int iVar3 ;
int Type ;
CELL_OBJECT * pCVar4 ;
MODEL * pMVar5 ;
int iVar6 ;
VECTOR local_30 ;
if ( 0x30d3e < car_data [ 0 ] . hd . wheel_speed + 99999U ) {
iVar6 = 0 ;
pCVar4 = ground_debris ;
do {
if ( pCVar4 - > type ! = 0xffff ) {
Type = ( pCVar4 - > pos ) . vx - camera_position . vx ;
pMVar5 = modelpointers1536 [ pCVar4 - > type ] ;
iVar3 = ( pCVar4 - > pos ) . vz - camera_position . vz ;
if ( Type < 0 ) {
Type = - Type ;
}
if ( iVar3 < 0 ) {
iVar3 = - iVar3 ;
}
if ( ( ( Type < 0x2329 ) & & ( iVar3 < 0x2329 ) ) & & ( ( 7000 < Type | | ( 7000 < iVar3 ) ) ) ) {
if ( 0x27 < next_leaf ) {
return ;
}
uVar1 = rand ( ) ;
local_30 . vy = - 10000 ;
local_30 . vx = ( pCVar4 - > pos ) . vx + ( ( uVar1 & 0x3ff ) - 0x200 ) ;
uVar2 = rand ( ) ;
local_30 . vz = ( pCVar4 - > pos ) . vz + ( ( uVar2 & 0x3ff ) - 0x200 ) ;
uVar2 = uVar1 & 7 ;
if ( ( pMVar5 - > flags2 & 0x2000 ) = = 0 ) {
uVar2 = uVar1 & 3 ;
Type = 2 ;
}
else {
Type = 1 ;
}
AddLeaf ( & local_30 , uVar2 + 1 , Type ) ;
}
}
iVar6 = iVar6 + 1 ;
pCVar4 = pCVar4 + 1 ;
} while ( iVar6 < 0x10 ) ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DrawSmashable_sprites()
// line 1815, offset 0x00034138
/* begin block 1 */
// Start line: 1817
// Start offset: 0x00034138
// Variables:
// int count; // $s6
// struct VECTOR pos; // stack offset -128
// struct DAMAGED_OBJECT *dam; // $s2
/* begin block 1.1 */
// Start line: 1826
// Start offset: 0x000341A4
// Variables:
// struct MATRIX object_matrix; // stack offset -112
// struct MATRIX spritematrix; // stack offset -80
// struct MATRIX *finalmatrix; // $s0
// struct MODEL *model; // $s3
/* begin block 1.1.1 */
// Start line: 1861
// Start offset: 0x0003435C
// Variables:
// unsigned long colours; // $a0
/* end block 1.1.1 */
// End offset: 0x000343B4
// End Line: 1870
/* end block 1.1 */
// End offset: 0x000343E8
// End Line: 1875
/* end block 1 */
// End offset: 0x00034424
// End Line: 1877
/* begin block 2 */
// Start line: 4518
/* end block 2 */
// End Line: 4519
/* begin block 3 */
// Start line: 4519
/* end block 3 */
// End Line: 4520
/* begin block 4 */
// Start line: 4523
/* end block 4 */
// End Line: 4524
/* WARNING: Unknown calling convention yet parameter storage is locked */
void DrawSmashable_sprites ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
char * pcVar2 ;
DAMAGED_OBJECT * pDVar3 ;
MODEL * model ;
int iVar4 ;
int local_80 ;
long local_7c ;
int local_78 ;
undefined * local_70 ;
undefined4 local_6c ;
undefined * local_68 ;
undefined4 local_64 ;
undefined * local_60 ;
undefined4 local_5c ;
undefined4 local_58 ;
undefined4 local_54 ;
undefined4 local_50 ;
undefined4 local_4c ;
undefined4 local_48 ;
undefined4 local_44 ;
undefined4 local_40 ;
long local_3c ;
long local_38 ;
long local_34 ;
undefined * local_30 ;
pDVar3 = damaged_object ;
iVar4 = 7 ;
local_30 = PTR_DAT_00010634 ;
do {
if ( pDVar3 - > active ! = ' \0 ' ) {
model = modelpointers1536 [ ( pDVar3 - > cop ) . type ] ;
local_68 = PTR_DAT_0001063c ;
local_64 = DAT_00010640 ;
local_60 = PTR_DAT_00010644 ;
local_5c = DAT_00010648 ;
local_58 = DAT_0001064c ;
local_54 = DAT_00010650 ;
local_50 = face_camera . m [ 0 ] . _0_4_ ;
local_4c = face_camera . m . _4_4_ ;
local_48 = face_camera . m [ 1 ] . _2_4_ ;
local_44 = face_camera . m [ 2 ] . _0_4_ ;
local_40 = face_camera . _16_4_ ;
local_3c = face_camera . t [ 0 ] ;
local_38 = face_camera . t [ 1 ] ;
local_70 = local_30 ;
local_6c = DAT_00010638 ;
local_34 = face_camera . t [ 2 ] ;
if ( ( model - > shape_flags & 0x4000 ) = = 0 ) {
RotMatrixY ( pDVar3 - > rot_speed * ( uint ) ( byte ) pDVar3 - > damage * 3 & 0xfff , & local_70 ) ;
}
RotMatrixZ ( pDVar3 - > rot_speed * ( uint ) ( byte ) pDVar3 - > damage & 0xfff , & local_70 ) ;
local_80 = pDVar3 - > vx - camera_position . vx ;
local_7c = ( pDVar3 - > cop ) . pos . vy - camera_position . vy ;
local_78 = ( pDVar3 - > cop ) . pos . vz - camera_position . vz ;
Apply_Inv_CameraMatrix ( & local_80 ) ;
setCopControlWord ( 2 , 0 , local_70 ) ;
setCopControlWord ( 2 , 0x800 , local_6c ) ;
setCopControlWord ( 2 , 0x1000 , local_68 ) ;
setCopControlWord ( 2 , 0x1800 , local_64 ) ;
setCopControlWord ( 2 , 0x2000 , local_60 ) ;
setCopControlWord ( 2 , 0x2800 , local_80 ) ;
setCopControlWord ( 2 , 0x3000 , local_7c ) ;
setCopControlWord ( 2 , 0x3800 , local_78 ) ;
local_80 = pDVar3 - > vx ;
local_7c = ( pDVar3 - > cop ) . pos . vy ;
local_78 = ( pDVar3 - > cop ) . pos . vz ;
SetFrustrumMatrix ( ) ;
iVar1 = FrustrumCheck ( & local_80 , ( int ) model - > bounding_sphere ) ;
if ( iVar1 ! = - 1 ) {
if ( ( model - > shape_flags & 0x4000 ) = = 0 ) {
PlotMDL_less_than_128 ( model ) ;
}
else {
if ( ( gWeather - 1U < 2 ) | | ( gTimeOfDay = = 3 ) ) {
DAT_1f8000c0 = NightAmbient < < 0x10 | NightAmbient < < 8 | NightAmbient | 0x2c000000 ;
}
else {
DAT_1f8000c0 = 0x2c808080 ;
}
pcVar2 = ( char * ) Asm_PlotSprite ( model , current - > primptr , current - > ot , 0 ) ;
current - > primptr = pcVar2 ;
}
}
}
iVar4 = iVar4 + - 1 ;
pDVar3 = pDVar3 + 1 ;
} while ( - 1 < iVar4 ) ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ MoveSmashable_object()
// line 1886, offset 0x0003a234
/* begin block 1 */
// Start line: 1888
// Start offset: 0x0003A234
// Variables:
// int count; // $a3
// struct DAMAGED_OBJECT *dam; // $a1
/* begin block 1.1 */
// Start line: 1896
// Start offset: 0x0003A258
// Variables:
// int groundlevel; // $v0
/* end block 1.1 */
// End offset: 0x0003A2C0
// End Line: 1911
/* end block 1 */
// End offset: 0x0003A2D4
// End Line: 1914
/* begin block 2 */
// Start line: 3772
/* end block 2 */
// End Line: 3773
/* begin block 3 */
// Start line: 21340
/* end block 3 */
// End Line: 21341
/* begin block 4 */
// Start line: 21342
/* end block 4 */
// End Line: 21343
/* WARNING: Unknown calling convention yet parameter storage is locked */
int MoveSmashable_object ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
char cVar1 ;
short sVar2 ;
short sVar3 ;
int iVar4 ;
DAMAGED_OBJECT * pDVar5 ;
int iVar6 ;
int iVar7 ;
pDVar5 = damaged_object ;
iVar7 = 7 ;
do {
if ( pDVar5 - > active ! = ' \0 ' ) {
iVar6 = ( pDVar5 - > cop ) . pos . vy ;
if ( iVar6 < 0x32 - player . pos [ 1 ] ) {
iVar4 = ( pDVar5 - > cop ) . pos . vz ;
pDVar5 - > vx = pDVar5 - > vx + ( int ) ( pDVar5 - > velocity ) . vx ;
sVar2 = ( pDVar5 - > velocity ) . vz ;
cVar1 = pDVar5 - > damage ;
( pDVar5 - > cop ) . pos . vy = iVar6 + ( pDVar5 - > velocity ) . vy ;
sVar3 = ( pDVar5 - > velocity ) . vy ;
( pDVar5 - > cop ) . pos . vz = iVar4 + sVar2 ;
pDVar5 - > damage = cVar1 + ' \x01 ' ;
( pDVar5 - > velocity ) . vy = sVar3 + 10 ;
}
else {
pDVar5 - > active = ' \0 ' ;
}
}
iVar7 = iVar7 + - 1 ;
pDVar5 = pDVar5 + 1 ;
} while ( - 1 < iVar7 ) ;
return 0 ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ AddSmallStreetLight(struct CELL_OBJECT *cop /*$s1*/, int x /*$s3*/, int y /*$s6*/, int z /*$s4*/, int type /*stack 16*/)
// line 1925, offset 0x00034424
/* begin block 1 */
// Start line: 1926
// Start offset: 0x00034424
// Variables:
// struct VECTOR v1; // stack offset -112
// struct VECTOR v2; // stack offset -96
// struct VECTOR v3; // stack offset -80
// struct SVECTOR pos; // stack offset -64
// struct CVECTOR col; // stack offset -56
// struct CVECTOR col1; // stack offset -48
// int count; // $v1
// short angle; // $s2
// int halo_size; // $fp
// int size; // $s5
// int LampId; // $s7
// struct DAMAGED_LAMP *dam; // $s0
/* begin block 1.1 */
// Start line: 1961
// Start offset: 0x000344EC
/* end block 1.1 */
// End offset: 0x00034540
// End Line: 1967
/* end block 1 */
// End offset: 0x00034828
// End Line: 2039
/* begin block 2 */
// Start line: 4795
/* end block 2 */
// End Line: 4796
/* begin block 3 */
// Start line: 4844
/* end block 3 */
// End Line: 4845
/* begin block 4 */
// Start line: 4854
/* end block 4 */
// End Line: 4855
/* WARNING: Could not reconcile some variable overlaps */
2020-04-04 06:49:28 +02:00
void AddSmallStreetLight ( CELL_OBJECT * cop , int x , int y , int z , int type )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
byte bVar1 ;
undefined4 in_zero ;
undefined4 in_at ;
undefined uVar2 ;
uint uVar3 ;
int iVar4 ;
uint uVar5 ;
DAMAGED_LAMP * pDVar6 ;
uint uVar7 ;
int iVar8 ;
short size ;
VECTOR local_70 ;
VECTOR local_60 ;
VECTOR local_50 ;
uint local_40 ;
uint local_3c ;
undefined4 local_38 ;
CVECTOR local_30 [ 2 ] ;
pDVar6 = & damaged_lamp ;
local_38 = DAT_000aa370 ;
local_30 [ 0 ] = ( CVECTOR ) PTR_DAT_000aa374 ;
bVar1 = cop - > yang ;
uVar7 = ( uint ) bVar1 ;
if ( type = = 0 ) {
iVar8 = 0x19 ;
size = 0x96 ;
}
else {
iVar8 = 100 ;
if ( type = = 1 ) {
iVar8 = 0x32 ;
size = 0x96 ;
}
else {
size = 300 ;
}
}
iVar4 = 0 ;
do {
if ( cop = = pDVar6 - > cop ) {
if ( 2 < ( byte ) pDVar6 - > damage ) {
return ;
}
uVar3 = rand ( ) ;
uVar3 = ( uVar3 & 0x3f ) - ( ( uint ) ( byte ) pDVar6 - > damage * 0x20 + - 0x5a ) ;
local_38 = uVar3 & 0xff |
( uint ) CONCAT21 ( CONCAT11 ( local_38 . _3_1_ , ( char ) uVar3 ) , ( char ) uVar3 ) < < 8 ;
uVar3 = ( uVar3 & 0xff ) > > 1 ;
uVar2 = ( undefined ) uVar3 ;
local_30 [ 0 ] = ( CVECTOR ) ( uVar3 | ( uint ) CONCAT21 ( CONCAT11 ( local_30 [ 0 ] . cd , uVar2 ) , uVar2 ) < < 8 ) ;
break ;
}
iVar4 = iVar4 + 1 ;
pDVar6 = pDVar6 + 1 ;
} while ( iVar4 < 4 ) ;
if ( ( bVar1 & 0xf ) = = 0 ) {
bVar1 = bVar1 > > 4 ;
if ( bVar1 = = 1 ) {
local_70 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) + z ;
local_70 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) - x ;
}
else {
if ( bVar1 < 2 ) {
if ( bVar1 = = 0 ) {
local_70 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) + x ;
local_70 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) + z ;
}
}
else {
if ( bVar1 = = 2 ) {
local_70 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) - x ;
local_70 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) - z ;
}
else {
if ( bVar1 = = 3 ) {
local_70 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) - z ;
local_70 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) + x ;
}
}
}
}
local_70 . vy = ( ( cop - > pos ) . vy - camera_position . vy ) + y ;
}
else {
uVar3 = local_3c & 0xffff0000 ;
local_3c = uVar3 | z & 0xffffU ;
setCopControlWord ( 2 , 0 , * ( undefined4 * ) ( & matrixtable ) [ uVar7 ] . m ) ;
setCopControlWord ( 2 , 0x800 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar7 ] . m + 2 ) ) ;
setCopControlWord ( 2 , 0x1000 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar7 ] . m + 4 ) ) ;
setCopControlWord ( 2 , 0x1800 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar7 ] . m + 6 ) ) ;
setCopControlWord ( 2 , 0x2000 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar7 ] . m + 8 ) ) ;
setCopReg ( 2 , in_zero , x & 0xffffU | y < < 0x10 ) ;
setCopReg ( 2 , in_at , local_3c ) ;
copFunction ( 2 , 0x486012 ) ;
uVar7 = getCopReg ( 2 , 0x4800 ) ;
iVar4 = getCopReg ( 2 , 0x5000 ) ;
uVar5 = getCopReg ( 2 , 0x5800 ) ;
local_40 = uVar7 & 0xffff | iVar4 < < 0x10 ;
local_3c = uVar3 | uVar5 & 0xffff ;
local_70 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) + ( int ) ( short ) uVar7 ;
local_70 . vy = ( ( cop - > pos ) . vy - camera_position . vy ) + ( int ) ( short ) iVar4 ;
local_3c . _0_2_ = ( short ) ( uVar5 & 0xffff ) ;
local_70 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) + ( int ) ( short ) local_3c ;
}
local_60 . vx = local_70 . vx ;
local_60 . vz = local_70 . vz ;
local_60 . vy = MapHeight ( & local_70 ) ;
LightSortCorrect = - 0x1e ;
local_38 = local_38 & 0xffffff ;
local_60 . vy = - camera_position . vy - local_60 . vy ;
local_50 . vx = local_70 . vx ;
local_50 . vy = local_70 . vy ;
local_50 . vz = local_70 . vz ;
local_50 . pad = local_70 . pad ;
LightIndex = find_lamp_streak ( ( int ) & ( cop - > pos ) . vx + x ) ;
if ( - 1 < LightIndex ) {
local_38 = CONCAT13 ( 0x60 , ( undefined3 ) local_38 ) ;
}
ShowLight ( & local_50 , ( CVECTOR * ) & local_38 , ( short ) iVar8 , & light_texture ) ;
ShowLight1 ( & local_50 , local_30 , size , & light_texture ) ;
DisplayLightReflections ( & local_60 , local_30 , ( short ) ( iVar8 < < 1 ) , & lightref_texture ) ;
LightSortCorrect = - 10 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ AddLightEffect(struct CELL_OBJECT *cop /*$t0*/, int x /*$t2*/, int y /*$a2*/, int z /*$a3*/, int type /*stack 16*/, int colour /*stack 20*/)
// line 2049, offset 0x00034858
/* begin block 1 */
// Start line: 2050
// Start offset: 0x00034858
// Variables:
// struct VECTOR v1; // stack offset -88
// struct VECTOR v2; // stack offset -72
// struct VECTOR v3; // stack offset -56
// struct SVECTOR pos; // stack offset -40
// struct CVECTOR col; // stack offset -32
// struct CVECTOR col1; // stack offset -24
// short angle; // $v1
// int size; // $s1
/* end block 1 */
// End offset: 0x00034C6C
// End Line: 2175
/* begin block 2 */
// Start line: 5163
/* end block 2 */
// End Line: 5164
/* WARNING: Could not reconcile some variable overlaps */
2020-04-04 06:49:28 +02:00
void AddLightEffect ( CELL_OBJECT * cop , int x , int y , int z , int type , int colour )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
byte bVar1 ;
uint uVar2 ;
undefined4 in_zero ;
undefined4 in_at ;
uint uVar3 ;
int iVar4 ;
uint uVar5 ;
int unaff_s1 ;
VECTOR local_58 ;
VECTOR local_48 ;
int local_38 ;
int local_34 ;
int local_30 ;
long local_2c ;
uint local_28 ;
uint local_24 ;
CVECTOR local_20 [ 4 ] ;
bVar1 = cop - > yang ;
uVar3 = ( uint ) bVar1 ;
if ( ( bVar1 & 0xf ) = = 0 ) {
bVar1 = bVar1 > > 4 ;
if ( bVar1 = = 1 ) {
local_58 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) + z ;
local_58 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) - x ;
}
else {
if ( bVar1 < 2 ) {
if ( bVar1 = = 0 ) {
local_58 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) + x ;
local_58 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) + z ;
}
}
else {
if ( bVar1 = = 2 ) {
local_58 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) - x ;
local_58 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) - z ;
}
else {
if ( bVar1 = = 3 ) {
local_58 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) - z ;
local_58 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) + x ;
}
}
}
}
local_58 . vy = ( ( cop - > pos ) . vy - camera_position . vy ) + y ;
}
else {
uVar2 = local_24 & 0xffff0000 ;
local_24 = uVar2 | z & 0xffffU ;
setCopControlWord ( 2 , 0 , * ( undefined4 * ) ( & matrixtable ) [ uVar3 ] . m ) ;
setCopControlWord ( 2 , 0x800 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar3 ] . m + 2 ) ) ;
setCopControlWord ( 2 , 0x1000 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar3 ] . m + 4 ) ) ;
setCopControlWord ( 2 , 0x1800 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar3 ] . m + 6 ) ) ;
setCopControlWord ( 2 , 0x2000 , * ( undefined4 * ) ( ( & matrixtable ) [ uVar3 ] . m + 8 ) ) ;
setCopReg ( 2 , in_zero , x & 0xffffU | y < < 0x10 ) ;
setCopReg ( 2 , in_at , local_24 ) ;
copFunction ( 2 , 0x486012 ) ;
uVar3 = getCopReg ( 2 , 0x4800 ) ;
iVar4 = getCopReg ( 2 , 0x5000 ) ;
uVar5 = getCopReg ( 2 , 0x5800 ) ;
local_28 = uVar3 & 0xffff | iVar4 < < 0x10 ;
local_24 = uVar2 | uVar5 & 0xffff ;
local_58 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) + ( int ) ( short ) uVar3 ;
local_58 . vy = ( ( cop - > pos ) . vy - camera_position . vy ) + ( int ) ( short ) iVar4 ;
local_24 . _0_2_ = ( short ) ( uVar5 & 0xffff ) ;
local_58 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) + ( int ) ( short ) local_24 ;
}
if ( ( byte ) colour = = 1 ) {
local_20 [ 0 ] . r = ' \0 ' ;
local_20 [ 0 ] . g = ' ( ' ;
local_20 [ 0 ] . b = ' \0 ' ;
}
else {
if ( ( byte ) colour < 2 ) {
if ( ( byte ) colour = = 0 ) {
local_20 [ 0 ] . r = ' ( ' ;
local_20 [ 0 ] . g = ' \n ' ;
local_20 [ 0 ] . b = ' \0 ' ;
}
}
else {
if ( ( byte ) colour = = 2 ) {
local_20 [ 0 ] . g = ' F ' ;
local_20 [ 0 ] . r = ' U ' ;
local_20 [ 0 ] . b = ' \x05 ' ;
}
else {
if ( ( byte ) colour = = 3 ) {
local_20 [ 0 ] . g = ' ( ' ;
local_20 [ 0 ] . b = ' # ' ;
local_20 [ 0 ] . r = ' ( ' ;
}
}
}
}
if ( ( byte ) type = = 1 ) {
unaff_s1 = 300 ;
}
else {
if ( ( byte ) type < 2 ) {
if ( ( byte ) type = = 0 ) {
unaff_s1 = 400 ;
}
}
else {
if ( ( byte ) type = = 2 ) {
unaff_s1 = 200 ;
}
else {
if ( ( byte ) type = = 3 ) {
unaff_s1 = 0x96 ;
}
}
}
}
local_48 . vx = local_58 . vx ;
local_48 . vz = local_58 . vz ;
local_48 . vy = MapHeight ( & local_58 ) ;
LightSortCorrect = - 10 ;
local_20 [ 0 ] . cd = ' \0 ' ;
local_48 . vy = - camera_position . vy - local_48 . vy ;
local_38 = local_58 . vx ;
local_34 = local_58 . vy ;
local_30 = local_58 . vz ;
local_2c = local_58 . pad ;
Apply_Inv_CameraMatrix ( & local_58 ) ;
setCopControlWord ( 2 , 0x2800 , local_58 . vx ) ;
setCopControlWord ( 2 , 0x3000 , local_58 . vy ) ;
setCopControlWord ( 2 , 0x3800 , local_58 . vz ) ;
setCopControlWord ( 2 , 0 , norot . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , norot . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , norot . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , norot . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , norot . _16_4_ ) ;
ShowLight1 ( & local_58 , local_20 , ( short ) unaff_s1 , & light_texture ) ;
DisplayLightReflections
( & local_48 , local_20 , ( short ) ( ( uint ) ( unaff_s1 < < 0xd ) > > 0x10 ) , & lightref_texture ) ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ PreLampStreak()
// line 2178, offset 0x00034c6c
/* begin block 1 */
// Start line: 2180
// Start offset: 0x00034C6C
// Variables:
// int count; // $a3
/* end block 1 */
// End offset: 0x00034D1C
// End Line: 2198
/* begin block 2 */
// Start line: 5470
/* end block 2 */
// End Line: 5471
/* begin block 3 */
// Start line: 5474
/* end block 3 */
// End Line: 5475
/* begin block 4 */
// Start line: 5475
/* end block 4 */
// End Line: 5476
/* begin block 5 */
// Start line: 5477
/* end block 5 */
// End Line: 5478
/* WARNING: Unknown calling convention yet parameter storage is locked */
void PreLampStreak ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
short sVar1 ;
char * pcVar2 ;
int * piVar3 ;
LAMP_STREAK * pLVar4 ;
int iVar5 ;
iVar5 = 0 ;
if ( StreakCount1 ! = 0 ) {
pLVar4 = Known_Lamps ;
do {
if ( pLVar4 - > set = = ' \0 ' ) {
StreakCount1 = StreakCount1 + - 1 ;
sVar1 = ( short ) FrameCnt ;
pLVar4 - > id = ( & NewLamp ) [ StreakCount1 ] ;
pLVar4 - > clock = sVar1 + - 2 ;
}
iVar5 = iVar5 + 1 ;
pLVar4 = pLVar4 + 1 ;
} while ( ( iVar5 < 0x14 ) & & ( StreakCount1 ! = 0 ) ) ;
}
pcVar2 = & Known_Lamps [ 0 ] . set ;
piVar3 = & NewLamp ;
iVar5 = 0x13 ;
do {
* pcVar2 = ' \0 ' ;
pcVar2 = pcVar2 + 0x18 ;
* piVar3 = 0 ;
iVar5 = iVar5 + - 1 ;
piVar3 = piVar3 + 1 ;
} while ( - 1 < iVar5 ) ;
StreakCount1 = 0 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ find_lamp_streak(int LampId /*$a0*/)
// line 2200, offset 0x00039b08
/* begin block 1 */
// Start line: 2201
// Start offset: 0x00039B08
// Variables:
// int count; // $a1
/* end block 1 */
// End offset: 0x00039B78
// End Line: 2217
/* begin block 2 */
// Start line: 10055
/* end block 2 */
// End Line: 10056
/* begin block 3 */
// Start line: 10531
/* end block 3 */
// End Line: 10532
/* begin block 4 */
// Start line: 10534
/* end block 4 */
// End Line: 10535
int find_lamp_streak ( int LampId )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
char * pcVar1 ;
int * piVar2 ;
int iVar3 ;
iVar3 = 0 ;
pcVar1 = & Known_Lamps [ 0 ] . set ;
do {
if ( * ( int * ) ( pcVar1 + - 6 ) = = LampId ) {
* pcVar1 = ' \x01 ' ;
return iVar3 ;
}
iVar3 = iVar3 + 1 ;
pcVar1 = pcVar1 + 0x18 ;
} while ( iVar3 < 0x14 ) ;
if ( StreakCount1 < 0x14 ) {
piVar2 = & NewLamp + StreakCount1 ;
StreakCount1 = StreakCount1 + 1 ;
* piVar2 = LampId ;
}
return - 1 ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ damage_lamp(struct CELL_OBJECT *cop /*$a2*/)
// line 2230, offset 0x00034d1c
/* begin block 1 */
// Start line: 2231
// Start offset: 0x00034D1C
// Variables:
// int count; // $v1
// int old_damage; // $v0
/* end block 1 */
// End offset: 0x00034DAC
// End Line: 2245
/* begin block 2 */
// Start line: 5557
/* end block 2 */
// End Line: 5558
/* begin block 3 */
// Start line: 5590
/* end block 3 */
// End Line: 5591
int damage_lamp ( CELL_OBJECT * cop )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
byte bVar1 ;
int iVar2 ;
uint uVar3 ;
DAMAGED_LAMP * pDVar4 ;
iVar2 = 0 ;
pDVar4 = & damaged_lamp ;
do {
iVar2 = iVar2 + 1 ;
if ( cop = = pDVar4 - > cop ) {
bVar1 = pDVar4 - > damage ;
uVar3 = 0 ;
pDVar4 - > damage = bVar1 + 1 ;
if ( bVar1 < 3 ) {
uVar3 = ( uint ) ( ( byte ) ( bVar1 + 1 ) < 3 ) ^ 1 ;
}
return uVar3 ;
}
pDVar4 = pDVar4 + 1 ;
} while ( iVar2 < 4 ) ;
iVar2 = NextDamagedLamp + 1 ;
( & damaged_lamp ) [ NextDamagedLamp ] . damage = ' \0 ' ;
( & damaged_lamp ) [ NextDamagedLamp ] . cop = cop ;
NextDamagedLamp = iVar2 ;
if ( 4 < iVar2 ) {
NextDamagedLamp = 0 ;
}
return 0 ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ damage_object(struct CELL_OBJECT *cop /*$s1*/, struct VECTOR *velocity /*$a1*/)
// line 2255, offset 0x00034dac
/* begin block 1 */
// Start line: 2256
// Start offset: 0x00034DAC
// Variables:
// struct DAMAGED_OBJECT *dam; // $s0
/* begin block 1.1 */
// Start line: 2256
// Start offset: 0x00034DAC
// Variables:
// struct PACKED_CELL_OBJECT *pcop; // $a0
/* end block 1.1 */
// End offset: 0x00034DAC
// End Line: 2256
/* end block 1 */
// End offset: 0x00034F64
// End Line: 2318
/* begin block 2 */
// Start line: 5636
/* end block 2 */
// End Line: 5637
/* begin block 3 */
// Start line: 5647
/* end block 3 */
// End Line: 5648
/* begin block 4 */
// Start line: 5653
/* end block 4 */
// End Line: 5654
2020-04-04 06:49:28 +02:00
int damage_object ( CELL_OBJECT * cop , VECTOR * velocity )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
DAMAGED_OBJECT * pDVar1 ;
int iVar2 ;
short sVar3 ;
uint uVar4 ;
PACKED_CELL_OBJECT * pPVar5 ;
iVar2 = NextDamagedPmeter ;
damaged_object [ NextDamagedPmeter ] . active = ' \x01 ' ;
damaged_object [ NextDamagedPmeter ] . damage = ' \0 ' ;
damaged_object [ NextDamagedPmeter ] . cop . pos . vx = ( cop - > pos ) . vx ;
damaged_object [ NextDamagedPmeter ] . cop . pos . vy = ( cop - > pos ) . vy ;
damaged_object [ NextDamagedPmeter ] . cop . pos . vz = ( cop - > pos ) . vz ;
* ( undefined4 * ) & damaged_object [ NextDamagedPmeter ] . cop . pad = * ( undefined4 * ) & cop - > pad ;
damaged_object [ NextDamagedPmeter ] . vx = ( cop - > pos ) . vx ;
damaged_object [ NextDamagedPmeter ] . velocity . vx = ( short ) ( velocity - > vx > > 10 ) ;
SmashablesHit = SmashablesHit + 1 ;
pDVar1 = damaged_object + NextDamagedPmeter ;
NextDamagedPmeter = NextDamagedPmeter + 1 ;
( pDVar1 - > velocity ) . vz = ( short ) ( velocity - > vz > > 10 ) ;
pPVar5 = pcoplist [ cop - > pad ] ;
pPVar5 - > value = 0xffff ;
( pPVar5 - > pos ) . vy = 1 ;
if ( damaged_object [ iVar2 ] . velocity . vx < 0 ) {
damaged_object [ iVar2 ] . velocity . vy = * ( short * ) & velocity - > vx ;
}
else {
damaged_object [ iVar2 ] . velocity . vy = - * ( short * ) & velocity - > vx ;
}
if ( damaged_object [ iVar2 ] . velocity . vz < 0 ) {
sVar3 = damaged_object [ iVar2 ] . velocity . vy + * ( short * ) & velocity - > vz ;
}
else {
sVar3 = damaged_object [ iVar2 ] . velocity . vy - * ( short * ) & velocity - > vz ;
}
damaged_object [ iVar2 ] . velocity . vy = sVar3 ;
damaged_object [ iVar2 ] . velocity . vy = damaged_object [ iVar2 ] . velocity . vy > > 1 ;
uVar4 = rand ( ) ;
if ( ( uVar4 & 1 ) = = 0 ) {
damaged_object [ iVar2 ] . rot_speed = - ( int ) damaged_object [ iVar2 ] . velocity . vy ;
}
else {
damaged_object [ iVar2 ] . rot_speed = ( int ) damaged_object [ iVar2 ] . velocity . vy ;
}
if ( damaged_object [ iVar2 ] . velocity . vy < - 0x43 ) {
damaged_object [ iVar2 ] . velocity . vy = - 0x43 ;
}
if ( 7 < NextDamagedPmeter ) {
NextDamagedPmeter = 0 ;
}
( cop - > pos ) . vx = - 0x2b90140 ;
return 0 ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ AddTrafficLight(struct CELL_OBJECT *cop /*$t4*/, int x /*$t6*/, int y /*$t7*/, int z /*$a3*/, int flag /*stack 16*/, int yang /*stack 20*/)
// line 2326, offset 0x00034f64
/* begin block 1 */
// Start line: 2327
// Start offset: 0x00034F64
// Variables:
// struct CVECTOR a; // stack offset -80
// struct CVECTOR b; // stack offset -72
// struct CVECTOR c; // stack offset -64
// struct VECTOR v1; // stack offset -56
// struct VECTOR v2; // stack offset -40
// int lDiffAnglesX; // $s2
// int lDiffAnglesY; // $s1
// int AbsX; // $a2
// int AbsY; // $a1
// int tempfade; // $v0
/* begin block 1.1 */
// Start line: 2327
// Start offset: 0x00034F64
// Variables:
// int c; // $t1
// int s; // $t2
/* end block 1.1 */
// End offset: 0x00034F64
// End Line: 2327
/* end block 1 */
// End offset: 0x000352B0
// End Line: 2416
/* begin block 2 */
// Start line: 5809
/* end block 2 */
// End Line: 5810
/* begin block 3 */
// Start line: 5818
/* end block 3 */
// End Line: 5819
2020-04-04 06:49:28 +02:00
void AddTrafficLight ( CELL_OBJECT * cop , int x , int y , int z , int flag , int yang )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
int iVar2 ;
uint uVar3 ;
int iVar4 ;
int iVar5 ;
CVECTOR local_50 [ 2 ] ;
CVECTOR local_48 [ 2 ] ;
byte local_40 ;
byte local_3f ;
byte local_3e ;
VECTOR local_38 ;
VECTOR local_28 ;
uVar3 = ( int ) ( short ) yang & 0xfff ;
local_38 . vy = ( ( cop - > pos ) . vy - camera_position . vy ) + y ;
local_38 . vx = ( ( cop - > pos ) . vx - camera_position . vx ) +
( rcossin_tbl [ uVar3 * 2 + 1 ] * x + rcossin_tbl [ uVar3 * 2 ] * z + 0x800 > > 0xc ) ;
local_38 . vz = ( ( cop - > pos ) . vz - camera_position . vz ) +
( ( rcossin_tbl [ uVar3 * 2 + 1 ] * z - rcossin_tbl [ uVar3 * 2 ] * x ) + 0x800 > > 0xc ) ;
if ( ( flag & 0x200U ) = = 0 ) {
if ( ( flag & 0x400U ) ! = 0 ) {
local_50 [ 0 ] . r = 0xff ;
local_50 [ 0 ] . g = 100 ;
local_50 [ 0 ] . b = 0x23 ;
goto LAB_00035098 ;
}
if ( ( flag & 0x800U ) = = 0 ) goto LAB_00035098 ;
local_50 [ 0 ] . r = 0x19 ;
local_50 [ 0 ] . g = 0xff ;
}
else {
local_50 [ 0 ] . r = 0xff ;
local_50 [ 0 ] . g = 0x19 ;
}
local_50 [ 0 ] . b = 0x19 ;
2020-03-27 21:47:29 +01:00
LAB_00035098 :
2020-04-04 06:49:28 +02:00
local_50 [ 0 ] . cd = ' \0 ' ;
iVar5 = ( ( int ) camera_angle . vx + 0x800U & 0xfff ) - 0x800 ;
iVar1 = iVar5 ;
if ( iVar5 < 0 ) {
iVar1 = - iVar5 ;
}
iVar4 = ( ( ( - ( int ) camera_angle . vy & 0xfffU ) - ( int ) ( short ) yang ) + 0x800 & 0xfff ) - 0x800 ;
iVar2 = iVar4 ;
if ( iVar4 < 0 ) {
iVar2 = - iVar4 ;
}
if ( iVar2 < 0x3e9 ) {
local_40 = local_50 [ 0 ] . r ;
local_48 [ 0 ] . r = local_50 [ 0 ] . r > > 3 ;
local_3e = local_50 [ 0 ] . b ;
local_48 [ 0 ] . b = local_50 [ 0 ] . b > > 3 ;
local_3f = local_50 [ 0 ] . g ;
local_48 [ 0 ] . g = local_50 [ 0 ] . g > > 3 ;
local_28 . vx = local_38 . vx ;
local_28 . vz = local_38 . vz ;
if ( iVar1 + iVar2 < 1000 ) {
iVar1 = 1000 - ( iVar1 + iVar2 ) ;
if ( iVar1 < 0 ) {
iVar1 = 0 ;
}
local_50 [ 0 ] . r = ( byte ) ( ( int ) ( ( uint ) local_50 [ 0 ] . r * iVar1 ) > > 10 ) ;
LightSortCorrect = - 0x8c ;
local_50 [ 0 ] . b = ( byte ) ( ( int ) ( ( uint ) local_50 [ 0 ] . b * iVar1 ) > > 10 ) ;
local_50 [ 0 ] . g = ( byte ) ( ( int ) ( ( uint ) local_50 [ 0 ] . g * iVar1 ) > > 10 ) ;
local_40 = local_50 [ 0 ] . r ;
local_3f = local_50 [ 0 ] . g ;
local_3e = local_50 [ 0 ] . b ;
LightIndex = find_lamp_streak ( ( int ) & ( cop - > pos ) . vx + y + x ) ;
if ( LightIndex < 0 ) {
local_50 [ 0 ] . cd = ' \0 ' ;
}
else {
local_50 [ 0 ] . cd = ' ' ;
}
ShowLight ( & local_38 , local_50 , 0x1e , & light_texture ) ;
local_50 [ 0 ] . r = local_50 [ 0 ] . r > > 1 ;
local_50 [ 0 ] . b = local_50 [ 0 ] . b > > 1 ;
local_50 [ 0 ] . g = local_50 [ 0 ] . g > > 1 ;
if ( gNight ! = 0 ) {
ShowFlare ( & local_38 , local_50 , 0x96 , iVar5 + iVar4 + local_38 . vx + local_38 . vz > > 3 & 0x1ffe ) ;
}
}
local_28 . vy = MapHeight ( & local_38 ) ;
local_28 . vy = - camera_position . vy - local_28 . vy ;
if ( gNight ! = 0 ) {
ShowGroundLight ( & local_28 , local_48 , 300 ) ;
}
DisplayLightReflections ( & local_28 , local_50 , 100 , & lightref_texture ) ;
LightSortCorrect = - 10 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ InitFXPos(struct VECTOR *vec /*$a0*/, struct SVECTOR *svec /*$a1*/, struct _CAR_DATA *cp /*$a2*/)
// line 2428, offset 0x00039c90
/* begin block 1 */
// Start line: 2429
// Start offset: 0x00039C90
// Variables:
// struct SVECTOR svectmp; // stack offset -8
/* end block 1 */
// End offset: 0x00039D68
// End Line: 2437
/* begin block 2 */
// Start line: 13201
/* end block 2 */
// End Line: 13202
/* begin block 3 */
// Start line: 4856
/* end block 3 */
// End Line: 4857
/* begin block 4 */
// Start line: 13202
/* end block 4 */
// End Line: 13203
2020-04-04 06:49:28 +02:00
void InitFXPos ( VECTOR * vec , SVECTOR * svec , _CAR_DATA * cp )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
long lVar1 ;
undefined4 in_zero ;
undefined4 in_at ;
if ( cp < car_data ) {
while ( FrameCnt ! = 0x78654321 ) {
trap ( 0x400 ) ;
}
}
setCopControlWord ( 2 , 0 , * ( undefined4 * ) ( cp - > hd ) . drawCarMat . m ) ;
setCopControlWord ( 2 , 0x800 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 2 ) ) ;
setCopControlWord ( 2 , 0x1000 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 4 ) ) ;
setCopControlWord ( 2 , 0x1800 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 6 ) ) ;
setCopControlWord ( 2 , 0x2000 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 8 ) ) ;
setCopControlWord ( 2 , 0x2800 , vec - > vx ) ;
setCopControlWord ( 2 , 0x3000 , vec - > vy ) ;
setCopControlWord ( 2 , 0x3800 , vec - > vz ) ;
setCopReg ( 2 , in_zero , * ( undefined4 * ) svec ) ;
setCopReg ( 2 , in_at , * ( undefined4 * ) & svec - > vz ) ;
copFunction ( 2 , 0x480012 ) ;
lVar1 = getCopReg ( 2 , 0x19 ) ;
vec - > vx = lVar1 ;
lVar1 = getCopReg ( 2 , 0x1a ) ;
vec - > vy = lVar1 ;
lVar1 = getCopReg ( 2 , 0x1b ) ;
vec - > vz = lVar1 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ FindCarLightFade(struct MATRIX *carToCamera /*$a0*/)
// line 2447, offset 0x00039c68
/* begin block 1 */
// Start line: 2449
// Start offset: 0x00039C68
// Variables:
// int zz; // $v0
/* end block 1 */
// End offset: 0x00039C90
// End Line: 2452
/* begin block 2 */
// Start line: 4894
/* end block 2 */
// End Line: 4895
/* begin block 3 */
// Start line: 13214
/* end block 3 */
// End Line: 13215
void FindCarLightFade ( MATRIX * carToCamera )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
iVar1 = ( int ) ( ( uint ) ( ushort ) carToCamera - > m [ 8 ] < < 0x10 ) > > 0x12 ;
CarLightFadeFront = iVar1 + - 0x7c ;
CarLightFadeBack = - 0x7c - iVar1 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ShowCarlight(struct SVECTOR *v1 /*$s6*/, struct _CAR_DATA *cp /*$s3*/, struct CVECTOR *col /*$s1*/, short size /*$s5*/, struct TEXTURE_DETAILS *texture /*stack 16*/, int flag /*stack 20*/)
// line 2462, offset 0x000352cc
/* begin block 1 */
// Start line: 2463
// Start offset: 0x000352CC
// Variables:
// int CarLightFade; // $a1
// struct VECTOR v1t; // stack offset -72
// struct VECTOR v1l; // stack offset -56
// struct CVECTOR flareCol; // stack offset -40
// int front; // $a0
/* end block 1 */
// End offset: 0x00035534
// End Line: 2514
/* begin block 2 */
// Start line: 6201
/* end block 2 */
// End Line: 6202
2020-04-04 06:49:28 +02:00
void ShowCarlight ( SVECTOR * v1 , _CAR_DATA * cp , CVECTOR * col , short size , TEXTURE_DETAILS * texture , int flag )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
VECTOR local_48 ;
VECTOR local_38 ;
CVECTOR local_28 [ 2 ] ;
if ( cp < = ( _CAR_DATA * ) ( ( int ) & cheats . MagicMirror + 3U ) ) {
while ( FrameCnt ! = 0x78654321 ) {
trap ( 0x400 ) ;
}
}
iVar1 = 0xff ;
if ( ( uchar ) flag = = - 1 ) {
flag . _0_1_ = ' \0 ' ;
}
else {
iVar1 = CarLightFadeBack ;
if ( ( flag & 1U ) ! = 0 ) {
iVar1 = CarLightFadeFront ;
}
if ( iVar1 < 0 ) {
return ;
}
}
col - > r = ( uchar ) ( ( int ) ( ( uint ) col - > r * iVar1 ) > > 10 ) ;
col - > b = ( uchar ) ( ( int ) ( ( uint ) col - > b * iVar1 ) > > 10 ) ;
col - > g = ( uchar ) ( ( int ) ( ( uint ) col - > g * iVar1 ) > > 10 ) ;
setCopControlWord ( 2 , 0 , * ( undefined4 * ) ( cp - > hd ) . drawCarMat . m ) ;
setCopControlWord ( 2 , 0x800 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 2 ) ) ;
setCopControlWord ( 2 , 0x1000 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 4 ) ) ;
setCopControlWord ( 2 , 0x1800 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 6 ) ) ;
setCopControlWord ( 2 , 0x2000 , * ( undefined4 * ) ( ( cp - > hd ) . drawCarMat . m + 8 ) ) ;
local_38 . vx = ( cp - > hd ) . where . t [ 0 ] - camera_position . vx ;
local_38 . vy = - camera_position . vy - ( cp - > hd ) . where . t [ 1 ] ;
local_38 . vz = ( cp - > hd ) . where . t [ 2 ] - camera_position . vz ;
InitFXPos ( & local_38 , v1 , cp ) ;
if ( 9 < wetness ) {
local_48 . vx = local_38 . vx ;
local_48 . vy = local_38 . vy ;
local_48 . vz = local_38 . vz ;
local_48 . pad = local_38 . pad ;
local_48 . vy = MapHeight ( ( VECTOR * ) ( cp - > hd ) . where . t ) ;
local_48 . vy = - camera_position . vy - local_48 . vy ;
}
col - > cd = ( uchar ) flag ;
ShowLight ( & local_38 , col , size , texture ) ;
local_28 [ 0 ] . r = col - > r > > 1 ;
local_28 [ 0 ] . g = col - > g > > 1 ;
local_28 [ 0 ] . b = col - > b > > 1 ;
ShowFlare ( & local_38 , local_28 , ( short ) ( ( uint ) ( ( int ) size * 0x30000 ) > > 0x10 ) ,
( ( int ) v1 - > vx + ( int ) v1 - > vz > > 2 ) + ( ( cp - > hd ) . direction - ( int ) camera_angle . vy ) * 2 ) ;
DisplayLightReflections ( & local_48 , col , size , & lightref_texture ) ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ShowLight1(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$a1*/, short size /*$a2*/, struct TEXTURE_DETAILS *texture /*$a3*/)
// line 2523, offset 0x0003555c
/* begin block 1 */
// Start line: 2524
// Start offset: 0x0003555C
// Variables:
// struct SVECTOR vert[4]; // stack offset -40
// struct POLY_FT4 *poly; // $t0
// int z; // stack offset -8
/* end block 1 */
// End offset: 0x00035748
// End Line: 2575
/* begin block 2 */
// Start line: 6361
/* end block 2 */
// End Line: 6362
2020-04-04 06:49:28 +02:00
void ShowLight1 ( VECTOR * v1 , CVECTOR * col , short size , TEXTURE_DETAILS * texture )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
uchar uVar1 ;
uint uVar2 ;
int iVar3 ;
DB * pDVar4 ;
undefined4 in_zero ;
undefined4 in_at ;
uint * puVar5 ;
uint local_24 ;
undefined4 local_20 ;
uint local_1c ;
uint local_14 ;
undefined4 local_10 ;
uint local_c ;
int local_8 ;
uVar2 = - ( int ) size ;
puVar5 = ( uint * ) current - > primptr ;
local_c = local_c & 0xffff0000 ;
local_14 = local_14 & 0xffff0000 ;
local_1c = local_1c & 0xffff0000 ;
local_24 = local_24 & 0xffff0000 ;
local_20 = CONCAT22 ( ( short ) uVar2 , size ) ;
local_10 = CONCAT22 ( size , size ) ;
setCopReg ( 2 , in_zero , uVar2 & 0xffff | ( int ) size * - 0x10000 ) ;
setCopReg ( 2 , in_at , local_24 ) ;
setCopReg ( 2 , uVar2 , local_20 ) ;
setCopReg ( 2 , current , local_1c ) ;
setCopReg ( 2 , v1 , uVar2 & 0xffff | ( uint ) ( ushort ) size < < 0x10 ) ;
setCopReg ( 2 , col , local_14 ) ;
copFunction ( 2 , 0x280030 ) ;
* ( uchar * ) ( puVar5 + 3 ) = ( texture - > coords ) . u0 ;
* ( uchar * ) ( ( int ) puVar5 + 0xd ) = ( texture - > coords ) . v0 ;
* ( uchar * ) ( puVar5 + 5 ) = ( texture - > coords ) . u1 ;
* ( uchar * ) ( ( int ) puVar5 + 0x15 ) = ( texture - > coords ) . v1 ;
* ( uchar * ) ( puVar5 + 7 ) = ( texture - > coords ) . u2 ;
* ( uchar * ) ( ( int ) puVar5 + 0x1d ) = ( texture - > coords ) . v2 ;
* ( uchar * ) ( puVar5 + 9 ) = ( texture - > coords ) . u3 ;
uVar1 = ( texture - > coords ) . v3 ;
* ( char * ) ( ( int ) puVar5 + 3 ) = ' \t ' ;
* ( char * ) ( ( int ) puVar5 + 7 ) = ' . ' ;
* ( uchar * ) ( ( int ) puVar5 + 0x25 ) = uVar1 ;
* ( uchar * ) ( puVar5 + 1 ) = col - > r ;
* ( uchar * ) ( ( int ) puVar5 + 5 ) = col - > g ;
* ( uchar * ) ( ( int ) puVar5 + 6 ) = col - > b ;
uVar2 = getCopReg ( 2 , 0xc ) ;
puVar5 [ 2 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xd ) ;
puVar5 [ 4 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xe ) ;
puVar5 [ 6 ] = uVar2 ;
iVar3 = getCopReg ( 2 , 0x13 ) ;
if ( 0x27 < iVar3 ) {
setCopReg ( 2 , in_zero , local_10 ) ;
setCopReg ( 2 , in_at , local_c ) ;
copFunction ( 2 , 0x180001 ) ;
* ( ushort * ) ( ( int ) puVar5 + 0x16 ) = texture - > tpageid | 0x20 ;
* ( ushort * ) ( ( int ) puVar5 + 0xe ) = texture - > clutid ;
local_8 = ( iVar3 > > 3 ) + LightSortCorrect ;
if ( local_8 < 0 ) {
local_8 = 0 ;
}
uVar2 = getCopReg ( 2 , 0xe ) ;
puVar5 [ 8 ] = uVar2 ;
pDVar4 = current ;
* puVar5 = * puVar5 & 0xff000000 | current - > ot [ local_8 ] & 0xffffff ;
pDVar4 - > ot [ local_8 ] = pDVar4 - > ot [ local_8 ] & 0xff000000 | ( uint ) puVar5 & 0xffffff ;
pDVar4 - > primptr = pDVar4 - > primptr + 0x28 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ShowLight(struct VECTOR *v1 /*$s0*/, struct CVECTOR *col /*$s3*/, short size /*$s4*/, struct TEXTURE_DETAILS *texture /*$s2*/)
// line 2579, offset 0x00035750
/* begin block 1 */
// Start line: 2580
// Start offset: 0x00035750
// Variables:
// struct SVECTOR vert[4]; // stack offset -88
// struct POLY_FT4 *poly; // $s1
// int z; // stack offset -40
// int index; // $a1
// int tail_width; // $s5
/* begin block 1.1 */
// Start line: 2644
// Start offset: 0x00035A54
// Variables:
// int loop; // $a1
/* end block 1.1 */
// End offset: 0x00035AAC
// End Line: 2650
/* begin block 1.2 */
// Start line: 2654
// Start offset: 0x00035AD4
// Variables:
// struct POLY_G4 *poly1; // $s0
// int dx; // $a0
// int dy; // $v0
// int angle; // $v0
// int width; // $s2
// int c; // $a0
// int s; // $a2
// int length; // $v0
// struct SVECTOR tail; // stack offset -56
// struct SVECTOR head; // stack offset -48
/* end block 1.2 */
// End offset: 0x00035EB8
// End Line: 2709
/* begin block 1.3 */
// Start line: 2727
// Start offset: 0x00035F68
// Variables:
// int loop; // $a3
/* end block 1.3 */
// End offset: 0x00035FE8
// End Line: 2733
/* begin block 1.4 */
// Start line: 2737
// Start offset: 0x00036024
// Variables:
// struct POLY_G4 *poly1; // $s0
// int dx; // $a2
// int dy; // $a1
// int angle; // $v0
// int width; // $s1
// int c; // $a2
// int s; // $a1
// int length; // $v0
// struct SVECTOR tail; // stack offset -56
// struct SVECTOR head; // stack offset -48
/* end block 1.4 */
// End offset: 0x00036408
// End Line: 2792
/* end block 1 */
// End offset: 0x00036408
// End Line: 2794
/* begin block 2 */
// Start line: 6495
/* end block 2 */
// End Line: 6496
/* WARNING: Could not reconcile some variable overlaps */
2020-04-04 06:49:28 +02:00
void ShowLight ( VECTOR * v1 , CVECTOR * col , short size , TEXTURE_DETAILS * texture )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
uchar uVar1 ;
short sVar2 ;
short sVar3 ;
bool bVar4 ;
DB * pDVar5 ;
undefined4 in_zero ;
undefined4 in_at ;
undefined2 uVar6 ;
byte bVar7 ;
VECTOR * pVVar8 ;
LAMP_STREAK * pLVar9 ;
undefined2 * puVar10 ;
int iVar11 ;
CVECTOR * pCVar12 ;
int iVar13 ;
int iVar14 ;
int iVar15 ;
uint uVar16 ;
short * psVar17 ;
int iVar18 ;
char * pcVar19 ;
uint * puVar20 ;
uint * puVar21 ;
int iVar22 ;
int iVar23 ;
uint local_58 ;
undefined4 local_54 ;
undefined4 local_50 ;
undefined4 local_4c ;
uint local_48 ;
undefined4 local_44 ;
undefined4 local_40 ;
undefined4 local_3c ;
short local_38 ;
short local_36 ;
short local_30 ;
short local_2e ;
int local_28 ;
iVar22 = ( int ) size ;
pVVar8 = v1 ;
pCVar12 = col ;
Apply_Inv_CameraMatrix ( ) ;
setCopControlWord ( 2 , 0x2800 , v1 - > vx ) ;
setCopControlWord ( 2 , 0x3000 , v1 - > vy ) ;
setCopControlWord ( 2 , 0x3800 , v1 - > vz ) ;
setCopControlWord ( 2 , 0 , norot . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , norot . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , norot . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , norot . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , norot . _16_4_ ) ;
uVar16 = - iVar22 ;
local_3c = ( uint ) local_3c . _2_2_ < < 0x10 ;
local_44 = ( uint ) local_44 . _2_2_ < < 0x10 ;
local_4c = ( uint ) local_4c . _2_2_ < < 0x10 ;
local_54 = ( uint ) local_54 . _2_2_ < < 0x10 ;
local_50 = CONCAT22 ( ( short ) uVar16 , size ) ;
local_58 = uVar16 & 0xffff | iVar22 * - 0x10000 ;
local_40 = CONCAT22 ( size , size ) ;
local_48 = uVar16 & 0xffff | ( uint ) ( ushort ) size < < 0x10 ;
setCopReg ( 2 , in_zero , local_58 ) ;
setCopReg ( 2 , in_at , local_54 ) ;
setCopReg ( 2 , & local_58 , local_50 ) ;
setCopReg ( 2 , uVar16 , local_4c ) ;
setCopReg ( 2 , pVVar8 , local_48 ) ;
setCopReg ( 2 , pCVar12 , local_44 ) ;
copFunction ( 2 , 0x280030 ) ;
puVar21 = ( uint * ) current - > primptr ;
* ( uchar * ) ( puVar21 + 3 ) = ( texture - > coords ) . u0 ;
* ( uchar * ) ( ( int ) puVar21 + 0xd ) = ( texture - > coords ) . v0 ;
* ( uchar * ) ( puVar21 + 5 ) = ( texture - > coords ) . u1 ;
* ( uchar * ) ( ( int ) puVar21 + 0x15 ) = ( texture - > coords ) . v1 ;
* ( uchar * ) ( puVar21 + 7 ) = ( texture - > coords ) . u2 ;
* ( uchar * ) ( ( int ) puVar21 + 0x1d ) = ( texture - > coords ) . v2 ;
* ( uchar * ) ( puVar21 + 9 ) = ( texture - > coords ) . u3 ;
uVar1 = ( texture - > coords ) . v3 ;
* ( char * ) ( ( int ) puVar21 + 3 ) = ' \t ' ;
* ( char * ) ( ( int ) puVar21 + 7 ) = ' . ' ;
* ( uchar * ) ( ( int ) puVar21 + 0x25 ) = uVar1 ;
* ( uchar * ) ( puVar21 + 1 ) = col - > r ;
* ( uchar * ) ( ( int ) puVar21 + 5 ) = col - > g ;
* ( uchar * ) ( ( int ) puVar21 + 6 ) = col - > b ;
uVar16 = getCopReg ( 2 , 0xc ) ;
puVar21 [ 2 ] = uVar16 ;
uVar16 = getCopReg ( 2 , 0xd ) ;
puVar21 [ 4 ] = uVar16 ;
uVar16 = getCopReg ( 2 , 0xe ) ;
puVar21 [ 6 ] = uVar16 ;
iVar23 = getCopReg ( 2 , 0x13 ) ;
if ( 0x27 < iVar23 ) {
setCopReg ( 2 , in_zero , local_40 ) ;
setCopReg ( 2 , in_at , local_3c ) ;
copFunction ( 2 , 0x180001 ) ;
* ( ushort * ) ( ( int ) puVar21 + 0x16 ) = texture - > tpageid | 0x20 ;
* ( ushort * ) ( ( int ) puVar21 + 0xe ) = texture - > clutid ;
local_28 = ( iVar23 > > 3 ) + LightSortCorrect ;
if ( local_28 < 0 ) {
local_28 = 0 ;
}
uVar16 = getCopReg ( 2 , 0xe ) ;
puVar21 [ 8 ] = uVar16 ;
pDVar5 = current ;
if ( local_28 < 10000 ) {
iVar23 = ( int ) ( & DAT_00002710 + - local_28 ) > > 0xd ;
}
else {
iVar23 = 0 ;
}
* puVar21 = * puVar21 & 0xff000000 | current - > ot [ local_28 ] & 0xffffff ;
pDVar5 - > ot [ local_28 ] = pDVar5 - > ot [ local_28 ] & 0xff000000 | ( uint ) puVar21 & 0xffffff ;
bVar4 = 4 < CameraCnt ;
pDVar5 - > primptr = pDVar5 - > primptr + 0x28 ;
iVar18 = FrameCnt ;
iVar14 = LightIndex ;
if ( bVar4 ) {
bVar7 = col - > cd ;
iVar13 = - 1 ;
if ( ( ( bVar7 & 0x20 ) = = 0 ) | | ( gLightsOn = = 0 ) ) {
if ( ( bVar7 & 2 ) = = 0 ) {
if ( ( bVar7 & 4 ) = = 0 ) {
if ( ( bVar7 & 8 ) = = 0 ) {
if ( ( bVar7 & 0x10 ) ! = 0 ) {
iVar13 = 3 ;
}
}
else {
iVar13 = 2 ;
}
}
else {
iVar13 = 1 ;
}
}
else {
iVar13 = 0 ;
}
}
else {
if ( ( CameraChanged = = ' \0 ' ) & &
( ( int ) Known_Lamps [ LightIndex ] . clock = = ( FrameCnt & 0xffffU ) - 1 ) ) {
local_38 = Known_Lamps [ LightIndex ] . light_trails [ FrameCnt - 3U & 3 ] . x ;
local_36 = Known_Lamps [ LightIndex ] . light_trails [ FrameCnt - 3U & 3 ] . y ;
iVar13 = ( int ) * ( short * ) ( puVar21 + 2 ) + ( int ) * ( short * ) ( puVar21 + 8 ) > > 1 ;
local_30 = ( short ) iVar13 ;
sVar2 = * ( short * ) ( ( int ) puVar21 + 10 ) ;
sVar3 = * ( short * ) ( ( int ) puVar21 + 0x22 ) ;
Known_Lamps [ LightIndex ] . clock = ( short ) FrameCnt ;
iVar15 = ( int ) sVar2 + ( int ) sVar3 > > 1 ;
Known_Lamps [ iVar14 ] . light_trails [ iVar18 & 3 ] . x = local_30 ;
iVar13 = local_38 - iVar13 ;
if ( iVar13 < 0 ) {
iVar13 = - iVar13 ;
}
local_2e = ( short ) iVar15 ;
Known_Lamps [ iVar14 ] . light_trails [ FrameCnt & 3 ] . y = local_2e ;
iVar15 = local_36 - iVar15 ;
if ( iVar15 < 0 ) {
iVar15 = - iVar15 ;
}
iVar14 = ( int ) * ( short * ) ( puVar21 + 2 ) - ( int ) * ( short * ) ( puVar21 + 8 ) ;
if ( iVar14 < 0 ) {
iVar14 = - iVar14 ;
}
if ( ( 1 < iVar22 ) & & ( 1 < iVar13 + iVar15 ) ) {
puVar20 = ( uint * ) pDVar5 - > primptr ;
uVar6 = ( undefined2 ) ( ( int ) * ( short * ) ( puVar21 + 2 ) + ( int ) * ( short * ) ( puVar21 + 8 ) > > 1 ) ;
* ( undefined2 * ) ( puVar20 + 4 ) = uVar6 ;
* ( undefined2 * ) ( puVar20 + 2 ) = uVar6 ;
iVar18 = ratan2 ( ( int ) local_38 - ( int ) local_30 , ( int ) local_36 - ( int ) local_2e ) ;
if ( ( col - > cd & 0x40 ) = = 0 ) {
uVar16 = - iVar18 & 0xfff ;
iVar18 = rcossin_tbl [ uVar16 * 2 + 1 ] * iVar14 * 3 > > 0xf ;
iVar14 = rcossin_tbl [ uVar16 * 2 ] * iVar14 * 3 > > 0xf ;
}
else {
uVar16 = - iVar18 & 0xfff ;
iVar18 = rcossin_tbl [ uVar16 * 2 + 1 ] * iVar14 * 3 > > 0x10 ;
iVar14 = rcossin_tbl [ uVar16 * 2 ] * iVar14 * 3 > > 0x10 ;
}
puVar20 [ 2 ] = ( local_2e + iVar14 ) * 0x10000 + local_30 + iVar18 ;
puVar20 [ 4 ] = ( local_2e - iVar14 ) * 0x10000 + ( local_30 - iVar18 ) ;
puVar20 [ 6 ] = ( local_36 - iVar23 ) * 0x10000 + ( int ) local_38 ;
* ( char * ) ( ( int ) puVar20 + 3 ) = ' \b ' ;
* ( char * ) ( ( int ) puVar20 + 7 ) = ' : ' ;
puVar20 [ 8 ] = ( local_36 + iVar23 ) * 0x10000 + ( int ) local_38 ;
* ( uchar * ) ( puVar20 + 1 ) = col - > r > > 1 ;
* ( byte * ) ( ( int ) puVar20 + 5 ) = col - > g > > 1 ;
* ( byte * ) ( ( int ) puVar20 + 6 ) = col - > b > > 1 ;
* ( uchar * ) ( puVar20 + 3 ) = col - > r > > 1 ;
* ( byte * ) ( ( int ) puVar20 + 0xd ) = col - > g > > 1 ;
bVar7 = col - > b ;
* ( char * ) ( puVar20 + 5 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar20 + 0x15 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar20 + 0x16 ) = ' \0 ' ;
* ( char * ) ( puVar20 + 7 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar20 + 0x1d ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar20 + 0x1e ) = ' \0 ' ;
* ( byte * ) ( ( int ) puVar20 + 0xe ) = bVar7 > > 1 ;
pDVar5 = current ;
* puVar20 = * puVar20 & 0xff000000 | current - > ot [ local_28 ] & 0xffffff ;
pDVar5 - > ot [ local_28 ] = pDVar5 - > ot [ local_28 ] & 0xff000000 | ( uint ) puVar20 & 0xffffff ;
pcVar19 = pDVar5 - > primptr ;
pDVar5 - > primptr = pcVar19 + 0x24 ;
pcVar19 [ 0x27 ] = ' \a ' ;
pcVar19 [ 0x2b ] = ' $ ' ;
pDVar5 = current ;
* ( undefined2 * ) ( pcVar19 + 0x2c ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x2e ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x34 ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x36 ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x3c ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x3e ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x3a ) = 0x20 ;
* ( uint * ) ( pcVar19 + 0x24 ) =
* ( uint * ) ( pcVar19 + 0x24 ) & 0xff000000 | pDVar5 - > ot [ local_28 ] & 0xffffff ;
pDVar5 - > ot [ local_28 ] =
pDVar5 - > ot [ local_28 ] & 0xff000000 | ( uint ) ( pcVar19 + 0x24 ) & 0xffffff ;
pDVar5 - > primptr = pDVar5 - > primptr + 0x20 ;
}
}
else {
iVar14 = 3 ;
pLVar9 = Known_Lamps + LightIndex ;
do {
pLVar9 - > light_trails [ 0 ] . x =
( short ) ( ( int ) * ( short * ) ( puVar21 + 2 ) + ( int ) * ( short * ) ( puVar21 + 8 ) > > 1 ) ;
iVar14 = iVar14 + - 1 ;
pLVar9 - > light_trails [ 0 ] . y =
( short ) ( ( int ) * ( short * ) ( ( int ) puVar21 + 10 ) + ( int ) * ( short * ) ( ( int ) puVar21 + 0x22 )
> > 1 ) ;
pLVar9 = ( LAMP_STREAK * ) ( pLVar9 - > light_trails + 1 ) ;
} while ( - 1 < iVar14 ) ;
Known_Lamps [ LightIndex ] . clock = ( short ) FrameCnt ;
}
iVar13 = - 1 ;
}
iVar18 = FrameCnt ;
iVar14 = gcar_num ;
if ( - 1 < iVar13 ) {
if ( ( CameraChanged = = ' \0 ' ) & &
( psVar17 = car_data [ gcar_num ] . ap . old_clock + iVar13 ,
( int ) * psVar17 = = ( FrameCnt & 0xffffU ) - 1 ) ) {
local_38 = car_data [ gcar_num ] . ap . light_trails [ iVar13 * 4 + ( FrameCnt - 3U & 3 ) ] . x ;
local_36 = car_data [ gcar_num ] . ap . light_trails [ iVar13 * 4 + ( FrameCnt - 3U & 3 ) ] . y ;
iVar11 = ( int ) * ( short * ) ( puVar21 + 2 ) + ( int ) * ( short * ) ( puVar21 + 8 ) > > 1 ;
local_30 = ( short ) iVar11 ;
sVar2 = * ( short * ) ( ( int ) puVar21 + 10 ) ;
sVar3 = * ( short * ) ( ( int ) puVar21 + 0x22 ) ;
iVar11 = local_38 - iVar11 ;
* psVar17 = ( short ) FrameCnt ;
iVar15 = ( int ) sVar2 + ( int ) sVar3 > > 1 ;
car_data [ iVar14 ] . ap . light_trails [ iVar13 * 4 + ( iVar18 & 3U ) ] . x = local_30 ;
iVar18 = iVar11 ;
if ( iVar11 < 0 ) {
iVar18 = - iVar11 ;
}
local_2e = ( short ) iVar15 ;
car_data [ iVar14 ] . ap . light_trails [ iVar13 * 4 + ( FrameCnt & 3U ) ] . y = local_2e ;
iVar15 = local_36 - iVar15 ;
iVar14 = ( int ) * ( short * ) ( puVar21 + 2 ) - ( int ) * ( short * ) ( puVar21 + 8 ) ;
if ( iVar14 < 0 ) {
iVar14 = - iVar14 ;
}
if ( iVar15 < 0 ) {
iVar15 = - iVar15 ;
}
if ( iVar22 < 2 ) {
return ;
}
if ( iVar18 + iVar15 < 2 ) {
return ;
}
puVar21 = ( uint * ) current - > primptr ;
iVar22 = ratan2 ( iVar11 ) ;
iVar18 = rcossin_tbl [ ( - iVar22 & 0xfffU ) * 2 + 1 ] * iVar14 * 3 > > 0xf ;
iVar22 = rcossin_tbl [ ( - iVar22 & 0xfffU ) * 2 ] * iVar14 * 3 > > 0xf ;
puVar21 [ 2 ] = ( local_2e + iVar22 ) * 0x10000 + local_30 + iVar18 ;
puVar21 [ 4 ] = ( local_2e - iVar22 ) * 0x10000 + ( local_30 - iVar18 ) ;
puVar21 [ 6 ] = ( local_36 - iVar23 ) * 0x10000 + ( int ) local_38 ;
* ( char * ) ( ( int ) puVar21 + 3 ) = ' \b ' ;
* ( char * ) ( ( int ) puVar21 + 7 ) = ' : ' ;
puVar21 [ 8 ] = ( local_36 + iVar23 ) * 0x10000 + ( int ) local_38 ;
if ( ( col - > cd & 0x18 ) = = 0 ) {
* ( uchar * ) ( puVar21 + 1 ) = col - > r ;
* ( uchar * ) ( ( int ) puVar21 + 5 ) = col - > g ;
* ( uchar * ) ( ( int ) puVar21 + 6 ) = col - > b ;
* ( uchar * ) ( puVar21 + 3 ) = col - > r ;
* ( uchar * ) ( ( int ) puVar21 + 0xd ) = col - > g ;
bVar7 = col - > b ;
}
else {
* ( uchar * ) ( puVar21 + 1 ) = col - > r > > 1 ;
* ( byte * ) ( ( int ) puVar21 + 5 ) = col - > g > > 1 ;
* ( byte * ) ( ( int ) puVar21 + 6 ) = col - > b > > 1 ;
* ( uchar * ) ( puVar21 + 3 ) = col - > r > > 1 ;
* ( byte * ) ( ( int ) puVar21 + 0xd ) = col - > g > > 1 ;
bVar7 = col - > b > > 1 ;
}
* ( byte * ) ( ( int ) puVar21 + 0xe ) = bVar7 ;
* ( char * ) ( puVar21 + 5 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar21 + 0x15 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar21 + 0x16 ) = ' \0 ' ;
* ( char * ) ( puVar21 + 7 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar21 + 0x1d ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar21 + 0x1e ) = ' \0 ' ;
pDVar5 = current ;
* puVar21 = * puVar21 & 0xff000000 | current - > ot [ local_28 ] & 0xffffff ;
pDVar5 - > ot [ local_28 ] = pDVar5 - > ot [ local_28 ] & 0xff000000 | ( uint ) puVar21 & 0xffffff ;
pcVar19 = pDVar5 - > primptr ;
pDVar5 - > primptr = pcVar19 + 0x24 ;
pcVar19 [ 0x27 ] = ' \a ' ;
pcVar19 [ 0x2b ] = ' $ ' ;
pDVar5 = current ;
* ( undefined2 * ) ( pcVar19 + 0x2c ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x2e ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x34 ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x36 ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x3c ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x3e ) = 0xffff ;
* ( undefined2 * ) ( pcVar19 + 0x3a ) = 0x20 ;
* ( uint * ) ( pcVar19 + 0x24 ) =
* ( uint * ) ( pcVar19 + 0x24 ) & 0xff000000 | pDVar5 - > ot [ local_28 ] & 0xffffff ;
pDVar5 - > ot [ local_28 ] =
pDVar5 - > ot [ local_28 ] & 0xff000000 | ( uint ) ( pcVar19 + 0x24 ) & 0xffffff ;
pDVar5 - > primptr = pDVar5 - > primptr + 0x20 ;
return ;
}
iVar22 = 3 ;
psVar17 = & car_data [ gcar_num ] . ap . light_trails [ iVar13 * 4 ] . y ;
iVar23 = iVar13 * 0x10 + gcar_num * 0x29c ;
do {
puVar10 = ( undefined2 * ) ( ( int ) & car_data [ 0 ] . ap . light_trails [ 0 ] . x + iVar23 ) ;
iVar23 = iVar23 + 4 ;
* puVar10 = ( short ) ( ( int ) * ( short * ) ( puVar21 + 2 ) + ( int ) * ( short * ) ( puVar21 + 8 ) > > 1 ) ;
iVar22 = iVar22 + - 1 ;
* psVar17 = ( short ) ( ( int ) * ( short * ) ( ( int ) puVar21 + 10 ) +
( int ) * ( short * ) ( ( int ) puVar21 + 0x22 ) > > 1 ) ;
psVar17 = psVar17 + 2 ;
} while ( - 1 < iVar22 ) ;
car_data [ gcar_num ] . ap . old_clock [ iVar13 ] = ( short ) FrameCnt ;
}
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ShowGroundLight(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$a1*/, short size /*$a2*/)
// line 2804, offset 0x0003642c
/* begin block 1 */
// Start line: 2805
// Start offset: 0x0003642C
// Variables:
// struct SVECTOR vert[4]; // stack offset -40
// struct POLY_FT4 *poly; // $t0
// int z; // stack offset -8
/* end block 1 */
// End offset: 0x00036680
// End Line: 2858
/* begin block 2 */
// Start line: 7136
/* end block 2 */
// End Line: 7137
2020-04-04 06:49:28 +02:00
void ShowGroundLight ( VECTOR * v1 , CVECTOR * col , short size )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
ushort uVar1 ;
DB * pDVar2 ;
ushort uVar3 ;
undefined4 in_zero ;
undefined4 in_at ;
uint uVar4 ;
uint uVar5 ;
uint uVar6 ;
int iVar7 ;
uint * puVar8 ;
undefined4 local_28 ;
uint local_24 ;
uint local_1c ;
undefined4 local_18 ;
uint local_14 ;
uint local_c ;
iVar7 = ( int ) size ;
setCopControlWord ( 2 , 0 , inv_camera_matrix . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , inv_camera_matrix . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , inv_camera_matrix . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , inv_camera_matrix . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , inv_camera_matrix . _16_4_ ) ;
setCopControlWord ( 2 , 0x2800 , dummy . vx ) ;
setCopControlWord ( 2 , 0x3000 , dummy . vy ) ;
setCopControlWord ( 2 , 0x3800 , dummy . vz ) ;
uVar1 = * ( ushort * ) & v1 - > vy ;
size = * ( ushort * ) & v1 - > vx - size ;
uVar6 = iVar7 + ( uint ) * ( ushort * ) & v1 - > vz ;
uVar4 = iVar7 + ( uint ) * ( ushort * ) & v1 - > vx ;
uVar5 = ( uint ) * ( ushort * ) & v1 - > vz - iVar7 ;
local_28 = CONCAT22 ( uVar1 , size ) ;
local_24 = local_24 & 0xffff0000 | uVar6 & 0xffff ;
local_1c = local_1c & 0xffff0000 | uVar6 & 0xffff ;
local_18 = CONCAT22 ( uVar1 , size ) ;
local_14 = local_14 & 0xffff0000 | uVar5 & 0xffff ;
local_c = local_c & 0xffff0000 | uVar5 & 0xffff ;
setCopReg ( 2 , in_zero , local_28 ) ;
setCopReg ( 2 , in_at , local_24 ) ;
setCopReg ( 2 , uVar4 , uVar4 & 0xffff | ( uint ) uVar1 < < 0x10 ) ;
setCopReg ( 2 , uVar5 , local_1c ) ;
setCopReg ( 2 , uVar6 , local_18 ) ;
setCopReg ( 2 , col , local_14 ) ;
copFunction ( 2 , 0x280030 ) ;
puVar8 = ( uint * ) current - > primptr ;
* ( char * ) ( ( int ) puVar8 + 3 ) = ' \t ' ;
* ( char * ) ( ( int ) puVar8 + 7 ) = ' , ' ;
* ( uchar * ) ( puVar8 + 3 ) = light_texture . coords . u0 ;
* ( uchar * ) ( ( int ) puVar8 + 0xd ) = light_texture . coords . v0 ;
* ( uchar * ) ( puVar8 + 5 ) = light_texture . coords . u1 ;
* ( uchar * ) ( ( int ) puVar8 + 0x15 ) = light_texture . coords . v1 ;
* ( uchar * ) ( puVar8 + 7 ) = light_texture . coords . u2 ;
* ( uchar * ) ( ( int ) puVar8 + 0x1d ) = light_texture . coords . v2 ;
* ( uchar * ) ( puVar8 + 9 ) = light_texture . coords . u3 ;
* ( uchar * ) ( ( int ) puVar8 + 0x25 ) = light_texture . coords . v3 ;
* ( ushort * ) ( ( int ) puVar8 + 0x16 ) = light_texture . tpageid | 0x20 ;
uVar3 = light_texture . clutid ;
* ( char * ) ( ( int ) puVar8 + 7 ) = ' . ' ;
* ( ushort * ) ( ( int ) puVar8 + 0xe ) = uVar3 ;
* ( uchar * ) ( puVar8 + 1 ) = col - > r ;
* ( uchar * ) ( ( int ) puVar8 + 5 ) = col - > g ;
* ( uchar * ) ( ( int ) puVar8 + 6 ) = col - > b ;
iVar7 = getCopReg ( 2 , 0x13 ) ;
if ( iVar7 - 0x96U < 0x267b ) {
uVar5 = getCopReg ( 2 , 0xc ) ;
puVar8 [ 2 ] = uVar5 ;
uVar5 = getCopReg ( 2 , 0xd ) ;
puVar8 [ 4 ] = uVar5 ;
uVar5 = getCopReg ( 2 , 0xe ) ;
puVar8 [ 6 ] = uVar5 ;
pDVar2 = current ;
setCopReg ( 2 , in_zero , uVar4 & 0xffff | ( uint ) uVar1 < < 0x10 ) ;
setCopReg ( 2 , in_at , local_c ) ;
copFunction ( 2 , 0x180001 ) ;
* puVar8 = * puVar8 & 0xff000000 | current - > ot [ iVar7 > > 3 ] & 0xffffff ;
pDVar2 - > ot [ iVar7 > > 3 ] = pDVar2 - > ot [ iVar7 > > 3 ] & 0xff000000 | ( uint ) puVar8 & 0xffffff ;
pDVar2 - > primptr = pDVar2 - > primptr + 0x28 ;
uVar4 = getCopReg ( 2 , 0xe ) ;
puVar8 [ 8 ] = uVar4 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ RoundShadow(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$a1*/, short size /*$a2*/)
// line 2869, offset 0x00036688
/* begin block 1 */
// Start line: 2870
// Start offset: 0x00036688
// Variables:
// struct SVECTOR vert[4]; // stack offset -40
// struct POLY_FT4 *poly; // $t0
// int z; // stack offset -8
/* end block 1 */
// End offset: 0x000368D0
// End Line: 2933
/* begin block 2 */
// Start line: 7286
/* end block 2 */
// End Line: 7287
2020-04-04 06:49:28 +02:00
void RoundShadow ( VECTOR * v1 , CVECTOR * col , short size )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
ushort uVar1 ;
DB * pDVar2 ;
ushort uVar3 ;
undefined4 in_zero ;
undefined4 in_at ;
uint uVar4 ;
uint uVar5 ;
uint uVar6 ;
int iVar7 ;
uint * puVar8 ;
undefined4 local_28 ;
uint local_24 ;
uint local_1c ;
undefined4 local_18 ;
uint local_14 ;
uint local_c ;
iVar7 = ( int ) size ;
setCopControlWord ( 2 , 0 , inv_camera_matrix . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , inv_camera_matrix . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , inv_camera_matrix . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , inv_camera_matrix . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , inv_camera_matrix . _16_4_ ) ;
setCopControlWord ( 2 , 0x2800 , dummy . vx ) ;
setCopControlWord ( 2 , 0x3000 , dummy . vy ) ;
setCopControlWord ( 2 , 0x3800 , dummy . vz ) ;
uVar1 = * ( ushort * ) & v1 - > vy ;
size = * ( ushort * ) & v1 - > vx - size ;
uVar6 = iVar7 + ( uint ) * ( ushort * ) & v1 - > vz ;
uVar4 = iVar7 + ( uint ) * ( ushort * ) & v1 - > vx ;
uVar5 = ( uint ) * ( ushort * ) & v1 - > vz - iVar7 ;
local_28 = CONCAT22 ( uVar1 , size ) ;
local_24 = local_24 & 0xffff0000 | uVar6 & 0xffff ;
local_1c = local_1c & 0xffff0000 | uVar6 & 0xffff ;
local_18 = CONCAT22 ( uVar1 , size ) ;
local_14 = local_14 & 0xffff0000 | uVar5 & 0xffff ;
local_c = local_c & 0xffff0000 | uVar5 & 0xffff ;
setCopReg ( 2 , in_zero , local_28 ) ;
setCopReg ( 2 , in_at , local_24 ) ;
setCopReg ( 2 , uVar4 , uVar4 & 0xffff | ( uint ) uVar1 < < 0x10 ) ;
setCopReg ( 2 , uVar5 , local_1c ) ;
setCopReg ( 2 , uVar6 , local_18 ) ;
setCopReg ( 2 , col , local_14 ) ;
copFunction ( 2 , 0x280030 ) ;
puVar8 = ( uint * ) current - > primptr ;
* ( uchar * ) ( puVar8 + 3 ) = light_texture . coords . u0 ;
* ( uchar * ) ( ( int ) puVar8 + 0xd ) = light_texture . coords . v0 ;
* ( uchar * ) ( puVar8 + 5 ) = light_texture . coords . u1 ;
* ( uchar * ) ( ( int ) puVar8 + 0x15 ) = light_texture . coords . v1 ;
* ( uchar * ) ( puVar8 + 7 ) = light_texture . coords . u2 ;
* ( uchar * ) ( ( int ) puVar8 + 0x1d ) = light_texture . coords . v2 ;
* ( uchar * ) ( puVar8 + 9 ) = light_texture . coords . u3 ;
* ( uchar * ) ( ( int ) puVar8 + 0x25 ) = light_texture . coords . v3 ;
* ( ushort * ) ( ( int ) puVar8 + 0x16 ) = light_texture . tpageid | 0x40 ;
uVar3 = light_texture . clutid ;
* ( char * ) ( ( int ) puVar8 + 3 ) = ' \t ' ;
* ( char * ) ( ( int ) puVar8 + 7 ) = ' . ' ;
* ( ushort * ) ( ( int ) puVar8 + 0xe ) = uVar3 ;
* ( uchar * ) ( puVar8 + 1 ) = col - > r ;
* ( uchar * ) ( ( int ) puVar8 + 5 ) = col - > g ;
* ( uchar * ) ( ( int ) puVar8 + 6 ) = col - > b ;
iVar7 = getCopReg ( 2 , 0x13 ) ;
if ( iVar7 - 0x96U < 0x267b ) {
uVar5 = getCopReg ( 2 , 0xc ) ;
puVar8 [ 2 ] = uVar5 ;
uVar5 = getCopReg ( 2 , 0xd ) ;
puVar8 [ 4 ] = uVar5 ;
uVar5 = getCopReg ( 2 , 0xe ) ;
puVar8 [ 6 ] = uVar5 ;
pDVar2 = current ;
setCopReg ( 2 , in_zero , uVar4 & 0xffff | ( uint ) uVar1 < < 0x10 ) ;
setCopReg ( 2 , in_at , local_c ) ;
copFunction ( 2 , 0x180001 ) ;
* puVar8 = * puVar8 & 0xff000000 | current - > ot [ iVar7 > > 3 ] & 0xffffff ;
pDVar2 - > ot [ iVar7 > > 3 ] = pDVar2 - > ot [ iVar7 > > 3 ] & 0xff000000 | ( uint ) puVar8 & 0xffffff ;
pDVar2 - > primptr = pDVar2 - > primptr + 0x28 ;
uVar4 = getCopReg ( 2 , 0xe ) ;
puVar8 [ 8 ] = uVar4 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ShowFlare(struct VECTOR *v1 /*$a0*/, struct CVECTOR *col /*$s2*/, short size /*$a2*/, int rotation /*$a3*/)
// line 2945, offset 0x000368d8
/* begin block 1 */
// Start line: 2946
// Start offset: 0x000368D8
// Variables:
// struct SVECTOR vert[4]; // stack offset -96
// struct POLY_FT4 *poly; // $t0
// struct SVECTOR direction; // stack offset -64
// struct MATRIX temp_matrix; // stack offset -56
// int z; // stack offset -24
/* end block 1 */
// End offset: 0x00036B54
// End Line: 3016
/* begin block 2 */
// Start line: 7488
/* end block 2 */
// End Line: 7489
/* WARNING: Could not reconcile some variable overlaps */
2020-04-04 06:49:28 +02:00
void ShowFlare ( VECTOR * v1 , CVECTOR * col , short size , int rotation )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
uint uVar2 ;
DB * pDVar3 ;
uchar uVar4 ;
undefined4 in_zero ;
undefined4 in_at ;
short sVar5 ;
undefined4 in_v1 ;
MATRIX * m ;
SVECTOR * r ;
uint * puVar6 ;
undefined4 local_60 ;
undefined4 local_5c ;
undefined4 local_58 ;
undefined4 local_54 ;
undefined4 local_50 ;
undefined4 local_4c ;
undefined4 local_48 ;
undefined4 local_44 ;
SVECTOR local_40 ;
undefined4 local_38 ;
undefined4 local_34 ;
undefined4 local_30 ;
undefined4 local_2c ;
undefined4 local_28 ;
int local_18 ;
setCopControlWord ( 2 , 0x2800 , v1 - > vx ) ;
setCopControlWord ( 2 , 0x3000 , v1 - > vy ) ;
setCopControlWord ( 2 , 0x3800 , v1 - > vz ) ;
m = ( MATRIX * ) & local_38 ;
r = & local_40 ;
local_40 . vy = 0 ;
local_40 . vx = 0 ;
local_40 . vz = ( short ) rotation ;
RotMatrixXYZ ( m , r ) ;
setCopControlWord ( 2 , 0 , local_38 ) ;
setCopControlWord ( 2 , 0x800 , local_34 ) ;
setCopControlWord ( 2 , 0x1000 , local_30 ) ;
setCopControlWord ( 2 , 0x1800 , local_2c ) ;
setCopControlWord ( 2 , 0x2000 , local_28 ) ;
sVar5 = - size ;
local_60 = CONCAT22 ( sVar5 , sVar5 ) ;
local_5c = ( uint ) local_5c . _2_2_ < < 0x10 ;
local_58 = CONCAT22 ( sVar5 , size ) ;
local_54 = ( uint ) local_54 . _2_2_ < < 0x10 ;
local_50 = CONCAT22 ( size , sVar5 ) ;
local_4c = ( uint ) local_4c . _2_2_ < < 0x10 ;
local_48 = CONCAT22 ( size , size ) ;
local_44 = ( uint ) local_44 . _2_2_ < < 0x10 ;
setCopReg ( 2 , in_zero , local_60 ) ;
setCopReg ( 2 , in_at , local_5c ) ;
setCopReg ( 2 , & local_60 , local_58 ) ;
setCopReg ( 2 , in_v1 , local_54 ) ;
setCopReg ( 2 , m , local_50 ) ;
setCopReg ( 2 , r , local_4c ) ;
copFunction ( 2 , 0x280030 ) ;
puVar6 = ( uint * ) current - > primptr ;
* ( uchar * ) ( puVar6 + 3 ) = flare_texture . coords . u0 ;
* ( uchar * ) ( ( int ) puVar6 + 0xd ) = flare_texture . coords . v0 ;
* ( uchar * ) ( puVar6 + 5 ) = flare_texture . coords . u1 ;
* ( uchar * ) ( ( int ) puVar6 + 0x15 ) = flare_texture . coords . v1 ;
* ( uchar * ) ( puVar6 + 7 ) = flare_texture . coords . u2 ;
* ( char * ) ( ( int ) puVar6 + 0x1d ) = flare_texture . coords . v2 + - 1 ;
* ( uchar * ) ( puVar6 + 9 ) = flare_texture . coords . u3 ;
uVar4 = flare_texture . coords . v3 ;
* ( char * ) ( ( int ) puVar6 + 3 ) = ' \t ' ;
* ( char * ) ( ( int ) puVar6 + 7 ) = ' . ' ;
* ( char * ) ( ( int ) puVar6 + 0x25 ) = uVar4 + - 1 ;
* ( uchar * ) ( puVar6 + 1 ) = col - > r > > 1 ;
* ( byte * ) ( ( int ) puVar6 + 5 ) = col - > g > > 1 ;
* ( byte * ) ( ( int ) puVar6 + 6 ) = col - > b > > 1 ;
iVar1 = getCopReg ( 2 , 0x13 ) ;
if ( 0x27 < iVar1 > > 3 ) {
local_18 = ( iVar1 > > 3 ) + LightSortCorrect ;
if ( local_18 < 1 ) {
local_18 = 1 ;
}
uVar2 = getCopReg ( 2 , 0xc ) ;
puVar6 [ 2 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xd ) ;
puVar6 [ 4 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xe ) ;
puVar6 [ 6 ] = uVar2 ;
pDVar3 = current ;
setCopReg ( 2 , in_zero , local_48 ) ;
setCopReg ( 2 , in_at , local_44 ) ;
copFunction ( 2 , 0x180001 ) ;
* ( ushort * ) ( ( int ) puVar6 + 0x16 ) = flare_texture . tpageid | 0x20 ;
* ( ushort * ) ( ( int ) puVar6 + 0xe ) = flare_texture . clutid ;
* puVar6 = * puVar6 & 0xff000000 | pDVar3 - > ot [ local_18 ] & 0xffffff ;
pDVar3 - > ot [ local_18 ] = pDVar3 - > ot [ local_18 ] & 0xff000000 | ( uint ) puVar6 & 0xffffff ;
pDVar3 - > primptr = pDVar3 - > primptr + 0x28 ;
uVar2 = getCopReg ( 2 , 0xe ) ;
puVar6 [ 8 ] = uVar2 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DisplayWater(struct SMOKE *smoke /*$a0*/)
// line 3029, offset 0x00036b6c
/* begin block 1 */
// Start line: 3030
// Start offset: 0x00036B6C
// Variables:
// struct POLY_FT4 *poly; // $t1
// struct VECTOR v; // stack offset -64
// struct SVECTOR vert[4]; // stack offset -48
// int size; // $t1
// int z; // $v0
// int z1; // stack offset -16
// int z2; // stack offset -12
// int z3; // stack offset -8
// int z4; // stack offset -4
/* end block 1 */
// End offset: 0x00036E18
// End Line: 3087
/* begin block 2 */
// Start line: 7696
/* end block 2 */
// End Line: 7697
/* begin block 3 */
// Start line: 7703
/* end block 3 */
// End Line: 7704
void DisplayWater ( SMOKE * smoke )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
short sVar1 ;
short sVar2 ;
uint uVar3 ;
int iVar4 ;
int iVar5 ;
int iVar6 ;
DB * pDVar7 ;
undefined4 in_zero ;
undefined4 in_at ;
ushort uVar8 ;
int iVar9 ;
uint uVar10 ;
ushort uVar11 ;
short sVar12 ;
uint * puVar13 ;
undefined4 local_30 ;
uint local_2c ;
uint local_24 ;
undefined4 local_20 ;
uint local_1c ;
uint local_14 ;
setCopControlWord ( 2 , 0 , inv_camera_matrix . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , inv_camera_matrix . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , inv_camera_matrix . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , inv_camera_matrix . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , inv_camera_matrix . _16_4_ ) ;
setCopControlWord ( 2 , 0x2800 , dummy . vx ) ;
setCopControlWord ( 2 , 0x3000 , dummy . vy ) ;
setCopControlWord ( 2 , 0x3800 , dummy . vz ) ;
sVar1 = smoke - > start_w ;
uVar8 = * ( ushort * ) & ( smoke - > position ) . vx ;
sVar12 = ( uVar8 - sVar1 ) - ( ushort ) camera_position . vx ;
uVar11 = 0x32 - ( short ) camera_position . vy ;
local_30 = CONCAT22 ( uVar11 , sVar12 ) ;
sVar2 = * ( short * ) & ( smoke - > position ) . vz ;
uVar10 = ( ( uint ) uVar8 + ( int ) sVar1 ) - ( uint ) ( ushort ) camera_position . vx ;
local_20 = CONCAT22 ( uVar11 , sVar12 ) ;
uVar8 = ( sVar2 + sVar1 ) - ( ushort ) camera_position . vz ;
local_2c = local_2c & 0xffff0000 | ( uint ) uVar8 ;
local_24 = local_24 & 0xffff0000 | ( uint ) uVar8 ;
uVar8 = ( sVar2 - sVar1 ) - ( ushort ) camera_position . vz ;
local_1c = local_1c & 0xffff0000 | ( uint ) uVar8 ;
local_14 = local_14 & 0xffff0000 | ( uint ) uVar8 ;
puVar13 = ( uint * ) current - > primptr ;
setCopReg ( 2 , in_zero , local_30 ) ;
setCopReg ( 2 , in_at , local_2c ) ;
setCopReg ( 2 , current , uVar10 & 0xffff | ( uint ) uVar11 < < 0x10 ) ;
setCopReg ( 2 , & local_30 , local_24 ) ;
setCopReg ( 2 , ( uint ) ( ushort ) camera_position . vz , local_20 ) ;
setCopReg ( 2 , uVar10 , local_1c ) ;
copFunction ( 2 , 0x280030 ) ;
* ( char * ) ( ( int ) puVar13 + 7 ) = ' , ' ;
* ( char * ) ( ( int ) puVar13 + 3 ) = ' \t ' ;
* ( char * ) ( puVar13 + 1 ) = ( char ) NightAmbient ;
* ( char * ) ( ( int ) puVar13 + 5 ) = ( char ) NightAmbient ;
* ( char * ) ( ( int ) puVar13 + 6 ) = ( char ) NightAmbient ;
* ( ushort * ) ( ( int ) puVar13 + 0x16 ) = sea_texture . tpageid ;
uVar3 = getCopReg ( 2 , 0xc ) ;
puVar13 [ 2 ] = uVar3 ;
uVar3 = getCopReg ( 2 , 0xd ) ;
puVar13 [ 4 ] = uVar3 ;
uVar3 = getCopReg ( 2 , 0xe ) ;
puVar13 [ 6 ] = uVar3 ;
iVar9 = getCopReg ( 2 , 0x11 ) ;
iVar4 = getCopReg ( 2 , 0x12 ) ;
iVar5 = getCopReg ( 2 , 0x13 ) ;
setCopReg ( 2 , in_zero , uVar10 & 0xffff | ( uint ) uVar11 < < 0x10 ) ;
setCopReg ( 2 , in_at , local_14 ) ;
copFunction ( 2 , 0x180001 ) ;
* ( uchar * ) ( puVar13 + 3 ) = sea_texture . coords . u0 ;
* ( uchar * ) ( ( int ) puVar13 + 0xd ) = sea_texture . coords . v0 ;
* ( uchar * ) ( puVar13 + 5 ) = sea_texture . coords . u1 ;
* ( uchar * ) ( ( int ) puVar13 + 0x15 ) = sea_texture . coords . v1 ;
* ( uchar * ) ( puVar13 + 7 ) = sea_texture . coords . u2 ;
* ( uchar * ) ( ( int ) puVar13 + 0x1d ) = sea_texture . coords . v2 ;
* ( uchar * ) ( puVar13 + 9 ) = sea_texture . coords . u3 ;
* ( uchar * ) ( ( int ) puVar13 + 0x25 ) = sea_texture . coords . v3 ;
* ( ushort * ) ( ( int ) puVar13 + 0xe ) = sea_texture . clutid ;
pDVar7 = current ;
iVar6 = getCopReg ( 2 , 0x13 ) ;
iVar9 = iVar9 + iVar4 + iVar5 + iVar6 > > 5 ;
if ( iVar9 < 9 ) {
iVar9 = 9 ;
}
* puVar13 = * puVar13 & 0xff000000 | current - > ot [ iVar9 ] & 0xffffff ;
pDVar7 - > ot [ iVar9 ] = pDVar7 - > ot [ iVar9 ] & 0xff000000 | ( uint ) puVar13 & 0xffffff ;
uVar3 = getCopReg ( 2 , 0xe ) ;
puVar13 [ 8 ] = uVar3 ;
current - > primptr = current - > primptr + 0x28 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DisplaySpark(struct SMOKE *spark /*$t1*/)
// line 3102, offset 0x00036e18
/* begin block 1 */
// Start line: 3103
// Start offset: 0x00036E18
// Variables:
// int z; // stack offset -8
// struct SVECTOR v[3]; // stack offset -40
// struct SVECTOR TrailPos; // stack offset -16
// struct POLY_G3 *poly; // $t0
/* begin block 1.1 */
// Start line: 3135
// Start offset: 0x00036F30
// Variables:
// unsigned char *col; // $a0
/* end block 1.1 */
// End offset: 0x00036FE0
// End Line: 3150
/* end block 1 */
// End offset: 0x00037150
// End Line: 3170
/* begin block 2 */
// Start line: 7865
/* end block 2 */
// End Line: 7866
/* begin block 3 */
// Start line: 7881
/* end block 3 */
// End Line: 7882
void DisplaySpark ( SMOKE * spark )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
char cVar1 ;
ushort uVar2 ;
DB * pDVar3 ;
undefined4 in_zero ;
undefined4 in_at ;
uint uVar4 ;
undefined2 uVar5 ;
int iVar6 ;
short sVar7 ;
uint * puVar8 ;
undefined4 local_28 ;
uint local_24 ;
undefined4 local_20 ;
uint local_1c ;
undefined4 local_18 ;
uint local_14 ;
int local_8 ;
setCopControlWord ( 2 , 0 , inv_camera_matrix . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , inv_camera_matrix . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , inv_camera_matrix . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , inv_camera_matrix . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , inv_camera_matrix . _16_4_ ) ;
setCopControlWord ( 2 , 0x2800 , dummy . vx ) ;
setCopControlWord ( 2 , 0x3000 , dummy . vy ) ;
setCopControlWord ( 2 , 0x3800 , dummy . vz ) ;
local_18 = CONCAT22 ( ( spark - > final_tail_pos ) . vy - ( ushort ) camera_position . vy ,
* ( short * ) & ( spark - > final_tail_pos ) . vx - ( short ) camera_position . vx ) ;
sVar7 = * ( short * ) & ( spark - > position ) . vx - ( short ) camera_position . vx ;
local_14 = local_14 & 0xffff0000 |
( uint ) ( ushort ) ( * ( short * ) & ( spark - > final_tail_pos ) . vz - ( ushort ) camera_position . vz ) ;
iVar6 = ( uint ) ( ushort ) ( spark - > position ) . vy - ( uint ) ( ushort ) camera_position . vy ;
uVar4 = ( uint ) * ( ushort * ) & ( spark - > position ) . vz - ( uint ) ( ushort ) camera_position . vz ;
local_24 = local_24 & 0xffff0000 | uVar4 & 0xffff ;
uVar4 = uVar4 + 5 ;
uVar5 = ( undefined2 ) iVar6 ;
local_28 = CONCAT22 ( uVar5 , sVar7 ) ;
local_20 = CONCAT22 ( uVar5 , sVar7 + 5 ) ;
local_1c = local_1c & 0xffff0000 | uVar4 & 0xffff ;
puVar8 = ( uint * ) current - > primptr ;
setCopReg ( 2 , in_zero , local_28 ) ;
setCopReg ( 2 , in_at , local_24 ) ;
setCopReg ( 2 , uVar4 , local_20 ) ;
setCopReg ( 2 , iVar6 , local_1c ) ;
setCopReg ( 2 , current , local_18 ) ;
setCopReg ( 2 , 0x9bdc4 , local_14 ) ;
copFunction ( 2 , 0x280030 ) ;
* ( char * ) ( ( int ) puVar8 + 7 ) = ' 0 ' ;
* ( char * ) ( ( int ) puVar8 + 3 ) = ' \x06 ' ;
if ( spark - > start_w = = 2 ) {
iVar6 = ( int ) ( spark - > drift ) . vy * 3 ;
if ( gTimeOfDay = = 1 ) {
* ( uchar * ) ( puVar8 + 1 ) = ( & grassColour ) [ iVar6 ] ;
* ( uchar * ) ( ( int ) puVar8 + 5 ) = ( & UCHAR_s_0009c2e9 ) [ iVar6 ] ;
* ( uchar * ) ( ( int ) puVar8 + 6 ) = s_C__0009c2ea [ iVar6 ] ;
* ( uchar * ) ( puVar8 + 3 ) = ( & grassColour ) [ iVar6 ] ;
* ( uchar * ) ( ( int ) puVar8 + 0xd ) = ( & UCHAR_s_0009c2e9 ) [ iVar6 ] ;
* ( uchar * ) ( ( int ) puVar8 + 0xe ) = s_C__0009c2ea [ iVar6 ] ;
iVar6 = ( ( int ) ( spark - > drift ) . vy + 2U & 3 ) * 3 ;
* ( uchar * ) ( puVar8 + 5 ) = ( & grassColour ) [ iVar6 ] ;
* ( uchar * ) ( ( int ) puVar8 + 0x15 ) = ( & UCHAR_s_0009c2e9 ) [ iVar6 ] ;
* ( uchar * ) ( ( int ) puVar8 + 0x16 ) = s_C__0009c2ea [ iVar6 ] ;
}
else {
* ( char * ) ( puVar8 + 1 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar8 + 5 ) = ( char ) ( ( ushort ) spark - > transparency > > 3 ) ;
uVar2 = spark - > transparency ;
* ( char * ) ( puVar8 + 3 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar8 + 6 ) = ( char ) ( uVar2 > > 4 ) ;
* ( char * ) ( ( int ) puVar8 + 0xd ) = ( char ) ( ( ushort ) spark - > transparency > > 3 ) ;
uVar2 = spark - > transparency ;
* ( char * ) ( puVar8 + 5 ) = ' \f ' ;
* ( char * ) ( ( int ) puVar8 + 0x15 ) = ' \x04 ' ;
* ( char * ) ( ( int ) puVar8 + 0x16 ) = ' \x04 ' ;
* ( char * ) ( ( int ) puVar8 + 0xe ) = ( char ) ( uVar2 > > 4 ) ;
}
}
else {
* ( char * ) ( puVar8 + 1 ) = * ( char * ) & spark - > transparency ;
* ( char * ) ( ( int ) puVar8 + 5 ) = * ( char * ) & spark - > transparency ;
* ( char * ) ( ( int ) puVar8 + 6 ) = ( char ) ( ( ushort ) spark - > transparency > > 1 ) ;
* ( char * ) ( puVar8 + 3 ) = * ( char * ) & spark - > transparency ;
* ( char * ) ( ( int ) puVar8 + 0xd ) = * ( char * ) & spark - > transparency ;
* ( char * ) ( ( int ) puVar8 + 0xe ) = ( char ) ( ( ushort ) spark - > transparency > > 1 ) ;
cVar1 = * ( char * ) & spark - > transparency ;
* ( char * ) ( ( int ) puVar8 + 0x15 ) = ' \0 ' ;
* ( char * ) ( ( int ) puVar8 + 0x16 ) = ' \0 ' ;
* ( char * ) ( puVar8 + 5 ) = cVar1 ;
}
local_8 = getCopReg ( 2 , 0x13 ) ;
if ( 0x32 < local_8 ) {
if ( local_8 > > 3 < 9 ) {
local_8 = 0x48 ;
}
uVar4 = getCopReg ( 2 , 0xc ) ;
puVar8 [ 2 ] = uVar4 ;
uVar4 = getCopReg ( 2 , 0xd ) ;
puVar8 [ 4 ] = uVar4 ;
uVar4 = getCopReg ( 2 , 0xe ) ;
puVar8 [ 6 ] = uVar4 ;
pDVar3 = current ;
* puVar8 = * puVar8 & 0xff000000 | current - > ot [ local_8 > > 3 ] & 0xffffff ;
pDVar3 - > ot [ local_8 > > 3 ] = pDVar3 - > ot [ local_8 > > 3 ] & 0xff000000 | ( uint ) puVar8 & 0xffffff ;
pDVar3 - > primptr = pDVar3 - > primptr + 0x1c ;
}
return ;
*/
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ GetSmokeDrift(struct VECTOR *Wind /*$t2*/)
// line 3182, offset 0x00037158
/* begin block 1 */
// Start line: 3183
// Start offset: 0x00037158
// Variables:
// static int SinTabIndex1; // offset 0x158
// static int SinTabIndex2; // offset 0x15c
// static int SinTabIndex3; // offset 0x160
// static int WindMagnitude; // offset 0x164
// static int SinX; // offset 0x0
// static int CosX; // offset 0x4
/* end block 1 */
// End offset: 0x00037250
// End Line: 3215
/* begin block 2 */
// Start line: 8067
/* end block 2 */
// End Line: 8068
/* begin block 3 */
// Start line: 8076
/* end block 3 */
// End Line: 8077
void GetSmokeDrift ( VECTOR * Wind )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
int iVar2 ;
if ( SmokeCnt ! = CameraCnt ) {
SmokeCnt = CameraCnt ;
DAT_000aa378 = DAT_000aa378 + 3 & 0xfff ;
DAT_000aa37c = DAT_000aa37c + 5 & 0xfff ;
DAT_000aa380 = DAT_000aa380 + 7 & 0xfff ;
SinX_103 = ( int ) rcossin_tbl [ DAT_000aa378 * 2 ] + ( int ) rcossin_tbl [ DAT_000aa37c * 2 ] ;
CosX_104 = ( int ) rcossin_tbl [ ( DAT_000aa378 + 0x400 & 0xfff ) * 2 ] +
( int ) rcossin_tbl [ ( DAT_000aa37c + 0x400 & 0xfff ) * 2 ] ;
DAT_000aa384 = ( int ) ( ( uint ) ( ushort ) rcossin_tbl [ DAT_000aa380 * 2 ] < < 0x10 ) > > 0x1b ;
}
iVar1 = DAT_000aa384 * CosX_104 ;
iVar2 = - DAT_000aa384 * SinX_103 ;
Wind - > vy = 0 ;
Wind - > vx = iVar1 > > 0xc ;
Wind - > vz = iVar2 > > 0xc ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ Setup_Debris(struct VECTOR *ipos /*$fp*/, struct VECTOR *ispeed /*$s6*/, int num_debris /*$s7*/, int type /*$s5*/)
// line 3227, offset 0x00037250
/* begin block 1 */
// Start line: 3228
// Start offset: 0x00037250
// Variables:
// struct DEBRIS *mydebris; // $s1
// int num; // $v1
// int loop; // $s4
// int vx; // $s2
// int vy; // $s3
// int vz; // $a2
// int seed; // $s0
// int col; // $a3
/* begin block 1.1 */
// Start line: 3245
// Start offset: 0x000372F4
/* end block 1.1 */
// End offset: 0x000373B4
// End Line: 3259
/* end block 1 */
// End offset: 0x00037444
// End Line: 3285
/* begin block 2 */
// Start line: 8194
/* end block 2 */
// End Line: 8195
/* begin block 3 */
// Start line: 8207
/* end block 3 */
// End Line: 8208
2020-04-04 06:49:28 +02:00
void Setup_Debris ( VECTOR * ipos , VECTOR * ispeed , int num_debris , int type )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
byte bVar1 ;
byte bVar2 ;
byte bVar3 ;
ushort uVar4 ;
int iVar5 ;
uint uVar6 ;
uint uVar7 ;
int iVar8 ;
int iVar9 ;
int iVar10 ;
int iVar11 ;
int iVar12 ;
iVar9 = type > > 0x10 ;
iVar12 = 0 ;
if ( 0 < num_debris ) {
do {
iVar5 = AllocateDebris ( ) ;
if ( iVar5 = = - 1 ) {
return ;
}
debris [ iVar5 ] . position . vx = ipos - > vx ;
debris [ iVar5 ] . position . vy = ipos - > vy ;
debris [ iVar5 ] . position . vz = ipos - > vz ;
if ( ( type & 0xffffU ) < 8 ) {
uVar6 = rand ( ) ;
iVar11 = ( uVar6 & 0x7f00 ) * num_debris * 2 ;
iVar10 = ( ispeed - > vx + ( ( uVar6 & 0x7f ) - 0x40 ) * num_debris ) * 0x400 ;
uVar7 = rand ( ) ;
iVar8 = ispeed - > vz ;
bVar1 = debris_colour [ GameLevel * 0x1f + iVar9 ] . r ;
bVar2 = debris_colour [ GameLevel * 0x1f + iVar9 ] . g ;
bVar3 = debris_colour [ GameLevel * 0x1f + iVar9 ] . b ;
debris [ iVar5 ] . step = ( char ) uVar6 ;
debris [ iVar5 ] . rgb . r = bVar1 ;
debris [ iVar5 ] . rgb . g = bVar2 ;
debris [ iVar5 ] . rgb . b = bVar3 ;
iVar8 = iVar8 + ( ( uVar7 & 0x7fff ) - 0x4000 ) * num_debris * 2 ;
if ( gTimeOfDay = = 3 ) {
debris [ iVar5 ] . rgb . r = bVar1 > > 1 ;
debris [ iVar5 ] . rgb . g = bVar2 > > 1 ;
debris [ iVar5 ] . rgb . b = bVar3 > > 1 ;
}
}
else {
iVar11 = ispeed - > vy ;
iVar10 = ispeed - > vx ;
iVar8 = ispeed - > vz ;
debris [ iVar5 ] . step = ' \x02 ' ;
debris [ iVar5 ] . rgb . b = ' < ' ;
debris [ iVar5 ] . rgb . g = ' < ' ;
debris [ iVar5 ] . rgb . r = ' < ' ;
}
uVar4 = ( ushort ) iVar12 ;
iVar12 = iVar12 + 1 ;
debris [ iVar5 ] . type = ( byte ) type & 7 ;
debris [ iVar5 ] . direction . vy = - ( short ) ( iVar11 > > 0xc ) ;
debris [ iVar5 ] . life = 0x80 ;
debris [ iVar5 ] . direction . vx = ( short ) ( iVar10 > > 0xc ) ;
debris [ iVar5 ] . direction . vz = ( short ) ( iVar8 > > 0xc ) ;
debris [ iVar5 ] . flags = 2 ;
debris [ iVar5 ] . pos = uVar4 & 0x1f ;
} while ( iVar12 < num_debris ) ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ Setup_Smoke(struct VECTOR *ipos /*$s1*/, int start_w /*$s3*/, int end_w /*$s4*/, int SmokeType /*$s7*/, int WheelSpeed /*stack 16*/, struct VECTOR *Drift /*stack 20*/, int Exhaust /*stack 24*/)
// line 3296, offset 0x00037474
/* begin block 1 */
// Start line: 3297
// Start offset: 0x00037474
// Variables:
// struct SMOKE *mysmoke; // $s0
// int num; // $v1
/* begin block 1.1 */
// Start line: 3335
// Start offset: 0x00037594
/* end block 1.1 */
// End offset: 0x00037594
// End Line: 3335
/* begin block 1.2 */
// Start line: 3372
// Start offset: 0x000376A0
/* end block 1.2 */
// End offset: 0x000376A0
// End Line: 3372
/* begin block 1.3 */
// Start line: 3382
// Start offset: 0x000376EC
/* end block 1.3 */
// End offset: 0x00037728
// End Line: 3387
/* begin block 1.4 */
// Start line: 3423
// Start offset: 0x0003780C
/* end block 1.4 */
// End offset: 0x00037884
// End Line: 3434
/* end block 1 */
// End offset: 0x00037920
// End Line: 3463
/* begin block 2 */
// Start line: 8537
/* end block 2 */
// End Line: 8538
/* WARNING: Removing unreachable block (ram,0x0003778c) */
2020-04-04 06:49:28 +02:00
void Setup_Smoke ( VECTOR * ipos , int start_w , int end_w , int SmokeType , int WheelSpeed , VECTOR * Drift , int Exhaust )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
char cVar1 ;
byte bVar2 ;
short sVar3 ;
short sVar4 ;
int iVar5 ;
int iVar6 ;
uint uVar7 ;
SMOKE * pSVar8 ;
short sVar9 ;
iVar5 = AllocateSmoke ( ) ;
if ( iVar5 = = - 1 ) {
return ;
}
pSVar8 = smoke + iVar5 ;
sVar3 = ( short ) start_w ;
sVar9 = ( short ) end_w ;
if ( SmokeType = = 4 ) {
( pSVar8 - > position ) . vx = ipos - > vx ;
end_w = end_w - start_w ;
smoke [ iVar5 ] . position . vy = * ( short * ) & ipos - > vy ;
iVar6 = ipos - > vz ;
smoke [ iVar5 ] . start_w = sVar3 ;
smoke [ iVar5 ] . final_w = sVar9 ;
smoke [ iVar5 ] . position . vz = iVar6 ;
iVar6 = end_w ;
if ( end_w < 0 ) {
iVar6 = end_w + 0x7f ;
}
smoke [ iVar5 ] . step = ( uchar ) ( ( iVar6 > > 7 ) < < 2 ) ;
smoke [ iVar5 ] . flags = 0x1006 ;
smoke [ iVar5 ] . life = ' \x14 ' ;
smoke [ iVar5 ] . halflife = ' \n ' ;
if ( WheelSpeed < 0x30d41 ) {
sVar3 = 0xff ;
}
else {
sVar3 = ( short ) ( 800000 - WheelSpeed > > 0xb ) ;
}
smoke [ iVar5 ] . transparency = sVar3 ;
smoke [ iVar5 ] . t_step = ( uchar ) ( end_w > > 2 ) ;
}
else {
if ( SmokeType = = 1 ) {
if ( Exhaust = = 0 ) {
( pSVar8 - > position ) . vx = ipos - > vx ;
smoke [ iVar5 ] . position . vy = * ( short * ) & ipos - > vy ;
smoke [ iVar5 ] . position . vz = ipos - > vz ;
if ( WheelSpeed < 0x30d41 ) {
sVar4 = 0xff ;
}
else {
sVar4 = ( short ) ( 800000 - WheelSpeed > > 0xb ) ;
}
smoke [ iVar5 ] . transparency = sVar4 ;
end_w = end_w - start_w ;
smoke [ iVar5 ] . t_step = ( uchar ) ( end_w > > 5 ) ;
}
else {
uVar7 = rand ( ) ;
( pSVar8 - > position ) . vx = ipos - > vx + ( uVar7 & 0x3f ) ;
smoke [ iVar5 ] . position . vy = * ( short * ) & ipos - > vy ;
uVar7 = rand ( ) ;
end_w = end_w - start_w ;
iVar6 = ipos - > vz ;
smoke [ iVar5 ] . flags = 0x2006 ;
smoke [ iVar5 ] . transparency = 0x8c ;
smoke [ iVar5 ] . t_step = ' \x02 ' ;
smoke [ iVar5 ] . position . vz = iVar6 + ( uVar7 & 0x3f ) ;
}
smoke [ iVar5 ] . start_w = sVar3 ;
smoke [ iVar5 ] . final_w = sVar9 ;
if ( end_w < 0 ) {
end_w = end_w + 0x7f ;
}
smoke [ iVar5 ] . step = ( uchar ) ( ( end_w > > 7 ) < < 2 ) ;
smoke [ iVar5 ] . flags = 0x2006 ;
smoke [ iVar5 ] . life = ' ( ' ;
smoke [ iVar5 ] . halflife = ' \x14 ' ;
}
else {
if ( ( SmokeType = = 2 ) | | ( SmokeType = = 5 ) ) {
if ( Exhaust = = 0 ) {
uVar7 = rand ( ) ;
( pSVar8 - > position ) . vx = ipos - > vx + ( uVar7 & 0x3f ) ;
smoke [ iVar5 ] . position . vy = * ( short * ) & ipos - > vy ;
uVar7 = rand ( ) ;
iVar6 = ipos - > vz ;
smoke [ iVar5 ] . flags = 0x16 ;
smoke [ iVar5 ] . position . vz = iVar6 + ( uVar7 & 0x3f ) ;
}
else {
uVar7 = rand ( ) ;
( pSVar8 - > position ) . vx = ipos - > vx + ( uVar7 & 7 ) ;
smoke [ iVar5 ] . position . vy = * ( short * ) & ipos - > vy ;
uVar7 = rand ( ) ;
iVar6 = ipos - > vz ;
smoke [ iVar5 ] . flags = 0x4006 ;
smoke [ iVar5 ] . transparency = 0x46 ;
smoke [ iVar5 ] . t_step = ' \x02 ' ;
smoke [ iVar5 ] . position . vz = iVar6 + ( uVar7 & 7 ) ;
}
smoke [ iVar5 ] . start_w = sVar3 ;
smoke [ iVar5 ] . final_w = sVar9 ;
if ( SmokeType = = 5 ) {
smoke [ iVar5 ] . life = ' ' ;
end_w = end_w - start_w ;
iVar6 = end_w ;
if ( end_w < 0 ) {
iVar6 = end_w + 0x1f ;
}
smoke [ iVar5 ] . step = ( uchar ) ( ( iVar6 > > 5 ) < < 2 ) ;
smoke [ iVar5 ] . t_step = ( uchar ) ( end_w > > 5 ) ;
smoke [ iVar5 ] . transparency = ( short ) WheelSpeed ;
}
else {
smoke [ iVar5 ] . life = - 0x80 ;
smoke [ iVar5 ] . step = ( uchar ) ( ( end_w - start_w ) / 0x80 < < 3 ) ;
smoke [ iVar5 ] . t_step = ( uchar ) ( end_w - start_w > > 6 ) ;
smoke [ iVar5 ] . transparency = 0x50 ;
}
}
else {
if ( SmokeType = = 6 ) {
( pSVar8 - > position ) . vx = ipos - > vx ;
smoke [ iVar5 ] . position . vy = * ( short * ) & ipos - > vy ;
iVar6 = ipos - > vz ;
smoke [ iVar5 ] . flags = 0x46 ;
smoke [ iVar5 ] . transparency = 0xa0 ;
smoke [ iVar5 ] . step = ' \x14 ' ;
smoke [ iVar5 ] . t_step = ' \x05 ' ;
smoke [ iVar5 ] . start_w = sVar3 ;
smoke [ iVar5 ] . final_w = sVar9 ;
smoke [ iVar5 ] . life = - 0x4e ;
smoke [ iVar5 ] . halflife = ' ' ;
smoke [ iVar5 ] . position . vz = iVar6 ;
goto LAB_00037884 ;
}
uVar7 = rand ( ) ;
( pSVar8 - > position ) . vx = ipos - > vx + ( uVar7 & 0x3f ) ;
smoke [ iVar5 ] . position . vy = * ( short * ) & ipos - > vy ;
uVar7 = rand ( ) ;
end_w = end_w - start_w ;
iVar6 = ipos - > vz ;
smoke [ iVar5 ] . flags = 0x26 ;
smoke [ iVar5 ] . transparency = 0x3c ;
smoke [ iVar5 ] . t_step = ' \x05 ' ;
smoke [ iVar5 ] . start_w = sVar3 ;
smoke [ iVar5 ] . final_w = sVar9 ;
smoke [ iVar5 ] . position . vz = iVar6 + ( uVar7 & 0x3f ) ;
if ( end_w < 0 ) {
end_w = end_w + 0x7f ;
}
smoke [ iVar5 ] . step = ( uchar ) ( ( end_w > > 7 ) < < 3 ) ;
smoke [ iVar5 ] . life = - 0x80 ;
}
smoke [ iVar5 ] . halflife = ' @ ' ;
}
}
2020-03-27 21:47:29 +01:00
LAB_00037884 :
2020-04-04 06:49:28 +02:00
if ( Exhaust = = 0 ) {
bVar2 = smoke [ iVar5 ] . life ;
smoke [ iVar5 ] . drift . vx = ' \0 ' ;
smoke [ iVar5 ] . drift . vy = ' \0 ' ;
smoke [ iVar5 ] . drift . vz = ' \0 ' ;
if ( ( bVar2 < 0x28 ) | | ( SmokeType = = 4 ) ) {
smoke [ iVar5 ] . drift_change . vx = ' \0 ' ;
smoke [ iVar5 ] . drift_change . vy = ' \x01 ' ;
smoke [ iVar5 ] . drift_change . vz = ' \0 ' ;
}
else {
smoke [ iVar5 ] . drift_change . vx = * ( char * ) & Drift - > vx ;
smoke [ iVar5 ] . drift_change . vy = * ( char * ) & Drift - > vy ;
smoke [ iVar5 ] . drift_change . vz = * ( char * ) & Drift - > vz ;
}
}
else {
smoke [ iVar5 ] . drift . vx = * ( char * ) & Drift - > vx ;
smoke [ iVar5 ] . drift . vy = * ( char * ) & Drift - > vy ;
cVar1 = * ( char * ) & Drift - > vz ;
smoke [ iVar5 ] . drift_change . vx = ' \0 ' ;
smoke [ iVar5 ] . drift_change . vy = ' \0 ' ;
smoke [ iVar5 ] . drift_change . vz = ' \0 ' ;
smoke [ iVar5 ] . drift . vz = cVar1 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ Setup_Sparks(struct VECTOR *ipos /*$fp*/, struct VECTOR *ispeed /*$s7*/, int num_sparks /*stack 8*/, char SparkType /*$s5*/)
// line 3475, offset 0x00037950
/* begin block 1 */
// Start line: 3476
// Start offset: 0x00037950
// Variables:
// struct SMOKE *mysmoke; // $s2
// int num; // $s0
// int loop; // $s4
// int vx; // $s1
// int vy; // $s0
// int vz; // $v1
// int randtemp; // $v0
/* begin block 1.1 */
// Start line: 3487
// Start offset: 0x000379A0
/* end block 1.1 */
// End offset: 0x00037AD0
// End Line: 3549
/* end block 1 */
// End offset: 0x00037AE4
// End Line: 3550
/* begin block 2 */
// Start line: 9001
/* end block 2 */
// End Line: 9002
/* begin block 3 */
// Start line: 9007
/* end block 3 */
// End Line: 9008
2020-04-04 06:49:28 +02:00
void Setup_Sparks ( VECTOR * ipos , VECTOR * ispeed , int num_sparks , char SparkType )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
short sVar1 ;
int iVar2 ;
uint uVar3 ;
uint uVar4 ;
int iVar5 ;
int iVar6 ;
int iVar7 ;
int iVar8 ;
if ( ( pauseflag = = 0 ) & & ( iVar8 = 0 , 0 < num_sparks ) ) {
do {
iVar2 = AllocateSmoke ( ) ;
if ( iVar2 < 0 ) {
return ;
}
uVar3 = rand ( ) ;
iVar5 = ipos - > vx ;
smoke [ iVar2 ] . position . vx = iVar5 ;
sVar1 = * ( short * ) & ipos - > vy ;
smoke [ iVar2 ] . position . vy = sVar1 ;
iVar6 = ipos - > vz ;
smoke [ iVar2 ] . final_tail_pos . vy = sVar1 ;
smoke [ iVar2 ] . pos = ( uchar ) ( iVar8 < < 2 ) ;
smoke [ iVar2 ] . step = ( byte ) uVar3 & 0x3f ;
smoke [ iVar2 ] . final_tail_pos . vx = iVar5 ;
smoke [ iVar2 ] . drift . vx = ' \x02 ' ;
smoke [ iVar2 ] . flags = 10 ;
smoke [ iVar2 ] . position . vz = iVar6 ;
smoke [ iVar2 ] . final_tail_pos . vz = iVar6 ;
iVar7 = ispeed - > vx ;
iVar6 = ispeed - > vy ;
uVar4 = rand ( ) ;
iVar5 = ispeed - > vz ;
smoke [ iVar2 ] . drift_change . vx = ( char ) ( ( int ) ( ( iVar7 + - 0x4000 + ( uVar3 & 0x7f00 ) ) * 4 ) > > 0xc ) ;
smoke [ iVar2 ] . drift_change . vy = - ( char ) ( ( int ) ( ( iVar6 + ( uVar3 & 0x7f ) ) * 0x400 ) > > 0xc ) ;
smoke [ iVar2 ] . drift_change . vz = ( char ) ( iVar5 + - 0x40 + ( uVar4 & 0x7f ) > > 2 ) ;
if ( SparkType = = ' \x01 ' ) {
smoke [ iVar2 ] . life = ' \n ' ;
smoke [ iVar2 ] . transparency = 200 ;
smoke [ iVar2 ] . t_step = ' \x02 ' ;
smoke [ iVar2 ] . start_w = 0 ;
}
else {
if ( SparkType = = ' \x02 ' ) {
smoke [ iVar2 ] . life = ' \n ' ;
smoke [ iVar2 ] . transparency = 0xff ;
smoke [ iVar2 ] . t_step = ' \n ' ;
smoke [ iVar2 ] . start_w = 2 ;
iVar5 = rand ( ) ;
smoke [ iVar2 ] . drift . vy = ( byte ) iVar5 & 3 ;
}
else {
smoke [ iVar2 ] . life = ' ( ' ;
smoke [ iVar2 ] . transparency = 0xff ;
smoke [ iVar2 ] . t_step = ' \n ' ;
smoke [ iVar2 ] . start_w = 1 ;
}
}
iVar8 = iVar8 + 1 ;
} while ( iVar8 < num_sparks ) ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DisplayDebris(struct DEBRIS *debris /*$t2*/, char type /*$t3*/)
// line 3564, offset 0x00037b14
/* begin block 1 */
// Start line: 3565
// Start offset: 0x00037B14
// Variables:
// int pos; // $a1
// int z; // stack offset -8
// struct SVECTOR v[4]; // stack offset -56
// struct TRI_POINT *tv; // $t1
// struct VECTOR debrisvec; // stack offset -24
// struct POLY_FT3 *poly; // $t0
// struct POLY_GT4 *poly1; // $t0
/* begin block 1.1 */
// Start line: 3607
// Start offset: 0x00037D94
// Variables:
// unsigned long cbgr; // $v1
/* end block 1.1 */
// End offset: 0x00037E10
// End Line: 3618
/* end block 1 */
// End offset: 0x00038000
// End Line: 3648
/* begin block 2 */
// Start line: 9290
/* end block 2 */
// End Line: 9291
2020-04-04 06:49:28 +02:00
void DisplayDebris ( DEBRIS * debris , char type )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
DB * pDVar1 ;
undefined4 in_zero ;
undefined4 in_at ;
uint uVar2 ;
uint uVar3 ;
int iVar4 ;
uint * puVar5 ;
char * pcVar6 ;
undefined4 local_38 ;
uint local_34 ;
undefined4 local_30 ;
uint local_2c ;
undefined4 local_28 ;
uint local_24 ;
undefined4 local_20 ;
uint local_1c ;
short local_18 ;
short local_14 ;
short local_10 ;
iVar4 = ( debris - > position ) . vx - camera_position . vx ;
uVar2 = ( debris - > position ) . vy - camera_position . vy ;
uVar3 = ( debris - > position ) . vz - camera_position . vz ;
if ( ( ( ( iVar4 < - 10000 ) | | ( ( int ) uVar3 < - 10000 ) ) | | ( 10000 < iVar4 ) ) | | ( 10000 < ( int ) uVar3 ) ) {
debris - > life = 1 ;
}
else {
pcVar6 = debris_rot_table5 [ ( byte ) debris - > type ] + ( ( int ) ( uint ) debris - > pos > > 3 & 0x1fU ) * 0xc ;
local_18 = ( short ) iVar4 ;
local_14 = ( short ) uVar2 ;
local_38 = CONCAT22 ( pcVar6 [ 1 ] + local_14 , * pcVar6 + local_18 ) ;
local_10 = ( short ) uVar3 ;
uVar3 = uVar3 & 0xffff ;
local_34 = local_34 & 0xffff0000 | ( int ) pcVar6 [ 2 ] + uVar3 & 0xffff ;
local_30 = CONCAT22 ( pcVar6 [ 5 ] + local_14 , pcVar6 [ 4 ] + local_18 ) ;
local_2c = local_2c & 0xffff0000 | ( uint ) ( ushort ) ( pcVar6 [ 6 ] + local_10 ) ;
iVar4 = ( int ) pcVar6 [ 9 ] + ( uVar2 & 0xffff ) ;
local_28 = CONCAT22 ( ( short ) iVar4 , pcVar6 [ 8 ] + local_18 ) ;
local_24 = local_24 & 0xffff0000 | ( int ) pcVar6 [ 10 ] + uVar3 & 0xffff ;
setCopReg ( 2 , in_zero , local_38 ) ;
setCopReg ( 2 , in_at , local_34 ) ;
setCopReg ( 2 , iVar4 , local_30 ) ;
setCopReg ( 2 , ( int ) pcVar6 [ 10 ] + uVar3 , local_2c ) ;
setCopReg ( 2 , ( int ) pcVar6 [ 2 ] + uVar3 , local_28 ) ;
setCopReg ( 2 , uVar3 , local_24 ) ;
copFunction ( 2 , 0x280030 ) ;
if ( ( uint ) ( byte ) type - 1 < 2 ) {
puVar5 = ( uint * ) current - > primptr ;
local_20 = CONCAT22 ( local_14 - pcVar6 [ 1 ] , local_18 - * pcVar6 ) ;
local_1c = local_1c & 0xffff0000 | ( uint ) ( ushort ) ( local_10 - pcVar6 [ 2 ] ) ;
puVar5 [ 3 ] = CONCAT22 ( litter_texture . clutid , litter_texture . coords . _0_2_ ) ;
puVar5 [ 6 ] = CONCAT22 ( litter_texture . tpageid , litter_texture . coords . _2_2_ ) ;
puVar5 [ 9 ] = ( uint ) litter_texture . coords . _4_2_ ;
puVar5 [ 0xc ] = ( uint ) litter_texture . coords . _6_2_ ;
uVar2 = getCopReg ( 2 , 0xc ) ;
puVar5 [ 2 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xd ) ;
puVar5 [ 5 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xe ) ;
puVar5 [ 8 ] = uVar2 ;
iVar4 = getCopReg ( 2 , 0x13 ) ;
if ( 0xdf < iVar4 ) {
setCopReg ( 2 , in_zero , local_20 ) ;
setCopReg ( 2 , in_at , local_1c ) ;
copFunction ( 2 , 0x180001 ) ;
uVar2 = ( uint ) ( byte ) combointensity ;
if ( type = = ' \x02 ' ) {
uVar2 = ( ( debris - > rgb ) . b + uVar2 ) * 0x10000 |
( ( debris - > rgb ) . g + uVar2 ) * 0x100 | 0x3c000000 | ( debris - > rgb ) . r + uVar2 ;
}
else {
uVar2 = ( uint ) ( debris - > rgb ) . b < < 0x10 | ( uint ) ( debris - > rgb ) . g < < 8 | 0x3c000000 |
( uint ) ( debris - > rgb ) . r ;
}
puVar5 [ 1 ] = uVar2 ;
puVar5 [ 7 ] = uVar2 ;
puVar5 [ 4 ] = uVar2 + 0x202020 ;
puVar5 [ 10 ] = uVar2 + 0x303030 ;
* ( char * ) ( ( int ) puVar5 + 3 ) = ' \f ' ;
pDVar1 = current ;
* puVar5 = * puVar5 & 0xff000000 | current - > ot [ iVar4 > > 3 ] & 0xffffff ;
pDVar1 - > ot [ iVar4 > > 3 ] = pDVar1 - > ot [ iVar4 > > 3 ] & 0xff000000 | ( uint ) puVar5 & 0xffffff ;
uVar2 = getCopReg ( 2 , 0xe ) ;
puVar5 [ 0xb ] = uVar2 ;
* ( uint * * ) & current - > primptr = puVar5 + 0xd ;
}
}
else {
puVar5 = ( uint * ) current - > primptr ;
* ( char * ) ( ( int ) puVar5 + 3 ) = ' \a ' ;
* ( char * ) ( ( int ) puVar5 + 7 ) = ' $ ' ;
* ( uchar * ) ( puVar5 + 3 ) = debris_texture . coords . u0 ;
* ( uchar * ) ( ( int ) puVar5 + 0xd ) = debris_texture . coords . v0 ;
* ( uchar * ) ( puVar5 + 5 ) = debris_texture . coords . u1 ;
* ( uchar * ) ( ( int ) puVar5 + 0x15 ) = debris_texture . coords . v1 ;
* ( uchar * ) ( puVar5 + 7 ) = debris_texture . coords . u2 ;
* ( uchar * ) ( ( int ) puVar5 + 0x1d ) = debris_texture . coords . v2 ;
uVar2 = getCopReg ( 2 , 0xc ) ;
puVar5 [ 2 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xd ) ;
puVar5 [ 4 ] = uVar2 ;
uVar2 = getCopReg ( 2 , 0xe ) ;
puVar5 [ 6 ] = uVar2 ;
iVar4 = getCopReg ( 2 , 0x13 ) ;
* ( uchar * ) ( puVar5 + 1 ) = ( debris - > rgb ) . r ;
* ( uchar * ) ( ( int ) puVar5 + 5 ) = ( debris - > rgb ) . g ;
* ( uchar * ) ( ( int ) puVar5 + 6 ) = ( debris - > rgb ) . b ;
* ( ushort * ) ( ( int ) puVar5 + 0x16 ) = debris_texture . tpageid ;
* ( ushort * ) ( ( int ) puVar5 + 0xe ) = debris_texture . clutid ;
pDVar1 = current ;
if ( 0xdf < iVar4 ) {
* puVar5 = * puVar5 & 0xff000000 | current - > ot [ iVar4 > > 3 ] & 0xffffff ;
pDVar1 - > ot [ iVar4 > > 3 ] = pDVar1 - > ot [ iVar4 > > 3 ] & 0xff000000 | ( uint ) puVar5 & 0xffffff ;
pDVar1 - > primptr = pDVar1 - > primptr + 0x20 ;
}
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ HandleDebris()
// line 3659, offset 0x00038008
/* begin block 1 */
// Start line: 3661
// Start offset: 0x00038008
// Variables:
// int count; // $s0
// int i; // $s3
// struct DEBRIS *lpDebris; // $s1
// struct SMOKE *smokeptr; // $s0
// struct VECTOR dummy; // stack offset -80
// struct LEAF *lpLeaf; // $s1
// int Height; // $v0
// int SinX; // $s2
// int CosX; // $v1
// struct VECTOR Drift; // stack offset -64
/* begin block 1.1 */
// Start line: 3852
// Start offset: 0x0003841C
// Variables:
// int offshore; // $s1
// struct ROUTE_DATA routeData; // stack offset -48
/* end block 1.1 */
// End offset: 0x000384B4
// End Line: 3864
/* begin block 1.2 */
// Start line: 3953
// Start offset: 0x000386F0
// Variables:
// static int weather_level; // offset 0x168
/* end block 1.2 */
// End offset: 0x00038750
// End Line: 3966
/* end block 1 */
// End offset: 0x0003877C
// End Line: 3967
/* begin block 2 */
// Start line: 9541
/* end block 2 */
// End Line: 9542
/* begin block 3 */
// Start line: 9542
/* end block 3 */
// End Line: 9543
/* begin block 4 */
// Start line: 9545
/* end block 4 */
// End Line: 9546
/* WARNING: Unknown calling convention yet parameter storage is locked */
void HandleDebris ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
byte bVar1 ;
byte bVar2 ;
char cVar3 ;
char cVar4 ;
short sVar5 ;
short sVar6 ;
short sVar7 ;
char cVar8 ;
ushort uVar9 ;
short sVar10 ;
uint uVar11 ;
char cVar12 ;
uint uVar13 ;
int iVar14 ;
int iVar15 ;
int iVar16 ;
SMOKE * spark ;
DEBRIS * debris ;
LEAF * debris_00 ;
int iVar17 ;
undefined4 local_50 ;
undefined4 local_4c ;
undefined4 local_48 ;
VECTOR local_40 ;
ROUTE_DATA local_30 ;
memset ( & local_50 , 0 , 0x10 ) ;
iVar17 = 0 ;
GetSmokeDrift ( & local_40 ) ;
MoveHubcap ( ) ;
SetRotMatrix ( & inv_camera_matrix ) ;
setCopControlWord ( 2 , 0x2800 , local_50 ) ;
setCopControlWord ( 2 , 0x3000 , local_4c ) ;
setCopControlWord ( 2 , 0x3800 , local_48 ) ;
if ( next_debris ! = 0 ) {
debris = debris ;
iVar16 = next_debris ;
if ( pauseflag = = 0 ) {
do {
if ( ( debris - > flags & 2 ) ! = 0 ) {
DisplayDebris ( debris , ' \0 ' ) ;
uVar9 = debris - > life - 1 ;
debris - > life = uVar9 ;
if ( ( uVar9 = = 0 ) | | ( iVar15 = ( debris - > position ) . vy , 0 < iVar15 ) ) {
debris - > flags = 0 ;
ReleaseDebris ( debris - > num ) ;
iVar16 = iVar16 + - 1 ;
}
else {
sVar5 = ( debris - > direction ) . vy ;
sVar10 = ( debris - > direction ) . vz ;
( debris - > position ) . vx = ( debris - > position ) . vx + ( int ) ( debris - > direction ) . vx ;
bVar1 = debris - > step ;
( debris - > position ) . vy = iVar15 + sVar5 ;
uVar9 = debris - > pos ;
( debris - > position ) . vz = ( debris - > position ) . vz + ( int ) sVar10 ;
debris - > pos = uVar9 + bVar1 ;
sVar5 = ( debris - > direction ) . vy ;
sVar10 = sVar5 + 6 ;
if ( debris - > type = = ' \x03 ' ) {
sVar10 = sVar5 + 1 ;
}
( debris - > direction ) . vy = sVar10 ;
iVar16 = iVar16 + - 1 ;
}
}
debris = debris + 1 ;
} while ( iVar16 ! = 0 ) ;
}
else {
do {
if ( ( debris - > flags & 2 ) ! = 0 ) {
DisplayDebris ( debris , ' \0 ' ) ;
iVar16 = iVar16 + - 1 ;
}
debris = debris + 1 ;
} while ( iVar16 ! = 0 ) ;
}
}
if ( next_leaf ! = 0 ) {
debris_00 = leaf ;
iVar16 = next_leaf ;
if ( pauseflag = = 0 ) {
do {
if ( ( debris_00 - > flags & 2 ) ! = 0 ) {
if ( debris_00 - > life = = 1 ) {
debris_00 - > flags = 0 ;
ReleaseLeaf ( debris_00 - > num ) ;
}
else {
if ( pauseflag = = 0 ) {
uVar13 = ( uint ) ( ushort ) debris_00 - > sin_index1 + ( uint ) ( byte ) debris_00 - > sin_addition1 &
0xfff ;
uVar11 = ( uint ) ( ushort ) debris_00 - > sin_index2 + ( uint ) ( byte ) debris_00 - > sin_addition2 &
0xfff ;
sVar5 = rcossin_tbl [ uVar13 * 2 ] ;
sVar10 = rcossin_tbl [ uVar11 * 2 ] ;
debris_00 - > sin_index1 = ( short ) uVar13 ;
debris_00 - > sin_index2 = ( short ) uVar11 ;
sVar6 = rcossin_tbl [ uVar13 * 2 + 1 ] ;
sVar7 = rcossin_tbl [ uVar11 * 2 + 1 ] ;
iVar17 = ( int ) sVar5 + ( int ) sVar10 ;
( debris_00 - > direction ) . vx = ( short ) ( iVar17 * 5 > > 0xb ) ;
( debris_00 - > direction ) . vz = ( short ) ( ( ( int ) sVar6 + ( int ) sVar7 ) * 5 > > 0xb ) ;
}
GetSmokeDrift ( & local_40 ) ;
iVar14 = ( debris_00 - > position ) . vy ;
iVar15 = - ( ( debris_00 - > position ) . pad + 0x14 ) ;
if ( iVar14 < iVar15 ) {
sVar5 = ( debris_00 - > direction ) . vy ;
sVar10 = ( debris_00 - > direction ) . vz ;
( debris_00 - > position ) . vx =
( debris_00 - > position ) . vx + ( debris_00 - > direction ) . vx + local_40 . vx ;
( debris_00 - > position ) . vy = iVar14 + sVar5 + local_40 . vy ;
uVar9 = debris_00 - > pos ;
bVar1 = debris_00 - > step ;
( debris_00 - > position ) . vz = ( debris_00 - > position ) . vz + sVar10 + local_40 . vz ;
debris_00 - > pos = uVar9 + bVar1 & 0xff ;
}
else {
( debris_00 - > position ) . vy = iVar15 ;
}
( debris_00 - > direction ) . vy = ( short ) ( iVar17 > > 0xb ) + 4 ;
}
iVar16 = iVar16 + - 1 ;
DisplayDebris ( ( DEBRIS * ) debris_00 , debris_00 - > type ) ;
}
debris_00 = debris_00 + 1 ;
} while ( iVar16 ! = 0 ) ;
}
else {
do {
if ( ( debris_00 - > flags & 2 ) ! = 0 ) {
iVar16 = iVar16 + - 1 ;
DisplayDebris ( ( DEBRIS * ) debris_00 , debris_00 - > type ) ;
}
debris_00 = debris_00 + 1 ;
} while ( iVar16 ! = 0 ) ;
}
}
spark = smoke ;
iVar17 = 0x4f ;
norot . m [ 0 ] [ 0 ] = 0x1000 ;
norot . m [ 1 ] [ 0 ] = 0 ;
norot . m [ 2 ] [ 0 ] = 0 ;
norot . m [ 0 ] [ 1 ] = 0 ;
norot . m [ 1 ] [ 1 ] = 0x1000 ;
norot . m [ 2 ] [ 1 ] = 0 ;
norot . m [ 0 ] [ 2 ] = 0 ;
norot . m [ 1 ] [ 2 ] = 0 ;
norot . m [ 2 ] [ 2 ] = 0x1000 ;
do {
uVar9 = spark - > flags ;
if ( ( uVar9 & 2 ) ! = 0 ) {
if ( ( uVar9 & 4 ) = = 0 ) {
if ( ( ( uVar9 & 8 ) ! = 0 ) & & ( DisplaySpark ( spark ) , pauseflag = = 0 ) ) {
cVar12 = ( spark - > drift_change ) . vy ;
iVar16 = ( int ) ( spark - > drift_change ) . vx ;
iVar15 = ( int ) ( spark - > drift_change ) . vz ;
( spark - > position ) . vx = ( spark - > position ) . vx + iVar16 ;
( spark - > position ) . vy = ( spark - > position ) . vy + ( short ) cVar12 ;
cVar3 = ( spark - > drift ) . vx ;
( spark - > position ) . vz = ( spark - > position ) . vz + iVar15 ;
cVar8 = ( spark - > drift ) . vx ;
cVar12 = cVar12 + ' \x06 ' ;
( spark - > drift_change ) . vy = cVar12 ;
if ( cVar8 = = ' \0 ' ) {
( spark - > final_tail_pos ) . vx = ( spark - > final_tail_pos ) . vx + iVar16 ;
( spark - > final_tail_pos ) . vy = ( short ) cVar12 + ( spark - > final_tail_pos ) . vy + - 0xc ;
( spark - > final_tail_pos ) . vz = ( spark - > final_tail_pos ) . vz + iVar15 ;
}
else {
( spark - > drift ) . vx = cVar3 + - 1 ;
}
if ( 0 < ( spark - > position ) . vy ) {
spark - > flags = 0 ;
ReleaseSmoke ( ( ushort ) spark - > num ) ;
}
}
}
else {
if ( ( uVar9 & 0x8000 ) = = 0 ) {
DisplaySmoke ( spark ) ;
}
else {
DisplayWater ( spark ) ;
}
if ( pauseflag = = 0 ) {
if ( ( spark - > flags & 0x8000 ) = = 0 ) {
if ( spark - > start_w < 800 ) {
spark - > start_w = spark - > start_w + ( ushort ) spark - > step ;
}
cVar12 = ( spark - > drift ) . vy ;
cVar8 = ( spark - > drift ) . vz ;
( spark - > position ) . vx = ( spark - > position ) . vx + ( int ) ( spark - > drift ) . vx ;
bVar1 = spark - > life ;
( spark - > position ) . vy = ( spark - > position ) . vy + ( short ) cVar12 ;
bVar2 = spark - > halflife ;
cVar3 = ( spark - > drift ) . vx ;
cVar4 = ( spark - > drift ) . vz ;
( spark - > position ) . vz = ( spark - > position ) . vz + ( int ) cVar8 ;
if ( bVar2 < bVar1 ) {
cVar8 = ( spark - > drift_change ) . vy ;
( spark - > drift ) . vx = cVar3 - ( spark - > drift_change ) . vx ;
cVar3 = ( spark - > drift_change ) . vz ;
( spark - > drift ) . vy = cVar12 - cVar8 ;
( spark - > drift ) . vz = cVar4 - cVar3 ;
}
}
else {
ROADS_GetRouteData ( ( spark - > position ) . vx - ( int ) spark - > start_w ,
( spark - > position ) . vz - ( int ) spark - > start_w , & local_30 ) ;
uVar9 = modelpointers1536 [ local_30 . type ] - > shape_flags ;
ROADS_GetRouteData ( ( spark - > position ) . vx + ( int ) spark - > start_w ,
( spark - > position ) . vz + ( int ) spark - > start_w , & local_30 ) ;
if ( ( spark - > start_w < 800 ) & &
( ( uVar9 & 0x80 & modelpointers1536 [ local_30 . type ] - > shape_flags & 0x80 ) ! = 0 ) ) {
spark - > start_w = spark - > start_w + ( ushort ) spark - > step ;
}
else {
spark - > start_w = spark - > start_w - ( ushort ) spark - > step ;
}
}
}
}
if ( ( ( spark - > flags & 0x900c ) ! = 0 ) & & ( pauseflag = = 0 ) ) {
iVar16 = ( uint ) ( ushort ) spark - > transparency - ( uint ) spark - > t_step ;
spark - > transparency = ( short ) iVar16 ;
if ( iVar16 * 0x10000 < 1 ) {
spark - > transparency = 0 ;
spark - > life = ' \x01 ' ;
}
cVar8 = spark - > life + - 1 ;
spark - > life = cVar8 ;
if ( cVar8 = = ' \0 ' ) {
spark - > flags = 0 ;
ReleaseSmoke ( ( ushort ) spark - > num ) ;
}
}
}
iVar17 = iVar17 + - 1 ;
spark = spark + 1 ;
} while ( - 1 < iVar17 ) ;
if ( pauseflag = = 0 ) {
main_cop_light_pos = main_cop_light_pos + 1U & 7 ;
}
if ( variable_weather ! = 0 ) {
DAT_000aa388 = ( int ) rcossin_tbl [ ( CameraCnt & 0xfffU ) * 2 ] +
( int ) * ( short * ) ( ( int ) rcossin_tbl + ( CameraCnt & 0x3ffcU ) ) ;
gRainCount = ( char ) ( ( uint ) DAT_000aa388 > > 8 ) ;
if ( DAT_000aa388 < 1 ) {
gRainCount = ( char ) ( ( uint ) - DAT_000aa388 > > 8 ) ;
}
if ( 0xb4 < ( byte ) gRainCount ) {
gRainCount = - 0x4c ;
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DisplaySmoke(struct SMOKE *smoke /*$s0*/)
// line 3983, offset 0x0003877c
/* begin block 1 */
// Start line: 3984
// Start offset: 0x0003877C
// Variables:
// struct POLY_FT4 *poly; // $t0
// struct VECTOR v; // stack offset -80
// struct SVECTOR smokemesh[4]; // stack offset -64
// int x; // $s2
// int negx; // $s1
// int z; // stack offset -32
// int smoke_z_offset; // $s3
// int tmode; // $a3
// int size; // $v0
// int centrex; // $a1
// int centrey; // $v1
/* begin block 1.1 */
// Start line: 4041
// Start offset: 0x00038970
// Variables:
// char red; // $a0
// char green; // $a1
// char blue; // $v1
/* end block 1.1 */
// End offset: 0x0003899C
// End Line: 4046
/* end block 1 */
// End offset: 0x00038C98
// End Line: 4115
/* begin block 2 */
// Start line: 10349
/* end block 2 */
// End Line: 10350
/* begin block 3 */
// Start line: 10366
/* end block 3 */
// End Line: 10367
/* begin block 4 */
// Start line: 10372
/* end block 4 */
// End Line: 10373
/* WARNING: Could not reconcile some variable overlaps */
void DisplaySmoke ( SMOKE * smoke )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
short sVar1 ;
ushort uVar2 ;
DB * pDVar3 ;
undefined4 in_zero ;
undefined4 in_at ;
char cVar4 ;
int iVar5 ;
int iVar6 ;
int * piVar7 ;
long lVar8 ;
uint uVar9 ;
int iVar10 ;
uint uVar11 ;
int iVar12 ;
uint uVar13 ;
uint * puVar14 ;
short sVar15 ;
int local_50 ;
int local_4c ;
int local_48 ;
undefined4 local_40 ;
undefined4 local_3c ;
undefined4 local_38 ;
undefined4 local_34 ;
undefined4 local_30 ;
undefined4 local_2c ;
undefined4 local_28 ;
undefined4 local_24 ;
int local_20 ;
local_20 = 0 ;
local_50 = ( smoke - > position ) . vx - camera_position . vx ;
local_4c = ( smoke - > position ) . vy - camera_position . vy ;
sVar1 = smoke - > start_w ;
local_48 = ( smoke - > position ) . vz - camera_position . vz ;
sVar15 = - sVar1 ;
if ( ( local_50 < 0x5001 ) & & ( local_48 < 0x5001 ) ) {
piVar7 = & local_50 ;
lVar8 = camera_position . vx ;
Apply_Inv_CameraMatrix ( piVar7 ) ;
setCopControlWord ( 2 , 0x2800 , local_50 ) ;
setCopControlWord ( 2 , 0x3000 , local_4c ) ;
setCopControlWord ( 2 , 0x3800 , local_48 ) ;
setCopControlWord ( 2 , 0 , norot . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , norot . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , norot . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , norot . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , norot . _16_4_ ) ;
local_40 = CONCAT22 ( sVar15 , sVar15 ) ;
local_3c = ( uint ) local_3c . _2_2_ < < 0x10 ;
local_38 = CONCAT22 ( sVar15 , sVar1 ) ;
local_34 = ( uint ) local_34 . _2_2_ < < 0x10 ;
local_30 = CONCAT22 ( sVar1 , sVar15 ) ;
local_2c = ( uint ) local_2c . _2_2_ < < 0x10 ;
local_28 = CONCAT22 ( sVar1 , sVar1 ) ;
local_24 = ( uint ) local_24 . _2_2_ < < 0x10 ;
puVar14 = ( uint * ) current - > primptr ;
setCopReg ( 2 , in_zero , local_40 ) ;
setCopReg ( 2 , in_at , local_3c ) ;
setCopReg ( 2 , current , local_38 ) ;
setCopReg ( 2 , & local_40 , local_34 ) ;
setCopReg ( 2 , piVar7 , local_30 ) ;
setCopReg ( 2 , lVar8 , local_2c ) ;
copFunction ( 2 , 0x280030 ) ;
uVar2 = smoke - > flags ;
uVar13 = 0x20 ;
if ( ( uVar2 & 0x4000 ) = = 0 ) {
if ( ( uVar2 & 0x2000 ) = = 0 ) {
if ( ( uVar2 & 0x1000 ) = = 0 ) {
if ( ( uVar2 & 0x20 ) = = 0 ) {
if ( ( uVar2 & 0x40 ) = = 0 ) {
if ( gNight = = 0 ) {
* ( char * ) ( puVar14 + 1 ) = * ( char * ) & smoke - > transparency ;
* ( char * ) ( ( int ) puVar14 + 5 ) = * ( char * ) & smoke - > transparency ;
cVar4 = * ( char * ) & smoke - > transparency + ' \n ' ;
}
else {
* ( char * ) ( puVar14 + 1 ) = ( char ) ( ( ushort ) smoke - > transparency > > 1 ) ;
* ( char * ) ( ( int ) puVar14 + 5 ) = ( char ) ( ( ushort ) smoke - > transparency > > 1 ) ;
cVar4 = ( char ) ( ( int ) smoke - > transparency + 10 > > 1 ) ;
}
* ( char * ) ( ( int ) puVar14 + 6 ) = cVar4 ;
local_20 = 0x19 ;
}
else {
if ( gNight = = 0 ) {
* ( char * ) ( puVar14 + 1 ) = ( char ) ( ( ushort ) smoke - > transparency > > 2 ) ;
* ( char * ) ( ( int ) puVar14 + 5 ) = ( char ) ( ( ushort ) smoke - > transparency > > 2 ) ;
* ( char * ) ( ( int ) puVar14 + 6 ) = ( char ) ( ( ushort ) smoke - > transparency > > 2 ) ;
}
else {
* ( char * ) ( puVar14 + 1 ) = ( char ) ( ( ushort ) smoke - > transparency > > 3 ) ;
* ( char * ) ( ( int ) puVar14 + 5 ) = ( char ) ( ( ushort ) smoke - > transparency > > 3 ) ;
* ( char * ) ( ( int ) puVar14 + 6 ) = ( char ) ( ( int ) smoke - > transparency + 10 > > 3 ) ;
}
}
}
else {
* ( char * ) ( puVar14 + 1 ) = ( char ) ( ( ushort ) smoke - > transparency > > 1 ) ;
* ( char * ) ( ( int ) puVar14 + 5 ) = * ( char * ) & smoke - > transparency ;
uVar13 = 0x40 ;
* ( char * ) ( ( int ) puVar14 + 6 ) = * ( char * ) & smoke - > transparency + ' \n ' ;
}
}
else {
uVar11 = ( uint ) ( ushort ) smoke - > transparency < < 0x10 ;
iVar5 = ( int ) uVar11 > > 0x13 ;
uVar9 = iVar5 + 0x32U & 0xff ;
cVar4 = ( char ) uVar9 ;
if ( uVar9 < 0x3c ) {
cVar4 = ( char ) ( uVar11 > > 0x12 ) ;
}
local_20 = 0x12 ;
* ( char * ) ( puVar14 + 1 ) = * ( char * ) & smoke - > transparency ;
* ( char * ) ( ( int ) puVar14 + 5 ) = cVar4 ;
* ( char * ) ( ( int ) puVar14 + 6 ) = ( char ) iVar5 ;
}
}
else {
if ( gNight = = 0 ) {
* ( char * ) ( puVar14 + 1 ) = ( char ) ( ( ushort ) smoke - > transparency > > 2 ) ;
* ( char * ) ( ( int ) puVar14 + 5 ) = ( char ) ( ( ushort ) smoke - > transparency > > 2 ) ;
cVar4 = ( char ) ( ( ushort ) smoke - > transparency > > 2 ) ;
}
else {
* ( char * ) ( puVar14 + 1 ) = ( char ) ( ( ushort ) smoke - > transparency > > 1 ) ;
* ( char * ) ( ( int ) puVar14 + 5 ) = ( char ) ( ( ushort ) smoke - > transparency > > 1 ) ;
cVar4 = ( char ) ( ( ushort ) smoke - > transparency > > 1 ) ;
}
* ( char * ) ( ( int ) puVar14 + 6 ) = cVar4 ;
uVar13 = 0x40 ;
local_20 = 0x11 ;
}
}
else {
* ( char * ) ( puVar14 + 1 ) = * ( char * ) & smoke - > transparency ;
* ( char * ) ( ( int ) puVar14 + 5 ) = * ( char * ) & smoke - > transparency ;
* ( char * ) ( ( int ) puVar14 + 6 ) = * ( char * ) & smoke - > transparency ;
}
uVar9 = getCopReg ( 2 , 0xc ) ;
puVar14 [ 2 ] = uVar9 ;
uVar9 = getCopReg ( 2 , 0xd ) ;
puVar14 [ 4 ] = uVar9 ;
uVar9 = getCopReg ( 2 , 0xe ) ;
puVar14 [ 6 ] = uVar9 ;
iVar5 = getCopReg ( 2 , 0x13 ) ;
setCopReg ( 2 , in_zero , local_28 ) ;
setCopReg ( 2 , in_at , local_24 ) ;
copFunction ( 2 , 0x180001 ) ;
puVar14 [ 3 ] = CONCAT22 ( smoke_texture . clutid , smoke_texture . coords . _0_2_ ) ;
puVar14 [ 5 ] = ( uint ) smoke_texture . coords . _2_2_ | ( smoke_texture . tpageid | uVar13 ) < < 0x10 ;
puVar14 [ 7 ] = ( uint ) smoke_texture . coords . _4_2_ - 0x400 ;
uVar13 = ( uint ) smoke_texture . coords . _6_2_ ;
* ( char * ) ( ( int ) puVar14 + 3 ) = ' \t ' ;
* ( char * ) ( ( int ) puVar14 + 7 ) = ' . ' ;
puVar14 [ 9 ] = uVar13 - 0x400 ;
pDVar3 = current ;
if ( 0 < iVar5 > > 3 ) {
local_20 = ( iVar5 > > 3 ) - local_20 ;
if ( local_20 < 9 ) {
local_20 = 9 ;
}
* puVar14 = * puVar14 & 0xff000000 | current - > ot [ local_20 ] & 0xffffff ;
pDVar3 - > ot [ local_20 ] = pDVar3 - > ot [ local_20 ] & 0xff000000 | ( uint ) puVar14 & 0xffffff ;
uVar13 = getCopReg ( 2 , 0xe ) ;
puVar14 [ 8 ] = uVar13 ;
if ( 100 < ( int ) * ( short * ) ( puVar14 + 4 ) - ( int ) * ( short * ) ( puVar14 + 2 ) > > 1 ) {
iVar10 = ( int ) * ( short * ) ( puVar14 + 2 ) + ( int ) * ( short * ) ( puVar14 + 8 ) > > 1 ;
iVar12 = iVar10 + - 0x32 ;
iVar10 = iVar10 + 0x32 ;
iVar6 = ( int ) * ( short * ) ( ( int ) puVar14 + 10 ) + ( int ) * ( short * ) ( ( int ) puVar14 + 0x22 ) > > 1 ;
iVar5 = ( iVar6 + - 0x32 ) * 0x10000 ;
iVar6 = ( iVar6 + 0x32 ) * 0x10000 ;
puVar14 [ 2 ] = iVar12 + iVar5 ;
puVar14 [ 4 ] = iVar10 + iVar5 ;
puVar14 [ 6 ] = iVar12 + iVar6 ;
puVar14 [ 8 ] = iVar10 + iVar6 ;
}
current - > primptr = current - > primptr + 0x28 ;
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ add_haze(int top_col /*$a0*/, int bot_col /*$a1*/, short ot_pos /*$a2*/)
// line 4118, offset 0x00038cb4
/* begin block 1 */
// Start line: 4119
// Start offset: 0x00038CB4
// Variables:
// struct TILE *polys; // $a1
/* end block 1 */
// End offset: 0x00038E00
// End Line: 4141
/* begin block 2 */
// Start line: 10702
/* end block 2 */
// End Line: 10703
2020-04-04 06:49:28 +02:00
void add_haze ( int top_col , int bot_col , short ot_pos )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
DB * pDVar1 ;
char cVar2 ;
uint * puVar3 ;
int iVar4 ;
char * pcVar5 ;
iVar4 = ( int ) ot_pos ;
if ( ( 9 < top_col ) & & ( FastForward = = 0 ) ) {
puVar3 = ( uint * ) current - > primptr ;
* ( char * ) ( ( int ) puVar3 + 3 ) = ' \x03 ' ;
cVar2 = ( char ) top_col ;
* ( char * ) ( puVar3 + 1 ) = cVar2 ;
* ( char * ) ( ( int ) puVar3 + 5 ) = cVar2 ;
* ( char * ) ( ( int ) puVar3 + 6 ) = cVar2 ;
* ( char * ) ( ( int ) puVar3 + 7 ) = ' b ' ;
pDVar1 = current ;
* ( undefined2 * ) ( puVar3 + 3 ) = 0x140 ;
* ( undefined2 * ) ( puVar3 + 2 ) = 0 ;
* ( undefined2 * ) ( ( int ) puVar3 + 10 ) = 0 ;
* ( undefined2 * ) ( ( int ) puVar3 + 0xe ) = 0x100 ;
* puVar3 = * puVar3 & 0xff000000 | pDVar1 - > ot [ iVar4 ] & 0xffffff ;
pDVar1 - > ot [ iVar4 ] = pDVar1 - > ot [ iVar4 ] & 0xff000000 | ( uint ) puVar3 & 0xffffff ;
pcVar5 = pDVar1 - > primptr ;
pDVar1 - > primptr = pcVar5 + 0x10 ;
pcVar5 [ 0x13 ] = ' \a ' ;
pcVar5 [ 0x17 ] = ' $ ' ;
pDVar1 = current ;
* ( undefined2 * ) ( pcVar5 + 0x18 ) = 0xffff ;
* ( undefined2 * ) ( pcVar5 + 0x1a ) = 0xffff ;
* ( undefined2 * ) ( pcVar5 + 0x20 ) = 0xffff ;
* ( undefined2 * ) ( pcVar5 + 0x22 ) = 0xffff ;
* ( undefined2 * ) ( pcVar5 + 0x28 ) = 0xffff ;
* ( undefined2 * ) ( pcVar5 + 0x2a ) = 0xffff ;
* ( undefined2 * ) ( pcVar5 + 0x26 ) = 0x20 ;
* ( uint * ) ( pcVar5 + 0x10 ) = * ( uint * ) ( pcVar5 + 0x10 ) & 0xff000000 | pDVar1 - > ot [ iVar4 ] & 0xffffff ;
pDVar1 - > ot [ iVar4 ] = pDVar1 - > ot [ iVar4 ] & 0xff000000 | ( uint ) ( pcVar5 + 0x10 ) & 0xffffff ;
pDVar1 - > primptr = pDVar1 - > primptr + 0x20 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ SetupRain()
// line 4152, offset 0x00039df8
/* begin block 1 */
// Start line: 4154
// Start offset: 0x00039DF8
/* end block 1 */
// End offset: 0x00039E54
// End Line: 4163
/* begin block 2 */
// Start line: 20227
/* end block 2 */
// End Line: 20228
/* begin block 3 */
// Start line: 20228
/* end block 3 */
// End Line: 20229
/* begin block 4 */
// Start line: 20231
/* end block 4 */
// End Line: 20232
/* WARNING: Unknown calling convention yet parameter storage is locked */
void SetupRain ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
gNextRainDrop = 0 ;
do {
iVar1 = gNextRainDrop + 1 ;
gRainAlloc [ gNextRainDrop ] = ( short ) gNextRainDrop ;
gRain [ gNextRainDrop ] . oldposition . pad = ( short ) gNextRainDrop ;
gNextRainDrop = iVar1 ;
} while ( iVar1 < 0xb4 ) ;
gNextRainDrop = 0 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ AllocateRainDrop()
// line 4173, offset 0x0003a2d4
/* begin block 1 */
// Start line: 23682
/* end block 1 */
// End Line: 23683
/* begin block 2 */
// Start line: 25942
/* end block 2 */
// End Line: 25943
/* begin block 3 */
// Start line: 25943
/* end block 3 */
// End Line: 25944
/* WARNING: Unknown calling convention yet parameter storage is locked */
int AllocateRainDrop ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
short * psVar1 ;
if ( 0xb3 < gNextRainDrop ) {
return - 1 ;
}
psVar1 = gRainAlloc + gNextRainDrop ;
gNextRainDrop = gNextRainDrop + 1 ;
return ( int ) * psVar1 ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ ReleaseRainDrop(int RainIndex /*$a0*/)
// line 4190, offset 0x00039db0
/* begin block 1 */
// Start line: 17849
/* end block 1 */
// End Line: 17850
/* begin block 2 */
// Start line: 17850
/* end block 2 */
// End Line: 17851
void ReleaseRainDrop ( int RainIndex )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
gNextRainDrop = gNextRainDrop + - 1 ;
gRainAlloc [ gNextRainDrop ] = ( short ) RainIndex ;
return ;
*/
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DrawRainDrops()
// line 4208, offset 0x00038e08
/* begin block 1 */
// Start line: 4210
// Start offset: 0x00038E08
// Variables:
// struct RAIN_TYPE *RainPtr; // $s0
// struct POLY_GT3 *poly; // $a3
// int Count; // $s2
// int z; // stack offset -48
// struct SVECTOR v[3]; // stack offset -88
// struct VECTOR drift; // stack offset -64
// int tpage; // $fp
// int clut; // $s7
// int col; // $s1
/* begin block 1.1 */
// Start line: 4259
// Start offset: 0x00038FA4
// Variables:
// int notfirst; // $a1
/* end block 1.1 */
// End offset: 0x00039158
// End Line: 4296
/* end block 1 */
// End offset: 0x0003919C
// End Line: 4300
/* begin block 2 */
// Start line: 10912
/* end block 2 */
// End Line: 10913
/* begin block 3 */
// Start line: 10913
/* end block 3 */
// End Line: 10914
/* begin block 4 */
// Start line: 10924
/* end block 4 */
// End Line: 10925
/* WARNING: Unknown calling convention yet parameter storage is locked */
void DrawRainDrops ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
uint uVar1 ;
DB * pDVar2 ;
ushort uVar3 ;
undefined4 in_zero ;
undefined4 in_at ;
uint uVar4 ;
int iVar5 ;
uint * puVar6 ;
RAIN_TYPE * pRVar7 ;
int iVar8 ;
uint uVar9 ;
undefined4 local_58 ;
uint local_54 ;
VECTOR local_40 ;
int local_30 ;
if ( gNextRainDrop ! = 0 ) {
GetSmokeDrift ( & local_40 ) ;
if ( cameraview = = 1 ) {
iVar8 = 0x46 ;
}
else {
iVar8 = 0x46 - ( int ) car_data [ 0 ] . hd . wheel_speed . _2_2_ ;
}
if ( iVar8 < 0x32 ) {
iVar8 = 0x32 ;
}
if ( gNight ! = 0 ) {
iVar8 = iVar8 + - 0xf ;
}
uVar9 = iVar8 > > 1 | ( iVar8 > > 1 ) < < 8 ;
uVar9 = uVar9 | uVar9 < < 0x10 ;
if ( NoRainIndoors = = 0 ) {
DisplaySplashes ( ) ;
}
uVar3 = light_texture . clutid ;
setCopControlWord ( 2 , 0 , inv_camera_matrix . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , inv_camera_matrix . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , inv_camera_matrix . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , inv_camera_matrix . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , inv_camera_matrix . _16_4_ ) ;
setCopControlWord ( 2 , 0x2800 , dummy . vx ) ;
setCopControlWord ( 2 , 0x3000 , dummy . vy ) ;
setCopControlWord ( 2 , 0x3800 , dummy . vz ) ;
pRVar7 = gRain ;
uVar4 = ( uint ) light_texture . tpageid ;
iVar8 = gNextRainDrop ;
while ( iVar8 = iVar8 + - 1 , iVar8 ! = - 1 ) {
if ( pauseflag = = 0 ) {
( pRVar7 - > position ) . vy = ( pRVar7 - > position ) . vy + 0x14 ;
( pRVar7 - > position ) . vx = ( pRVar7 - > position ) . vx + local_40 . vx * - 2 ;
( pRVar7 - > position ) . vz = ( pRVar7 - > position ) . vz + local_40 . vz * - 2 ;
}
local_58 = CONCAT22 ( * ( short * ) & ( pRVar7 - > position ) . vy - ( short ) camera_position . vy ,
* ( short * ) & ( pRVar7 - > position ) . vx - ( short ) camera_position . vx ) ;
local_54 = local_54 & 0xffff0000 |
( uint ) ( ushort ) ( * ( short * ) & ( pRVar7 - > position ) . vz - ( short ) camera_position . vz ) ;
iVar5 = * ( int * ) & pRVar7 - > oldposition ;
puVar6 = ( uint * ) current - > primptr ;
setCopReg ( 2 , in_zero , local_58 ) ;
setCopReg ( 2 , in_at , local_54 ) ;
copFunction ( 2 , 0x180001 ) ;
* ( char * ) ( ( int ) puVar6 + 3 ) = ' \t ' ;
puVar6 [ 7 ] = uVar9 ;
puVar6 [ 4 ] = uVar9 ;
puVar6 [ 1 ] = 0 ;
* ( char * ) ( ( int ) puVar6 + 7 ) = ' 6 ' ;
puVar6 [ 2 ] = * ( uint * ) & pRVar7 - > oldposition ;
local_30 = getCopReg ( 2 , 0x13 ) ;
uVar1 = getCopReg ( 2 , 0xe ) ;
puVar6 [ 8 ] = uVar1 ;
if ( ( ( ( local_30 - 0x97U < 0x352 ) & & ( - 0x65 < * ( short * ) ( puVar6 + 8 ) ) ) & &
( * ( short * ) ( puVar6 + 8 ) < 0x1a5 ) ) & &
( ( - 0x33 < * ( short * ) ( ( int ) puVar6 + 0x22 ) & & ( * ( short * ) ( ( int ) puVar6 + 0x22 ) < 0x101 ) ) ) ) {
* ( uint * ) & pRVar7 - > oldposition = puVar6 [ 8 ] ;
if ( iVar5 ! = 0 ) {
* ( short * ) ( puVar6 + 5 ) = * ( short * ) ( puVar6 + 8 ) - ( ( short ) ( local_30 > > 10 ) + - 2 ) ;
* ( undefined2 * ) ( ( int ) puVar6 + 0x16 ) = * ( undefined2 * ) ( ( int ) puVar6 + 0x22 ) ;
puVar6 [ 3 ] = CONCAT22 ( uVar3 , light_texture . coords . _0_2_ ) ;
puVar6 [ 6 ] = ( uint ) light_texture . coords . _2_2_ | uVar4 | 0x200000 ;
puVar6 [ 9 ] = ( uint ) light_texture . coords . _4_2_ ;
pDVar2 = current ;
* puVar6 = * puVar6 & 0xff000000 | current - > ot [ local_30 > > 3 ] & 0xffffff ;
pDVar2 - > ot [ local_30 > > 3 ] =
pDVar2 - > ot [ local_30 > > 3 ] & 0xff000000 | ( uint ) puVar6 & 0xffffff ;
pDVar2 - > primptr = pDVar2 - > primptr + 0x28 ;
}
}
else {
ReleaseRainDrop ( ( int ) ( pRVar7 - > oldposition ) . pad ) ;
}
pRVar7 = pRVar7 + 1 ;
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ AddRainDrops()
// line 4413, offset 0x0003919c
/* begin block 1 */
// Start line: 4415
// Start offset: 0x0003919C
// Variables:
// struct SVECTOR v; // stack offset -48
// struct RAIN_TYPE *RainPtr; // $a2
// int RainIndex; // $s0
// int RainNo; // $s1
// int first; // $s3
// static unsigned long rand; // offset 0x8
/* begin block 1.1 */
// Start line: 4453
// Start offset: 0x00039388
// Variables:
// int depth; // $v0
/* end block 1.1 */
// End offset: 0x000393B0
// End Line: 4456
/* begin block 1.2 */
// Start line: 4466
// Start offset: 0x000393E4
// Variables:
// struct ROUTE_DATA routeData; // stack offset -40
/* end block 1.2 */
// End offset: 0x00039434
// End Line: 4474
/* end block 1 */
// End offset: 0x00039444
// End Line: 4477
/* begin block 2 */
// Start line: 11241
/* end block 2 */
// End Line: 11242
/* begin block 3 */
// Start line: 11355
/* end block 3 */
// End Line: 11356
/* begin block 4 */
// Start line: 11356
/* end block 4 */
// End Line: 11357
/* begin block 5 */
// Start line: 11364
/* end block 5 */
// End Line: 11365
/* WARNING: Unknown calling convention yet parameter storage is locked */
void AddRainDrops ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
long lVar1 ;
bool bVar2 ;
short sVar3 ;
undefined4 in_zero ;
undefined4 in_at ;
int RainIndex ;
int iVar4 ;
short sVar5 ;
uint uVar6 ;
short sVar7 ;
uint uVar8 ;
undefined4 local_30 ;
uint local_2c ;
ROUTE_DATA local_28 ;
bVar2 = true ;
if ( pauseflag = = 0 ) {
uVar8 = ( uint ) ( byte ) gRainCount ;
NoRainIndoors = 0 ;
wetness = wetness + ( int ) uVar8 / 6 ;
if ( 7000 < wetness ) {
wetness = ( int ) & DAT_00001b58 ;
}
setCopControlWord ( 2 , 0 , camera_matrix . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , camera_matrix . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , camera_matrix . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , camera_matrix . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , camera_matrix . _16_4_ ) ;
setCopControlWord ( 2 , 0x2800 , camera_position . vx ) ;
setCopControlWord ( 2 , 0x3000 , camera_position . vy ) ;
setCopControlWord ( 2 , 0x3800 , camera_position . vz ) ;
while ( true ) {
uVar8 = uVar8 - 1 ;
if ( uVar8 = = 0xffffffff ) {
return ;
}
RainIndex = AllocateRainDrop ( ) ;
if ( RainIndex < 0 ) {
return ;
}
iVar4 = rand_142 * 0x19660d + 0x3c6ef35f ;
uVar6 = ( iVar4 > > 0x14 & 0x1ffU ) + 200 ;
iVar4 = iVar4 * 0x19660d + 0x3c6ef35f ;
sVar7 = - ( ( ushort ) ( iVar4 > > 0x14 ) & 0x1ff ) ;
rand_142 = iVar4 * 0x19660d + 0x3c6ef35f ;
sVar5 = ( ( ushort ) ( rand_142 > > 0x14 ) & 0x1ff ) - 0x100 ;
local_2c = local_2c & 0xffff0000 | uVar6 ;
local_30 = CONCAT22 ( sVar7 , sVar5 ) ;
if ( 0xff < uVar6 ) {
sVar3 = ( ushort ) ( uVar6 * 0x10000 > > 0x18 ) + 1 ;
local_30 = CONCAT22 ( sVar7 * sVar3 , sVar5 * sVar3 ) ;
}
setCopReg ( 2 , in_zero , local_30 ) ;
setCopReg ( 2 , in_at , local_2c ) ;
copFunction ( 2 , 0x480012 ) ;
* ( undefined4 * ) & gRain [ RainIndex ] . oldposition = 0 ;
gRain [ RainIndex ] . oldposition . pad = ( short ) RainIndex ;
lVar1 = getCopReg ( 2 , 0x19 ) ;
gRain [ RainIndex ] . position . vx = lVar1 ;
lVar1 = getCopReg ( 2 , 0x1a ) ;
gRain [ RainIndex ] . position . vy = lVar1 ;
lVar1 = getCopReg ( 2 , 0x1b ) ;
gRain [ RainIndex ] . position . vz = lVar1 ;
if ( ( bVar2 ) & &
( ROADS_GetRouteData ( gRain [ RainIndex ] . position . vx , gRain [ RainIndex ] . position . vz , & local_28 ) ,
( modelpointers1536 [ local_28 . type ] - > flags2 & 0x100 ) ! = 0 ) ) break ;
bVar2 = false ;
}
NoRainIndoors = 1 ;
ReleaseRainDrop ( RainIndex ) ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DisplaySplashes()
// line 4489, offset 0x00039468
/* begin block 1 */
// Start line: 4491
// Start offset: 0x00039468
// Variables:
// int SplashNo; // $s4
// int SplashFrac; // $v0
// struct VECTOR CamGnd; // stack offset -96
// struct VECTOR Gnd1; // stack offset -80
// struct VECTOR Gnd2; // stack offset -64
// struct VECTOR Position; // stack offset -48
// struct CVECTOR col; // stack offset -32
// static unsigned long rand; // offset 0x170
// int d1; // $a0
// int d2; // $a2
/* end block 1 */
// End offset: 0x000397A0
// End Line: 4547
/* begin block 2 */
// Start line: 11536
/* end block 2 */
// End Line: 11537
/* begin block 3 */
// Start line: 11537
/* end block 3 */
// End Line: 11538
/* begin block 4 */
// Start line: 11549
/* end block 4 */
// End Line: 11550
/* WARNING: Unknown calling convention yet parameter storage is locked */
void DisplaySplashes ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
uint uVar2 ;
uint uVar3 ;
int iVar4 ;
VECTOR local_60 ;
VECTOR local_50 ;
VECTOR local_40 ;
VECTOR local_30 ;
CVECTOR local_20 [ 2 ] ;
local_20 [ 0 ] = ( CVECTOR ) PTR_DAT_000aa38c ;
if ( pauseflag = = 0 ) {
uVar3 = ( uint ) ( ( byte ) gRainCount > > 2 ) ;
if ( 0x1e < ( byte ) gRainCount > > 2 ) {
uVar3 = 0x1e ;
}
iVar4 = ( int ) ( uVar3 * FrAng * 3 ) > > 0xc ;
setCopControlWord ( 2 , 0 , norot . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , norot . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , norot . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , norot . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , norot . _16_4_ ) ;
local_60 . vx = camera_position . vx ;
local_60 . vz = camera_position . vz ;
local_60 . vy = MapHeight ( & local_60 ) ;
local_60 . vy = - camera_position . vy - local_60 . vy ;
uVar3 = FrAng - camera_angle . vy & 0xfff ;
local_50 . vx = rcossin_tbl [ uVar3 * 2 ] + camera_position . vx ;
local_50 . vz = rcossin_tbl [ uVar3 * 2 + 1 ] + camera_position . vz ;
iVar1 = MapHeight ( & local_50 ) ;
local_50 . vx = local_50 . vx - local_60 . vx ;
local_50 . vy = ( - camera_position . vy - iVar1 ) - local_60 . vy ;
local_50 . vz = local_50 . vz - local_60 . vz ;
uVar3 = - FrAng - ( int ) camera_angle . vy & 0xfff ;
local_40 . vx = rcossin_tbl [ uVar3 * 2 ] + camera_position . vx ;
local_40 . vz = rcossin_tbl [ uVar3 * 2 + 1 ] + camera_position . vz ;
iVar1 = MapHeight ( & local_40 ) ;
local_40 . vx = local_40 . vx - local_60 . vx ;
local_40 . vy = ( - camera_position . vy - iVar1 ) - local_60 . vy ;
local_40 . vz = local_40 . vz - local_60 . vz ;
while ( iVar4 = iVar4 + - 1 , iVar4 ! = - 1 ) {
uVar3 = DAT_000aa390 * 0x19660d + 0x3c6ef35f ;
uVar2 = uVar3 > > 4 & 0xfff ;
DAT_000aa390 = uVar3 * 0x19660d + 0x3c6ef35f ;
uVar3 = DAT_000aa390 > > 0xe & 0xfff ;
local_30 . vx = ( int ) ( local_50 . vx * uVar2 + local_40 . vx * uVar3 + 0x800 ) > > 0xc ;
local_30 . vy = ( ( int ) ( local_50 . vy * uVar2 + local_40 . vy * uVar3 + 0x800 ) > > 0xc ) + local_60 . vy ;
local_30 . vz = ( int ) ( local_50 . vz * uVar2 + local_40 . vz * uVar3 + 0x800 ) > > 0xc ;
ShowLight ( & local_30 , local_20 , 0xc , & drop_texture ) ;
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DisplayLightReflections(struct VECTOR *v1 /*$s1*/, struct CVECTOR *col /*$s3*/, short size /*$a2*/, struct TEXTURE_DETAILS *texture /*$s2*/)
// line 4550, offset 0x000397c0
/* begin block 1 */
// Start line: 4551
// Start offset: 0x000397C0
// Variables:
// struct SVECTOR vert[4]; // stack offset -80
// struct POLY_FT4 *poly; // $a1
// struct CVECTOR thiscol; // stack offset -48
// int z; // stack offset -40
// int tpage; // $s5
// int clut; // $s4
/* end block 1 */
// End offset: 0x00039A30
// End Line: 4602
/* begin block 2 */
// Start line: 11756
/* end block 2 */
// End Line: 11757
/* WARNING: Could not reconcile some variable overlaps */
2020-04-04 06:49:28 +02:00
void DisplayLightReflections ( VECTOR * v1 , CVECTOR * col , short size , TEXTURE_DETAILS * texture )
2020-03-27 21:47:29 +01:00
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
ushort uVar1 ;
ushort uVar2 ;
int iVar3 ;
uint uVar4 ;
DB * pDVar5 ;
undefined4 in_zero ;
undefined4 in_at ;
undefined2 uVar6 ;
int iVar7 ;
VECTOR * pVVar8 ;
uint * puVar9 ;
uint local_50 ;
uint local_4c ;
uint local_48 ;
undefined4 local_44 ;
undefined4 local_40 ;
undefined4 local_3c ;
undefined4 local_38 ;
undefined4 local_34 ;
uint local_30 ;
uVar1 = texture - > tpageid ;
uVar2 = texture - > clutid ;
if ( 9 < wetness ) {
setCopControlWord ( 2 , 0x2800 , v1 - > vx ) ;
setCopControlWord ( 2 , 0x3000 , v1 - > vy ) ;
setCopControlWord ( 2 , 0x3800 , v1 - > vz ) ;
pVVar8 = v1 ;
Apply_Inv_CameraMatrix ( v1 ) ;
setCopControlWord ( 2 , 0x2800 , v1 - > vx ) ;
setCopControlWord ( 2 , 0x3000 , v1 - > vy ) ;
setCopControlWord ( 2 , 0x3800 , v1 - > vz ) ;
setCopControlWord ( 2 , 0 , face_camera . m [ 0 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x800 , face_camera . m . _4_4_ ) ;
setCopControlWord ( 2 , 0x1000 , face_camera . m [ 1 ] . _2_4_ ) ;
setCopControlWord ( 2 , 0x1800 , face_camera . m [ 2 ] . _0_4_ ) ;
setCopControlWord ( 2 , 0x2000 , face_camera . _16_4_ ) ;
local_50 = ( uint ) ( ushort ) - size ;
local_4c = local_4c & 0xffff0000 ;
setCopReg ( 2 , in_zero , local_50 ) ;
setCopReg ( 2 , in_at , local_4c ) ;
copFunction ( 2 , 0x180001 ) ;
local_48 = ( uint ) ( ushort ) size ;
local_44 = ( uint ) local_44 . _2_2_ < < 0x10 ;
local_3c = ( uint ) local_3c . _2_2_ < < 0x10 ;
local_34 = ( uint ) local_34 . _2_2_ < < 0x10 ;
iVar3 = getCopReg ( 2 , 0x13 ) ;
if ( 0x95 < iVar3 ) {
puVar9 = ( uint * ) current - > primptr ;
uVar4 = getCopReg ( 2 , 0xe ) ;
puVar9 [ 2 ] = uVar4 ;
iVar7 = ( iVar3 > > 3 ) + 0xfa ;
uVar6 = ( undefined2 ) iVar7 ;
local_40 = CONCAT22 ( uVar6 , - size ) ;
local_38 = CONCAT22 ( uVar6 , size ) ;
setCopReg ( 2 , in_zero , local_48 ) ;
setCopReg ( 2 , in_at , local_44 ) ;
setCopReg ( 2 , iVar7 , local_40 ) ;
setCopReg ( 2 , & local_48 , local_3c ) ;
setCopReg ( 2 , pVVar8 , local_38 ) ;
setCopReg ( 2 , puVar9 , local_34 ) ;
copFunction ( 2 , 0x280030 ) ;
puVar9 [ 3 ] = CONCAT22 ( uVar2 , * ( undefined2 * ) & texture - > coords ) ;
puVar9 [ 5 ] = ( uint ) * ( ushort * ) & ( texture - > coords ) . u1 | ( ( uint ) uVar1 | 0x20 ) < < 0x10 ;
puVar9 [ 7 ] = ( uint ) * ( ushort * ) & ( texture - > coords ) . u2 ;
puVar9 [ 9 ] = ( uint ) * ( ushort * ) & ( texture - > coords ) . u3 ;
local_30 . _0_2_ = CONCAT11 ( col - > g > > 3 , col - > r > > 3 ) ;
local_30 = local_30 & 0xff000000 | ( uint ) ( col - > b > > 3 ) < < 0x10 | ( uint ) ( ushort ) local_30 ;
* ( char * ) ( ( int ) puVar9 + 3 ) = ' \t ' ;
puVar9 [ 1 ] = local_30 ;
* ( char * ) ( ( int ) puVar9 + 7 ) = ' . ' ;
pDVar5 = current ;
* puVar9 = * puVar9 & 0xff000000 | current - > ot [ iVar3 > > 4 ] & 0xffffff ;
pDVar5 - > ot [ iVar3 > > 4 ] = pDVar5 - > ot [ iVar3 > > 4 ] & 0xff000000 | ( uint ) puVar9 & 0xffffff ;
pDVar5 - > primptr = pDVar5 - > primptr + 0x28 ;
uVar4 = getCopReg ( 2 , 0xc ) ;
puVar9 [ 4 ] = uVar4 ;
uVar4 = getCopReg ( 2 , 0xd ) ;
puVar9 [ 6 ] = uVar4 ;
uVar4 = getCopReg ( 2 , 0xe ) ;
puVar9 [ 8 ] = uVar4 ;
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DoLightning()
// line 4607, offset 0x00039b78
/* begin block 1 */
// Start line: 4609
// Start offset: 0x00039B78
/* end block 1 */
// End offset: 0x00039C58
// End Line: 4631
/* begin block 2 */
// Start line: 12959
/* end block 2 */
// End Line: 12960
/* begin block 3 */
// Start line: 15350
/* end block 3 */
// End Line: 15351
/* begin block 4 */
// Start line: 15351
/* end block 4 */
// End Line: 15352
/* WARNING: Unknown calling convention yet parameter storage is locked */
void DoLightning ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
uint uVar1 ;
if ( pauseflag = = 0 ) {
if ( LightningTimer < - 10 ) {
uVar1 = rand ( ) ;
LightningTimer = uVar1 & 0xff ;
}
else {
LightningTimer = LightningTimer - 1 ;
}
if ( ( LightningTimer < 0 ) & & ( uVar1 = rand ( ) , ( uVar1 & 1 ) = = 0 ) ) {
RequestThunder ( ) ;
uVar1 = rand ( ) ;
if ( ( uVar1 & 1 ) = = 0 ) {
NightAmbient = NightAmbient < < 1 ;
if ( 0x80 < NightAmbient ) {
NightAmbient = 0x80 ;
}
lightning = 2 ;
return ;
}
add_haze ( 0x32 , 0 , 0x107e ) ;
}
lightning = 0 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ InitThunder()
// line 4635, offset 0x0003a0bc
/* begin block 1 */
// Start line: 4636
// Start offset: 0x0003A0BC
/* end block 1 */
// End offset: 0x0003A120
// End Line: 4636
/* begin block 2 */
// Start line: 9270
/* end block 2 */
// End Line: 9271
/* WARNING: Unknown calling convention yet parameter storage is locked */
void InitThunder ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
ThunderTimer = - 1 ;
iVar1 = rand ( ) ;
ThunderDistance = iVar1 % 5000 ;
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ RequestThunder()
// line 4636, offset 0x0003a120
/* begin block 1 */
// Start line: 24079
/* end block 1 */
// End Line: 24080
/* WARNING: Unknown calling convention yet parameter storage is locked */
void RequestThunder ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
ThunderTimer = ThunderDistance > > 8 ;
if ( ThunderTimer < 1 ) {
ThunderTimer = 1 ;
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DoThunder()
// line 4638, offset 0x0003a144
/* begin block 1 */
// Start line: 4640
// Start offset: 0x0003A144
/* end block 1 */
// End offset: 0x0003A224
// End Line: 4647
/* begin block 2 */
// Start line: 24083
/* end block 2 */
// End Line: 24084
/* begin block 3 */
// Start line: 24084
/* end block 3 */
// End Line: 24085
/* WARNING: Unknown calling convention yet parameter storage is locked */
void DoThunder ( void )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
int iVar1 ;
int iVar2 ;
if ( pauseflag = = 0 ) {
iVar1 = rand ( ) ;
ThunderDistance = ( ThunderDistance + 0x28 ) - iVar1 % 0x50 ;
if ( ThunderDistance < 0xfa ) {
ThunderDistance = 0xfa ;
}
if ( 5000 < ThunderDistance ) {
ThunderDistance = ( int ) & DAT_00001388 ;
}
iVar1 = ThunderTimer + - 1 ;
if ( ( - 1 < ThunderTimer ) & & ( ThunderTimer = iVar1 , iVar1 = = 0 ) ) {
iVar2 = rand ( ) ;
iVar1 = iVar2 ;
if ( iVar2 < 0 ) {
iVar1 = iVar2 + 0x7ff ;
}
StartSound ( - 1 , 1 , 0xc , - ThunderDistance , iVar2 + ( iVar1 > > 0xb ) * - 0x800 + 0xc00 ) ;
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// void /*$ra*/ DoWeather(int weather /*$a0*/)
// line 4651, offset 0x0003a000
/* begin block 1 */
// Start line: 24074
/* end block 1 */
// End Line: 24075
/* begin block 2 */
// Start line: 9302
/* end block 2 */
// End Line: 9303
/* begin block 3 */
// Start line: 24075
/* end block 3 */
// End Line: 24076
void DoWeather ( int weather )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
/*
if ( ( weather = = 1 ) & & ( pauseflag = = 0 ) ) {
if ( gEffectsTimer < 0x29 ) {
if ( ( FrameCnt & 7U ) = = 0 ) {
gEffectsTimer = gEffectsTimer + 1 ;
}
}
else {
AddRainDrops ( ) ;
DrawRainDrops ( ) ;
if ( ( FrameCnt & 7U ) = = 0 ) {
gRainCount = gRainCount + ' \x01 ' ;
}
if ( 0x23 < ( byte ) gRainCount ) {
gRainCount = ' # ' ;
}
}
}
return ; */
2020-03-27 21:47:29 +01:00
}
// decompiled code
// original method signature:
// int /*$ra*/ GetDebrisColour(struct _CAR_DATA *cp /*$a0*/)
// line 4725, offset 0x00039fa8
/* begin block 1 */
// Start line: 4726
// Start offset: 0x00039FA8
// Variables:
// int car_model; // $v1
// int palette; // $a0
/* end block 1 */
// End offset: 0x0003A000
// End Line: 4742
/* begin block 2 */
// Start line: 24129
/* end block 2 */
// End Line: 24130
/* begin block 3 */
// Start line: 24130
/* end block 3 */
// End Line: 24131
int GetDebrisColour ( _CAR_DATA * cp )
{
2020-04-04 06:49:28 +02:00
UNIMPLEMENTED ( ) ;
return 0 ;
/*
int iVar1 ;
iVar1 = MissionHeader - > residentModels [ ( byte ) ( cp - > ap ) . model ] ;
if ( iVar1 = = 0 ) {
return 1 ;
}
if ( iVar1 < 8 ) {
return ( iVar1 + - 1 ) * 6 + ( uint ) ( byte ) ( cp - > ap ) . palette + 7 ;
}
return iVar1 + - 6 ; */
2020-03-27 21:47:29 +01:00
}