![Image](https://i.ibb.co/1bftm6B/2022-03-02-01-28-24.gif)
Attached is the desired result of what I'm trying to accomplish currently working just fine in-engine. There are multiple layers (body, eyes, mouth, hair) and each are individually animated with the goal of being able to swap them out as the story calls for it. However, its a HUGE pain to call all these layers individually every time I want them to appear and don't utilize transitions at the same time (as far as I know). I'd like to do something with LayeredImages but I can't figure out how to get animations in there.
I know I could instead render the body/hair/eyes as one animated layer to simplify this, but that would produce a much longer animation to delay blinking all the time while giving me less flexibility and ultimately not solving the problem in the first place.
What I want to be able to do is be able to define something like:
image jui_body:
"/images/characters/jui_body1.png"
"/images/characters/jui_body2.png"
"/images/characters/jui_body3.png"
repeat
image jui_eyes:
"/images/characters/jui_eyes1.png"
"/images/characters/jui_eyes2.png"
"/images/characters/jui_eyes3.png"
repeat
image jui_hair:
"/images/characters/jui_hair1.png"
"/images/characters/jui_hair2.png"
"/images/characters/jui_hair3.png"
repeat
This works, but then I want to do something like... (this code is wrong, I know)
layeredimage jui_neutral:
("jui_body", "jui_eyes", "jui_hair")
define j = Character("jui_neutral")
Essentially, I'm trying to take a bunch of parts, nest them into simpler pieces and call them all at once while also allowing me to use those same parts into different simpler pieces. Does that make sense?
I also have some portions where I want to loop three frames multiple times until introducing a new frame. Example, the line boil (the shaky lines) needs to stay constant for a few seconds and then introduce the blinking animation before returning to the line boil frames. Right now, I just have it copy/pasted a bunch of times and it works but I'm also looking for a way to clean this up.
(I'm also wondering if this is just something Renpy doesn't like to do because it takes a bit to load in a character this way, though it may just be a problem with the resolution and file size being too high.)
Any advice for getting this to work better is welcome, especially if I'm just going about this the wrong way. Please and thank you!
Here's my awful, ugly, cumbersome code I want to simplify.
Code: Select all
#IMPORTANT NAMES
#jui_neutral_nude_body
#jui_neutral_ponytail
#jui_neutral_eyes
#jui_neutral_brows_neutral
#jui_neutral_mouth_grin
#xx_xxxx_xxFLIP
init python:
def juiL_talk_neutral2(event,**kwargs): #Check callback name below in Jui definition
if event == "show":
renpy.music.play(voice_mid_tracks, channel="typewriter")
renpy.random.shuffle(voice_mid_tracks)
renpy.show("jui_mouth_neutral_talk") #NEED TO DEFINE IMAGE
renpy.hide("jui_mouth_neutral_notalk") #NEED TO DEFINE IMAGE
elif event == "slow_done" or event == "end":
renpy.show("jui_mouth_neutral_notalk") #NEED TO DEFINE IMAGE
renpy.hide("jui_mouth_neutral_talk") #NEED TO DEFINE IMAGE
renpy.music.stop(channel="typewriter")
define jL2 = Character("Jui", window_style="leftwindow", callback=juiL_talk_neutral2, color="#7187D1", ctc="ctc", ctc_position="fixed")
image jui_neutral_nude_body:
"/images/characters/Jui/Neutral/Body/Nude/01.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Body/Nude/02.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Body/Nude/03.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
repeat
image jui_neutral_ponytail:
"/images/characters/Jui/Neutral/Hair/Ponytail/01.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Hair/Ponytail/02.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Hair/Ponytail/03.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
repeat
#MOUTH SPRITES
#jui_mouth_neutral_talk
#jui_mouth_neutral_notalk
#jui_mouth_grin_talk
#jui_mouth_grin_notalk <-- rename actual file below
#etc.
image jui_neutral_mouth_grin:
"images/characters/Jui/Neutral/Mouth/Grin/01.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"images/characters/Jui/Neutral/Mouth/Grin/02.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"images/characters/Jui/Neutral/Mouth/Grin/03.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
repeat
#37 Frames
image jui_neutral_eyes:
"/images/characters/Jui/Neutral/Eyes/01.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Eyes/02.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Eyes/03.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Eyes/04.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Eyes/05.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Eyes/06.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Eyes/07.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
#LINEBOIL x10
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Eyes/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
#END LINEBOIL
repeat
image jui_neutral_brows_neutral:
"/images/characters/Jui/Neutral/Brows/Neutral/02.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Brows/Neutral/03.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Brows/Neutral/04.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Brows/Neutral/05.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Brows/Neutral/06.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Brows/Neutral/07.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
"/images/characters/Jui/Neutral/Brows/Neutral/08.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.1
#LINEBOIL x10; -1
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/09.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/10.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
"/images/characters/Jui/Neutral/Brows/Neutral/11.png"
zoom 0.4
xalign -1.2
yalign 0
pause 0.15
#END LINEBOIL
repeat
image jui_neutral_nude_bodyFLIP:
im.Flip("/images/characters/Jui/Neutral/Body/Nude/01.png", horizontal="True")
zoom 0.4
xalign 2.2
yalign 0
pause 0.15
im.Flip("/images/characters/Jui/Neutral/Body/Nude/02.png", horizontal="True")
zoom 0.4
xalign 2.2
yalign 0
pause 0.15
im.Flip("/images/characters/Jui/Neutral/Body/Nude/03.png", horizontal="True")
zoom 0.4
xalign 2.2
yalign 0
pause 0.15
repeat
#REMEMBER TO COPY AND ADJUST ALL OTHER LAYERS FOR FLIP