WTS/game/scripts/interface/door.rpy
Asriel Senna d119e71116 Only reseed the door at the beginning of the day/night
It's weird that people teleport when you open the menu twice in a row
2023-12-17 10:15:14 +01:00

197 lines
6.5 KiB
Plaintext

####################################
############# Menu #################
####################################
default summon_show_busy = True
default door_randomobj = renpy.random.Random()
init python:
def __choice(seq):
seed = door_randomobj.getstate()
rv = door_randomobj.choice(seq)
door_randomobj.setstate(seed)
return rv
define map_transcript_loc = dict(
library = "Library",
room_g = "Gryffindor Dormitory",
room_s = "Slytherin Dormitory",
room_r = "Ravenclaw Dormitory",
room_h = "Hufflepuff Dormitory",
great_hall = "Great Hall",
courtyard = "Courtyard",
forest = "Forest",
greenhouse = "Greenhouse",
defense = "D.A.D.A Classroom",
training_grounds = "Training Grounds",
Lake = "Lake",
randomstudent = functools.partial(__choice, (
"Classroom",
"Bathroom",
"Hagrid's Hut",
"Weasley's Store",
"Mafkin's Store",
"Broom Cupboard",
"Attic")),
randomsnape = functools.partial(__choice, (
"Classroom",
"Boathouse",
"Bathroom",
"Snape's Office",
"Hall",
"Slytherin Dormitory",
"Library",
"Attic",
"Forest",
"Lake",
"Dungeons",
"Quidditch Cave",
"Staircase",
"Behind your door",
"Room of Doom")),
randomtonks = functools.partial(__choice, (
"Classroom",
"Bathroom",
"Hall",
"Gryffindor Dormitory",
"Slytherin Dormitory",
"Hufflepuff Dormitory",
"Ravenclaw Dormitory",
"Training Grounds",
"Tonks's Room",
"Quidditch Pitch",
"Infirmary",
"Sex Dungeon",
"Hospital Wing",
"Forest",
"Lake",
"Greenhouse",
"Mafkin's Store")),
)
label summon:
$ gui.in_context("summon_menu")
jump main_room_menu
label summon_menu(xx=723, yy=90):
$ renpy.dynamic(
# Door dictionary
summon_dict = {
# the order will be the one in the menu
"Snape": {"ico": "snape", "flag": states.sna.unlocked, "busy": states.sna.busy, "loc": "randomsnape"},
"Tonks": {"ico": "tonks", "flag": states.ton.unlocked, "busy": states.ton.busy, "loc": "randomtonks"},
"Hermione": {"ico": "hermione", "flag": states.her.unlocked, "busy": states.her.busy, "loc": states.her.map_location },
"Cho": {"ico": "cho", "flag": states.cho.unlocked, "busy": states.cho.busy, "loc": states.cho.map_location},
"Luna": {"ico": "luna", "flag": states.lun.unlocked, "busy": states.lun.busy, "loc": states.lun.map_location},
"Astoria": {"ico": "astoria", "flag": states.ast.unlocked, "busy": states.ast.busy, "loc": states.ast.map_location },
"Susan": {"ico": "susan", "flag": states.sus.unlocked, "busy": states.sus.busy, "loc": states.sus.map_location}
#"Ginny", "Daphne", "Padma", "Patil", "Myrtle", "Mafkin"
},
)
call screen summon(xx, yy)
return
label .summon(char):
$ enable_game_menu()
$ renpy.jump_out_of_context("summon_"+char.lower())
return
label .summon_busy(char):
if game.daytime or char in ["Tonks", "Snape"]:
nar "[char] is currently busy. Try again later."
else:
nar "[char] is currently asleep. Try again tomorrow."
return
screen summon(xx, yy):
tag summon
zorder 15
modal True
add "gui_fade"
if renpy.mobile:
use close_button_background
use close_button(key=["summon", "game_menu"])
fixed:
pos (xx, yy)
if settings.get("animations"):
at gui_animation
use summon_menu
screen summon_menu():
tag summon_menu
modal True
zorder 15
window:
style "empty"
xysize (207, 454)
use invisible_button()
add gui.format("interface/achievements/{}/panel_left.webp")
vbox:
pos (6, 384)
spacing 32
null
frame:
style "empty"
textbutton "Show Busy:":
style gui.theme("overlay_button")
xsize 195 ysize 32
text_align (0.4, 0.5)
text_size 12
action ToggleVariable("summon_show_busy", True, False)
add gui.theme("check_{}").format(str(summon_show_busy).lower()) xalign 0.7 ypos 4
vbox:
pos (6, 6)
$ allbusy = True
for char, char_dict in summon_dict.items():
if char_dict["flag"]:
if summon_show_busy or not char_dict["busy"]:
$ allbusy = False
frame:
style "empty"
xsize 195
ysize 50
vbox:
textbutton char:
style "empty"
xsize 195 ysize 46
hover_background gui.format("interface/achievements/{}/highlight_left_b.webp")
text_xalign 0.6 text_yalign 0.5
text_xanchor 0.5
text_size 20
if not char_dict["busy"]:
action Call("summon_menu.summon", char, from_current=True)
else:
text_color "#8C8C70"
action Call("summon_menu.summon_busy", char, from_current=True)
add gui.format("interface/achievements/{}/spacer_left.webp")
button:
style gui.theme("overlay_button")
background gui.format("interface/achievements/{}/iconbox.webp")
foreground "interface/achievements/glass_iconbox.webp"
xysize (48, 48)
add crop_image_zoom("interface/icons/head/"+char_dict["ico"]+".webp", 42, 42, char_dict["busy"]) align (0.5, 0.5)
$ loc = map_transcript_loc[char_dict["loc"]]
text (loc() if callable(loc) else loc) size 10 xcenter 0.6 yalign 0.9
if not states.sna.unlocked:
text "You don't know anyone" size 12 at truecenter
elif allbusy:
text "All characters are busy" size 12 at truecenter