public override uint OnCollision(HitDetection hit) { int iVar2; int iVar4; Vehicle vVar9; VigTransform auStack32; if (hit.self.type == 2 && (hit.self.flags & 0x4000000) == 0) { vVar9 = (Vehicle)hit.self; if (vVar9.id < 0) { GameManager.instance.FUN_15AA8(~vVar9.id, 8, 255, 64, 16); } vVar9.physics1.X += physics1.Z * 6; vVar9.physics1.Z += physics2.X * 6; iVar4 = (int)GameManager.FUN_2AC5C(); vVar9.physics1.Y += (((iVar4 << 12) >> 15) - 0x800) * 0x80; if ((flags & 0x1000000) == 0) { flags |= 0x1000000; vVar9.flip = 200; iVar2 = GameManager.instance.FUN_1DD9C(); GameManager.instance.FUN_1E580(iVar2, vData.sndList, 3, vVar9.vTransform.position); GameManager.instance.FUN_2F798(this, hit); auStack32 = new VigTransform(); auStack32.position = Utilities.FUN_24148(vTransform, hit.position); auStack32.rotation = Utilities.FUN_2A5EC(hit.normal1); LevelManager.instance.FUN_4E56C(auStack32, 123); } } return(0); }
public Vehicle DAT_BC; //0xBC //FUN_80 (TSUNAMI.DLL) public override uint UpdateW(int arg1, int arg2) { byte bVar1; Ballistic puVar2; int iVar3; TileData tVar3; VigObject oVar3; int iVar4; int iVar6; int iVar7; int iVar8; int iVar9; VigObject oVar9; Vehicle vVar9; Vector3Int uStack192; Vector3Int uStack176; Vector3Int iStack160; Vector3Int iStack144; Vector3Int iStack128; Matrix3x3 uStack112; Vector3Int iStack80; Vector3Int sStack64; Vector3Int uStack56; Vector3Int uStack48; Vector3Int uStack40; oVar9 = DAT_80; if (arg1 != 2) { if (arg1 < 3) { if (arg1 != 0) { return(0); } bVar1 = DAT_19; DAT_A4++; if (4 < bVar1) { if (bVar1 != 5) { return(0); } iStack144 = new Vector3Int(DAT_AC, DAT_AC, DAT_AC); iStack128 = new Vector3Int(DAT_B0, DAT_B0, DAT_B0); Utilities.FUN_2449C(DAT_84_2.rotation, iStack144, ref vTransform.rotation); Utilities.FUN_2449C(DAT_84_2.rotation, iStack128, ref oVar9.vTransform.rotation); iVar9 = DAT_AC - 245; iVar3 = DAT_B0 + 245; DAT_AC = iVar9; DAT_B0 = iVar3; return(0); } if (bVar1 == 0) { uStack192 = new Vector3Int(DAT_AC, DAT_AC, DAT_AC); uStack176 = new Vector3Int(DAT_B0, DAT_B0, DAT_B0); Utilities.FUN_2449C(DAT_84_2.rotation, uStack192, ref vTransform.rotation); Utilities.FUN_2449C(DAT_84_2.rotation, uStack176, ref oVar9.vTransform.rotation); iVar9 = DAT_AC + 122; iVar3 = DAT_B0 - 122; DAT_AC = iVar9; DAT_B0 = iVar3; } iStack144 = new Vector3Int(vTransform.rotation.V02, 0, vTransform.rotation.V22); if (DAT_19 == 1) { iVar3 = DAT_B4 + 1017; } else { if (DAT_19 != 3) { goto LAB_25C; } iVar3 = DAT_B4 - 2034; } DAT_B4 = iVar3; LAB_25C: iStack160 = new Vector3Int(); iStack160.x = iStack144.x * DAT_B4 >> 12; iStack160.z = iStack144.z * DAT_B4 >> 12; iStack160.y = 0x10000; iStack128 = new Vector3Int(); iStack128.x = vTransform.position.x + iStack160.x; iStack128.y = vTransform.position.y + 0x10000; iStack128.z = vTransform.position.z + iStack160.z; tVar3 = GameManager.instance.terrain.GetTileByPosition((uint)iStack128.x, (uint)iStack128.z); if (tVar3.DAT_10[3] != 7) { vTransform.position = iStack128; } iVar3 = FUN_2CFBC(vTransform.position); if (iVar3 - 0x5000 < vTransform.position.y) { vTransform.position.y = iVar3 - 0x5000; } if (GameManager.instance.DAT_DB0 != 0) { if (iVar3 > GameManager.instance.DAT_DB0) { vTransform.position.y = GameManager.instance.DAT_DB0; } } oVar9.vTransform.position = Utilities.FUN_24148(vTransform, screen); vVar9 = (Vehicle)oVar9; oVar3 = vVar9.target; if (oVar3 != null) { iStack80 = new Vector3Int(); iStack80.x = oVar3.screen.x - vTransform.position.x; iStack80.y = oVar3.screen.y - vTransform.position.y; iStack80.z = oVar3.screen.z - vTransform.position.z; Utilities.FUN_29FC8(iStack80, out uStack48); sStack64 = new Vector3Int(uStack48.z, 0, -uStack48.x); iVar3 = uStack48.y * sStack64.z; if (iVar3 < 0) { iVar3 += 4095; } iVar6 = uStack48.z; iVar4 = iVar6 * iVar6 - uStack48.x * sStack64.z; uStack56 = new Vector3Int(); uStack56.x = iVar3 >> 12; if (iVar4 < 0) { iVar4 += 4095; } iVar6 = -uStack48.y * iVar6; uStack56.y = iVar4 >> 12; if (iVar6 < 0) { iVar6 += 4095; } uStack56.z = iVar6 >> 12; uStack112 = new Matrix3x3(); uStack112.V00 = (short)sStack64.x; uStack112.V01 = (short)uStack56.x; uStack112.V02 = (short)uStack48.x; uStack112.V10 = (short)sStack64.y; uStack112.V11 = (short)uStack56.y; uStack112.V12 = (short)uStack48.y; uStack112.V20 = (short)sStack64.z; uStack112.V21 = (short)uStack56.z; uStack112.V22 = (short)uStack48.z; uStack112 = Utilities.MatrixNormal(uStack112); Utilities.FUN_248C4(vTransform.rotation, uStack112, out uStack112); iVar3 = 64; if (DAT_19 == 2) { iVar3 = 256; } iVar6 = uStack112.V02; iVar4 = -iVar3; if (-iVar3 <= iVar6) { iVar4 = iVar3; if (iVar6 <= iVar3) { iVar4 = iVar6; } } iVar6 = -uStack112.V01; iVar7 = -iVar3; if (-iVar3 <= iVar6) { iVar7 = iVar3; if (iVar6 <= iVar3) { iVar7 = iVar6; } } FUN_24700(0, (short)iVar4, (short)iVar7); vTransform.rotation = Utilities.MatrixNormal(vTransform.rotation); } uStack40 = new Vector3Int(DAT_B0, DAT_B0, DAT_B0); Utilities.FUN_2449C(vTransform.rotation, uStack40, ref oVar9.vTransform.rotation); if ((DAT_A4 & 3) != 0) { return(0); } puVar2 = vData.ini.FUN_2C17C(1, typeof(Ballistic), 8) as Ballistic; puVar2.type = 7; puVar2.flags = 0x24; puVar2.screen = vTransform.position; puVar2.FUN_3066C(); puVar2.vTransform = vTransform; return(0); } return(0); } switch (DAT_19) { case 0: DAT_19++; oVar9.flags |= 2; GameManager.instance.FUN_30CB0(this, 50); flags &= 0xffffffdf; return(0); case 1: iVar8 = 30; DAT_19++; break; case 2: iVar8 = 15; DAT_19++; break; case 3: case 4: if (DAT_A4 - DAT_A8 < 5) { iVar8 = 5; DAT_19 = 4; DAT_B4 = 4577; } else { iVar8 = 15; DAT_19 = 5; DAT_AC = 0x1000; DAT_B0 = 0x199; DAT_84_2 = vTransform; oVar9.flags &= 0xfffffffd; } break; case 5: oVar9.FUN_30B78(); oVar9.flags &= 0xf9ffffdf; GameManager.instance.FUN_309A0(this); GameManager.instance.DAT_1084--; goto default; default: return(0); } LAB_994: GameManager.instance.FUN_30CB0(this, iVar8); return(0); }
//FUN_1570 (HARBOR.DLL) public override uint UpdateW(int arg1, int arg2) { short sVar1; sbyte sVar2; VigObject unaff_s2; VigObject unaff_s3; short sVar3; short sVar4; VigObject unaff_s5; int iVar5; VigObject unaff_s6; int iVar6; int iVar7; uint uVar7; ConfigContainer ccVar7; int iVar8; BufferedBinaryReader pcVar9; int iVar10; VigObject oVar10; VigObject oVar12; Vehicle ppcVar11; Vector3Int local_48; Vector3Int local_38; Vector3Int local_28; VigTransform auStack136; VigTransform auStack104; switch (arg1) { case 0: break; case 1: child2.type = 3; FUN_14C0((VigChild)child2, _CHILD_TYPE.Child); FUN_1518(child2, 3); sVar1 = id; if (sVar1 == 114) { DAT_A8 = 0x200; child2.vr.y = 0x200; sVar4 = -0x200; } else { if (114 < sVar1) { if (sVar1 == 115) { DAT_A8 = 0; DAT_AA = -0x755; return(0); } return(0); } if (sVar1 != 113) { return(0); } DAT_A8 = -0x200; child2.vr.y = -0x200; sVar4 = 0x400; } DAT_AA = sVar4; child2.ApplyTransformation(); return(0); default: return(0); case 8: uVar7 = FUN_32B90((uint)arg2) ? 1U : 0; return(uVar7); } switch (tags) { case 1: oVar12 = child2; ppcVar11 = DAT_80 as Vehicle; oVar10 = oVar12.child2; unaff_s3 = oVar10.child2; if (oVar10 == null || unaff_s3 == null) { return(0); //FUN_15D9C } DAT_A4--; oVar10.vr.x += DAT_B4; unaff_s3.vr.x -= DAT_B4; oVar10.ApplyTransformation(); unaff_s3.ApplyTransformation(); if (DAT_80 == null) { iVar10 = DAT_A4; } else { pcVar9 = ppcVar11.vCollider.reader; ccVar7 = unaff_s3.FUN_2C5F4(0x8000); auStack136 = GameManager.instance.FUN_2CEAC(unaff_s3, ccVar7); local_48 = new Vector3Int(); local_48.x = (pcVar9.ReadInt32(4) + pcVar9.ReadInt32(16)) / 2; local_48.z = (pcVar9.ReadInt32(12) + pcVar9.ReadInt32(24)) / 2; local_48.y = pcVar9.ReadInt32(8); local_38 = Utilities.FUN_24148(ppcVar11.vTransform, local_48); local_28 = new Vector3Int(); local_28.x = auStack136.position.x - local_38.x; local_28.y = auStack136.position.y - local_38.y; local_28.z = auStack136.position.z - local_38.z; iVar10 = Utilities.FUN_29E84(local_28); if (iVar10 < 0x50001) { iVar8 = ppcVar11.vTransform.rotation.V12; ppcVar11.physics1.X = local_28.x * 4 + ppcVar11.physics1.X / 2; ppcVar11.physics1.Y = local_28.y + ppcVar11.physics1.Y / 2; ppcVar11.physics2.X = 0; ppcVar11.physics2.Y = 0; ppcVar11.physics2.Z = 0; ppcVar11.physics1.Z = local_28.z * 4 + ppcVar11.physics1.Z / 2; if (iVar8 < 0) { iVar8 += 7; } iVar5 = -ppcVar11.vTransform.rotation.V10; if (0 < ppcVar11.vTransform.rotation.V10) { iVar5 += 7; } ppcVar11.FUN_24700((short)(iVar8 >> 3), 0, (short)(iVar5 >> 3)); ppcVar11.vTransform.rotation = Utilities.MatrixNormal(ppcVar11.vTransform.rotation); if (DAT_A4 == 0) { if (iVar10 < 0x18001) { tags = 3; iVar7 = GameManager.instance.FUN_1DD9C(); GameManager.instance.FUN_1E628(iVar7, vData.sndList, 2, vTransform.position); LevelManager.instance.FUN_4DD54(ppcVar11, local_48, 142); ppcVar11.vTransform.position.x += auStack136.position.x - local_38.x; ppcVar11.vTransform.position.y += auStack136.position.y - local_38.y; ppcVar11.vTransform.position.z += auStack136.position.z - local_38.z; sVar1 = (short)oVar12.vr.y; DAT_BC = 0; DAT_B8 = (DAT_AA - sVar1) / 120; auStack104 = Utilities.FUN_2A3EC(auStack136); DAT_84_2 = Utilities.CompMatrixLV(auStack104, ppcVar11.vTransform); ppcVar11.physics1.X = 0; ppcVar11.physics1.Y = 0; ppcVar11.physics1.Z = 0; ppcVar11.state = _VEHICLE_TYPE.CraneSmall; } else { tags = 2; } DAT_B4 = -4; return(0); } return(0); } iVar10 = DAT_A4; DAT_80 = null; } if (iVar10 != 0) { return(0); } tags = 2; DAT_B4 = -1; break; case 2: oVar10 = child2.child2; unaff_s2 = oVar10.child2; if (oVar10 == null || unaff_s2 == null) { return(0); //FUN_15D9C } unaff_s2.vr.x -= DAT_B4; sVar3 = (short)(oVar10.vr.x + DAT_B4); oVar10.vr.x = sVar3; if (sVar3 << 16 < 1) { oVar10.vr.x = 0; unaff_s2.vr.x = 0; tags = 0; FUN_30BA8(); if (DAT_18 != 0) { GameManager.instance.FUN_1DE78(DAT_18); DAT_18 = 0; } } unaff_s2.ApplyTransformation(); oVar10.ApplyTransformation(); return(0); case 3: oVar12 = child2; oVar10 = oVar12.child2; unaff_s5 = oVar10.child2; if (oVar10 == null || unaff_s5 == null) { return(0); //FUN_15D9C } if (-0x200 < oVar10.vr.x) { oVar10.vr.x += DAT_B4; unaff_s5.vr.x -= DAT_B4; unaff_s5.ApplyTransformation(); oVar10.ApplyTransformation(); } iVar10 = DAT_B8; if (iVar10 < 1) { if (iVar10 < DAT_BC) { iVar10 = DAT_BC - 1; DAT_BC = iVar10; } } else { if (DAT_BC < iVar10) { iVar10 = DAT_BC + 1; DAT_BC = iVar10; } } oVar12.vr.y += DAT_BC; oVar12.ApplyTransformation(); iVar10 = DAT_AA - oVar12.vr.y; if (DAT_BC < 0) { iVar10 = -iVar10; } if (10 < iVar10) { ccVar7 = unaff_s5.FUN_2C5F4(0x8000); auStack136 = GameManager.instance.FUN_2CEAC(unaff_s5, ccVar7); DAT_80.vTransform = Utilities.CompMatrixLV(auStack136, DAT_84_2); return(0); } tags = 4; if (DAT_18 != 0) { GameManager.instance.FUN_1DE78(DAT_18); DAT_18 = 0; } iVar7 = GameManager.instance.FUN_1DD9C(); GameManager.instance.FUN_1E628(iVar7, vData.sndList, 2, vTransform.position); DAT_A4 = 60; DAT_B4 = 11; DAT_BC = 0; DAT_B8 = -DAT_B8; ((Vehicle)DAT_80).FUN_41FEC(); DAT_80 = null; break; case 4: iVar10 = DAT_A4 - 1; DAT_A4 = iVar10; if (0 < iVar10) { return(0); } tags = 5; sVar2 = (sbyte)GameManager.instance.FUN_1DD9C(); GameManager.instance.FUN_1E628(sVar2, vData.sndList, 1, vTransform.position); goto case 5; case 5: oVar12 = child2; oVar10 = oVar12.child2; unaff_s6 = oVar10.child2; if (oVar10 == null || unaff_s6 == null) { return(0); //FUN_15D9C } if (oVar10.vr.x < 5) { oVar10.vr.x += DAT_B4; unaff_s6.vr.x -= DAT_B4; unaff_s6.ApplyTransformation(); oVar10.ApplyTransformation(); } iVar10 = DAT_B8; if (iVar10 < 1) { if (iVar10 < DAT_BC) { iVar10 = DAT_BC - 1; DAT_BC = iVar10; } } else { if (DAT_BC < iVar10) { iVar10 = DAT_BC + 1; DAT_BC = iVar10; } } oVar12.vr.y += DAT_BC; oVar12.ApplyTransformation(); iVar6 = DAT_A8 - oVar12.vr.y; if (DAT_BC < 0) { iVar6 = -iVar6; } if ((iVar6 & 0xfff) < 11) { tags = 0; FUN_30BA8(); if (DAT_18 == 0) { return(0); } GameManager.instance.FUN_1DE78(DAT_18); DAT_18 = 0; } break; } return(0); }
public long FUN_5105C(int param1, bool param2, ref VigTransform param3) { long lVar1; int iVar2; int iVar3; int iVar4; Vector3Int local_28; Vector3Int local_18; Vector3Int local_10; Vector3Int local_8; FUN_285E4(param1, ref param3.position, out local_28); if ((DAT_0C & 1) == 0) { if ((DAT_0C & 8) == 0) { local_10 = GameManager.instance.terrain.FUN_1B998((uint)param3.position.x, (uint)param3.position.z); local_10 = Utilities.VectorNormal(local_10); local_28.y = -(local_28.x * local_10.x + local_28.z * local_10.z) / local_10.y; } else { local_10 = new Vector3Int(0, -0x1000, 0); local_28.y = 0; } lVar1 = Utilities.VectorNormal2(local_28, out local_8); } else { local_28.y = DAT_00[1].DAT_00.y - DAT_00[0].DAT_00.y; lVar1 = Utilities.VectorNormal2(local_28, out local_8); iVar2 = local_8.x; iVar4 = iVar2 * local_8.y; if (iVar4 < 0) { iVar4 += 4095; } iVar3 = local_8.z; local_10 = new Vector3Int(); local_10.x = iVar4 >> 12; iVar4 = iVar2 * iVar2 - iVar3 * iVar3; iVar3 = iVar3 * local_8.y; if (iVar4 < 0) { iVar4 += 4095; } local_10.y = iVar4 >> 12; if (iVar3 < 0) { iVar3 += 4095; } local_10.z = iVar3 >> 12; local_10 = Utilities.VectorNormal(local_10); } if (!param2) { local_8.x = -local_8.x; local_8.y = -local_8.y; local_8.z = -local_8.z; } local_18 = Utilities.FUN_2A1E0(local_10, local_8); param3.rotation.V00 = (short)-local_18.x; param3.rotation.V10 = (short)-local_18.y; param3.rotation.V20 = (short)-local_18.z; param3.rotation.V01 = (short)-local_10.x; param3.rotation.V11 = (short)-local_10.y; param3.rotation.V21 = (short)-local_10.z; param3.rotation.V02 = (short)local_8.x; param3.rotation.V12 = (short)local_8.y; param3.rotation.V22 = (short)local_8.z; return(lVar1); }