MaddiicT

pkmnredsubsplits.asl

Dec 5th, 2025
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.37 KB | Gaming | 0 0
  1. state("GSR") { }
  2. state("GSE") { }
  3. state("gambatte_speedrun") { }
  4.  
  5. startup
  6. {
  7. //-------------------------------------------------------------//
  8. settings.Add("split_end", true, "Splits");
  9. settings.Add("subsplits", true, "Subsplits");
  10.  
  11. settings.CurrentDefaultParent = "split_end";
  12. settings.Add("nidoran", true, "Catch Nido");
  13. settings.Add("gym1", true, "Pewter Gym (Brock)");
  14. settings.Add("enterMtMoon", true, "Enter Mt. Moon");
  15. settings.Add("exitMtMoon", true, "Exit Mt. Moon");
  16. settings.Add("nuggetBridge", true, "Nugget Bridge (Rocket)");
  17. settings.Add("gym2", true, "Cerulean Gym (Misty)");
  18. settings.Add("gym3", true, "Vermilion Gym (Lt. Surge)");
  19. settings.Add("hm02", true, "Obtain HM02");
  20. settings.Add("flute", true, "Obtain Poké Flute");
  21. settings.Add("gym5", true, "Fuchsia Gym (Koga)");
  22. settings.Add("gym4", true, "Celadon Gym (Erika)");
  23. settings.Add("gym7", true, "Cinnabar Gym (Blaine)");
  24. settings.Add("gym6", true, "Saffron Gym (Sabrina)");
  25. settings.Add("gym8", true, "Viridian Gym (Giovanni)");
  26. settings.Add("elite4_1", true, "Lorelei");
  27. settings.Add("elite4_2", true, "Bruno");
  28. settings.Add("elite4_3", true, "Agatha");
  29. settings.Add("elite4_4", true, "Lance");
  30. settings.Add("elite4_5", true, "Champion");
  31. settings.Add("hof", true, "HoF Fade Out");
  32.  
  33. settings.CurrentDefaultParent = "subsplits";
  34. settings.Add("intro_subsplits", true, "Early Game Subsplits");
  35. settings.Add("fly_subsplits", true, "Fly Subsplits");
  36. settings.Add("flute_subsplits", true, "Flute Subsplits");
  37. settings.Add("koga_subsplits", true, "Koga Subsplits");
  38. settings.Add("gym_rush_subsplits", true, "Gym Rush Subsplits");
  39. settings.Add("late_game_subsplits", true, "Late Game Subsplits");
  40.  
  41. settings.Add("intro_tile", true, "Intro Tile", "intro_subsplits");
  42. settings.Add("enter_lab", false, "Enter Lab", "intro_subsplits");
  43. settings.Add("rival_one_start", true, "Rival 1 Tile", "intro_subsplits");
  44. settings.Add("rival", true, "Leave Oak's Lab", "intro_subsplits");
  45. settings.Add("route1_pass", true, "Route 1 Pass 1", "intro_subsplits");
  46. settings.Add("deliver_parcel", true, "Deliver Parcel", "intro_subsplits");
  47. settings.Add("route1_pass_2", true, "Route 1 Pass 2", "intro_subsplits");
  48. settings.Add("pidgey", true, "Catch Bird", "intro_subsplits");
  49. settings.Add("forest_bc", true, "Forest Bug Catcher", "intro_subsplits");
  50. settings.Add("pewter_enter", true, "Enter Pewter", "intro_subsplits");
  51. settings.Add("enter_gym_1", true, "Enter Brock's Gym", "intro_subsplits");
  52. settings.Add("pewter_exit", true, "Exit Pewter", "intro_subsplits");
  53. settings.Add("beat_shorts_guy", true, "Beat Shorts Guy", "intro_subsplits");
  54. settings.Add("route3", true, "Route 3 Last Bug Catcher", "intro_subsplits");
  55. settings.Add("moon_rocket", true, "Moon Rocket", "intro_subsplits");
  56. settings.Add("fossil", true, "Get Fossil", "intro_subsplits");
  57. settings.Add("paras_catch", true, "Paras Catch", "intro_subsplits");
  58. settings.Add("bridge_rival", true, "Beat Bridge Rival", "intro_subsplits");
  59. settings.Add("bridge_youngster", true, "bridge_youngster", "intro_subsplits");
  60. settings.Add("bill_house", true, "Bill's House", "intro_subsplits");
  61. settings.Add("enter_gym_2", true, "Enter Misty's Gym", "intro_subsplits");
  62. settings.Add("boat_rival", true, "Beat Boat Rival", "intro_subsplits");
  63. settings.Add("route_6", true, "Route 6 Grass", "intro_subsplits");
  64. settings.Add("enter_gym_3", true, "Enter Surge's Gym", "intro_subsplits");
  65.  
  66. settings.Add("enter_rock_tunnel", true, "Enter Rock Tunnel", "fly_subsplits");
  67. settings.Add("exit_rock_tunnel", true, "Exit Rock Tunnel", "fly_subsplits");
  68. settings.Add("enter_celadon_mart", true, "Enter Celadon Mart", "fly_subsplits");
  69. settings.Add("enter_pkmn_tower", true, "Enter Pokemon Tower", "flute_subsplits");
  70. settings.Add("tower_rival", true, "Beat Tower Rival", "flute_subsplits");
  71. settings.Add("channeler_3", true, "Beat Channeler 3", "flute_subsplits");
  72. settings.Add("tippy", true, "Tippy", "flute_subsplits");
  73. settings.Add("silph_rival", true, "Beat Silph Rival", "koga_subsplits");
  74. settings.Add("silph_gio", true, "Beat Silph Gio", "koga_subsplits");
  75. settings.Add("enter_safari", true, "Enter Safari Zone", "koga_subsplits");
  76. settings.Add("enter_koga_gym", true, "Enter Koga's Gym", "koga_subsplits");
  77.  
  78. settings.Add("enter_mansion", true, "Enter Pokemon Mansion", "gym_rush_subsplits");
  79. settings.Add("enter_erika_gym", true, "Enter Erika's Gym", "gym_rush_subsplits");
  80. settings.Add("enter_blaine_gym", true, "Enter Blaine's Gym", "gym_rush_subsplits");
  81. settings.Add("q1", true, "1st Question", "gym_rush_subsplits");
  82. settings.Add("q2", true, "2nd Question", "gym_rush_subsplits");
  83. settings.Add("q3", true, "3rd Question", "gym_rush_subsplits");
  84. settings.Add("q4", true, "4th Question", "gym_rush_subsplits");
  85. settings.Add("q5", true, "5th Question", "gym_rush_subsplits");
  86. settings.Add("q6", true, "6th Question", "gym_rush_subsplits");
  87. settings.Add("enter_sabrina_gym", true, "Enter Sabrina's Gym", "gym_rush_subsplits");
  88. settings.Add("enter_giovanni_gym", true, "Enter Giovanni's Gym", "late_game_subsplits");
  89. settings.Add("blackbelt", true, "Blackbelt", "late_game_subsplits");
  90. settings.Add("viridian_rival", true, "Beat Viridian Rival", "late_game_subsplits");
  91. settings.Add("exit_victory_road", true, "Exit Victory Road", "late_game_subsplits");
  92.  
  93. //-------------------------------------------------------------//
  94.  
  95. refreshRate = 0.5;
  96.  
  97. Assembly.Load(File.ReadAllBytes("Components/emu-help-v2")).CreateInstance("GBC");
  98. vars.Helper.Load = (Func<dynamic, bool>)(emu =>
  99. {
  100. emu.Make<byte>("wSoundID", 0x0001);
  101. emu.Make<byte>("hofTile", 0x0490);
  102. emu.Make<byte>("wCurrentMenuItem", 0x0C26);
  103. emu.Make<uint>("wHoFMonOrPlayer", 0x0D40);
  104. emu.Make<byte>("wEnemyMonSpecies2", 0x0FD8);
  105. emu.Make<uint>("wEnemyMonNick", 0x0FDA);
  106. emu.Make<byte>("wBattleMonHP", 0x1016);
  107. emu.Make<uint>("wTrainerName", 0x104A);
  108. emu.Make<byte>("wTrainerNo", 0x105D);
  109. emu.Make<byte>("wPartyCount", 0x1163);
  110. emu.Make<ushort>("wPartyMon1Exp", 0x117A);
  111. emu.Make<ushort>("wPlayerID", 0x1359);
  112. emu.Make<byte>("wCurMap", 0x135E);
  113. emu.Make<byte>("wYCoord", 0x1361);
  114. emu.Make<byte>("wXCoord", 0x1362);
  115. emu.Make<ushort>("wStack", 0x1FFD);
  116.  
  117. // iohram starts 0xff00
  118. emu.Make<byte>("rBGP", 0xFF47);
  119. emu.Make<byte>("hJoyHeld", 0xFFB4);
  120. emu.Make<ushort>("wTextDest", 0x0C3A);
  121.  
  122. return true;
  123. });
  124.  
  125. vars.Current = (Func<string, uint, bool>)((name, value) =>
  126. {
  127. return vars.Helper[name].Current == value;
  128. });
  129.  
  130. vars.IsOnTile = (Func<byte, byte, byte, bool>)((MapID, YCoord, XCoord) =>
  131. {
  132. return vars.Current("wCurMap", MapID) && vars.Current("wYCoord", YCoord) && vars.Current("wXCoord", XCoord);
  133. });
  134.  
  135. var enterMapBreakpoint = 0xAE03u;
  136. var itemJingleID = 0x94u;
  137.  
  138. vars.GetSplitList = (Func<Dictionary<string, bool>>)(() =>
  139. {
  140. bool battleOver = vars.Current("wEnemyMonSpecies2", 0) && vars.Current("wStack", enterMapBreakpoint);
  141. bool fadeWhite = vars.Current("rBGP", 0);
  142. return new Dictionary<string, bool> {
  143. {"nidoran", vars.Current("wCurMap", 0x21) && vars.Current("wPartyCount", 2) && vars.Current("wStack", enterMapBreakpoint)},
  144. {"gym1", vars.Current("wTrainerName", 0x81918E82) && battleOver},
  145. {"enterMtMoon", vars.IsOnTile(0x3B, 0x05, 0x12)},
  146. {"exitMtMoon", vars.IsOnTile(0x0F, 0x03, 0x1B)},
  147. {"nuggetBridge", vars.Current("wTrainerName", 0x918E828A) && vars.Current("wCurMap", 0x23) && battleOver},
  148. {"gym2", vars.Current("wTrainerName", 0x8C889293) && battleOver},
  149. {"gym3", vars.Current("wTrainerName", 0x8B93E892) && battleOver},
  150. {"hm02", vars.Current("wSoundID", itemJingleID) && vars.Current("wCurMap", 0xBC)},
  151. {"flute", vars.Current("wSoundID", itemJingleID) && vars.Current("wCurMap", 0x95)},
  152. {"gym5", vars.Current("wTrainerName", 0x8A8E8680) && battleOver},
  153. {"gym4", vars.Current("wTrainerName", 0x8491888A) && battleOver},
  154. {"gym7", vars.Current("wTrainerName", 0x818B8088) && battleOver},
  155. {"gym6", vars.Current("wTrainerName", 0x92808191) && battleOver},
  156. {"gym8", vars.Current("wTrainerName", 0x86888E95) && vars.Current("wCurMap", 0x2D) && battleOver},
  157. {"elite4_1", vars.Current("wTrainerName", 0x8B8E9184) && battleOver},
  158. {"elite4_2", vars.Current("wTrainerName", 0x8191948D) && battleOver},
  159. {"elite4_3", vars.Current("wTrainerName", 0x80868093) && battleOver},
  160. {"elite4_4", vars.Current("wTrainerName", 0x8B808D82) && battleOver},
  161. {"elite4_5", vars.Current("wEnemyMonNick", 0x95848D94) && vars.Current("wCurMap", 0x78) && battleOver},
  162. {"hof", vars.Current("wCurMap", 0x76) && vars.Current("wHoFMonOrPlayer", 0x01000000) && vars.Current("hofTile", 0x79) && fadeWhite},
  163.  
  164. {"intro_tile", vars.IsOnTile(0x25, 0x1, 0x7)},
  165. {"enter_lab", vars.IsOnTile(0x28, 0xB, 0xC)},
  166. {"rival_one_start", vars.IsOnTile(0x28, 0x06, 0x05) && vars.Current("wPartyCount", 1)},
  167. {"rival", vars.Current("wCurMap", 0) && vars.Current("wPartyCount", 1)},
  168. {"route1_pass", vars.IsOnTile(0xC, 0x2, 0xE)},
  169. {"deliver_parcel", vars.IsOnTile(0x28, 0x02, 0x04) && vars.Current("wSoundID", itemJingleID)},
  170. {"route1_pass_2", vars.IsOnTile(0xC, 0x4, 0xC)},
  171.  
  172. {"pidgey", vars.Current("wCurMap", 0x0D) && vars.Current("wPartyCount", 3) && vars.Current("wStack", enterMapBreakpoint)},
  173. {"forest_bc", vars.Current("wTrainerName", 0x8194867F) && vars.Current("wTrainerNo", 3) && battleOver},
  174. {"pewter_enter", vars.IsOnTile(0x02, 0x22, 0x12)},
  175. {"enter_gym_1", vars.IsOnTile(0x36, 0x11, 0x10)},
  176. {"pewter_exit", vars.IsOnTile(0x0E, 0x08, 0x0B)},
  177. {"beat_shorts_guy", vars.IsOnTile(0x0E, 0x04, 0x0D) && vars.Current("wStack", enterMapBreakpoint)},
  178. {"route3", vars.Current("wTrainerName", 0x8194867F) && vars.Current("wTrainerNo", 6) && battleOver},
  179. {"paras_catch", vars.Current("wCurMap", 0x3D) && vars.Current("wPartyCount", 4) && vars.Current("wStack", enterMapBreakpoint)},
  180. {"moon_rocket", vars.IsOnTile(0x3D, 0x11, 0x0B) && vars.Current("wStack", enterMapBreakpoint)},
  181. {"fossil", vars.IsOnTile(0x3D, 0x07, 0x0D) && vars.Current("wSoundID", itemJingleID)},
  182. {"bridge_rival", vars.Current("wEnemyMonNick", 0x81948B81) && vars.Current("wCurMap", 0x03) && battleOver},
  183. {"bridge_youngster", vars.IsOnTile(0x23, 0x1A, 0x0B) && vars.Current("wStack", enterMapBreakpoint)},
  184. {"bill_house", vars.IsOnTile(0x58, 0x03, 0x2D)},
  185. {"enter_gym_2", vars.IsOnTile(0x41, 0x13, 0x1E)},
  186. {"route_6", vars.IsOnTile(0x11, 0x1C, 0x0F)},
  187. {"boat_rival", vars.Current("wEnemyMonNick", 0x88959892) && vars.Current("wCurMap", 0x60) && battleOver},
  188. {"enter_gym_3", vars.IsOnTile(0x5C, 0x13, 0x0C)},
  189.  
  190. {"enter_rock_tunnel", vars.IsOnTile(0x52, 0x11, 0x08)},
  191. {"exit_rock_tunnel", vars.IsOnTile(0x15, 0x21, 0x0F)},
  192. {"enter_celadon_mart", vars.IsOnTile(0x7A, 0x0D, 0x0A)},
  193. {"enter_pkmn_tower", vars.IsOnTile(0x8E, 0x05, 0x0E)},
  194. {"tower_rival", vars.Current("wEnemyMonNick", 0x88959892) && vars.Current("wCurMap", 0x8F) && battleOver},
  195. {"channeler_3", vars.Current("wTrainerName", 0x8287808D) && vars.IsOnTile(0x93, 0x05, 0x0A) && battleOver},
  196. {"tippy", vars.IsOnTile(0x94, 0x10, 0x09)},
  197. {"silph_rival", vars.Current("wEnemyMonNick", 0x95848D94) && vars.IsOnTile(0xD4, 0x02, 0x03) && battleOver},
  198. {"silph_gio", vars.Current("wTrainerName", 0x86888E95) && vars.Current("wCurMap", 0xEB) && battleOver},
  199. {"enter_safari", vars.IsOnTile(0xDC, 0x00, 0x04)},
  200. {"enter_koga_gym", vars.IsOnTile(0x9D, 0x1B, 0x05)},
  201. {"enter_mansion", vars.IsOnTile(0xA5, 0x03, 0x06)},
  202. {"enter_erika_gym", vars.IsOnTile(0x86, 0x1B, 0x0C)},
  203. {"enter_blaine_gym", vars.IsOnTile(0xA6, 0x03, 0x12)},
  204. {"q1", vars.IsOnTile(0xA6, 0x06, 0x12)},
  205. {"q2", vars.IsOnTile(0xA6, 0x06, 0x0C)},
  206. {"q3", vars.IsOnTile(0xA6, 0x0C, 0x0C)},
  207. {"q4", vars.IsOnTile(0xA6, 0x10, 0x06)},
  208. {"q5", vars.IsOnTile(0xA6, 0x0C, 0x04)},
  209. {"q6", vars.IsOnTile(0xA6, 0x06, 0x04)},
  210. {"enter_sabrina_gym", vars.IsOnTile(0xB2, 0x03, 0x22)},
  211. {"enter_giovanni_gym", vars.IsOnTile(0x0B, 0x07, 0x20)},
  212. {"blackbelt", vars.IsOnTile(0x2D, 0x04, 0x0A) && vars.Current("wStack", enterMapBreakpoint)},
  213. {"viridian_rival", vars.Current("wEnemyMonNick", 0x95848D94) && vars.IsOnTile(0x21, 0x05, 0x1D) && battleOver},
  214. {"exit_victory_road", vars.IsOnTile(0x22, 0x1F, 0x0E)},
  215. };
  216. });
  217.  
  218. vars.PrintVar = (Func<string, Action>)(name =>
  219. {
  220. print(vars.Helper[name].Current.ToString());
  221. return;
  222. });
  223.  
  224. vars.PrintHex = (Func<string, Action>)(name =>
  225. {
  226. print(vars.Helper[name].Current.ToString("X"));
  227. return;
  228. });
  229. }
  230.  
  231. init {
  232. vars.pastSplits = new HashSet<string>();
  233. refreshRate = 200 / 3.0;
  234. }
  235.  
  236. update
  237. {
  238. if(timer.CurrentPhase == TimerPhase.NotRunning && vars.pastSplits.Count > 0) {
  239. vars.pastSplits.Clear();
  240. }
  241. }
  242.  
  243. start {
  244. return current.wCurrentMenuItem == 0 && current.wPlayerID == 0 && current.wStack == 0x915B && (current.hJoyHeld & 0x80) == 0;
  245. }
  246.  
  247. reset {
  248. var isRaceRun = timer.CurrentTime.ToString().StartsWith("-");
  249. return current.wCurrentMenuItem == 1 && current.wPlayerID == 0 && current.wStack == 0x915B && !isRaceRun;
  250. }
  251.  
  252. split {
  253. var splits = vars.GetSplitList();
  254.  
  255. foreach(var split in splits) {
  256. if (settings[split.Key] && split.Value && !vars.pastSplits.Contains(split.Key)) {
  257. vars.pastSplits.Add(split.Key);
  258. print("[AutoSplitter] Split: " + split.Key);
  259. return true;
  260. }
  261. }
  262. }
  263.  
  264. exit {
  265. refreshRate = 0.5;
  266. }
  267.  
Advertisement
Add Comment
Please, Sign In to add comment