#include "THISDUST.H" #include "BOMBERMAN.H" MODEL* gBombModel; _ExOBJECT explosion[5]; // decompiled code // original method signature: // void /*$ra*/ InitThrownBombs() // line 222, offset 0x0001f570 /* begin block 1 */ // Start line: 224 // Start offset: 0x0001F570 // Variables: // int i; // $v1 /* end block 1 */ // End offset: 0x0001F5F4 // End Line: 235 /* begin block 2 */ // Start line: 1445 /* end block 2 */ // End Line: 1446 /* begin block 3 */ // Start line: 444 /* end block 3 */ // End Line: 445 /* begin block 4 */ // Start line: 1446 /* end block 4 */ // End Line: 1447 /* begin block 5 */ // Start line: 1448 /* end block 5 */ // End Line: 1449 /* WARNING: Unknown calling convention yet parameter storage is locked */ void InitThrownBombs(void) { UNIMPLEMENTED(); /* BOMB *pBVar1; long lVar2; int iVar3; int in_a0; iVar3 = 4; pBVar1 = &BOMB_000aca68; do { pBVar1->flags = '\0'; iVar3 = iVar3 + -1; pBVar1 = pBVar1 + -1; } while (-1 < iVar3); lVar2 = Random2(in_a0); ThrownBombDelay = lVar2 % 0x2d + 8; CurrentBomb = 0; gWantFlash = 0; gBombTargetVehicle = (_CAR_DATA *)0x0; return;*/ } // decompiled code // original method signature: // void /*$ra*/ HandleThrownBombs() // line 245, offset 0x0001e3e8 /* begin block 1 */ // Start line: 247 // Start offset: 0x0001E3E8 // Variables: // struct BOMB *bomb; // $s1 // struct VECTOR velocity; // stack offset -48 // struct _CAR_DATA *cp; // $s0 // int i; // $s5 // int y; // $a0 /* begin block 1.1 */ // Start line: 258 // Start offset: 0x0001E42C /* end block 1.1 */ // End offset: 0x0001E5C8 // End Line: 301 /* begin block 1.2 */ // Start line: 319 // Start offset: 0x0001E670 // Variables: // int len; // $v1 /* end block 1.2 */ // End offset: 0x0001E6E8 // End Line: 330 /* end block 1 */ // End offset: 0x0001E7E8 // End Line: 357 /* begin block 2 */ // Start line: 490 /* end block 2 */ // End Line: 491 /* begin block 3 */ // Start line: 491 /* end block 3 */ // End Line: 492 /* begin block 4 */ // Start line: 497 /* end block 4 */ // End Line: 498 /* WARNING: Unknown calling convention yet parameter storage is locked */ void HandleThrownBombs(void) { UNIMPLEMENTED(); /* uchar uVar1; long lVar2; int iVar3; ulong uVar4; uint uVar5; int iVar6; int in_a0; VECTOR *pos; _CAR_DATA *cp; BOMB *pBVar7; int iVar8; undefined4 in_stack_ffffffcc; int local_30; undefined4 in_stack_ffffffd4; if (gBombTargetVehicle != (_CAR_DATA *)0x0) { ThrownBombDelay = ThrownBombDelay + -1; if (ThrownBombDelay == -1) { lVar2 = Random2(in_a0); iVar8 = CurrentBomb; pBVar7 = &ThrownBombs + CurrentBomb; ThrownBombDelay = lVar2 % 0x2d + 8; CurrentBomb = (CurrentBomb + 1) % 5; pBVar7->flags = '\x01'; (&ThrownBombs)[iVar8].active = '\x01'; cp = gBombTargetVehicle; (&ThrownBombs)[iVar8].position.vx = (gBombTargetVehicle->hd).where.t[0]; (&ThrownBombs)[iVar8].position.vy = (cp->hd).where.t[1] + -200; (&ThrownBombs)[iVar8].position.vz = (cp->hd).where.t[2]; iVar6 = *(int *)(cp->st + 0x1c); if (iVar6 < 0) { iVar6 = iVar6 + 0xfff; } local_30 = iVar6 >> 0xc; iVar3 = *(int *)(cp->st + 0x24); if (iVar3 < 0) { iVar3 = iVar3 + 0xfff; } (&ThrownBombs)[iVar8].velocity.vx = iVar6 >> 0x16; (&ThrownBombs)[iVar8].velocity.vz = iVar3 >> 0x16; uVar4 = Long2DDistance(&(&ThrownBombs)[iVar8].position, (VECTOR *)car_data[player.playerCarId].hd.where.t); (&ThrownBombs)[iVar8].velocity.vy = -(uVar4 >> 7); uVar5 = rand(); if ((uVar5 & 1) == 0) { (&ThrownBombs)[iVar8].rot_speed = -*(short *)&(&ThrownBombs)[iVar8].velocity.vy; } else { (&ThrownBombs)[iVar8].rot_speed = *(short *)&(&ThrownBombs)[iVar8].velocity.vy; } if ((&ThrownBombs)[iVar8].velocity.vy < -100) { (&ThrownBombs)[iVar8].velocity.vy = -100; } } pBVar7 = &ThrownBombs; iVar8 = 0; do { if ((pBVar7->flags & 1) != 0) { pos = &pBVar7->position; iVar3 = (pBVar7->velocity).vy; (pBVar7->position).vx = (pBVar7->position).vx + (pBVar7->velocity).vx; iVar6 = (pBVar7->velocity).vz; uVar1 = pBVar7->active; (pBVar7->position).vy = (pBVar7->position).vy + iVar3; (pBVar7->position).vz = (pBVar7->position).vz + iVar6; (pBVar7->velocity).vy = iVar3 + 10; pBVar7->active = uVar1 + '\x01'; iVar6 = MapHeight(pos); iVar6 = -iVar6; if (iVar6 < (pBVar7->position).vy) { if ((pBVar7->flags & 2) == 0) { iVar3 = (pBVar7->velocity).vy; pBVar7->flags = pBVar7->flags | 2; (pBVar7->position).vy = iVar6; (pBVar7->velocity).vy = -iVar3 / 2; } else { pBVar7->flags = '\0'; (pBVar7->position).vy = iVar6; AddExplosion((VECTOR)CONCAT412(in_stack_ffffffd4, CONCAT48(local_30, CONCAT44(in_stack_ffffffcc, 1))), (pBVar7->position).vx); AddFlash(pos); iVar3 = (pBVar7->position).vx - player.pos[0]; iVar6 = (pBVar7->position).vz - player.pos[2]; if (iVar3 * iVar3 + iVar6 * iVar6 >> 0xc < 0x400) { SetPadVibration((int)**(char **)car_data[player.playerCarId].ai, '\x03'); } } } cp = car_data; do { if (((cp != gBombTargetVehicle) && (cp->controlType != '\0')) && (iVar6 = BombCollisionCheck(cp, pos), iVar6 != 0)) { pBVar7->flags = '\0'; AddExplosion((VECTOR)(ZEXT1216(CONCAT48(in_stack_ffffffd4, CONCAT44(local_30, in_stack_ffffffcc))) << 0x20), (pBVar7->position).vx); AddFlash(pos); } cp = cp + 1; } while (cp < car_data + 0x14); } pBVar7 = pBVar7 + 1; iVar8 = iVar8 + 1; } while (iVar8 < 5); } return; */ } // decompiled code // original method signature: // void /*$ra*/ DrawThrownBombs() // line 381, offset 0x0001e810 /* begin block 1 */ // Start line: 383 // Start offset: 0x0001E810 // Variables: // struct MATRIX object_matrix; // stack offset -80 // struct MATRIX *finalmatrix; // $s2 // struct BOMB *bomb; // $s0 // struct VECTOR pos; // stack offset -48 // int i; // $s3 /* begin block 1.1 */ // Start line: 397 // Start offset: 0x0001E86C /* end block 1.1 */ // End offset: 0x0001E998 // End Line: 414 /* begin block 1.2 */ // Start line: 420 // Start offset: 0x0001E9B4 /* end block 1.2 */ // End offset: 0x0001E9DC // End Line: 424 /* end block 1 */ // End offset: 0x0001E9DC // End Line: 425 /* begin block 2 */ // Start line: 864 /* end block 2 */ // End Line: 865 /* begin block 3 */ // Start line: 865 /* end block 3 */ // End Line: 866 /* begin block 4 */ // Start line: 871 /* end block 4 */ // End Line: 872 /* WARNING: Could not reconcile some variable overlaps */ /* WARNING: Unknown calling convention yet parameter storage is locked */ void DrawThrownBombs(void) { UNIMPLEMENTED(); /* int iVar1; BOMB *pBVar2; int iVar3; undefined4 local_50; undefined4 local_4c; undefined4 local_48; undefined4 local_44; undefined4 local_40; int local_30; long local_2c; int local_28; if (gBombModel != (MODEL *)0x0) { pBVar2 = &ThrownBombs; iVar3 = 4; do { if ((pBVar2->flags & 1) != 0) { local_50 = 0x1000; local_44 = 0; local_4c = 0; local_48 = 0x1000; local_40 = CONCAT22(local_40._2_2_, 0x1000); RotMatrixY((int)pBVar2->rot_speed * (uint)pBVar2->active * 3 & 0xfff, &local_50); RotMatrixZ((int)pBVar2->rot_speed * (uint)pBVar2->active & 0xfff, &local_50); local_30 = (pBVar2->position).vx - camera_position.vx; local_2c = (pBVar2->position).vy - camera_position.vy; local_28 = (pBVar2->position).vz - camera_position.vz; Apply_Inv_CameraMatrix(&local_30); setCopControlWord(2, 0, local_50); setCopControlWord(2, 0x800, local_4c); setCopControlWord(2, 0x1000, local_48); setCopControlWord(2, 0x1800, local_44); setCopControlWord(2, 0x2000, local_40); setCopControlWord(2, 0x2800, local_30); setCopControlWord(2, 0x3000, local_2c); setCopControlWord(2, 0x3800, local_28); local_30 = (pBVar2->position).vx; local_2c = (pBVar2->position).vy; local_28 = (pBVar2->position).vz; SetFrustrumMatrix(); iVar1 = FrustrumCheck(&local_30, (int)gBombModel->bounding_sphere); if (iVar1 != -1) { PlotMDL_less_than_128(gBombModel); } } iVar3 = iVar3 + -1; pBVar2 = pBVar2 + 1; } while (-1 < iVar3); if (gWantFlash != 0) { add_haze(flashval, flashval, 7); flashval = flashval + -10; if (flashval < 1) { gWantFlash = 0; } } } return; */ } // decompiled code // original method signature: // void /*$ra*/ BombThePlayerToHellAndBack(int car /*$s3*/) // line 432, offset 0x0001ea00 /* begin block 1 */ // Start line: 433 // Start offset: 0x0001EA00 // Variables: // struct BOMB *bomb; // $t3 /* end block 1 */ // End offset: 0x0001EC3C // End Line: 486 /* begin block 2 */ // Start line: 1001 /* end block 2 */ // End Line: 1002 void BombThePlayerToHellAndBack(int car) { UNIMPLEMENTED(); /* int iVar1; ushort uVar2; int iVar3; int iVar4; long lVar5; long *plVar6; long *plVar7; BOMB *pBVar8; long *plVar9; if (car != -1) { car_data[car].ap.damage[0] = 0xfff; car_data[car].ap.damage[1] = 0xfff; car_data[car].ap.damage[2] = 0xfff; car_data[car].ap.damage[3] = 0xfff; car_data[car].ap.damage[4] = 0xfff; car_data[car].ap.damage[5] = 0xfff; uVar2 = (ushort)MaxPlayerDamage; car_data[car].ap.needsDenting = '\x01'; car_data[car].totalDamage = uVar2; DentCar(car_data + car); iVar1 = CurrentBomb; if (maxCivCars == 0) { trap(7); } gBombTargetVehicle = car_data + (car + 1) % maxCivCars; plVar7 = car_data[car].hd.where.t; pBVar8 = &ThrownBombs + CurrentBomb; CurrentBomb = (CurrentBomb + 1) % 5; plVar6 = car_data[car].hd.where.t + 1; plVar9 = car_data[car].hd.where.t + 2; pBVar8->flags = '\x01'; (&ThrownBombs)[iVar1].active = '\x01'; iVar3 = CurrentBomb; (&ThrownBombs)[iVar1].position.vx = *plVar7; (&ThrownBombs)[iVar1].position.vy = *plVar6; lVar5 = *plVar9; (&ThrownBombs)[iVar1].velocity.vx = 0; (&ThrownBombs)[iVar1].velocity.vy = 0; (&ThrownBombs)[iVar1].velocity.vz = 0; (&ThrownBombs)[iVar1].position.vz = lVar5; pBVar8 = &ThrownBombs + CurrentBomb; CurrentBomb = (CurrentBomb + 1) % 5; pBVar8->flags = '\x01'; (&ThrownBombs)[iVar3].active = '\x01'; iVar1 = CurrentBomb; (&ThrownBombs)[iVar3].position.vx = *plVar7 + 0xaa; (&ThrownBombs)[iVar3].position.vy = *plVar6; iVar4 = *plVar9; (&ThrownBombs)[iVar3].velocity.vx = 0; (&ThrownBombs)[iVar3].velocity.vy = 0; (&ThrownBombs)[iVar3].velocity.vz = 0; (&ThrownBombs)[iVar3].position.vz = iVar4 + 0x49; pBVar8 = &ThrownBombs + CurrentBomb; CurrentBomb = (CurrentBomb + 1) % 5; pBVar8->flags = '\x01'; (&ThrownBombs)[iVar1].active = '\x01'; (&ThrownBombs)[iVar1].position.vx = *plVar7 + -0x6d; (&ThrownBombs)[iVar1].position.vy = *plVar6; iVar3 = *plVar9; (&ThrownBombs)[iVar1].velocity.vx = 0; (&ThrownBombs)[iVar1].velocity.vy = 0; (&ThrownBombs)[iVar1].velocity.vz = 0; (&ThrownBombs)[iVar1].position.vz = iVar3 + -0x93; } return; */ } // decompiled code // original method signature: // int /*$ra*/ BombCollisionCheck(struct _CAR_DATA *cp /*$a0*/, struct VECTOR *pPos /*$a1*/) // line 496, offset 0x0001ec58 /* begin block 1 */ // Start line: 497 // Start offset: 0x0001EC58 // Variables: // struct CDATA2D cd[2]; // stack offset -216 // int carLength[2]; // stack offset -16 /* begin block 1.1 */ // Start line: 497 // Start offset: 0x0001EC58 /* end block 1.1 */ // End offset: 0x0001EC58 // End Line: 497 /* end block 1 */ // End offset: 0x0001ED18 // End Line: 523 /* begin block 2 */ // Start line: 1230 /* end block 2 */ // End Line: 1231 /* begin block 3 */ // Start line: 1235 /* end block 3 */ // End Line: 1236 int BombCollisionCheck(_CAR_DATA *cp, VECTOR *pPos) { UNIMPLEMENTED(); return 0; /* uint uVar1; int iVar2; CDATA2D local_d8; long local_74; long local_6c; int local_34; int local_30; int local_2c; int local_c; uVar1 = (uint)(byte)(cp->ap).model; local_34 = (cp->hd).direction; local_30 = (int)car_cosmetics[uVar1].colBox.vz; local_2c = (int)car_cosmetics[uVar1].colBox.vx; local_74 = (cp->hd).where.t[0]; local_6c = (cp->hd).where.t[2]; local_d8.x.vx = pPos->vx; local_d8.x.vz = pPos->vz; local_d8.length[0] = 0x28; local_d8.length[1] = 0x28; local_d8.theta = 0; local_d8.avel = 0; local_d8.vel.vx = 0; local_d8.vel.vy = 0; local_d8.vel.vz = 0; local_c = local_30; iVar2 = bcollided2d(&local_d8, 1); return (uint)(iVar2 != 0); */ } // decompiled code // original method signature: // void /*$ra*/ ExplosionCollisionCheck(struct _CAR_DATA *cp /*$s1*/, struct _ExOBJECT *pE /*$s3*/) // line 534, offset 0x0001ed18 /* begin block 1 */ // Start line: 535 // Start offset: 0x0001ED18 // Variables: // struct CDATA2D cd[2]; // stack offset -352 // int carLength[2]; // stack offset -152 // static int setUsed; // offset 0x28 // int tanner; // $s6 /* begin block 1.1 */ // Start line: 546 // Start offset: 0x0001ED74 /* begin block 1.1.1 */ // Start line: 546 // Start offset: 0x0001ED74 /* end block 1.1.1 */ // End offset: 0x0001ED74 // End Line: 546 /* begin block 1.1.2 */ // Start line: 553 // Start offset: 0x0001EE0C /* end block 1.1.2 */ // End offset: 0x0001EE80 // End Line: 558 /* begin block 1.1.3 */ // Start line: 561 // Start offset: 0x0001EE80 // Variables: // int x; // $a1 // int z; // $v1 // struct VECTOR *pos; // $v0 /* end block 1.1.3 */ // End offset: 0x0001EF54 // End Line: 600 /* begin block 1.1.4 */ // Start line: 623 // Start offset: 0x0001EF94 // Variables: // struct CRET2D collisionResult; // stack offset -144 /* begin block 1.1.4.1 */ // Start line: 626 // Start offset: 0x0001EF94 // Variables: // struct VECTOR velocity; // stack offset -104 // long pointVel[4]; // stack offset -88 // long reaction[4]; // stack offset -72 // long lever[4]; // stack offset -56 // int strikeVel; // $s0 /* begin block 1.1.4.1.1 */ // Start line: 688 // Start offset: 0x0001F210 /* end block 1.1.4.1.1 */ // End offset: 0x0001F250 // End Line: 695 /* begin block 1.1.4.1.2 */ // Start line: 698 // Start offset: 0x0001F250 // Variables: // int twistY; // $a1 // int lever_dot_n; // $a0 // int displacementsquared; // $v1 // int denom; // $v1 /* end block 1.1.4.1.2 */ // End offset: 0x0001F360 // End Line: 710 /* end block 1.1.4.1 */ // End offset: 0x0001F4A8 // End Line: 732 /* end block 1.1.4 */ // End offset: 0x0001F4A8 // End Line: 733 /* end block 1.1 */ // End offset: 0x0001F4A8 // End Line: 734 /* end block 1 */ // End offset: 0x0001F4F4 // End Line: 740 /* begin block 2 */ // Start line: 1339 /* end block 2 */ // End Line: 1340 /* begin block 3 */ // Start line: 1351 /* end block 3 */ // End Line: 1352 /* WARNING: Removing unreachable block (ram,0x0001ef54) */ void ExplosionCollisionCheck(_CAR_DATA *cp, _ExOBJECT *pE) { UNIMPLEMENTED(); /* ExplosionType EVar1; bool bVar2; uint uVar3; _PLAYER *p_Var4; int strikeVel; int iVar5; int iVar6; int iVar7; int iVar8; CDATA2D local_160; long local_fc; long local_f4; int local_bc; int local_b8; int local_b4; int local_94; CRET2D local_90; VECTOR local_68; int local_58; int local_54; int local_50; int local_38; int local_34; int local_30; bVar2 = cp != car_data + 0x14; if ((player.playerType == '\x02') || (bVar2)) { uVar3 = (uint)(byte)(cp->ap).model; local_fc = (cp->hd).where.t[0]; local_b8 = (int)car_cosmetics[uVar3].colBox.vz; local_b4 = (int)car_cosmetics[uVar3].colBox.vx; local_bc = (cp->hd).direction; local_f4 = (cp->hd).where.t[2]; if (pE->type < 2) { strikeVel = pE->speed; if (strikeVel == 0) { trap(7); } if (strikeVel == 0) { trap(7); } if (0x1000 / strikeVel == 0) { trap(7); } local_160.length[1] = minBoxSize + ((pE->time / strikeVel) * littleBoxRange) / (0x1000 / strikeVel); } else { if (pE->type == HEY_MOMMA) { p_Var4 = (_PLAYER *)(cp->hd).where.t; if (!bVar2) { p_Var4 = &player; } strikeVel = (pE->pos).vx; local_160.length[1] = strikeVel - p_Var4->pos[0]; if (local_160.length[1] < 0) { local_160.length[1] = p_Var4->pos[0] - strikeVel; } iVar5 = (pE->pos).vz; strikeVel = iVar5 - p_Var4->pos[2]; if (strikeVel < 0) { strikeVel = p_Var4->pos[2] - iVar5; } if (local_160.length[1] < strikeVel) { local_160.length[1] = strikeVel; } if (local_160.length[1] < 3000) { if (bVar2) { if ((int)(cp[-0x503].ap.old_clock + 2) * -0x24ca58e9 >> 2 == (int)player.playerCarId) { cp->totalDamage = (ushort)MaxPlayerDamage; player.dying = '\x01'; lockAllTheDoors = '\x01'; } } else { bKillTanner = 1; player.dying = '\x01'; } } else { local_160.length[1] = 10; } } else { local_160.length[1] = 0; } } local_160.x.vx = (pE->pos).vx; local_160.x.vz = (pE->pos).vz; local_160.theta = 0; local_160.avel = 0; local_160.vel.vx = 0; local_160.vel.vy = 0; local_160.vel.vz = 0; local_160.length[0] = local_160.length[1]; local_94 = local_b8; strikeVel = bcollided2d(&local_160, 1); if (strikeVel != 0) { bFindCollisionPoint(&local_160, &local_90); iVar8 = *(int *)(cp->st + 0x2c); iVar7 = (cp->hd).where.t[2] + (local_90.penetration * local_90.surfNormal.vz + 0x800 >> 0xc); local_30 = local_90.hit.vz - iVar7; local_34 = (cp->hd).where.t[1]; local_90.hit.vy = local_34 + 0x3c; iVar5 = *(int *)(cp->st + 0x30); local_34 = local_90.hit.vy - local_34; iVar6 = (cp->hd).where.t[0] + (local_90.penetration * local_90.surfNormal.vx + 0x800 >> 0xc); local_38 = local_90.hit.vx - iVar6; strikeVel = *(int *)(cp->st + 0x28); local_90.surfNormal.vy = 0; (cp->hd).where.t[2] = iVar7; (cp->hd).where.t[0] = iVar6; local_58 = ((iVar8 * local_30 - iVar5 * local_34) + 0x800 >> 0xc) + *(int *)(cp->st + 0x1c); local_54 = ((iVar5 * local_38 - strikeVel * local_30) + 0x800 >> 0xc) + *(int *)(cp->st + 0x20); local_50 = ((strikeVel * local_34 - iVar8 * local_38) + 0x800 >> 0xc) + *(int *)(cp->st + 0x24); EVar1 = pE->type; if (EVar1 == LITTLE_BANG) { strikeVel = pE->speed; if (strikeVel == 0) { trap(7); } if (strikeVel == 0) { trap(7); } if (0x1000 / strikeVel == 0) { trap(7); } strikeVel = halfStrike - ((pE->time / strikeVel) * halfStrike) / (0x1000 / strikeVel); } else { if (EVar1 < 2) { strikeVel = fullStrike; if (EVar1 != BIG_BANG) { strikeVel = 0; } } else { strikeVel = 0; if (EVar1 == HEY_MOMMA) { strikeVel = fullStrike << 1; } } } DAT_000aa0ec = 1; if (0 < strikeVel) { local_68.vx = *(int *)(cp->st + 0x1c); local_90.hit.vy = -local_90.hit.vy; if (local_68.vx < 0) { local_68.vx = local_68.vx + 0xfff; } local_68.vx = local_68.vx >> 0xc; local_68.vz = *(int *)(cp->st + 0x24); local_68.vy = -0x11; if (local_68.vz < 0) { local_68.vz = local_68.vz + 0xfff; } local_68.vz = local_68.vz >> 0xc; if (0x3600 < strikeVel) { local_90.hit.vy = local_90.hit.vy + 0x1e; local_68.vy = -0x25; Setup_Sparks((VECTOR *)&local_90, &local_68, 4, '\0'); local_90.hit.vy = local_90.hit.vy + -0x1e; local_68.vy = local_68.vy + 0x14; if (0x1b000 < strikeVel) { iVar5 = GetDebrisColour(cp); Setup_Debris((VECTOR *)&local_90, &local_68, 6, iVar5 << 0x10); if (cp->controlType == '\x01') { SetPadVibration((int)**(char **)cp->ai, '\x01'); } } } DamageCar(cp, &local_160, &local_90, strikeVel); iVar5 = local_38 * local_90.surfNormal.vx + local_34 * local_90.surfNormal.vy + local_30 * local_90.surfNormal.vz + 0x800 >> 0xc; iVar5 = (((local_38 * local_38 + local_30 * local_30) - iVar5 * iVar5) * (int)car_cosmetics[(byte)(cp->ap).model].twistRateY + 0x800 >> 0xc) + 0x1000; if (strikeVel < 0x7f001) { strikeVel = (strikeVel << 0xc) / iVar5; if (iVar5 == 0) { trap(7); } } else { if (iVar5 == 0) { trap(7); } strikeVel = strikeVel / iVar5 << 0xc; } if (strikeVel < 0) { strikeVel = strikeVel + 0x3f; } strikeVel = strikeVel >> 6; if (local_90.surfNormal.vx < 0) { local_90.surfNormal.vx = local_90.surfNormal.vx + 0x3f; } iVar5 = strikeVel * (local_90.surfNormal.vx >> 6); if (local_90.surfNormal.vy < 0) { local_90.surfNormal.vy = local_90.surfNormal.vy + 0x3f; } iVar6 = strikeVel * (local_90.surfNormal.vy >> 6); if (local_90.surfNormal.vz < 0) { local_90.surfNormal.vz = local_90.surfNormal.vz + 0x3f; } strikeVel = strikeVel * (local_90.surfNormal.vz >> 6); *(int *)(cp->st + 0x1c) = *(int *)(cp->st + 0x1c) + iVar5; *(int *)(cp->st + 0x20) = *(int *)(cp->st + 0x20) + iVar6; *(int *)(cp->st + 0x24) = *(int *)(cp->st + 0x24) + strikeVel; (cp->hd).aacc[2] = ((cp->hd).aacc[2] + (local_38 * iVar6 + 0x800 >> 0xc)) - (local_34 * iVar5 + 0x800 >> 0xc); (cp->hd).aacc[0] = ((cp->hd).aacc[0] + (local_34 * strikeVel + 0x800 >> 0xc)) - (local_30 * iVar6 + 0x800 >> 0xc); (cp->hd).aacc[1] = ((cp->hd).aacc[1] + (local_30 * iVar5 + 0x800 >> 0xc)) - (local_38 * strikeVel + 0x800 >> 0xc); } } if (bVar2) { return; } } if (DAT_000aa0ec != 0) { pE->type = BANG_USED; DAT_000aa0ec = 0; } return;*/ } // decompiled code // original method signature: // void /*$ra*/ AddFlash(struct VECTOR *pos /*$a0*/) // line 747, offset 0x0001f4f4 /* begin block 1 */ // Start line: 748 // Start offset: 0x0001F4F4 // Variables: // int dist; // $a0 /* end block 1 */ // End offset: 0x0001F570 // End Line: 761 /* begin block 2 */ // Start line: 1947 /* end block 2 */ // End Line: 1948 /* begin block 3 */ // Start line: 1955 /* end block 3 */ // End Line: 1956 /* begin block 4 */ // Start line: 1958 /* end block 4 */ // End Line: 1959 void AddFlash(VECTOR *pos) { UNIMPLEMENTED(); /* ulong uVar1; _PLAYER *pPoint2; if (NoPlayerControl == 0) { pPoint2 = &player; } else { pPoint2 = (_PLAYER *)&player.cameraPos; } uVar1 = Long2DDistance(pos, (VECTOR *)pPoint2); if ((int)uVar1 < 0x9c4) { gWantFlash = 1; flashval = 0x96 - (int)uVar1 / 0x14; } return;*/ }