| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | import typing | 
					
						
							|  |  |  | from BaseClasses import MultiWorld, Region, Entrance, Location, RegionType | 
					
						
							| 
									
										
										
										
											2022-02-20 19:10:08 +01:00
										 |  |  | from .Locations import SM64Location, location_table, locBoB_table, locWhomp_table, locJRB_table, locCCM_table, \ | 
					
						
							|  |  |  |     locBBH_table, \ | 
					
						
							|  |  |  |     locHMC_table, locLLL_table, locSSL_table, locDDD_table, locSL_table, \ | 
					
						
							|  |  |  |     locWDW_table, locTTM_table, locTHI_table, locTTC_table, locRR_table, \ | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     locPSS_table, locSA_table, locBitDW_table, locTotWC_table, locCotMC_table, \ | 
					
						
							|  |  |  |     locVCutM_table, locBitFS_table, locWMotR_table, locBitS_table, locSS_table | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | # List of all courses, including secrets, without BitS as that one is static | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  | sm64courses = ["Bob-omb Battlefield", "Whomp's Fortress", "Jolly Roger Bay", "Cool, Cool Mountain", "Big Boo's Haunt", | 
					
						
							| 
									
										
										
										
											2022-02-20 19:10:08 +01:00
										 |  |  |                "Hazy Maze Cave", "Lethal Lava Land", "Shifting Sand Land", "Dire, Dire Docks", "Snowman's Land", | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |                "Wet-Dry World", "Tall, Tall Mountain", "Tiny-Huge Island", "Tick Tock Clock", "Rainbow Ride", | 
					
						
							|  |  |  |                "The Princess's Secret Slide", "The Secret Aquarium", "Bowser in the Dark World", "Tower of the Wing Cap", | 
					
						
							|  |  |  |                "Cavern of the Metal Cap", "Vanish Cap under the Moat", "Bowser in the Fire Sea", "Wing Mario over the Rainbow"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # sm64paintings is list of entrances, format LEVEL | AREA. String Reference below | 
					
						
							|  |  |  | sm64paintings   = [91,241,121,51,41,71,221,81,231,101,111,361,132,131,141,151] | 
					
						
							|  |  |  | sm64paintings_s = ["BOB", "WF", "JRB", "CCM", "BBH", "HMC", "LLL", "SSL", "DDD", "SL", "WDW", "TTM", "THI Tiny", "THI Huge", "TTC", "RR"] | 
					
						
							|  |  |  | # sm64secrets is list of secret areas | 
					
						
							|  |  |  | sm64secrets = [271, 201, 171, 291, 281, 181, 191, 311] | 
					
						
							|  |  |  | sm64secrets_s = ["PSS", "SA", "BitDW", "TOTWC", "COTMC", "VCUTM", "BitFS", "WMOTR"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sm64entrances = sm64paintings + sm64secrets | 
					
						
							|  |  |  | sm64entrances_s = sm64paintings_s + sm64secrets_s | 
					
						
							|  |  |  | sm64_internalloc_to_string = dict(zip(sm64paintings+sm64secrets, sm64entrances_s)) | 
					
						
							|  |  |  | sm64_internalloc_to_regionid = dict(zip(sm64paintings+sm64secrets, list(range(13)) + [12,13,14] + list(range(15,15+len(sm64secrets))))) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-20 19:10:08 +01:00
										 |  |  | def create_regions(world: MultiWorld, player: int): | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     regSS = Region("Menu", RegionType.Generic, "Castle Area", player, world) | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     create_default_locs(regSS, locSS_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regSS) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regBoB = create_region("Bob-omb Battlefield", player, world) | 
					
						
							|  |  |  |     create_default_locs(regBoB, locBoB_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regBoB.locations.append(SM64Location(player, "BoB: 100 Coins", location_table["BoB: 100 Coins"], regBoB)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regBoB) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regWhomp = create_region("Whomp's Fortress", player, world) | 
					
						
							|  |  |  |     create_default_locs(regWhomp, locWhomp_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regWhomp.locations.append(SM64Location(player, "WF: 100 Coins", location_table["WF: 100 Coins"], regWhomp)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regWhomp) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regJRB = create_region("Jolly Roger Bay", player, world) | 
					
						
							|  |  |  |     create_default_locs(regJRB, locJRB_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regJRB.locations.append(SM64Location(player, "JRB: 100 Coins", location_table["JRB: 100 Coins"], regJRB)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regJRB) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regCCM = create_region("Cool, Cool Mountain", player, world) | 
					
						
							|  |  |  |     create_default_locs(regCCM, locCCM_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regCCM.locations.append(SM64Location(player, "CCM: 100 Coins", location_table["CCM: 100 Coins"], regCCM)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regCCM) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regBBH = create_region("Big Boo's Haunt", player, world) | 
					
						
							|  |  |  |     create_default_locs(regBBH, locBBH_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regBBH.locations.append(SM64Location(player, "BBH: 100 Coins", location_table["BBH: 100 Coins"], regBBH)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regBBH) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regPSS = create_region("The Princess's Secret Slide", player, world) | 
					
						
							|  |  |  |     create_default_locs(regPSS, locPSS_table, player) | 
					
						
							|  |  |  |     world.regions.append(regPSS) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     regSA = create_region("The Secret Aquarium", player, world) | 
					
						
							|  |  |  |     create_default_locs(regSA, locSA_table, player) | 
					
						
							|  |  |  |     world.regions.append(regSA) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     regTotWC = create_region("Tower of the Wing Cap", player, world) | 
					
						
							|  |  |  |     create_default_locs(regTotWC, locTotWC_table, player) | 
					
						
							|  |  |  |     world.regions.append(regTotWC) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     regBitDW = create_region("Bowser in the Dark World", player, world) | 
					
						
							|  |  |  |     create_default_locs(regBitDW, locBitDW_table, player) | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  |     world.regions.append(regBitDW) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regBasement = create_region("Basement", player, world) | 
					
						
							| 
									
										
										
										
											2022-01-27 11:14:17 +01:00
										 |  |  |     world.regions.append(regBasement) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regHMC = create_region("Hazy Maze Cave", player, world) | 
					
						
							|  |  |  |     create_default_locs(regHMC, locHMC_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regHMC.locations.append(SM64Location(player, "HMC: 100 Coins", location_table["HMC: 100 Coins"], regHMC)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regHMC) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regLLL = create_region("Lethal Lava Land", player, world) | 
					
						
							|  |  |  |     create_default_locs(regLLL, locLLL_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regLLL.locations.append(SM64Location(player, "LLL: 100 Coins", location_table["LLL: 100 Coins"], regLLL)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regLLL) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regSSL = create_region("Shifting Sand Land", player, world) | 
					
						
							|  |  |  |     create_default_locs(regSSL, locSSL_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regSSL.locations.append(SM64Location(player, "SSL: 100 Coins", location_table["SSL: 100 Coins"], regSSL)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regSSL) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regDDD = create_region("Dire, Dire Docks", player, world) | 
					
						
							|  |  |  |     create_default_locs(regDDD, locDDD_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regDDD.locations.append(SM64Location(player, "DDD: 100 Coins", location_table["DDD: 100 Coins"], regDDD)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regDDD) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regCotMC = create_region("Cavern of the Metal Cap", player, world) | 
					
						
							|  |  |  |     create_default_locs(regCotMC, locCotMC_table, player) | 
					
						
							|  |  |  |     world.regions.append(regCotMC) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     regVCutM = create_region("Vanish Cap under the Moat", player, world) | 
					
						
							|  |  |  |     create_default_locs(regVCutM, locVCutM_table, player) | 
					
						
							|  |  |  |     world.regions.append(regVCutM) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     regBitFS = create_region("Bowser in the Fire Sea", player, world) | 
					
						
							|  |  |  |     create_default_locs(regBitFS, locBitFS_table, player) | 
					
						
							| 
									
										
										
										
											2022-02-09 20:57:38 +01:00
										 |  |  |     world.regions.append(regBitFS) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regFloor2 = create_region("Second Floor", player, world) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regFloor2) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regSL = create_region("Snowman's Land", player, world) | 
					
						
							|  |  |  |     create_default_locs(regSL, locSL_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regSL.locations.append(SM64Location(player, "SL: 100 Coins", location_table["SL: 100 Coins"], regSL)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regSL) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regWDW = create_region("Wet-Dry World", player, world) | 
					
						
							|  |  |  |     create_default_locs(regWDW, locWDW_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regWDW.locations.append(SM64Location(player, "WDW: 100 Coins", location_table["WDW: 100 Coins"], regWDW)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regWDW) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regTTM = create_region("Tall, Tall Mountain", player, world) | 
					
						
							|  |  |  |     create_default_locs(regTTM, locTTM_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regTTM.locations.append(SM64Location(player, "TTM: 100 Coins", location_table["TTM: 100 Coins"], regTTM)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regTTM) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regTHI = create_region("Tiny-Huge Island", player, world) | 
					
						
							|  |  |  |     create_default_locs(regTHI, locTHI_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regTHI.locations.append(SM64Location(player, "THI: 100 Coins", location_table["THI: 100 Coins"], regTHI)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regTHI) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regFloor3 = create_region("Third Floor", player, world) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regFloor3) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regTTC = create_region("Tick Tock Clock", player, world) | 
					
						
							|  |  |  |     create_default_locs(regTTC, locTTC_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regTTC.locations.append(SM64Location(player, "TTC: 100 Coins", location_table["TTC: 100 Coins"], regTTC)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regTTC) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regRR = create_region("Rainbow Ride", player, world) | 
					
						
							|  |  |  |     create_default_locs(regRR, locRR_table, player) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     if (world.EnableCoinStars[player].value): | 
					
						
							| 
									
										
										
										
											2022-01-27 17:42:10 +01:00
										 |  |  |         regRR.locations.append(SM64Location(player, "RR: 100 Coins", location_table["RR: 100 Coins"], regRR)) | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     world.regions.append(regRR) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  |     regWMotR = create_region("Wing Mario over the Rainbow", player, world) | 
					
						
							|  |  |  |     create_default_locs(regWMotR, locWMotR_table, player) | 
					
						
							|  |  |  |     world.regions.append(regWMotR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     regBitS = create_region("Bowser in the Sky", player, world) | 
					
						
							|  |  |  |     create_default_locs(regBitS, locBitS_table, player) | 
					
						
							|  |  |  |     world.regions.append(regBitS) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-20 19:10:08 +01:00
										 |  |  | def connect_regions(world: MultiWorld, player: int, source: str, target: str, rule=None): | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  |     sourceRegion = world.get_region(source, player) | 
					
						
							|  |  |  |     targetRegion = world.get_region(target, player) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-20 19:10:08 +01:00
										 |  |  |     connection = Entrance(player, '', sourceRegion) | 
					
						
							|  |  |  |     if rule: | 
					
						
							|  |  |  |         connection.access_rule = rule | 
					
						
							| 
									
										
										
										
											2022-01-23 21:34:30 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     sourceRegion.exits.append(connection) | 
					
						
							| 
									
										
										
										
											2022-02-20 19:10:08 +01:00
										 |  |  |     connection.connect(targetRegion) | 
					
						
							| 
									
										
										
										
											2022-07-25 18:39:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | def create_region(name: str, player: int, world: MultiWorld) -> Region: | 
					
						
							|  |  |  |     return Region(name, RegionType.Generic, name, player, world) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def create_default_locs(reg: Region, locs, player): | 
					
						
							|  |  |  |     reg_names = [name for name, id in locs.items()] | 
					
						
							|  |  |  |     reg.locations += [SM64Location(player, loc_name, location_table[loc_name], reg) for loc_name in locs] |