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
their sprites.
Intro cinamatic
Intro cinematic
#####################
Kiwikelly
@@ -116,7 +116,7 @@ with their respective authors' consent
SailorVicious (Prof. Elm OW sprite) https://www.deviantart.com/sailorvicious
OceansLugiaSpirit (Koga OW sprite) http://oceanslugiaspirit.deviantart.com/
Wolfang62: https://www.deviantart.com/wolfang62/art/Wimpod-Sprite-Overworld-836704744
zender1752 (Sabrina OW sprite)
Battle sprites:
Custom graphics:
Kiwikelly, UnworthyPie
@@ -124,7 +124,7 @@ with their respective authors' consent
Free use graphics:
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
x-5-4-5-2 (Sabrina sprite) https://www.deviantart.com/x-5-4-5-2/art/Game-Sabrina-204548703
### Custom tileset graphics ###
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
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

View File

@@ -13,11 +13,12 @@ class Sprite_Hair < Sprite_Wearable
crop_spritesheet(direction, current_frame, action)
adjust_layer()
set_sprite_position(@action, direction, current_frame)
adjust_position_for_nonAnimated_hairstyles(current_frame)
end
def crop_spritesheet(direction, current_frame, action)
sprite_x = ((current_frame)) * @frameWidth
sprite_x = 0 if @frameWidth == @wearableBitmap.width
# Don't animate 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)
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)
@sprite.x = @player_sprite.x - @player_sprite.ox
@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)
end
end
adjustPositionForScreenScrolling()
end
end

View File

@@ -134,9 +134,10 @@ end
def generate_front_trainer_sprite_bitmap_from_appearance(trainerAppearance)
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_color,trainerAppearance.hat_color,trainerAppearance.clothes_color)
trainerAppearance.hair_color,trainerAppearance.hat_color,trainerAppearance.clothes_color,
trainerAppearance.hat2_color)
end
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_KOGA = "koga" #does not exist yet
HAIR_JANINE = "janine"
HAIR_SABRINA = "sabrina" #does not exist yet
HAIR_SABRINA = "sabrinaGSC"
HAIR_BLAINE = "blaine" #does not exist yet
HAIR_GIOVANNI = "giovanni" #does not exist yet
HAIR_WHITNEY = "whitney"

View File

@@ -313,12 +313,13 @@ def randomizePlayerOutfitUnlocked()
end
def convert_letter_to_number(letter, max_number = nil)
return 0 if !letter
return letter.ord if !max_number
return letter.ord % max_number
end
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 += 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
hat = hats_list[convert_letter_to_number(seed[0],hats_list.length)]
hat2 = hats_list[convert_letter_to_number(seed[1],hats_list.length)]
hat2 = nil if convert_letter_to_number(seed[2]) % 3 == 0 #1/3 chance of no 2nd hat
hat_color = convert_letter_to_number(seed[1],255)
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)
hat_color = 0 if convert_letter_to_number(seed[4]) % 2 == 0 #1/2 chance of no dyed hat
hat2_color = convert_letter_to_number(seed[5],255)
hat2_color = 0 if convert_letter_to_number(seed[6]) % 2 == 0
clothes = clothes_list[convert_letter_to_number(seed[3],clothes_list.length)]
clothes_color = convert_letter_to_number(seed[4],255)
clothes_color = 0 if convert_letter_to_number(seed[5]) % 2 == 0 #1/2 chance of no dyed clothes
clothes = clothes_list[convert_letter_to_number(seed[7],clothes_list.length)]
clothes_color = convert_letter_to_number(seed[8],255)
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_base = hairstyles_list[convert_letter_to_number(seed[6],hairstyles_list.length)]
hair_number = [1,2,3,4][convert_letter_to_number(seed[7],3)]
hair=getFullHairId(hair_base,hair_number)
hair_color = convert_letter_to_number(seed[12],255)
hair_color = 0 if convert_letter_to_number(seed[13]) % 2 == 0 #1/2 chance of no dyed hair
hair_color = convert_letter_to_number(seed[8],255)
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)]
echoln clothes
skin_tone = [1,2,3,4,5,6][convert_letter_to_number(seed[10],5)]
return TrainerAppearance.new(skin_tone,hat,clothes, hair,
hair_color, clothes_color, hat_color,hat2,hat2_color)
hair_color, clothes_color, hat_color)
end

View File

@@ -296,7 +296,7 @@ end
def getFusedPokemonIdFromSymbols(body_dex, head_dex)
bodyDexNum = GameData::Species.get(body_dex).id_number
headDexNum = GameData::Species.get(head_dex).id_number
return getFusedPokemonIdFromDexNum(body_dex, head_dex)
return getFusedPokemonIdFromDexNum(bodyDexNum, headDexNum)
end
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",
"name": "High-pony",
"name": "Ponytail",
"description": "A high ponytail reminiscent of Lopunny's fur",
"done": "yes",
"price": 500,
"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",
"name": "Hime",
@@ -321,7 +328,10 @@
},
{
"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",
@@ -506,6 +516,16 @@
"tags": "short, untied, spiky, thick, pokemon,celadon,",
"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",
"name": "Samurai"

View File

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

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/136/136.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