From dd05aa1f1c3783d6fc2b4e5fdf71316a3330c208 Mon Sep 17 00:00:00 2001 From: infinitefusion Date: Sat, 30 Apr 2022 23:27:05 -0400 Subject: [PATCH] =?UTF-8?q?randomizer=20-=20wild=20Pok=C3=A9mon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Data/CommonEvents.rxdata | Bin 115126 -> 115711 bytes Data/Map019.rxdata | Bin 54415 -> 54415 bytes .../007_Objects and windows/011_Messages.rb | 33 +++++++++++++--- .../010_Data/002_PBS data/013_Trainer.rb | 1 + Data/Scripts/012_Overworld/001_Overworld.rb | 23 +++++++++-- Data/Scripts/013_Items/004_1_PokeradarUI.rb | 37 ++++++++++++++++-- Data/Scripts/013_Items/005_Item_PokeRadar.rb | 4 +- .../025-Randomizer/RandomizerSettings.rb | 37 +++++++++--------- Data/Scripts/025-Randomizer/randomizer.rb | 36 +++++++++++++---- Data/Scripts/049_Compatibility/Constants.rb | 28 +++++++++---- Data/Scripts/050_AddOns/GeneralUtils.rb | 4 ++ Data/Scripts/050_AddOns/Wondertrade.rb | 2 + Data/System.rxdata | Bin 27386 -> 27403 bytes 13 files changed, 158 insertions(+), 47 deletions(-) diff --git a/Data/CommonEvents.rxdata b/Data/CommonEvents.rxdata index a5a6a83e8c1ee2f275a4c1befceb88da3e2d95d4..eb519db2bca12b861f53a0c364268d8a4e26da04 100644 GIT binary patch delta 1963 zcmZ8hdr(wW9QOOc-d$Ky*yYi>pqE7<#Yct@1WQT{XB;O@z>0EQafK_pdy`#4i~&ha zvp=Yg&Qbb9EqgfCXmf+h5I#zDN|>HgGg)Jpqm)`fU?Y21Db{kU!twC2-PLm`$H7z9!>wJYo{)|k?09n~ zo6y{jo7(Ya2Hee7Y`%gSY}wWdZFlPnKvc`!G6|^HmTkS9iXzt2?&Cv^u(9{sbL@7- zUPAMdcxxHltmM4J)If^Xxz`5VtM#<6jmI%9d*7-ol<@-!Cb2_3kF+?HQ3~xLWmIvZ zVlQ?oQMK6NC{CzMR3rtb1UW`Y5R~IKO7fLFzMyjU6D$37VI^E$BtNRw%l^86>|dkS zN9Cw0M{4TVtqTU^XiY#~rq-T3v^KC&Zcw5%vR@Wr2|{drtWQg&*u@KNXOx>LXD#BuAdC zQ=);$G^^+B^X8it$|`G=h#c}a%29uzB9IugWdz*{|V z>w_8C3mnizacB(Q;rCC1JFbKd8-s4@%^1lBzk4#~(HBNtz;^Ye@{Y;)1V0-9~-plvMs#1Ex@atkCCeL<4BZqCRdE z)UZW4H{ljx8vlNqkeWWuJV`F3iuCelA(6hl1uG?d5#zu7AK&Z14nDRG%kdl!wqXu- z@`Fb8ynek6QXaPGH#^Y`Y}K2(a0EEXr*@0L^!mgjb}vtU4~hEWZuA3J^rjw^g09}i mBpt&<(1e`W(Uu;^YMN*jM~x!aDhf`BA}{A(N&ejloc#v@qKSGm*F{)Z6fnA=SZu+Emu;3$AX$gt;-U~6YpY^Ro2EV>sI5p9ldAPiXZKrS{que2%$b>c=gi#O zU#mO0P1jtp5-F^5Wf^yG#c)NR|5X5D*wI28VwKLqv{87$u2fi9O2t0BRIXGo;60XK z)r%ySSF=btTD==o8p1PIql4*cmY__@tGREYw4wZm7R0icpa2coRHD;4by<`?l)E-# zq;kB`0#@2MmRC7oJh6Xr09usyzgZED>Ab!O3G7tM622}UwaV4j3tH?__WhKv#VGdX z*G7zIeV4~G_oW8dC68pqmn$*%+rG;qutj-v(?xW`!1`uP;3bI&QFs>vT{rlpbHl(E zcIVRH2EIH8X5LYRVRX;Hu63tTkAV%lU8sF-u!lHx>`-GE`|`F6!3=kb5W^9d#nxIzi84G7(5G4SYczMzZeS$JAzIpVh=_ zbxv&-wX^pIIF5#Be@*%J~V_xzdfPDeH_dVXPi)f8Ce)dpqJFWv!>V8=#4!w+R36#@K@49urM zv&R;buxBF1h)ljL2dUbrkuqZ~JN#w>JDaW-*K+VgOKp*!N;C0Wi!hVgeI$J`ZcwL> ztXl#dU+jXOmpGtTi?wS|WAwyF!W~GYrz#N+2WD$1CF<=#g5^P`M9Bn#d37b`h=}F5 z8$^9k-so&nMW`5EfGCj8!a6EUJf~3Z6*Pc#4NlBu`t5P7>Ul69z6y-u2gF257{I!d zPS}BYB4ag1feI{Yk;(me*%~aM!hr!D`=rOn6ANS?+p*2+sWr1&G4q9EEsOx?w~Aol zbw$X=n)>UZYoy%Yo&Fir>5C?dyOWysA%}B&SFBaQ3 zV-wJ(3dV9Nw5!6xa`Y1o8Ld|Q*r1FaRgV&*ASVCbSa&wCndA2t#EBh~_6^NlUAp+Pja xz(hDB&bu)SaC6CLi`=sq2YMQ(nz#EL^5{Pw(Y8tQ%ty*4!E^5#KCT^q{ttDELihjx diff --git a/Data/Map019.rxdata b/Data/Map019.rxdata index 1e4848a8799d8de5400ab720e8c73e9833e551d6..a7676aad0396884bd6d2e5824e5f42a7610a768e 100644 GIT binary patch delta 26 icmeBQ$=tt^d4rVE NB_POKEMON + iconSprite = createFusionIcon(pokemonId,@current_x,@current_y) + else + iconSprite = IconSprite.new(@current_x, @current_y) + iconSprite.setBitmap(pokemonBitmap) + end + @sprites[iconId] = iconSprite @sprites[iconId].src_rect.width /= 2 @@ -92,6 +100,29 @@ class PokeRadar_UI end + + def createFusionIcon(pokemonId,x,y) + bodyPoke_number = getBodyID(pokemonId) + headPoke_number = getHeadID(pokemonId, bodyPoke_number) + + + bodyPoke = GameData::Species.get(bodyPoke_number).species + headPoke = GameData::Species.get(headPoke_number).species + + bitmap1 = AnimatedBitmap.new(GameData::Species.icon_filename(headPoke)) + bitmap2 = AnimatedBitmap.new(GameData::Species.icon_filename(bodyPoke)) + + for i in 0..bitmap1.width-1 + for j in ((bitmap1.height / 2) + Settings::FUSION_ICON_SPRITE_OFFSET)..bitmap1.height-1 + temp = bitmap2.bitmap.get_pixel(i, j) + bitmap1.bitmap.set_pixel(i, j, temp) + end + end + icon = IconSprite.new(x, y) + icon.setBitmapDirectly(bitmap1) + return icon + end + end diff --git a/Data/Scripts/013_Items/005_Item_PokeRadar.rb b/Data/Scripts/013_Items/005_Item_PokeRadar.rb index d6222a44f..a485fc819 100644 --- a/Data/Scripts/013_Items/005_Item_PokeRadar.rb +++ b/Data/Scripts/013_Items/005_Item_PokeRadar.rb @@ -107,13 +107,15 @@ def pbPokeRadarCancel $PokemonTemp.pokeradar = nil end + + def listPokemonInCurrentRoute(encounterType, onlySeen = false, onlyUnseen = false) return [] if encounterType == nil processed = [] seen = [] unseen = [] for encounter in $PokemonEncounters.listPossibleEncounters(encounterType) - species = encounter[1] + species = $game_switches[SWITCH_RANDOM_WILD] ? getRandomizedTo(encounter[1]) : encounter[1] if !processed.include?(species) if $Trainer.seen?(species) seen << species diff --git a/Data/Scripts/025-Randomizer/RandomizerSettings.rb b/Data/Scripts/025-Randomizer/RandomizerSettings.rb index a66ac7e48..54a5c4da3 100644 --- a/Data/Scripts/025-Randomizer/RandomizerSettings.rb +++ b/Data/Scripts/025-Randomizer/RandomizerSettings.rb @@ -4,13 +4,6 @@ module OptionTypes end class RandomizerOptionsScene < PokemonOption_Scene - RANDOM_WILD = 778 - RANDOM_TRAINERS = 987 - RANDOM_STARTERS = 954 - RANDOM_ITEMS = 958 - RANDOM_TMS = 959 - - def initialize super @openTrainerOptions = false @@ -29,45 +22,45 @@ class RandomizerOptionsScene < PokemonOption_Scene def pbGetOptions(inloadscreen = false) options = [ EnumOption.new(_INTL("Starters"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[RANDOM_STARTERS] ? 0 : 1 }, + proc { $game_switches[SWITCH_RANDOM_STARTERS] ? 0 : 1 }, proc { |value| - $game_switches[RANDOM_STARTERS] = value == 0 + $game_switches[SWITCH_RANDOM_STARTERS] = value == 0 } ), EnumOption.new(_INTL("Trainers"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[RANDOM_TRAINERS] ? 0 : 1 }, + proc { $game_switches[SWITCH_RANDOM_TRAINERS] ? 0 : 1 }, proc { |value| - if !$game_switches[RANDOM_TRAINERS] && value == 0 + if !$game_switches[SWITCH_RANDOM_TRAINERS] && value == 0 @openTrainerOptions = true openTrainerOptionsMenu() end - $game_switches[RANDOM_TRAINERS] = value == 0 + $game_switches[SWITCH_RANDOM_TRAINERS] = value == 0 } ), EnumOption.new(_INTL("Wild Pokémon"), [_INTL("On"), _INTL("Off")], proc { - $game_switches[RANDOM_WILD] ? 0 : 1 + $game_switches[SWITCH_RANDOM_WILD] ? 0 : 1 }, proc { |value| - if !$game_switches[RANDOM_WILD] && value == 0 + if !$game_switches[SWITCH_RANDOM_WILD] && value == 0 @openWildOptions = true openWildPokemonOptionsMenu() end - $game_switches[RANDOM_WILD] = value == 0 + $game_switches[SWITCH_RANDOM_WILD] = value == 0 } ), EnumOption.new(_INTL("Items"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[RANDOM_ITEMS] ? 0 : 1 }, + proc { $game_switches[SWITCH_RANDOM_ITEMS] ? 0 : 1 }, proc { |value| - $game_switches[RANDOM_ITEMS] = value == 0 + $game_switches[SWITCH_RANDOM_ITEMS] = value == 0 } ), EnumOption.new(_INTL("TMs"), [_INTL("On"), _INTL("Off")], - proc { $game_switches[RANDOM_TMS] ? 0 : 1 }, + proc { $game_switches[SWITCH_RANDOM_TMS] ? 0 : 1 }, proc { |value| - $game_switches[RANDOM_TMS] = value == 0 + $game_switches[SWITCH_RANDOM_TMS] = value == 0 } ), ] @@ -226,6 +219,12 @@ class RandomizerWildPokemonOptionsScene < PokemonOption_Scene $game_switches[REGULAR_TO_FUSIONS] = value == 0 } ), + EnumOption.new(_INTL("Custom sprites only"), [_INTL("On"), _INTL("Off")], + proc { $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] ? 0 : 1 }, + proc { |value| + $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] = value == 0 + } + ) ] return options end diff --git a/Data/Scripts/025-Randomizer/randomizer.rb b/Data/Scripts/025-Randomizer/randomizer.rb index a55dd10f1..1b05093c1 100644 --- a/Data/Scripts/025-Randomizer/randomizer.rb +++ b/Data/Scripts/025-Randomizer/randomizer.rb @@ -17,11 +17,10 @@ end # randomizer shuffle # ############## def Kernel.pbShuffleDex(range=50,type=0) - $game_switches[855] = true # Randomized at least once + $game_switches[SWITCH_RANDOMIZED_AT_LEAST_ONCE] = true #type 0: BST #type 1: full random -#type: 2 by route (not implemented) range = 1 if range == 0 # create hash psuedoHash = Hash.new @@ -55,15 +54,18 @@ def Kernel.pbShuffleDex(range=50,type=0) #BST in the same 100 range - for i in 1..NB_POKEMON-1#pas de arceus - baseStats=$pkmn_dex[i][5] + for i in 1..NB_POKEMON-1 + baseStats=getBaseStatsFormattedForRandomizer(i) baseStat_target = 0 for k in 0...baseStats.length baseStat_target+=baseStats[k] end baseStat_target = (baseStat_target/range).floor for j in 1...pokeArrayRand.length - baseStats=$pkmn_dex[pokeArrayRand[j]][5] + if $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] && $game_switches[SWITCH_RANDOM_WILD_TO_FUSION] && !customSpriteExists(pokeArrayRand[j]) + next + end + baseStats=getBaseStatsFormattedForRandomizer(pokeArrayRand[j]) baseStat_temp = 0 for l in 0...baseStats.length baseStat_temp+=baseStats[l] @@ -81,7 +83,6 @@ def Kernel.pbShuffleDex(range=50,type=0) n = (i.to_f/NB_POKEMON)*100 Kernel.pbMessageNoSound(_INTL("\\ts[]Shuffling wild Pokémon...\\n {1}%\\^",sprintf('%.2f', n),NB_POKEMON)) end - break end end @@ -111,6 +112,19 @@ def Kernel.raisePartyHappiness(increment) end +#Randomizer code is shit. Too lazy to redo it. +# Here is a cheap workaround lol +def getBaseStatsFormattedForRandomizer(dex_num) + statsArray=[] + stats = GameData::Species.get(dex_num).base_stats + statsArray << stats[:HP] + statsArray << stats[:ATTACK] + statsArray << stats[:DEFENSE] + statsArray << stats[:SPECIAL_ATTACK] + statsArray << stats[:SPECIAL_DEFENSE] + statsArray << stats[:SPEED] + return statsArray +end def Kernel.pbShuffleDexTrainers() # create hash @@ -141,14 +155,14 @@ def Kernel.pbShuffleDexTrainers() #Kernel.pbMessage(_INTL("\\ts[]Shuffling...\\n {1}%\\^",sprintf('%.2f', n),PBSpecies.maxValue)) end - baseStats=$pkmn_dex[i][I] + baseStats=calcBaseStats(i) baseStat_target = 0 for k in 0...baseStats.length baseStat_target+=baseStats[k] end baseStat_target = (baseStat_target/50).floor for j in 1...pokeArrayRand.length - baseStats=$pkmn_dex[pokeArrayRand[j]][5] + baseStats=calcBaseStats([pokeArrayRand[j]]) baseStat_temp = 0 for l in 0...baseStats.length baseStat_temp+=baseStats[l] @@ -166,4 +180,10 @@ def Kernel.pbShuffleDexTrainers() #add hashes to global data0 #$PokemonGlobal.psuedoHash = psuedoHash $PokemonGlobal.pseudoBSTHashTrainers = psuedoBSTHash +end + +def getRandomizedTo(species) + return species if !$PokemonGlobal.psuedoBSTHash + return $PokemonGlobal.psuedoBSTHash[dexNum(species)] + # code here end \ No newline at end of file diff --git a/Data/Scripts/049_Compatibility/Constants.rb b/Data/Scripts/049_Compatibility/Constants.rb index 37dabc76c..402dd978f 100644 --- a/Data/Scripts/049_Compatibility/Constants.rb +++ b/Data/Scripts/049_Compatibility/Constants.rb @@ -40,12 +40,17 @@ SWITCH_GOT_BADGE_15 = 45 SWITCH_GOT_BADGE_16 = 50 #Randomizer Switches -SWITCH_RANDOMIZED_WILD_POKEMON=953 -SWITCH_FUSED_WILD_POKEMON=35 -SWITCH_FORCE_FUSE_NEXT_POKEMON=37 -SWITCH_FORCE_ALL_WILD_FUSIONS=828 -SWITCH_USED_AN_INCENSE=798 +SWITCH_RANDOM_WILD_TO_FUSION=953 SWITCH_RANDOMIZED_AT_LEAST_ONCE = 855 +SWITCH_RANDOM_WILD = 778 +SWITCH_RANDOM_TRAINERS = 987 +SWITCH_RANDOM_STARTERS = 954 +SWITCH_RANDOM_ITEMS = 958 +SWITCH_RANDOM_TMS = 959 +SWITCH_WILD_RANDOM_GLOBAL=956 +SWITCH_RANDOM_STATIC_ENCOUNTERS=955 +SWITCH_RANDOM_WILD_ONLY_CUSTOMS=664 + #Random switches SWITCH_RACE_BIKE = 984 @@ -55,7 +60,11 @@ SWITCH_SINGLE_POKEMON_MODE_HEAD=791 SWITCH_SINGLE_POKEMON_MODE_BODY=792 SWITCH_SINGLE_POKEMON_MODE_RANDOM=793 SWITCH_FISHING_AUTOHOOK = 916 - +SWITCH_FUSED_WILD_POKEMON=35 +SWITCH_FORCE_FUSE_NEXT_POKEMON=37 +SWITCH_FORCE_ALL_WILD_FUSIONS=828 +SWITCH_USED_AN_INCENSE=798 +SWITCH_FIRST_RIVAL_BATTLE=46 ############# @@ -71,8 +80,13 @@ VAR_CUSTOM_SPRITES_ENABLED= 196 VAR_COMMAND_WINDOW_INDEX=249 VAR_STANDARD_WONDERTRADE_LEFT=248 VAR_PREMIUM_WONDERTRADE_LEFT=111 +VAR_PREMIUM_WONDERTRADE_LEFT=111 +#Randomizer +VAR_RANDOMIZER_WILD_POKE_BST=197 -#OTHERS +############# +# OTHERS # +############# DIRECTION_LEFT = 4 DIRECTION_RIGHT = 6 DIRECTION_DOWN = 2 diff --git a/Data/Scripts/050_AddOns/GeneralUtils.rb b/Data/Scripts/050_AddOns/GeneralUtils.rb index 82437bd68..569c4339e 100644 --- a/Data/Scripts/050_AddOns/GeneralUtils.rb +++ b/Data/Scripts/050_AddOns/GeneralUtils.rb @@ -118,6 +118,10 @@ def getPokemon(dexNum) return GameData::Species.get(dexNum) end +def getSpecies(dexnum) + return getPokemon(dexnum) +end + #shortcut for using in game events because of script characters limit def dexNum(species) return getDexNumberForSpecies(species) diff --git a/Data/Scripts/050_AddOns/Wondertrade.rb b/Data/Scripts/050_AddOns/Wondertrade.rb index edb215118..673023aa0 100644 --- a/Data/Scripts/050_AddOns/Wondertrade.rb +++ b/Data/Scripts/050_AddOns/Wondertrade.rb @@ -170,6 +170,8 @@ def pbGRS(minBST, chosenBST, luck, rare, except2) return species end + + def calcBaseStats(species) stats = GameData::Species.get(species).base_stats sum = 0 diff --git a/Data/System.rxdata b/Data/System.rxdata index e9857e0b29b8400725d0afc55a201ddf4c83d115..c62524468973dbdb27805ef8fe5526189251a32b 100644 GIT binary patch delta 49 zcmex$m9hI83K delta 40 ycmV+@0N4ME)&cs}0kFar4Vwz#1v(EvWpiU;aAlHd8MEjXoH~==PY1J{QEwSx6A;({