Exemplo n.º 1
0
        public void SetRoom(int room)
        {
            indexSpinButton.Value = room;

            vrContainer.Remove(vrEditor);
            vrEditor = null;
            v1       = null;
            v2       = null;
            v3       = null;
            v4       = null;

            Data data = Chest.GetChestData(room);

            if (data == null)
            {
                VBox vbox = new VBox();

                Button addButton = new Button("Add");
                addButton.Clicked += (a, b) => {
                    Chest.AddChestData(RoomIndex);
                    SetRoom(RoomIndex);
                };
                addButton.Label    = "gtk-add";
                addButton.UseStock = true;

                var l = new Gtk.Label("No chest data\nexists for this room.");
                vbox.Add(l);
                var btnAlign = new Alignment(0.5f, 0.5f, 0.0f, 0.2f);
                btnAlign.TopPadding = 3;
                btnAlign.Add(addButton);
                vbox.Add(btnAlign);

                vrEditor = vbox;
            }
            else
            {
                v1 = new ValueReference("YX", 0, DataValueType.Byte);
                v1.SetData(data);
                data = data.NextData;
                v2   = new ValueReference("Room", 0, DataValueType.Byte, false);
                v2.SetData(data);
                data = data.NextData;
                v3   = new ValueReference("ID1", 0, DataValueType.Byte);
                v3.SetData(data);
                data = data.NextData;
                v4   = new ValueReference("ID2", 0, DataValueType.Byte);
                v4.SetData(data);
                data = data.NextData;

                ValueReferenceGroup vrGroup = new ValueReferenceGroup(new ValueReference[] { v1, v2, v3, v4 });

                var vr = new ValueReferenceEditor(
                    Project,
                    vrGroup,
                    "Data");
                vr.SetMaxBound(0, 0xfe); // Max bound for YX

                vr.AddDataModifiedHandler(() => {
                    if (ChestChangedEvent != null)
                    {
                        ChestChangedEvent();
                    }
                });

                VBox vbox = new VBox();
                vbox.Add(vr);

                Button delButton = new Button("Remove");
                delButton.Clicked += (a, b) => {
                    Chest.DeleteChestData(RoomIndex);
                    SetRoom(RoomIndex);
                };
                delButton.Label    = "gtk-delete";
                delButton.UseStock = true;

                Alignment btnAlign = new Alignment(0.5f, 0.5f, 0.0f, 0.2f);
                btnAlign.TopPadding = 3;
                btnAlign.Add(delButton);
                vbox.Add(btnAlign);

                vrEditor = vbox;
            }

            if (ChestChangedEvent != null)
            {
                ChestChangedEvent();
            }

            vrContainer.Add(vrEditor);
            vrContainer.ShowAll();
        }
Exemplo n.º 2
0
        public void SetTreasure(int index)
        {
            int hIndex = index >> 8;
            int lIndex = index & 0xff;

            int hMax = Treasure.GetNumHighIndices();

            if (hIndex >= hMax)
            {
                hIndex = hMax - 1;
            }

            int lMax = Treasure.GetNumLowIndices(hIndex);

            if (lIndex >= lMax)
            {
                lIndex = lMax - 1;
            }

            highIndexButton.Adjustment.Upper = hMax - 1;
            lowIndexButton.Adjustment.Upper  = lMax - 1;
            highIndexButton.Value            = hIndex;
            lowIndexButton.Value             = lIndex;

            index = hIndex << 8 | lIndex;

            vrContainer.Remove(vrEditor);

            Data           data = Treasure.GetTreasureDataBase(index);
            ValueReference v1   = new ValueReference("Spawn Mode", 0, 4, 6, DataValueType.ByteBits);

            v1.SetData(data);
            ValueReference v5 = new ValueReference("Grab Mode", 0, 0, 2, DataValueType.ByteBits);

            v5.SetData(data);
            ValueReference v6 = new ValueReference("Unknown", 0, 3, 3, DataValueType.ByteBit);

            v6.SetData(data);

            data = data.NextData;
            ValueReference v2 = new ValueReference("Parameter", 0, DataValueType.Byte);

            v2.SetData(data);
            data = data.NextData;
            ValueReference v3 = new ValueReference("Text ID", 0, DataValueType.Byte);

            v3.SetData(data);
            data = data.NextData;
            ValueReference v4 = new ValueReference("Gfx", 0, DataValueType.Byte);

            v4.SetData(data);
            data = data.NextData;

            // Byte 1 is sometimes set to 0x80 for unused treasures?
            v1.SetValue(v1.GetIntValue() & 0x7f);

            ValueReferenceGroup vrGroup = new ValueReferenceGroup(new ValueReference[] { v1, v5, v6, v2, v3, v4 });

            var vr = new ValueReferenceEditor(
                Project,
                vrGroup,
                "Data");

            vr.SetMaxBound(0, 0x7f); // Max bound for Spawn Mode

            vr.AddDataModifiedHandler(() => {
                if (TreasureChangedEvent != null)
                {
                    TreasureChangedEvent();
                }
            });

            vrEditor = vr;
            vrContainer.Add(vrEditor);

            if (TreasureChangedEvent != null)
            {
                TreasureChangedEvent();
            }
        }