public void FUN_3754()
    {
        RSEG_DB rVar1;
        int     iVar2;

        DAT_A8 = null;
        DAT_B0 = vCollider.reader.ReadInt32(24) + 0x5000;
        DAT_B4 = vCollider.reader.ReadInt32(12) - 0x5000;
        rVar1  = LevelManager.instance.FUN_518DC(screen, -1);
        DAT_B8 = rVar1;
        DAT_C0 = 1;
        iVar2  = rVar1.FUN_51334(screen);
        DAT_C4 = iVar2 << 16;

        if (tags != 0)
        {
            DAT_BC = 3814;
            flags |= 0x80;
        }

        physics2.X = 0;
        flags     |= 0x100;
        physics2.Y = 0;
        physics2.Z = 0;
        DAT_A0     = new Vector3Int(0x10, 0x20, 0x40);
        GameManager.instance.FUN_30334(GameManager.instance.worldObjs, 20, this);
    }
    public void FUN_3934(JUNC_DB param1)
    {
        RSEG_DB piVar1;
        int     iVar2;

        piVar1 = param1.DAT_1C[0];
        DAT_B8 = piVar1;
        iVar2  = piVar1.DAT_00[0] == param1 ? 1 : 0;
        DAT_C0 = iVar2;
        DAT_C4 = (iVar2 == 0 ? 1 : 0) << 28;
    }
Example #3
0
    public static void ImportRSEG(MenuCommand menuCommand)
    {
        string file = EditorUtility.OpenFilePanel("Open rseg file to load asset", previousOpen, "");

        previousOpen = Path.GetDirectoryName(file);
        string  name  = Path.GetFileNameWithoutExtension(file);
        int     index = (byte)name[name.Length - 1] - 0x30;
        RSEG_DB rseg  = menuCommand.context as RSEG_DB;

        while (true)
        {
            if (!rseg.LoadDB(file))
            {
                break;
            }

            index++;
            file = previousOpen + "\\RSEG" + index.ToString().PadLeft(4, '0');
            GameObject obj = new GameObject("RSEG" + index.ToString().PadLeft(2, '0'));
            rseg = obj.AddComponent <RSEG_DB>();
        }
    }
    public int DAT_94;     //0x94

    //FUN_24CC (HARBOR.DLL)
    public override uint UpdateW(int arg1, int arg2)
    {
        sbyte           sVar1;
        VigObject       oVar2;
        int             iVar3;
        RSEG_DB         unaff_s3;
        CraneLarge      ppcVar4;
        int             iVar6;
        RSEG_DB         rVar6;
        long            lVar6;
        VigObject       oVar6;
        ConfigContainer ccVar6;
        RSEG_DB         piVar7;
        JUNC_DB         jVar8;
        int             iVar9;
        JUNC_DB         jVar9;
        Vector3Int      local_50;
        Vector3Int      local_40;
        Vector3Int      local_38;
        Vector3Int      local_30;

        switch (arg1)
        {
        case 0:
            break;

        case 1:
            rVar6  = LevelManager.instance.FUN_518DC(screen, id - 100);
            DAT_88 = rVar6;
            DAT_90 = 1;
            iVar9  = rVar6.FUN_51334(screen);
            DAT_94 = iVar9 << 16;
            DAT_8C = 6103;
            flags |= 0x88;
            return(0);

        case 2:
            iVar6 = 120;

            if (id == 117)
            {
                iVar6 = 121;
            }

            ppcVar4 = (CraneLarge)GameManager.instance.FUN_318D0(iVar6);

            if (ppcVar4.GetType().IsSubclassOf(typeof(VigObject)))
            {
                ppcVar4.UpdateW(21, null);
            }

            FUN_30B78();
            return(0);

        case 4:
            iVar6 = 120;

            if (id == 117)
            {
                iVar6 = 121;
            }

            ppcVar4 = (CraneLarge)GameManager.instance.FUN_318D0(iVar6);

            if (!ppcVar4.GetType().IsSubclassOf(typeof(VigObject)))
            {
                return(0);
            }

            ppcVar4.UpdateW(21, null);
            return(0);

        default:
            return(0);

        case 8:
            FUN_32B90((uint)arg2);
            return(0);

        case 9:
            if (arg2 != 0)
            {
                GameManager.instance.FUN_309A0(this);
                return(0);
            }

            return(0);
        }

        switch (((byte)tags - 1) * 0x1000000 >> 24)
        {
        case 0:
        case 8:
            iVar9 = DAT_8C + 33;
            goto LAB_261C;

        case 1:
        case 4:
            if (DAT_84 == null)
            {
                goto case 12;
            }

            if (DAT_84.tags == 0)
            {
                goto case 5;
            }

            if (DAT_90 == 0)
            {
                iVar9 = DAT_94;
            }
            else
            {
                iVar9 = 0x10000000 - DAT_94;
            }

            if (iVar9 < 0)
            {
                iVar9 += 0xffff;
            }

            iVar9 = (iVar9 >> 16) * 4577;

            if (iVar9 < 0)
            {
                iVar9 += 4095;
            }

            goto LAB_2694;

        case 2:
        case 5:
            if (DAT_84 == null || DAT_84.tags == 0)
            {
                goto case 12;
            }

            break;

        case 6:
        case 7:
            if (DAT_90 == 0)
            {
                iVar9 = DAT_94;
            }
            else
            {
                iVar9 = 0x10000000 - DAT_94;
            }

            if (iVar9 < 0)
            {
                iVar9 += 0xffff;
            }

            iVar9 = (iVar9 >> 16) * 4577;

            if (iVar9 < 0)
            {
                iVar9 += 4095;
            }

LAB_2694:
            iVar3 = 305;

            if (305 < iVar9 >> 12)
            {
                iVar3 = iVar9 >> 12;
            }

            DAT_8C = iVar3;
            break;

        case 11:
            iVar9 = DAT_8C + 3;
            goto LAB_261C;

        case 12:
            iVar9 = DAT_8C + 33;
LAB_261C:
            iVar3 = 6103;

            if (iVar9 < 6103)
            {
                iVar3 = iVar9;
            }

            DAT_8C = iVar3;
            break;
        }

        iVar9 = DAT_94;
        iVar6 = vTransform.position.y;

        if (iVar9 < 0)
        {
            iVar9 += 0xffff;
        }

        DAT_88.FUN_285E4(iVar9 >> 16, ref vTransform.position, out local_50);
        vTransform.position.y = iVar6;
        local_38 = new Vector3Int();
        iVar6    = FUN_2CFBC(vTransform.position, ref local_38);
        vTransform.position.y = iVar6;

        if (DAT_90 == 0)
        {
            local_50.x = -local_50.x;
            local_50.z = -local_50.z;
        }

        local_50.y = -(local_50.x * local_38.x + local_50.z * local_38.z) / local_38.y;
        lVar6      = Utilities.VectorNormal2(local_50, out local_30);
        iVar9      = (int)Utilities.SquareRoot(lVar6);

        if (DAT_90 == 0)
        {
            iVar3 = DAT_8C * -0x10000;
        }
        else
        {
            iVar3 = DAT_8C << 16;
        }

        DAT_94  += iVar3 / iVar9;
        local_40 = Utilities.FUN_2A1E0(local_38, local_30);
        vTransform.rotation.V00 = (short)-local_40.x;
        vTransform.rotation.V10 = (short)-local_40.y;
        vTransform.rotation.V20 = (short)-local_40.z;
        vTransform.rotation.V01 = (short)-local_38.x;
        vTransform.rotation.V11 = (short)-local_38.y;
        vTransform.rotation.V22 = (short)-local_38.z;
        vTransform.rotation.V02 = (short)local_30.x;
        vTransform.rotation.V12 = (short)local_30.y;
        vTransform.rotation.V22 = (short)local_30.z;

        if ((uint)DAT_94 < 0x10000001)
        {
            return(0);
        }

        piVar7   = DAT_88;
        jVar8    = piVar7.DAT_00[DAT_90];
        iVar3    = 0;
        unaff_s3 = null; //not in the original code

        if (jVar8.DAT_11 != 0)
        {
            do
            {
                unaff_s3 = jVar8.DAT_1C[iVar3];

                if (unaff_s3 != piVar7 && unaff_s3.DAT_08 == piVar7.DAT_08)
                {
                    break;
                }

                iVar3++;
            } while (iVar3 < jVar8.DAT_11);
        }

        DAT_88 = unaff_s3;
        jVar9  = unaff_s3.DAT_00[0];
        DAT_90 = jVar9 == jVar8 ? 1 : 0;
        DAT_94 = ((jVar9 == jVar8 ? 1 : 0) == 0 ? 1 : 0) << 28;

        if ((jVar8.DAT_10 & 0x40) == 0)
        {
            return(0);
        }

        sVar1 = (sbyte)jVar8.DAT_12;
        tags  = sVar1;

        switch (sVar1)
        {
        case 1:
            FUN_30BA8();
            GameManager.instance.FUN_30CB0(this, 600);
            iVar6 = 120;

            if (id == 117)
            {
                iVar6 = 121;
            }

            ppcVar4 = (CraneLarge)GameManager.instance.FUN_318D0(iVar6);

            if (ppcVar4.GetType().IsSubclassOf(typeof(VigObject)))
            {
                ppcVar4.UpdateW(21, this);
            }

            break;

        case 2:
            iVar6 = 49;
            goto LAB_29EC;

        case 3:
        case 6:
            if (DAT_84 != null)
            {
                if (DAT_84.tags != 0)
                {
                    DAT_8C = 0;
                    return(0);
                }

                return(0);
            }

            break;

        case 4:
            if (DAT_80 == null)
            {
                ccVar6 = FUN_2C5F4(0x8000);
                oVar2  = Barge.FUN_1F64();
                DAT_80 = oVar2;
                Utilities.FUN_2CB04(this, ccVar6, oVar2);
                Utilities.ParentChildren(this, this);
                return(0);
            }

            return(0);

        case 5:
            iVar6 = 50;
LAB_29EC:
            oVar6  = GameManager.instance.FUN_318D0(iVar6);
            DAT_84 = oVar6;
            break;

        case 9:
            FUN_30BA8();
            GameManager.instance.FUN_30CB0(this, 180);
            return(0);

        case 10:
            if (DAT_80 == null)
            {
                return(0);
            }

            oVar6 = DAT_80.FUN_2CCBC();
            GameManager.instance.FUN_307CC(oVar6);
            DAT_80 = null;
            break;
        }

        return(0);
    }
    public int FUN_3AD0()
    {
        int         iVar1;
        long        lVar1;
        RSEG_DB     piVar2;
        int         iVar3;
        TrainEngine oVar3;
        JUNC_DB     jVar3;
        TrainEngine piVar4;
        RSEG_DB     rVar4;
        RSEG_DB     piVar5;
        int         iVar6;
        JUNC_DB     jVar6;
        int         iVar7;

        if (DAT_B8 == null)
        {
            if (vCollider != null)
            {
                vCollider.reader.Seek(4, SeekOrigin.Current);
                FUN_2B4F8(vCollider.reader);
                vCollider.reader.Seek(-4, SeekOrigin.Current);
                return(0);
            }

            GameManager.instance.FUN_309A0(this);
            return(0);
        }

        lVar1 = FUN_3964();
        oVar3 = DAT_A8;

        if (oVar3 == null)
        {
            if (tags < 2)
            {
                iVar3  = DAT_BC - 14;
                DAT_BC = iVar3;

                if (iVar3 < 0)
                {
                    piVar4 = this;

                    do
                    {
                        piVar4.tags = 0;
                        piVar4.FUN_30BA8();
                        GameManager.instance.FUN_1DE78(DAT_18);
                        DAT_18 = 0;
                        piVar4 = piVar4.DAT_AC;
                    } while (piVar4 != null);
                }
            }

            iVar3 = (int)Utilities.SquareRoot(lVar1);
            iVar6 = DAT_C4;

            if (DAT_C0 != 0)
            {
                iVar7 = DAT_BC << 16;
                goto LAB_3CBC;
            }
        }
        else
        {
            if ((oVar3.flags & 2) == 0)
            {
                iVar6 = oVar3.vTransform.rotation.V02 * oVar3.DAT_B4;

                if (iVar6 < 0)
                {
                    iVar6 += 4095;
                }

                iVar7 = oVar3.vTransform.rotation.V22 * oVar3.DAT_B4;

                if (iVar7 < 0)
                {
                    iVar7 += 4095;
                }

                iVar3 = vTransform.rotation.V02 * ((oVar3.vTransform.position.x + (iVar6 >> 12)) - vTransform.position.x) +
                        vTransform.rotation.V22 * ((oVar3.vTransform.position.z + (iVar7 >> 12)) - vTransform.position.z) +
                        DAT_B0 * -0x1000;

                iVar7 = 0;

                if (0 < iVar3)
                {
                    iVar7 = iVar3;
                }

                iVar3 = iVar7;

                if (iVar7 < 0)
                {
                    iVar3 = iVar7 + 4095;
                }

                DAT_BC = iVar3 >> 12;
                iVar3  = (int)Utilities.SquareRoot(lVar1);
                iVar6  = DAT_C4;

                if (DAT_C0 == 0)
                {
                    iVar7 *= -16;
                }
                else
                {
                    iVar7 <<= 4;
                }

                goto LAB_3CBC;
            }

            iVar3 = (int)Utilities.SquareRoot(lVar1);
            iVar6 = DAT_C4;

            if (DAT_C0 != 0)
            {
                iVar7 = DAT_BC << 16;
                goto LAB_3CBC;
            }
        }

        iVar7 = DAT_BC * -0x10000;
LAB_3CBC:
        DAT_C4 = iVar6 + iVar7 / iVar3;
        oVar3  = DAT_AC;

        if (oVar3 != null && (oVar3.flags & 2) != 0)
        {
            iVar6        = oVar3.DAT_C8 + DAT_BC;
            oVar3.DAT_C8 = iVar6;

            if (oVar3.DAT_B0 - DAT_B4 < iVar6)
            {
                oVar3.flags &= 0xffffffdd;
                oVar3.FUN_30B78();
            }
        }

        iVar1 = 0;

        if (0x10000000 < (uint)DAT_C4)
        {
            piVar2 = DAT_B8;
            jVar3  = piVar2.DAT_00[DAT_C0];
            rVar4  = null;

            if (jVar3.DAT_11 == 1)
            {
                FUN_30BA8();
                DAT_C8 = 0;
                flags |= 0x22;

                if (DAT_AC == null)
                {
                    FUN_3A00();
                }

                iVar1 = -1;
            }
            else
            {
                if (jVar3.DAT_11 == 2)
                {
                    rVar4 = jVar3.DAT_1C[0];

                    if (rVar4 == piVar2)
                    {
                        rVar4 = jVar3.DAT_1C[1];
                    }

                    if (rVar4.DAT_08 == 0xffff)
                    {
                        FUN_38FC();
                        iVar3  = vTransform.rotation.V02 * DAT_BC;
                        rVar4  = null;
                        flags &= 0xfffffeff;

                        if (iVar3 < 0)
                        {
                            iVar3 += 31;
                        }

                        physics1.X = iVar3 >> 5;
                        physics1.Y = 0;
                        iVar3      = vTransform.rotation.V22 * DAT_BC;

                        if (iVar3 < 0)
                        {
                            iVar3 += 31;
                        }

                        physics1.Z = iVar3 >> 5;
                        GameManager.instance.FUN_30CB0(this, 300);
                    }
                    else
                    {
                        DAT_C0 = rVar4.DAT_00[0] == jVar3 ? 1 : 0;
                    }
                }
                else
                {
                    iVar7  = 0;
                    jVar6  = jVar3;
                    piVar5 = rVar4;

                    if (jVar3.DAT_11 != 0)
                    {
                        do
                        {
                            rVar4 = jVar3.DAT_1C[iVar7];

                            if (rVar4 != piVar2 && DAT_C0 == (rVar4.DAT_00[0] == jVar3 ? 1 : 0))
                            {
                                piVar5 = rVar4;

                                if ((rVar4.DAT_08 != piVar2.DAT_08 ? 1 : 0) ==
                                    SteelMil.instance.DAT_4618[jVar3.DAT_12])
                                {
                                    break;
                                }
                            }

                            rVar4 = piVar5;
                            iVar7++;
                            piVar5 = rVar4;
                        } while (iVar7 < jVar3.DAT_11);
                    }

                    if (DAT_A8 != null && DAT_A8.DAT_B8 != rVar4)
                    {
                        FUN_38FC();
                    }
                }

                DAT_B8 = rVar4;
                DAT_C4 = (DAT_C0 == 0 ? 1 : 0) << 28;

                if (rVar4 != null)
                {
                    if (tags != 2)
                    {
                        return(1);
                    }

                    if (rVar4.DAT_00[DAT_C0].DAT_11 != 1)
                    {
                        return(1);
                    }

                    if (rVar4.DAT_00[DAT_C0].DAT_12 != 0)
                    {
                        return(1);
                    }

                    //FUN_326B0
                    tags = 1;
                }

                iVar1 = 1;
            }
        }

        return(iVar1);
    }
    public RSEG_DB DAT_80_2; //0x80

    //FUN_2814 (NUCLEAR.DLL)
    public override uint UpdateW(int arg1, int arg2)
    {
        long      lVar2;
        RSEG_DB   rVar2;
        int       iVar3;
        uint      uVar3;
        ushort    uVar4;
        int       iVar5;
        VigObject oVar5;
        RSEG_DB   piVar6;
        VigObject ppcVar7;
        int       iVar9;
        VigObject oVar9;
        JUNC_DB   jVar9;

        switch (arg1)
        {
        case 0:
            iVar9 = physics1.Z;

            if (iVar9 < 0)
            {
                iVar9 += 0xffff;
            }

            lVar2 = DAT_80_2.FUN_5105C(iVar9 >> 16, physics1.Y != 0, ref vTransform);
            iVar9 = (int)Utilities.SquareRoot(lVar2);

            if (physics1.Y == 0)
            {
                iVar5 = physics1.W * -0x10000;
            }
            else
            {
                iVar5 = physics1.W << 16;
            }

            iVar3      = physics1.Z + iVar5 / iVar9;
            physics1.Z = iVar3;

            if ((uint)iVar3 < 0x10000001)
            {
                return(0);
            }

            jVar9 = DAT_80_2.DAT_00[physics1.Y];

            if (jVar9.DAT_11 != 1)
            {
                piVar6     = jVar9.DAT_1C[jVar9.DAT_1C[0] == DAT_80_2 ? 1 : 0];
                DAT_80_2   = piVar6;
                iVar3      = piVar6.DAT_00[0] == jVar9 ? 1 : 0;
                physics1.Y = iVar3;
                physics1.Z = -(iVar3 == 0 ? 1 : 0) & 0x10000000;
                return(0);
            }

            goto LAB_2BD8;

        case 2:
            uVar3  = GameManager.FUN_2AC5C();
            oVar9  = GameManager.instance.FUN_318D0((int)(uVar3 & 1) + 49);
            screen = oVar9.screen;
            flags &= 0xffffffdd;
            Dictionary <int, Type> dict = new Dictionary <int, Type>();
            dict.Add(921, typeof(ForkLift2));
            dict.Add(919, typeof(ForkLift2));
            dict.Add(913, typeof(ForkLift2));
            FUN_2C124(25, dict);
            Utilities.ParentChildren(this, this);
            FUN_30B78();
            goto case 1;

        case 1:
            rVar2         = LevelManager.instance.FUN_518DC(screen, 16);
            DAT_80_2      = rVar2;
            iVar9         = rVar2.FUN_51334(screen);
            ppcVar7       = child2;
            physics1.Z    = iVar9 << 16;
            physics1.Y    = 1;
            physics1.W    = 4577;
            maxHalfHealth = 50;
            maxFullHealth = 50;
            flags        |= 0x188;

            while (ppcVar7 != null)
            {
                if (3 < ppcVar7.id)
                {
                    ((ForkLift2)ppcVar7).state = _FORKLIFT2_TYPE.Type1;
                }

                ppcVar7 = ppcVar7.child;
            }

            break;

        default:
            break;

        case 8:
            uVar4 = maxHalfHealth;
            oVar9 = null;

            if (uVar4 < arg2)
            {
                oVar5         = child2;
                maxHalfHealth = maxFullHealth;

                while (oVar5 != null)
                {
                    if (3 < oVar5.id && (oVar9 == null || oVar5.id < oVar9.id))
                    {
                        oVar9 = oVar5;
                    }

                    oVar5 = oVar5.child;
                }

                if (oVar9 != null)
                {
                    oVar9.FUN_2CD04();
                    oVar9.FUN_305FC();
                    oVar9.FUN_4DC94();
                    return(0);
                }

                FUN_4DC94();
                return(0);
            }

            maxHalfHealth = (ushort)(uVar4 - arg2);
            break;

        case 9:
            if (arg2 == 0)
            {
                return(0);
            }

LAB_2BD8:
            flags |= 0x22;
            FUN_30BA8();
            GameManager.instance.FUN_30CB0(this, 300);
            return(0);
        }

        return(0);
    }
Example #7
0
    public int DAT_8C;       //0x8C

    //FUN_1FA0 (HARBOR.DLL)
    public override uint UpdateW(int arg1, int arg2)
    {
        sbyte           sVar1;
        sbyte           sVar2;
        int             iVar3;
        JUNC_DB         jVar3;
        int             iVar4;
        RSEG_DB         piVar5;
        VigObject       oVar6;
        DrawBridge      ppcVar7;
        uint            uVar8;
        long            lVar8;
        RSEG_DB         rVar8;
        ConfigContainer ccVar8;
        CraneLarge      ppcVar8;
        int             iVar9;
        JUNC_DB         jVar9;
        Vector3Int      local_38;
        Vector3Int      local_28;

        switch (arg1)
        {
        case 0:
            sVar2 = tags;

            if (sVar2 == 2)
            {
                iVar3 = DAT_84_2 + 19;
                iVar9 = 4577;

                if (iVar3 < 4577)
                {
                    iVar9 = iVar3;
                }

                DAT_84_2 = iVar9;
            }
            else
            {
                if (sVar2 < 3)
                {
                    if (sVar2 == 1)
                    {
                        if (DAT_88 == 0)
                        {
                            iVar9 = DAT_8C;
                        }
                        else
                        {
                            iVar9 = 0x10000000 - DAT_8C;
                        }

                        if (iVar9 < 0)
                        {
                            iVar9 += 0xffff;
                        }

                        iVar9 = (iVar9 >> 16) * 4577;

                        if (iVar9 < 0)
                        {
                            iVar9 += 0xffff;
                        }

                        iVar3 = 305;

                        if (305 < iVar9 >> 12)
                        {
                            iVar3 = iVar9 >> 12;
                        }

                        DAT_84_2 = iVar3;
                    }
                }
                else
                {
                    if (sVar2 == 4)
                    {
                        if (DAT_88 == 0)
                        {
                            iVar9 = DAT_8C;
                        }
                        else
                        {
                            iVar9 = 0x10000000 - DAT_8C;
                        }

                        if (iVar9 < 0)
                        {
                            iVar9 += 0xffff;
                        }

                        iVar9 = (iVar9 >> 16) * 4577;

                        if (iVar9 < 0)
                        {
                            iVar9 += 0xffff;
                        }

                        iVar3 = 305;

                        if (305 < iVar9 >> 12)
                        {
                            iVar3 = iVar9 >> 12;
                        }

                        DAT_84_2 = iVar3;
                    }
                    else if (sVar2 == 5)
                    {
                        iVar3 = DAT_84_2 + 19;
                        iVar9 = 4577;

                        if (iVar3 < 4577)
                        {
                            iVar9 = iVar3;
                        }

                        DAT_84_2 = iVar9;
                    }
                }
            }

            iVar9 = DAT_8C;

            if (iVar9 < 0)
            {
                iVar9 += 0xffff;
            }

            DAT_80_2.FUN_285E4(iVar9 >> 16, ref vTransform.position, out local_38);
            vTransform.position.y = GameManager.instance.DAT_DB0;

            if (DAT_88 == 0)
            {
                local_38.x = -local_38.x;
                local_38.z = -local_38.z;
            }

            lVar8 = Utilities.VectorNormal2(local_38, out local_28);
            vTransform.rotation.V22 = (short)local_28.z;
            vTransform.rotation.V00 = (short)local_28.z;
            vTransform.rotation.V02 = (short)local_28.x;
            vTransform.rotation.V20 = (short)-local_28.x;
            iVar9 = (int)Utilities.SquareRoot(lVar8);

            if (DAT_88 == 0)
            {
                iVar3 = DAT_84_2 * -0x10000;
            }
            else
            {
                iVar3 = DAT_84_2 << 16;
            }

            iVar4  = DAT_8C + iVar3 / iVar9;
            DAT_8C = iVar4;

            if ((uint)iVar4 < 0x10000001)
            {
                goto LAB_2244;
            }

            jVar9  = DAT_80_2.DAT_00[DAT_88];
            piVar5 = jVar9.DAT_1C[0];

            if (piVar5 == DAT_80_2)
            {
                piVar5 = jVar9.DAT_1C[1];
            }

            DAT_80_2 = piVar5;
            jVar3    = piVar5.DAT_00[0];
            DAT_88   = jVar3 == jVar9 ? 1 : 0;
            DAT_8C   = -((jVar3 == jVar9 ? 1 : 0) == 0 ? 1 : 0) & 0x10000000;

            if ((jVar9.DAT_10 & 0x40) == 0)
            {
                goto LAB_2244;
            }

            sVar1 = (sbyte)jVar9.DAT_12;
            tags  = sVar1;

            switch (sVar1)
            {
            case 2:
                uVar8 = 120;
                goto LAB_2284;

            case 3:
                ppcVar7 = (DrawBridge)GameManager.instance.FUN_318D0(50);

                if (ppcVar7.GetType().IsSubclassOf(typeof(VigObject)))
                {
                    ppcVar7.UpdateW(10, 0);
                }

                break;

            case 5:
                uVar8 = 121;
LAB_2284:
                ppcVar8 = (CraneLarge)GameManager.instance.FUN_318D0((int)uVar8);

                if (ppcVar8.GetType().IsSubclassOf(typeof(VigObject)))
                {
                    ppcVar8.UpdateW(20, this);
                }

                FUN_30BA8();
                break;
            }

LAB_2244:
            uVar8 = 0;

            if (arg2 != 0)
            {
                uVar8 = GameManager.instance.FUN_1E7A8(vTransform.position);
                GameManager.instance.FUN_1E2C8(DAT_18, uVar8);
                uVar8 = 0;
            }

            break;

        case 1:
            rVar8    = LevelManager.instance.FUN_518DC(screen, 16);
            DAT_80_2 = rVar8;
            DAT_88   = 1;
            iVar9    = rVar8.FUN_51334(screen);
            DAT_8C   = iVar9 << 16;
            DAT_84_2 = 6103;
            flags   |= 0x180;
            ccVar8   = FUN_2C5F4(0x8000);
            oVar6    = FUN_1F64();
            Utilities.FUN_2CA94(this, ccVar8, oVar6);
            ccVar8 = FUN_2C5F4(0x8002);
            oVar6  = FUN_1F64();
            Utilities.FUN_2CA94(this, ccVar8, oVar6);
            Utilities.ParentChildren(this, this);
            sVar2  = (sbyte)GameManager.instance.FUN_1DD9C();
            DAT_18 = sVar2;
            GameManager.instance.FUN_1E098(sVar2, vData.sndList, 3, 0, true);
            uVar8 = 0;
            break;

        case 2:
            uVar8 = 121;

            if (tags == 2)
            {
                ppcVar7 = (DrawBridge)GameManager.instance.FUN_318D0(49);

                if (ppcVar7.GetType().IsSubclassOf(typeof(VigObject)))
                {
                    ppcVar7.UpdateW(10, 0);
                }

                uVar8 = 120;
            }

            ppcVar8 = (CraneLarge)GameManager.instance.FUN_318D0((int)uVar8);

            if (ppcVar8.GetType().IsSubclassOf(typeof(VigObject)))
            {
                ppcVar8.UpdateW(20, null);
            }

            FUN_30B78();
            uVar8 = 0;
            break;

        default:
            uVar8 = 0;
            break;

        case 4:
            GameManager.instance.FUN_1DE78(DAT_18);
            ppcVar8 = (CraneLarge)GameManager.instance.FUN_318D0(120);

            if (ppcVar8.GetType().IsSubclassOf(typeof(VigObject)))
            {
                ppcVar8.UpdateW(20, null);
            }

            ppcVar8 = (CraneLarge)GameManager.instance.FUN_318D0(121);

            if (ppcVar8.GetType().IsSubclassOf(typeof(VigObject)))
            {
                ppcVar8.UpdateW(20, null);
            }

            goto default;

        case 8:
            FUN_32B90((uint)arg2);
            uVar8 = 0;
            break;

        case 9:
            uVar8 = 0;

            if (arg2 != 0)
            {
                GameManager.instance.FUN_309A0(this);
                uVar8 = 0xffffffff;
            }

            break;
        }

        return(uVar8);
    }