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")); }
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); }
/// <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); }
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(); }
/// <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))); }
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}"); } } } } }
/// <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); } }
/// <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); } }
/// <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); } }
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}"); } } }
public SpyroEncoding(GameModeSelection gameModeSelection) { GameModeSelection = gameModeSelection; CharTable = GetCharTable(gameModeSelection); }
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>()); } }