label her_chibi(action=None, xpos=None, ypos=None, flip=False, pic=None): hide screen favor # screen tag $ hermione_chibi.position(xpos, ypos, flip) if action == "hide": $ hermione_chibi.hide() return elif action == "leave": hide hermione_main hide screen bld1 hide screen blktone play sound "sounds/door.ogg" $ hermione_chibi.hide() with d3 pause .5 return elif action == "reset": $ hermione_chibi.do(None) return $ hermione_chibi.do(action) return label her_walk(xpos=None, ypos=None, speed=1.0, action=None, reduce=False, path=None, flip=False): scene onlayer dolls hide screen bld1 hide screen blktone with d3 if action == "enter": play sound "sounds/door.ogg" call her_chibi(None, "door", "base", flip) with d3 if xpos or ypos: $ hermione_chibi.move((xpos, ypos), speed, reduce) elif action == "leave": $ hermione_chibi.show() $ hermione_chibi.move(("door", "base"), speed, reduce) play sound "sounds/door.ogg" $ hermione_chibi.hide() with d3 pause .5 elif action == "run": $ hermione_chibi.show() $ hermione_chibi.move((xpos, ypos), speed, reduce, action) elif path: $ hermione_chibi.show() $ hermione_chibi.move(path, speed, reduce) else: $ hermione_chibi.show() $ hermione_chibi.move((xpos, ypos), speed, reduce) return # Chibi definition default hermione_chibi = Chibi("hermione", ["base"], update_hermione_chibi) #TODO Hermione's chibis need clothing layers and then update logic must be reworked to set clothing state (using chibi class best practice, see Cho chibi for example) init python: def update_hermione_chibi(chibi): # Assume chibi action has a matching image definition chibi_image = "ch_hem {}".format(chibi.action or "stand") chibi["base"] = chibi_image # Certain actions require more complex image selection, which is handled below if chibi.action == "walk": # Determine clothing state if hermione.pose in ("hold_book",): chibi["base"] = "ch_hem walk" else: if not hermione.is_worn("top") and not hermione.is_worn("bottom") and not hermione.is_worn("robe"): chibi["base"] = "ch_hem walk_n" elif hermione.is_worn("robe"): if hermione.is_worn("top"): chibi["base"] = "ch_hem walk_robe" else: chibi["base"] = "ch_hem walk_robe_n" else: chibi["base"] = "ch_hem walk" elif not chibi.action or chibi.action == "stand": # Determine clothing state if hermione.pose in ("hold_book",): chibi["base"] = "ch_hem blink" else: if not hermione.is_worn("top") and not hermione.is_worn("bottom") and not hermione.is_worn("robe"): chibi["base"] = "ch_hem blink_n" elif hermione.is_worn("robe"): if hermione.is_worn("top"): chibi["base"] = "ch_hem blink_robe" else: chibi["base"] = "ch_hem blink_robe_n" else: chibi["base"] = "ch_hem blink" elif chibi.action == "dance": # Determine clothing state if hermione.is_worn("top"): if hermione.get_equipped("top").id in ("top_school_1", "top_school_6"): chibi["base"] = "clothed_dance_ani" elif hermione.is_worn("bottom"): chibi["base"] = "no_vest_dance_ani" else: chibi["base"] = "no_skirt_dance_ani" else: if hermione.is_worn("bottom"): chibi["base"] = "no_shirt_dance_ani" elif hermione.is_worn("panties"): chibi["base"] = "no_shirt_no_skirt_dance_ani" else: chibi["base"] = "no_panties_dance_ani" elif chibi.action == "dance_pause": # Determine clothing state if hermione.is_worn("panties"): chibi["base"] = "no_shirt_no_skirt_dance_pause" else: chibi["base"] = "no_panties_dance_pause" elif chibi.action == "top_naked": chibi["base"] = "dance/03_no_shirt_03.webp" #TODO Should be 'stand' action without top clothes (needs layers first) elif chibi.action == "lift_skirt": if hermione.is_worn("panties"): #TODO Figure out a better way to determine the expression (so it can be reused in a different event) if not states.her.status.show_panties: # Reluctant expression chibi["base"] = "~/lift_skirt/panties_00.webp" else: # Happy expression chibi["base"] = "~/lift_skirt/panties_01.webp" else: chibi["base"] = "~/lift_skirt/panties_02.webp" elif chibi.action in ("drink_potion", "sniff_potion", "hold_potion"): if not hermione.is_any_worn("top", "bottom"): chibi["base"] = f"ch_hem {chibi.action}_nude" else: chibi["base"] = f"ch_hem {chibi.action}" # Sets up a chibi scene with Hermione and Genie in it label her_chibi_scene(action="reset", xpos="mid", ypos="base", trans=None): if trans is not None: scene onlayer dolls hide screen bld1 hide screen blkfade call her_chibi("hide") call gen_chibi("hide") # Defaults $ img = None $ pos = (0,0) $ zord = hermione_chibi.zorder # Note: Images are inconsistent, some have the chair already in it, some don't, it's kind of stupid. if states.room == "main_room": $ desk_OBJ.hidden = True # Hide desk object $ chair_left_OBJ.hidden = True # Hide left chair object if action == "reset": call her_chibi("stand", xpos, ypos) call gen_chibi("sit_behind_desk") hide screen her_chibi_scene return # Stand beside desk back elif action == "behind_desk_back": $ pos = (-77, 10) if not hermione.is_any_worn("bottom", "top"): $ img = "behind_desk_back_naked" elif not hermione.is_worn("top"): $ img = "behind_desk_back_topless" elif not hermione.is_worn("bottom"): $ img = "behind_desk_back_bottomless" else: $ img = "behind_desk_back" # Stand beside desk front elif action == "behind_desk_front": $ pos = (-77, 10) if not hermione.is_any_worn("bottom", "top"): $ img = "behind_desk_front_naked" elif not hermione.is_worn("top"): $ img = "behind_desk_front_topless" elif not hermione.is_worn("bottom"): $ img = "behind_desk_front_bottomless" else: $ img = "behind_desk_front" # Stand beside desk front lean on desk lift top elif action == "behind_desk_front_show_tits": $ pos = (-77, 10) $ img = "behind_desk_front_show_tits" # Stand beside desk lift top elif action == "behind_desk_show_tits": $ pos = (-77, 10) $ img = "behind_desk_show_tits" # Grope ass elif action == "grope_ass_back": $ pos = (-77, 10) if not hermione.is_any_worn("bottom", "top"): $ img = "grope_ass_back_naked" elif not hermione.is_worn("top"): $ img = "grope_ass_back_topless" elif not hermione.is_worn("bottom"): $ img = "grope_ass_back_bottomless" else: $ img = "grope_ass_back" elif action == "grope_ass_back_fast": $ pos = (-77, 10) $ img = "grope_ass_back_topless_fast" elif action == "grope_ass_front": $ pos = (-77, 10) if not hermione.is_any_worn("bottom", "top"): $ img = "grope_ass_front_naked" elif not hermione.is_worn("top"): $ img = "grope_ass_front_topless" elif not hermione.is_worn("bottom"): $ img = "grope_ass_front_bottomless" else: $ img = "grope_ass_front" elif action == "grope_ass_front_fast": $ pos = (-77, 10) $ img = "grope_ass_front_topless_fast" # Grope tits elif action == "grope_tits": $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) if hermione.is_worn("top", "bottom"): $ img = "grope_tits" elif hermione.is_worn("bottom"): $ img = "grope_tits_topless" elif hermione.is_worn("top"): $ img = "grope_tits_bottomless" else: $ img = "grope_tits_naked" elif action == "lift_top": if hermione.is_worn("top", "bottom"): $ img = "grope_tits_lift_top" else: $ img = "grope_tits_bottomless_lift_top" elif action == "grope_tits_jerk_off": $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) if hermione.is_worn("top", "bottom"): $ img = "grope_tits_jerk_off_clothed" elif hermione.is_worn("bottom"): $ img = "grope_tits_jerk_off_topless" elif hermione.is_worn("top"): $ img = "grope_tits_jerk_off_bottomless" else: $ img = "grope_tits_jerk_off_naked" elif action == "grope_tits_jerk_off_lift_top": $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) if hermione.is_worn("top", "bottom"): $ img = "grope_tits_jerk_off_lift_top" elif hermione.is_worn("top"): $ img = "grope_tits_jerk_off_bottomless_lift_top" elif action == "grope_tits_cum": $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) if hermione.is_worn("top", "bottom"): $ img = "grope_tits_cum_clothed" elif hermione.is_worn("bottom"): $ img = "grope_tits_cum_topless" elif hermione.is_worn("top"): $ img = "grope_tits_cum_bottomless" else: $ img = "grope_tits_cum_naked" elif action == "grope_tits_cum_done": $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) if hermione.is_worn("top", "bottom"): $ img = "grope_tits_cum_clothed_done" elif hermione.is_worn("bottom"): $ img = "grope_tits_cum_topless_done" elif hermione.is_worn("top"): $ img = "grope_tits_cum_bottomless_done" else: $ img = "grope_tits_cum_naked_done" elif action == "grope_tits_cum_lift_top": $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) if hermione.is_worn("top", "bottom"): $ img = "grope_tits_cum_lift_top" else: $ img = "grope_tits_cum_bottomless_lift_top" elif action == "grope_tits_cum_lift_top_done": $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) if hermione.is_worn("top", "bottom"): $ img = "grope_tits_cum_done" else: $ img = "grope_tits_cum_bottomless_lift_top_done" # Grope on podium (Quidditch pitch) elif action in ("grope_on_podium", "grope_on_podium_idle", "grope_on_podium_horny", "grope_on_podium_close", "grope_on_podium_cum"): $ pos = (255, 211) $ img = action $ zord = 9 # Override zorder; In front of screen quidditch_stands_mid w/ podium. # Lie on desk (admire ass) elif action == "lie_on_desk": $ pos = (-77, 10) if hermione.is_worn("bottom"): $ img = "lie_on_desk" else: $ img = "lie_on_desk_naked" elif action == "lie_on_desk_fingering": $ pos = (-77, 10) $ img = "finger_naked" elif action == "lie_on_desk_fingering_slow": $ pos = (-77, 10) $ img = "finger_naked_slow" elif action == "lie_on_desk_fingering_pause": $ pos = (-77, 10) $ img = "finger_naked_pause" elif action == "lie_on_desk_fingering_pause_ahegao": $ pos = (-77, 10) $ img = "finger_naked_pause_ahegao" elif action == "lie_on_desk_fingering_cumming": $ pos = (-77, 10) $ img = "finger_naked_cumming" elif action == "lie_on_desk_jerk_off": $ pos = (-77, 10) if hermione.is_worn("bottom"): $ img = "lie_on_desk_jerk_off" else: $ img = "lie_on_desk_naked_jerk_off" elif action == "lie_on_desk_cum": $ pos = (-77, 10) if hermione.is_worn("bottom"): $ img = "lie_on_desk_cum" else: $ img = "lie_on_desk_naked_cum" # Handjob elif action in ("hj", "hj_pause", "hj_cum_in", "hj_cum_in_done", "hj_cum_on", "hj_cum_on_done", "hj_kiss", "hj_kiss_cum"): $ desk_OBJ.hidden = False # Unhide desk object $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (230, 0) $ img = action # Titjob elif action in ("tj", "tj_pause", "tj_idle", "tj_cum_on", "tj_cum_on_done", "tj_mouth", "tj_cum_in", "tj_cum_in_done"): $ desk_OBJ.hidden = False # Unhide desk object $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (450, 200) $ img = action # Blowjob elif action in ("bj", "bj_pause", "bj_cum_in", "bj_cum_out", "bj_cum_out_done"): $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-7, 14) $ img = action # Sex elif action in ( "sex_hotdog", "sex", "sex_pause", "sex_slow", "sex_fast", "sex_cum_out", "sex_cum_out_done", "sex_cum_in", "sex_cum_in_done", "sex_naked", "sex_naked_pause", "sex_naked_slow", "sex_naked_fast", "sex_naked_cum_out", "sex_naked_cum_out_done", "sex_naked_cum_in", "sex_naked_cum_in_done" ): $ chair_left_OBJ.hidden = False # Unhide left chair object $ pos = (-77, 10) $ img = action show screen her_chibi_scene(img, pos, zord) if trans: with trans return screen her_chibi_scene(img, pos, zord): tag hermione_chibi zorder zord add img pos pos