16 Commits
v0.4.0 ... main

Author SHA1 Message Date
389cd0df04 fix 2026-05-07 17:23:47 -04:00
190d4dafd7 more message 2026-05-07 17:23:22 -04:00
8c4032bda0 fix message 2026-05-07 17:21:52 -04:00
495a3a775e wait nvm 2026-05-07 17:19:39 -04:00
5ac286dbc6 goodbye msg 2026-05-07 17:18:43 -04:00
c5edf49558 Make game possible to quit (runs in CATDOS now) 2026-05-07 17:14:18 -04:00
4b41013ff8 speedrun thing 2026-05-05 19:22:34 -04:00
69a903ce95 update gitignore 2026-05-05 19:08:03 -04:00
3b13de2ad5 Update gitignore 2026-04-30 17:42:57 -04:00
2a787b18cb fix readme 2026-04-29 17:29:52 -04:00
e3669d69f1 readme update 2026-04-29 17:29:08 -04:00
648d0f2079 message 2026-04-29 17:16:32 -04:00
5aa8d6beb3 Telnet thing 2026-04-29 17:15:37 -04:00
3d130ecdd5 fix bug on desktop 2026-04-29 17:09:21 -04:00
1a95ae57b1 idea i wrote 2026-04-27 19:24:19 -04:00
1643fb93d0 Some bugfixes Claude mentioned, "They still are still sad though" 2026-04-27 19:18:45 -04:00
6 changed files with 49 additions and 16 deletions

4
.gitignore vendored
View File

@@ -194,3 +194,7 @@ saves/
*test* *test*
debug.json debug.json
uuids.json uuids.json
admin_handle.py
WEB_VERSION
index.html
server.py

14
.vscode/settings.json vendored
View File

@@ -1,11 +1,11 @@
{ {
"files.exclude": { "files.exclude": {
".gitignore": true, ".gitignore": false,
"LICENSE": true, "LICENSE": false,
"README.md": true, "README.md": false,
".vscode/": true, ".vscode/": false,
".venv/": true, ".venv/": false,
".ruff_cache/": true, ".ruff_cache/": false,
"*/__pycache__/": true "*/__pycache__/": false
} }
} }

View File

@@ -4,4 +4,11 @@ Whiskerbound remake 4 or 5 I forget
This is a game about taking care of a pet This is a game about taking care of a pet
STILL IN DEVELOPMENT STILL IN DEVELOPMENT
(Buggy) [Demo now available](whiskerbound.owendeed.com)
To play on a web browser, go to my site, [owendeed.com](https://owendeed.com), wait for it to load, and type help as a command, you can figure it out :)
Telnet also now available!
```bash
telnet 195.201.227.193 2323
```

View File

@@ -83,7 +83,7 @@ def save(cat: Cat, dont_save=False):
print( print(
"Any progress done after this will not be saved in this string, please generate a new one to update your progress." "Any progress done after this will not be saved in this string, please generate a new one to update your progress."
) )
print("To get back to the main menu and quit, reload the page.") print("You will now be at the main menu, you can select quit to exit.")
systems.ui.press_any_key_to_continue("Press any key to continue.") systems.ui.press_any_key_to_continue("Press any key to continue.")
return return
currentjson = {} currentjson = {}
@@ -111,6 +111,7 @@ def load(
if os.path.exists("WEB_VERSION"): if os.path.exists("WEB_VERSION"):
if not hide_web_message: if not hide_web_message:
print("Loading is disabled.") print("Loading is disabled.")
return None
punished = False punished = False
data_dir = get_data_dir() data_dir = get_data_dir()
hash_path = os.path.join(data_dir, "dont hurt cats.json") hash_path = os.path.join(data_dir, "dont hurt cats.json")

31
game.py
View File

@@ -47,7 +47,11 @@ class Game:
"Settings", "Settings",
] ]
else: else:
options[0:0] = ["Save"] options[0:0] = [
"Save",
"Save and quit",
"Quit",
]
while True: while True:
match ui.select( match ui.select(
@@ -79,6 +83,12 @@ class Game:
self.game_loop() self.game_loop()
def game_loop(self): def game_loop(self):
if os.path.exists(
"admin_handle.py"
): # TODO: make this for specific uuids, like a thing to handle stuff for specific uuids, like give money, but make sure to remove the thing after, and maybe a admin_panel.py to configure a json which admin_handle.py also reads for stuff. i gtg.
import admin_handle # type: ignore
admin_handle.handle(self.cat)
self.cat.apply_decay() self.cat.apply_decay()
self.cat.last_login = time.time() self.cat.last_login = time.time()
ui.current_cat = self.cat ui.current_cat = self.cat
@@ -135,6 +145,9 @@ class Game:
def run(self): def run(self):
title() title()
if os.path.exists("WEB_VERSION"): if os.path.exists("WEB_VERSION"):
print(
"If you're on telnet, pretend that everything that says web version says telnet version, I'm too lazy to fix it. Also don't use CTRL+C or CTRL+V they don't work on telnet. If you don't know what telnet is, ignore this."
)
print( print(
f"This is a web version of {data.text.GAME_NAME}, here is some important info. To anyone outside of Germany, this game is running on a cheap VPS I got, the company didn't have any US locations available, so I had to get a Germany one, sorry for the high ping (I also have to deal with it, I'm in the US)\nPls don't hack this" f"This is a web version of {data.text.GAME_NAME}, here is some important info. To anyone outside of Germany, this game is running on a cheap VPS I got, the company didn't have any US locations available, so I had to get a Germany one, sorry for the high ping (I also have to deal with it, I'm in the US)\nPls don't hack this"
) )
@@ -173,9 +186,13 @@ class Game:
return return
options = ["New Game", "Release Notes", "Credits"] options = ["New Game", "Release Notes", "Credits"]
if os.path.exists("saves") or os.path.exists("WEB_VERSION"): if (
os.path.exists("saves")
and os.listdir("saves")
or os.path.exists("WEB_VERSION")
):
options.insert(0, "Load Game") options.insert(0, "Load Game")
if not os.path.exists("WEB_VERSION"): if True: # not os.path.exists("WEB_VERSION"):
options.append("Quit") options.append("Quit")
print(f"Welcome to {data.text.GAME_NAME}") print(f"Welcome to {data.text.GAME_NAME}")
while True: while True:
@@ -202,7 +219,7 @@ class Game:
print() print()
if __name__ == "__main__": def main():
try: try:
game = Game() game = Game()
result = game.run() result = game.run()
@@ -210,7 +227,7 @@ if __name__ == "__main__":
print("Developer stuff incoming, if you can, tell me what this says:") print("Developer stuff incoming, if you can, tell me what this says:")
traceback.print_exc() traceback.print_exc()
print( print(
"Welp, seems that the game crashed, idk why. A common cause of this is, as of now, IDK, because I fixed the CTRL issue (tell me if it crashed from CTRL+something). If you're on the desktop version, reopen it, if you're on the web version, reload.\nOtherwise, great job! You found an issue in the game! If you can, please tell me." "Welp, seems that the game crashed, idk why. A common cause of this is, as of now, IDK, because I fixed the CTRL issue (tell me if it crashed from CTRL+something). If you're on the desktop version, reopen it, if you're on the web version, restart it.\nOtherwise, great job! You found an issue in the game! If you can, please tell me."
) )
if os.path.exists("WEB_VERSION"): if os.path.exists("WEB_VERSION"):
print( print(
@@ -290,3 +307,7 @@ if __name__ == "__main__":
print( print(
"Bye I guess, sorry about the crash, you can relaunch if you want :)?" "Bye I guess, sorry about the crash, you can relaunch if you want :)?"
) )
if __name__ == "__main__":
main()

View File

@@ -41,7 +41,7 @@ def item_menu(cat: data.cat.Cat, item):
cat.happiness = 25.0 cat.happiness = 25.0
cat.inventory["Catnip"] -= 1 cat.inventory["Catnip"] -= 1
print( print(
f"{cat.name} plays with the catnip. {cat.name} is less depressed! They still are still sad though." f"{cat.name} plays with the catnip. {cat.name} is less depressed! They are still sad though."
) )
else: else:
print("You don't have any catnip!") print("You don't have any catnip!")