Adding new blog post
This commit is contained in:
parent
f6283b1142
commit
6c959a9f96
3 changed files with 110 additions and 98 deletions
55
content/blog/tiddler-dev-blog-1-making-a-plan/index.md
Normal file
55
content/blog/tiddler-dev-blog-1-making-a-plan/index.md
Normal 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.
|
||||||
BIN
content/blog/tiddler-dev-blog-1-making-a-plan/tiddler-1.png
Normal file
BIN
content/blog/tiddler-dev-blog-1-making-a-plan/tiddler-1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 288 KiB |
|
|
@ -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 "========================================"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue