Files
IWaniHugThatGator-Demo-Public/game/00src/definitions/characters.rpy
2024-04-21 13:45:17 -05:00

2971 lines
110 KiB
Plaintext

# Remember if you do multiple layeredimages of the same character, you gotta put defaults for each!
# EVIDENTLY while I was testing out character shit, this current configuation of having attributes assigned to whole sprites
# under no groups doesn't replace sprites when a different attribute is called, it gets added ontop of the sprite that's
# currently shown
# EVEN MORE FUCKING EVIDENTLY, AS I DISCOVERED WHILE TRYING TO MAKE TRANSFORMS WORK,
# If you put attributes in the root of the layeredimage (i.e not in an group), they get applied everytime the tag is called.
# Not sprite, TAG. If you have a sprite like "olivia neutral" and you use a show statement like "show olivia" then the attributes
# in the root of the layeredimage get applied no matter what, even if you're just using it to change unrelated transform properties.
# THE BELOW INFORMATION PROBABLY IS WRONG, IT'S JUST RENPY DECIDING THAT 'None' IS A VALID INPUT TO PUT INTO ROTATIONS AND MAKES THINGS FUNKY. SEE TO THIS LATER.
# Due to the use of offset, rotations also become dumb. I guess the offset gets unapplied as soon as you mess with rotation, so you have to re-apply them.
# Probably has something to do with layeredimages and reapplying properties when called with the show statement now matter what
#
# WRONG, this causes the sprite to snap is if there was no offset
# show olivia:
# linear 3 rotate 180
#
# RIGHT, this will rotate in the correct spot
# show olivia:
# yoffset (offset of the sprite)
# linear 3 rotate 180
# Good thing renpy automatically crops images to the bounding box of visible pixels, because that probably means images with no pixels don't impact performance very much.
# Not using renpy's automatic displayable searching for layeredimages for the sake of readability
# TODO: Consider using layeredimage's automatic name parser for images on most things for mod support.
#
# INCO
#
# Tier 1
layeredimage inco:
xanchor 0.5
# This prevents overlapping transluscent layers being visible, making sure the sprite look like it's just one sprite.
# Possible downside is it eats up performance, possibly CPU and/or GPU. It's basically placebo in normal circumstances, but something to keep in mind.
# Actual downside is that calling this sprite in ATL distorts it, so only sprites that aren't meshed work I believe. Not a huge loss but very inconvenient.
# TODO: Consider turning off mesh rendering on sprites for mobile ports.
mesh True
# Renpy voodoo makes the textures not blurry when played at a lower resolution
gl_drawable_resolution False
# glasses, hook part for when glasses are down
# TODO: Make this not fucking suck
group face:
if_any "glasses"
attribute neutral default "spr_null"
attribute happy "spr_null"
attribute annoyed "spr_null"
attribute angry "spr_inco_glasses_down_hook"
attribute considering "spr_inco_glasses_down_hook"
attribute sad "spr_inco_glasses_down_hook"
attribute concerned "spr_null"
attribute smug "spr_null"
attribute surprised "spr_null"
attribute shocked "spr_inco_glasses_down_hook"
attribute skeptical "spr_null"
attribute somber "spr_inco_glasses_down_hook"
attribute concernedsmile "spr_null"
attribute gritting "spr_null"
group outfit:
attribute normal default "spr_inco_body_normal"
attribute gym "spr_inco_body_gym"
attribute prom "spr_inco_body_prom"
attribute promnojacket "spr_inco_body_promnojacket"
attribute shirt "spr_inco_body_shirt"
attribute snuggie "spr_inco_body_snuggie"
# body sweat
group sweat:
if_any "normal"
attribute sweat:
blend 'multiply'
"spr_inco_body_normal_sweat"
attribute nosweat "spr_null"
group sweat:
if_any "gym"
attribute sweat:
blend 'multiply'
"spr_inco_body_gym_sweat"
# hand
group carrying_item:
if_any "normal"
attribute carrying_nothing default "spr_inco_hand_open"
attribute carrying_bag "spr_inco_hand_closed"
# bag
group carrying_item:
if_any "normal"
attribute carrying_bag:
xoffset 300 yoffset 843
"spr_grocerybag_full"
# mug
group mug:
attribute muginco:
xoffset 607 yoffset 521 xzoom -1
"spr_mug_inco"
attribute mugvinny:
xoffset 607 yoffset 521 xzoom -1
"spr_mug_vinny"
attribute nomug "spr_null"
group blackeye:
attribute blackeye "spr_inco_blackeye"
attribute noblackeye default "spr_null"
# camera
group outfit if_any "camera":
attribute normal default "spr_camera1" xoffset 476 yoffset 338
attribute prom "spr_camera2" xoffset 476 yoffset 338
group camera_toggle:
attribute camera "spr_null"
attribute nocamera default "spr_null"
# expressions
# Faces (excluding eyes)
group face:
attribute neutral default "spr_null"
attribute happy "spr_inco_face_happy"
attribute annoyed "spr_inco_face_annoyed"
attribute angry "spr_inco_face_angry_face"
attribute considering "spr_inco_face_considering_face"
attribute sad "spr_inco_face_sad_face"
attribute concerned "spr_inco_face_sad_face"
attribute smug "spr_inco_face_smug"
attribute surprised "spr_inco_face_surprised"
attribute shocked "spr_inco_face_shocked_face"
attribute skeptical "spr_inco_face_considering_face"
attribute somber "spr_inco_face_somber_face"
attribute concernedsmile "spr_inco_face_somber_face"
attribute gritting "spr_inco_face_gritting"
attribute blank "spr_null"
# Eyes only
group face:
if_any "eyes"
attribute shocked "spr_inco_face_shocked_eyes"
attribute angry "spr_inco_face_angry_eyes"
attribute considering "spr_inco_face_considering_eyes"
attribute skeptical "spr_inco_face_considering_eyes"
attribute sad "spr_inco_face_sad_eyes"
attribute concerned "spr_inco_face_sad_face"
attribute concernedsmile "spr_inco_face_sad_eyes"
attribute somber "spr_inco_face_sad_eyes"
# Dummy group to control the eyes
group eye_toggle:
attribute eyes default "spr_null"
attribute noeyes "spr_null"
# face sweat
group sweat:
attribute sweat "spr_inco_face_sweat"
# glasses
group face:
if_any "glasses"
attribute neutral default "spr_inco_glasses_up"
attribute happy "spr_inco_glasses_up"
attribute annoyed "spr_inco_glasses_up"
attribute angry "spr_inco_glasses_down_frame"
attribute considering "spr_inco_glasses_down_frame"
attribute sad "spr_inco_glasses_down_frame"
attribute concerned "spr_inco_glasses_up"
attribute smug "spr_inco_glasses_up"
attribute surprised "spr_inco_glasses_up"
attribute shocked "spr_inco_glasses_down_frame"
attribute skeptical "spr_inco_glasses_up"
attribute somber "spr_inco_glasses_down_frame"
attribute concernedsmile "spr_inco_glasses_up"
attribute gritting "spr_inco_glasses_up"
# Dummy group to toggle glasses for the above face glasses group, as well as the one behind the body
group glasses:
attribute glasses default "spr_null"
attribute noglasses "spr_null"
image inco left = LayeredImageProxy("inco", Transform(xzoom=-1.0))
image inco right = LayeredImageProxy("inco", Transform(xzoom=1.0))
# Unfortunately, for ease of use for keeping the 'left' and 'right' attributes between sprites, we have to do this bloat.
# Tier 2
layeredimage inco furious:
xanchor 0.5
group outfit if_not "blackeye":
attribute normal default "spr_inco_furious"
attribute prom "spr_inco_prom_furious"
attribute shirt "spr_inco_shirt_furious"
# For the black eye version
group outfit if_any "blackeye":
attribute normal default "spr_inco_furious"
attribute prom "spr_inco_prom_furious_blackeye"
attribute shirt "spr_inco_shirt_furious"
# Inco furious in his shirt
# This is here so then when transitioning from a t1 sprite you don't have to manually input the blackeye attribute again
group blackeye:
attribute blackeye "spr_null"
attribute noblackeye "spr_null"
image inco furious left = LayeredImageProxy("inco furious", Transform(xzoom=-1.0))
image inco furious right = LayeredImageProxy("inco furious", Transform(xzoom=1.0))
layeredimage inco thinking:
xanchor 0.5
group outfit:
attribute normal default "spr_inco_thinking"
attribute prom "spr_inco_prom_thinking"
attribute snuggie "spr_inco_snuggie_thinking"
image inco thinking left = LayeredImageProxy("inco thinking", Transform(xzoom=-1.0))
image inco thinking right = LayeredImageProxy("inco thinking", Transform(xzoom=1.0))
layeredimage inco explaining:
xanchor 0.5
group outfit:
attribute normal default "spr_inco_explaining"
attribute prom "spr_inco_prom_explaining"
image inco explaining left = LayeredImageProxy("inco explaining", Transform(xzoom=-1.0))
image inco explaining right = LayeredImageProxy("inco explaining", Transform(xzoom=1.0))
layeredimage inco verysad:
xanchor 0.5
mesh True
gl_drawable_resolution False
group outfit:
attribute normal default "spr_inco_verysad"
attribute prom "spr_inco_prom_verysad"
attribute snuggie "spr_inco_snuggie_verysad"
# always "spr_inco_verysad"
group mug:
attribute muginco:
xoffset 607 yoffset 521 xzoom -1
"spr_mug_inco"
attribute mugvinny:
xoffset 607 yoffset 521 xzoom -1
"spr_mug_vinny"
attribute nomug "spr_null"
group carrying_item:
attribute carrying_bag:
xoffset 312 yoffset 813 xzoom -1.0
"spr_grocerybag_incoverysad"
attribute carrying_nothing "spr_null"
image inco verysad left = LayeredImageProxy("inco verysad", Transform(xzoom=-1.0))
image inco verysad right = LayeredImageProxy("inco verysad", Transform(xzoom=1.0))
layeredimage inco terrified:
xanchor 0.5
always "spr_inco_terrified"
image inco terrified left = LayeredImageProxy("inco terrified", Transform(xzoom=-1.0))
image inco terrified right = LayeredImageProxy("inco terrified", Transform(xzoom=1.0))
layeredimage inco unimpressed:
xanchor 0.5
group outfit if_not "blackeye":
attribute normal default "spr_inco_unimpressed"
attribute prom "spr_inco_prom_unimpressed"
# For the black eye version
group outfit if_any "blackeye":
attribute normal default "spr_inco_unimpressed"
attribute prom "spr_inco_prom_unimpressed_blackeye"
# This is here so then when transitioning from a t1 sprite you don't have to manually input the blackeye attribute again
group blackeye:
attribute blackeye "spr_null"
attribute noblackeye "spr_null"
image inco unimpressed left = LayeredImageProxy("inco unimpressed", Transform(xzoom=-1.0))
image inco unimpressed right = LayeredImageProxy("inco unimpressed", Transform(xzoom=1.0))
layeredimage inco yiiking:
xanchor 0.5
group outfit:
attribute normal default "spr_inco_yiiking"
# attribute prom "spr_inco_prom_falling" Is this intentional??
image inco yiiking left = LayeredImageProxy("inco yiiking", Transform(xzoom=-1.0))
image inco yiiking right = LayeredImageProxy("inco yiiking", Transform(xzoom=1.0))
# Tier 3
layeredimage inco falling:
xanchor 0.5
group outfit:
attribute normal default "spr_inco_falling"
attribute prom "spr_inco_prom_falling"
image inco falling left = LayeredImageProxy("inco falling", Transform(xzoom=-1.0))
image inco falling right = LayeredImageProxy("inco falling", Transform(xzoom=1.0))
#
# INCO AND OLIVIA GAMING COMBO SPRITE
#
layeredimage inco gaming:
xanchor 0.5
group variants:
attribute seated "spr_iogaming_seated"
attribute smitten "spr_iogaming_smitten"
attribute bitten "spr_iogaming_bitten"
image inco gaming left = LayeredImageProxy("inco gaming", Transform(xzoom=-1.0))
image inco gaming right = LayeredImageProxy("inco gaming", Transform(xzoom=1.0))
#
# INCO FUTURE
#
layeredimage inco future:
xanchor 0.5
mesh True
gl_drawable_resolution False
group bodies:
attribute e4 default "spr_inco_body_future_e4"
attribute e2 "spr_inco_body_future_e2"
group faces:
attribute neutral default "spr_null"
attribute annoyed "spr_inco_face_future_annoyed"
attribute concerned "spr_inco_face_future_concerned"
attribute grin "spr_inco_face_future_grin"
attribute sad "spr_inco_face_future_sad"
attribute incosad "spr_inco_face_sad_face"
attribute happy "spr_inco_face_future_happy"
attribute surprised "spr_inco_face_future_surprised"
attribute yelling1 "spr_inco_face_future_yelling1"
attribute yelling2 "spr_inco_face_future_yelling2"
group face:
if_any "noglasses"
attribute incosad "spr_inco_face_sad_eyes"
# glasses
group bodies if_any "glasses":
attribute e4 default "spr_inco_glasses_future_e4"
attribute e2 "spr_inco_glasses_future_e2"
# dummy group to toggle the above
group glasses_toggle:
attribute glasses default "spr_null"
attribute noglasses "spr_null"
image inco future left = LayeredImageProxy("inco future", Transform(xzoom=-1.0))
image inco future right = LayeredImageProxy("inco future", Transform(xzoom=1.0))
layeredimage inco future furious:
xanchor 0.5
always "spr_inco_future_e2_furious"
image inco furious left = LayeredImageProxy("inco furious", Transform(xzoom=-1.0))
image inco furious right = LayeredImageProxy("inco furious", Transform(xzoom=1.0))
#
# INCO AND OLIVIA COMBO SPRITE
#
# This whole thing is cursed but it's a good way to debloat the characters file.
# All the olivia attributes use the 'o_' prefix, while inco's is 'i_' with the exception of olivia's manual tail toggles and 'tailwrap' attribute
# TODO: Possibly bring back the other toggles
# TODO: Make the if_not's of tier 2's a variable to supply to the if_not, so that we aren't copy and pasting the whole list of strings.
# If you're trying to align Olivia and Inco to the sprite with their sprites before switching to this, you'll be typicaly
# using the percentage of the screen to move characters (setx(0.4), etc.), so when positioning their individual sprites to line up with incoolivia, do the following:
#
# Move them into position around a specific point (This is the point where incoolivia will spawn, or will be adjascent to). Thus, when doing choreo:
#
# Spawning them around a point where incoolivia will be, facing right:
# # Move them into position, wherever they are in the scene.
# show inco at movex([incoolivia position] - 0.127083)
# show olivia at movex([incoolivia position] + 0.072916)
# # then..
# hide olivia
# hide inco
# show incoolivia at setx([incoolivia position])
#
# Spawning incoolivia dependent on Inco's current position, facing right:
# # have inco in the scene first
# show inco at setx([inco position])
# # Move olivia into position
# show olivia at movex([inco position] + 0.2)
# # then...
# hide olivia
# hide inco
# show incoolivia at setx([inco position] + 0.127083)
#
# Spawning incoolivia dependent on Olivia's current position, facing right:
# # have olivia in the scene first
# show olivia at setx([olivia position])
# # Move inco into position
# show inco at movex([olivia position] - 0.2)
# # then...
# hide olivia
# hide inco
# show incoolivia at setx([olivia position] - 0.072916)
define olivia_tier_expressions = ["o_attentive", "o_embarassed", "o_excited", "o_furious",
"o_grumpy", "o_hmph", "o_hoodieflipoff", "o_hoodieblush", "o_ugh", "o_none"]
# These Olivia expressions don't have special tails
define olivia_normaltail_expressions = ["o_canteen", "o_canteeneyes", "o_hoodie"]
# A set of expressions and attributes that do not permit granular tail control.
define invalid_tail_manuals = olivia_tier_expressions + ["o_tailsock"]
layeredimage incoolivia:
xanchor 0.5
mesh True
gl_drawable_resolution False
# glasses, hook part for when glasses are down
# TODO: Make this not fucking suck
group face:
if_any "i_glasses"
attribute i_neutral default "spr_null"
attribute i_happy "spr_null"
attribute i_annoyed "spr_null"
attribute i_angry "spr_inco_glasses_down_hook" xoffset 107
attribute i_considering "spr_inco_glasses_down_hook" xoffset 107
attribute i_sad "spr_inco_glasses_down_hook" xoffset 107
attribute i_concerned "spr_null"
attribute i_smug "spr_null"
attribute i_surprised "spr_null"
attribute i_shocked "spr_inco_glasses_down_hook" xoffset 107
attribute i_skeptical "spr_null"
attribute i_somber "spr_inco_glasses_down_hook" xoffset 107
attribute i_concernedsmile "spr_null"
attribute i_gritting "spr_null"
# inco's body
group inco_outfit:
attribute i_normal default "spr_inco_pushing_base"
attribute i_prom "spr_inco_pushing_prom_base"
attribute i_shirt "spr_inco_pushing_shirt_base"
# expressions
# Faces (excluding eyes)
group face:
attribute i_neutral default "spr_null" xoffset 107
attribute i_happy "spr_inco_face_happy" xoffset 107
attribute i_annoyed "spr_inco_face_annoyed" xoffset 107
attribute i_angry "spr_inco_face_angry_face" xoffset 107
attribute i_considering "spr_inco_face_considering_face" xoffset 107
attribute i_sad "spr_inco_face_sad_face" xoffset 107
attribute i_concerned "spr_inco_face_sad_face" xoffset 107
attribute i_smug "spr_inco_face_smug" xoffset 107
attribute i_surprised "spr_inco_face_surprised" xoffset 107
attribute i_shocked "spr_inco_face_shocked_face" xoffset 107
attribute i_skeptical "spr_inco_face_considering_face" xoffset 107
attribute i_somber "spr_inco_face_somber_face" xoffset 107
attribute i_concernedsmile "spr_inco_face_somber_face" xoffset 107
attribute i_gritting "spr_inco_face_gritting" xoffset 107
attribute i_blank "spr_null"
# Eyes only
group face:
if_any "i_eyes"
attribute i_shocked "spr_inco_face_shocked_eyes" xoffset 107
attribute i_angry "spr_inco_face_angry_eyes" xoffset 107
attribute i_considering "spr_inco_face_considering_eyes" xoffset 107
attribute i_skeptical "spr_inco_face_considering_eyes" xoffset 107
attribute i_sad "spr_inco_face_sad_eyes" xoffset 107
attribute i_concerned "spr_inco_face_sad_eyes" xoffset 107
attribute i_concernedsmile "spr_inco_face_sad_eyes" xoffset 107
attribute i_somber "spr_inco_face_sad_eyes" xoffset 107
# Dummy group to control the eyes
group eye_toggle:
attribute i_eyes default "spr_null"
attribute i_noeyes "spr_null"
# glasses
group face:
if_any "i_glasses"
attribute i_neutral default "spr_inco_glasses_up" xoffset 107
attribute i_happy "spr_inco_glasses_up" xoffset 107
attribute i_annoyed "spr_inco_glasses_up" xoffset 107
attribute i_angry "spr_inco_glasses_down_frame" xoffset 107
attribute i_considering "spr_inco_glasses_down_frame" xoffset 107
attribute i_sad "spr_inco_glasses_down_frame" xoffset 107
attribute i_concerned "spr_inco_glasses_up" xoffset 107
attribute i_smug "spr_inco_glasses_up" xoffset 107
attribute i_surprised "spr_inco_glasses_up" xoffset 107
attribute i_shocked "spr_inco_glasses_down_frame" xoffset 107
attribute i_skeptical "spr_inco_glasses_up" xoffset 107
attribute i_somber "spr_inco_glasses_down_frame" xoffset 107
attribute i_concernedsmile "spr_inco_glasses_up" xoffset 107
attribute i_gritting "spr_inco_glasses_up" xoffset 107
# Dummy group to toggle glasses for the above face glasses group
group glasses:
attribute i_glasses default "spr_null"
attribute i_noglasses "spr_null"
# OLIVIA tails
# This is a big fucking mess
# TODO: make this shitty layeredimage not suck
# Only show these when tailwrap is not present and not using t2 expressions + tailsock sprites
group tails_manual if_not invalid_tail_manuals + [ "tailwrap" ]:
attribute t_neutral default "spr_olivia_tail_normal_neutral" xoffset 281 yoffset -150
attribute t_attentive "spr_olivia_tail_normal_attentive" xoffset 281 yoffset -150
attribute t_embarassed "spr_olivia_tail_normal_embarassed" xoffset 281 yoffset -150
attribute t_excited "spr_olivia_tail_normal_excited" xoffset 281 yoffset -150
attribute t_furious "spr_olivia_tail_normal_furious" xoffset 281 yoffset -150
attribute t_grumpy "spr_olivia_tail_normal_grumpy" xoffset 281 yoffset -150
attribute t_hmph"spr_olivia_tail_normal_hmph" xoffset 281 yoffset -150
attribute t_ugh "spr_olivia_tail_normal_ugh" xoffset 281
attribute t_none "spr_null"
# For when tailwrap is present, clip the tail sprite so the tailwrap sprite makes sense
group tails_manual if_not invalid_tail_manuals if_any "tailwrap":
attribute t_neutral default "spr_olivia_tail_normal_neutral" xoffset 281 + 300 yoffset -150 crop (300, 0, 906, 1500)
always if_any "o_attentive" "spr_olivia_tail_normal_attentive" xoffset 281 yoffset -150
always if_any "o_embarassed" "spr_olivia_tail_normal_embarassed" xoffset 281 yoffset -150
always if_any "o_excited" "spr_olivia_tail_normal_excited" xoffset 281 yoffset -150
always if_any "o_furious" "spr_olivia_tail_normal_furious" xoffset 281 yoffset -150
always if_any "o_grumpy" "spr_olivia_tail_normal_grumpy" xoffset 281 yoffset -150
always if_any "o_hmph" "spr_olivia_tail_normal_hmph" xoffset 281 yoffset -150
always if_any ["hoodieblush", "o_hoodieflipoff"] "spr_olivia_tail_normal_hoodie" xoffset 281 yoffset -150
always if_any "o_ugh" "spr_olivia_tail_normal_ugh" xoffset 281 yoffset -150
# tail sock variant
group tails_manual if_any "o_tailsock" if_not olivia_tier_expressions + [ "tailwrap" ]:
attribute t_neutral default "spr_olivia_tail_tailsock_neutral" xoffset 281 yoffset -150
group tail_toggle:
attribute o_notailsock default "spr_null"
attribute o_tailsock "spr_null"
# Inco's jacket
group jacketcover if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_nojacketcover default "spr_null"
attribute o_jacketcover "spr_olivia_incojacket_backsleeve" xoffset 281 yoffset -150
always "spr_olivia_wheelchair_back" xoffset 281 yoffset -150
# Inco's arms
group inco_outfit:
attribute i_normal default "spr_inco_pushing_arms"
attribute i_prom "spr_inco_pushing_prom_arms"
attribute i_shirt "spr_inco_pushing_shirt_arms"
group tailwrap if_not "o_none":
attribute tailwrap "spr_inco_pushing_tailwrap"
attribute notailwrap default "spr_null"
# OLIVIA the rest of it
group left_arm if_any "o_shirt" if_not ["o_normal", "o_e2dress", "o_e4dress"] + olivia_tier_expressions+olivia_normaltail_expressions:
attribute l_neutral default "spr_olivia_larm_shirt_neutral" xoffset 281 yoffset -150
attribute l_down "spr_olivia_larm_shirt_down" xoffset 281 yoffset -150
group left_arm if_any "o_normal" if_not ["o_shirt", "o_e2dress", "o_e4dress"] + olivia_tier_expressions+olivia_normaltail_expressions:
attribute l_neutral default "spr_olivia_larm_normal_neutral" xoffset 281 yoffset -150
attribute l_down "spr_olivia_larm_normal_down" xoffset 281 yoffset -150
group left_arm if_any ["o_e2dress", "o_e4dress"] if_not ["o_shirt", "o_normal"] + olivia_tier_expressions+olivia_normaltail_expressions:
attribute l_neutral default "spr_olivia_larm_e2dress_neutral" xoffset 281 yoffset -150
attribute l_down "spr_olivia_larm_e2dress_down" xoffset 281 yoffset -150
# Outfits
group outfit if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_normal default "spr_olivia_body_normal_neutral" xoffset 281 yoffset -150
attribute o_shirt "spr_olivia_body_shirt_neutral" xoffset 281 yoffset -150
attribute o_e1dress "spr_olivia_body_e1dress_neutral" xoffset 281 yoffset -150
attribute o_e2dress "spr_olivia_body_e2dress_neutral" xoffset 281 yoffset -150
attribute o_e3dress "spr_olivia_body_e3dress_neutral" xoffset 281 yoffset -150
attribute o_e4dress "spr_olivia_body_e4dress_neutral" xoffset 281 yoffset -150
attribute o_none "spr_null"
group expressions if_any "o_normal":
attribute o_attentive "spr_olivia_body_normal_attentive" xoffset 281 yoffset -150
attribute o_canteen "spr_olivia_body_normal_canteen" xoffset 281 yoffset -150
attribute o_canteeneyes "spr_olivia_body_normal_canteeneyes" xoffset 281 yoffset -150
attribute o_embarassed "spr_olivia_body_normal_embarassed" xoffset 281 yoffset -150
attribute o_excited "spr_olivia_body_normal_excited" xoffset 281 yoffset -150
attribute o_furious "spr_olivia_body_normal_furious" xoffset 281 yoffset -150
attribute o_grumpy "spr_olivia_body_normal_grumpy" xoffset 281 yoffset -150
attribute o_hmph "spr_olivia_body_normal_hmph" xoffset 281 yoffset -150
attribute o_hoodieblush "spr_olivia_body_normal_hoodieblush" xoffset 281 yoffset -150
attribute o_hoodieflipoff "spr_olivia_body_normal_hoodieflipoff" xoffset 281 yoffset -150
attribute o_hoodie "spr_olivia_body_normal_hoodie" xoffset 281 yoffset -150
attribute o_ugh "spr_olivia_body_normal_ugh" xoffset 281 yoffset -150
# Cancerous bloat that is necessary to give it the behavior of switching to t1 sprites like how it usually is with character's sprites.
# This just forces the tier2 attribute to a different one when it switches to a t1 face. If there's a better way to do this please fix it
attribute o_neutral "spr_null"
attribute o_angry "spr_null"
attribute o_annoyed "spr_null"
attribute o_annoyeddown "spr_null"
attribute o_annoyedconsidering "spr_null"
attribute o_cheerful "spr_null"
attribute o_considering "spr_null"
attribute o_grin "spr_null"
attribute o_grinconsidering "spr_null"
attribute o_grindown "spr_null"
attribute o_happy "spr_null"
attribute o_neutraldown "spr_null"
attribute o_sad "spr_null"
attribute o_sadforward "spr_null"
attribute o_shocked "spr_null"
attribute o_shockeddown "spr_null"
attribute o_skeptical "spr_null"
attribute o_somber "spr_null"
attribute o_somberdown "spr_null"
attribute o_surprised "spr_null"
attribute o_love "spr_null"
attribute o_devious "spr_null"
attribute o_disappointed "spr_null"
attribute o_disappointeddown "spr_null"
attribute o_gritting "spr_null"
attribute o_grittingdown "spr_null"
attribute o_surprisedconsidering "spr_null"
attribute o_worried "spr_null"
attribute o_angrydown "spr_null"
# e2 dress
group expressions if_any "o_e2dress":
attribute o_attentive "spr_olivia_body_e2dress_attentive" xoffset 281 yoffset -150
attribute o_furious "spr_olivia_body_e2dress_furious" xoffset 281 yoffset -150
attribute o_ugh "spr_olivia_body_e2dress_ugh" xoffset 281 yoffset -150
group faces if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_neutral default "spr_olivia_face_neutral" xoffset 281 yoffset -150
attribute o_angry "spr_olivia_face_angry" xoffset 281 yoffset -150
attribute o_annoyed "spr_olivia_face_annoyed" xoffset 281 yoffset -150
attribute o_annoyeddown "spr_olivia_face_annoyeddown" xoffset 281 yoffset -150
attribute o_annoyedconsidering "spr_olivia_face_annoyedconsidering" xoffset 281 yoffset -150
attribute o_cheerful "spr_olivia_face_cheerful" xoffset 281 yoffset -150
attribute o_considering "spr_olivia_face_considering" xoffset 281 yoffset -150
attribute o_grin "spr_olivia_face_grin" xoffset 281 yoffset -150
attribute o_grinconsidering "spr_olivia_face_grinconsidering" xoffset 281 yoffset -150
attribute o_grindown "spr_olivia_face_grindown" xoffset 281 yoffset -150
attribute o_happy "spr_olivia_face_happy" xoffset 281 yoffset -150
attribute o_neutraldown "spr_olivia_face_neutraldown" xoffset 281 yoffset -150
attribute o_sad "spr_olivia_face_sad" xoffset 281 yoffset -150
attribute o_sadforward "spr_olivia_face_sadforward" xoffset 281 yoffset -150
attribute o_shocked "spr_olivia_face_shocked" xoffset 281 yoffset -150
attribute o_shockeddown "spr_olivia_face_shockeddown" xoffset 281 yoffset -150
attribute o_skeptical "spr_olivia_face_skeptical" xoffset 281 yoffset -150
attribute o_somber "spr_olivia_face_somber" xoffset 281 yoffset -150
attribute o_somberdown "spr_olivia_face_somberdown" xoffset 281 yoffset -150
attribute o_surprised "spr_olivia_face_surprised" xoffset 281 yoffset -150
attribute o_love "spr_olivia_face_love" xoffset 281 yoffset -150
attribute o_devious "spr_olivia_face_devious" xoffset 281 yoffset -150
attribute o_disappointed "spr_olivia_face_disappointed" xoffset 281 yoffset -150
attribute o_disappointeddown "spr_olivia_face_disappointeddown" xoffset 281 yoffset -150
attribute o_gritting "spr_olivia_face_gritting" xoffset 281 yoffset -150
attribute o_grittingdown "spr_olivia_face_grittingdown" xoffset 281 yoffset -150
attribute o_surprisedconsidering "spr_olivia_face_surprisedconsidering" xoffset 281 yoffset -150
attribute o_worried "spr_olivia_face_worried" xoffset 281 yoffset -150
attribute o_angrydown "spr_olivia_face_angrydown" xoffset 281 yoffset -150
# this just corresponds with what the overlayed eyes-closed sprite goes with
group eyelid if_any "o_closedeyes" if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_neutral default "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
#attribute o_angry "spr_null"
#attribute o_annoyed "spr_null"
#attribute o_annoyeddown "spr_null"
#attribute o_annoyedconsidering "spr_null"
attribute o_cheerful "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_considering "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_grin "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_grinconsidering "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_grindown "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_happy "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_neutraldown "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
#attribute o_sad "spr_null"
#attribute o_sadforward "spr_null"
#attribute o_shocked "spr_null"
#attribute o_shockeddown "spr_null"
attribute o_skeptical "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_somber "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_somberdown "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_surprised "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_disappointed "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
attribute o_disappointeddown "spr_olivia_face_eyesclosed" xoffset 281 yoffset -150
group eyelidcontroller: # dummy group to control the above eyelids
attribute o_closedeyes "spr_null"
attribute o_openeyes default "spr_null"
# Blush
always if_not ['o_noblush'] + olivia_tier_expressions+olivia_normaltail_expressions "spr_olivia_blush" xoffset 281 yoffset -150
always if_not ['o_noblush'] + olivia_tier_expressions+olivia_normaltail_expressions "spr_olivia_blushadd" blend 'add' alpha 0.15 xoffset 281 yoffset -150
group blush:
attribute o_blush "spr_null"
attribute o_noblush default "spr_null"
always if_not olivia_tier_expressions+olivia_normaltail_expressions+["o_e4dress"]:
blend 'multiply' xoffset 281 yoffset -150
"spr_olivia_face_normal_shadow"
# Outfits
group hair if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_normal default "spr_olivia_hair_normal_neutral" xoffset 281 yoffset -150
attribute o_shirt "spr_olivia_hair_normal_neutral" xoffset 281 yoffset -150
attribute o_e1dress "spr_olivia_hair_normal_neutral" xoffset 281 yoffset -150
attribute o_e2dress "spr_olivia_hair_normal_neutral" xoffset 281 yoffset -150
attribute o_e3dress "spr_olivia_hair_normal_neutral" xoffset 281 yoffset -150
attribute o_e4dress "spr_olivia_hair_e4dress_neutral" xoffset 281 yoffset -150
attribute o_none "spr_null"
group hairpin:
xoffset 793 yoffset 386
attribute o_hairpin "spr_olivia_hairpin"
attribute o_nohairpin default "spr_null"
# Inco's jacket
group jacketcover if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_jacketcover "spr_olivia_incojacket_bodycover" xoffset 281 yoffset -150
group guts if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_guts_none default "spr_null"
attribute o_guts_top "spr_olivia_guts_top" xoffset 281 yoffset -150
attribute o_guts_middle "spr_olivia_guts_middle" xoffset 281 yoffset -150
attribute o_guts_sidefar "spr_olivia_guts_sidefar" xoffset 281 yoffset -150
always "spr_olivia_wheelchair_front" xoffset 281 yoffset -150
group painting:
attribute o_painting "spr_olivia_paintingprop" xoffset 281 yoffset -150
attribute o_nopainting default "spr_null"
# Outfits
group arm if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_normal default "spr_olivia_arm_normal_neutral" xoffset 281 yoffset -150
attribute o_shirt "spr_olivia_arm_shirt_neutral" xoffset 281 yoffset -150
attribute o_e1dress "spr_olivia_arm_e1dress_neutral" xoffset 281 yoffset -150
attribute o_e2dress "spr_olivia_arm_e2dress_neutral" xoffset 281 yoffset -150
attribute o_e3dress "spr_olivia_arm_e3dress_neutral" xoffset 281 yoffset -150
attribute o_e4dress "spr_olivia_arm_e2dress_neutral" xoffset 281 yoffset -150 # e4 dress's arm is the same as e2's
attribute o_none "spr_null"
group attentive_arm if_any "o_attentive":
attribute o_normal default "spr_olivia_arm_normal_attentive" xoffset 281 yoffset -150
attribute o_e2dress "spr_olivia_arm_e2dress_attentive" xoffset 281 yoffset -150
always if_any ["o_canteen", "o_canteeneyes"] "spr_olivia_arm_normal_canteen" xoffset 281 yoffset -150
always if_any "o_excited" "spr_olivia_arm_normal_excited" xoffset 281 yoffset -150
group attentive_arm if_any "o_furious":
attribute o_normal default "spr_olivia_arm_normal_furious" xoffset 281 yoffset -150
attribute o_e2dress "spr_olivia_arm_e2dress_furious" xoffset 281 yoffset -150
group attentive_arm if_any "o_ugh":
attribute o_normal default "spr_olivia_arm_normal_ugh" xoffset 281 yoffset -150
attribute o_e2dress "spr_olivia_arm_e2dress_ugh" xoffset 281 yoffset -150
# Inco's jacket
group jacketcover if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_jacketcover "spr_olivia_incojacket_armcover" xoffset 281 yoffset -150
group guts if_not olivia_tier_expressions+olivia_normaltail_expressions:
attribute o_guts_sidenear "spr_olivia_guts_sidenear" xoffset 281 yoffset -150
image incoolivia left = LayeredImageProxy("incoolivia", Transform(xzoom=-1.0))
image incoolivia right = LayeredImageProxy("incoolivia", Transform(xzoom=1.0))
#
# OLIVIA
#
# TIER 1
layeredimage olivia:
xanchor 0.5
yoffset -150
mesh True
gl_drawable_resolution False
# normal tails
group tails_manual if_not "tailsock":
attribute t_neutral default "spr_olivia_tail_normal_neutral"
attribute t_attentive "spr_olivia_tail_normal_attentive"
attribute t_embarassed "spr_olivia_tail_normal_embarassed"
attribute t_excited "spr_olivia_tail_normal_excited"
attribute t_furious "spr_olivia_tail_normal_furious"
attribute t_grumpy "spr_olivia_tail_normal_grumpy"
attribute t_hmph"spr_olivia_tail_normal_hmph"
attribute t_hoodie "spr_olivia_tail_normal_hoodie"
attribute t_ugh "spr_olivia_tail_normal_ugh"
attribute t_none "spr_null"
# tail sock variant
group tails_manual if_any "tailsock":
attribute t_neutral default "spr_olivia_tail_tailsock_neutral"
group tail_toggle:
attribute notailsock default "spr_null"
attribute tailsock "spr_null"
# Inco's jacket
group jacketcover:
attribute nojacketcover default "spr_null"
attribute jacketcover "spr_olivia_incojacket_backsleeve"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
group left_arm if_not ["shirt", "e4dress", "e2dress"] if_any "normal":
attribute l_neutral default if_not "nowheelchair" "spr_olivia_larm_normal_neutral"
attribute l_down default if_any "nowheelchair" "spr_olivia_larm_normal_down"
group left_arm if_not ["normal", "e4dress", "e2dress"] if_any "shirt":
attribute l_neutral default if_not "nowheelchair" "spr_olivia_larm_shirt_neutral"
attribute l_down default if_any "nowheelchair" "spr_olivia_larm_shirt_down"
group left_arm if_not ["normal", "shirt"] if_any ["e4dress", "e2dress"]:
attribute l_neutral default if_not "nowheelchair" "spr_olivia_larm_e2dress_neutral"
attribute l_down default if_any "nowheelchair" "spr_olivia_larm_e2dress_down"
# Outfits
group bodies:
attribute normal default "spr_olivia_body_normal_neutral"
attribute shirt "spr_olivia_body_shirt_neutral"
attribute e1dress "spr_olivia_body_e1dress_neutral"
attribute e2dress "spr_olivia_body_e2dress_neutral"
attribute e3dress "spr_olivia_body_e3dress_neutral"
attribute e4dress "spr_olivia_body_e4dress_neutral"
group faces:
attribute neutral default "spr_olivia_face_neutral"
attribute angry "spr_olivia_face_angry"
attribute annoyed "spr_olivia_face_annoyed"
attribute annoyeddown "spr_olivia_face_annoyeddown"
attribute annoyedconsidering "spr_olivia_face_annoyedconsidering"
attribute cheerful "spr_olivia_face_cheerful"
attribute considering "spr_olivia_face_considering"
attribute grin "spr_olivia_face_grin"
attribute grinconsidering "spr_olivia_face_grinconsidering"
attribute grindown "spr_olivia_face_grindown"
attribute happy "spr_olivia_face_happy"
attribute neutraldown "spr_olivia_face_neutraldown"
attribute sad "spr_olivia_face_sad"
attribute sadforward "spr_olivia_face_sadforward"
attribute shocked "spr_olivia_face_shocked"
attribute shockeddown "spr_olivia_face_shockeddown"
attribute skeptical "spr_olivia_face_skeptical"
attribute somber "spr_olivia_face_somber"
attribute somberdown "spr_olivia_face_somberdown"
attribute surprised "spr_olivia_face_surprised"
attribute love "spr_olivia_face_love"
attribute devious "spr_olivia_face_devious"
attribute disappointed "spr_olivia_face_disappointed"
attribute disappointeddown "spr_olivia_face_disappointeddown"
attribute gritting "spr_olivia_face_gritting"
attribute grittingdown "spr_olivia_face_grittingdown"
attribute surprisedconsidering "spr_olivia_face_surprisedconsidering"
attribute worried "spr_olivia_face_worried"
attribute angrydown "spr_olivia_face_angrydown"
group eyelid if_any "closedeyes": # this just corresponds with what the overlayed eyes-closed sprite goes with
attribute neutral default "spr_olivia_face_eyesclosed"
attribute angry "spr_null"
attribute annoyed "spr_null"
attribute annoyeddown "spr_null"
attribute annoyedconsidering "spr_null"
attribute cheerful "spr_olivia_face_eyesclosed"
attribute considering "spr_olivia_face_eyesclosed"
attribute grin "spr_olivia_face_eyesclosed"
attribute grinconsidering "spr_olivia_face_eyesclosed"
attribute grindown "spr_olivia_face_eyesclosed"
attribute happy "spr_olivia_face_eyesclosed"
attribute neutraldown "spr_olivia_face_eyesclosed"
attribute sad "spr_null"
attribute sadforward "spr_null"
attribute shocked "spr_null"
attribute shockeddown "spr_null"
attribute skeptical "spr_olivia_face_eyesclosed"
attribute somber "spr_olivia_face_eyesclosed"
attribute somberdown "spr_olivia_face_eyesclosed"
attribute surprised "spr_olivia_face_eyesclosed"
attribute love "spr_null"
attribute disappointed "spr_olivia_face_eyesclosed"
attribute disappointeddown "spr_olivia_face_eyesclosed"
group eyelidcontroller: # dummy group to control the above eyelids
attribute closedeyes "spr_null"
attribute openeyes default "spr_null"
# Blush
always if_not 'noblush' "spr_olivia_blush"
always if_not 'noblush' "spr_olivia_blushadd" blend 'add' alpha 0.15
group blush:
attribute blush "spr_null"
attribute noblush default "spr_null"
always if_not 'e4dress':
blend 'multiply'
"spr_olivia_face_normal_shadow"
# Outfits
group hair:
attribute normal default "spr_olivia_hair_normal_neutral"
attribute shirt "spr_olivia_hair_normal_neutral"
attribute e1dress "spr_olivia_hair_normal_neutral"
attribute e2dress "spr_olivia_hair_normal_neutral"
attribute e3dress "spr_olivia_hair_normal_neutral"
attribute e4dress "spr_olivia_hair_e4dress_neutral"
group hairpin:
xoffset 512 yoffset 536
attribute hairpin "spr_olivia_hairpin"
attribute nohairpin default "spr_null"
# Inco's jacket
group jacketcover:
attribute jacketcover "spr_olivia_incojacket_bodycover"
# Plushie
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
# Wani toy
# If you need to do little animations with the little devil's spawn, 'show' it by itself and then use pos to align it with the sprite's pos and offset to actually move it
# to her hand and do what you need by manipulating offset. Don't call this attribute if you need to move it.
# When doing that, the offset should be 212 xoffset 825 yoffset i believe (aligns need to be 0.5). Use the layeredimage in images.rpy
group toy:
attribute toy:
xoffset 764 yoffset 824
"spr_wanitoy_gator"
attribute notoy default "spr_null"
group mug:
attribute mug:
xoffset 750 yoffset 746 xzoom -1
"spr_mug_olivia"
attribute nomug "spr_null"
group guts:
attribute guts_none default "spr_null"
attribute guts_top "spr_olivia_guts_top"
attribute guts_middle "spr_olivia_guts_middle"
attribute guts_sidefar "spr_olivia_guts_sidefar"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
group painting:
attribute painting "spr_olivia_paintingprop"
attribute nopainting default "spr_null"
# Outfits
group arm:
attribute normal default "spr_olivia_arm_normal_neutral"
attribute shirt "spr_olivia_arm_shirt_neutral"
attribute e1dress "spr_olivia_arm_e1dress_neutral"
attribute e2dress "spr_olivia_arm_e2dress_neutral"
attribute e3dress "spr_olivia_arm_e3dress_neutral"
attribute e4dress "spr_olivia_arm_e2dress_neutral" # e4 dress's arm is the same as e2's
# Inco's jacket
group jacketcover:
attribute jacketcover "spr_olivia_incojacket_armcover"
group guts:
attribute guts_sidenear "spr_olivia_guts_sidenear"
image olivia left = LayeredImageProxy("olivia", Transform(xzoom=-1.0))
image olivia right = LayeredImageProxy("olivia", Transform(xzoom=1.0))
layeredimage olivia pool:
xanchor 0.5
yoffset -150
mesh True
gl_drawable_resolution False
always "spr_olivia_body_pool"
group faces:
attribute neutral default "spr_olivia_face_neutral"
attribute angry "spr_olivia_face_angry"
attribute annoyed "spr_olivia_face_annoyed"
attribute annoyeddown "spr_olivia_face_annoyeddown"
attribute annoyedconsidering "spr_olivia_face_annoyedconsidering"
attribute cheerful "spr_olivia_face_cheerful"
attribute considering "spr_olivia_face_considering"
attribute grin "spr_olivia_face_grin"
attribute grinconsidering "spr_olivia_face_grinconsidering"
attribute grindown "spr_olivia_face_grindown"
attribute happy "spr_olivia_face_happy"
attribute neutraldown "spr_olivia_face_neutraldown"
attribute sad "spr_olivia_face_sad"
attribute sadforward "spr_olivia_face_sadforward"
attribute shocked "spr_olivia_face_shocked"
attribute shockeddown "spr_olivia_face_shockeddown"
attribute skeptical "spr_olivia_face_skeptical"
attribute somber "spr_olivia_face_somber"
attribute somberdown "spr_olivia_face_somberdown"
attribute surprised "spr_olivia_face_surprised"
attribute love "spr_olivia_face_love"
attribute devious "spr_olivia_face_devious"
attribute disappointed "spr_olivia_face_disappointed"
attribute disappointeddown "spr_olivia_face_disappointeddown"
attribute gritting "spr_olivia_face_gritting"
attribute grittingdown "spr_olivia_face_grittingdown"
attribute surprisedconsidering "spr_olivia_face_surprisedconsidering"
attribute worried "spr_olivia_face_worried"
attribute angrydown "spr_olivia_face_angrydown"
group eyelid if_any "closedeyes": # this just corresponds with what the overlayed eyes-closed sprite goes with
attribute neutral default "spr_olivia_face_eyesclosed"
attribute angry "spr_null"
attribute annoyed "spr_null"
attribute annoyeddown "spr_null"
attribute annoyedconsidering "spr_null"
attribute cheerful "spr_olivia_face_eyesclosed"
attribute considering "spr_olivia_face_eyesclosed"
attribute grin "spr_olivia_face_eyesclosed"
attribute grinconsidering "spr_olivia_face_eyesclosed"
attribute grindown "spr_olivia_face_eyesclosed"
attribute happy "spr_olivia_face_eyesclosed"
attribute neutraldown "spr_olivia_face_eyesclosed"
attribute sad "spr_null"
attribute sadforward "spr_null"
attribute shocked "spr_null"
attribute shockeddown "spr_null"
attribute skeptical "spr_olivia_face_eyesclosed"
attribute somber "spr_olivia_face_eyesclosed"
attribute somberdown "spr_olivia_face_eyesclosed"
attribute surprised "spr_olivia_face_eyesclosed"
attribute love "spr_null"
attribute disappointed "spr_olivia_face_eyesclosed"
attribute disappointeddown "spr_olivia_face_eyesclosed"
group eyelidcontroller: # dummy group to control the above eyelids
attribute closedeyes "spr_null"
attribute openeyes default "spr_null"
# Blush
always if_not 'noblush' "spr_olivia_blush"
always if_not 'noblush' "spr_olivia_blushadd" blend 'add' alpha 0.15
group blush:
attribute blush "spr_null"
attribute noblush default "spr_null"
always "spr_olivia_hair_pool"
# TODO: See about having a transform applied to the droplets so when she's shown it'll move in and fade out over time.
group droplets:
attribute droplets default "spr_olivia_droplets_pool"
attribute nodroplets "spr_null"
image olivia pool left = LayeredImageProxy("olivia pool", Transform(xzoom=-1.0))
image olivia pool right = LayeredImageProxy("olivia pool", Transform(xzoom=1.0))
layeredimage oliviatail:
xanchor 0.5
yoffset -150
always "spr_olivia_tail_pool"
image oliviatail right = Transform("oliviatail", xzoom=-1.0)
image oliviatail left = Transform("oliviatail", xzoom=-1.0)
layeredimage olivia kneeling:
xanchor 0.5
yoffset -150
mesh True
gl_drawable_resolution False
group outfit:
attribute normal default "spr_olivia_body_kneeling_neutral"
attribute shirt "spr_olivia_body_kneelingshirt_neutral"
group faces:
attribute neutral default "spr_olivia_face_neutral"
attribute angry "spr_olivia_face_angry"
attribute annoyed "spr_olivia_face_annoyed"
attribute annoyeddown "spr_olivia_face_annoyeddown"
attribute annoyedconsidering "spr_olivia_face_annoyedconsidering"
attribute cheerful "spr_olivia_face_cheerful"
attribute considering "spr_olivia_face_considering"
attribute grin "spr_olivia_face_grin"
attribute grinconsidering "spr_olivia_face_grinconsidering"
attribute grindown "spr_olivia_face_grindown"
attribute happy "spr_olivia_face_happy"
attribute neutraldown "spr_olivia_face_neutraldown"
attribute sad "spr_olivia_face_sad"
attribute sadforward "spr_olivia_face_sadforward"
attribute shocked "spr_olivia_face_shocked"
attribute shockeddown "spr_olivia_face_shockeddown"
attribute skeptical "spr_olivia_face_skeptical"
attribute somber "spr_olivia_face_somber"
attribute somberdown "spr_olivia_face_somberdown"
attribute surprised "spr_olivia_face_surprised"
attribute love "spr_olivia_face_love"
attribute devious "spr_olivia_face_devious"
attribute disappointed "spr_olivia_face_disappointed"
attribute disappointeddown "spr_olivia_face_disappointeddown"
attribute gritting "spr_olivia_face_gritting"
attribute grittingdown "spr_olivia_face_grittingdown"
attribute surprisedconsidering "spr_olivia_face_surprisedconsidering"
attribute worried "spr_olivia_face_worried"
attribute angrydown "spr_olivia_face_angrydown"
group eyelid if_any "closedeyes": # this just corresponds with what the overlayed eyes-closed sprite goes with
attribute neutral default "spr_olivia_face_eyesclosed"
attribute angry "spr_null"
attribute annoyed "spr_null"
attribute annoyeddown "spr_null"
attribute annoyedconsidering "spr_null"
attribute cheerful "spr_olivia_face_eyesclosed"
attribute considering "spr_olivia_face_eyesclosed"
attribute grin "spr_olivia_face_eyesclosed"
attribute grinconsidering "spr_olivia_face_eyesclosed"
attribute grindown "spr_olivia_face_eyesclosed"
attribute happy "spr_olivia_face_eyesclosed"
attribute neutraldown "spr_olivia_face_eyesclosed"
attribute sad "spr_null"
attribute sadforward "spr_null"
attribute shocked "spr_null"
attribute shockeddown "spr_null"
attribute skeptical "spr_olivia_face_eyesclosed"
attribute somber "spr_olivia_face_eyesclosed"
attribute somberdown "spr_olivia_face_eyesclosed"
attribute surprised "spr_olivia_face_eyesclosed"
attribute love "spr_null"
attribute disappointed "spr_olivia_face_eyesclosed"
attribute disappointeddown "spr_olivia_face_eyesclosed"
group eyelidcontroller: # dummy group to control the above eyelids
attribute closedeyes "spr_null"
attribute openeyes default "spr_null"
# Blush
always if_not 'noblush' "spr_olivia_blush"
always if_not 'noblush' "spr_olivia_blushadd" blend 'add' alpha 0.15
group blush:
attribute blush "spr_null"
attribute noblush default "spr_null"
always:
blend 'multiply'
"spr_olivia_face_normal_shadow"
always "spr_olivia_hair_normal_neutral"
image olivia kneeling left = LayeredImageProxy("olivia kneeling", Transform(xzoom=-1.0))
image olivia kneeling right = LayeredImageProxy("olivia kneeling", Transform(xzoom=1.0))
#
# OLIVIA FUTURE
#
layeredimage olivia future:
xanchor 0.5
yoffset -150
mesh True
gl_drawable_resolution False
group tails_manual if_not "e4":
attribute t_neutral default "spr_olivia_tail_normal_neutral"
attribute t_attentive "spr_olivia_tail_normal_attentive"
attribute t_embarassed "spr_olivia_tail_normal_embarassed"
attribute t_excited "spr_olivia_tail_normal_excited"
attribute t_furious "spr_olivia_tail_normal_furious"
attribute t_grumpy "spr_olivia_tail_normal_grumpy"
attribute t_hmph "spr_olivia_tail_normal_hmph"
attribute t_slam "spr_olivia_shockeddown_tail"
attribute t_hoodie "spr_olivia_tail_normal_hoodie"
attribute t_ugh "spr_olivia_tail_normal_ugh"
attribute t_blur "spr_olivia_tail_normal_blurred"
attribute t_none "spr_null"
# Use e4 tail variants if using e4
group tails_manual if_any "e4":
attribute t_neutral default "spr_olivia_tail_future_e4_neutral"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
group outfit:
attribute e4 default "spr_olivia_body_future_e4_neutral"
attribute e2 "spr_olivia_body_future_e2_neutral"
group faces_e2 if_any "e2":
attribute neutral default "spr_olivia_face_future_e2_neutral"
attribute angry "spr_olivia_face_future_e2_angry"
attribute annoyed "spr_olivia_face_future_e2_annoyed"
attribute neutralclosed "spr_olivia_face_future_e2_neutralclosed"
attribute considering "spr_olivia_face_future_e2_considering"
attribute neutraldown "spr_olivia_face_future_e2_neutraldown"
attribute saddown "spr_olivia_face_future_e2_saddown"
attribute shocked "spr_olivia_face_future_e2_shocked"
attribute skeptical "spr_olivia_face_e2_skeptical"
attribute somber "spr_olivia_face_future_e2_somber"
attribute somberdown "spr_olivia_face_future_e2_somberdown"
group faces_e4 if_any "e4":
attribute neutral default "spr_olivia_face_future_e4_neutral"
attribute grinconsidering "spr_olivia_face_future_e4_grinconsidering"
attribute grin "spr_olivia_face_future_e4_grin"
attribute grindown "spr_olivia_face_future_e4_grindown"
attribute considering "spr_olivia_face_future_e4_considering"
attribute skeptical "spr_olivia_face_future_e4_skeptical"
attribute somber "spr_olivia_face_future_e4_somber"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
group arm:
attribute e4 default "spr_olivia_arm_future_e4_neutral"
attribute e2 "spr_olivia_arm_future_e2_neutral"
image olivia future left = LayeredImageProxy("olivia future", Transform(xzoom=-1.0))
image olivia future right = LayeredImageProxy("olivia future", Transform(xzoom=1.0))
layeredimage olivia future furious:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_furious"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
group body:
attribute nocrying default "spr_olivia_body_future_e2_furious"
attribute crying "spr_olivia_body_future_e2_furious_crying"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
always "spr_olivia_arm_future_e2_furious"
image olivia future furious left = LayeredImageProxy("olivia future furious", Transform(xzoom=-1.0))
image olivia future furious right = LayeredImageProxy("olivia future furious", Transform(xzoom=1.0))
# TIER 2
# DEAR GOD THE BLOAT
layeredimage olivia attentive:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_attentive"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
group outfit:
attribute normal default "spr_olivia_body_normal_attentive"
attribute e2dress "spr_olivia_body_e2dress_attentive"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group toy:
attribute toy:
xoffset 764 yoffset 824
"spr_wanitoy_gator"
attribute notoy default "spr_null"
group mug:
attribute mug:
xoffset 750 yoffset 746 xzoom -1
"spr_mug_olivia"
attribute nomug "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
group outfit:
attribute normal default "spr_olivia_arm_normal_attentive"
attribute e2dress "spr_olivia_arm_e2dress_attentive"
image olivia attentive left = LayeredImageProxy("olivia attentive", Transform(xzoom=-1.0))
image olivia attentive right = LayeredImageProxy("olivia attentive", Transform(xzoom=1.0))
layeredimage olivia canteen:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_neutral"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_canteen"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
always "spr_olivia_arm_normal_canteen"
image olivia canteen left = LayeredImageProxy("olivia canteen", Transform(xzoom=-1.0))
image olivia canteen right = LayeredImageProxy("olivia canteen", Transform(xzoom=1.0))
layeredimage olivia canteeneyes:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_neutral"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_canteeneyes"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
always "spr_olivia_arm_normal_canteen"
image olivia canteeneyes left = LayeredImageProxy("olivia canteeneyes", Transform(xzoom=-1.0))
image olivia canteeneyes right = LayeredImageProxy("olivia canteeneyes", Transform(xzoom=1.0))
layeredimage olivia embarassed:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_embarassed"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_embarassed"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
image olivia embarassed left = LayeredImageProxy("olivia embarassed", Transform(xzoom=-1.0))
image olivia embarassed right = LayeredImageProxy("olivia embarassed", Transform(xzoom=1.0))
layeredimage olivia excited:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_excited"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_excited"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
always "spr_olivia_arm_normal_excited"
group hairpin:
anchor (0.5,0.5)
xoffset 780 yoffset 560
rotate -18
attribute hairpin "spr_olivia_hairpin"
attribute nohairpin default "spr_null"
image olivia excited left = LayeredImageProxy("olivia excited", Transform(xzoom=-1.0))
image olivia excited right = LayeredImageProxy("olivia excited", Transform(xzoom=1.0))
layeredimage olivia furious:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_furious"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
# body
group outfit:
attribute normal default "spr_olivia_body_normal_furious"
attribute e2dress "spr_olivia_body_e2dress_furious"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
# arms
group outfit:
attribute normal default "spr_olivia_arm_normal_furious"
attribute e2dress "spr_olivia_arm_e2dress_furious"
image olivia furious left = LayeredImageProxy("olivia furious", Transform(xzoom=-1.0))
image olivia furious right = LayeredImageProxy("olivia furious", Transform(xzoom=1.0))
layeredimage olivia grumpy:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_grumpy"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_grumpy"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
image olivia grumpy left = LayeredImageProxy("olivia grumpy", Transform(xzoom=-1.0))
image olivia grumpy right = LayeredImageProxy("olivia grumpy", Transform(xzoom=1.0))
layeredimage olivia hmph:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
group tails:
attribute tailsock "spr_olivia_tail_tailsock_neutral"
attribute notailsock default "spr_olivia_tail_normal_hmph"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_hmph"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
image olivia hmph left = LayeredImageProxy("olivia hmph", Transform(xzoom=-1.0))
image olivia hmph right = LayeredImageProxy("olivia hmph", Transform(xzoom=1.0))
layeredimage olivia hoodie:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_neutral"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_hoodie"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
image olivia hoodie left = LayeredImageProxy("olivia hoodie", Transform(xzoom=-1.0))
image olivia hoodie right = LayeredImageProxy("olivia hoodie", Transform(xzoom=1.0))
layeredimage olivia hoodieblush:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_hoodie"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_hoodieblush"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
image olivia hoodieblush left = LayeredImageProxy("olivia hoodieblush", Transform(xzoom=-1.0))
image olivia hoodieblush right = LayeredImageProxy("olivia hoodieblush", Transform(xzoom=1.0))
layeredimage olivia hoodieflipoff:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_hoodie"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
always "spr_olivia_body_normal_hoodieflipoff"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
image olivia hoodieflipoff left = LayeredImageProxy("olivia hoodieflipoff", Transform(xzoom=-1.0))
image olivia hoodieflipoff right = LayeredImageProxy("olivia hoodieflipoff", Transform(xzoom=1.0))
layeredimage olivia ugh:
xanchor 0.5 yoffset -150 mesh True
gl_drawable_resolution False
always "spr_olivia_tail_normal_ugh"
group wheelchair_back:
attribute wheelchair default "spr_olivia_wheelchair_back"
attribute nowheelchair "spr_null"
group outfit:
attribute normal default "spr_olivia_body_normal_ugh"
attribute e2dress "spr_olivia_body_e2dress_ugh"
group plushie:
attribute plushie:
xoffset 617 yoffset 800
"spr_gatorplushie_lap"
attribute noplushie default "spr_null"
group wheelchair_front:
attribute wheelchair default "spr_olivia_wheelchair_front"
attribute nowheelchair "spr_null"
group outfit:
attribute normal default "spr_olivia_arm_normal_ugh"
attribute e2dress "spr_olivia_arm_e2dress_ugh"
image olivia ugh left = LayeredImageProxy("olivia ugh", Transform(xzoom=-1.0))
image olivia ugh right = LayeredImageProxy("olivia ugh", Transform(xzoom=1.0))
#
# BEN
#
# Tier 1
layeredimage ben:
xanchor 0.5
mesh True
gl_drawable_resolution False
group outfit:
attribute normal default "spr_ben_body_normal"
attribute prom "spr_ben_body_prom"
# camera
group camera:
attribute camera "spr_camera2" xoffset 399 yoffset 372
attribute nocamera default "spr_null"
group face:
attribute neutral default "spr_ben_face_neutral"
attribute angry "spr_ben_face_angry"
attribute considering "spr_ben_face_considering"
attribute explaining "spr_ben_face_explaining"
attribute happy "spr_ben_face_happy"
attribute sad "spr_ben_face_sad"
attribute shocked "spr_ben_face_shocked"
attribute unimpressed "spr_ben_face_unimpressed"
attribute skeptical "spr_ben_face_skeptical"
attribute surprised "spr_ben_face_surprised"
attribute cheerfulface "spr_ben_face_cheerful"
attribute grin "spr_ben_face_grin"
group injury:
attribute injury "spr_ben_injury"
attribute noinjury default "spr_null"
# hair
group outfit:
attribute normal default "spr_ben_hair_normal"
attribute prom "spr_ben_hair_prom"
group glasses:
attribute glasses default "spr_ben_glasses"
attribute glassescracked "spr_ben_glassescracked"
attribute noglasses "spr_null"
image ben left = LayeredImageProxy("ben", Transform(xzoom=-1.0))
image ben right = LayeredImageProxy("ben", Transform(xzoom=1.0))
# Tier 2
layeredimage ben apathetic:
xanchor 0.5
always "spr_ben_apathetic"
image ben apathetic left = LayeredImageProxy("ben apathetic", Transform(xzoom=-1.0))
image ben apathetic right = LayeredImageProxy("ben apathetic", Transform(xzoom=1.0))
layeredimage ben verysad:
xanchor 0.5
group outfit:
attribute normal default "spr_ben_verysad"
attribute prom "spr_ben_prom_verysad"
image ben verysad left = LayeredImageProxy("ben verysad", Transform(xzoom=-1.0))
image ben verysad right = LayeredImageProxy("ben verysad", Transform(xzoom=1.0))
layeredimage ben devious:
xanchor 0.5
always "spr_ben_devious"
image ben devious left = LayeredImageProxy("ben devious", Transform(xzoom=-1.0))
image ben devious right = LayeredImageProxy("ben devious", Transform(xzoom=1.0))
layeredimage ben nervous:
xanchor 0.5
always "spr_ben_nervous"
image ben nervous left = LayeredImageProxy("ben nervous", Transform(xzoom=-1.0))
image ben nervous right = LayeredImageProxy("ben nervous", Transform(xzoom=1.0))
layeredimage ben sheepish:
xanchor 0.5
group outfit:
attribute normal default "spr_ben_sheepish"
attribute prom "spr_ben_prom_sheepish"
image ben sheepish left = LayeredImageProxy("ben sheepish", Transform(xzoom=-1.0))
image ben sheepish right = LayeredImageProxy("ben sheepish", Transform(xzoom=1.0))
layeredimage ben evil:
xanchor 0.5
always "spr_ben_evil"
image ben evil left = LayeredImageProxy("ben evil", Transform(xzoom=-1.0))
image ben evil right = LayeredImageProxy("ben evil", Transform(xzoom=1.0))
layeredimage ben cheerful:
xanchor 0.5
mesh True
gl_drawable_resolution False
always "spr_ben_body_normal_cheerful"
always "spr_ben_face_cheerful"
always "spr_ben_hair_normal"
group glasses:
attribute glasses default "spr_ben_glasses"
attribute noglasses "spr_null"
always "spr_ben_body_normal_cheerfularm"
image ben cheerful left = LayeredImageProxy("ben cheerful", Transform(xzoom=-1.0))
image ben cheerful right = LayeredImageProxy("ben cheerful", Transform(xzoom=1.0))
#
# DAMIEN
#
# Tier 1
layeredimage damien:
xanchor 0.5
mesh True
gl_drawable_resolution False
# body
group outfit:
attribute normal default "spr_damien_body_normal"
attribute gym "spr_damien_body_gym"
attribute prom "spr_damien_body_prom"
attribute future "spr_damien_body_future"
group face:
attribute neutral default "spr_damien_face_neutral"
attribute angry "spr_damien_face_angry"
attribute angryup "spr_damien_face_angryup"
attribute angryconsidering "spr_damien_face_angryconsidering"
attribute angrydown "spr_damien_face_angrydown"
attribute considering "spr_damien_face_considering"
attribute neutralconsidering "spr_damien_face_neutralconsidering"
attribute happy "spr_damien_face_happy"
attribute pog "spr_damien_face_pog"
attribute sad "spr_damien_face_sad"
attribute sadforward "spr_damien_face_sadforward"
attribute shocked "spr_damien_face_shocked"
attribute skeptical "spr_damien_face_skeptical"
attribute skepticaldown "spr_damien_face_skepticaldown"
attribute retardstare "spr_damien_face_retardstare"
attribute unimpressed "spr_damien_face_unimpressed"
attribute cheerfulface "spr_damien_face_cheerful"
group hair:
attribute normal default "spr_damien_hair_normal"
attribute future "spr_damien_hair_future"
attribute prom "spr_damien_hair_normal"
attribute gym "spr_damien_hair_normal"
group mug:
attribute mug:
xoffset 689 yoffset 521 xzoom -1
"spr_mug_damien"
attribute nomug "spr_null"
image damien left = LayeredImageProxy("damien", Transform(xzoom=-1.0))
image damien right = LayeredImageProxy("damien", Transform(xzoom=1.0))
# Tier 2
layeredimage damien furious:
xanchor 0.5
group outfit:
attribute normal default "spr_damien_furious"
attribute prom "spr_damien_prom_furious"
image damien furious left = LayeredImageProxy("damien furious", Transform(xzoom=-1.0))
image damien furious right = LayeredImageProxy("damien furious", Transform(xzoom=1.0))
layeredimage damien pondering:
xanchor 0.5
always "spr_damien_pondering"
image damien pondering left = LayeredImageProxy("damien pondering", Transform(xzoom=-1.0))
image damien pondering right = LayeredImageProxy("damien pondering", Transform(xzoom=1.0))
layeredimage damien thinking:
xanchor 0.5
group outfit:
attribute normal default "spr_damien_thinking"
attribute prom "spr_damien_prom_thinking"
image damien thinking left = LayeredImageProxy("damien thinking", Transform(xzoom=-1.0))
image damien thinking right = LayeredImageProxy("damien thinking", Transform(xzoom=1.0))
layeredimage damien sheepish:
xanchor 0.5
always "spr_damien_sheepish"
image damien sheepish left = LayeredImageProxy("damien sheepish", Transform(xzoom=-1.0))
image damien sheepish right = LayeredImageProxy("damien sheepish", Transform(xzoom=1.0))
layeredimage damien terrified:
xanchor 0.5
always "spr_damien_terrified"
image damien terrified left = LayeredImageProxy("damien terrified", Transform(xzoom=-1.0))
image damien terrified right = LayeredImageProxy("damien terrified", Transform(xzoom=1.0))
layeredimage damien verysad:
xanchor 0.5
always "spr_damien_verysad"
image damien verysad left = LayeredImageProxy("damien verysad", Transform(xzoom=-1.0))
image damien verysad right = LayeredImageProxy("damien verysad", Transform(xzoom=1.0))
layeredimage damien cheerful:
xanchor 0.5
group outfit:
attribute normal default "spr_damien_body_normal_cheerful"
attribute gym "spr_damien_body_gym_cheerful"
attribute prom "spr_damien_body_prom_cheerful"
always "spr_damien_face_cheerful"
always "spr_damien_hair_normal"
image damien cheerful left = LayeredImageProxy("damien cheerful", Transform(xzoom=-1.0))
image damien cheerful right = LayeredImageProxy("damien cheerful", Transform(xzoom=1.0))
#
# IADAKAN
#
layeredimage iadakan:
xanchor 0.5
group expressions:
# Tier 1
attribute neutral default "spr_iadakan_neutral"
attribute angry "spr_iadakan_angry"
attribute considering "spr_iadakan_considering"
attribute explaining "spr_iadakan_explaining"
attribute happy "spr_iadakan_happy"
attribute sad "spr_iadakan_sad"
attribute surprised "spr_iadakan_surprised"
attribute unimpressed "spr_iadakan_unimpressed"
# Tier 2
attribute concerned "spr_iadakan_concerned"
attribute annoyed "spr_iadakan_annoyed"
attribute excited "spr_iadakan_excited"
attribute ugh "spr_iadakan_ugh"
attribute eccentric 'spr_iadakan_eccentric'
image iadakan left = LayeredImageProxy("iadakan", Transform(xzoom=-1.0))
image iadakan right = LayeredImageProxy("iadakan", Transform(xzoom=1.0))
#
# LIZ
#
# Liz's head offset positions
# These are effectively constants so when you call liz's sprites, the body is called normally but the head
# is a number + the body position, so her head is in the right place
# the last constants are just offsets for her necks and bodies
init -1 python:
LIZHEADX_NEUTRAL = 0.11
LIZHEADY_NEUTRAL = -0.15
LIZHEADX_EXCITED = 0.08
LIZHEADY_EXCITED = -0.06
LIZHEADX_VERYSAD = 0.11
LIZHEADY_VERYSAD = 0.0
LIZHEADX_TERRIFIED = 0.07
LIZHEADY_TERRIFIED = -0.14
LIZHEADX_THINKING = 0.075
LIZHEADY_THINKING = -0.08
LIZHEADX_FURIOUS = 0.19
LIZHEADY_FURIOUS = -0.12
LIZHEAD_YOFFSET = -1207
LIZBODY_YOFFSET = -1207
# Unfortunately, due to her neckiness it's more concise to define layeredimages for her tier 2 expressions. God forbid putting on different outfits
# Tier 1 and Tier 2
layeredimage lizbody:
xanchor 0.5
yoffset LIZBODY_YOFFSET
group outfit:
if_any "normal"
attribute neutral default "spr_liz_body_neutral"
attribute excited "spr_liz_body_excited"
attribute verysad "spr_liz_body_verysad"
attribute terrified "spr_liz_body_terrified"
attribute thinking "spr_liz_body_thinking"
attribute furious "spr_liz_body_furious"
group outfit:
if_any "prom"
attribute neutral default "spr_liz_body_prom_neutral"
group outfit:
if_any "future"
attribute neutral default "spr_liz_body_future_neutral"
# Dummy group to toggle between the above groups
group outfit_toggler:
attribute normal default "spr_null"
attribute prom "spr_null"
attribute future "spr_null"
image lizbody left = LayeredImageProxy("lizbody", Transform(xzoom=-1.0))
image lizbody right = LayeredImageProxy("lizbody", Transform(xzoom=1.0))
# Tier 1
layeredimage lizhead:
xanchor 0.5
mesh True
gl_drawable_resolution False
yoffset LIZHEAD_YOFFSET
# back hair
group outfit:
attribute normal default "spr_liz_normal_backhair"
attribute prom "spr_liz_prom_backhair"
attribute future "spr_liz_future_backhair"
group neck:
attribute n_down default "spr_liz_neck_neutral"
group face:
if_any ["normal", "future"]
attribute neutral default "spr_liz_face_normal_neutral"
attribute angry "spr_liz_face_normal_angry"
attribute considering "spr_liz_face_normal_considering"
attribute explaining "spr_liz_face_normal_explaining"
attribute happy "spr_liz_face_normal_happy"
attribute sad "spr_liz_face_normal_sad"
attribute shocked "spr_liz_face_normal_shocked"
attribute unimpressed "spr_liz_face_normal_unimpressed"
attribute sadsmile "spr_liz_face_normal_sadsmile"
attribute skeptical "spr_liz_face_normal_skeptical"
attribute neutralconsidering "spr_liz_face_normal_neutralconsidering"
attribute surprised "spr_liz_face_normal_surprised"
group face:
if_any "prom"
attribute neutral default "spr_liz_face_prom_neutral"
attribute angry "spr_liz_face_prom_angry"
attribute considering "spr_liz_face_prom_considering"
attribute explaining "spr_liz_face_prom_explaining"
attribute happy "spr_liz_face_prom_happy"
attribute sad "spr_liz_face_prom_sad"
attribute shocked "spr_liz_face_prom_shocked"
attribute unimpressed "spr_liz_face_prom_unimpressed"
attribute sadsmile "spr_liz_face_prom_sadsmile"
attribute skeptical "spr_liz_face_prom_skeptical"
attribute neutralconsidering "spr_liz_face_prom_neutralconsidering"
attribute surprised "spr_liz_face_prom_surprised"
# Blush
always if_not 'noblush' "spr_liz_blush"
always if_not 'noblush' "spr_liz_blushadd" blend 'add' alpha 0.15
group blush:
attribute blush "spr_null"
attribute noblush default "spr_null"
group outfit:
attribute normal default "spr_liz_face_normal_shadow" blend "multiply"
attribute prom "spr_liz_face_prom_shadow" blend "multiply"
attribute future "spr_liz_face_future_shadow" blend "multiply"
# front hair
group outfit:
attribute normal default "spr_liz_normal_fronthair"
attribute prom "spr_liz_prom_fronthair"
attribute future "spr_liz_future_fronthair"
# hat shadow
group hat:
attribute hat:
blend 'multiply'
xoffset 256 yoffset 1356
"spr_liz_hatshadow"
# the hat
group hat:
attribute hat:
xoffset 256 yoffset 1356
"spr_liz_hat"
attribute nohat "spr_null"
group carrying_item:
attribute carrying_nothing "spr_null"
attribute carrying_bag:
xoffset 380 yoffset 1580 xzoom -1.0
"spr_grocerybag_liz"
group salad:
attribute salad "spr_liz_leaves"
attribute nosalad "spr_null"
image lizhead left = LayeredImageProxy("lizhead", Transform(xzoom=-1.0))
image lizhead right = LayeredImageProxy("lizhead", Transform(xzoom=1.0))
# Tier 2
layeredimage lizhead excited:
xanchor 0.5
mesh True
gl_drawable_resolution False
yoffset LIZHEAD_YOFFSET
group neck:
attribute n_down default "spr_liz_neck_excited"
always "spr_liz_face_excited"
image lizhead excited left = LayeredImageProxy("lizhead excited", Transform(xzoom=-1.0))
image lizhead excited right = LayeredImageProxy("lizhead excited", Transform(xzoom=1.0))
layeredimage lizhead verysad:
xanchor 0.5
mesh True
yoffset LIZHEAD_YOFFSET
group neck:
attribute n_down default "spr_liz_neck_verysad"
always "spr_liz_face_verysad"
image lizhead verysad left = LayeredImageProxy("lizhead verysad", Transform(xzoom=-1.0))
image lizhead verysad right = LayeredImageProxy("lizhead verysad", Transform(xzoom=1.0))
layeredimage lizhead terrified:
xanchor 0.5
mesh True
gl_drawable_resolution False
yoffset LIZHEAD_YOFFSET
group neck:
attribute n_down default "spr_liz_neck_terrified"
always "spr_liz_face_terrified"
image lizhead terrified left = LayeredImageProxy("lizhead terrified", Transform(xzoom=-1.0))
image lizhead terrified right = LayeredImageProxy("lizhead terrified", Transform(xzoom=1.0))
layeredimage lizhead thinking:
xanchor 0.5
mesh True
gl_drawable_resolution False
yoffset LIZHEAD_YOFFSET
group neck:
attribute n_down default "spr_liz_neck_thinking"
always "spr_liz_face_thinking"
# hat shadow
group hat:
attribute hat:
blend 'multiply'
transform_anchor True anchor (0.0, 0.0)
xoffset 179 yoffset 1460 rotate -30
"spr_liz_hatshadow"
# the hat
group hat:
attribute hat:
transform_anchor True anchor (0.0, 0.0) # Make the hat rotate around the top left point of the image, easier to do.
xoffset 179 yoffset 1460 rotate -30
"spr_liz_hat"
attribute nohat "spr_null"
image lizhead thinking left = LayeredImageProxy("lizhead thinking", Transform(xzoom=-1.0))
image lizhead thinking right = LayeredImageProxy("lizhead thinking", Transform(xzoom=1.0))
layeredimage lizhead furious:
xanchor 0.5
mesh True
gl_drawable_resolution False
yoffset LIZHEAD_YOFFSET
group neck:
attribute n_down default "spr_liz_neck_furious"
always "spr_liz_face_furious"
image lizhead furious left = LayeredImageProxy("lizhead furious", Transform(xzoom=-1.0))
image lizhead furious right = LayeredImageProxy("lizhead furious", Transform(xzoom=1.0))
#
# MIA
#
# Tier 1
layeredimage mia:
xanchor 0.5
mesh True
gl_drawable_resolution False
group outfit:
attribute normal default "spr_mia_body_normal"
attribute gym "spr_mia_body_gym"
attribute prom "spr_mia_body_prom"
# face
group head:
if_not "prom"
attribute neutral default "spr_mia_face_neutral"
attribute angry "spr_mia_face_angry"
attribute considering "spr_mia_face_considering"
attribute cringe "spr_mia_face_cringe"
attribute smug "spr_mia_face_smug"
attribute shocked "spr_mia_face_shocked"
attribute smile "spr_mia_face_smile"
group head:
if_any "prom"
attribute neutral default "spr_mia_face_prom_neutral"
attribute angry "spr_mia_face_prom_angry"
attribute considering "spr_mia_face_prom_considering"
attribute cringe "spr_mia_face_prom_cringe"
attribute smug "spr_mia_face_prom_smug"
attribute shocked "spr_mia_face_prom_shocked"
attribute smile "spr_mia_face_prom_smile"
# hair
group head:
if_any "normal"
attribute neutral default "spr_mia_hair_neutral"
attribute angry "spr_mia_hair_angry"
attribute considering "spr_mia_hair_neutral"
attribute cringe "spr_mia_hair_cringe"
attribute smug "spr_mia_hair_cringe"
attribute shocked "spr_mia_hair_neutral"
attribute smile "spr_mia_hair_neutral"
group head:
if_any "gym"
attribute neutral default "spr_mia_hair_gym"
attribute angry "spr_mia_hair_gym"
attribute considering "spr_mia_hair_gym"
attribute cringe "spr_mia_hair_gym"
attribute smug "spr_mia_hair_gym"
attribute shocked "spr_mia_hair_gym"
attribute smile "spr_mia_hair_gym"
group head:
if_any "prom"
attribute neutral default "spr_mia_hair_prom"
attribute angry "spr_mia_hair_prom"
attribute considering "spr_mia_hair_prom"
attribute cringe "spr_mia_hair_prom"
attribute smug "spr_mia_hair_prom"
attribute shocked "spr_mia_hair_prom"
attribute smile "spr_mia_hair_prom"
image mia left = LayeredImageProxy("mia", Transform(xzoom=-1.0))
image mia right = LayeredImageProxy("mia", Transform(xzoom=1.0))
# Tier 2
layeredimage mia furious:
xanchor 0.5
always "spr_mia_furious"
image mia furious left = LayeredImageProxy("mia furious", Transform(xzoom=-1.0))
image mia furious right = LayeredImageProxy("mia furious", Transform(xzoom=1.0))
layeredimage mia coinflip:
xanchor 0.5
always "spr_mia_coinflip"
image mia coinflip left = LayeredImageProxy("mia coinflip", Transform(xzoom=-1.0))
image mia coinflip right = LayeredImageProxy("mia coinflip", Transform(xzoom=1.0))
layeredimage mia thinking:
xanchor 0.5
always "spr_mia_thinking"
image mia thinking left = LayeredImageProxy("mia thinking", Transform(xzoom=-1.0))
image mia thinking right = LayeredImageProxy("mia thinking", Transform(xzoom=1.0))
layeredimage mia flipoff:
xanchor 0.5
always "spr_mia_flipoff"
image mia flipoff left = LayeredImageProxy("mia flipoff", Transform(xzoom=-1.0))
image mia flipoff right = LayeredImageProxy("mia flipoff", Transform(xzoom=1.0))
layeredimage mia cheerful:
xanchor 0.5
always "spr_mia_cheerful"
image mia cheerful left = LayeredImageProxy("mia cheerful", Transform(xzoom=-1.0))
image mia cheerful right = LayeredImageProxy("mia cheerful", Transform(xzoom=1.0))
layeredimage mia pedantic:
xanchor 0.5
always "spr_mia_pedantic"
image mia pedantic left = LayeredImageProxy("mia pedantic", Transform(xzoom=-1.0))
image mia pedantic right = LayeredImageProxy("mia pedantic", Transform(xzoom=1.0))
layeredimage mia terrified:
xanchor 0.5
always "spr_mia_terrified"
image mia terrified left = LayeredImageProxy("mia terrified", Transform(xzoom=-1.0))
image mia terrified right = LayeredImageProxy("mia terrified", Transform(xzoom=1.0))
layeredimage mia taunting:
xanchor 0.5
always "spr_mia_taunting"
image mia taunting left = LayeredImageProxy("mia taunting", Transform(xzoom=-1.0))
image mia taunting right = LayeredImageProxy("mia taunting", Transform(xzoom=1.0))
#
# PROCKLING
#
# Tier 1
layeredimage prockling:
xanchor 0.5
group expressions:
attribute neutral default "spr_prockling_neutral"
attribute angry "spr_prockling_angry"
attribute annoyed "spr_prockling_annoyed"
attribute considering "spr_prockling_considering"
attribute smirk "spr_prockling_smirk"
attribute surprised "spr_prockling_surprised"
image prockling left = LayeredImageProxy("prockling", Transform(xzoom=-1.0))
image prockling right = LayeredImageProxy("prockling", Transform(xzoom=1.0))
#
# SCALER
#
# Tier 1
layeredimage scaler:
xanchor 0.5
mesh True
gl_drawable_resolution False
# body
group outfit:
attribute normal default "spr_scaler_body_normal"
attribute prom "spr_scaler_body_prom"
group face:
if_any "normal"
attribute neutral default "spr_scaler_face_neutral"
attribute shocked "spr_scaler_face_shocked"
attribute happy "spr_scaler_face_happy"
attribute strained "spr_scaler_face_strained"
attribute angry "spr_scaler_face_angry"
group face:
if_any "prom"
attribute neutral default "spr_scaler_face_prom_neutral"
attribute shocked "spr_scaler_face_prom_shocked"
attribute happy "spr_scaler_face_prom_happy"
attribute strained "spr_scaler_face_prom_strained"
attribute angry "spr_scaler_face_prom_angry"
group blush if_any "angry":
attribute blush "spr_scaler_blush"
attribute noblush default "spr_null"
# hair
group outfit:
attribute normal default "spr_scaler_hair_normal"
attribute prom "spr_scaler_hair_prom"
image scaler left = LayeredImageProxy("scaler", Transform(xzoom=-1.0))
image scaler right = LayeredImageProxy("scaler", Transform(xzoom=1.0))
#
# SOLLY
#
# Tier 1
layeredimage solly:
xanchor 0.5
group expressions:
attribute neutral default "spr_solly_neutral"
attribute happy "spr_solly_happy"
attribute yelling "spr_solly_yelling"
image solly left = LayeredImageProxy("solly", Transform(xzoom=-1.0))
image solly right = LayeredImageProxy("solly", Transform(xzoom=1.0))
#
# SOPHIA
#
# Tier 1
layeredimage sophia:
xanchor 0.5
group expressions:
attribute neutral default "spr_sophia_neutral"
attribute happy "spr_sophia_happy"
attribute confused "spr_sophia_confused"
attribute annoyed "spr_sophia_annoyed"
attribute shocked "spr_sophia_shocked"
attribute sad "spr_sophia_sad"
image sophia left = LayeredImageProxy("sophia", Transform(xzoom=-1.0))
image sophia right = LayeredImageProxy("sophia", Transform(xzoom=1.0))
#
# RANDY
#
# Tier 1
layeredimage randy:
xanchor 0.5
group expressions:
attribute neutral default "spr_randy_neutral"
attribute happy "spr_randy_happy"
attribute annoyed "spr_randy_annoyed"
attribute surprised "spr_randy_surprised"
attribute appalled "spr_randy_appalled"
attribute unimpressed "spr_randy_unimpressed"
group mugs multiple:
attribute mugolivia:
xoffset 611 yoffset 472 xzoom -1
"spr_mug_olivia"
attribute mugdamien:
xoffset 533 yoffset 489 xzoom -1
"spr_mug_damien"
attribute mugvinny:
xoffset 447 yoffset 480 xzoom -1
"spr_mug_vinny"
image randy left = LayeredImageProxy("randy", Transform(xzoom=-1.0))
image randy right = LayeredImageProxy("randy", Transform(xzoom=1.0))
#
# VINNY
#
layeredimage vinny:
xanchor 0.5
yoffset -100
group expressions:
attribute neutral default "spr_vinny_neutral"
attribute sad "spr_vinny_sad"
attribute happy "spr_vinny_happy"
attribute annoyed "spr_vinny_annoyed"
attribute deadpan "spr_vinny_deadpan"
attribute shocked "spr_vinny_shocked"
attribute sickneutral "spr_vinny_sick_neutral"
attribute sickdistraught "spr_vinny_sick_distraught"
attribute sicksad "spr_vinny_sick_sad"
attribute sicksneezing "spr_vinny_sick_sneezing"
group mug:
attribute mug:
xoffset 361 yoffset 710 xzoom -1
"spr_mug_vinny"
attribute nomug "spr_null"
group swag:
attribute swag "spr_vinny_chain"
attribute unswag "spr_null"
group macaroni_left: #see images.rpy for definitions for the macaroni
attribute macaroni "spr_macaroni_left" xoffset 250 yoffset 820
attribute macaroni_up "spr_macaroni_left" xoffset 250 yoffset 760
attribute macaronibroken "spr_macaroni_left" xoffset 220 yoffset 820
attribute nomacaroni "spr_null"
group macaroni_right:
attribute macaroni "spr_macaroni_right" xoffset 250 yoffset 820
attribute macaroni_up "spr_macaroni_right" xoffset 250 yoffset 760
attribute macaronibroken "spr_macaroni_right" xoffset 280 yoffset 820
attribute nomacaroni "spr_null"
image vinny left = LayeredImageProxy("vinny", Transform(xzoom=-1.0))
image vinny right = LayeredImageProxy("vinny", Transform(xzoom=1.0))
#
# FERRIS
#
layeredimage ferris:
xanchor 0.5
yoffset -100
mesh True
gl_drawable_resolution False
group outfits:
attribute normal default "spr_ferris_body_normal"
attribute prom "spr_ferris_body_prom"
group faces:
attribute neutral default "spr_ferris_face_neutral"
attribute happy "spr_ferris_face_happy"
attribute surprised "spr_ferris_face_surprised"
attribute cheerful "spr_ferris_face_cheerful"
group chain:
attribute swag "spr_ferris_goldchain"
attribute unswag "spr_null"
image ferris left = LayeredImageProxy("ferris", Transform(xzoom=-1.0))
image ferris right = LayeredImageProxy("ferris", Transform(xzoom=1.0))
#
# METRO FERRIS
#
layeredimage metroferris:
xalign 0.5
yalign 0.5
mesh True
gl_drawable_resolution False
always "spr_metroferris_base"
group head:
if_any "hairstyle"
attribute head_normal default "spr_metroferris_head_hairstyle"
group head:
if_not "hairstyle"
attribute head_normal default "spr_metroferris_head_normal"
group expressions:
attribute neutral_nomouth "spr_metroferris_face_neutral_nomouth"
attribute neutral default "spr_metroferris_face_neutral"
attribute considering "spr_metroferris_face_considering"
attribute smirk "spr_metroferris_face_smirk"
attribute skeptical "spr_metroferris_face_skeptical"
attribute neutral_considering "spr_metroferris_face_neutral_to_considering"
attribute neutral_smirk "spr_metroferris_face_neutral_to_smirk"
attribute neutral_skeptical "spr_metroferris_face_neutral_to_skeptical"
attribute considering_neutral "spr_metroferris_face_considering_to_neutral"
attribute considering_smirk "spr_metroferris_face_considering_to_smirk"
attribute considering_skeptical "spr_metroferris_face_considering_to_skeptical"
attribute smirk_neutral "spr_metroferris_face_smirk_to_neutral"
attribute smirk_considering "spr_metroferris_face_smirk_to_considering"
attribute smirk_skeptical "spr_metroferris_face_smirk_to_skeptical"
attribute skeptical_neutral "spr_metroferris_face_skeptical_to_neutral"
attribute skeptical_considering "spr_metroferris_face_skeptical_to_considering"
attribute skeptical_smirk "spr_metroferris_face_skeptical_to_smirk"
group hairstyle:
attribute no_hairstyle "spr_null"
attribute hairstyle "spr_null"
group outfits multiple:
if_any "outfits_on"
attribute jacket "spr_metroferris_jacket"
attribute beanie "spr_metroferris_beanie"
attribute glasses "spr_metroferris_glasses"
group outfit_toggler:
attribute outfits_on default "spr_null"
attribute outfits_off "spr_null"
#
# METRO OLIVIA
#
# Unlike Metro Ferris, you'll have to control her facial features individually (if you want). The adjust_attributes system here is for presets of her faces (neutral, annoyed, etc)
# and possible facial transitions as you desire. If you want those, you'll have to define them as you choreograph her, or control her facial features individually if you're
# not feeling up for it.
# To control her, call one of the preset faces when you introduce her and then when changing expressions, using the appropriate facial transition for her eyebrows,
# her eyelids, her eyeballs, and her mouth (ex: neutral to annoyed face will have her eyebrow go from neutral to furrowed, so b_neutral_furrowed would be called in one of her
# attributes)
define config.adjust_attributes = {
"metroolivia" : metroolivia_expressions
}
init -1 python:
def att_replacer(att_list, att_to_replace, atts_to_insert):
att_list.remove(att_to_replace)
att_list.extend(atts_to_insert)
return att_list
def metroolivia_expressions(attrs):
t_attr = list(attrs)
if 'neutral' in t_attr:
t_attr = att_replacer(t_attr, 'neutral', ['e_neutral', 'l_neutral', 'b_neutral', 'm_neutral'])
elif 'annoyed' in t_attr:
t_attr = att_replacer(t_attr, 'annoyed', ['e_neutral', 'l_lidded', 'b_furrowed', 'm_neutral'])
elif 'smile' in t_attr:
t_attr = att_replacer(t_attr, 'smile', ['e_neutral', 'l_neutral', 'b_neutral', 'm_smile'])
elif 'rolleyes' in t_attr:
t_attr = att_replacer(t_attr, 'rolleyes', ['e_rolleyes', 'l_neutral', 'b_neutral', 'm_neutral'])
elif 'considering' in t_attr:
t_attr = att_replacer(t_attr, 'considering', ['e_considering', 'l_neutral', 'b_neutral', 'm_neutral'])
elif 'worried' in t_attr:
t_attr = att_replacer(t_attr, 'worried', ['e_neutral', 'l_wideopen', 'b_worried', 'm_neutral'])
elif 'lookaway' in t_attr:
t_attr = att_replacer(t_attr, 'lookaway', ['e_lookaway', 'l_neutral', 'b_neutral', 'm_neutral'])
elif 'panic' in t_attr:
t_attr = att_replacer(t_attr, 'panic', ['e_panic', 'l_panic', 'b_panic', 'm_neutral'])
elif 'paniclookaway' in t_attr:
t_attr = att_replacer(t_attr, 'paniclookaway', ['e_paniclookaway', 'l_panic', 'b_panic', 'm_neutral'])
elif 'clench' in t_attr:
t_attr = att_replacer(t_attr, 'clench', ['e_none', 'l_clench', 'b_clench', 'm_neutral'])
# Add face transitions as you need them.
return tuple(t_attr)
layeredimage metroolivia:
xalign 0.5
yalign 0.5
mesh True
gl_drawable_resolution False
always if_not ["e4dress", "lookback"] "spr_metroolivia_hair_default_back"
group wheelchair if_not "lookback":
attribute wheelchair default "spr_metroolivia_wheelchair_default"
attribute nowheelchair "spr_null"
group wheelchair if_any "lookback":
attribute wheelchair default "spr_metroolivia_wheelchair_lookback"
attribute nowheelchair "spr_null"
group bodies:
attribute normal default "spr_metroolivia_body_default"
attribute e1dress "spr_metroolivia_body_e1dress"
attribute e2dress "spr_metroolivia_body_e2dress"
attribute e3dress "spr_metroolivia_body_e3dress"
attribute e4dress "spr_metroolivia_body_e4dress"
attribute lookback "spr_metroolivia_body_lookback"
group eye if_not "lookback":
attribute e_neutral default "spr_metroolivia_eye_neutral"
attribute e_lookaway "spr_metroolivia_eye_lookaway_f3"
attribute e_rolleyes "spr_metroolivia_eye_rolling_f3"
attribute e_considering "spr_metroolivia_eye_rolling_f1"
attribute e_panic "spr_metroolivia_eye_panic"
attribute e_paniclookaway "spr_metroolivia_eye_paniclookaway"
attribute e_none "spr_null"
attribute e_neutral_lookaway "spr_metroolivia_eye_neutral_to_lookaway"
attribute e_neutral_rolleyes "spr_metroolivia_eye_neutral_to_rolleyes"
attribute e_neutral_considering "spr_metroolivia_eye_neutral_to_considering"
attribute e_lookaway_neutral "spr_metroolivia_eye_lookaway_to_neutral"
attribute e_lookaway_rolleyes "spr_metroolivia_eye_lookaway_to_rolleyes"
attribute e_lookaway_considering "spr_metroolivia_eye_lookaway_to_considering"
attribute e_rolleyes_neutral "spr_metroolivia_eye_rolleyes_to_neutral"
attribute e_rolleyes_lookaway "spr_metroolivia_eye_rolleyes_to_lookaway"
attribute e_rolleyes_considering "spr_metroolivia_eye_rolleyes_to_considering"
attribute e_considering_neutral "spr_metroolivia_eye_considering_to_neutral"
attribute e_considering_lookaway "spr_metroolivia_eye_considering_to_lookaway"
attribute e_considering_rolleyes "spr_metroolivia_eye_considering_to_rolleyes"
attribute e_neutral_rolleyes_neutral "spr_metroolivia_eye_neutral_to_rolleyes_to_neutral"
group eyelid if_not ["lookback", "noblink"]:
attribute l_neutral default "spr_metroolivia_blinkloop_neutral"
attribute l_lidded "spr_metroolivia_blinkloop_lidded"
attribute l_wideopen "spr_metroolivia_blinkloop_wideopen"
attribute l_panic "spr_metroolivia_eyelid_panic"
attribute l_clench "spr_metroolivia_eyelid_clench"
attribute l_closed "spr_metroolivia_eyelid_f4"
group eyelid if_not ["lookback", "blink"]:
attribute l_neutral default "spr_metroolivia_eyelid_f1"
attribute l_lidded "spr_metroolivia_eyelid_f2"
attribute l_wideopen "spr_metroolivia_eyelid_wideopen"
attribute l_panic "spr_metroolivia_eyelid_panic"
attribute l_clench "spr_metroolivia_eyelid_clench"
attribute l_closed "spr_metroolivia_eyelid_f4"
# Control whether we should have her blink
group staticify:
attribute noblink "spr_null"
attribute blink default "spr_null"
group sweat:
attribute sweat "spr_metroolivia_sweat"
attribute nosweat default "spr_null"
group brow if_not "lookback":
attribute b_neutral default "spr_metroolivia_eyebrow_neutral"
attribute b_furrowed "spr_metroolivia_eyebrow_furrowed_f3"
attribute b_raised "spr_metroolivia_eyebrow_raised_f3"
attribute b_worried "spr_metroolivia_eyebrow_worried"
attribute b_clench "spr_metroolivia_eyebrow_clench"
attribute b_panic "spr_metroolivia_eyebrow_panic"
attribute b_neutral_furrowed "spr_metroolivia_eyebrow_neutral_to_furrowed"
attribute b_neutral_raised "spr_metroolivia_eyebrow_neutral_to_raised"
attribute b_neutral_worried "spr_metroolivia_eyebrow_neutral_to_worried"
attribute b_raised_neutral "spr_metroolivia_eyebrow_raised_to_neutral"
attribute b_raised_furrowed "spr_metroolivia_eyebrow_raised_to_furrowed"
attribute b_raised_worried "spr_metroolivia_eyebrow_raised_to_worried"
attribute b_furrowed_neutral "spr_metroolivia_eyebrow_furrowed_to_neutral"
attribute b_furrowed_raised "spr_metroolivia_eyebrow_furrowed_to_raised"
attribute b_furrowed_worried "spr_metroolivia_eyebrow_furrowed_to_worried"
attribute b_worried_neutral "spr_metroolivia_eyebrow_worried_to_neutral"
attribute b_worried_raised "spr_metroolivia_eyebrow_worried_to_raised"
attribute b_worried_furrowed "spr_metroolivia_eyebrow_worried_to_furrowed"
group mouth if_not "lookback":
attribute m_neutral default "spr_metroolivia_mouth_neutral"
attribute m_smile "spr_metroolivia_mouth_smile_f3"
attribute m_neutral_smile "spr_metroolivia_mouth_neutral_to_smile"
attribute m_smile_neutral "spr_metroolivia_mouth_smile_to_neutral"
always if_not ["e4dress", "lookback"] "spr_metroolivia_hair_default_front"
always if_any "e4dress" "spr_metroolivia_hair_e4dress"
always if_any "lookback" "spr_metroolivia_hair_lookback"
group hairpin:
attribute hairpin "spr_metroolivia_hairpin"
attribute nohairpin default "spr_null"
#
# LUNARA
#
layeredimage lunara:
xanchor 0.5
group expressions:
attribute neutral default "spr_lunara_neutral"
attribute happy "spr_lunara_happy"
attribute cheerful "spr_lunara_cheerful"
attribute surprised "spr_lunara_surprised"
image lunara left = LayeredImageProxy("lunara", Transform(xzoom=-1.0))
image lunara right = LayeredImageProxy("lunara", Transform(xzoom=1.0))
#
# KIARA
#
layeredimage kiara:
xanchor 0.5
group expressions:
attribute neutral default "spr_kiara_neutral"
attribute happy "spr_kiara_happy"
attribute cheerful "spr_kiara_cheerful"
attribute shocked "spr_kiara_shocked"
image kiara left = LayeredImageProxy("kiara", Transform(xzoom=-1.0))
image kiara right = LayeredImageProxy("kiara", Transform(xzoom=1.0))
#
# TED DA RANGER
#
layeredimage ted:
xanchor 0.5
group expressions:
attribute neutral default "spr_ted_neutral"
attribute happy "spr_ted_happy"
image ted left = LayeredImageProxy("ted", Transform(xzoom=-1.0))
image ted right = LayeredImageProxy("ted", Transform(xzoom=1.0))
#
# GROOM
#
layeredimage groom:
xanchor 0.5 mesh True gl_drawable_resolution False
always "spr_groom_body"
group expressions:
attribute neutral default "spr_groom_face_neutral"
attribute explaining "spr_groom_face_explaining"
attribute confused "spr_groom_face_confused"
group cig if_any "smoking":
attribute neutral default "spr_groom_cig1"
attribute explaining "spr_groom_cig2"
attribute confused "spr_groom_cig1"
group cig_toggle:
attribute nosmoking default "spr_null"
attribute smoking "spr_null"
image groom left = LayeredImageProxy("groom", Transform(xzoom=-1.0))
image groom right = LayeredImageProxy("groom", Transform(xzoom=1.0))
#
# BRIDE
#
layeredimage bride:
xanchor 0.5
always "spr_bride_neutral"
image bride left = LayeredImageProxy("bride", Transform(xzoom=-1.0))
image bride right = LayeredImageProxy("bride", Transform(xzoom=1.0))
#
# BUSTER
#
# Tier 1
layeredimage buster:
xanchor 0.5
mesh True
gl_drawable_resolution False
group expressions:
attribute neutral default "spr_buster_neutral"
attribute happy "spr_buster_happy"
attribute smug "spr_buster_smug"
attribute angry "spr_buster_angry"
attribute blushing "spr_buster_blushing"
group sweat:
attribute sweat_none default "spr_null"
attribute sweat_less "spr_buster_sweat_less"
attribute sweat_more "spr_buster_sweat_more"
image buster left = LayeredImageProxy("buster", Transform(xzoom=-1.0))
image buster right = LayeredImageProxy("buster", Transform(xzoom=1.0))
#
# HIBACHI CHEF
#
layeredimage chef:
xanchor 0.5
group expressions:
attribute neutral default "spr_hibachi_chef_neutral"
attribute lookback "spr_hibachi_chef_lookback"
image chef left = LayeredImageProxy("chef", Transform(xzoom=-1.0))
image chef right = LayeredImageProxy("chef", Transform(xzoom=1.0))
#
# JOURNALIST (JOURNO) ((HER REAL NAME IS GABBY BUT HER FATHER HATED HER AND NAMED HER JOURNO SO SHE WAS DESTINED TO BECOME A JOURNALIST STRUGGLING TO MAKE MINIMUM WAGE)) (((SHE REALLY HATES HER DAD))) ((((SHE HAS DADDY ISSUES))))
#
layeredimage journo:
xanchor 0.5
group expressions:
attribute neutral default "spr_journo_neutral"
attribute writing "spr_journo_writing"
image journo left = LayeredImageProxy("journo", Transform(xzoom=-1.0))
image journo right = LayeredImageProxy("journo", Transform(xzoom=1.0))
#
# MIQUELLA
#
layeredimage miquella:
xanchor 0.5
always "spr_miquella_neutral"
image miquella left = LayeredImageProxy("miquella", Transform(xzoom=-1.0))
image miquella right = LayeredImageProxy("miquella", Transform(xzoom=1.0))
# We're still making even single sprites a layered image just to keep the 'left right' attributes consistent since it doesn't work the same manually the images
#
# ALENA
#
layeredimage alena:
xanchor 0.5
group face:
attribute neutral default "spr_alena_face_neutral"
attribute angry "spr_alena_face_angry"
attribute angryclosed "spr_alena_face_angryclosed"
attribute sad "spr_alena_face_sad"
attribute sadclosed "spr_alena_face_sadclosed"
attribute happy "spr_alena_face_happy"
group body:
attribute handdown default "spr_alena_body_down"
attribute handup "spr_alena_body_up"
image alena left = LayeredImageProxy("alena", Transform(xzoom=-1.0))
image alena right = LayeredImageProxy("alena", Transform(xzoom=1.0))
#
# CROWD PEOPLE
#
layeredimage c_chilling1:
xanchor 0.5
always "spr_crowdperson_chilling1"
image c_chilling1 left = LayeredImageProxy("c_chilling1", Transform(xzoom=-1.0))
image c_chilling1 right = LayeredImageProxy("c_chilling1", Transform(xzoom=1.0))
layeredimage c_chilling2:
xanchor 0.5
always "spr_crowdperson_chilling2"
image c_chilling2 left = LayeredImageProxy("c_chilling2", Transform(xzoom=-1.0))
image c_chilling2 right = LayeredImageProxy("c_chilling2", Transform(xzoom=1.0))
layeredimage c_chilling3:
xanchor 0.5
always "spr_crowdperson_chilling3"
image c_chilling3 left = LayeredImageProxy("c_chilling3", Transform(xzoom=-1.0))
image c_chilling3 right = LayeredImageProxy("c_chilling3", Transform(xzoom=1.0))
layeredimage c_idle1:
xanchor 0.5
always "spr_crowdperson_idle1"
image c_idle1 left = LayeredImageProxy("c_idle1", Transform(xzoom=-1.0))
image c_idle1 right = LayeredImageProxy("c_idle1", Transform(xzoom=1.0))
layeredimage c_idle2:
xanchor 0.5
always "spr_crowdperson_idle2"
image c_idle2 left = LayeredImageProxy("c_idle2", Transform(xzoom=-1.0))
image c_idle2 right = LayeredImageProxy("c_idle2", Transform(xzoom=1.0))
layeredimage c_idle3:
xanchor 0.5
always "spr_crowdperson_idle3"
image c_idle3 left = LayeredImageProxy("c_idle3", Transform(xzoom=-1.0))
image c_idle3 right = LayeredImageProxy("c_idle3", Transform(xzoom=1.0))
layeredimage c_phone1:
xanchor 0.5
always "spr_crowdperson_phone1"
image c_phone1 left = LayeredImageProxy("c_phone1", Transform(xzoom=-1.0))
image c_phone1 right = LayeredImageProxy("c_phone1", Transform(xzoom=1.0))
layeredimage c_phone2:
xanchor 0.5
always "spr_crowdperson_phone2"
image c_phone2 left = LayeredImageProxy("c_phone2", Transform(xzoom=-1.0))
image c_phone2 right = LayeredImageProxy("c_phone2", Transform(xzoom=1.0))
layeredimage c_phone3:
xanchor 0.5
always "spr_crowdperson_phone3"
image c_phone3 left = LayeredImageProxy("c_phone3", Transform(xzoom=-1.0))
image c_phone3 right = LayeredImageProxy("c_phone3", Transform(xzoom=1.0))
layeredimage c_watching1:
xanchor 0.5
always "spr_crowdperson_watching1"
image c_watching1 left = LayeredImageProxy("c_watching1", Transform(xzoom=-1.0))
image c_watching1 right = LayeredImageProxy("c_watching1", Transform(xzoom=1.0))
layeredimage c_watching2:
xanchor 0.5
always "spr_crowdperson_watching2"
image c_watching2 left = LayeredImageProxy("c_watching2", Transform(xzoom=-1.0))
image c_watching2 right = LayeredImageProxy("c_watching2", Transform(xzoom=1.0))
layeredimage c_watching3:
xanchor 0.5
always "spr_crowdperson_watching3"
image c_watching3 left = LayeredImageProxy("c_watching3", Transform(xzoom=-1.0))
image c_watching3 right = LayeredImageProxy("c_watching3", Transform(xzoom=1.0))