From 4ae84f9b5da5fd983319d5155f39a13fa20b2731 Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Thu, 22 Apr 2021 21:08:34 +0100 Subject: [PATCH] Added generic item icon support for HMs/TRs, moves taught by TR are now relearnable, tweaked determination of valid Mega forms --- .../003_Tilemap_Perspective.rb | 57 ------------------- .../006_Map renderer/005_TileDrawingHelper.rb | 56 ++++++++++++++++++ .../Scripts/010_Data/002_PBS data/006_Item.rb | 12 +++- Data/Scripts/013_Items/001_Item_Utilities.rb | 4 +- .../014_Pokemon/002_Pokemon_MegaEvolution.rb | 20 +++---- .../014_Pokemon/006_Pokemon_Deprecated.rb | 2 + Data/Scripts/016_UI/018_UI_ItemStorage.rb | 2 +- Data/Scripts/019_Utilities/001_Utilities.rb | 3 +- 8 files changed, 83 insertions(+), 73 deletions(-) diff --git a/Data/Scripts/006_Map renderer/003_Tilemap_Perspective.rb b/Data/Scripts/006_Map renderer/003_Tilemap_Perspective.rb index 1daf74337..41c1c1133 100644 --- a/Data/Scripts/006_Map renderer/003_Tilemap_Perspective.rb +++ b/Data/Scripts/006_Map renderer/003_Tilemap_Perspective.rb @@ -1,60 +1,3 @@ -def bltMinimapAutotile(dstBitmap,x,y,srcBitmap,id) - return if id>=48 || !srcBitmap || srcBitmap.disposed? - anim=0 - cxTile=3 - cyTile=3 - tiles = TileDrawingHelper::Autotiles[id>>3][id&7] - src=Rect.new(0,0,0,0) - for i in 0...4 - tile_position = tiles[i] - 1 - src.set( - tile_position % 6 * cxTile + anim, - tile_position / 6 * cyTile, cxTile, cyTile) - dstBitmap.blt(i%2*cxTile+x,i/2*cyTile+y, srcBitmap, src) - end -end - -def passable?(passages,tile_id) - return false if tile_id == nil - passage = passages[tile_id] - return (passage && passage<15) -end - -def getPassabilityMinimap(mapid) - map = load_data(sprintf("Data/Map%03d.rxdata",mapid)) - tileset = $data_tilesets[map.tileset_id] - minimap = AnimatedBitmap.new("Graphics/Pictures/minimap_tiles") - ret = Bitmap.new(map.width*6,map.height*6) - passtable = Table.new(map.width,map.height) - passages = tileset.passages - for i in 0...map.width - for j in 0...map.height - pass=true - for z in [2,1,0] - if !passable?(passages,map.data[i,j,z]) - pass=false - break - end - end - passtable[i,j]=pass ? 1 : 0 - end - end - neighbors=TileDrawingHelper::NeighborsToTiles - for i in 0...map.width - for j in 0...map.height - if passtable[i,j]==0 - nb=TileDrawingHelper.tableNeighbors(passtable,i,j) - tile=neighbors[nb] - bltMinimapAutotile(ret,i*6,j*6,minimap.bitmap,tile) - end - end - end - minimap.disposes - return ret -end - - - module ScreenPosHelper def self.pbScreenZoomX(ch) zoom=1.0 diff --git a/Data/Scripts/006_Map renderer/005_TileDrawingHelper.rb b/Data/Scripts/006_Map renderer/005_TileDrawingHelper.rb index 707b4d9af..ac6cb22dd 100644 --- a/Data/Scripts/006_Map renderer/005_TileDrawingHelper.rb +++ b/Data/Scripts/006_Map renderer/005_TileDrawingHelper.rb @@ -200,3 +200,59 @@ def createMinimap(mapid) bitmap.fill_rect(bitmap.width-1,0,1,bitmap.height,black) return bitmap end + +def bltMinimapAutotile(dstBitmap,x,y,srcBitmap,id) + return if id>=48 || !srcBitmap || srcBitmap.disposed? + anim=0 + cxTile=3 + cyTile=3 + tiles = TileDrawingHelper::Autotiles[id>>3][id&7] + src=Rect.new(0,0,0,0) + for i in 0...4 + tile_position = tiles[i] - 1 + src.set( + tile_position % 6 * cxTile + anim, + tile_position / 6 * cyTile, cxTile, cyTile) + dstBitmap.blt(i%2*cxTile+x,i/2*cyTile+y, srcBitmap, src) + end +end + +def passable?(passages,tile_id) + return false if tile_id == nil + passage = passages[tile_id] + return (passage && passage<15) +end + +# Unused +def getPassabilityMinimap(mapid) + map = load_data(sprintf("Data/Map%03d.rxdata",mapid)) + tileset = $data_tilesets[map.tileset_id] + minimap = AnimatedBitmap.new("Graphics/Pictures/minimap_tiles") + ret = Bitmap.new(map.width*6,map.height*6) + passtable = Table.new(map.width,map.height) + passages = tileset.passages + for i in 0...map.width + for j in 0...map.height + pass=true + for z in [2,1,0] + if !passable?(passages,map.data[i,j,z]) + pass=false + break + end + end + passtable[i,j]=pass ? 1 : 0 + end + end + neighbors=TileDrawingHelper::NeighborsToTiles + for i in 0...map.width + for j in 0...map.height + if passtable[i,j]==0 + nb=TileDrawingHelper.tableNeighbors(passtable,i,j) + tile=neighbors[nb] + bltMinimapAutotile(ret,i*6,j*6,minimap.bitmap,tile) + end + end + end + minimap.disposes + return ret +end diff --git a/Data/Scripts/010_Data/002_PBS data/006_Item.rb b/Data/Scripts/010_Data/002_PBS data/006_Item.rb index 1eb740205..90bf849db 100644 --- a/Data/Scripts/010_Data/002_PBS data/006_Item.rb +++ b/Data/Scripts/010_Data/002_PBS data/006_Item.rb @@ -27,10 +27,20 @@ module GameData return ret if pbResolveBitmap(ret) # Check for TM/HM type icons if item_data.is_machine? + prefix = "machine" + if item.data_is_HM? + prefix = "machine_hm" + elsif item_data.is_TR? + prefix = "machine_tr" + end move_type = GameData::Move.get(item_data.move).type type_data = GameData::Type.get(move_type) - ret = sprintf("Graphics/Items/machine_%s", type_data.id) + ret = sprintf("Graphics/Items/%s_%s", prefix, type_data.id) return ret if pbResolveBitmap(ret) + if !item_data.is_TM? + ret = sprintf("Graphics/Items/machine_%s", type_data.id) + return ret if pbResolveBitmap(ret) + end end return "Graphics/Items/000" end diff --git a/Data/Scripts/013_Items/001_Item_Utilities.rb b/Data/Scripts/013_Items/001_Item_Utilities.rb index 88baf1a25..7adb7091b 100644 --- a/Data/Scripts/013_Items/001_Item_Utilities.rb +++ b/Data/Scripts/013_Items/001_Item_Utilities.rb @@ -450,7 +450,7 @@ end def pbUseItem(bag,item,bagscene=nil) itm = GameData::Item.get(item) useType = itm.field_use - if itm.is_machine? # TM or HM + if itm.is_machine? # TM or TR or HM if $Trainer.pokemon_count == 0 pbMessage(_INTL("There is no Pokémon.")) return 0 @@ -461,7 +461,7 @@ def pbUseItem(bag,item,bagscene=nil) pbMessage(_INTL("\\se[PC access]You booted up {1}.\1",itm.name)) if !pbConfirmMessage(_INTL("Do you want to teach {1} to a Pokémon?",movename)) return 0 - elsif pbMoveTutorChoose(machine,nil,true) + elsif pbMoveTutorChoose(machine,nil,true,itm.is_TR?) bag.pbDeleteItem(item) if itm.is_TR? return 1 end diff --git a/Data/Scripts/014_Pokemon/002_Pokemon_MegaEvolution.rb b/Data/Scripts/014_Pokemon/002_Pokemon_MegaEvolution.rb index ee400d45f..8f00ccda7 100644 --- a/Data/Scripts/014_Pokemon/002_Pokemon_MegaEvolution.rb +++ b/Data/Scripts/014_Pokemon/002_Pokemon_MegaEvolution.rb @@ -6,7 +6,7 @@ class Pokemon def getMegaForm(checkItemOnly = false) ret = 0 GameData::Species.each do |data| - next if data.species != @species + next if data.species != @species || data.unmega_form != form_simple if data.mega_stone && hasItem?(data.mega_stone) ret = data.form break @@ -31,7 +31,6 @@ class Pokemon megaForm = self.getMegaForm return megaForm > 0 && megaForm == form_simple end - alias isMega? mega? def makeMega megaForm = self.getMegaForm @@ -57,24 +56,23 @@ class Pokemon # NOTE: These are treated as form changes in Essentials. #============================================================================= def hasPrimalForm? - v = MultipleForms.call("getPrimalForm",self) - return v!=nil + v = MultipleForms.call("getPrimalForm", self) + return !v.nil? end def primal? - v = MultipleForms.call("getPrimalForm",self) - return v!=nil && v==@form + v = MultipleForms.call("getPrimalForm", self) + return !v.nil? && v == @form end - alias isPrimal? primal? def makePrimal - v = MultipleForms.call("getPrimalForm",self) - self.form = v if v!=nil + v = MultipleForms.call("getPrimalForm", self) + self.form = v if !v.nil? end def makeUnprimal - v = MultipleForms.call("getUnprimalForm",self) - if v!=nil; self.form = v + v = MultipleForms.call("getUnprimalForm", self) + if !v.nil?; self.form = v elsif primal?; self.form = 0 end end diff --git a/Data/Scripts/014_Pokemon/006_Pokemon_Deprecated.rb b/Data/Scripts/014_Pokemon/006_Pokemon_Deprecated.rb index 057b708b9..4c1b1cc8a 100644 --- a/Data/Scripts/014_Pokemon/006_Pokemon_Deprecated.rb +++ b/Data/Scripts/014_Pokemon/006_Pokemon_Deprecated.rb @@ -193,6 +193,8 @@ class Pokemon deprecated_method_alias :pbUpdateShadowMoves, :update_shadow_moves, removal_in: 'v20' deprecated_method_alias :isForeign?, :foreign?, removal_in: 'v20' deprecated_method_alias :calcStats, :calc_stats, removal_in: 'v20' + deprecated_method_alias :isMega?, :mega?, removal_in: 'v20' + deprecated_method_alias :isPrimal?, :primal?, removal_in: 'v20' end # (see Pokemon#initialize) diff --git a/Data/Scripts/016_UI/018_UI_ItemStorage.rb b/Data/Scripts/016_UI/018_UI_ItemStorage.rb index bf0b117fe..d8e614b05 100644 --- a/Data/Scripts/016_UI/018_UI_ItemStorage.rb +++ b/Data/Scripts/016_UI/018_UI_ItemStorage.rb @@ -38,7 +38,7 @@ class Window_PokemonItemStorage < Window_DrawableCommand itemname = @adapter.getDisplayName(item) baseColor = (index==@sortIndex) ? Color.new(248,24,24) : self.baseColor textpos.push([itemname,rect.x,rect.y-6,false,self.baseColor,self.shadowColor]) - if !GameData::Item.get(item).is_important? # Not a Key item or HM (or infinite TM) + if !GameData::Item.get(item).is_important? # Not a Key item/HM/TM qty = _ISPRINTF("x{1: 2d}",@bag[index][1]) sizeQty = self.contents.text_size(qty).width xQty = rect.x+rect.width-sizeQty-2 diff --git a/Data/Scripts/019_Utilities/001_Utilities.rb b/Data/Scripts/019_Utilities/001_Utilities.rb index ecef851af..ca6428881 100644 --- a/Data/Scripts/019_Utilities/001_Utilities.rb +++ b/Data/Scripts/019_Utilities/001_Utilities.rb @@ -426,7 +426,7 @@ def pbMoveTutorAnnotations(move, movelist = nil) return ret end -def pbMoveTutorChoose(move,movelist=nil,bymachine=false) +def pbMoveTutorChoose(move,movelist=nil,bymachine=false,oneusemachine=false) ret = false move = GameData::Move.get(move).id if movelist!=nil && movelist.is_a?(Array) @@ -454,6 +454,7 @@ def pbMoveTutorChoose(move,movelist=nil,bymachine=false) pbMessage(_INTL("{1} can't learn {2}.",pokemon.name,movename)) { screen.pbUpdate } else if pbLearnMove(pokemon,move,false,bymachine) { screen.pbUpdate } + pkmn.add_first_move(move) if oneusemachine ret = true break end