Пример #1
0
 private void UnloadButton_Click(object sender, EventArgs e)
 {
     if (!CurrentAddress.HasValue)
     {
         return;
     }
     MarioActions.UnloadObject(_stream, CurrentAddress.Value);
 }
Пример #2
0
 private void MoveToMarioButton_Click(object sender, EventArgs e)
 {
     if (!CurrentAddress.HasValue)
     {
         return;
     }
     MarioActions.MoveObjectToMario(_stream, CurrentAddress.Value);
 }
Пример #3
0
 private void CloneButton_Click(object sender, EventArgs e)
 {
     if (!CurrentAddress.HasValue)
     {
         return;
     }
     if (_unclone)
     {
         MarioActions.UnCloneObject(_stream, CurrentAddress.Value);
     }
     else
     {
         MarioActions.CloneObject(_stream, CurrentAddress.Value);
     }
 }
Пример #4
0
        public void OnSlotDropAction(DropAction dropAction, ObjectSlot objSlot)
        {
            switch (dropAction.Action)
            {
            case DropAction.ActionType.Mario:
                // Move mario to object
                var objectAddress = objSlot.Address;
                MarioActions.MoveMarioToObject(_stream, objectAddress);
                break;

            case DropAction.ActionType.Object:
                break;

            default:
                return;
            }
        }
Пример #5
0
        private void OnDrop(object sender, DragEventArgs e)
        {
            // Make sure we have valid Drag and Drop data (it is an index)
            if (!e.Data.GetDataPresent(typeof(DropAction)))
            {
                return;
            }

            var dropAction = ((DropAction)e.Data.GetData(typeof(DropAction)));

            if (dropAction.Action != DropAction.ActionType.Object)
            {
                return;
            }

            MarioActions.MoveObjectToMario(_stream, dropAction.Address);
        }
Пример #6
0
 private void GoToV1Button_Click(object sender, EventArgs e)
 {
     MarioActions.GoToTriangle(_stream, _triangleAddress, 1, _useMisalignmentOffset);
 }
Пример #7
0
 private void RetrieveTriangleButton_Click(object sender, EventArgs e)
 {
     MarioActions.RetrieveTriangle(_stream, _triangleAddress);
 }
Пример #8
0
        private void ProcessSpecialVars()
        {
            var   floorY = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.GroundYOffset, 4), 0);
            float marioX, marioY, marioZ;

            marioX = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.XOffset, 4), 0);
            marioY = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.YOffset, 4), 0);
            marioZ = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.ZOffset, 4), 0);

            float normX, normY, normZ, normOffset;

            normX      = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormX, 4), 0);
            normY      = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormY, 4), 0);
            normZ      = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormZ, 4), 0);
            normOffset = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.Offset, 4), 0);

            var uphillAngle = (Math.Atan2(normZ, normX) / Math.PI + 0.5) / 2 * 65536;

            if (normX == 0 && normZ == 0)
            {
                uphillAngle = double.NaN;
            }
            if (normY < -0.01)
            {
                uphillAngle += 32768;
            }

            foreach (DataContainer specialVar in _specialWatchVars)
            {
                switch (specialVar.SpecialName)
                {
                case "DistanceAboveFloor":
                    specialVar.Text = (marioY - floorY).ToString();
                    break;

                case "DistanceBelowCeiling":
                    specialVar.Text = (BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.CeilingYOffset, 4), 0)
                                       - marioY).ToString();
                    break;

                case "ClosestVertex":
                    specialVar.Text = String.Format("V{0}", MarioActions.GetClosestVertex(_stream, TriangleAddress));
                    goto case "CheckTriangleExists";

                case "UpHillAngle":
                    specialVar.Text = FixAngle(uphillAngle).ToString();
                    goto case "CheckTriangleExists";

                case "DownHillAngle":
                    specialVar.Text = FixAngle(uphillAngle + 32768).ToString();
                    goto case "CheckTriangleExists";

                case "RightHillAngle":
                    specialVar.Text = FixAngle(uphillAngle - 16384).ToString();
                    goto case "CheckTriangleExists";

                case "LeftHillAngle":
                    specialVar.Text = FixAngle(uphillAngle + 16384).ToString();
                    goto case "CheckTriangleExists";

                case "Classification":
                    if (normY > 0.01)
                    {
                        specialVar.Text = "Floor";
                    }
                    else if (normY < -0.01)
                    {
                        specialVar.Text = "Ceiling";
                    }
                    else
                    {
                        specialVar.Text = "Wall";
                    }
                    goto case "CheckTriangleExists";

                case "Steepness":
                    specialVar.Text = (65536 / (Math.PI * 2) * Math.Acos(normY)).ToString();
                    goto case "CheckTriangleExists";

                case "NormalDistAway":
                    specialVar.Text = (marioX * normX + marioY * normY + marioZ * normZ + normOffset).ToString();
                    goto case "CheckTriangleExists";

                case "VerticalDistAway":
                    specialVar.Text = (marioY + (marioX * normX + marioZ * normZ + normOffset) / normY).ToString();
                    goto case "CheckTriangleExists";

                case "HeightOnSlope":
                    specialVar.Text = ((-marioX * normX - marioZ * normZ - normOffset) / normY).ToString();
                    goto case "CheckTriangleExists";

                // Special
                case "CheckTriangleExists":
                    if (TriangleAddress == 0x0000)
                    {
                        specialVar.Text = "(none)";
                        break;
                    }
                    break;
                }
            }
        }
Пример #9
0
 private void buttonFill_Click(object sender, EventArgs e)
 {
     MarioActions.RefillHp(_stream);
 }
Пример #10
0
 private void buttonDie_Click(object sender, EventArgs e)
 {
     MarioActions.Die(_stream);
 }
Пример #11
0
 private void buttonStandardHud_Click(object sender, EventArgs e)
 {
     MarioActions.StandardHud(_stream);
 }