Adding new blog post

This commit is contained in:
Dan 2026-02-10 15:04:12 +00:00
parent f6283b1142
commit 6c959a9f96
3 changed files with 110 additions and 98 deletions

View file

@ -0,0 +1,55 @@
---
title: "Tiddler Dev Blog #1 - Making a Plan"
date: 2026-02-10T14:18:57Z
tags:
- gamedev
- godot
- tiddler
draft: false
---
Since actually finishing and releasing [Whittler](/games/whittler) a few weeks ago I've been thinking hard about what kind of game I want to make next. I've got a massive list of projects I've started and not progressed with, ranging from a nature game with a fully generative forest that spawns trees based on moisture levels, soil quality and terrain height through to an underground cavern simulator with destructable terrain.
None of these ideas have really stuck for very long beyond the initial idea and rush of building the first few Cool New Things.
I've always had a thing for fishing in games, I have multiple 100 skill fishers in Final Fantasy XI, and making a cosy fishing game has always been on the cards.
I did, however, need to make sure I would follow through with it. So I started where any good idea goes first - and started writing a list of ideas.
This was the initial list of ideas I came up with:
- Core catch mechanic
- Quick bar on screen that has zones to trigger catching which affects success and quality of catch
- Nailing the catch gives you a bonus to your next cast
- Fish should be affected by environment affects, location, time of day, weather, and moon phase.
- There should be some sense of progression
- New fishing locations
- Upgraded rods
- Access to new baits
- There should be some big grindy quest chain that involves catching a lot of fish
- This won't be to everyones taste, but I am making this game for myself.
- There should be mythical fish that require some uncovering to find out how to catch and with what.
This was the absolute base list, it's since grown a bit and got slightly more meat on the bones. Side note, I have started using UpNote for keeping notes, drafts and ideas. It's very handy and syncs across devices.
Using this list of ideas I came up with with a list of mechanics I would need to create:
- Fish database
- Fishing game interaction
- Fishing levels / reputation
- Time progression
- Inventory management
- Shop
- Quest system
This was a pretty tasty list to get started with, so I started where anyone would with a clear list of mechanics they need to make and opened Tiled to start drawing a map.
After I got a cop on myself I closed Tiled and opened up Godot and started getting the main classes in place, even if they were only placeholders. I knew I would need a central event bus and a strong event driven system in order to not become severely unstuck when I got to implementing quests, so that gave me some clear architectural pieces to work towards.
After a few days of tinkering, I did have what could be considered the bones of a game.
{{< img src="tiddler-1.png" alt="Tiddler - The First Screenshot" width="900x" >}}
Yes, I did make some more of a map - it wasn't fun watching some boxes move around the screen.
My very rough plan is to put out regular blogs going over each of the major features as I get to refining them... So maybe pop back some time if that kind of rambling interests you.

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

View file

@ -21,114 +21,71 @@ BLUE='\033[0;34m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
NC='\033[0m' # No Color NC='\033[0m' # No Color
echo -e "${BLUE}Removing existing files...${NC}" # Clean up public folder and create redirect files
echo -e "${BLUE}Cleaning public folder...${NC}"
rm -rf public/ rm -rf public/
mkdir -p public/log
# Build the Hugo site # Create index.html with redirect to https://ritual.sh
echo -e "${BLUE}Building Hugo site...${NC}" cat > public/index.html << 'EOF'
hugo <!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; url=https://ritual.sh">
<title>Redirecting...</title>
</head>
<body>
<p>Redirecting to <a href="https://ritual.sh">ritual.sh</a>...</p>
</body>
</html>
EOF
if [ $? -ne 0 ]; then # Create log/index.html with redirect to https://ritual.sh/logs/
echo -e "${RED}Hugo build failed!${NC}" cat > public/log/index.html << 'EOF'
exit 1 <!DOCTYPE html>
fi <html>
<head>
echo -e "${GREEN}✓ Hugo build successful!${NC}" <meta http-equiv="refresh" content="0; url=https://ritual.sh/log/">
<title>Redirecting...</title>
# Remove folders that shouldn't be uploaded to Neocities </head>
FOLDERS_TO_REMOVE=( <body>
"about" <p>Redirecting to <a href="https://ritual.sh/log/">ritual.sh/log/</a>...</p>
"archives" </body>
"audio" </html>
"blog" EOF
"buttons"
"gear"
"guestbook"
"media"
"now"
"resources"
"tags"
"test"
"updates"
"uses"
"fonts"
"images"
"js"
"games"
)
echo -e "${BLUE}Removing excluded folders from public...${NC}"
for folder in "${FOLDERS_TO_REMOVE[@]}"; do
if [ -d "public/$folder" ]; then
rm -rf "public/$folder"
echo -e " ${GREEN}${NC} Removed $folder/"
fi
done
echo -e "${GREEN}✓ Folder cleanup complete!${NC}"
# Remove specific files that shouldn't be uploaded
FILES_TO_REMOVE=(
"index.html"
"404.html"
)
echo -e "${BLUE}Removing excluded files from public...${NC}"
for file in "${FILES_TO_REMOVE[@]}"; do
if [ -f "public/$file" ]; then
rm -f "public/$file"
echo -e " ${GREEN}${NC} Removed $file"
fi
done
echo -e "${GREEN}✓ File cleanup complete!${NC}"
echo -e "${GREEN}✓ Redirect files created!${NC}"
echo "" echo ""
# Count total files # Upload the redirect files
cd public cd public
total_files=$(find . -type f | wc -l) echo -e "${BLUE}Uploading files to Neocities...${NC}"
current=0
echo -e "${BLUE}Uploading $total_files files to Neocities...${NC}"
echo "========================================" echo "========================================"
echo "" echo ""
# Upload files using the API # Upload index.html
find . -type f | while read file; do response=$(curl -s -H "Authorization: Bearer $NEOCITIES_API_KEY" \
cleanfile="${file#./}" -F "index.html=@index.html" \
((current++)) "https://neocities.org/api/upload")
# Calculate progress percentage if echo "$response" | grep -q '"result"[[:space:]]*:[[:space:]]*"success"'; then
percentage=$((current * 100 / total_files)) echo -e "${GREEN}${NC} index.html"
else
echo -e "${RED}${NC} index.html - ERROR"
echo " Response: $response"
fi
# Create progress bar with simple characters # Upload log/index.html
filled=$((percentage / 2)) response=$(curl -s -H "Authorization: Bearer $NEOCITIES_API_KEY" \
empty=$((50 - filled)) -F "log/index.html=@log/index.html" \
bar=$(printf "%${filled}s" | tr ' ' '=') "https://neocities.org/api/upload")
space=$(printf "%${empty}s" | tr ' ' '-')
# Upload and capture response if echo "$response" | grep -q '"result"[[:space:]]*:[[:space:]]*"success"'; then
response=$(curl -s -H "Authorization: Bearer $NEOCITIES_API_KEY" \ echo -e "${GREEN}${NC} log/index.html"
-F "$cleanfile=@$file" \ else
"https://neocities.org/api/upload") echo -e "${RED}${NC} log/index.html - ERROR"
echo " Response: $response"
# Parse result from JSON - check if response contains "success" fi
if echo "$response" | grep -q '"result"[[:space:]]*:[[:space:]]*"success"'; then
result="success"
else
result="error"
fi
# Display progress with color
printf "[${YELLOW}%s${NC}%s] %3d%% (%d/%d) " "$bar" "$space" "$percentage" "$current" "$total_files"
# Show file status
if [ "$result" = "success" ]; then
echo -e "${GREEN}${NC} $cleanfile"
else
echo -e "${RED}${NC} $cleanfile - ERROR"
echo " Response: $response"
fi
done
echo "" echo ""
echo "========================================" echo "========================================"