From 0248a71aaa842a728e4375cad0bafdad737c0430 Mon Sep 17 00:00:00 2001
From: Jesusaves <cpntb1@ymail.com>
Date: Fri, 25 Dec 2020 12:10:01 -0300
Subject: Fork code, replace some ifs with showifs in screen, add dummy
 structures. Hopefully, code will be more stable from now on. It might still
 crash, but then I'll be sure the bug is on the draggroups.

---
 game/01_init.rpy     |  19 +++
 game/ATTRIBUTION     |   2 +
 game/battle.rpy      |  13 +-
 game/gfx/mobs/0.png  | Bin 0 -> 126189 bytes
 game/gfx/units/0.png | Bin 0 -> 1067295 bytes
 game/gui/battle.rpy  | 435 ++++++++++++++++++++++++++-------------------------
 6 files changed, 250 insertions(+), 219 deletions(-)
 create mode 100644 game/gfx/mobs/0.png
 create mode 100644 game/gfx/units/0.png

diff --git a/game/01_init.rpy b/game/01_init.rpy
index cd45f0a..d90bf7e 100644
--- a/game/01_init.rpy
+++ b/game/01_init.rpy
@@ -106,6 +106,25 @@ init -3 python:
     IRC_AUTH_NICK   =2
     IRC_AUTH_CHAN   =3
 
+    # Special error structs
+    ERR_MOBSTRUCT   ={
+            "name": "ERROR",
+            "unit_id": 0,
+            "max_hp": 0,
+            "hp": 0,
+            "atk": 0,
+            "ele": 0,
+            "status_effects": 0
+            }
+    ERR_PLAYERSTRUCT={
+            "unit_id": 0,
+            "max_hp": 0,
+            "hp": 0,
+            "atk": 0,
+            "ele": 0,
+            "status_effects": 0
+            }
+
     # Smart Print command
     def stdout(message):
         if debug:
diff --git a/game/ATTRIBUTION b/game/ATTRIBUTION
index 76a2413..1c8ac50 100644
--- a/game/ATTRIBUTION
+++ b/game/ATTRIBUTION
@@ -92,6 +92,7 @@ Where relevant, you must also include a link to https://tmw2.org in your credit.
 	gfx/gui/ele_4.png (Chrisdesign) (CC0)	(From OpenGameArt)
 	gfx/gui/ele_5.png (Chrisdesign) (CC0)	(From OpenGameArt)
 ## MOBS
+	gfx/mobs/0.png (-)	(-)	(-)
 	gfx/mobs/950004.png
 	gfx/mobs/950008.png
 ## SPHERE
@@ -122,6 +123,7 @@ Where relevant, you must also include a link to https://tmw2.org in your credit.
 	gfx/summons/2.webp (-)	(-)	(-)
 	gfx/summons/3.webp (-)	(-)	(-)
 ## UNITS
+	gfx/units/0.png (-)	(-)	(-)
 	gfx/units/10000000.png (David Revoy)	(CC BY 3.0)	(From OpenGameArt)
 
 # GUI
diff --git a/game/battle.rpy b/game/battle.rpy
index bf7d8e9..2e9dd18 100644
--- a/game/battle.rpy
+++ b/game/battle.rpy
@@ -64,17 +64,20 @@ label combat:
             en1=Battle["enemy"][0]
             show_img("mob_"+str(en1["unit_id"]), False) # Validate
         except:
-            en1={"hp": 0}
+            en1=copy.copy(ERR_MOBSTRUCT)
         try:
             en2=Battle["enemy"][1]
             show_img("mob_"+str(en2["unit_id"]), False) # Validate
         except:
-            en2={"hp": 0}
+            en2=copy.copy(ERR_MOBSTRUCT)
         try:
             en3=Battle["enemy"][2]
             show_img("mob_"+str(en3["unit_id"]), False) # Validate
         except:
-            en3={"hp": 0}
+            en3=copy.copy(ERR_MOBSTRUCT)
+
+        while len(Battle["party"]) < 4:
+            Battle["party"].append(copy.copy(ERR_PLAYERSTRUCT))
     $stdout("================= call begin")
 
     # TODO: Swap units support
@@ -87,7 +90,9 @@ label combat:
         except:
             traceback.print_exc()
             stdout("FAILED to render battle screen, trying again...")
-            sdelay(0.5)
+            renpy.hide_screen("battle")
+            sdelay(1.5)
+            raise
             renpy.jump("combat")
 
         stdout("================= call ended")
diff --git a/game/gfx/mobs/0.png b/game/gfx/mobs/0.png
new file mode 100644
index 0000000..5ef6126
Binary files /dev/null and b/game/gfx/mobs/0.png differ
diff --git a/game/gfx/units/0.png b/game/gfx/units/0.png
new file mode 100644
index 0000000..20ed9f3
Binary files /dev/null and b/game/gfx/units/0.png differ
diff --git a/game/gui/battle.rpy b/game/gui/battle.rpy
index bdfb642..a22a515 100644
--- a/game/gui/battle.rpy
+++ b/game/gui/battle.rpy
@@ -84,10 +84,52 @@ label bl_context:
     $ blayout2()
     return
 
+#############################################################################
+screen battle_mobs():
+    ####################################################
+    # Render enemies
+    fixed:
+        # Enemy 1
+        showif (en1["hp"] > 0):
+            add At("mob_"+str(en1["unit_id"]), enemy1)
+            vbox:
+                xalign 0.5
+                yanchor 0.5
+                ypos 0.24
+                xmaximum 180
+                ymaximum 20
+                text en1["name"]
+                bar value en1["hp"] range en1["max_hp"]
+
+        # Enemy 2
+        showif (en2["hp"] > 0):
+            add At("mob_"+str(en2["unit_id"]), enemy2)
+            vbox:
+                xalign 1.0
+                yanchor 0.5
+                ypos 0.24
+                xmaximum 180
+                ymaximum 20
+                text en2["name"]
+                bar value en2["hp"] range en2["max_hp"]
+
+        # Enemy 3
+        showif (en3["hp"] > 0):
+            add At("mob_"+str(en3["unit_id"]), enemy3)
+            vbox:
+                xalign 0.0
+                yanchor 0.5
+                ypos 0.24
+                xmaximum 180
+                ymaximum 20
+                text en3["name"]
+                bar value en3["hp"] range en3["max_hp"]
+
 #############################################################################
 screen battle():
     # Background
     add "bg battle"
+    use battle_mobs
 
     ####################################################
     # Render HUD
@@ -106,7 +148,7 @@ screen battle():
             # Preferences button
             null width 20
             imagebutton auto "gfx/gui/cog_%s.png" action ShowMenu('preferences')
-            textbutton _("Party") action Function(blayout)
+            #textbutton _("Party") action Function(blayout)
             null width 20
             text "%d " % (Battle["turn"])
             text _(" Turn")
@@ -120,259 +162,222 @@ screen battle():
                 yalign 0.0
                 textbutton _("I'm ready") action Return()
 
-    ####################################################
-    # Render enemies
-
-    # Enemy 1
-    if (en1["hp"] > 0):
-        add At("mob_"+str(en1["unit_id"]), enemy1)
-        vbox:
-            xalign 0.5
-            yanchor 0.5
-            ypos 0.24
-            xmaximum 180
-            ymaximum 20
-            text en1["name"]
-            bar value en1["hp"] range en1["max_hp"]
-
-    # Enemy 2
-    if (en2["hp"] > 0):
-        add At("mob_"+str(en2["unit_id"]), enemy2)
-        vbox:
-            xalign 1.0
-            yanchor 0.5
-            ypos 0.24
-            xmaximum 180
-            ymaximum 20
-            text en2["name"]
-            bar value en2["hp"] range en2["max_hp"]
-
-    # Enemy 3
-    if (en3["hp"] > 0):
-        add At("mob_"+str(en3["unit_id"]), enemy3)
-        vbox:
-            xalign 0.0
-            yanchor 0.5
-            ypos 0.24
-            xmaximum 180
-            ymaximum 20
-            text en3["name"]
-            bar value en3["hp"] range en3["max_hp"]
-
     ####################################################
     # Render allies
     # TODO: Gray out and unmovable if dead
     # One drag group per party member defined in Battle
-    draggroup:
-        xpos 0.25
-        xanchor 1.0
-        yanchor 1.0
-        ypos config.screen_height-10
-        xmaximum 256
-        ymaximum 480
-        # Display the background
-        drag:
-            child At("gfx/action.png", party1)
-            draggable False
-            droppable False
-        # Display the card (if there's one)
-        if (fx1):
+    fixed:
+        draggroup:
+            xpos 0.25
+            xanchor 1.0
+            yanchor 1.0
+            ypos config.screen_height-10
+            xmaximum 256
+            ymaximum 480
+            # Display the background
             drag:
-                drag_name "party1"
-                child At(fx1, c_party1)
+                child At("gfx/action.png", party1)
+                draggable False
                 droppable False
-                if (Battle["party"][0]["hp"] > 0):
-                    dragged combat_action
-                else:
+            # Display the card (if there's one)
+            if (fx1):
+                drag:
+                    drag_name "party1"
+                    child At(fx1, c_party1)
+                    droppable False
+                    if (Battle["party"][0]["hp"] > 0):
+                        dragged combat_action
+                    else:
+                        draggable False
+                    ypos 48
+                # The action areas
+                drag:
+                    drag_name "Skill"
+                    child At("gfx/actionarea.png", party1)
                     draggable False
-                ypos 48
-            # The action areas
-            drag:
-                drag_name "Skill"
-                child At("gfx/actionarea.png", party1)
-                draggable False
-                ypos 0.0
+                    ypos 0.0
+                drag:
+                    drag_name "Sphere"
+                    child At("gfx/actionarea.png", party1)
+                    draggable False
+                    yalign 1.0
+            # Display the sphere
             drag:
-                drag_name "Sphere"
-                child At("gfx/actionarea.png", party1)
+                child ("gfx/sphere/"+str(Battle["spheres"][0])+".png")
                 draggable False
+                droppable False
                 yalign 1.0
-        # Display the sphere
-        drag:
-            child ("gfx/sphere/"+str(Battle["spheres"][0])+".png")
-            draggable False
-            droppable False
-            yalign 1.0
-            xalign 0.5
-    if (fx1 and Battle["party"][0]["hp"] <= 0):
-        add At("gfx/off.png", party1)
+                xalign 0.5
+        if (fx1 and Battle["party"][0]["hp"] <= 0):
+            add At("gfx/off.png", party1)
 
-    # One drag group per party member defined in Battle
-    draggroup:
-        xpos 0.50
-        xanchor 1.0
-        yanchor 1.0
-        ypos config.screen_height-10
-        xmaximum 256
-        ymaximum 480
-        drag:
-            child At("gfx/action.png", party2)
-            draggable False
-            droppable False
-        if (fx2):
+        # One drag group per party member defined in Battle
+        draggroup:
+            xpos 0.50
+            xanchor 1.0
+            yanchor 1.0
+            ypos config.screen_height-10
+            xmaximum 256
+            ymaximum 480
             drag:
-                drag_name "party2"
-                child At(fx2, c_party2)
+                child At("gfx/action.png", party2)
+                draggable False
                 droppable False
-                if (Battle["party"][1]["hp"] > 0):
-                    dragged combat_action
-                else:
+            if (fx2):
+                drag:
+                    drag_name "party2"
+                    child At(fx2, c_party2)
+                    droppable False
+                    if (Battle["party"][1]["hp"] > 0):
+                        dragged combat_action
+                    else:
+                        draggable False
+                    ypos 48
+                drag:
+                    drag_name "Skill"
+                    child At("gfx/actionarea.png", party2)
                     draggable False
-                ypos 48
-            drag:
-                drag_name "Skill"
-                child At("gfx/actionarea.png", party2)
-                draggable False
-                ypos 0.0
+                    ypos 0.0
+                drag:
+                    drag_name "Sphere"
+                    child At("gfx/actionarea.png", party2)
+                    draggable False
+                    yalign 1.0
             drag:
-                drag_name "Sphere"
-                child At("gfx/actionarea.png", party2)
+                child ("gfx/sphere/"+str(Battle["spheres"][1])+".png")
                 draggable False
+                droppable False
                 yalign 1.0
-        drag:
-            child ("gfx/sphere/"+str(Battle["spheres"][1])+".png")
-            draggable False
-            droppable False
-            yalign 1.0
-            xalign 0.5
+                xalign 0.5
 
-    if (fx2 and Battle["party"][1]["hp"] <= 0):
-        add At("gfx/off.png", party2)
-    # One drag group per party member defined in Battle
-    draggroup:
-        xpos 0.75
-        xanchor 1.0
-        yanchor 1.0
-        ypos config.screen_height-10
-        xmaximum 256
-        ymaximum 480
-        drag:
-            child At("gfx/action.png", party3)
-            draggable False
-            droppable False
-        if (fx3):
+        if (fx2 and Battle["party"][1]["hp"] <= 0):
+            add At("gfx/off.png", party2)
+        # One drag group per party member defined in Battle
+        draggroup:
+            xpos 0.75
+            xanchor 1.0
+            yanchor 1.0
+            ypos config.screen_height-10
+            xmaximum 256
+            ymaximum 480
             drag:
-                drag_name "party3"
-                child At(fx3, c_party3)
+                child At("gfx/action.png", party3)
+                draggable False
                 droppable False
-                if (Battle["party"][2]["hp"] > 0):
-                    dragged combat_action
-                else:
+            if (fx3):
+                drag:
+                    drag_name "party3"
+                    child At(fx3, c_party3)
+                    droppable False
+                    if (Battle["party"][2]["hp"] > 0):
+                        dragged combat_action
+                    else:
+                        draggable False
+                    ypos 48
+                drag:
+                    drag_name "Skill"
+                    child At("gfx/actionarea.png", party3)
                     draggable False
-                ypos 48
-            drag:
-                drag_name "Skill"
-                child At("gfx/actionarea.png", party3)
-                draggable False
-                ypos 0.0
+                    ypos 0.0
+                drag:
+                    drag_name "Sphere"
+                    child At("gfx/actionarea.png", party3)
+                    draggable False
+                    yalign 1.0
             drag:
-                drag_name "Sphere"
-                child At("gfx/actionarea.png", party3)
+                child ("gfx/sphere/"+str(Battle["spheres"][2])+".png")
                 draggable False
+                droppable False
                 yalign 1.0
-        drag:
-            child ("gfx/sphere/"+str(Battle["spheres"][2])+".png")
-            draggable False
-            droppable False
-            yalign 1.0
-            xalign 0.5
+                xalign 0.5
 
-    if (fx3 and Battle["party"][2]["hp"] <= 0):
-        add At("gfx/off.png", party3)
-    # One drag group per party member defined in Battle
-    draggroup:
-        xpos 1.0
-        xanchor 1.0
-        yanchor 1.0
-        ypos config.screen_height-10
-        xmaximum 256
-        ymaximum 480
-        drag:
-            child At("gfx/action.png", party4)
-            draggable False
-            droppable False
-        if (fx4):
+        if (fx3 and Battle["party"][2]["hp"] <= 0):
+            add At("gfx/off.png", party3)
+        # One drag group per party member defined in Battle
+        draggroup:
+            xpos 1.0
+            xanchor 1.0
+            yanchor 1.0
+            ypos config.screen_height-10
+            xmaximum 256
+            ymaximum 480
             drag:
-                drag_name "party4"
-                child At(fx4, c_party4)
+                child At("gfx/action.png", party4)
+                draggable False
                 droppable False
-                if (Battle["party"][3]["hp"] > 0):
-                    dragged combat_action
-                else:
+            if (fx4):
+                drag:
+                    drag_name "party4"
+                    child At(fx4, c_party4)
+                    droppable False
+                    if (Battle["party"][3]["hp"] > 0):
+                        dragged combat_action
+                    else:
+                        draggable False
+                    ypos 48
+                drag:
+                    drag_name "Skill"
+                    child At("gfx/actionarea.png", party4)
                     draggable False
-                ypos 48
-            drag:
-                drag_name "Skill"
-                child At("gfx/actionarea.png", party4)
-                draggable False
-                ypos 0.0
+                    ypos 0.0
+                drag:
+                    drag_name "Sphere"
+                    child At("gfx/actionarea.png", party4)
+                    draggable False
+                    yalign 1.0
             drag:
-                drag_name "Sphere"
-                child At("gfx/actionarea.png", party4)
+                child ("gfx/sphere/"+str(Battle["spheres"][3])+".png")
                 draggable False
+                droppable False
                 yalign 1.0
-        drag:
-            child ("gfx/sphere/"+str(Battle["spheres"][3])+".png")
-            draggable False
-            droppable False
-            yalign 1.0
-            xalign 0.5
+                xalign 0.5
 
-    if (fx4 and Battle["party"][3]["hp"] <= 0):
-        add At("gfx/off.png", party4)
+        if (fx4 and Battle["party"][3]["hp"] <= 0):
+            add At("gfx/off.png", party4)
 
 
     ####################################################
     # Render HPBARs
-    if (fx1):
-        frame:
-            xpos 0.125
-            xanchor 0.5
-            yanchor 1.0
-            ypos 1.0
-            ymaximum 10
-            xmaximum 256
-            bar value Battle["party"][0]["hp"] range Battle["party"][0]["max_hp"] xmaximum 256
+    fixed:
+        showif (fx1):
+            frame:
+                xpos 0.125
+                xanchor 0.5
+                yanchor 1.0
+                ypos 1.0
+                ymaximum 10
+                xmaximum 256
+                bar value Battle["party"][0]["hp"] range Battle["party"][0]["max_hp"] xmaximum 256
 
-    if (fx2):
-        frame:
-            xpos 0.375
-            xanchor 0.5
-            yanchor 1.0
-            ypos 1.0
-            ymaximum 10
-            xmaximum 256
-            bar value Battle["party"][1]["hp"] range Battle["party"][1]["max_hp"] xmaximum 256
+        showif (fx2):
+            frame:
+                xpos 0.375
+                xanchor 0.5
+                yanchor 1.0
+                ypos 1.0
+                ymaximum 10
+                xmaximum 256
+                bar value Battle["party"][1]["hp"] range Battle["party"][1]["max_hp"] xmaximum 256
 
-    if (fx3):
-        frame:
-            xpos 0.625
-            xanchor 0.5
-            yanchor 1.0
-            ypos 1.0
-            ymaximum 10
-            xmaximum 256
-            bar value Battle["party"][2]["hp"] range Battle["party"][2]["max_hp"] xmaximum 256
+        showif (fx3):
+            frame:
+                xpos 0.625
+                xanchor 0.5
+                yanchor 1.0
+                ypos 1.0
+                ymaximum 10
+                xmaximum 256
+                bar value Battle["party"][2]["hp"] range Battle["party"][2]["max_hp"] xmaximum 256
 
-    if (fx4):
-        frame:
-            xpos 0.875
-            xanchor 0.5
-            yanchor 1.0
-            ypos 1.0
-            ymaximum 10
-            xmaximum 256
-            bar value Battle["party"][3]["hp"] range Battle["party"][3]["max_hp"] xmaximum 256
+        showif (fx4):
+            frame:
+                xpos 0.875
+                xanchor 0.5
+                yanchor 1.0
+                ypos 1.0
+                ymaximum 10
+                xmaximum 256
+                bar value Battle["party"][3]["hp"] range Battle["party"][3]["max_hp"] xmaximum 256
 
 screen battle_layout(lb="Select unit"):
     vbox:
-- 
cgit v1.2.3-70-g09d2