Ejemplo n.º 1
0
        public static void OutputGBAJSONForWeb(string dir, GameModeSelection mode)
        {
            var dirName  = Path.GetFileName(dir);
            var name     = dirName.Substring(0, dirName.LastIndexOf('_'));
            var settings = new GameSettings(mode, dir, 1, 1);

            var m = settings.GetGameManager;

            var worlds = m.GetLevels(settings).First().Worlds;

            var jsonObj = new
            {
                name   = $"{mode.GetAttribute<GameModeAttribute>().DisplayName.Replace(" - EU", "").Replace(" - US", "").Replace(" - EU 1", "").Replace(" - EU 2", "")}",
                mode   = mode.ToString(),
                folder = $"gba/{dirName}",
                levels = worlds.Select(w => w.Maps.OrderBy(x => x).Select(lvl => new
                {
                    world        = w.Index,
                    level        = lvl,
                    nameInternal = $"{lvl}",
                    name         = $"Map {lvl}"
                })).SelectMany(x => x)
            };

            var outDir = Path.Combine(Path.GetDirectoryName(dir), "JSON", name);

            Directory.CreateDirectory(outDir);

            JsonHelpers.SerializeToFile(jsonObj, Path.Combine(outDir, $"{dirName.Substring(name.Length + 1)}.json"));
        }
Ejemplo n.º 2
0
 public SettingsData(GameModeSelection gameModeSelection, string volume, int world, int level)
 {
     GameModeSelection = gameModeSelection;
     Volume            = volume;
     World             = world;
     Level             = level;
 }
        public void ShouldValidateTheVariables()
        {
            //Arrange
            ClassVariableTypeValidation classVariableTypeValidation = new ClassVariableTypeValidation()
                                                                      .Add <ValidResponse <IGameMode> >("_validResponse");

            //Act
            GameModeSelection subject = new GameModeSelection();

            //Assert
            classVariableTypeValidation.AssertExpectedVariables(subject);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Default constructor
        /// </summary>
        /// <param name="gameModeSelection">The game mode selection</param>
        /// <param name="gameDirectory">The game directory</param>
        /// <param name="world">The game world</param>
        /// <param name="level">The game level, starting at 1</param>
        public GameSettings(GameModeSelection gameModeSelection, string gameDirectory, int world, int level)
        {
            // Get the attribute data
            var atr = gameModeSelection.GetAttribute <GameModeAttribute>();

            GameModeSelection = gameModeSelection;
            Game               = atr.Game;
            EngineVersion      = atr.EngineVersion;
            MajorEngineVersion = atr.MajorEngineVersion;
            GameDirectory      = Util.NormalizePath(gameDirectory, isFolder: true);
            World              = world;
            Level              = level;
        }
        public void ShouldGetGameModeFromInput()
        {
            //Arrange
            FakeGameMode fakeGameMode = new FakeGameMode.Builder().Build();
            FakeValidResponse <IGameMode> fakeValidResponse = new FakeValidResponse <IGameMode> .Builder().Response(fakeGameMode).Build();

            GameModeSelection subject = new GameModeSelection(fakeValidResponse);

            //Act
            IGameMode gameMode = subject.Select();

            //Assert
            gameMode.Should().Be(fakeGameMode);
        }
Ejemplo n.º 6
0
        public static void OutputGBAVVJSONLevelListForWeb(GameModeSelection mode)
        {
            // Helper for getting a line
            string getLine(int world, int level, string nameInternal, string name) => $"    {{ \"world\": {world}, \"level\": {level}, \"nameInternal\": \"{nameInternal}\", \"name\": \"{name}\" }},";

            StringBuilder str = new StringBuilder();

            var manager = (GBAVV_BaseManager) new GameSettings(mode, "", 0, 0).GetGameManager;

            for (var i = 0; i < manager.LevInfos.Length; i++)
            {
                var lev = manager.LevInfos[i];
                str.AppendLine(getLine(0, i, lev.LevelIndex != -1 ? lev.LevelIndex.ToString() : null, lev.DisplayName));
            }

            str.ToString().CopyToClipboard();
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Gets the pointer table for the specified DSi version
        /// </summary>
        /// <param name="gameMode">The DSi game mode</param>
        /// <param name="dataFile">The data file</param>
        /// <returns>The pointer table</returns>
        public static Dictionary <R1_DSi_Pointer, Pointer> R1_DSi_PointerTable(GameModeSelection gameMode, BinaryFile dataFile)
        {
            return(new Dictionary <R1_DSi_Pointer, uint>()
            {
                [R1_DSi_Pointer.JungleMaps] = 0x0226C6B4,
                [R1_DSi_Pointer.LevelMaps] = 0x02361968,
                [R1_DSi_Pointer.BackgroundVignette] = 0x025A1478,
                [R1_DSi_Pointer.WorldMapVignette] = 0x021E17FC,
                [R1_DSi_Pointer.SpecialPalettes] = 0x02268FEC,

                [R1_DSi_Pointer.StringPointers] = 0x022604D0,

                [R1_DSi_Pointer.TypeZDC] = 0x0225F73C,
                [R1_DSi_Pointer.ZdcData] = 0x02262398,
                [R1_DSi_Pointer.EventFlags] = 0x022600B8,

                [R1_DSi_Pointer.WorldInfo] = 0x0225F144,
                [R1_DSi_Pointer.WorldVignetteIndices] = 0x02236ED8,
                [R1_DSi_Pointer.LevelMapsBGIndices] = 0x02913F94,

                [R1_DSi_Pointer.WorldLevelOffsetTable] = 0x02236BF8,

                [R1_DSi_Pointer.EventGraphicsPointers] = 0x0284B5B0,
                [R1_DSi_Pointer.EventDataPointers] = 0x0284B6F8,
                [R1_DSi_Pointer.EventGraphicsGroupCountTablePointers] = 0x0284B988,
                [R1_DSi_Pointer.LevelEventGraphicsGroupCounts] = 0x0284B840,

                [R1_DSi_Pointer.DES_Ray] = 0x02815BF4,
                [R1_DSi_Pointer.DES_RayLittle] = 0x02815DA4,
                [R1_DSi_Pointer.DES_Clock] = 0x0281BA8C,
                [R1_DSi_Pointer.DES_Div] = 0x02816224,
                [R1_DSi_Pointer.DES_Map] = 0x02815A20,

                [R1_DSi_Pointer.ETA_Ray] = 0x02814264,
                //[R1_DSi_Pointer.ETA_Clock] = ,
                [R1_DSi_Pointer.ETA_Div] = 0x02816C74,
                [R1_DSi_Pointer.ETA_Map] = 0x02813048,
            }.ToDictionary(x => x.Key, x => new Pointer(x.Value, dataFile)));
        }
Ejemplo n.º 8
0
        public static void OutputEDUJSONForWeb(string dir, GameModeSelection mode, bool isPC)
        {
            var modeName     = mode == GameModeSelection.RaymanQuizPC || mode == GameModeSelection.RaymanQuizPS1 ? "quiz" : "edu";
            var platformName = isPC ? "PC" : "PS1";
            var m            = isPC ? new R1_PCEdu_Manager() : new R1_PS1Edu_Manager();

            foreach (var subDir in Directory.GetDirectories(dir, "*", SearchOption.TopDirectoryOnly))
            {
                var settings = new GameSettings(mode, subDir, 1, 1);

                using (var context = new Context(settings))
                {
                    foreach (var v in m.GetLevels(settings))
                    {
                        var vol = v.Name;
                        settings.EduVolume = vol;
                        var specialPath = m.GetSpecialArchiveFilePath(vol);

                        context.AddFile(new LinearSerializedFile(context)
                        {
                            filePath = specialPath
                        });

                        var wldMap = m.LoadArchiveFile <R1_PC_WorldMap>(context, specialPath, R1_PCBaseManager.R1_PC_ArchiveFileName.WLDMAP01);
                        var text   = m.LoadArchiveFile <R1_PC_LocFile>(context, specialPath, R1_PCBaseManager.R1_PC_ArchiveFileName.TEXT);

                        var worlds = v.Worlds;

                        var lvlWorldIndex = 0;

                        var jsonObj = new
                        {
                            name   = $"NAME ({platformName} - {vol})",
                            mode   = mode.ToString(),
                            folder = $"r1/{modeName}/{Path.GetFileName(subDir)}",
                            volume = vol,
                            icons  = worlds.Select(x =>
                            {
                                var icon = new
                                {
                                    image = $"./img/icon/R1/R1-W{x.Index}.png",
                                    level = lvlWorldIndex
                                };

                                lvlWorldIndex += x.Maps.Length;

                                return(icon);
                            }),
                            levels = worlds.Select(w => w.Maps.OrderBy(x => x).Select(lvl => new
                            {
                                world        = w.Index,
                                level        = lvl,
                                nameInternal = $"{m.GetShortWorldName((R1_World)w.Index)}{lvl:00}",
                                name         = getLevelName(w.Index, lvl)
                            })).SelectMany(x => x)
                        };

                        JsonHelpers.SerializeToFile(jsonObj, Path.Combine(dir, $"{platformName.ToLower()}_{vol.ToLower()}.json"));

                        string getLevelName(int world, int level)
                        {
                            foreach (var lvl in wldMap.Levels.Take(wldMap.LevelsCount))
                            {
                                sbyte currentWorld = -1;
                                var   levelIndex   = 0;
                                var   groupIndex   = 1;

                                for (int i = 0; i < lvl.MapEntries.Length; i++)
                                {
                                    var entry = lvl.MapEntries[i];

                                    if (entry.Level == -1)
                                    {
                                        levelIndex = 0;
                                        groupIndex++;
                                        continue;
                                    }
                                    else
                                    {
                                        levelIndex++;
                                    }

                                    if (entry.World != -1)
                                    {
                                        currentWorld = entry.World;
                                    }

                                    if (currentWorld == world && entry.Level == level)
                                    {
                                        return($"{text.TextDefine[lvl.LevelName].Value.Trim('/')} {groupIndex}-{levelIndex}");
                                    }
                                }
                            }

                            return($"{(R1_World)world} {level}");
                        }
                    }
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Gets the pointer table for the specified GBA Isometric version
        /// </summary>
        /// <param name="gameMode">The GBA game mode</param>
        /// <param name="romFile">The rom file</param>
        /// <returns>The pointer table</returns>
        public static Dictionary <GBAIsometric_Pointer, Pointer> GBAIsometric_PointerTable(GameModeSelection gameMode, BinaryFile romFile)
        {
            switch (gameMode)
            {
            case GameModeSelection.RaymanHoodlumsRevengeEU:
                return(new Dictionary <GBAIsometric_Pointer, uint>()
                {
                    [GBAIsometric_Pointer.MusyxFile] = 0x080447AC,
                }.ToDictionary(x => x.Key, x => new Pointer(x.Value, romFile)));

            case GameModeSelection.RaymanHoodlumsRevengeUS:
                return(new Dictionary <GBAIsometric_Pointer, uint>()
                {
                    [GBAIsometric_Pointer.MusyxFile] = 0x08044708,
                    [GBAIsometric_Pointer.Levels] = 0x080E92E8,
                    [GBAIsometric_Pointer.Localization] = 0x087F48CC,
                    [GBAIsometric_Pointer.ObjTypes] = 0x080f9770,
                }.ToDictionary(x => x.Key, x => new Pointer(x.Value, romFile)));

            default:
                return(null);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Gets the pointer table for the specified GBA RRR version
        /// </summary>
        /// <param name="gameMode">The GBA game mode</param>
        /// <param name="romFile">The rom file</param>
        /// <returns>The pointer table</returns>
        public static Dictionary <GBARRR_Pointer, Pointer> GBARRR_PointerTable(GameModeSelection gameMode, BinaryFile romFile)
        {
            switch (gameMode)
            {
            case GameModeSelection.RaymanRavingRabbidsGBAUS:
                return(new Dictionary <GBARRR_Pointer, uint>()
                {
                    [GBARRR_Pointer.VillageLevelInfo] = 0x08055C60,
                    [GBARRR_Pointer.LevelInfo] = 0x08055CE4,
                    [GBARRR_Pointer.LevelProperties] = 0x0866EA20,
                    [GBARRR_Pointer.OffsetTable] = 0x08708C04,
                    [GBARRR_Pointer.GraphicsTables] = 0x08056264,

                    [GBARRR_Pointer.Mode7_MapTiles] = 0x08708188,
                    [GBARRR_Pointer.Mode7_BG1Tiles] = 0x087081f4,
                    [GBARRR_Pointer.Mode7_Bg1Map] = 0x08708200,
                    [GBARRR_Pointer.Mode7_BG0Tiles] = 0x087081d0,
                    [GBARRR_Pointer.Mode7_BG0Map] = 0x087081dc,
                    [GBARRR_Pointer.Mode7_MapData] = 0x08708194,     // It's compressed! // TODO: Add to export
                    [GBARRR_Pointer.Mode7_UnkMapData] = 0x087081a0,  // It's compressed! // TODO: Add to export
                    [GBARRR_Pointer.Mode7_TilePalette] = 0x087081b8,
                    [GBARRR_Pointer.Mode7_BG1Palette] = 0x0870820c,
                    [GBARRR_Pointer.Mode7_BG0Palette] = 0x087081e8,

                    [GBARRR_Pointer.Mode7_Array1] = 0x08708174,     // Appears to be very different than on EU
                    [GBARRR_Pointer.Mode7_Array2] = 0x08708150,
                    [GBARRR_Pointer.Mode7_Array3] = 0x08708168,

                    [GBARRR_Pointer.Mode7UnknownPal] = 0x0868C9B8,

                    [GBARRR_Pointer.RNC_0] = 0x086C20EC,
                    [GBARRR_Pointer.RNC_1] = 0x08701318,
                    [GBARRR_Pointer.RNC_2] = 0x086E1164,
                    [GBARRR_Pointer.RNC_3] = 0x086E2044,
                    [GBARRR_Pointer.RNC_4] = 0x086c2378,
                    [GBARRR_Pointer.RNC_5] = 0x086bd1d1,

                    [GBARRR_Pointer.Mode7_ComprArray1] = 0x08708144,
                    [GBARRR_Pointer.Mode7_ComprArray2] = 0x087081C4,
                    [GBARRR_Pointer.Mode7_ComprArray3] = 0x087081ac,
                    [GBARRR_Pointer.Mode7_ComprArray4] = 0x0870815c,

                    [GBARRR_Pointer.MenuArray] = 0x087087D4,

                    [GBARRR_Pointer.MusicTable] = 0x0866E710,
                    [GBARRR_Pointer.MusicSampleTable] = 0x083C37BC,
                    [GBARRR_Pointer.SoundEffectSampleTable] = 0x0866D2E8,
                }.ToDictionary(x => x.Key, x => new Pointer(x.Value, romFile)));

            case GameModeSelection.RaymanRavingRabbidsGBAEU:
                return(new Dictionary <GBARRR_Pointer, uint>()
                {
                    [GBARRR_Pointer.VillageLevelInfo] = 0x08055F40,
                    [GBARRR_Pointer.LevelInfo] = 0x08055FC4,
                    [GBARRR_Pointer.LevelProperties] = 0x08608220,
                    [GBARRR_Pointer.OffsetTable] = 0x08722374,
                    [GBARRR_Pointer.GraphicsTables] = 0x08056544,

                    [GBARRR_Pointer.Mode7_MapTiles] = 0x087218f8,
                    [GBARRR_Pointer.Mode7_BG1Tiles] = 0x08721964,
                    [GBARRR_Pointer.Mode7_Bg1Map] = 0x08721970,
                    [GBARRR_Pointer.Mode7_BG0Tiles] = 0x08721940,
                    [GBARRR_Pointer.Mode7_BG0Map] = 0x0872194c,
                    [GBARRR_Pointer.Mode7_MapData] = 0x08721904,
                    [GBARRR_Pointer.Mode7_UnkMapData] = 0x08721910,
                    [GBARRR_Pointer.Mode7_TilePalette] = 0x08721928,
                    [GBARRR_Pointer.Mode7_BG1Palette] = 0x0872197c,
                    [GBARRR_Pointer.Mode7_BG0Palette] = 0x08721958,

                    [GBARRR_Pointer.Mode7_Array1] = 0x087218e4,
                    [GBARRR_Pointer.Mode7_Array2] = 0x087218c0,
                    [GBARRR_Pointer.Mode7_Array3] = 0x087218d8,

                    [GBARRR_Pointer.Mode7UnknownPal] = 0x086a6128,

                    [GBARRR_Pointer.RNC_0] = 0x086db85c,
                    [GBARRR_Pointer.RNC_1] = 0x0871aa88,
                    [GBARRR_Pointer.RNC_2] = 0x086fa8d4,
                    [GBARRR_Pointer.RNC_3] = 0x086fb7b4,
                    [GBARRR_Pointer.RNC_4] = 0x086dbae8,
                    [GBARRR_Pointer.RNC_5] = 0x086d6941,

                    [GBARRR_Pointer.Mode7_ComprArray1] = 0x087218b4,
                    [GBARRR_Pointer.Mode7_ComprArray2] = 0x08721934,
                    [GBARRR_Pointer.Mode7_ComprArray3] = 0x0872191c,
                    [GBARRR_Pointer.Mode7_ComprArray4] = 0x087218cc,

                    [GBARRR_Pointer.MenuArray] = 0x08721f44,

                    [GBARRR_Pointer.MusicTable] = 0x08607f10,
                    [GBARRR_Pointer.MusicSampleTable] = 0x083c3a9c,
                    [GBARRR_Pointer.SoundEffectSampleTable] = 0x08606ae8,
                }.ToDictionary(x => x.Key, x => new Pointer(x.Value, romFile)));

            default:
                return(null);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Gets the pointer table for the specified GBA version
        /// </summary>
        /// <param name="gameMode">The GBA game mode</param>
        /// <param name="romFile">The ROM file</param>
        /// <returns>The pointer table</returns>
        public static Dictionary <R1_GBA_ROMPointer, Pointer> R1_GBA_PointerTable(GameModeSelection gameMode, BinaryFile romFile)
        {
            if (gameMode == GameModeSelection.RaymanAdvanceGBAUS)
            {
                return(new Dictionary <R1_GBA_ROMPointer, uint>()
                {
                    [R1_GBA_ROMPointer.LevelMaps] = 0x08548688,
                    [R1_GBA_ROMPointer.BackgroundVignette] = 0x086D4E34,
                    [R1_GBA_ROMPointer.IntroVignette] = 0x080F7A04,
                    [R1_GBA_ROMPointer.SpritePalettes] = 0x0854902A,

                    [R1_GBA_ROMPointer.EventGraphicsPointers] = 0x081A63B8,
                    [R1_GBA_ROMPointer.EventDataPointers] = 0x081A6518,
                    [R1_GBA_ROMPointer.EventGraphicsGroupCountTablePointers] = 0x081A6678,
                    [R1_GBA_ROMPointer.LevelEventGraphicsGroupCounts] = 0x081A67D8,

                    [R1_GBA_ROMPointer.WorldLevelOffsetTable] = 0x08153A40,

                    [R1_GBA_ROMPointer.WorldInfo] = 0x0854A530,
                    [R1_GBA_ROMPointer.WorldMapVignetteImageData] = 0x081452A4,
                    [R1_GBA_ROMPointer.WorldMapVignetteBlockIndices] = 0x08151504,
                    [R1_GBA_ROMPointer.WorldMapVignettePaletteIndices] = 0x08152284,
                    [R1_GBA_ROMPointer.WorldMapVignettePalettes] = 0x08152944,

                    [R1_GBA_ROMPointer.StringPointers] = 0x0854ADB4,

                    [R1_GBA_ROMPointer.TypeZDC] = 0x0854A304,
                    [R1_GBA_ROMPointer.ZdcData] = 0x08549CC4,
                    [R1_GBA_ROMPointer.EventFlags] = 0x08549330,

                    [R1_GBA_ROMPointer.WorldVignetteIndices] = 0x08153A1C,

                    [R1_GBA_ROMPointer.DES_Ray] = 0x0835F9B4,
                    [R1_GBA_ROMPointer.DES_RayLittle] = 0x0835F9D8,
                    [R1_GBA_ROMPointer.DES_Clock] = 0x082C90C8,
                    [R1_GBA_ROMPointer.DES_Div] = 0x082D1D98,
                    [R1_GBA_ROMPointer.DES_Map] = 0x0832A2F0,

                    [R1_GBA_ROMPointer.ETA_Ray] = 0x0832D234,
                    //[R1_GBA_ROMPointer.ETA_Clock] = ,
                    [R1_GBA_ROMPointer.ETA_Div] = 0x082CC884,
                    [R1_GBA_ROMPointer.ETA_Map] = 0x082ED3B8,

                    [R1_GBA_ROMPointer.DES_Alpha] = 0x082E74F4,
                    [R1_GBA_ROMPointer.DES_Alpha2] = 0x082E7514,

                    [R1_GBA_ROMPointer.DES_DrumWalkerGraphics] = 0x082C6C5C,
                    [R1_GBA_ROMPointer.DES_InkGraphics] = 0x082D33D0,
                    [R1_GBA_ROMPointer.DES_PinsGraphics] = 0x0832CBF4,

                    [R1_GBA_ROMPointer.ExtFontImgBuffers] = 0x086DCEE8,
                    [R1_GBA_ROMPointer.MultiplayerImgBuffers] = 0x086DCF98,

                    [R1_GBA_ROMPointer.MusyxFile] = 0x086EFADC,
                }.ToDictionary(x => x.Key, x => new Pointer(x.Value, romFile)));
            }
            else if (gameMode == GameModeSelection.RaymanAdvanceGBAEU || gameMode == GameModeSelection.RaymanAdvanceGBAEUBeta)
            {
                var offset = gameMode == GameModeSelection.RaymanAdvanceGBAEU ? 0 : 0xC;

                return(new Dictionary <R1_GBA_ROMPointer, uint>()
                {
                    [R1_GBA_ROMPointer.LevelMaps] = 0x085485B4,
                    [R1_GBA_ROMPointer.BackgroundVignette] = 0x086D4D60,
                    [R1_GBA_ROMPointer.IntroVignette] = 0x080F7968,
                    [R1_GBA_ROMPointer.SpritePalettes] = 0x08548F56,

                    [R1_GBA_ROMPointer.EventGraphicsPointers] = 0x081A62E4,
                    [R1_GBA_ROMPointer.EventDataPointers] = 0x081A6444,
                    [R1_GBA_ROMPointer.EventGraphicsGroupCountTablePointers] = 0x081A65A4,
                    [R1_GBA_ROMPointer.LevelEventGraphicsGroupCounts] = 0x081A6704,

                    [R1_GBA_ROMPointer.WorldLevelOffsetTable] = 0x081539A4,

                    [R1_GBA_ROMPointer.WorldInfo] = 0x0854A45C,
                    [R1_GBA_ROMPointer.WorldMapVignetteImageData] = 0x08145208,
                    [R1_GBA_ROMPointer.WorldMapVignetteBlockIndices] = 0x08151468,
                    [R1_GBA_ROMPointer.WorldMapVignettePaletteIndices] = 0x081521E8,
                    [R1_GBA_ROMPointer.WorldMapVignettePalettes] = 0x081528A8,

                    [R1_GBA_ROMPointer.StringPointers] = 0x0854ACE0,

                    [R1_GBA_ROMPointer.TypeZDC] = 0x0854A230,
                    [R1_GBA_ROMPointer.ZdcData] = 0x08549BF0,
                    [R1_GBA_ROMPointer.EventFlags] = 0x0854925C,

                    [R1_GBA_ROMPointer.WorldVignetteIndices] = 0x08153980,

                    [R1_GBA_ROMPointer.DES_Ray] = 0x0835F8E0,
                    [R1_GBA_ROMPointer.DES_RayLittle] = 0x0835F904,
                    [R1_GBA_ROMPointer.DES_Clock] = 0x082C8FF4,
                    [R1_GBA_ROMPointer.DES_Div] = 0x082D1CC4,
                    [R1_GBA_ROMPointer.DES_Map] = 0x0832A21C,

                    [R1_GBA_ROMPointer.ETA_Ray] = 0x0832D160,
                    //[R1_GBA_ROMPointer.ETA_Clock] = ,
                    [R1_GBA_ROMPointer.ETA_Div] = 0x082CC7B0,
                    [R1_GBA_ROMPointer.ETA_Map] = 0x082ED2E4,

                    [R1_GBA_ROMPointer.DES_Alpha] = 0x082E7420,
                    [R1_GBA_ROMPointer.DES_Alpha2] = 0x082E7440,

                    [R1_GBA_ROMPointer.DES_DrumWalkerGraphics] = 0x082C6B88,
                    [R1_GBA_ROMPointer.DES_InkGraphics] = 0x082D32FC,
                    [R1_GBA_ROMPointer.DES_PinsGraphics] = 0x0832CB20,

                    [R1_GBA_ROMPointer.ExtFontImgBuffers] = 0x086dce14,
                    [R1_GBA_ROMPointer.MultiplayerImgBuffers] = 0x086dcec4,

                    [R1_GBA_ROMPointer.MusyxFile] = 0x086EF6D4,
                }.ToDictionary(x => x.Key, x => new Pointer(x.Value, romFile) - offset));
            }
            else
            {
                throw new ArgumentOutOfRangeException(nameof(gameMode), gameMode, null);
            }
        }
Ejemplo n.º 12
0
        public static void InitObj(EngineVersion engineVersion, GameModeSelection gameMode, Unity_Object_GBAVV obj, short objType)
        {
            bool isJp = gameMode == GameModeSelection.Crash1GBAJP || gameMode == GameModeSelection.Crash2GBAJP;

            if (engineVersion == EngineVersion.GBAVV_Crash2)
            {
                if (obj.ObjManager.MapType == GBAVV_MapInfo.GBAVV_MapType.WorldMap)
                {
                    switch ((GBAVV_Crash2_WorldMap_ObjType)objType)
                    {
                    case GBAVV_Crash2_WorldMap_ObjType.LevelPortal:
                        obj.AnimSetIndex = 0x2F;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.MapPosition:
                        obj.AnimSetIndex = -1;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Tree_3:
                        obj.AnimSetIndex = 0x30;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Tree_4:
                        obj.AnimSetIndex = 0x30;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Tree_5:
                        obj.AnimSetIndex = 0x30;
                        obj.AnimIndex    = 2;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Tree_6:
                        obj.AnimSetIndex = 0x30;
                        obj.AnimIndex    = 3;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Tree_7:
                        obj.AnimSetIndex = 0x30;
                        obj.AnimIndex    = 4;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Gem_Red:
                        obj.AnimSetIndex = 0x18;
                        obj.AnimIndex    = 4;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Gem_Green:
                        obj.AnimSetIndex = 0x18;
                        obj.AnimIndex    = 5;
                        break;

                    case GBAVV_Crash2_WorldMap_ObjType.Gem_Blue:
                        obj.AnimSetIndex = 0x18;
                        obj.AnimIndex    = 6;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
                else
                {
                    switch ((GBAVV_Map2D_Crash2_ObjType)objType)
                    {
                    case GBAVV_Map2D_Crash2_ObjType.Crash:
                        switch (obj.ObjManager.MapType)
                        {
                        default:
                        case GBAVV_MapInfo.GBAVV_MapType.Normal:
                            obj.AnimSetIndex = 0;
                            obj.AnimIndex    = 18;
                            break;

                        case GBAVV_MapInfo.GBAVV_MapType.Normal_Vehicle_0:
                            obj.AnimSetIndex = 1;
                            obj.AnimIndex    = 0;
                            break;

                        case GBAVV_MapInfo.GBAVV_MapType.Normal_Vehicle_1:
                            obj.AnimSetIndex = 2;
                            obj.AnimIndex    = 0;
                            break;
                        }
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_1:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Wumpa:
                        obj.AnimSetIndex = 0x1B;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crystal:
                        obj.AnimSetIndex = 29;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_4:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_5:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_6:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_7:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_8:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.TimeTrialClock:
                        obj.AnimSetIndex = 28;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_10:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_11:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_12:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Normal:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 31;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Checkpoint:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 26;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_AkuAku:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 23;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Switch:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 3;
                        obj.IsLinked_6   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Up:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 24;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Outline:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 21;
                        obj.IsLinked_6   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_NitroSwitch:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 4;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Iron:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 32;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_IronUp:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 2;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Life:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 28;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Nitro:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = (byte)(isJp ? 36 : 5);
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_QuestionMark:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Bounce:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 25;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Locked:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 6;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_TNT:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = (byte)(isJp ? 37 : 17);
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Slot:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 7;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Time1:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 14;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Time2:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 15;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Time3:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 16;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_32:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_Horizontal_33:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 7;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_34:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_35:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_36:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_37:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Exit_Level:
                        obj.AnimSetIndex = 39;
                        obj.AnimIndex    = 2;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Exit_Bonus:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_40:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_41:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_42:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_43:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_44:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_Vertical_45:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 7;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_Bouncy_46:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 4;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_Bouncy_47:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 5;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_Bouncy_48:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 6;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_49:
                        obj.AnimSetIndex = 37;
                        obj.AnimIndex    = 7;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_FlyingCarpet:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 38;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_51:
                        obj.AnimSetIndex = 3;
                        obj.AnimIndex    = 2;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_52:
                        obj.AnimSetIndex = 4;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_53:
                        obj.AnimSetIndex = 5;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_54:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_55:
                        obj.AnimSetIndex = 7;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_56:
                        obj.AnimSetIndex = 6;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_57:
                        obj.AnimSetIndex = 8;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_58:
                        obj.AnimSetIndex = 8;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_59:
                        obj.AnimSetIndex = 10;
                        obj.AnimIndex    = 1;
                        obj.IsLinked_4   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_60:
                        obj.AnimSetIndex = 11;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_61:
                        obj.AnimSetIndex = 12;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_62:
                        obj.AnimSetIndex = 13;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_63:
                        obj.AnimSetIndex = 15;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_64:
                        obj.AnimSetIndex = 16;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_65:
                        obj.AnimSetIndex = 17;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_66:
                        obj.AnimSetIndex = 14;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Door_67:
                        obj.AnimSetIndex = 37;
                        obj.AnimIndex    = 1;
                        obj.IsLinked_4   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Switch_68:
                        obj.AnimSetIndex = 37;
                        obj.AnimIndex    = 0;
                        obj.FreezeFrame  = true;
                        obj.IsLinked_4   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_69:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 8;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_70:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Trigger_Water:
                        obj.AnimSetIndex = -1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Trigger_RisingWater:
                        obj.AnimSetIndex = -1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Block:
                        obj.AnimSetIndex = 37;
                        obj.AnimIndex    = 4;
                        obj.IsLinked_4   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_74:
                        obj.AnimSetIndex = 37;
                        obj.AnimIndex    = 3;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_CopterPack:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 39;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Trigger_ExitVehicle:
                        obj.AnimSetIndex = -1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_77:
                        obj.AnimSetIndex = 18;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_78:
                        obj.AnimSetIndex = 21;
                        obj.AnimIndex    = 0;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_79:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_80:
                        obj.AnimSetIndex = 20;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_81:
                        obj.AnimSetIndex = 19;
                        obj.AnimIndex    = 2;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_82:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Trigger_Direction:
                        obj.AnimSetIndex = -1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_84:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.BouncyPlatform_85:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 10;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_86:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Type_87:
                        Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_HorizontalTriggered_88:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 9;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Boss_FakeCrash:
                        obj.AnimSetIndex = 49;
                        obj.AnimIndex    = 18;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_Horizontal_90:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 9;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_91:
                        obj.AnimSetIndex = 22;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Rocket:
                        obj.AnimSetIndex = 39;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Door_93:
                        obj.AnimSetIndex = 37;
                        obj.AnimIndex    = 6;
                        obj.IsLinked_4   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Trigger_Door:
                        obj.AnimSetIndex = -1;
                        obj.IsLinked_4   = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_IronCheckpoint:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 40;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Boss_EvilCrunch:
                        obj.AnimSetIndex = 42;
                        obj.AnimIndex    = 4;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Boss_EvilCoco:
                        obj.AnimSetIndex = 43;
                        obj.AnimIndex    = 7;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Boss_NTrance:
                        obj.AnimSetIndex = 44;
                        obj.AnimIndex    = 12;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.GemShard_Red:
                        obj.AnimSetIndex = 24;
                        obj.AnimIndex    = 3;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.GemShard_Green:
                        obj.AnimSetIndex = 24;
                        obj.AnimIndex    = 2;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.GemShard_Blue:
                        obj.AnimSetIndex = 24;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Crate_Freeze:
                        obj.AnimSetIndex = 23;
                        obj.AnimIndex    = 42;
                        obj.FreezeFrame  = true;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Boss_NTropy:
                        obj.AnimSetIndex = 45;
                        obj.AnimIndex    = 8;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Platform_104:
                        obj.AnimSetIndex = 31;
                        obj.AnimIndex    = 3;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.TutorialMessage:
                        obj.AnimSetIndex = 30;
                        obj.AnimIndex    = 2;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Trigger_Cutscene:
                        obj.AnimSetIndex = -1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_107:
                        obj.AnimSetIndex = 22;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.Enemy_108:
                        obj.AnimSetIndex = 9;
                        obj.AnimIndex    = 1;
                        break;

                    case GBAVV_Map2D_Crash2_ObjType.FakeCrash:
                        obj.AnimSetIndex = 0;
                        obj.AnimIndex    = 58;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
            }
            else if (engineVersion == EngineVersion.GBAVV_Crash1)
            {
                switch ((GBAVV_Map2D_Crash1_ObjType)objType)
                {
                case GBAVV_Map2D_Crash1_ObjType.Crash:
                    obj.AnimSetIndex = 0;
                    obj.AnimIndex    = 18;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_1:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crash_Underwater:
                    obj.AnimSetIndex = 1;
                    obj.AnimIndex    = 31;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_3:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crash_SpaceMotorcycle:
                    obj.AnimSetIndex = 2;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_5:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Wumpa:
                    obj.AnimSetIndex = 35;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crystal:
                    obj.AnimSetIndex = 37;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Gem_Clear:
                    obj.AnimSetIndex = 32;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Gem_Blue:
                    obj.AnimSetIndex = 32;
                    obj.AnimIndex    = 4;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Gem_Red:
                    obj.AnimSetIndex = 32;
                    obj.AnimIndex    = 3;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Gem_Green:
                    obj.AnimSetIndex = 32;
                    obj.AnimIndex    = 2;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Gem_Yellow:
                    obj.AnimSetIndex = 32;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_13:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_14:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_15:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.TimeTrialClock:
                    obj.AnimSetIndex = 36;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_17:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_18:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_19:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_20:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Normal:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 22;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Checkpoint:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 26;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_AkuAku:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 23;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Switch:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 3;
                    obj.IsLinked_6   = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Up:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 24;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Outline:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 21;
                    obj.IsLinked_6   = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_NitroSwitch:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 4;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Iron:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 32;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_IronUp:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 2;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Life:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 28;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Nitro:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = (byte)(isJp ? 36 : 5);
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_QuestionMark:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Bounce:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 25;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Locked:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 6;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_TNT:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = (byte)(isJp ? 37 : 17);
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Slot:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 7;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Time1:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 14;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Time2:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 15;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Crate_Time3:
                    obj.AnimSetIndex = 31;
                    obj.AnimIndex    = 16;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_40:
                    obj.AnimSetIndex = 13;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_41:
                    obj.AnimSetIndex = 11;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_42:
                    obj.AnimSetIndex = 10;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_43:
                    obj.AnimSetIndex = 14;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_44:
                    obj.AnimSetIndex = 12;
                    obj.AnimIndex    = 3;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_45:
                    obj.AnimSetIndex = 15;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_46:
                    obj.AnimSetIndex = 17;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_47:
                    obj.AnimSetIndex = 16;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_48:
                    obj.AnimSetIndex = 5;
                    obj.AnimIndex    = 2;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_49:
                    obj.AnimSetIndex = 4;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_50:
                    obj.AnimSetIndex = 3;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_51:
                    obj.AnimSetIndex = 8;
                    obj.AnimIndex    = 2;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Fish_52:
                    obj.AnimSetIndex = 7;
                    obj.AnimIndex    = 2;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_53:
                    obj.AnimSetIndex = 9;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_54:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_55:
                    obj.AnimSetIndex = 25;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_56:
                    obj.AnimSetIndex = 27;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_57:
                    obj.AnimSetIndex = 24;
                    obj.AnimIndex    = 5;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_58:
                    obj.AnimSetIndex = 29;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_59:
                    obj.AnimSetIndex = 26;
                    obj.AnimIndex    = 0;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_60:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Platform_JumpSpin_61:
                    obj.AnimSetIndex = 28;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_62:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_63:
                    obj.AnimSetIndex = 29;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_64:
                    obj.AnimSetIndex = 23;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_65:
                    obj.AnimSetIndex = 22;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_66:
                    obj.AnimSetIndex = 20;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_67:
                    obj.AnimSetIndex = 21;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_68:
                    obj.AnimSetIndex = 19;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Boss_Dingodile:
                    obj.AnimSetIndex = 54;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_70:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Boss_Tiny:
                    obj.AnimSetIndex = 55;
                    obj.AnimIndex    = 6;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Boss_Cortex:
                    obj.AnimSetIndex = 53;
                    obj.AnimIndex    = 1;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Boss_MegaMix:
                    obj.AnimSetIndex = 30;
                    obj.AnimIndex    = 2;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_74:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_75:
                    obj.AnimSetIndex = 6;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_76:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Enemy_77:
                    obj.AnimSetIndex = 18;
                    obj.AnimIndex    = 0;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_78:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Platform_Moving_79:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Type_80:
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Exit_RedGem:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 11;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Exit_YellowGem:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 3;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Exit_GreenGem:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 10;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Exit_BlueGem:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 9;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Exit_Level:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 4;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Exit_Bonus:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 5;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Platform_87:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 6;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Platform_88:
                    obj.AnimSetIndex = 39;
                    obj.AnimIndex    = 8;
                    obj.FreezeFrame  = true;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Gem:
                    obj.AnimSetIndex = 32;
                    obj.AnimIndex    = 1;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Flame:
                    obj.AnimSetIndex = 44;
                    obj.AnimIndex    = 0;
                    break;

                case GBAVV_Map2D_Crash1_ObjType.Seaweed:
                    obj.AnimSetIndex = 45;
                    obj.AnimIndex    = 0;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                if (obj.AnimSetIndex == 0 && obj.AnimIndex == 0)
                {
                    Debug.LogWarning($"Not implemented for type: {obj.Object.ObjType}");
                }
            }
        }
Ejemplo n.º 13
0
 public SpyroEncoding(GameModeSelection gameModeSelection)
 {
     GameModeSelection = gameModeSelection;
     CharTable         = GetCharTable(gameModeSelection);
 }
Ejemplo n.º 14
0
        public Dictionary <byte, char> GetCharTable(GameModeSelection gameMode)
        {
            switch (gameMode)
            {
            case GameModeSelection.SpyroSeasonFlameEU:
                return(new Dictionary <byte, char>()
                {
                    [0] = ' ',
                    [1] = '!',
                    [2] = '"',
                    [3] = '%',
                    [4] = '\'',
                    [5] = '(',
                    [6] = ')',
                    [7] = ',',
                    [8] = '-',
                    [9] = '.',
                    [10] = '/',
                    [11] = '0',
                    [12] = '1',
                    [13] = '2',
                    [14] = '3',
                    [15] = '4',
                    [16] = '5',
                    [17] = '6',
                    [18] = '7',
                    [19] = '8',
                    [20] = '9',

                    [21] = ':',
                    [22] = ';',
                    [23] = '?',

                    [24] = 'A',
                    [25] = 'B',
                    [26] = 'C',
                    [27] = 'D',
                    [28] = 'E',
                    [29] = 'F',
                    [30] = 'G',
                    [31] = 'H',
                    [32] = 'I',
                    [33] = 'J',
                    [34] = 'K',
                    [35] = 'L',
                    [36] = 'M',
                    [37] = 'N',
                    [38] = 'O',
                    [39] = 'P',
                    [40] = 'Q',
                    [41] = 'R',
                    [42] = 'S',
                    [43] = 'T',
                    [44] = 'U',
                    [45] = 'V',
                    [46] = 'W',
                    [47] = 'X',
                    [48] = 'Y',
                    [49] = 'Z',

                    [50] = 'a',
                    [51] = 'b',
                    [52] = 'c',
                    [53] = 'd',
                    [54] = 'e',
                    [55] = 'f',
                    [56] = 'g',
                    [57] = 'h',
                    [58] = 'i',
                    [59] = 'j',
                    [60] = 'k',
                    [61] = 'l',
                    [62] = 'm',
                    [63] = 'n',
                    [64] = 'o',
                    [65] = 'p',
                    [66] = 'q',
                    [67] = 'r',
                    [68] = 's',
                    [69] = 't',
                    [70] = 'u',
                    [71] = 'v',
                    [72] = 'w',
                    [73] = 'x',
                    [74] = 'y',
                    [75] = 'z',

                    [76] = ' ',
                    [77] = '¡',
                    [78] = '<',
                    [79] = '>',
                    [80] = '¿',

                    [81] = 'Á',
                    [82] = 'Ä',
                    [83] = 'Ç',
                    [84] = 'È',
                    [85] = 'É',
                    [86] = 'Í',
                    [87] = 'Ñ',
                    [88] = 'Ó',
                    [89] = 'Ö',
                    [90] = 'Ü',
                    [91] = 'ß',

                    [92] = 'à',
                    [93] = 'á',
                    [94] = 'â',
                    [95] = 'ä',
                    [96] = 'ç',
                    [97] = 'è',
                    [98] = 'é',
                    [99] = 'ê',
                    [100] = 'ì',
                    [101] = 'í',
                    [102] = 'î',
                    [103] = 'ï',
                    [104] = 'ñ',
                    [105] = 'ò',
                    [106] = 'ó',
                    [107] = 'ô',
                    [108] = 'ö',
                    [109] = 'ù',
                    [110] = 'ú',
                    [111] = 'û',
                    [112] = 'ü',
                });

            case GameModeSelection.SpyroSeasonFlameUS:
                return(new Dictionary <byte, char>()
                {
                    [0] = ' ',
                    [1] = '!',
                    [2] = '"',
                    [3] = '%',
                    [4] = '\'',
                    [5] = '(',
                    [6] = ')',
                    [7] = ',',
                    [8] = '-',
                    [9] = '.',
                    [10] = '/',
                    [11] = '0',
                    [12] = '1',
                    [13] = '2',
                    [14] = '3',
                    [15] = '4',
                    [16] = '5',
                    [17] = '6',
                    [18] = '7',
                    [19] = '8',
                    [20] = '9',

                    [21] = ':',
                    [22] = ';',
                    [23] = '?',

                    [24] = 'A',
                    [25] = 'B',
                    [26] = 'C',
                    [27] = 'D',
                    [28] = 'E',
                    [29] = 'F',
                    [30] = 'G',
                    [31] = 'H',
                    [32] = 'I',
                    [33] = 'J',
                    [34] = 'K',
                    [35] = 'L',
                    [36] = 'M',
                    [37] = 'N',
                    [38] = 'O',
                    [39] = 'P',
                    [40] = 'Q',
                    [41] = 'R',
                    [42] = 'S',
                    [43] = 'T',
                    [44] = 'U',
                    [45] = 'V',
                    [46] = 'W',
                    [47] = 'X',
                    [48] = 'Y',
                    [49] = 'Z',

                    [50] = 'a',
                    [51] = 'b',
                    [52] = 'c',
                    [53] = 'd',
                    [54] = 'e',
                    [55] = 'f',
                    [56] = 'g',
                    [57] = 'h',
                    [58] = 'i',
                    [59] = 'j',
                    [60] = 'k',
                    [61] = 'l',
                    [62] = 'm',
                    [63] = 'n',
                    [64] = 'o',
                    [65] = 'p',
                    [66] = 'q',
                    [67] = 'r',
                    [68] = 's',
                    [69] = 't',
                    [70] = 'u',
                    [71] = 'v',
                    [72] = 'w',
                    [73] = 'x',
                    [74] = 'y',
                    [75] = 'z',

                    [97] = 'é',     // TODO: Is this correct?
                });

            case GameModeSelection.SpyroAdventureEU:
                return(new Dictionary <byte, char>()
                {
                    [0] = ' ',
                    [1] = '!',
                    [2] = '"',
                    [3] = '#',
                    [4] = '%',
                    [5] = '&',
                    [6] = '\'',
                    [7] = '[',
                    [8] = ']',
                    [9] = '*',
                    [10] = '+',
                    [11] = ',',
                    [12] = '-',
                    [13] = '.',
                    [14] = '/',
                    [15] = '0',
                    [16] = '1',
                    [17] = '2',
                    [18] = '3',
                    [19] = '4',
                    [20] = '5',
                    [21] = '6',
                    [22] = '7',
                    [23] = '8',
                    [24] = '9',

                    [25] = ':',
                    [26] = ';',
                    [27] = '?',

                    [28] = 'A',
                    [29] = 'B',
                    [30] = 'C',
                    [31] = 'D',
                    [32] = 'E',
                    [33] = 'F',
                    [34] = 'G',
                    [35] = 'H',
                    [36] = 'I',
                    [37] = 'J',
                    [38] = 'K',
                    [39] = 'L',
                    [40] = 'M',
                    [41] = 'N',
                    [42] = 'O',
                    [43] = 'P',
                    [44] = 'Q',
                    [45] = 'R',
                    [46] = 'S',
                    [47] = 'T',
                    [48] = 'U',
                    [49] = 'V',
                    [50] = 'W',
                    [51] = 'X',
                    [52] = 'Y',
                    [53] = 'Z',

                    [54] = 'a',
                    [55] = 'b',
                    [56] = 'c',
                    [57] = 'd',
                    [58] = 'e',
                    [59] = 'f',
                    [60] = 'g',
                    [61] = 'h',
                    [62] = 'i',
                    [63] = 'j',
                    [64] = 'k',
                    [65] = 'l',
                    [66] = 'm',
                    [67] = 'n',
                    [68] = 'o',
                    [69] = 'p',
                    [70] = 'q',
                    [71] = 'r',
                    [72] = 's',
                    [73] = 't',
                    [74] = 'u',
                    [75] = 'v',
                    [76] = 'w',
                    [77] = 'x',
                    [78] = 'y',
                    [79] = 'z',

                    [80] = '¡',
                    [81] = 'º',
                    [82] = '¿',

                    [83] = 'Á',
                    [84] = 'Ä',
                    [85] = 'Ç',
                    [86] = 'È',
                    [87] = 'É',
                    [88] = 'Ì',
                    [89] = 'Í',
                    [90] = 'Ñ',
                    [91] = 'Ó',
                    [92] = 'Ù',
                    [93] = 'Ú',
                    [94] = 'Ü',
                    [95] = 'ß',

                    [96] = 'à',
                    [97] = 'á',
                    [98] = 'â',
                    [99] = 'ä',
                    [100] = 'ç',
                    [101] = 'è',
                    [102] = 'é',
                    [103] = 'ê',
                    [104] = 'ë',
                    [105] = 'ì',
                    [106] = 'í',
                    [107] = 'î',
                    [108] = 'ï',
                    [109] = 'ñ',
                    [110] = 'ò',
                    [111] = 'ó',
                    [112] = 'ô',
                    [113] = 'ö',
                    [114] = 'ù',
                    [115] = 'ú',
                    [116] = 'û',
                    [117] = 'ü',

                    [118] = '™',

                    [254] = '\n',
                    //[255] = (char)0xAD,
                });

            case GameModeSelection.SpyroAdventureUS:
                return(new Dictionary <byte, char>()
                {
                    [0] = ' ',
                    [1] = '!',
                    [2] = '#',
                    [3] = '%',
                    [4] = '\'',
                    [5] = '[',
                    [6] = ']',
                    [7] = '*',
                    [8] = '+',
                    [9] = ',',
                    [10] = '-',
                    [11] = '.',
                    [12] = '/',
                    [13] = '0',
                    [14] = '1',
                    [15] = '2',
                    [16] = '3',
                    [17] = '4',
                    [18] = '5',
                    [19] = '6',
                    [20] = '7',
                    [21] = '8',
                    [22] = '9',

                    [23] = ':',
                    [24] = '?',

                    [25] = 'A',
                    [26] = 'B',
                    [27] = 'C',
                    [28] = 'D',
                    [29] = 'E',
                    [30] = 'F',
                    [31] = 'G',
                    [32] = 'H',
                    [33] = 'I',
                    [34] = 'J',
                    [35] = 'K',
                    [36] = 'L',
                    [37] = 'M',
                    [38] = 'N',
                    [39] = 'O',
                    [40] = 'P',
                    [41] = 'Q',
                    [42] = 'R',
                    [43] = 'S',
                    [44] = 'T',
                    [45] = 'U',
                    [46] = 'V',
                    [47] = 'W',
                    [48] = 'X',
                    [49] = 'Y',
                    [50] = 'Z',

                    [51] = 'a',
                    [52] = 'b',
                    [53] = 'c',
                    [54] = 'd',
                    [55] = 'e',
                    [56] = 'f',
                    [57] = 'g',
                    [58] = 'h',
                    [59] = 'i',
                    [60] = 'j',
                    [61] = 'k',
                    [62] = 'l',
                    [63] = 'm',
                    [64] = 'n',
                    [65] = 'o',
                    [66] = 'p',
                    [67] = 'q',
                    [68] = 'r',
                    [69] = 's',
                    [70] = 't',
                    [71] = 'u',
                    [72] = 'v',
                    [73] = 'w',
                    [74] = 'x',
                    [75] = 'y',
                    [76] = 'z',

                    [77] = '™',
                    [78] = 'Ç',
                    [79] = 'Ñ',

                    //[255] = (char)0xAD,
                });

            default:
                return(new Dictionary <byte, char>());
            }
        }