RBF is strong with Red Embrace characters. Thumbnail is Discord member @mnky82’s Halloween Peep.
RE RBF
Red Embrace (for Google Play) is back in testing. We ended up converting all the sprites to layeredimage
s, which then required an update to how we manage expression changes. Previously, the same code would work for both on-screen and side portrait sprites. Now, they are invoked differently. Showing on-screen sprites with expression changes requires the show
stack:
renpy.with_statement(trans=None)
renpy.show(char + " brow_" + brow + " eyes_" + eyes + " mouth_" + mouth + " " + extra_args, at_list=at_list)
renpy.with_statement(trans=trans)
while changing expressions for side portraits only requires changing a global variable isaac_eyes = "neutral"
. Since we are still reusing our previous function for both of sprite versions, we had to add some extra conditions.
if not portrait and \
not (char.split()[0] == "isaac" and isaac_portrait) and \
not (char.split()[0] == "dom" and dom_portrait) and \
...
# call show char stack
$ luka_portrait = True
lp '"I\'d better not get any weird calls from you…"'
$ luka_brow = "angry"
$ luka_eyes = "side"
$ luka_mouth = "shout"
lp '"I\'ll block you the second you start saying gross crap to me!"'
$ luka_portrait = False
The ability to change side portrait expressions without the show
stack is due to not needing to use dissolve transitions between expression changes. We added callbacks to all our character definitions:
def _luka_callback(event, interact=True, **kwargs):
if not interact:
return
if event == "begin":
store._side_image_attributes = ("side", "luka_p", "brow_" + globals()["luka_brow"], "eyes_" + globals()["luka_eyes"], "mouth_" + globals()["luka_mouth"])
define lp = Character("Luka", ctc="ctc_pic", image="luka_p", window_left_padding=340, window_right_padding=120, color="#ddd7d7", callback=_luka_callback)
The case of massive RBF comes from forgetting to reset the _portrait = False
flag when switching from side portrait to on-screen sprite mode. If that switch is not turned off, then on-screen sprites will not have expression changes (as the game expects the expressions to update automatically).