hair can be one frame long

This commit is contained in:
chardub
2025-02-21 20:38:56 -05:00
parent c6f69edf9c
commit f9095f2d06
26 changed files with 119 additions and 84 deletions

View File

@@ -45,7 +45,7 @@ Special thanks to Aegide and Reizod for helping to rip the sprites from the webs
and to the owners of the respective fusion websites for accepting to share and to the owners of the respective fusion websites for accepting to share
their sprites. their sprites.
Intro cinamatic Intro cinematic
##################### #####################
Kiwikelly Kiwikelly
@@ -116,7 +116,7 @@ with their respective authors' consent
SailorVicious (Prof. Elm OW sprite) https://www.deviantart.com/sailorvicious SailorVicious (Prof. Elm OW sprite) https://www.deviantart.com/sailorvicious
OceansLugiaSpirit (Koga OW sprite) http://oceanslugiaspirit.deviantart.com/ OceansLugiaSpirit (Koga OW sprite) http://oceanslugiaspirit.deviantart.com/
Wolfang62: https://www.deviantart.com/wolfang62/art/Wimpod-Sprite-Overworld-836704744 Wolfang62: https://www.deviantart.com/wolfang62/art/Wimpod-Sprite-Overworld-836704744
zender1752 (Sabrina OW sprite)
Battle sprites: Battle sprites:
Custom graphics: Custom graphics:
Kiwikelly, UnworthyPie Kiwikelly, UnworthyPie
@@ -124,7 +124,7 @@ with their respective authors' consent
Free use graphics: Free use graphics:
luckygirl88 (Misty VS sprite) http://luckygirl88.deviantart.com/art/Pokemon-BW-Misty-Sprite-Sheet-268364830 luckygirl88 (Misty VS sprite) http://luckygirl88.deviantart.com/art/Pokemon-BW-Misty-Sprite-Sheet-268364830
Lorelei VS sprite by Nalty http://nalty.deviantart.com/art/Lorelei-VS-Sprite-177184960 Lorelei VS sprite by Nalty http://nalty.deviantart.com/art/Lorelei-VS-Sprite-177184960
x-5-4-5-2 (Sabrina sprite) https://www.deviantart.com/x-5-4-5-2/art/Game-Sabrina-204548703
### Custom tileset graphics ### ### Custom tileset graphics ###
Kiwikelly Kiwikelly

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

@@ -166,54 +166,5 @@ class Sprite_Wearable < RPG::Sprite
@disposed @disposed
end end
# def getCurrentSpriteOffset()
# direction = @character.direction
# current_frame = @character.pattern
# case @character_name
# when "run"
# if direction == DIRECTION_DOWN
# return Outfit_Offsets::RUN_OFFSETS_DOWN[current_frame]
# elsif direction == DIRECTION_LEFT
# return Outfit_Offsets::RUN_OFFSETS_LEFT[current_frame]
# elsif direction == DIRECTION_RIGHT
# return Outfit_Offsets::RUN_OFFSETS_RIGHT[current_frame]
# elsif direction == DIRECTION_UP
# return Outfit_Offsets::RUN_OFFSETS_UP[current_frame]
# end
# when "surf"
# #when "dive"
# if direction == DIRECTION_DOWN
# return Outfit_Offsets::SURF_OFFSETS_DOWN[current_frame]
# elsif direction == DIRECTION_LEFT
# return Outfit_Offsets::SURF_OFFSETS_LEFT[current_frame]
# elsif direction == DIRECTION_RIGHT
# return Outfit_Offsets::SURF_OFFSETS_RIGHT[current_frame]
# elsif direction == DIRECTION_UP
# return Outfit_Offsets::SURF_OFFSETS_UP[current_frame]
# end
# when "dive"
# if direction == DIRECTION_DOWN
# return Outfit_Offsets::DIVE_OFFSETS_DOWN[current_frame]
# elsif direction == DIRECTION_LEFT
# return Outfit_Offsets::DIVE_OFFSETS_LEFT[current_frame]
# elsif direction == DIRECTION_RIGHT
# return Outfit_Offsets::DIVE_OFFSETS_RIGHT[current_frame]
# elsif direction == DIRECTION_UP
# return Outfit_Offsets::DIVE_OFFSETS_UP[current_frame]
# end
# when "bike"
# if direction == DIRECTION_DOWN
# return Outfit_Offsets::BIKE_OFFSETS_DOWN[current_frame]
# elsif direction == DIRECTION_LEFT
# return Outfit_Offsets::BIKE_OFFSETS_LEFT[current_frame]
# elsif direction == DIRECTION_RIGHT
# return Outfit_Offsets::BIKE_OFFSETS_RIGHT[current_frame]
# elsif direction == DIRECTION_UP
# return Outfit_Offsets::BIKE_OFFSETS_UP[current_frame]
# end
# end
# return Outfit_Offsets::BASE_OFFSET[current_frame]
# end
end end

View File

@@ -13,11 +13,12 @@ class Sprite_Hair < Sprite_Wearable
crop_spritesheet(direction, current_frame, action) crop_spritesheet(direction, current_frame, action)
adjust_layer() adjust_layer()
set_sprite_position(@action, direction, current_frame) set_sprite_position(@action, direction, current_frame)
adjust_position_for_nonAnimated_hairstyles(current_frame)
end end
def crop_spritesheet(direction, current_frame, action) def crop_spritesheet(direction, current_frame, action)
sprite_x = ((current_frame)) * @frameWidth sprite_x = ((current_frame)) * @frameWidth
sprite_x = 0 if @frameWidth == @wearableBitmap.width
# Don't animate surf # Don't animate surf
sprite_x = 0 if action == "surf" sprite_x = 0 if action == "surf"
@@ -25,6 +26,10 @@ class Sprite_Hair < Sprite_Wearable
@sprite.src_rect.set(sprite_x, sprite_y, @frameWidth, @frameHeight) @sprite.src_rect.set(sprite_x, sprite_y, @frameWidth, @frameHeight)
end end
def adjust_position_for_nonAnimated_hairstyles(current_frame)
return if @frameWidth != @wearableBitmap.width
@sprite.y -= 2 if current_frame % 2 == 1
end
def set_sprite_position(action, direction, current_frame) def set_sprite_position(action, direction, current_frame)
@sprite.x = @player_sprite.x - @player_sprite.ox @sprite.x = @player_sprite.x - @player_sprite.ox
@sprite.y = @player_sprite.y - @player_sprite.oy @sprite.y = @player_sprite.y - @player_sprite.oy
@@ -80,7 +85,7 @@ class Sprite_Hair < Sprite_Wearable
apply_sprite_offset(Outfit_Offsets::FISH_OFFSETS_UP, current_frame) apply_sprite_offset(Outfit_Offsets::FISH_OFFSETS_UP, current_frame)
end end
end end
adjustPositionForScreenScrolling()
end end
end end

View File

@@ -134,9 +134,10 @@ end
def generate_front_trainer_sprite_bitmap_from_appearance(trainerAppearance) def generate_front_trainer_sprite_bitmap_from_appearance(trainerAppearance)
echoln trainerAppearance.hat echoln trainerAppearance.hat
return generate_front_trainer_sprite_bitmap(false,nil,trainerAppearance.clothes,trainerAppearance.hat,nil, return generate_front_trainer_sprite_bitmap(false,nil,trainerAppearance.clothes,trainerAppearance.hat,trainerAppearance.hat2,
trainerAppearance.hair,trainerAppearance.skin_color, trainerAppearance.hair,trainerAppearance.skin_color,
trainerAppearance.hair_color,trainerAppearance.hat_color,trainerAppearance.clothes_color) trainerAppearance.hair_color,trainerAppearance.hat_color,trainerAppearance.clothes_color,
trainerAppearance.hat2_color)
end end
def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil,

View File

@@ -112,7 +112,7 @@ HAIR_SURGE = "surge" #does not exist yet
HAIR_ERIKA = "erika" HAIR_ERIKA = "erika"
HAIR_KOGA = "koga" #does not exist yet HAIR_KOGA = "koga" #does not exist yet
HAIR_JANINE = "janine" HAIR_JANINE = "janine"
HAIR_SABRINA = "sabrina" #does not exist yet HAIR_SABRINA = "sabrinaGSC"
HAIR_BLAINE = "blaine" #does not exist yet HAIR_BLAINE = "blaine" #does not exist yet
HAIR_GIOVANNI = "giovanni" #does not exist yet HAIR_GIOVANNI = "giovanni" #does not exist yet
HAIR_WHITNEY = "whitney" HAIR_WHITNEY = "whitney"

View File

@@ -313,12 +313,13 @@ def randomizePlayerOutfitUnlocked()
end end
def convert_letter_to_number(letter, max_number = nil) def convert_letter_to_number(letter, max_number = nil)
return 0 if !letter
return letter.ord if !max_number return letter.ord if !max_number
return letter.ord % max_number return letter.ord % max_number
end end
def generate_appearance_from_name(name) def generate_appearance_from_name(name)
name_seed_length = 15 name_seed_length = 11
seed = name[0, name_seed_length] # Truncate if longer than 8 seed = name[0, name_seed_length] # Truncate if longer than 8
seed += seed[0, name_seed_length - seed.length] while seed.length < name_seed_length # Repeat first characters if shorter seed += seed[0, name_seed_length - seed.length] while seed.length < name_seed_length # Repeat first characters if shorter
@@ -330,29 +331,22 @@ def generate_appearance_from_name(name)
hairstyles_list = $PokemonGlobal.hairstyles_data.keys hairstyles_list = $PokemonGlobal.hairstyles_data.keys
hat = hats_list[convert_letter_to_number(seed[0],hats_list.length)] hat = hats_list[convert_letter_to_number(seed[0],hats_list.length)]
hat2 = hats_list[convert_letter_to_number(seed[1],hats_list.length)] hat_color = convert_letter_to_number(seed[1],255)
hat2 = nil if convert_letter_to_number(seed[2]) % 3 == 0 #1/3 chance of no 2nd hat hat_color = 0 if convert_letter_to_number(seed[2]) % 2 == 0 #1/2 chance of no dyed hat
hat_color = convert_letter_to_number(seed[3],255) clothes = clothes_list[convert_letter_to_number(seed[3],clothes_list.length)]
hat_color = 0 if convert_letter_to_number(seed[4]) % 2 == 0 #1/2 chance of no dyed hat clothes_color = convert_letter_to_number(seed[4],255)
hat2_color = convert_letter_to_number(seed[5],255) clothes_color = 0 if convert_letter_to_number(seed[5]) % 2 == 0 #1/2 chance of no dyed clothes
hat2_color = 0 if convert_letter_to_number(seed[6]) % 2 == 0
clothes = clothes_list[convert_letter_to_number(seed[7],clothes_list.length)] hair_base = hairstyles_list[convert_letter_to_number(seed[6],hairstyles_list.length)]
clothes_color = convert_letter_to_number(seed[8],255) hair_number = [1,2,3,4][convert_letter_to_number(seed[7],3)]
clothes_color = 0 if convert_letter_to_number(seed[9]) % 2 == 0 #1/2 chance of no dyed clothes
hair_base = hairstyles_list[convert_letter_to_number(seed[10],hairstyles_list.length)]
hair_number = [1,2,3,4][convert_letter_to_number(seed[11],3)]
hair=getFullHairId(hair_base,hair_number) hair=getFullHairId(hair_base,hair_number)
hair_color = convert_letter_to_number(seed[12],255) hair_color = convert_letter_to_number(seed[8],255)
hair_color = 0 if convert_letter_to_number(seed[13]) % 2 == 0 #1/2 chance of no dyed hair hair_color = 0 if convert_letter_to_number(seed[9]) % 2 == 0 #1/2 chance of no dyed hair
skin_tone = [1,2,3,4,5,6][convert_letter_to_number(seed[14],5)] skin_tone = [1,2,3,4,5,6][convert_letter_to_number(seed[10],5)]
echoln clothes
return TrainerAppearance.new(skin_tone,hat,clothes, hair, return TrainerAppearance.new(skin_tone,hat,clothes, hair,
hair_color, clothes_color, hat_color,hat2,hat2_color) hair_color, clothes_color, hat_color)
end end

View File

@@ -296,7 +296,7 @@ end
def getFusedPokemonIdFromSymbols(body_dex, head_dex) def getFusedPokemonIdFromSymbols(body_dex, head_dex)
bodyDexNum = GameData::Species.get(body_dex).id_number bodyDexNum = GameData::Species.get(body_dex).id_number
headDexNum = GameData::Species.get(head_dex).id_number headDexNum = GameData::Species.get(head_dex).id_number
return getFusedPokemonIdFromDexNum(body_dex, head_dex) return getFusedPokemonIdFromDexNum(bodyDexNum, headDexNum)
end end
def generateFusionIcon(dexNum, path) def generateFusionIcon(dexNum, path)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -187,12 +187,19 @@
}, },
{ {
"id": "highpony", "id": "highpony",
"name": "High-pony", "name": "Ponytail",
"description": "A high ponytail reminiscent of Lopunny's fur", "description": "A high ponytail reminiscent of Lopunny's fur",
"done": "yes", "done": "yes",
"price": 500, "price": 500,
"tags": "default" "tags": "default"
}, },
{
"id": "hilda",
"name": "High-pony",
"description": "A voluminous high ponytail that shows you're ready for adventure. It's popular with new trainers in Unova!",
"price": 2000,
"tags": "unova,"
},
{ {
"id": "hime", "id": "hime",
"name": "Hime", "name": "Hime",
@@ -321,7 +328,10 @@
}, },
{ {
"id": "lyra", "id": "lyra",
"name": "Springy Pigtails" "name": "Peppy Pigtails",
"description": "Bouncy pigtails with a playful charm that gives off a carefree vibes.",
"price": 1500,
"tags": "johto,"
}, },
{ {
"id": "mawile", "id": "mawile",
@@ -506,6 +516,16 @@
"tags": "short, untied, spiky, thick, pokemon,celadon,", "tags": "short, untied, spiky, thick, pokemon,celadon,",
"howToGet": "Celadon special" "howToGet": "Celadon special"
}, },
{
"id": "sabrinaGSC",
"name": "Clairvoyant Cut",
"description": "A medium-length cut with a distinct parted fringe that frames the face.The style was popularized by the Gym Leader Sabrina.",
"price": 2000
},
{
"id": "sabrinaRBY",
"name": "Telekinetic Tresses"
},
{ {
"id": "samurai", "id": "samurai",
"name": "Samurai" "name": "Samurai"

View File

@@ -1,5 +1,2 @@
1740158773 1740188152
1740158778 1740188180
1740158828
1740158832
1740158832

View File

@@ -503,3 +503,70 @@ Graphics/CustomBattlers/spritesheets/spritesheets_custom/148/148.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/78/78c.png Graphics/CustomBattlers/spritesheets/spritesheets_custom/78/78c.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/136/136.png Graphics/CustomBattlers/spritesheets/spritesheets_custom/136/136.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/260.png Graphics/CustomBattlers/spritesheets/spritesheets_base/260.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/208.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/208/208.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/151/151.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/305.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/498/498.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/461.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/33/33.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/232.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/78/78.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/155.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/373/373.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/197.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/197/197a.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/86/86.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/478/478.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/459.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/459/459.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/24.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/158.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/14/14.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/327.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/327/327.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/15.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/15/15.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/246.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/412.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/48/48a.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/116.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/223.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/223/223.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/60.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/99/99.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/275/275b.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/95.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/211.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/211/211.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/240.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/253.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/253/253.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/408.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/408/408.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/258.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/206/206.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/3/3a.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/57/57.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/467/467a.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/467/467.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/36.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/36/36.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/495.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/158/158.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/124.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/124/124.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/406/406.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/133.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/46/46a.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/35.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/433.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/433/433.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/43.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/309/309.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/122.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/122/122.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/114.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/114/114.png
Graphics/CustomBattlers/spritesheets/spritesheets_custom/499/499.png
Graphics/CustomBattlers/spritesheets/spritesheets_base/69.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB