12 Commits

Author SHA1 Message Date
chardub
7012af625d Updates dye kit menu 2025-03-15 09:37:54 -04:00
chardub
88ed3c000e adds icons for dye kit items 2025-03-14 19:42:23 -04:00
chardub
b53ffd0c73 Removes quitmenu prompt when exiting clothes menu 2025-03-14 15:18:23 -04:00
chardub
048e51b9ae Fixes some legendaries not respawning 2025-03-14 12:43:24 -04:00
chardub
47876255e9 Removes some debugging logs 2025-03-14 11:32:15 -04:00
chardub
d754fc45f5 Removes commented code 2025-03-14 11:21:43 -04:00
chardub
03b832a897 Fixes hats menu navigation issue 2025-03-14 11:19:44 -04:00
chardub
5343792f8c Fixes swapping hats visual glitch when only wearing one hat 2025-03-14 11:06:44 -04:00
chardub
324e8b5d18 Adds more custom pokedex entries 2025-03-13 10:50:24 -04:00
chardub
ce8d182b2f Adds some hats and clothes 2025-03-13 10:49:05 -04:00
chardub
4edd8e9719 Fixes graphical glitch when pressing shift on sprites pokedex page 2025-03-13 10:02:12 -04:00
chardub
aa396cf402 Battle menu: Automatically select the Fight option after switching out a Pokémon 2025-03-12 10:45:54 -04:00
89 changed files with 860 additions and 610 deletions

BIN
.DS_Store vendored

Binary file not shown.

BIN
Data/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -219,7 +219,10 @@ class PokeBattle_Battle
break
end
when 2 # Pokémon
break if pbPartyMenu(idxBattler)
if pbPartyMenu(idxBattler)
@scene.setLastCommandIndex(idxBattler,0)
break
end
when 3 # Run
# NOTE: "Run" is only an available option for the first battler the
# player chooses an action for in a round. Attempting to run

View File

@@ -1,4 +1,9 @@
class PokeBattle_Scene
def setLastCommandIndex(battlerIndex,commandIndex)
@lastCmd[battlerIndex] = commandIndex
end
#=============================================================================
# The player chooses a main command for a Pokémon
# Return values: -1=Cancel, 0=Fight, 1=Bag, 2=Pokémon, 3=Run, 4=Call

View File

@@ -688,7 +688,7 @@ class PokemonPokedexInfo_Scene
pbUpdate
dorefresh = false
if Input.trigger?(Input::ACTION)
changeEntryPage()
#changeEntryPage()
elsif Input.trigger?(Input::BACK)
pbPlayCloseMenuSE
break

View File

@@ -18,6 +18,9 @@ CLOTHES_FOSSIL_F ="sada"
CLOTHES_TREVENANT= "trevenantforestkingcloak"
CLOTHES_WAITRESS = "maid"
CLOTHES_WAITER = "butler"
CLOTHES_LASS_YELLOW ="lass"
CLOTHES_LASS_BLUE ="lass2"
@@ -69,6 +72,7 @@ HAT_BREEDER_3="egg"
HAT_BREEDEROUTFIT="PKMBreeder"
HAT_WAITRESS = "maid"
FUSION_HAT = "fusionnerd"
FUSION_OUTFIT = "fusionnerd"
@@ -135,4 +139,5 @@ HAIR_HOOH = "ho-oh"
HAIR_CRESSELIA = "lunarbob"
HAIR_LYCANROC="lycanrocshorthair"
HAIR_HAPPINY="happinysuit"
HAIR_LATIAS="SpecialLatias"
HAIR_LATIAS="SpecialLatias"
HAIR_GARDEVOIR="gardevoir"

View File

@@ -81,6 +81,11 @@ class ClothesMartAdapter < OutfitsMartAdapter
$Trainer.clothes != @worn_clothes
end
def putOnSelectedOutfit()
putOnClothes($Trainer.clothes)
@worn_clothes = $Trainer.clothes
end
def putOnOutfit(item)
putOnClothes(item.id) if item
@worn_clothes = item.id if item

View File

@@ -89,26 +89,6 @@ end
SWAP_HAT_POSITIONS_CAPTION = "Switch hats position"
#unused
# def set_hat_adapter_options(adapter)
# slot1_hat = $Trainer.hat ? "Swap #{get_hat_by_id($Trainer.hat).name}" : "(Empty slot)"
# slot2_hat = $Trainer.hat2 ? "Swap #{get_hat_by_id($Trainer.hat2).name}" : "(Empty slot)"
# options = [slot1_hat,slot2_hat]
# options << SWAP_HAT_POSITIONS_CAPTION if $Trainer.hat && $Trainer.hat2
# options << "Cancel"
# hat_options_choice = optionsMenu(options)
# if options[hat_options_choice] == SWAP_HAT_POSITIONS_CAPTION
# switchHatsPosition()
# return nil
# end
# if hat_options_choice == options.length #cancel
# return nil
# end
# is_secondary = hat_options_choice ==1
# adapter.set_secondary_hat(is_secondary)
# return adapter
# end
#is_secondary only used for hats
def openSelectOutfitMenu(stock = [], itemType =nil, is_secondary=false)
adapter = getAdapter(itemType, stock, false, is_secondary)
@@ -145,38 +125,6 @@ def changeHatMenu(is_secondary_hat = false)
openSelectOutfitMenu(stock, :HAT, is_secondary_hat)
end
# def changeOutfit()
# hat1_name = get_hat_by_id($Trainer.hat) ? get_hat_by_id($Trainer.hat).name : "(Empty)"
# hat2_name = get_hat_by_id($Trainer.hat2) ? get_hat_by_id($Trainer.hat2).name : "(Empty)"
#
# commands = []
# commands[cmdClothes = commands.length] = _INTL("Change clothes")
# commands[cmdHat = commands.length] = _INTL("Change hat 1 (#{hat1_name})")
# commands[cmdHat2 = commands.length] = _INTL("Change hat 2 (#{hat2_name})")
# commands[switchHats = commands.length] = _INTL("Switch hat positions")
# commands[cmdQuit = commands.length] = _INTL("Quit")
#
# #TODO change this into a graphical menu with icons
# loop do
# cmd = pbMessage(_INTL("What would you like to do?"), commands, cmdQuit + 1)
# if cmd == cmdClothes
# changeClothesMenu()
# break
# elsif cmd == cmdHat
# changeHatMenu()
# break
# elsif cmd == cmdHat2
# changeHatMenu(true)
# break
# elsif cmd == switchHats
# switchHatsPosition()
# break
# else
# break
# end
# end
# end
def changeOutfit()
commands = []
commands[cmdHat = commands.length] = _INTL("Change hat")

View File

@@ -48,7 +48,7 @@ class ClothesShopPresenter < PokemonMartScreen
end
# returns if should stay in the menu
# returns true if should stay in the menu
def playerClothesActionsMenu(item)
cmd_wear = "Wear"
cmd_dye = "Dye Kit"
@@ -59,9 +59,9 @@ class ClothesShopPresenter < PokemonMartScreen
choice = pbMessage("What would you like to do?", options, -1)
if options[choice] == cmd_wear
putOnClothes(item)
putOnClothes(item,false)
$Trainer.clothes_color = @adapter.get_dye_color(item.id)
return false
return true
elsif options[choice] == cmd_dye
dyeClothes()
end
@@ -72,19 +72,19 @@ class ClothesShopPresenter < PokemonMartScreen
putOnClothes(item)
end
def quitMenuPrompt(item)
return true if !@adapter.is_a?(HatsMartAdapter)
def quitMenuPrompt()
return true if !(@adapter.is_a?(HatsMartAdapter) || @adapter.is_a?(ClothesMartAdapter))
boolean_changes_detected = @adapter.player_changed_clothes?
return true if !boolean_changes_detected
pbPlayCancelSE
cmd_confirm = "Set outfit"
cmd_discard = "Discard changes"
cmd_cancel = "Cancel"
options = [cmd_confirm,cmd_discard,cmd_cancel]
choice = pbMessage("You have unsaved changes!",options,2)
options = [cmd_discard,cmd_confirm,cmd_cancel]
choice = pbMessage("You have unsaved changes!",options,3)
case options[choice]
when cmd_confirm
confirmPutClothes(item)
@adapter.putOnSelectedOutfit
pbPlayDecisionSE
return true
when cmd_discard
@@ -101,12 +101,12 @@ class ClothesShopPresenter < PokemonMartScreen
item = nil
loop do
item = @scene.pbChooseBuyItem
#break if !item
if !item
break if @adapter.isShop?
quit_menu_choice = quitMenuPrompt(item)
break if quit_menu_choice
item = @scene.pbChooseBuyItem
#quit_menu_choice = quitMenuPrompt()
#break if quit_menu_choice
break
next
end
@@ -154,7 +154,6 @@ class ClothesShopPresenter < PokemonMartScreen
@stock.compact!
pbDisplayPaused(_INTL("Here you are! Thank you!")) { pbSEPlay("Mart buy item") }
@adapter.addItem(item)
# break
end
@scene.pbEndBuyScene
end

View File

@@ -53,9 +53,6 @@ class ClothesShopView < PokemonMart_Scene
pbScrollMap(DIRECTION_LEFT, 7, 6)
pbScrollMap(DIRECTION_DOWN, 5, 6)
$game_player.turn_generic(@initial_direction)
#$scene.reset_map(true)
#pbRefreshSceneMap
# $scene.reset_map(false)
end
def refreshStock(adapter)
@@ -70,9 +67,6 @@ class ClothesShopView < PokemonMart_Scene
@subscene.pbRefresh
else
itemwindow = @sprites["itemwindow"]
#@sprites["icon"].item = itemwindow.item
#@sprites["icon"].item = itemwindow.item
item = itemwindow.item
if itemwindow.item
if itemwindow.item.is_a?(Symbol)

View File

@@ -10,6 +10,8 @@ class HairMartAdapter < OutfitsMartAdapter
@version = getCurrentHairVersion().to_i
@worn_hair = $Trainer.hair
@worn_hat = $Trainer.hat
@worn_hat2 = $Trainer.hat2
@hat_visible = false
@removable = true
@previous_item= find_first_item()
@@ -105,8 +107,14 @@ class HairMartAdapter < OutfitsMartAdapter
item = @previous_item if item.is_a?(Symbol)
@previous_item = find_first_item() if !item.is_a?(Symbol)
displayed_hat = @hat_visible ? @worn_hat : nil
displayed_hat2 = @hat_visible ? @worn_hat2 : nil
previewWindow.hat = displayed_hat
previewWindow.hat2 = displayed_hat2
$Trainer.hat = displayed_hat
$Trainer.hat2 = displayed_hat2
itemId = getCurrentHairId(item.id)
previewWindow.hair = itemId
$Trainer.hair = itemId
@@ -142,6 +150,8 @@ class HairMartAdapter < OutfitsMartAdapter
$Trainer.hair = @worn_hair
$Trainer.hat = @worn_hat
$Trainer.hat2 = @worn_hat2
end
def get_unlocked_items_list()

View File

@@ -38,15 +38,27 @@ class HatShopView < ClothesShopView
return @stock[itemwindow.index]
end
def displayLayerIcons(selected_item=nil)
def handleHatlessLayerIcons(selected_item)
other_hat = @adapter.is_secondary_hat ? $Trainer.hat : $Trainer.hat2
if !selected_item.is_a?(Hat)
if @adapter.is_secondary_hat
@sprites["wornHat_layer2"].bitmap=nil
else
@sprites["wornHat_layer1"].bitmap=nil
end
return
end
if !other_hat.is_a?(Hat)
if @adapter.is_secondary_hat
@sprites["wornHat_layer1"].bitmap=nil
else
@sprites["wornHat_layer2"].bitmap=nil
end
end
end
def displayLayerIcons(selected_item=nil)
handleHatlessLayerIcons(selected_item)
hat1Filename = getOverworldHatFilename($Trainer.hat)
hat2Filename = getOverworldHatFilename($Trainer.hat2)

View File

@@ -157,6 +157,18 @@ class HatsMartAdapter < OutfitsMartAdapter
$Trainer.hat != @worn_clothes || $Trainer.hat2 != @worn_clothes2
end
def putOnSelectedOutfit()
putOnHat($Trainer.hat,true,false) if $Trainer.hat
putOnHat($Trainer.hat2,true,true) if $Trainer.hat2
@worn_clothes = $Trainer.hat
@worn_clothes2 = $Trainer.hat2
playOutfitChangeAnimation()
pbMessage(_INTL("You put on the hat(s)!\\wtnp[30]"))
end
def putOnOutfit(item)
return unless item.is_a?(Outfit)
putOnHat(item.id,false,@is_secondary_hat)

View File

@@ -1717,4 +1717,64 @@ def qmarkMaskCheck()
obtainClothes(CLOTHES_GLITCH)
end
end
end
def purchaseDyeKitMenu(hats_kit_price=0,clothes_kit_price=0)
commands = []
command_hats = "Hats Dye Kit ($#{hats_kit_price})"
command_clothes = "Clothes Dye Kit ($#{clothes_kit_price})"
command_cancel = "Cancel"
commands << command_hats if !$PokemonBag.pbHasItem?(:HATSDYEKIT)
commands << command_clothes if !$PokemonBag.pbHasItem?(:CLOTHESDYEKIT)
commands << command_cancel
if commands.length <= 1
pbCallBub(2,@event_id)
pbMessage("\\C[1]Dye Kits\\C[0] can be used to dye clothes all sorts of colours!")
pbCallBub(2,@event_id)
pbMessage("You can use them at any time when you change clothes.")
return
end
pbCallBub(2,@event_id)
pbMessage("\\GWelcome! Are you interested in dyeing your outfits different colours?")
pbCallBub(2,@event_id)
pbMessage("I make handy \\C[1]Dye Kits\\C[0] from my Smeargle's paint that can be used to dye your outfits any color you want!")
pbCallBub(2,@event_id)
pbMessage("\\GWhat's more is that it's reusable so you can go completely wild with it if you want! Are you interested?")
choice = optionsMenu(commands,commands.length)
case commands[choice]
when command_hats
if $Trainer.money < hats_kit_price
pbCallBub(2,@event_id)
pbMessage("Oh, you don't have enough money...")
return
end
pbMessage("\\G\\PN purchased the dye kit.")
$Trainer.money -= hats_kit_price
pbSEPlay("SlotsCoin")
Kernel.pbReceiveItem(:HATSDYEKIT)
pbCallBub(2,@event_id)
pbMessage("\\GHere you go! Have fun dyeing your hats!")
when command_clothes
if $Trainer.money < clothes_kit_price
pbCallBub(2,@event_id)
pbMessage("Oh, you don't have enough money...")
return
end
pbMessage("\\G\\PN purchased the dye kit.")
$Trainer.money -= clothes_kit_price
pbSEPlay("SlotsCoin")
Kernel.pbReceiveItem(:CLOTHESDYEKIT)
pbCallBub(2,@event_id)
pbMessage("\\GHere you go! Have fun dyeing your clothes!")
end
pbCallBub(2,@event_id)
pbMessage("You can use \\C[1]Dye Kits\\C[0] at any time when you change clothes.")
end

View File

@@ -46,7 +46,14 @@
def onLoadExistingGame()
migrateOldSavesToCharacterCustomization()
clear_all_images()
loadDateSpecificChanges()
end
def loadDateSpecificChanges()
current_date = Time.new
if (current_date.day == 1 && current_date.month == 4)
$Trainer.hat2=HAT_CLOWN if $Trainer.unlocked_hats.include?(HAT_CLOWN)
end
end
def onStartingNewGame() end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -107,6 +107,12 @@
"tags": "azalea,special,",
"howToGet": "type trainer"
},
{
"id": "butler",
"name": "Butler Uniform",
"price": 5000,
"tags": "special,"
},
{
"id": "BusinessSuit",
"name": "Business Suit",
@@ -130,7 +136,7 @@
"description": "A mysterious long black cloak or dress, worn over black leggings.",
"len": 65,
"done": "yes",
"price": 10000,
"price": 6500,
"tags": "lavender,",
"howToGet": "city exclusive outfit"
},
@@ -255,7 +261,8 @@
{
"id": "glitzerset",
"name": "Glitzer",
"price": 2550
"price": 2550,
"tags": "special,"
},
{
"id": "gothhoodie",
@@ -375,6 +382,7 @@
"len": 74,
"done": "yes",
"price": 0,
"tags": "special,",
"howToGet": "starting outfit"
},
{
@@ -408,6 +416,12 @@
"price": 18000,
"tags": "pokemon-rockruff,pokemon-lycanroc_d,pokemon-lycanroc_n,"
},
{
"id": "maid",
"name": "Maid Uniform",
"price": 5000,
"tags": "special,"
},
{
"id": "marshweater",
"name": "Marshweater",
@@ -591,12 +605,14 @@
"id": "sada",
"name": "Primitive Clothes (F)",
"price": 10000,
"tags": "special",
"howToGet": "fossil guy final"
},
{
"id": "sado",
"name": "Primitive Clothes (M)",
"price": 10000,
"tags": "special",
"howToGet": "fossil guy final"
},
{

View File

@@ -140,8 +140,17 @@
},
{
"id": "fusionnerd",
"name": "Side-Swept Fringe",
"description": "A bold, asymmetrical hairstyle where strands fuse into a stylish wave.",
"price": 1000
},
{
"id": "gardevoir",
"name": "Guardian Fringe",
"description": "A neat fringe that covers one eye that is styled to look like a Gardevoir.",
"price": 3000,
"howToGet": "saffron boutique"
},
{
"id": "gary",
"name": "Front Spikes",

View File

@@ -502,6 +502,13 @@
"tags": "floating,pokemon-shedinja",
"howToGet": "reward for beating the ilex forest shedinja encounter? reward for showing a shedinja to someone?"
},
{
"id": "haxorushelmet",
"name": "Jaw Helmet",
"description": "A fearsome helmet crafted in the shape of a Haxorus's jaw. It is sure to intimidate your enemies! ",
"price": 8000,
"tags": "pokemon-axew,pokemon-fraxure,pokemon-haxorus,"
},
{
"id": "headlacecovering",
"name": "Lace Covering",
@@ -722,6 +729,12 @@
"tags": "hat,trainer,johto,",
"howToGet": "regional set"
},
{
"id": "maid",
"name": "Mob Cap",
"price": 1500,
"tags": "hat,"
},
{
"id": "magicap",
"name": "Magikarp Balaclava",
@@ -1220,7 +1233,7 @@
},
{
"id": "surgeglasses",
"name": "Sunglasses",
"name": "Surge Shades",
"description": "Shockingly cool sunglasses.",
"done": "yes",
"len": 27,
@@ -1312,6 +1325,12 @@
"tags": "hat,trainer,galar,",
"howToGet": "trainer clothing store?"
},
{
"id": "voltorbitembarrette",
"name": "Pokéball Barrette",
"price": 1500,
"tags": "hariclip,pokemon-voltorb,pokemon-electrode,"
},
{
"id": "waterdress",
"name": "Straw Hat",

View File

@@ -1,2 +1 @@
1741723971
1741723972
1742045788

File diff suppressed because it is too large Load Diff

BIN
Graphics/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 978 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 446 KiB

After

Width:  |  Height:  |  Size: 446 KiB