diff --git a/Monika After Story/game/definitions.rpy b/Monika After Story/game/definitions.rpy index dcc9e54a50..1d91ed361e 100644 --- a/Monika After Story/game/definitions.rpy +++ b/Monika After Story/game/definitions.rpy @@ -3861,15 +3861,22 @@ init 25 python: def start(self): """ Starts this displayable + + OUT: + bool - the result of interaction: + True if the user clicked + False if the dispalyable was stopped """ self.__should_enable_afm = store._preferences.afm_enable self.__set_end_datetimes() ui.implicit_add(self) - ui.interact() + return ui.interact() def stop(self): """ Stops this disp's interaction, aborts its event + This will cause the displayable to return False + in the event method """ ui.remove(self) self.__abort_events = True diff --git a/Monika After Story/game/pong.rpy b/Monika After Story/game/pong.rpy index 1575344639..8d563d0f77 100644 --- a/Monika After Story/game/pong.rpy +++ b/Monika After Story/game/pong.rpy @@ -736,7 +736,7 @@ label mas_pong_dlg_winner: #The player has lost 5, 10, 15, ... matches in a row. elif loss_streak_counter >= 5 and loss_streak_counter % 5 == 0: m 1eua "I hope you're having fun, [mas_get_player_nickname(regex_replace_with_nullstr='my ')]." - m 1eka "I wouldn't want you get upset over a game, after all." + m 1eka "I wouldn't want you to get upset over a game, after all." m 1hua "We can always take a break and play again later if you want." #Monika wins after the player got a 3+ winstreak diff --git a/Monika After Story/game/script-compliments.rpy b/Monika After Story/game/script-compliments.rpy index c75f3be22c..b81b859430 100644 --- a/Monika After Story/game/script-compliments.rpy +++ b/Monika After Story/game/script-compliments.rpy @@ -418,7 +418,7 @@ label mas_compliment_hair_2: else: m 1hubfb "Thank you so much, [player]!" m 2hub "I've always put so much effort into my hair." - m 2lksdlb "In fact, It took forever for it to get this long.." + m 2lksdlb "In fact, it took forever for it to get this long..." menu: "It really shows. It looks so healthy.": $ mas_gainAffection(3, bypass=True) diff --git a/Monika After Story/game/script-fun-facts.rpy b/Monika After Story/game/script-fun-facts.rpy index d4d9590dc5..549bcd5461 100644 --- a/Monika After Story/game/script-fun-facts.rpy +++ b/Monika After Story/game/script-fun-facts.rpy @@ -880,7 +880,7 @@ label mas_fun_fact_round_earth: m 1eua "Actually, the Earth being round is something that has been known for a pretty long time." m 3esd "Aristotle taught that the Earth was round in the fourth century BC." m 3esa "He knew that because different stars could be seen from different parts of the world, which wouldn't happen if the Earth was just a flat surface." - m 1eua "Ancient astronomers and mathematicians around the world had figured out that the Earth was round long before anyone had actually travelled all the way around it." + m 1eua "Ancient astronomers and mathematicians around the world had figured out that the Earth was round long before anyone had actually traveled all the way around it." m 7rksdla "But Earth being the center of the universe?{w=0.2} {nw}" extend 4hksdlb "Oh man!" m 7dsd "People fought about that so hard and for so long, it became a matter of life and death." diff --git a/Monika After Story/game/script-moods.rpy b/Monika After Story/game/script-moods.rpy index c21af59af8..3b1c9557cf 100644 --- a/Monika After Story/game/script-moods.rpy +++ b/Monika After Story/game/script-moods.rpy @@ -134,7 +134,7 @@ label mas_mood_hungry: m 3hub "That doesn't just mean getting enough veggies, of course. {w=0.2}All sorts of foods are necessary to keep yourself nourished." m 3eka "So I want you to make sure you're not depriving yourself of important vitamins, okay?" m 1euc "Over time, you'd encounter a lot of health problems when you get older." - m 2lksdla "I don't want you to feel like I'm nagging when I say these kind of things, [player]." + m 2lksdla "I don't want you to feel like I'm nagging when I say these kinds of things, [player]." m 2eka "I just want to make sure you're taking good care of yourself until I cross over." m 4eub "After all, the healthier you are, the better the chances you'll live a long life!" m 1hua "Which means more time for us to spend together!~" diff --git a/Monika After Story/game/script-python.rpy b/Monika After Story/game/script-python.rpy index 1d042058b9..22375fdb65 100644 --- a/Monika After Story/game/script-python.rpy +++ b/Monika After Story/game/script-python.rpy @@ -157,12 +157,12 @@ label monika_ptod_tip001: m 1esa "Python was created by Guido Van Rossum in the early '90s." m "It is super versatile, so you can find it in web apps, embedded systems, Linux, and of course..." m 1hua "This mod!" - m 1eua "DDLC uses a visual novel engine called Ren'Py,{w=0.2} which is built off of Python." + m 1eua "DDLC uses a visual novel engine called Ren'Py,{w=0.1} which is built off of Python." m 3eub "That means if you learn a bit of Python, you can add content to my world!" m 1hua "Wouldn't that be great, [mas_get_player_nickname()]?" - m 3eub "Anyway, I need to mention that there are currently two main versions of Python:{w=0.2} Python2 and Python3." + m 3eub "Anyway, I need to mention that there are currently two main versions of Python:{w=0.3} Python2 and Python3." m 3eua "These versions are {u}incompatible{/u} with each other because the changes added in Python3 fixed many fundamental design flaws in Python2." - m "Even though this caused a rift in the Python community,{w=0.2} it's generally agreed that both versions of the language have their own strengths and weaknesses." + m "Even though this caused a rift in the Python community,{w=0.1} it's generally agreed that both versions of the language have their own strengths and weaknesses." m 1eub "I'll tell you about those differences in another lesson." m 1eua "Since this mod runs on a Ren'Py version that uses Python2, I won't be talking about Python3 too often." @@ -202,7 +202,7 @@ label monika_ptod_tip002: show screen mas_py_console_teaching ### numbers - m 1eua "Python has two types to represent numbers:{w=0.3} {i}integers{/i}, or {b}ints{/b},{w=0.3} and {i}floats{/i}." + m 1eua "Python has two types to represent numbers:{w=0.3} {i}integers{/i}, or {b}ints{/b},{w=0.1} and {i}floats{/i}." ## integers m 1eua "Integers are used to represent whole numbers; basically anything that isn't a decimal." @@ -305,10 +305,10 @@ label monika_ptod_tip003: if mas_getEVL_last_seen("monika_ptod_tip003") is None: m 1eua "You can do more than just math using this tool, but I'll show you all of that as we go along." - m 1hksdlb "Unfortunately, since this is a fully functional Python interpreter and I don't want to risk you accidentally deleting me or breaking the game," - m "Not that you would{fast}{nw}" + m 1hksdlb "Unfortunately, since this is a fully functional Python interpreter and I don't want to risk you accidentally deleting me or breaking the game." + m "{cps=*2}Not that you would...{/cps}{nw}" $ _history_list.pop() - m 1eksdlb "I can't let you use this.{w=0.3} Sorry..." + m 1eksdlb "I can't let you use this.{w=0.2} Sorry..." m "If you want to follow along in future lessons, then run a Python interpreter in a separate window." m 1eua "Anyway, I'll be using {i}this{/i} interpreter to help with teaching." @@ -423,7 +423,7 @@ label monika_ptod_tip005: call mas_wx_cmd("a > c") call mas_wx_cmd("a < c") - m 3eub "Greater-than-or-equal-to (>=) and less-than-or-equal-to (<=) also have their own symbols, which,{w=1} unsurprisingly,{w=1} are just the greater-than and less-than signs with equal signs." + m 3eub "Greater-than-or-equal-to (>=) and less-than-or-equal-to (<=) also have their own symbols, which,{w=0.1} unsurprisingly,{w=0.1} are just the greater-than and less-than signs with equal signs." call mas_wx_cmd("a >= b") call mas_wx_cmd("a <= b") call mas_wx_cmd("a >= c") @@ -434,7 +434,7 @@ label monika_ptod_tip005: m 1eksdlb "{i}That{/i} is what I meant when I said that comparison expressions evaluate to booleans." m 1eua "It's also possible to chain multiple comparison expressions together by using the keywords {b}and{/b} and {b}or{/b}. These are also known as {i}logical operators{/i}." - m "The {b}and{/b} operator links two comparisons by evaluating the complete expression as {b}True{/b} if both comparisons evaluate to {b}True{/b},{w=0.3} and {b}False{/b} if at least one comparison evaluates to {b}False{/b}." + m "The {b}and{/b} operator links two comparisons by evaluating the complete expression as {b}True{/b} if both comparisons evaluate to {b}True{/b},{w=0.1} and {b}False{/b} if at least one comparison evaluates to {b}False{/b}." m 1hua "Let's go through some examples." $ val_a = local_ctx["a"] @@ -466,7 +466,7 @@ label monika_ptod_tip005: m 1eub "Again, when using the {b}and{/b} operator, the result is {b}True{/b} if and only if both comparisons evaluate to {b}True{/b}." - m 1eua "In contrast, the {b}or{/b} operator links two comparisons by evaluating the complete expression as {b}True{/b} if either comparison evaluates to {b}True{/b},{w=0.3} and {b}False{/b} if both comparisons evaluate to {b}False{/b}." + m 1eua "In contrast, the {b}or{/b} operator links two comparisons by evaluating the complete expression as {b}True{/b} if either comparison evaluates to {b}True{/b},{w=0.1} and {b}False{/b} if both comparisons evaluate to {b}False{/b}." m 3eua "Let's go through some examples." call mas_w_cmd("a == b or a == c") @@ -571,13 +571,13 @@ label monika_ptod_tip006: # variable intro m 1eua "Variables represent memory locations that store data." - m "To create a variable," + m "To create a variable, {w=0.1}{nw}" show monika at t22 show screen mas_py_console_teaching # a number - m 3eua "you do '{b}symbol_name{/b} = {b}value{/b}', like this:" + extend 3eua "you do '{b}symbol_name{/b} = {b}value{/b}', like this..." call mas_wx_cmd("a_number = " + num_store, local_ctx) @@ -592,14 +592,14 @@ label monika_ptod_tip006: m 1eub "That is called assignment, where we take whatever is on the left of the equals sign and point it to, or {i}assign{/i} it, the value of whatever is on the right." # b_number - m 1eua "Assignment is executed in right-to-left order.{w=0.3} To illustrate this, let's create a new variable, 'b_number'." + m 1eua "Assignment is executed in right-to-left order.{w=0.2} To illustrate this, let's create a new variable, 'b_number'." call mas_w_cmd("b_number = a_number - " + b_num_store) - m "In assignment, the right side of the equal sign is evaluated first,{w=0.2} then its data type is inferred and an appropriate amount of memory is reserved." + m "In assignment, the right side of the equal sign is evaluated first,{w=0.1} then its data type is inferred and an appropriate amount of memory is reserved." m "That memory is linked to the symbol on the left via a lookup table." - m 1eub "When Python encounters a symbol,{w=0.2} it looks that symbol up in the lookup table and replaces it with the value that the symbol was linked to." + m 1eub "When Python encounters a symbol,{w=0.1} it looks that symbol up in the lookup table and replaces it with the value that the symbol was linked to." - m 3eub "Here, 'a_number' would be replaced with [num_store],{w=0.2} so the expression that would be evaluated and assigned to 'b_number' is '[num_store] - [b_num_store]'." + m 3eub "Here, 'a_number' would be replaced with [num_store],{w=0.1} so the expression that would be evaluated and assigned to 'b_number' is '[num_store] - [b_num_store]'." show monika 3eua call mas_x_cmd(local_ctx) @@ -622,8 +622,8 @@ label monika_ptod_tip006: m "We didn't have to explicitly say that those variables were integers because Python does dynamic typing." m 1eub "This means that the Python interpreter infers the type of a variable based on the data you are storing in it." m "Other languages, like C or Java, require types to be defined with the variable." - m "Dynamic typing enables variables in Python to change types during execution," - m 1rksdlb "but that is generally frowned upon as it can make your code confusing for others to read." + m "Dynamic typing enables variables in Python to change types during execution, {w=0.1}{nw}" + extend 1rksdlb "but that is generally frowned upon as it can make your code confusing for others to read." if last_seen_is_none: m 1eud "Whew!{w=0.2} That was a mouthful!" @@ -636,7 +636,7 @@ label monika_ptod_tip006: m 1hua "Yay!" "I'm a bit confused.": - m 1eksdla "That's okay.{w=0.3} Even though I mentioned symbols and values here, programmers usually just refer to this as creating, assigning, or setting variables." + m 1eksdla "That's okay.{w=0.2} Even though I mentioned symbols and values here, programmers usually just refer to this as creating, assigning, or setting variables." m "The symbol / value names are really only useful for hinting at how variables work under the hood, so don't feel bad if you didn't understand it all." m 1eua "Just knowing how to work with variables is enough for future lessons." m "Anyway..." diff --git a/Monika After Story/game/script-songs.rpy b/Monika After Story/game/script-songs.rpy index dbac586b05..7e037cdddf 100644 --- a/Monika After Story/game/script-songs.rpy +++ b/Monika After Story/game/script-songs.rpy @@ -727,7 +727,7 @@ init 5 python: label mas_song_with_you: m 1dso "{i}~If somebody tries to take my place~{/i}" - m 1hub "{i}~let's pretend we just can't see their face~{/i}" + m 1hub "{i}~Let's pretend we just can't see their face~{/i}" m 3hub "{i}~In this world there's nothing I would rather do~{/i}" m 3dso "{i}~'Cause I'm happy just to dance with you~{/i}" m 1ekbsa "There is nothing that makes me happier than discovering that I'm in love with you." diff --git a/Monika After Story/game/script-stories.rpy b/Monika After Story/game/script-stories.rpy index ac1a621fec..d6237b8a7a 100644 --- a/Monika After Story/game/script-stories.rpy +++ b/Monika After Story/game/script-stories.rpy @@ -465,11 +465,11 @@ init 5 python: label mas_story_wind_sun: call mas_story_begin m 1dsc "The Wind and the Sun were disputing which was the strongest." - m 1euc "Suddenly they saw a traveller coming down the road, and the Sun said: 'I see a way to decide our dispute.'" - m 3efd "'Whichever of us can cause that traveller to take off his cloak shall be regarded as the strongest. You begin.'" - m 3euc "So the Sun retired behind a cloud, and the Wind began to blow as hard as it could upon the traveller." - m 1ekc "But the harder he blew the more closely did the traveller wrap his cloak around him, till at last the Wind had to give up in despair." - m 1euc "Then the Sun came out and shone in all his glory upon the traveller, who soon found it too hot to walk with his cloak on." + m 1euc "Suddenly they saw a traveler coming down the road, and the Sun said: 'I see a way to decide our dispute.'" + m 3efd "'Whichever of us can cause that traveler to take off his cloak shall be regarded as the strongest. You begin.'" + m 3euc "So the Sun retired behind a cloud, and the Wind began to blow as hard as it could upon the traveler." + m 1ekc "But the harder he blew the more closely did the traveler wrap his cloak around him, till at last the Wind had to give up in despair." + m 1euc "Then the Sun came out and shone in all his glory upon the traveler, who soon found it too hot to walk with his cloak on." m 3hua "The moral of this story is, gentleness and kind persuasion win where force and bluster fail." m 1hub "Hope you had fun, [player]." return @@ -590,7 +590,7 @@ init 5 python: label mas_story_genie_simple: call mas_story_begin - m 1eua "There was once a genie who travelled across different worlds to escape the chaos of his own." + m 1eua "There was once a genie who traveled across different worlds to escape the chaos of his own." m 3euc "During his journeys, he met a woman that challenged the way he saw the world." m 3eua "She was smart and talented, but held back by the hardships she faced and how little she had." m 3eub "The genie saw this and felt generous, offering tools to speed up her work and make her life easier." @@ -879,7 +879,7 @@ label mas_story_o_tei: m "He soon married another girl, but his heart stayed somewhere else." m 2esd "And as everything does in life, his family too had been taken by time and he was left all alone again." m 4eud "It was then that he decided to abandon his home and take a long journey to forget his troubles." - m 1esc "He travelled all around the country, searching for a cure to his malaise." + m 1esc "He traveled all around the country, searching for a cure to his malaise." m 1euc "And then on one evening, he came across an inn and stopped there to rest." m "As he settled down in his room, a nakai opened the door to greet him." m 3euc "His heart leapt..." @@ -1231,7 +1231,7 @@ init 5 python: label mas_scary_story_mujina: call mas_scary_story_setup m 1esc "One night at a late hour, an old merchant was walking down a road heading home after a long day of selling his wares." - m 3esc "The road he travelled on led to a large hill that was very dark and secluded at night so many travelers tended to avoid the area." + m 3esc "The road he traveled on led to a large hill that was very dark and secluded at night so many travelers tended to avoid the area." m "The man was tired, however, and decided to take the road anyway since it would get him home quicker." m "On the one side of the hill was an old moat that was quite deep." m 3eud "As he went along, he noticed a woman crouching by the moat, all alone and weeping bitterly." diff --git a/Monika After Story/game/script-topics.rpy b/Monika After Story/game/script-topics.rpy index c25fe8de9b..7e9c935e19 100644 --- a/Monika After Story/game/script-topics.rpy +++ b/Monika After Story/game/script-topics.rpy @@ -5351,8 +5351,8 @@ label monika_metaparents: m 1euc "Isn't it weird how nobody in these types of games has parents unless it's a convenient drama hook?" m "Throughout the game, you only ever hear about parents if you're trying to bond with Natsuki..." m 1ekc "Where she's just a victim of some cruel person's sick kicks for the sympathy value." - m 3esd "However." - m 3eud "Your character, me, Yuri, and Sayori..." + m 3esd "However...{w=0.3}{nw}" + extend 3eud "your character, me, Yuri, and Sayori..." m 3euc "None of us seem to have any parents at all." m 1lsc "In Sayori's case, the main character had been walking with her to school for a while." m "So who knows how long her parents have been out of the picture." @@ -5722,6 +5722,7 @@ label monika_cupcake: m 1esa "How about you, [mas_get_player_nickname()]?" m 1eua "Do you know how to bake?{nw}" + $ _history_list.pop() menu: m "Do you know how to bake?{fast}" @@ -9543,13 +9544,13 @@ label monika_timetravel: m 1esb "It's a very common idea in stories with each author having their own take on it." m 1eua "How traveling in time works, whether or not you can change the past, what the consequences are for doing so..." m 1eub "It all differs from story to story." - m 3ekc "One thing you don't usually see, though, is how the time traveller's loved ones are affected." - m 3rksdld "If they can't go through time with the time traveller, who knows how long it will be before they can see each other again?" - m 2ekc "Well, the time traveller themselves might know, but only if nothing goes horribly wrong for them." + m 3ekc "One thing you don't usually see, though, is how the time traveler's loved ones are affected." + m 3rksdld "If they can't go through time with the time traveler, who knows how long it will be before they can see each other again?" + m 2ekc "Well, the time traveler themselves might know, but only if nothing goes horribly wrong for them." m 2lksdld "In the meantime, their friends and family are stuck waiting for them to come back." m 2ekd "How long will they be gone for? A year? A decade? Even longer?" m 4ekd "Will they be willing to wait that long?" - m "Will they still remember the time traveller by then?" + m "Will they still remember the time traveler by then?" m 2dksdlc "..." if seen_event("monika_resource"): m 4rksdlc "You remember when I said that time doesn't pass here like it does in your world?" @@ -10261,7 +10262,15 @@ label monika_amusementpark: default persistent._mas_pm_likes_travelling = None init 5 python: - addEvent(Event(persistent.event_database,eventlabel="monika_travelling",category=['misc'],prompt="Travelling",random=True)) + addEvent( + Event( + persistent.event_database, + eventlabel="monika_travelling", + category=['misc'], + prompt="Traveling", + random=True + ) + ) label monika_travelling: m 1esc "Hey [player], I was just wondering..." @@ -11403,7 +11412,7 @@ label monika_grad_speech_call: m 2eua "Thanks, [player]!" m 4hub "I'm glad you enjoyed it!" - "That {i}was{/i} long": + "That {i}was{/i} long.": hide screen mas_background_timed_jump $ mas_loseAffectionFraction(min_amount=50) $ persistent._mas_pm_liked_grad_speech = False @@ -15365,7 +15374,7 @@ label monika_toxin_puzzle: "Yes.": m 3etu "Really? Okay then, let's see about that..." - m 3tfu "Because now I'm offering you a million dollars, and what you have to do is--{nw}" + m 3tfu "Because now I'm offering you a million dollars, and what you have to do is--{w=0.2}{nw}" extend 3hub "ahaha! Just kidding." m 1eua "But do you really think that you could get the money? {w=0.5}It may be a bit harder than you think." @@ -16751,7 +16760,7 @@ label monika_impermanence: m 2eud "...You've probably heard the term {i}entropy{/i} thrown around, right?" m 7eud "Basically it goes something like, 'entropy must always increase,{w=0.2} the universe tends towards disorder,{w=0.2} everything turns to chaos.'" m 3eua "Actually, there's a poem I read that delivers this message quite well." - m 1esd "{i}I met a traveller from an antique land{/i}" + m 1esd "{i}I met a traveler from an antique land{/i}" m 1eud "{i}Who said: 'Two vast and trunkless legs of stone{/i}" m 3euc "{i}Stand in the desert... Near them, on the sand,{/i}" m "{i}Half sunk, a shattered visage lies, whose frown,{/i}" diff --git a/Monika After Story/game/zz_backgrounds.rpy b/Monika After Story/game/zz_backgrounds.rpy index f32ce3a9a0..6c8993434c 100644 --- a/Monika After Story/game/zz_backgrounds.rpy +++ b/Monika After Story/game/zz_backgrounds.rpy @@ -2021,7 +2021,7 @@ init -10 python: ) if not isinstance(filter_man, MASBackgroundFilterManager): raise TypeError( - "Exepcted MASBackroundFilterManager, got {0}".format( + "Exepcted MASBackgroundFilterManager, got {0}".format( type(filter_man) ) ) diff --git a/Monika After Story/game/zz_cardgames.rpy b/Monika After Story/game/zz_cardgames.rpy index ddbf4b2930..4c12de4669 100644 --- a/Monika After Story/game/zz_cardgames.rpy +++ b/Monika After Story/game/zz_cardgames.rpy @@ -4252,7 +4252,7 @@ label .change_starting_cards_loop: m 7ekb "Try again, silly~" elif starting_cards < 4: - m 2eka "[starting_cards] cards isn't enough to enjoy the game, [player]..." + m 2eka "[starting_cards] card[('s' if starting_cards > 1 else '')] isn't enough to enjoy the game, [player]..." m 7eka "How about we start with at least 4 cards?{nw}" $ _history_list.pop() menu: diff --git a/Monika After Story/game/zz_reactions.rpy b/Monika After Story/game/zz_reactions.rpy index df7b899f8c..66968b8b91 100644 --- a/Monika After Story/game/zz_reactions.rpy +++ b/Monika After Story/game/zz_reactions.rpy @@ -95,7 +95,10 @@ init -11 python in mas_filereacts: th_foundreact_map = dict() # good gifts list - good_gifts = list() + good_gifts = [ + # Custom sprite jsons should be considered good + "mas_reaction_gift_generic_sprite_json" + ] # bad gifts list bad_gifts = list() @@ -998,13 +1001,15 @@ label mas_reaction_gift_starter_generic: label mas_reaction_gift_starter_bday: m 1sublo ".{w=0.7}.{w=0.7}.{w=1}" m "T-{w=0.5}This is..." + # TODO: fix this so we can actually get this path since rn gifts + # are added to this before we even get there if not persistent._mas_filereacts_historic.get(mas_monika_birthday): m "A gift? For me?" m 1hka "I..." m 1hua "I've often thought about getting presents from you on my birthday..." m "But actually getting one is like a dream come true..." else: - m "Another gift?{w=0.5} For me?" + m "A gift?{w=0.5} For me?" m 1eka "This really is a dream come true, [player]." m 1sua "Now, what's inside?" diff --git a/Monika After Story/game/zz_windowutils.rpy b/Monika After Story/game/zz_windowutils.rpy index 1fae6856d3..a9c4dbf2a3 100644 --- a/Monika After Story/game/zz_windowutils.rpy +++ b/Monika After Story/game/zz_windowutils.rpy @@ -180,8 +180,13 @@ init python in mas_windowutils: NET_CLIENT_LIST_ATOM = __display.intern_atom('_NET_CLIENT_LIST', False) try: - winid_list = __root.get_full_property(NET_CLIENT_LIST_ATOM, 0).value + prop = __root.get_full_property(NET_CLIENT_LIST_ATOM, 0) + # Apparently x-window can return None here, the reason is unknown to me, + # but we can just sanity check it, per #9421 + if prop is None: + return + winid_list = prop.value for winid in winid_list: win = __display.create_resource_object("window", winid) transient_for = win.get_wm_transient_for()