Cheat Mod Ren'Py The Null Hypothesis Cheat Injector [v2.8] [Sleepingkirby]

5.00 star(s) 1 Vote

sleepingkirby

Well-Known Member
Aug 8, 2017
1,321
1,955
262
I figured it out!

This mod and freddygonzo's TNHUXMod gamplay experience mod are not compatible. They both modify the interface, and
`TNHUXMod.rpy` was overriding this mod's interface patches.

Just for your reference, I'm running macOS 15.6.1 and I've attached a diff file as requested. But uninstalling TNHUXMod solved all my issues.

Thank you for your help!

Bash:
% grep version ./definitions/config.rpy

define config.version = "0.8c"
Bash:
% diff -u interfaces/Player_menu.rpy.orig interfaces/Player_menu.rpy

--- interfaces/Player_menu.rpy.orig    2025-10-26 00:07:54
+++ interfaces/Player_menu.rpy    2025-10-26 00:07:54
@@ -764,8 +764,8 @@
     text "Name" anchor (0.5, 0.5) pos (0.114, 0.306):
         size 26

-    text "Points" anchor (0.5, 0.5) pos (0.226, 0.306):
-        size 26
+    textbutton "{size=26}" + "Points" anchor (0.5, 0.5) pos (0.226, 0.306):
+        action Function(Player.History.update, "trained" if skills_leaderboard_type == "combat" else "studied")

     vbox anchor (0.0, 0.0) pos (0.0585, 0.328) xysize (int(729 * game_resolution), 0.557):
         spacing 2
@@ -901,10 +901,8 @@

         size 30

-    text "[Player.skill_points]" anchor (0.5, 0.5) pos (0.9, 0.239):
-        font "agency_fb.ttf"
-
-        size 30
+    textbutton "{size=30}{font=agency_fb.ttf}" + "[Player.skill_points]" anchor (0.5, 0.5) pos (0.9, 0.239):
+        action Function(Player.History.update, "bought_skill_point")

     add "images/interfaces/[interface_resolution]/Player_menu/skills.webp" anchor (0.5, 0.5) pos (0.9145, 0.239) zoom 0.3 * interface_adjustment

@@ -916,14 +914,14 @@
     if Player.XP >= Player.XP_goal:
         add "images/interfaces/[interface_resolution]/Player_menu/skills_xp_bar.webp" anchor (1.0, 0.5) pos (0.921, 0.285) zoom interface_adjustment
     elif Player.level == 1:
-        bar value Player.XP range Player.XP_goal anchor (1.0, 0.5) pos (0.921, 0.285) xysize (int(277 * game_resolution), int(24 * game_resolution)):
+        bar value FieldValue(Player, "XP", Player.XP_goal) range(Player.XP_goal) anchor (1.0, 0.5) pos (0.921, 0.285) xysize (int(277 * game_resolution), int(24 * game_resolution)):
             left_bar At(f"images/interfaces/{interface_resolution}/Player_menu/skills_xp_bar.webp", interface_zoom)
             right_bar At(f"images/interfaces/{interface_resolution}/Player_menu/skills_xp_empty_bar.webp", interface_zoom)

             thumb None
             thumb_offset 0
     else:
-        bar value (Player.XP - Player.XP_goal / 1.75) range (Player.XP_goal - Player.XP_goal / 1.75) anchor (1.0, 0.5) pos (0.921, 0.285) xysize (int(277 * game_resolution), int(24 * game_resolution)):
+        bar value FieldValue(Player, "XP", Player.XP_goal) range (Player.XP_goal) anchor (1.0, 0.5) pos (0.921, 0.285) xysize (int(277 * game_resolution), int(24 * game_resolution)):
             left_bar At(f"images/interfaces/{interface_resolution}/Player_menu/skills_xp_bar.webp", interface_zoom)
             right_bar At(f"images/interfaces/{interface_resolution}/Player_menu/skills_xp_empty_bar.webp", interface_zoom)

@@ -1347,8 +1345,8 @@
     text "CASH{alpha=0.0}_{/alpha}" anchor (0.0, 0.5) pos (0.673, 0.905):
         size 45

-    text "$[Player.cash]" anchor (1.0, 0.5) pos (0.9265, 0.905):
-        size 45
+    textbutton "{size=45}" + "$[Player.cash]" anchor (1.0, 0.5) pos (0.9265, 0.905):
+        action SetVariable("Player.cash", int(Player.cash) + int(50000))

screen cannot_gift_screen(Character, Item, message = "Cannot give [Character.name] the [Item.name]."):
     modal True
@@ -2188,10 +2186,8 @@

         add "images/interfaces/[interface_resolution]/Player_menu/relationships_[status].webp" anchor (0.5, 0.5) pos (0.5, 0.35) zoom high_resolution_interface_adjustment

-        text "[status.upper()]" anchor (0.5, 0.5) pos (0.5, 0.85):
-            size properties.get("text_size", 16)
-
-            color properties.get("text_color", "#000000")
+        textbutton "{size=[properties.get(\"text_size\", 16)]}{color=[properties.get(\"text_color\", \"#000000\")]}" + "[status.upper()]" anchor (0.5, 0.5) pos (0.5, 0.85):
+            action SetDict(properties.get("char")._status, status, 0)

screen relationships_tab(action, button_text, **properties):
     button anchor properties.get("anchor", (0.0, 0.0)) pos properties.get("pos", (0.0, 0.0)) xysize properties.get("xysize", (None, None)):
@@ -2316,22 +2312,14 @@

         add "images/interfaces/[interface_resolution]/Player_menu/relationships_love.webp" zoom interface_adjustment

-        text "[relationships_Entry.love]" anchor (0.5, 0.5) pos (0.435, 0.4655):
-            font "agency_fb.ttf"
-
-            size 30
+        textbutton "{size=30}{font=agency_fb.ttf}" + "[relationships_Entry.love]" anchor (0.5, 0.5) pos (0.435, 0.4655):
+            action SetField(relationships_Entry, "love", relationships_Entry.love + 100)

-            color "#000000"
-
         add "images/interfaces/[interface_resolution]/Player_menu/relationships_trust.webp" zoom interface_adjustment

-        text "[relationships_Entry.trust]" anchor (0.5, 0.5) pos (0.435, 0.5065):
-            font "agency_fb.ttf"
+        textbutton "{size=30}{font=agency_fb.ttf}" + "[relationships_Entry.trust]" anchor (0.5, 0.5) pos (0.435, 0.5065):
+            action SetField(relationships_Entry, "trust", relationships_Entry.trust + 100)

-            size 30
-
-            color "#000000"
-
         text "PUBLIC NAME" anchor (0.0, 0.5) pos (0.495, 0.242):
             font "agency_fb.ttf"

@@ -2342,11 +2330,9 @@

             size 28

-        text "RELATIONSHIP STATUS" anchor (0.0, 0.5) pos (0.495, 0.297):
-            font "agency_fb.ttf"
+        textbutton "{size=28}{font=agency_fb.ttf} RELATIONSHIP STATUS" anchor (0.0, 0.5) pos (0.495, 0.297):
+            action Function(removeCheating, relationships_Entry)

-            size 28
-
         if relationships_Entry not in Partners:
             text "Single" anchor (1.0, 0.5) pos (0.713, 0.297):
                 font "agency_fb.ttf"
@@ -2400,18 +2386,21 @@
             if relationships_Entry.is_in_normal_mood():
                 use relationships_status(
                     "happy",
+                    char = relationships_Entry,
                     text_color = "#00ff06",
                 )

             if relationships_Entry.get_status() == "mad":
                 use relationships_status(
                     "mad",
+                    char = relationships_Entry,
                     text_color = "#f00d48",
                 )

             if relationships_Entry.status["horny"] or relationships_Entry.status["nympho"]:
                 use relationships_status(
                     "horny",
+                    char = relationships_Entry,
                     text_color = "#dd64e8",
                 )

@@ -2419,6 +2408,7 @@
                 if relationships_Entry.status.get(status, False):
                     use relationships_status(
                         status,
+                        char = relationships_Entry,
                         text_color = color,
                     )

@@ -2470,7 +2460,10 @@
                     $ friendship = relationships_Entry.get_friendship(getattr(store, C))

                     fixed xysize (int(135 * game_resolution), int(195 * game_resolution)):
-                        add "images/interfaces/full/photos/[C].webp" align (0.5, 0.5) zoom 0.13
+                        imagebutton idle f"images/interfaces/full/photos/{C}.webp" align (0.5, 0.5):
+                            at transform:
+                                zoom 0.13
+                            action SetDict(relationships_Entry.friendship, f"{C}", relationships_Entry.friendship[C] + 50)

                         add "images/interfaces/[interface_resolution]/Player_menu/relationships_[friendship].webp" align (0.5, 0.5) zoom interface_adjustment
No problem. Yeah, I thought it was a given that mods, unless explicitly stated, don't and can't be expected to work together. I'll update the OP with that because you're definitely not the first one to have applied both and had problems. Pertaining to TNHUXMod directly, it was addressed here. FreddyGonzo offered to make it compatible, but the amount of work that would take on his side would have been insane and not worth it.
 
  • Like
Reactions: swiftstack

KhunAguero

Formerly 'khunAguero'
Jun 16, 2025
145
270
82
I have a question, on the features it says i can modify the player money, how exactly do i modify the money?
 

sleepingkirby

Well-Known Member
Aug 8, 2017
1,321
1,955
262
I'm not 100% sure.
If you can do me a favor and keep an eye out as to when/if that .5 changes to a different number, I'd greatly appreciate it. There was a bug with the cheat injector that caused that, but I'm sure I fixed it prior to v0.8c. (v2.5 of this cheat injector). If it came back, that's a bug RonChon needs to fix. Because that means some where, he's either adding a string to a number or doing division without rounding down. It's not a big bug, be can lead to weird consequences.
 

The Al

Member
Dec 22, 2017
291
399
237
If you can do me a favor and keep an eye out as to when/if that .5 changes to a different number, I'd greatly appreciate it. There was a bug with the cheat injector that caused that, but I'm sure I fixed it prior to v0.8c. (v2.5 of this cheat injector). If it came back, that's a bug RonChon needs to fix. Because that means some where, he's either adding a string to a number or doing division without rounding down. It's not a big bug, be can lead to weird consequences.
It disappeared when I clicked to add more money, but any time I make money normally(either from doing a job or the daily allowance) it adds a .0 to the total
 
5.00 star(s) 1 Vote