HIDDEN_MAPS_STEPS = 1500 HIDDEN_MAP_ALWAYS = [178, 655, 570, 356] RANDOM_HIDDEN_MAP_LIST = [8, 109, 431, 446, 402, 403, 467, 468, 10, 23, 167, 16, 19, 78, 185, 86, 491, 90, 40, 342, 490, 102, 103, 104, 105, 106, 1, 12, 413, 445, 484, 485, 486, 140, 350, 146, 149, 304, 356, 307, 409, 351, 495, 154, 349, 322, 323, 544, 198, 144, 155, 444, 58, 59, 229, 52, 53, 54, 55, 98, 173, 174, 181, 187, 95, 159, 162, 437, 440, 438, 57, 171, 528, 265, 288, 364, 329, 335, 254, 261, 262, 266, 230, 145, 147, 258, 284, 283, 267, 586, 285, 286, 287, 300, 311, 47, 580, 529, 635, 638, 646, 560, 559, 526, 600, 564, 594, 566, 562, 619, 563, 603, 561, 597, 633, 640, 641, 621, 312, 670, 692, 643, 523, 698, 602, 642, 623, 569, 588, 573, 362, 645, 651, 376, 762 ] RANDOM_HIDDEN_MAP_LIST_HOENN = [ 5, 10, 11, 12, 20, 50, 49, 31, 65, 37, 38, 39, 71, 74, 76, 77, # Routes 30, 28, 32, 34, 35, # dungeons 69, 62, 97, # secret areas 7, 47, 51, 6, # cities (only those that have encounterable pokemon) 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, # Placeholders (so that it's still rare in the demo lol) ] Events.onMapUpdate += proc { |sender, e| # next if !$game_switches[HIDDENMAPSWITCH] if $PokemonGlobal.stepcount % HIDDEN_MAPS_STEPS == 0 changeHiddenMap() end } def changeHiddenMap() maps_list = Settings::KANTO ? RANDOM_HIDDEN_MAP_LIST : RANDOM_HIDDEN_MAP_LIST_HOENN i = rand(maps_list.length - 1) pbSet(VAR_CURRENT_HIDDEN_MAP, maps_list[i]) setHiddenAbilityMapAnnouncement if Settings::HOENN end def setHiddenAbilityMapAnnouncement visitedMap = $PokemonGlobal.visitedMaps[pbGet(VAR_CURRENT_HIDDEN_MAP)] if visitedMap addTVAnnouncement(:hidden_ability) else removeTVAnnouncement(:hidden_ability) end end Events.onWildPokemonCreate += proc { |sender, e| if player_on_hidden_ability_map || isAlwaysHiddenAbilityMap($game_map.map_id) pokemon = e[0] chosenAbility = pokemon.getAbilityList.sample # format: [[:ABILITY, index],...] pokemon.ability = chosenAbility[0] pokemon.ability_index = chosenAbility[1] end } def isAlwaysHiddenAbilityMap(mapId) return HIDDEN_MAP_ALWAYS.include? mapId end def player_on_hidden_ability_map return $game_map.map_id == pbGet(VAR_CURRENT_HIDDEN_MAP) end def getCurrentHiddenAbilityMapName return getMapName(pbGet(VAR_CURRENT_HIDDEN_MAP)).to_s end def getMapName(id) mapinfos = pbLoadMapInfos return _INTL("Unknown location") if !mapinfos[id] return mapinfos[id].name end