Page 1 of 2

Dreaded post-release exception bugs!

Posted: Fri Aug 19, 2022 4:50 pm
by AnnieTiamat
Hey folks - ages back I released a game, and in looking at it for a possible update, I was slammed by two bugs I had no idea how to fix, that never appeared in my own playthroughs.

#1 good ol "unsupported operand type(s) for +=: 'NoneType' and 'int'" (using the same scripting += I have dozens of times in the game with no issues

#2 dag-nasty "IOError: Couldn't find file '[NONSENSE]'" (and then CHAOS with rendering)

Looking through the clipboard output of each of these, I've no earthly idea what's causing them - my only advantage here is knowing how to trigger them. (And that ain't much)

I know the idea of helping sort through a codedump output is hardly exciting, but from what I can tell in searching for "unsupported operand" issues like this, there are solutions that seem easy, but a lot of posts like "NM I fixed it" or "do this" without showing HOW or WHY. If any kind soul is feeling up for helping me squash these bugs, I'm in your debt on the real!

Re: Dreaded post-release exception bugs!

Posted: Fri Aug 19, 2022 6:38 pm
by PyTom
Can you post the tracebacks?

Re: Dreaded post-release exception bugs!

Posted: Mon Aug 22, 2022 7:40 pm
by AnnieTiamat
I'm sorry, but an uncaught exception occurred.

While loading <'Twocolor' <'Image' '_theme_glow/gslider_thumb.png'> <Color #777777> <Color #777777> False>:
File "game/timer.rpy", line 162, in script
IOError: Couldn't find file '_theme_glow/gslider_thumb.png'.

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "game/timer.rpy", line 162, in script
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\ast.py", line 1450, in execute
choice = renpy.exports.menu(choices, self.set)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\exports.py", line 836, in menu
rv = renpy.store.menu(items)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\exports.py", line 1023, in display_menu
rv = renpy.ui.interact(mouse='menu', type=type, roll_forward=roll_forward)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\ui.py", line 278, in interact
rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\core.py", line 2496, in interact
repeat, rv = self.interact_core(preloads=preloads, **kwargs)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\core.py", line 2850, in interact_core
self.draw_screen(root_widget, fullscreen_video, (not fullscreen_video) or video_frame_drawn)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\core.py", line 1916, in draw_screen
renpy.config.screen_height,
File "renpy/display/render.pyx", line 416, in renpy.display.render.render_screen (gen\renpy.display.render.c:6685)
rv = render(root, width, height, 0, 0)
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\layout.py", line 661, in render
surf = render(child, width, height, cst, cat)
File "renpy/display/render.pyx", line 103, in renpy.display.render.render (gen\renpy.display.render.c:3319)
cpdef render(d, object widtho, object heighto, double st, double at):
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\layout.py", line 661, in render
surf = render(child, width, height, cst, cat)
File "renpy/display/render.pyx", line 103, in renpy.display.render.render (gen\renpy.display.render.c:3319)
cpdef render(d, object widtho, object heighto, double st, double at):
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\layout.py", line 661, in render
surf = render(child, width, height, cst, cat)
File "renpy/display/render.pyx", line 103, in renpy.display.render.render (gen\renpy.display.render.c:3319)
cpdef render(d, object widtho, object heighto, double st, double at):
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\screen.py", line 618, in render
child = renpy.display.render.render(self.child, w, h, st, at)
File "renpy/display/render.pyx", line 103, in renpy.display.render.render (gen\renpy.display.render.c:3319)
cpdef render(d, object widtho, object heighto, double st, double at):
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\layout.py", line 661, in render
surf = render(child, width, height, cst, cat)
File "renpy/display/render.pyx", line 103, in renpy.display.render.render (gen\renpy.display.render.c:3319)
cpdef render(d, object widtho, object heighto, double st, double at):
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "renpy/display/accelerator.pyx", line 108, in renpy.display.accelerator.transform_render (gen\renpy.display.accelerator.c:2027)
cr = render(child, widtho, heighto, st - self.child_st_base, at)
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\behavior.py", line 1614, in render
thumb = render(self.style.thumb, thumb_dim, height, st, at)
File "renpy/display/render.pyx", line 103, in renpy.display.render.render (gen\renpy.display.render.c:3319)
cpdef render(d, object widtho, object heighto, double st, double at):
File "renpy/display/render.pyx", line 185, in renpy.display.render.render (gen\renpy.display.render.c:2857)
rv = d.render(widtho, heighto, st, at)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\im.py", line 478, in render
im = cache.get(self)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\im.py", line 200, in get
surf = image.load()
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\im.py", line 987, in load
surf = cache.get(self.image)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\im.py", line 200, in get
surf = image.load()
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\display\im.py", line 529, in load
surf = renpy.display.pgrender.load_image(renpy.loader.load(self.filename), self.filename)
File "C:\Games\Passenger\The_Passenger-1.1-all\renpy\loader.py", line 536, in load
raise IOError("Couldn't find file '%s'." % name)
IOError: Couldn't find file '_theme_glow/gslider_thumb.png'.

Windows-8-6.2.9200
Ren'Py 6.99.11.1749
The Passenger 1.1

Re: Dreaded post-release exception bugs!

Posted: Mon Aug 22, 2022 7:40 pm
by AnnieTiamat
That's the main one, I'll ferret out the other.

Re: Dreaded post-release exception bugs!

Posted: Mon Aug 22, 2022 10:27 pm
by Imperf3kt
Have you asked them to download it again, maybe their download got corrupted, that's what this looks like to me.

Re: Dreaded post-release exception bugs!

Posted: Tue Aug 23, 2022 9:26 am
by PyTom
Theme_glow doesn't exist in a released game by default. You can add the theme data back with:

Code: Select all

define build.include_old_themes = True

Re: Dreaded post-release exception bugs!

Posted: Tue Aug 23, 2022 3:35 pm
by AnnieTiamat
Oh cool! Also, odd that popped up... I made this a while back but I don't recall it being that long since editions, but eyyyy I am ok with being wrong! :D

Whereabouts should I add that line?

Re: Dreaded post-release exception bugs!

Posted: Tue Aug 23, 2022 7:26 pm
by Imperf3kt
Add it anywhere as long as it isn't indented or inside another block.

I'd suggest just dump it at the end of options.rpy or somewhere in there (don't forget to add a comment so you know what it does for future reference)

Re: Dreaded post-release exception bugs!

Posted: Wed Sep 21, 2022 12:50 am
by AnnieTiamat
Weird - put it at the end of options and got this:

```
I'm sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.


File "game/options.rpy", line 508: invalid syntax
define build.include_old_themes = True
^


Ren'Py Version: Ren'Py 8.0.3.22090809
Tue Sep 20 21:49:22 2022
```

Re: Dreaded post-release exception bugs!

Posted: Wed Sep 21, 2022 12:55 am
by AnnieTiamat
Whew, got another issue - good news is I managed to fix the previous ones, bad news is this jerk popped up again:

I'm sorry, but an uncaught exception occurred.

While running game code:
File "game/endings.rpy", line 1118, in <module>
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "game/script.rpyc", line 2707, in script call

File "game/endings.rpyc", line 1118, in script
File "renpy/ast.py", line 928, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "renpy/python.py", line 2245, in py_exec_bytecode
exec(bytecode, globals, locals)
File "game/endings.rpy", line 1118, in <module>
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'

Windows-10-10.0.22000
Ren'Py 7.4.11.2266
The Passenger 1.2
Wed Sep 21 12:02:47 2022

Re: Dreaded post-release exception bugs!

Posted: Thu Sep 22, 2022 9:39 am
by PyTom
That doesn't look like an issue with Ren'Py. What is line 1118 of endings.rpy? Are the variables there set all the time?

Re: Dreaded post-release exception bugs!

Posted: Thu Sep 22, 2022 12:28 pm
by AnnieTiamat

Code: Select all

[i]scene black
    with fade_slow

    if not persistent.end_19:
        $ persistent.end_19 = True
        $ achievement.grant("ACH_END_19")
        $ persistent.end_any += 1
        jump end_check
    else:
        jump end_check[/i]

The "persistent.end_any +=1" is the line what offends. But that's kind of bonkers because 1) that kind of behavior happens EVERYWHERE and 2) it doesn't break in the slightest when running it in RenPy, only in the resulting build.

Re: Dreaded post-release exception bugs!

Posted: Fri Sep 23, 2022 1:18 am
by PyTom
So, the problem is on a new game, the persistent file is empty. When you do:

Code: Select all

        $ persistent.end_any += 1
it's None, so you can't add to it. You could repeat the problem locally by using the launcher to delete persistent.

What you probably want is a line:

Code: Select all

default persistent.end_any = 0
To initialize it to 0, which should fix things.

Re: Dreaded post-release exception bugs!

Posted: Fri Sep 23, 2022 12:07 pm
by AnnieTiamat
AHA! That would make a difference for real... I thought the persistents didn't need to be initialized in the same way.
I have a file that loads all the triggers at the start, I imagine I should hit up the "default persistent.end_any = 0" then, and it wouldn't rewrite it on each restart...?

Re: Dreaded post-release exception bugs!

Posted: Fri Sep 23, 2022 3:27 pm
by AnnieTiamat
OK. Yeesh this has become a saga.

I have the "define build.include_old_themes = True" in screens. I have my 000_variables file properly dropping the "default persistent(blah) = False" to round things off.

Now I have this fun fun fun error when I try to start:

Code: Select all

I'm sorry, but an uncaught exception occurred.

While running game code:
  File "game/screens.rpy", line 1593, in script
    init +1 python:
  File "game/screens.rpy", line 1593, in script
    init +1 python:
  File "game/screens.rpy", line 1596, in <module>
    renpy.image (filter(str.isalnum, atlas_item) + "_text", Text("[atlas_item]",xalign=0.4,yalign=0.85,size=30,color="#bfbfbf"))
TypeError: unsupported operand type(s) for +: 'filter' and 'str'

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "C:\Design\RenPy\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy\bootstrap.py", line 277, in bootstrap
    renpy.main.main()
  File "C:\Design\RenPy\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy\main.py", line 558, in main
    renpy.game.context().run(node)
  File "game/screens.rpy", line 1593, in script
    init +1 python:
  File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/site-packages/future/utils/__init__.py", line 441, in raise_
  File "game/screens.rpy", line 1593, in script
    init +1 python:
  File "C:\Design\RenPy\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy\ast.py", line 1131, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
  File "C:\Design\RenPy\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy-8.0.3-sdk\renpy\python.py", line 1061, in py_exec_bytecode
    exec(bytecode, globals, locals)
  File "game/screens.rpy", line 1596, in <module>
    renpy.image (filter(str.isalnum, atlas_item) + "_text", Text("[atlas_item]",xalign=0.4,yalign=0.85,size=30,color="#bfbfbf"))
TypeError: unsupported operand type(s) for +: 'filter' and 'str'

Windows-10-10.0.22000 AMD64
Ren'Py 8.0.3.22090809
The Passenger 1.21
Fri Sep 23 12:24:35 2022
The offending chunk of lines in screens.rpy:

Code: Select all

init +1 python:
    # Here is where the idle and hover text overlays are created.  This will show whatever string is used in the atlas_gallery_items.
    for atlas_item in atlas_gallery_items:
        renpy.image (filter(str.isalnum, atlas_item) + "_text", Text("[atlas_item]",xalign=0.4,yalign=0.85,size=30,color="#bfbfbf"))
        renpy.image (filter(str.isalnum, atlas_item) + "_text_hover", Text("[atlas_item]",xalign=0.4,yalign=0.85,size=30,color="#ffffff"))