From efd97dc9fe73af98623f153691a0f35af7a9dbf0 Mon Sep 17 00:00:00 2001 From: infinitefusion Date: Fri, 23 Sep 2022 23:15:38 -0400 Subject: [PATCH] More item randomization options --- Credits.txt | 5 +- Data/CommonEvents.rxdata | Bin 117586 -> 118056 bytes Data/Map001.rxdata | Bin 37424 -> 37425 bytes Data/Map050.rxdata | Bin 32088 -> 32090 bytes Data/Map295.rxdata | Bin 31474 -> 31629 bytes Data/MapInfos.rxdata | Bin 37233 -> 37233 bytes Data/Scripts/012_Overworld/001_Overworld.rb | 21 +- Data/Scripts/016_UI/020_UI_PokeMart.rb | 20 + .../025-Randomizer/RandomizerSettings.rb | 175 +++++-- .../Scripts/025-Randomizer/RandomizerUtils.rb | 54 ++- .../randomizer gym leader edit.rb | 433 ++++++++---------- Data/Scripts/025-Randomizer/randomizer.rb | 59 +++ Data/Scripts/049_Compatibility/Constants.rb | 16 +- Data/System.rxdata | Bin 28933 -> 28959 bytes 14 files changed, 505 insertions(+), 278 deletions(-) diff --git a/Credits.txt b/Credits.txt index 40c335dd9..ec4157c69 100644 --- a/Credits.txt +++ b/Credits.txt @@ -25,6 +25,10 @@ Frogman The story and dialogues were based off Pokémon Red and Blue, as well as Pokémon Gold and Silver. Both games are made by Game Freak. + +################################# +Modern Mode by Tomate & Blaquaza + ########################################################### ### Fusion Sprites ### ########################################################## @@ -149,7 +153,6 @@ kakakiamekerasakia#3792, ItsThatSimple#6320, Gelos#9875, GalaxyDJx#0001, Fullmet Evil Mailman#0604, elpano2#9588, Cenna#6226, Catdesu#0845, CaseyAether#2205, carni#0124, Buttlu#7240 - Triple fusion sprites ######################## Legendary birds fusion sprite by Universez diff --git a/Data/CommonEvents.rxdata b/Data/CommonEvents.rxdata index ae45168bf1294ccba72391f6272c6ac76d6fc012..f3ebcd2570495d7bd29c6ea0760eb4bfd4a3c2ff 100644 GIT binary patch delta 1875 zcmZ`&X-rgC81;NG3?mA{%mBl%3_}^B1@~xitPG;9nt(uEk{XnXptu18hy@q4Nv){0 zcvG(nSX7LpieO&si<+uPtU^ox!Tu>OP*ZVy>B+Wk4R5y# zIJQE--*)UJ{$m9U(w2&RVyi0*TMh4p7Zqql1qDO-L*Elv@|;Qm394|lD%39Vwi?s3 z@2AgS{+YYgxk{(3V}?G+?7CV? zvYpu$=TP_+yfO$u%<_69&2{;X^dIt7rXxI!CUN;+zu_9KgXa10(bEvQFIdM@D=|rW zw!6rmI!3URJ{#Rqjwnx|>Xf7-<3U{t5y`Ij>iGQ@=y}a#43}bSES^{>CD#^3pq^cA zK1*l(_;(IO@=QB)ygU)J*cGFW)fZbO-)p^E-uMGEp~ zN4gGBjDn)2jN3iFSS%$xC?I?*o&Do5aE>MS#o#Aa+_#9D0(i{^k>mbCXmFLi?2AV; z8~bP#bq4UXX$WLz9u?tt7WH@?9X8;GZk@0smh+FUWP+fx64H&Dg? zei4Ie7WwBj`ZeI~Nn81wLooTc#BzXGg<eB^itiR z#sgU{4l8&&;FM}!HxN#{sd`yZ;U0M9hJU#fa*qb}L^F&$4cI~nM&1Dw$lG+dNVG#` zzfsw7BXOCiU1dAmEZ=1SlZ*WE0g)-t9VR5u9Y&Zg5G_~PES3Ez7_~&FRQ9yWwwZB? z=%vcOaa>X!-Po0Eb9CkU#ag#BqA+t%Dw+*2jNg~6FX)qH~`P|NGA;ZrUS85s{-Fd0ZzDqoSKM@z#ZN)6H{?l37JgyOv;yKAy22t)kzo? zKqj-YlqP1`6YN?{uMo3%Sub85jxjvn2czWZMbK!e%FG*!MLI_YKA~zARAr!>&a0q( zDYX3irHG~r|1pf(RPg08QChnj$QPGkjtBXMDtl@pzfd_Y3m@vJCDfHfUcXih0X;k+ zPmIEphiLRF_m!?s=@?<+nd?zS6viESFuMfg5he?;2xJRmdD{c|nS8u~gIk;;LTdpQ zB2l?BiV2g?IpGf~2;<`Y3|!>$;SURuMoyJUDH4m<>Mn)%7NG*1Hx!FFJBvjn2b6m~ zHK=0e2E?L~|F8kaaGlRAK|F3K3ZpV9E&n+~Ot7v5Pl*uD24C2S!sSb)Xw^_jxO<}a z%Z2VlxtQBVHzNzC1XQKk8@3C3(RN|4R_%hB>_Oe(u4SP+;mVWBmah?@qumj1a!oBx%H7kd8_1+PD!40v*uR7p6yu&-{i+2S F_y<_8d4m7| delta 1592 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 literal 37424 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 diff --git a/Data/Map050.rxdata b/Data/Map050.rxdata index 304f309876ccbb33556bc74f3aaea770b26a80f1..871f03d024b4709b4c7c9023625cb2621c7b0f93 100644 GIT binary patch literal 32090 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 literal 32088 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 CE@^uJ delta 1172 zcmbW0O-xfk5P&<6wyzMZl-AUi^3xXNuh4?X0~W9dJ}e|?3wlmQo#UCFYP^hZL=nc?8r8iEa5q}>&FQb(G0@HKa(~REk@VV~cn4df1(E%Bi zoH5kc3$?q`iG`}rW2eO#QDW1ROqpakv<)PiYDtbv>{LY@?ZnAIzg(Q4eSt%^884J#v4cI6x;47CJyNcWJiF6uo)@dV3&25FfjJ5qd+_+XSs{M{;QCe>7=x+wXBA49%N zFvLFjrU9BLXv5)P9+=ohoLP0l8&tEm&%WJA*E3rxO2fpY|WdHyG diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index f5624ba37ac235502f18ad0cff9156d03f91c716..4f69778dc9f80f20bc05b19019d3f4581c92141c 100644 GIT binary patch delta 49 zcmeyki0R`ZrVUeB7(+HsV^IN7yE#5dFn*Z4PEmsEGNUzjCgc4~CXvaGs#2R@DYoYW E0NY3sF#rGn delta 49 zcmeyki0R`ZrVUeB7~M8cV^IN7yE#5dFlJ6(rzpYI!D!8$$#_4LNo2C4s?_FJitYIT D#HJBL diff --git a/Data/Scripts/012_Overworld/001_Overworld.rb b/Data/Scripts/012_Overworld/001_Overworld.rb index 3bc3d6176..d78268bd9 100644 --- a/Data/Scripts/012_Overworld/001_Overworld.rb +++ b/Data/Scripts/012_Overworld/001_Overworld.rb @@ -786,7 +786,8 @@ end # Picking up an item found on the ground #=============================================================================== def pbItemBall(item, quantity = 1, item_name = "", canRandom = true) - if canRandom + canRandom = false if !$game_switches[SWITCH_RANDOM_ITEMS_GENERAL] + if canRandom && ($game_switches[SWITCH_RANDOM_FOUND_ITEMS] || $game_switches[SWITCH_RANDOM_FOUND_TMS]) item = pbGetRandomItem(item) if canRandom #fait rien si pas activé else item = GameData::Item.get(item) @@ -833,9 +834,23 @@ end #=============================================================================== -def pbReceiveItem(item, quantity = 1, item_name = "", music = nil) +def pbReceiveItem(item, quantity = 1, item_name = "", music = nil, canRandom=true) #item_name -> pour donner un autre nom à l'item. Pas encore réimplémenté et surtout là pour éviter que ça plante quand des events essaient de le faire - item = GameData::Item.get(item) + canRandom = false if !$game_switches[SWITCH_RANDOM_ITEMS_GENERAL] + if canRandom && ($game_switches[SWITCH_RANDOM_GIVEN_ITEMS] || $game_switches[SWITCH_RANDOM_GIVEN_TMS]) + item = pbGetRandomItem(item) if canRandom #fait rien si pas activé + else + item = GameData::Item.get(item) + end + # item = GameData::Item.get(item) + # if $game_switches[SWITCH_RANDOM_ITEMS] && $game_switches[SWITCH_RANDOM_GIVEN_ITEMS] + # item = pbGetRandomItem(item.id) + # end + # + # if $game_switches[SWITCH_RANDOM_ITEMS] && $game_switches[SWITCH_RANDOM_GIVEN_TMS] + # item = getRandomGivenTM(item) + # end + return false if !item || quantity < 1 itemname = (quantity > 1) ? item.name_plural : item.name pocket = item.pocket diff --git a/Data/Scripts/016_UI/020_UI_PokeMart.rb b/Data/Scripts/016_UI/020_UI_PokeMart.rb index 883a0e7e1..9adf3442f 100644 --- a/Data/Scripts/016_UI/020_UI_PokeMart.rb +++ b/Data/Scripts/016_UI/020_UI_PokeMart.rb @@ -648,10 +648,30 @@ class PokemonMartScreen end end +def replaceShopStockWithRandomized(stock) + if $PokemonGlobal.randomItemsHash != nil + newStock = [] + for item in stock + newItem =$PokemonGlobal.randomItemsHash[item] + if newItem != nil && GameData::Item.get(newItem).price >0 + newStock << newItem + else + newStock << item + end + end + return newStock + end + return stock +end + #=============================================================================== # #=============================================================================== def pbPokemonMart(stock,speech=nil,cantsell=false) + if $game_switches[SWITCH_RANDOM_ITEMS] && $game_switches[SWITCH_RANDOM_SHOP_ITEMS] + stock = replaceShopStockWithRandomized(stock) + end + for i in 0...stock.length stock[i] = GameData::Item.get(stock[i]).id stock[i] = nil if GameData::Item.get(stock[i]).is_important? && $PokemonBag.pbHasItem?(stock[i]) diff --git a/Data/Scripts/025-Randomizer/RandomizerSettings.rb b/Data/Scripts/025-Randomizer/RandomizerSettings.rb index 3bdd01afa..37fbf9213 100644 --- a/Data/Scripts/025-Randomizer/RandomizerSettings.rb +++ b/Data/Scripts/025-Randomizer/RandomizerSettings.rb @@ -9,6 +9,8 @@ class RandomizerOptionsScene < PokemonOption_Scene @openTrainerOptions = false @openWildOptions = false @openGymOptions = false + @openItemOptions = false + end def getDefaultDescription @@ -26,14 +28,19 @@ class RandomizerOptionsScene < PokemonOption_Scene def pbGetOptions(inloadscreen = false) options = [ - EnumOption.new(_INTL("Starters"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[SWITCH_RANDOM_STARTERS] ? 0 : 1 }, + EnumOption.new(_INTL("Pokémon"), [_INTL("On"), _INTL("Off")], + proc { + $game_switches[SWITCH_RANDOM_WILD] ? 0 : 1 + }, proc { |value| - $game_switches[SWITCH_RANDOM_STARTERS] = value == 0 - }, "Randomize the selection of starters to choose from at the start of the game" + if !$game_switches[SWITCH_RANDOM_WILD] && value == 0 + @openWildOptions = true + openWildPokemonOptionsMenu() + end + $game_switches[SWITCH_RANDOM_WILD] = value == 0 + }, "Select the randomizer options for Pokémon" ), - - EnumOption.new(_INTL("Trainers"), [_INTL("On"), _INTL("Off")], + EnumOption.new(_INTL("NPC Trainers"), [_INTL("On"), _INTL("Off")], proc { $game_switches[SWITCH_RANDOM_TRAINERS] ? 0 : 1 }, proc { |value| if !$game_switches[SWITCH_RANDOM_TRAINERS] && value == 0 @@ -41,7 +48,7 @@ class RandomizerOptionsScene < PokemonOption_Scene openTrainerOptionsMenu() end $game_switches[SWITCH_RANDOM_TRAINERS] = value == 0 - }, "Select the randomizer options for regular trainers" + }, "Select the randomizer options for trainers" ), EnumOption.new(_INTL("Gym trainers"), [_INTL("On"), _INTL("Off")], @@ -55,30 +62,17 @@ class RandomizerOptionsScene < PokemonOption_Scene }, "Limit gym trainers to a single type" ), - EnumOption.new(_INTL("Wild Pokémon"), [_INTL("On"), _INTL("Off")], - proc { - $game_switches[SWITCH_RANDOM_WILD] ? 0 : 1 - }, - proc { |value| - if !$game_switches[SWITCH_RANDOM_WILD] && value == 0 - @openWildOptions = true - openWildPokemonOptionsMenu() - end - $game_switches[SWITCH_RANDOM_WILD] = value == 0 - }, "Select the randomizer options for wild Pokémon" - ), EnumOption.new(_INTL("Items"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[SWITCH_RANDOM_ITEMS] ? 0 : 1 }, + proc { $game_switches[SWITCH_RANDOM_ITEMS_GENERAL] ? 0 : 1 }, proc { |value| - $game_switches[SWITCH_RANDOM_ITEMS] = value == 0 - }, "Randomize the items picked up on the ground" - ), - EnumOption.new(_INTL("TMs"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[SWITCH_RANDOM_TMS] ? 0 : 1 }, - proc { |value| - $game_switches[SWITCH_RANDOM_TMS] = value == 0 - }, "Randomize the TMs picked up on the ground" + if !$game_switches[SWITCH_RANDOM_ITEMS_GENERAL] && value == 0 + @openItemOptions = true + openItemOptionsMenu() + end + $game_switches[SWITCH_RANDOM_ITEMS_GENERAL] = value == 0 + }, "Select the randomizer options for items" ), + ] return options end @@ -93,6 +87,16 @@ class RandomizerOptionsScene < PokemonOption_Scene @openGymOptions = false end + def openItemOptionsMenu() + return if !@openItemOptions + pbFadeOutIn { + scene = RandomizerItemOptionsScene.new + screen = PokemonOptionScreen.new(scene) + screen.pbStartScreen + } + @openItemOptions = false + end + def openTrainerOptionsMenu() return if !@openTrainerOptions pbFadeOutIn { @@ -117,7 +121,6 @@ end class RandomizerTrainerOptionsScene < PokemonOption_Scene RANDOM_TEAMS_CUSTOM_SPRITES = 600 - RANDOM_HELD_ITEMS = 843 RANDOM_GYM_TYPES = 921 def initialize @@ -152,12 +155,6 @@ class RandomizerTrainerOptionsScene < PokemonOption_Scene $game_switches[RANDOM_TEAMS_CUSTOM_SPRITES] = value == 0 }, "Use only Pokémon that have custom sprites in trainer teams" - ), - EnumOption.new(_INTL("Trainer Held items"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[RANDOM_HELD_ITEMS] ? 0 : 1 }, - proc { |value| - $game_switches[RANDOM_HELD_ITEMS] = value == 0 - }, "Give random held items to all trainers" ) ] return options @@ -219,6 +216,12 @@ class RandomizerWildPokemonOptionsScene < PokemonOption_Scene "Randomizes the encounters in each route individually" ] ), + EnumOption.new(_INTL("Starters"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[SWITCH_RANDOM_STARTERS] ? 0 : 1 }, + proc { |value| + $game_switches[SWITCH_RANDOM_STARTERS] = value == 0 + }, "Randomize the selection of starters to choose from at the start of the game" + ), EnumOption.new(_INTL("Static encounters"), [_INTL("On"), _INTL("Off")], proc { $game_switches[RANDOM_STATIC] ? 0 : 1 }, proc { |value| @@ -302,4 +305,106 @@ class RandomizerGymOptionsScene < PokemonOption_Scene ] return options end +end + + + + +class RandomizerItemOptionsScene < PokemonOption_Scene + RANDOM_HELD_ITEMS = 843 + def initialize + @changedColor = false + end + + def pbStartScene(inloadscreen = false) + super + @sprites["option"].nameBaseColor = Color.new(35, 130, 200) + @sprites["option"].nameShadowColor = Color.new(20, 75, 115) + @changedColor = true + for i in 0...@PokemonOptions.length + @sprites["option"][i] = (@PokemonOptions[i].get || 0) + end + @sprites["title"] = Window_UnformattedTextPokemon.newWithSize( + _INTL("Randomizer settings: Items"), 0, 0, Graphics.width, 64, @viewport) + @sprites["textbox"].text = _INTL("Set the randomizer settings for items") + + pbFadeInAndShow(@sprites) { pbUpdate } + end + + def pbFadeInAndShow(sprites, visiblesprites = nil) + return if !@changedColor + super + end + + def pbGetOptions(inloadscreen = false) + options = [ + EnumOption.new(_INTL("Type"), [_INTL("Mapped"), _INTL("Dynamic")], + proc { + if $game_switches[SWITCH_RANDOM_ITEMS_DYNAMIC] + 1 + else + 0 + end + }, + proc { |value| + if value == 0 + $game_switches[SWITCH_RANDOM_ITEMS_MAPPED] = true + $game_switches[SWITCH_RANDOM_ITEMS_DYNAMIC] = false + else + value == 1 + $game_switches[SWITCH_RANDOM_ITEMS_MAPPED] = false + $game_switches[SWITCH_RANDOM_ITEMS_DYNAMIC] = true + end + }, + # proc { $game_switches[SWITCH_RANDOM_ITEMS_FULL] ? 0 : 1 }, + # proc { |value| + # $game_switches[SWITCH_RANDOM_ITEMS_MAPPED] = value == 0 + # $game_switches[SWITCH_RANDOM_ITEMS_FULL] = value == 1 + # }, ["Random items are decided at the start of the game", "Random items are decided as you obtain them"] + ), + EnumOption.new(_INTL("Found items"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[SWITCH_RANDOM_FOUND_ITEMS] ? 0 : 1 }, + proc { |value| + $game_switches[SWITCH_RANDOM_FOUND_ITEMS] = value == 0 + $game_switches[SWITCH_RANDOM_ITEMS] = $game_switches[SWITCH_RANDOM_FOUND_ITEMS] || $game_switches[SWITCH_RANDOM_GIVEN_ITEMS] + }, "Randomize the items picked up on the ground" + ), + EnumOption.new(_INTL("Found TMs"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[SWITCH_RANDOM_FOUND_TMS] ? 0 : 1 }, + proc { |value| + $game_switches[SWITCH_RANDOM_FOUND_TMS] = value == 0 + $game_switches[SWITCH_RANDOM_TMS] = $game_switches[SWITCH_RANDOM_FOUND_TMS] || $game_switches[SWITCH_RANDOM_GIVEN_TMS] + }, "Randomize the TMs picked up on the ground" + ), + EnumOption.new(_INTL("Given items"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[SWITCH_RANDOM_GIVEN_ITEMS] ? 0 : 1 }, + proc { |value| + $game_switches[SWITCH_RANDOM_GIVEN_ITEMS] = value == 0 + $game_switches[SWITCH_RANDOM_ITEMS] = $game_switches[SWITCH_RANDOM_FOUND_ITEMS] || $game_switches[SWITCH_RANDOM_GIVEN_ITEMS] + }, "Randomize the items given by NPCs (might make some quests impossible to complete)" + ), + EnumOption.new(_INTL("Given TMs"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[SWITCH_RANDOM_GIVEN_TMS] ? 0 : 1 }, + proc { |value| + $game_switches[SWITCH_RANDOM_GIVEN_TMS] = value == 0 + $game_switches[SWITCH_RANDOM_TMS] = $game_switches[SWITCH_RANDOM_FOUND_TMS] || $game_switches[SWITCH_RANDOM_GIVEN_TMS] + }, "Randomize the TMs given by NPCs" + ), + + EnumOption.new(_INTL("Shops items"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[SWITCH_RANDOM_SHOP_ITEMS] ? 0 : 1 }, + proc { |value| + $game_switches[SWITCH_RANDOM_SHOP_ITEMS] = value == 0 + }, "Randomizes the items available in shops (always mapped)" + ), + + EnumOption.new(_INTL("Trainer Held items"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[RANDOM_HELD_ITEMS] ? 0 : 1 }, + proc { |value| + $game_switches[RANDOM_HELD_ITEMS] = value == 0 + }, "Give random held items to all trainers" + ) + ] + return options + end end \ No newline at end of file diff --git a/Data/Scripts/025-Randomizer/RandomizerUtils.rb b/Data/Scripts/025-Randomizer/RandomizerUtils.rb index a696e0b4c..4cf5022a4 100644 --- a/Data/Scripts/025-Randomizer/RandomizerUtils.rb +++ b/Data/Scripts/025-Randomizer/RandomizerUtils.rb @@ -20,11 +20,40 @@ HELD_ITEMS = [:AIRBALLOON, :BRIGHTPOWDER, :EVIOLITE, :FLOATSTONE, :DESTINYKNOT, :PETAYABERRY, :APICOTBERRY, :LANSATBERRY, :STARFBERRY, :ENIGMABERRY, :MICLEBERRY, :CUSTAPBERRY, :JABOCABERRY, :ROWAPBERRY, :FAIRYGEM] -ITEM_EXCEPTIONS= [:COVERFOSSIL, :PLUMEFOSSIL, :ACCURACYUP,:DAMAGEUP,:ANCIENTSTONE,:ODDKEYSTONE_FULL,:TM00 ] +INVALID_ITEMS = [:COVERFOSSIL, :PLUMEFOSSIL, :ACCURACYUP, :DAMAGEUP, :ANCIENTSTONE, :ODDKEYSTONE_FULL, :TM00] +RANDOM_ITEM_EXCEPTIONS = [:DNASPLICERS, :POKEBALL] -def pbGetRandomItem(item_id) - return nil if item_id == nil - item = GameData::Item.get(item_id) +def getRandomGivenTM(item) + return item if item == nil + if $game_switches[SWITCH_RANDOM_ITEMS_MAPPED] + newItem = $PokemonGlobal.randomTMsHash[item.id] + return GameData::Item.get(newItem) if newItem != nil + end + if $game_switches[SWITCH_RANDOM_ITEMS_DYNAMIC] + return pbGetRandomTM + end + return item +end + +def getMappedRandomItem(item) + if (item.is_TM?) + return item if !$game_switches[SWITCH_RANDOM_TMS] + if $game_switches[SWITCH_RANDOM_TMS] + newItem = $PokemonGlobal.randomTMsHash[item.id] + return GameData::Item.get(newItem) if newItem != nil + end + return item + else + return item if !$game_switches[SWITCH_RANDOM_ITEMS] + if $game_switches[SWITCH_RANDOM_ITEMS] + newItem = $PokemonGlobal.randomItemsHash[item.id] + return GameData::Item.get(newItem) if newItem != nil + return item + end + end +end + +def getDynamicRandomItem(item) #keyItem ou HM -> on randomize pas return item if item.is_key_item? return item if item.is_HM? @@ -35,7 +64,8 @@ def pbGetRandomItem(item_id) return $game_switches[SWITCH_RANDOM_TMS] ? pbGetRandomTM() : item end #item normal - return item if !$game_switches[SWITCH_RANDOM_ITEMS] + return item if !$game_switches[SWITCH_RANDOM_ITEMS_DYNAMIC] || !$game_switches[SWITCH_RANDOM_ITEMS] + #berries return pbGetRandomBerry() if item.is_berry? @@ -43,13 +73,25 @@ def pbGetRandomItem(item_id) items_list = GameData::Item.list_all newItem_id = items_list.keys.sample newItem = GameData::Item.get(newItem_id) - while (newItem.is_machine? || newItem.is_key_item? || ITEM_EXCEPTIONS.include?(newItem)) + while (newItem.is_machine? || newItem.is_key_item? || INVALID_ITEMS.include?(newItem)) newItem_id = items_list.keys.sample newItem = GameData::Item.get(newItem_id) end return newItem end +def pbGetRandomItem(item_id) + return nil if item_id == nil + item = GameData::Item.get(item_id) + return item if !($game_switches[SWITCH_RANDOM_ITEMS] || $game_switches[SWITCH_RANDOM_TMS]) + if $game_switches[SWITCH_RANDOM_ITEMS_MAPPED] + return getMappedRandomItem(item) + elsif $game_switches[SWITCH_RANDOM_ITEMS_DYNAMIC] + return getDynamicRandomItem(item) + end + return item +end + def pbGetRandomHeldItem() newItem_id = HELD_ITEMS.sample newItem = GameData::Item.get(newItem_id) diff --git a/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb b/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb index 144b7ab55..74969c220 100644 --- a/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb +++ b/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb @@ -27,14 +27,11 @@ ############################################################### # - - #GYM_TYPES_ARRAY = [0,5,11,13,12,3,14,10,4,1,0,6,2,16,7,15,1,8,15,1,7,16,18,17,7,16] -GYM_TYPES_CLASSIC = [:NORMAL,:ROCK,:WATER,:ELECTRIC,:GRASS,:POISON,:PSYCHIC,:FIRE,:GROUND,:FIGHTING,:NORMAL,:BUG,:FLYING,:DRAGON,:GHOST,:ICE,:FIGHTING,:STEEL,:ICE,:FIGHTING,:GHOST,:DRAGON,:FAIRY,:DARK,:GHOST,:DRAGON] -GYM_TYPES_MODERN = [:NORMAL,:STEEL,:ICE,:FIGHTING,:BUG,:DARK,:FAIRY,:PSYCHIC,:NORMAL,:FIGHTING,:FAIRY,:GRASS,:BUG,:DRAGON,:FIRE,:GHOST,:GROUND,:ELECTRIC,:WATER,:ROCK,:POISON,:FLYING,:FAIRY,:DARK,:GHOST,:DRAGON] +GYM_TYPES_CLASSIC = [:NORMAL, :ROCK, :WATER, :ELECTRIC, :GRASS, :POISON, :PSYCHIC, :FIRE, :GROUND, :FIGHTING, :NORMAL, :BUG, :FLYING, :DRAGON, :GHOST, :ICE, :FIGHTING, :STEEL, :ICE, :FIGHTING, :GHOST, :DRAGON, :FAIRY, :DARK, :GHOST, :DRAGON] +GYM_TYPES_MODERN = [:NORMAL, :STEEL, :ICE, :FIGHTING, :BUG, :DARK, :FAIRY, :PSYCHIC, :NORMAL, :FIGHTING, :FAIRY, :GRASS, :BUG, :DRAGON, :FIRE, :GHOST, :GROUND, :ELECTRIC, :WATER, :ROCK, :POISON, :FLYING, :FAIRY, :DARK, :GHOST, :DRAGON] GYM_TYPES_ARRAY = ($game_switches && $game_switches[SWITCH_MODERN_MODE]) ? GYM_TYPES_MODERN : GYM_TYPES_CLASSIC - #$randomTrainersArray = [] #[fighting dojo est 9eme (1), 0 au debut pour pasavoir a faire -1] @@ -44,71 +41,72 @@ def Kernel.initRandomTypeArray() $game_variables[VAR_GYM_TYPES_ARRAY] = $game_switches[SWITCH_RANDOMIZED_GYM_TYPES] ? typesArray : GYM_TYPES_ARRAY end - def setRivalStarter(starter1, starter2, starter3, choice) - starters=[starter1,starter2,starter3] + starters = [starter1, starter2, starter3] starters.delete_at(choice) if starters[0] > NB_POKEMON || starters[1] > NB_POKEMON rivalStarter = starters[0] else - rivalStarter = starters[0]*NB_POKEMON+starters[1] + rivalStarter = starters[0] * NB_POKEMON + starters[1] end - pbSet(VAR_RIVAL_STARTER,rivalStarter) + pbSet(VAR_RIVAL_STARTER, rivalStarter) $game_switches[SWITCH_DEFINED_RIVAL_STARTER] = true end def setRivalStarterSpecific(rivalStarter) - pbSet(VAR_RIVAL_STARTER,rivalStarter) + pbSet(VAR_RIVAL_STARTER, rivalStarter) $game_switches[SWITCH_DEFINED_RIVAL_STARTER] = true end - class PokeBattle_Battle -CONST_BST_RANGE = 25 #unused. $game_variables[197] a la place -def randomize_opponent_party(party) + CONST_BST_RANGE = 25 #unused. $game_variables[197] a la place + def randomize_opponent_party(party) for pokemon in party - next if !pokemon - newspecies = rand(PBSpecies.maxValue - 1) + 1 - while !gymLeaderOk(newspecies) || bstOk(newspecies,pokemon.species,$game_variables[VAR_RANDOMIZER_WILD_POKE_BST]) - newspecies = rand(PBSpecies.maxValue - 1) + 1 - end - pokemon.species = newspecies - pokemon.name = PBSpecies.getName(newspecies) - pokemon.resetMoves - pokemon.calcStats - end - - return party -end - -def randomizedRivalFirstBattle(party) - return party if $game_switches[953] #full random - starter1 = $PokemonGlobal.psuedoBSTHash[1] - starter2 = $PokemonGlobal.psuedoBSTHash[4] - starter3 = $PokemonGlobal.psuedoBSTHash[7] - playerChoice = $game_variables[7] - - for m in party - next if !m - case playerChoice - when 0 then newspecies = starter2*NB_POKEMON+starter3 - when 1 then newspecies = starter1*NB_POKEMON+starter3 - when 2 then newspecies = starter1*NB_POKEMON+starter2 - else + next if !pokemon + newspecies = rand(PBSpecies.maxValue - 1) + 1 + while !gymLeaderOk(newspecies) || bstOk(newspecies, pokemon.species, $game_variables[VAR_RANDOMIZER_WILD_POKE_BST]) + newspecies = rand(PBSpecies.maxValue - 1) + 1 + end + pokemon.species = newspecies + pokemon.name = PBSpecies.getName(newspecies) + pokemon.resetMoves + pokemon.calcStats end - m.species= newspecies - m.name = PBSpecies.getName(newspecies) - m.resetMoves - m.calcStats + + return party + end + + def randomizedRivalFirstBattle(party) + return party if $game_switches[953] #full random + starter1 = $PokemonGlobal.psuedoBSTHash[1] + starter2 = $PokemonGlobal.psuedoBSTHash[4] + starter3 = $PokemonGlobal.psuedoBSTHash[7] + playerChoice = $game_variables[7] + + for m in party + next if !m + case playerChoice + when 0 then + newspecies = starter2 * NB_POKEMON + starter3 + when 1 then + newspecies = starter1 * NB_POKEMON + starter3 + when 2 then + newspecies = starter1 * NB_POKEMON + starter2 + else + end + m.species = newspecies + m.name = PBSpecies.getName(newspecies) + m.resetMoves + m.calcStats + end + return party end - return party -end end + ####### # end of class ###### - ####methodes utilitaires # def getBaseStats(species) @@ -121,20 +119,20 @@ end # return basestatsum # end # - -def bstOk(newspecies,oldPokemonSpecies,bst_range=50) - newBST = calcBaseStatsSum(newspecies) - originalBST = calcBaseStatsSum(oldPokemonSpecies) - return newBST < originalBST-bst_range || newBST > originalBST+bst_range + +def bstOk(newspecies, oldPokemonSpecies, bst_range = 50) + newBST = calcBaseStatsSum(newspecies) + originalBST = calcBaseStatsSum(oldPokemonSpecies) + return newBST < originalBST - bst_range || newBST > originalBST + bst_range end def gymLeaderOk(newspecies) return true if $game_variables[152] == -1 #not in a gym - leaderType=getLeaderType() + leaderType = getLeaderType() if leaderType == nil return true else - return true if SpeciesHasType?(leaderType,newspecies) + return true if SpeciesHasType?(leaderType, newspecies) end return false end @@ -150,41 +148,34 @@ def getLeaderType() return typeIndex end - - - ##Version alternatives de fonctions pour fonctionner avec numero de species -def SpeciesHasType?(type,species) - if type.is_a?(String) || type.is_a?(Symbol) - return isConst?(getSpeciesType1(species),PBTypes,type) || isConst?(getSpeciesType2(species),PBTypes,type) - else - return getSpeciesType1(species)==type || getSpeciesType2(species)==type - end +def SpeciesHasType?(type, species) + if type.is_a?(String) || type.is_a?(Symbol) + return isConst?(getSpeciesType1(species), PBTypes, type) || isConst?(getSpeciesType2(species), PBTypes, type) + else + return getSpeciesType1(species) == type || getSpeciesType2(species) == type + end end # Returns this Pokémon's first type. - def getSpeciesType1(species) - return $pkmn_dex[species][3] - end +def getSpeciesType1(species) + return $pkmn_dex[species][3] +end # Returns this Pokémon's second type. - def getSpeciesType2(species) - return $pkmn_dex[species][4] - end - - - - ############ - +def getSpeciesType2(species) + return $pkmn_dex[species][4] +end +############ #summarize random options def Kernel.sumRandomOptions() answer = $game_switches[954] ? "On" : "Off" stringOptions = "\nStarters: " << answer - + answer = $game_switches[778] ? "On" : "Off" - stringOptions << "\nWild Pokémon: " << answer << " " + stringOptions << "\nWild Pokémon: " << answer << " " if $game_switches[777] stringOptions << "(Area)" else @@ -192,142 +183,130 @@ def Kernel.sumRandomOptions() end answer = $game_switches[987] ? "On" : "Off" - stringOptions << "\nTrainers: " << answer + stringOptions << "\nTrainers: " << answer - answer = $game_switches[955] ? "On" : "Off" - stringOptions << "\nStatic encounters: " << answer + answer = $game_switches[955] ? "On" : "Off" + stringOptions << "\nStatic encounters: " << answer + + answer = $game_switches[780] ? "On" : "Off" + stringOptions << "\nGift Pokémon: " << answer - answer = $game_switches[780] ? "On" : "Off" - stringOptions << "\nGift Pokémon: " << answer - answer = $game_switches[958] ? "On" : "Off" - stringOptions << "\nItems: " << answer + stringOptions << "\nItems: " << answer answer = $game_switches[959] ? "On" : "Off" - stringOptions << "\nTMs: " << answer - - + stringOptions << "\nTMs: " << answer + return stringOptions end - def countVisitedMaps count = 0 for i in 0..$PokemonGlobal.visitedMaps.length - count +=1 if $PokemonGlobal.visitedMaps[i] - end + count += 1 if $PokemonGlobal.visitedMaps[i] + end return count end def Kernel.sumGameStats() stringStats = "" - - - stringStats << "Seen " << $Trainer.pokedexSeen.to_s << " Pokémon" - stringStats << "\nCaught " << $Trainer.pokedexOwned.to_s << " Pokémon" + stringStats << "Seen " << $Trainer.pokedexSeen.to_s << " Pokémon" + stringStats << "\nCaught " << $Trainer.pokedexOwned.to_s << " Pokémon" - stringStats << "\nBeaten the Elite Four " << $game_variables[174].to_s << " times" - stringStats << "\nFused " << $game_variables[126].to_s << " Pokémon" - + stringStats << "\nFused " << $game_variables[126].to_s << " Pokémon" - stringStats << "\nRematched " << $game_variables[162].to_s << " Gym Leaders" - stringStats << "\nTook " << $PokemonGlobal.stepcount.to_s << " steps" - stringStats << "\nVisited " << countVisitedMaps.to_s << " different areas" + stringStats << "\nRematched " << $game_variables[162].to_s << " Gym Leaders" + stringStats << "\nTook " << $PokemonGlobal.stepcount.to_s << " steps" + stringStats << "\nVisited " << countVisitedMaps.to_s << " different areas" if $game_switches[910] - stringStats << "\nMade " << $game_variables[164].to_s << " Wonder Trades" + stringStats << "\nMade " << $game_variables[164].to_s << " Wonder Trades" end - - stringStats << "\nTipped $" << $game_variables[100].to_s << " to clowns" - stringStats << "\nDestroyed " << $game_variables[163].to_s << " sandcastles" - if $game_variables[43] > 0 || $game_variables[44] >0 - stringStats << "\nWon $" << $game_variables[43].to_s << " against gamblers" - stringStats << "\nLost $" << $game_variables[44].to_s << " against gamblers" + stringStats << "\nTipped $" << $game_variables[100].to_s << " to clowns" + stringStats << "\nDestroyed " << $game_variables[163].to_s << " sandcastles" + + if $game_variables[43] > 0 || $game_variables[44] > 0 + stringStats << "\nWon $" << $game_variables[43].to_s << " against gamblers" + stringStats << "\nLost $" << $game_variables[44].to_s << " against gamblers" end - stringStats << "\nSpent $" << $game_variables[225].to_s << " at hotels" + stringStats << "\nSpent $" << $game_variables[225].to_s << " at hotels" + + stringStats << "\nAccepted " << $game_variables[96].to_s << " quests" + stringStats << "\nCompleted " << $game_variables[98].to_s << " quests" + stringStats << "\nDiscovered " << $game_variables[193].to_s << " secrets" - - - stringStats << "\nAccepted " << $game_variables[96].to_s << " quests" - stringStats << "\nCompleted " << $game_variables[98].to_s << " quests" - stringStats << "\nDiscovered " << $game_variables[193].to_s << " secrets" - if $game_switches[912] - stringStats << "\nDied " << $game_variables[191].to_s << " times in Pikachu's adventure" - if $game_variables[193] >= 1 - stringStats << "\nCollected " << $game_variables[194].to_s << " coins with Pikachu" + stringStats << "\nDied " << $game_variables[191].to_s << " times in Pikachu's adventure" + if $game_variables[193] >= 1 + stringStats << "\nCollected " << $game_variables[194].to_s << " coins with Pikachu" end end return stringStats end - def Kernel.pbRandomizeTM() tmList = [] for item in $itemData #machine=$ItemData[item][ITEMMACHINE] #movename=PBMoves.getName(machine) #Kernel.pbMessage(_INTL("It contained {1}.\1",item)) - + tmList << item if pbIsHiddenMachine?(item) end end -def getNewSpecies(oldSpecies,bst_range=50, ignoreRivalPlaceholder = false, maxDexNumber = PBSpecies.maxValue ) +def getNewSpecies(oldSpecies, bst_range = 50, ignoreRivalPlaceholder = false, maxDexNumber = PBSpecies.maxValue) oldSpecies_dex = dexNum(oldSpecies) return oldSpecies_dex if (oldSpecies_dex == Settings::RIVAL_STARTER_PLACEHOLDER_SPECIES && !ignoreRivalPlaceholder) return oldSpecies_dex if oldSpecies_dex >= Settings::ZAPMOLCUNO_NB newspecies_dex = rand(maxDexNumber - 1) + 1 - i=0 - while bstOk(newspecies_dex,oldSpecies_dex,bst_range) + i = 0 + while bstOk(newspecies_dex, oldSpecies_dex, bst_range) newspecies_dex = rand(maxDexNumber - 1) + 1 - i+=1 - if i%10 == 0 + i += 1 + if i % 10 == 0 bst_range += 5 end end return newspecies_dex end - -def getNewCustomSpecies(oldSpecies,customSpeciesList,bst_range=50, ignoreRivalPlaceholder = false) +def getNewCustomSpecies(oldSpecies, customSpeciesList, bst_range = 50, ignoreRivalPlaceholder = false) oldSpecies_dex = dexNum(oldSpecies) return oldSpecies_dex if (oldSpecies_dex == Settings::RIVAL_STARTER_PLACEHOLDER_SPECIES && !ignoreRivalPlaceholder) return oldSpecies_dex if oldSpecies_dex >= Settings::ZAPMOLCUNO_NB i = rand(customSpeciesList.length - 1) + 1 - n=0 + n = 0 newspecies_dex = customSpeciesList[i] - while bstOk(newspecies_dex,oldSpecies_dex,bst_range) - i = rand(customSpeciesList.length - 1)#+1 + while bstOk(newspecies_dex, oldSpecies_dex, bst_range) + i = rand(customSpeciesList.length - 1) #+1 newspecies_dex = customSpeciesList[i] - n+=1 + n += 1 if n % 10 == 0 - bst_range+=5 + bst_range += 5 end end return newspecies_dex end - def playShuffleSE(i) if i % 40 == 0 || i == 0 - pbSEPlay("Charm",60) + pbSEPlay("Charm", 60) end end def getTrainersDataMode - mode = GameData::Trainer - if $game_switches && $game_switches[SWITCH_MODERN_MODE] - mode = GameData::TrainerModern - end - return mode + mode = GameData::Trainer + if $game_switches && $game_switches[SWITCH_MODERN_MODE] + mode = GameData::TrainerModern + end + return mode end - -def Kernel.pbShuffleTrainers(bst_range = 50,customsOnly=false,customsList=nil) +def Kernel.pbShuffleTrainers(bst_range = 50, customsOnly = false, customsList = nil) bst_range = pbGet(VAR_RANDOMIZER_TRAINER_BST) if customsOnly && customsList == nil @@ -337,19 +316,19 @@ def Kernel.pbShuffleTrainers(bst_range = 50,customsOnly=false,customsList=nil) trainers_data = GameData::Trainer.list_all trainers_data.each do |key, value| trainer = trainers_data[key] - i=0 + i = 0 new_party = [] for poke in trainer.pokemon old_poke = GameData::Species.get(poke[:species]).id_number - new_poke = customsOnly ? getNewCustomSpecies(old_poke,customsList,bst_range) : getNewSpecies(old_poke,bst_range) + new_poke = customsOnly ? getNewCustomSpecies(old_poke, customsList, bst_range) : getNewSpecies(old_poke, bst_range) new_party << new_poke end randomTrainersHash[trainer.id] = new_party playShuffleSE(i) i += 1 if i % 2 == 0 - n = (i.to_f/trainers.length)*100 - Kernel.pbMessageNoSound(_INTL("\\ts[]Shuffling trainers...\\n {1}%\\^",sprintf('%.2f', n),PBSpecies.maxValue)) + n = (i.to_f / trainers.length) * 100 + Kernel.pbMessageNoSound(_INTL("\\ts[]Shuffling trainers...\\n {1}%\\^", sprintf('%.2f', n), PBSpecies.maxValue)) end end $PokemonGlobal.randomTrainersHash = randomTrainersHash @@ -382,21 +361,21 @@ def Kernel.pbShuffleTrainersCustom(bst_range = 50) Kernel.pbMessage(_INTL("Parsing custom sprites folder")) customsList = getCustomSpeciesList() - Kernel.pbMessage(_INTL("{1} Pokémon found",customsList.length.to_s)) + Kernel.pbMessage(_INTL("{1} sprites found", customsList.length.to_s)) - if customsList.length == 0 - Kernel.pbMessage(_INTL("To use custom sprites, please place correctly named sprites in the /CustomBattlers folder. See readMe.txt for more information")) + if customsList.length == 0 + Kernel.pbMessage(_INTL("To use custom sprites, please place correctly named sprites in the /CustomBattlers folder. See readMe.txt for more information")) + Kernel.pbMessage(_INTL("Trainer Pokémon will include auto-generated sprites.")) + return Kernel.pbShuffleTrainers(bst_range) + elsif customsList.length < 200 + if Kernel.pbConfirmMessage(_INTL("Too few custom sprites were found. This will result in a very low Pokémon variety for trainers. Continue anyway?")) + bst_range = 999 + else Kernel.pbMessage(_INTL("Trainer Pokémon will include auto-generated sprites.")) - return Kernel.pbShuffleTrainers(bst_range) - elsif customsList.length < 200 - if Kernel.pbConfirmMessage(_INTL("Too few custom sprites were found. This will result in a very low Pokémon variety for trainers. Continue anyway?")) - bst_range=999 - else - Kernel.pbMessage(_INTL("Trainer Pokémon will include auto-generated sprites.")) - return Kernel.pbShuffleTrainers(bst_range) ##use regular shuffle if not enough sprites - end + return Kernel.pbShuffleTrainers(bst_range) ##use regular shuffle if not enough sprites + end end - Kernel.pbShuffleTrainers(bst_range,true ,customsList) + Kernel.pbShuffleTrainers(bst_range, true, customsList) end @@ -417,8 +396,6 @@ end # end # $PokemonGlobal.randomTrainersHash = randomTrainersHash - - #def getRandomCustomSprite() # filesList = Dir["./Graphics/CustomBattlers/*"] # i = rand(filesList.length-1) @@ -430,44 +407,41 @@ end # return (body*NB_POKEMON)+head #end - def getCustomSpeciesList() filesList = Dir["./Graphics/CustomBattlers/*"] speciesList = [] maxDexNumber = (NB_POKEMON * NB_POKEMON) + NB_POKEMON - maxVal = filesList.length-1 + maxVal = filesList.length - 1 for i in 0..maxVal path = filesList[i] - file = File.basename(path, ".*") - splitPoke = file.split(".") + file = File.basename(path, ".*") + splitPoke = file.split(".") head = splitPoke[0].to_i body = splitPoke[1].to_i - fused = (body*NB_POKEMON)+head + fused = (body * NB_POKEMON) + head if fused <= maxDexNumber && fused > 0 - speciesList << fused + speciesList << fused end - + end - + return speciesList end - def Kernel.getBaseStats(species) - if $pkmn_dex[species] == nil - print species - end - - basestatsum = $pkmn_dex[species][5][0] # HP - basestatsum +=$pkmn_dex[species][5][1] # Attack - basestatsum +=$pkmn_dex[species][5][2] # Defense - basestatsum +=$pkmn_dex[species][5][3] # Speed - basestatsum +=$pkmn_dex[species][5][4] # Special Attack - basestatsum +=$pkmn_dex[species][5][5] # Special Defense - return basestatsum + if $pkmn_dex[species] == nil + print species end - - + + basestatsum = $pkmn_dex[species][5][0] # HP + basestatsum += $pkmn_dex[species][5][1] # Attack + basestatsum += $pkmn_dex[species][5][2] # Defense + basestatsum += $pkmn_dex[species][5][3] # Speed + basestatsum += $pkmn_dex[species][5][4] # Special Attack + basestatsum += $pkmn_dex[species][5][5] # Special Defense + return basestatsum +end + def Kernel.gymLeaderRematchHint() hints = [ "I heard that Brock has a huge interest in Pokémon fossils. He donated a lot of fossils he excavated to the Pewter City Museum.", @@ -488,73 +462,71 @@ def Kernel.gymLeaderRematchHint() "Jasmine is on vacation in the Sevii Islands. She likes to rise up early to explore around the islands when no one's around." ] arr = [] - n=0 + n = 0 for i in 426..437 if !$game_switches[i] arr.push(n) end - n+=1 + n += 1 end - arr.push(508); arr.push(509); arr.push(510); arr.push(511); - n+=4 + arr.push(508); arr.push(509); arr.push(510); arr.push(511); + n += 4 if arr.length > 0 return hints[arr[rand(arr.length)]] end return "You got every Gym Leader to come here. This place is more popular than ever!\nNow go and battle them!" -end - +end + def getTrainerParty(trainer) if $game_switches[47] for poke in trainer[3] - inverseFusion(poke) + inverseFusion(poke) end end return trainer[3] -end +end def inverseFusion(pokemon) - species=pokemon[TPSPECIES] + species = pokemon[TPSPECIES] return pokemon if species <= CONST_NB_POKE return pokemon if species > (CONST_NB_POKE * CONST_NB_POKE) + CONST_NB_POKE - body = getBasePokemonID(species,true) - head = getBasePokemonID(species,false) - newspecies = (head)*CONST_NB_POKE+body + body = getBasePokemonID(species, true) + head = getBasePokemonID(species, false) + newspecies = (head) * CONST_NB_POKE + body pokemon[TPSPECIES] = newspecies return pokemon end - def addRandomHeldItems(trainerParty) - for poke in trainerParty + for poke in trainerParty if poke.item == nil - poke.item = PBItems::ORANBERRY#PBItems.sample + poke.item = PBItems::ORANBERRY #PBItems.sample end end end - def addHealingItem(items) if $Trainer.numbadges < 1 items << PBItems::ORANBERRY - elsif $Trainer.numbadges <=2 - items << PBItems::POTION - elsif $Trainer.numbadges <=4 - items << PBItems::SUPERPOTION - elsif $Trainer.numbadges <=6 - items << PBItems::FULLHEAL - items << PBItems::SUPERPOTION + elsif $Trainer.numbadges <= 2 + items << PBItems::POTION + elsif $Trainer.numbadges <= 4 + items << PBItems::SUPERPOTION + elsif $Trainer.numbadges <= 6 + items << PBItems::FULLHEAL + items << PBItems::SUPERPOTION elsif $Trainer.numbadges <= 8 - items << PBItems::FULLHEAL - items << PBItems::HYPERPOTION + items << PBItems::FULLHEAL + items << PBItems::HYPERPOTION elsif $Trainer.numbadges >= 9 - items << PBItems::FULLRESTORE + items << PBItems::FULLRESTORE end - + return items end - #####Overload de pbLoadTrainer +#####Overload de pbLoadTrainer # # def pbLoadTrainer(trainerid,trainername,partyid=0) # if trainerid.is_a?(String) || trainerid.is_a?(Symbol) @@ -664,65 +636,64 @@ end # end def getRematchId(trainername, trainerid) - return trainername + trainerid.to_s + return trainername + trainerid.to_s end - def replaceRivalStarterIfNecessary(species) - if species == RIVAL_STARTER_PLACEHOLDER_SPECIES - if !$game_switches[840] || pbGet(250) == 0#not DEFINED_RIVAL_STARTER - fixRivalStarter() - end - rivalStarter = pbGet(250) - if rivalStarter > 0 - species = pbGet(250) - end + if species == RIVAL_STARTER_PLACEHOLDER_SPECIES + if !$game_switches[840] || pbGet(250) == 0 #not DEFINED_RIVAL_STARTER + fixRivalStarter() end - return species + rivalStarter = pbGet(250) + if rivalStarter > 0 + species = pbGet(250) + end + end + return species end - + def fixRivalStarter() #set starter baseform if $PokemonGlobal.psuedoBSTHash == nil psuedoHash = Hash.new for i in 0..NB_POKEMON - psuedoHash[i] = i + psuedoHash[i] = i end $PokemonGlobal.psuedoBSTHash = psuedoHash end starterChoice = pbGet(7) - + s1 = $PokemonGlobal.psuedoBSTHash[1] s2 = $PokemonGlobal.psuedoBSTHash[4] - s3= $PokemonGlobal.psuedoBSTHash[7] - setRivalStarter(s3,s2,s1,starterChoice) - + s3 = $PokemonGlobal.psuedoBSTHash[7] + setRivalStarter(s3, s2, s1, starterChoice) + #evolve en fct des badges rivalStarter = pbGet(250) if $game_switches[68] #beat blue cerulean rivalStarter = evolveBody(rivalStarter) end - + if $game_switches[89] #beat blue SS Anne rivalStarter = evolveHead(rivalStarter) end - + if $game_switches[228] #beat silph co rivalStarter = evolveBody(rivalStarter) end - + if $game_switches[11] #got badge 8 rivalStarter = evolveHead(rivalStarter) end - + if $game_switches[12] #beat league rivalStarter = evolveBody(rivalStarter) rivalStarter = evolveHead(rivalStarter) end - + #RIVAL_STARTER_IS_DEFINED - pbSet(250,rivalStarter) + pbSet(250, rivalStarter) $game_switches[840] = true end \ No newline at end of file diff --git a/Data/Scripts/025-Randomizer/randomizer.rb b/Data/Scripts/025-Randomizer/randomizer.rb index 457220794..f4cb02e8a 100644 --- a/Data/Scripts/025-Randomizer/randomizer.rb +++ b/Data/Scripts/025-Randomizer/randomizer.rb @@ -3,6 +3,9 @@ class PokemonGlobalMetadata attr_accessor :psuedoBSTHash attr_accessor :randomTrainersHash attr_accessor :randomGymTrainersHash + attr_accessor :randomItemsHash + attr_accessor :randomTMsHash + alias random_init initialize @@ -11,6 +14,9 @@ class PokemonGlobalMetadata @randomGymTrainersHash = nil @psuedoHash = nil @psuedoBSTHash = nil + @randomItemsHash = nil + @randomTMsHash = nil + end end @@ -82,7 +88,60 @@ def Kernel.pbShuffleDex(range = 50, type = 0) $PokemonGlobal.psuedoBSTHash = get_randomized_bst_hash(pokemon_list,range,should_include_fusions) end +def itemCanBeRandomized(item) + return false if item.is_machine? + return false if item.is_key_item? + return false if INVALID_ITEMS.include?(item.id) + #return false if RANDOM_ITEM_EXCEPTIONS.include?(item.id) + return true +end +def pbShuffleItems() + $game_switches[SWITCH_RANDOMIZED_AT_LEAST_ONCE] = true + randomItemsHash = Hash.new + available_items = [] + for itemElement in GameData::Item.list_all + item=itemElement[1] + if itemCanBeRandomized(item) + if !available_items.include?(item.id) + available_items << item.id + end + end + end + remaining_items = available_items.clone + for itemId in available_items + if itemCanBeRandomized(GameData::Item.get(itemId)) + chosenItem = remaining_items.sample + randomItemsHash[itemId] = chosenItem + remaining_items.delete(chosenItem) + end + end + $PokemonGlobal.randomItemsHash = randomItemsHash +end + + +def pbShuffleTMs() + $game_switches[SWITCH_RANDOMIZED_AT_LEAST_ONCE] = true + randomItemsHash = Hash.new + available_items = [] + for itemElement in GameData::Item.list_all + item=itemElement[1] + if item.is_TM? + if !available_items.include?(item.id) + available_items << item.id + end + end + end + remaining_items = available_items.clone + for itemId in available_items + if GameData::Item.get(itemId).is_TM? + chosenItem = remaining_items.sample + randomItemsHash[itemId] = chosenItem + remaining_items.delete(chosenItem) + end + end + $PokemonGlobal.randomTMsHash = randomItemsHash +end # diff --git a/Data/Scripts/049_Compatibility/Constants.rb b/Data/Scripts/049_Compatibility/Constants.rb index 8b90708f9..43c9de040 100644 --- a/Data/Scripts/049_Compatibility/Constants.rb +++ b/Data/Scripts/049_Compatibility/Constants.rb @@ -50,8 +50,20 @@ SWITCH_RANDOM_WILD_AREA = 777 SWITCH_RANDOM_TRAINERS = 987 SWITCH_RANDOM_STARTERS = 954 -SWITCH_RANDOM_ITEMS = 958 -SWITCH_RANDOM_TMS = 959 + +SWITCH_RANDOM_ITEMS_GENERAL=759 +SWITCH_RANDOM_ITEMS=751 +SWITCH_RANDOM_FOUND_ITEMS=755 +SWITCH_RANDOM_ITEMS_DYNAMIC = 958 +SWITCH_RANDOM_ITEMS_MAPPED = 752 + +SWITCH_RANDOM_TMS = 758 +SWITCH_RANDOM_GIVEN_ITEMS = 756 +SWITCH_RANDOM_GIVEN_TMS = 757 +SWITCH_RANDOM_SHOP_ITEMS = 754 + + +SWITCH_RANDOM_FOUND_TMS = 959 SWITCH_WILD_RANDOM_GLOBAL=956 SWITCH_RANDOM_STATIC_ENCOUNTERS=955 SWITCH_RANDOM_WILD_ONLY_CUSTOMS=664 diff --git a/Data/System.rxdata b/Data/System.rxdata index 8a75d3f42dcb5bbc7a48744519af9c66e25788dd..301af14675b204b9774e2d4f0832e6ead84310ff 100644 GIT binary patch delta 558 zcmY+BPixdb6u>vTP(iQ~YTLASyTj{2DEI|zFQJ*O!Ted1?8+{(AtpncHkk>Tw2LP% z3SK2%MLcFTM{`u5|Gc&6O! zJ%rr}NfPuJ@q|q>c1{qvWXWYrPmt&yj(5uMFP@a|hrKtlqgtA6`nrcr7q)X6`Efx~ z?ia5!;+tx(hc!^boqH));eNFM z@=OlxD%M9>s}}N)v4tJg(4nz%aK~F7(5M4wlplsSyCAE5&vw-T_9rogwL0Sk$+-A9 zT5Yyr<5iFcDT~ldOUCjdNZ{Tr5Rl842THZaBQ)1xs(6#oO?1a~0(0ee8OE7E=;3@r6uV>!8%HbCBz)j)xt$ z{1lJ&VWILQubuhbzG1-TTyRBaau%%IJEJl@7{q+`NfA0CNf0qAzMgfY9q9B7b*Nj% dsO#7!vJDM8XfV4&w=MDe{I4Xfh+pZW)<4##xn}?X delta 431 zcmYjNJx{_=6itgC34@7zizqM8K|?g|YGN9x_##kk3sDllT3)nR`kKB1zrbJc;=;mT zAgPnl$;8RU*^R{2+0jxAak{zZ+76&kEOd8et*4S?W!ADbrF0n{XY zo7`c5d&KM+)(u$LUsOHeppjvtij zAnIb925RHl5+6e_ajiL8hqQq2YZJ%SOqQ!dFH?W!*h?cExh2@L0ChFT#ZI8cz8lH8 zKw`eB@M{RJ(k`_P-5^~GI+_JEUGGxd3Px-#$8(4c^z?M)Q4jM`KjV2tRMe(zSXd{) z;5#0N(g>zxp`4dWs3yulQ3Y8QWo5#%SEII#V0=dB0aC?M!1?$6gVia>3T-QaV619T z!^JIdgiWnQf`52#?JVc#&Yl&8OH?j^V_7NzshIaYtG*wS%IxDR?nTTmj#Is#&SvNr Dk0yxR