She's waiting...ready to tease you live - Jerkmate is free! Join Now!
x

Mod Ren'Py Our Red String JDMOD [0.14.1.2] [JohnDupont]

5.00 star(s) 8 Votes

__doublev__

New Member
Sep 2, 2021
5
15
21
Hey JohnDupont, just want to report an issue I encountered with the current version of the mod (0.14.1.2), on Chapter 8, the Ivy / Holly scene. Just before, Ivy asks Holy to strip. It works fine with the base game or the unmodded version. The crash only happens with the mod enabled.

1760699575720.png

Code:
I'm sorry, but an uncaught exception occurred.

While running game code:
  File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 90, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 91, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 150, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 247, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 267, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 284, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 321, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 322, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 324, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 325, in execute
  KeyError: " ( ' h o l l y _ i v y ' ,   T r u e ) ,   ( ' h o l l y ' ,   F a l s e ) "

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

Full traceback:
  File "game/JDMOD/scripts/story/chapter_08c.rpyc", line 4054, in script
    File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/ast.py", line 1903, in execute
      choice = renpy.exports.menu(choices, self.set, args, kwargs, item_arguments)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/exports.py", line 1010, in menu
      rv = renpy.store.menu(new_items)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/exports.py", line 1250, in display_menu
      rv = renpy.ui.interact(mouse='menu', type=type, roll_forward=roll_forward)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/ui.py", line 299, in interact
      rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 3377, in interact
      repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, pause_modal=pause_modal, **kwargs) # type: ignore
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 3810, in interact_core
      root_widget.visit_all(lambda i : i.per_interact())
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 582, in visit_all
      d.visit_all(callback, seen)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 582, in visit_all
      d.visit_all(callback, seen)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 582, in visit_all
      d.visit_all(callback, seen)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/screen.py", line 451, in visit_all
      callback(self)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 3810, in <lambda>
      root_widget.visit_all(lambda i : i.per_interact())
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/screen.py", line 462, in per_interact
      self.update()
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/screen.py", line 653, in update
      self.screen.function(**self.scope)
      File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 90, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 91, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 150, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 247, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 267, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 284, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 321, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 322, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 324, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 325, in execute
    File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/sl2/sldisplayables.py", line 453, in sl2add
      d = d._duplicate(None)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/image.py", line 452, in _duplicate
      rv.find_target()
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/image.py", line 402, in find_target
      error("Image '%s' not found." % ' '.join(self.name))
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/image.py", line 383, in error
      self.target = renpy.text.text.Text(msg, color=(255, 0, 0, 255), xanchor=0, xpos=0, yanchor=0, ypos=0)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/text/text.py", line 1594, in __init__
      self.set_text(text, scope, substitute)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/text/text.py", line 1712, in set_text
      i, did_sub = renpy.substitutions.substitute(i, scope, substitute)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/substitutions.py", line 278, in substitute
      s = formatter.vformat(s, (), kwargs) # type: ignore
      File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 165, in vformat
    File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 205, in _vformat
    File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/substitutions.py", line 168, in get_field
      obj, arg_used = super(Formatter, self).get_field(field_name, args, kwargs)
      File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 270, in get_field
    File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 227, in get_value
  KeyError: " ( ' h o l l y _ i v y ' ,   T r u e ) ,   ( ' h o l l y ' ,   F a l s e ) "

macOS-26.0.1-x86_64-i386-64bit x86_64
Ren'Py 8.0.3.22090809
Our Red String v14.1.2
Fri Oct 17 08:15:07 2025
 
Last edited:
  • Like
Reactions: JohnDupont

XaGnard

Active Member
Aug 11, 2018
589
1,884
327
Our Red String v0.14.1.3 Beta is released: https://f95zone.to/threads/our-red-string-ch-14-1-3-beta-eva-kiss.48813/

Hi JohnDupont,

can you update the OP of Our Red String JDMOD v0.14.1.3 when you finished it and have time?

Thank you very much for your hard work.

I'm slowly recognizing a bit of a disturbing pattern in myself. Every time a new update comes out, I download it and then look for the new mod version, which of course isn't available yet. Then I think to myself, I can wait a few days/weeks, only to forget that I wanted to play the new update.

This has been going on for some time now, and I'm making the same mistake again unless someone can tell me where I might still find the version that the mod is compatible with.
 

JohnDupont

Active Member
Modder
May 26, 2017
882
3,055
478
I'm slowly recognizing a bit of a disturbing pattern in myself. Every time a new update comes out, I download it and then look for the new mod version, which of course isn't available yet. Then I think to myself, I can wait a few days/weeks, only to forget that I wanted to play the new update.

This has been going on for some time now, and I'm making the same mistake again unless someone can tell me where I might still find the version that the mod is compatible with.
The mod is forward compatible, it shouldn't be an issue. More info in the OP.
 
  • Like
Reactions: XaGnard

kocu87

Newbie
Sep 17, 2021
90
42
104
idk how but after finishing chapter 7, my game is back to un-modded, tried to load my save but the result still the same, and sometimes it just showing the numbers without any explanations on the choices that im going to choose for the whole chapter 8 to mid chapter 9, but im going to load back couple chapters before to make sure.
 

Ghaly

Newbie
Sep 6, 2020
72
28
142
The mod is forward compatible, it shouldn't be an issue. More info in the OP.
game dose not start chapter 14 for me with this mode it give me a message about this is the end of updated i went to the gallery to make sure and there is a chapter not starting
 

priv.ryan

Newbie
May 15, 2020
41
125
133
game dose not start chapter 14 for me with this mode it give me a message about this is the end of updated i went to the gallery to make sure and there is a chapter not starting
Click this and switch it off at the start of the chapter
If you're new to the JDMOD, you can either:
  • Start a new game ;
  • Use your old save and switch manually between unmodded and modded at the start of the next Chapter.
1680187001116.png
 
  • Like
Reactions: JohnDupont

daitenshi

New Member
Feb 1, 2025
9
5
12
Hey JohnDupont, just want to report an issue I encountered with the current version of the mod (0.14.1.2), on Chapter 8, the Ivy / Holly scene. Just before, Ivy asks Holy to strip. It works fine with the base game or the unmodded version. The crash only happens with the mod enabled.

View attachment 5350598

Code:
I'm sorry, but an uncaught exception occurred.

While running game code:
  File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 90, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 91, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 150, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 247, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 267, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 284, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 321, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 322, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 324, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 325, in execute
  KeyError: " ( ' h o l l y _ i v y ' ,   T r u e ) ,   ( ' h o l l y ' ,   F a l s e ) "

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

Full traceback:
  File "game/JDMOD/scripts/story/chapter_08c.rpyc", line 4054, in script
    File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/ast.py", line 1903, in execute
      choice = renpy.exports.menu(choices, self.set, args, kwargs, item_arguments)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/exports.py", line 1010, in menu
      rv = renpy.store.menu(new_items)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/exports.py", line 1250, in display_menu
      rv = renpy.ui.interact(mouse='menu', type=type, roll_forward=roll_forward)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/ui.py", line 299, in interact
      rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 3377, in interact
      repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, pause_modal=pause_modal, **kwargs) # type: ignore
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 3810, in interact_core
      root_widget.visit_all(lambda i : i.per_interact())
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 582, in visit_all
      d.visit_all(callback, seen)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 582, in visit_all
      d.visit_all(callback, seen)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 582, in visit_all
      d.visit_all(callback, seen)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/screen.py", line 451, in visit_all
      callback(self)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/core.py", line 3810, in <lambda>
      root_widget.visit_all(lambda i : i.per_interact())
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/screen.py", line 462, in per_interact
      self.update()
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/screen.py", line 653, in update
      self.screen.function(**self.scope)
      File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 87, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 90, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 91, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 150, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 247, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 267, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 284, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 321, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 322, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 324, in execute
    File "game/JDMOD/scripts/gui/renpy/screen_choice.rpy", line 325, in execute
    File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/sl2/sldisplayables.py", line 453, in sl2add
      d = d._duplicate(None)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/image.py", line 452, in _duplicate
      rv.find_target()
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/image.py", line 402, in find_target
      error("Image '%s' not found." % ' '.join(self.name))
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/display/image.py", line 383, in error
      self.target = renpy.text.text.Text(msg, color=(255, 0, 0, 255), xanchor=0, xpos=0, yanchor=0, ypos=0)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/text/text.py", line 1594, in __init__
      self.set_text(text, scope, substitute)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/text/text.py", line 1712, in set_text
      i, did_sub = renpy.substitutions.substitute(i, scope, substitute)
      File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/substitutions.py", line 278, in substitute
      s = formatter.vformat(s, (), kwargs) # type: ignore
      File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 165, in vformat
    File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 205, in _vformat
    File "/Applications/OurRedString.app/Contents/Resources/autorun/renpy/substitutions.py", line 168, in get_field
      obj, arg_used = super(Formatter, self).get_field(field_name, args, kwargs)
      File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 270, in get_field
    File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/string.py", line 227, in get_value
  KeyError: " ( ' h o l l y _ i v y ' ,   T r u e ) ,   ( ' h o l l y ' ,   F a l s e ) "

macOS-26.0.1-x86_64-i386-64bit x86_64
Ren'Py 8.0.3.22090809
Our Red String v14.1.2
Fri Oct 17 08:15:07 2025

I found the problem. It was line 4077 of the chapter_08c.rpy file, which was built on a single line like this:

"Protect Holly"(req=[("rel", 6)], route=[("holly_ivy", holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")), ("holly", not (holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")) and not (ian_holly_dating or ian_lena_dating))], tt="This decision will have a different impact depending on how much Holly wants to become like Lena.", sc=[("CH08_S10", holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")), ("CH08_S12", not (holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")) and not (ian_holly_dating or ian_lena_dating))]) if lena_holly > 6:


I modified it with AI and it works ;)
To be replaced in game\JDMOD\scripts\story
 

redmosquito10

New Member
Sep 28, 2025
1
1
3
Can I increase/decrease stats using the mod? Like we can increase the money by clicking on the green arrow next to the current stat. I've already tried, but couldn't find a way. Just want to make sure I'm not missing something.
 
  • Like
Reactions: Agha

JohnDupont

Active Member
Modder
May 26, 2017
882
3,055
478
I found the problem. It was line 4077 of the chapter_08c.rpy file, which was built on a single line like this:

"Protect Holly"(req=[("rel", 6)], route=[("holly_ivy", holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")), ("holly", not (holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")) and not (ian_holly_dating or ian_lena_dating))], tt="This decision will have a different impact depending on how much Holly wants to become like Lena.", sc=[("CH08_S10", holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")), ("CH08_S12", not (holly_change == 3 or (holly_change == 2 and v8_drinks == "gin")) and not (ian_holly_dating or ian_lena_dating))]) if lena_holly > 6:


I modified it with AI and it works ;)
To be replaced in game\JDMOD\scripts\story
I went for a different solution in 0.14.1.3.

Can I increase/decrease stats using the mod? Like we can increase the money by clicking on the green arrow next to the current stat. I've already tried, but couldn't find a way. Just want to make sure I'm not missing something.
Nop.
  1. You can start a game with "maxed" stats already.
  2. If you follow the In-Game Guide, stats shouldn't be a problem.
  3. You'll need multiple playthroughs to experience all the routes, and even more for the subroutes.
 
  • Yay, update!
Reactions: Canto Forte

daitenshi

New Member
Feb 1, 2025
9
5
12
I went for a different solution in 0.14.1.3.


Nop.
  1. You can start a game with "maxed" stats already.
  2. If you follow the In-Game Guide, stats shouldn't be a problem.
  3. You'll need multiple playthroughs to experience all the routes, and even more for the subroutes.

No worries, it was mainly a temporary solution. After all, without AI, I'm not much of a coding expert ;)
 
  • Like
Reactions: JohnDupont

Agha

Newbie
May 25, 2018
47
22
18
Hey JD I hope you know about the new updates 14.1.4 is already release so I think you sir should release the mood as well thankyou Please don't misunderstand me I'm just saying these days Eva Kiss is releasing new updates faster so you have to do the same thing thankyou
 
  • Like
Reactions: JohnDupont
5.00 star(s) 8 Votes