It's not quite a lost art.
I recently watched a video of someone creating a 3D engine using ASCII in C++ which was beautiful. The end result was Doom hallways, but with #'s making up the walls. There's a lot of tricks and tips you can do to squeeze performance out of Godot, but it's missing some of the easy resource savers (for example, all objects are "rendered" {wrong term, perhaps} in a scene even when the player isn't looking at it, or it's blocked by something else.) That's one of the bigger updates in 3.5, easier automation of that, but it's still up to the dev to implement the method of doing so.
but it did show you could make a commercial game with the engine the way it is now.
Yeah, this is pretty true. I've seen a handful of things made with Godot that I would say are impressive. The real reason I'm shying from 3D is asset creation. It's exponentially more work to make a 3D model with animations than a pixel sprite sheet. It's something I want to learn, and hey, maybe that'll be the focus of whatever I do after this.
What's
this, you ask?
Well, here's my stated goal: Make a clone of River King and release it on itch as if it were a commercial product, rather than just like...a thing I did.
What's River King, you ask?
Oh wait wrong one, but I might want to read that as research. The
real River King:
(I refuse to believe there are any more games in this series, especially not one on the DS.)So Legend of the River King is a cute game. The basic idea is that your sister fell asleep really hard and the only way to wake her up is to ask a fish to do it, so you go on an adventure to find The River King and put a hook through his mouth. There's some basic RPG elements, but the originals were all about catching fish, selling fish, buying way too specific fishing equipment and enjoying the country-side.
The graphics of the old game were...well, I'd say a bit blocky and rough.
It also has the unpleasant UI of old gameboy games (and honestly the newer ones aren't much snappier). But at the core, it's a lovely peaceful experience with chipper music and a satisfying fishing game loop.
So why make a clone?
Because. I can make it more satisfying. I can make it even more chipper. I'm gonna cram so much cuteness down your cramhole you won't know what hit you.
Here's what I'm thinking, actually. I played the DS one recently, as it's the worst of the lot - and my intention there was to see /why/ was it the worst of the lot. Here's my synopsis:
Problems with Legend of the River King:
Fishing failure results in no gain - feels like a waste of time.
Bait isn't a resource that is worth managing, it's an obstacle/time waster.
Location for fishing/pathfinding of fish can be frustrating. It's not fun to cast five or more times trying to get your bobber in front of the same fish.
Fish near the coast are nearly impossible to get to bite, just because of the autonomous behavior of fish.
Catching fish doesn't seem to have a purpose except minor collect-a-thon achievements/awkward quest solutions.
There's nothing to do besides fish. The people aren't interesting, the scenery is fine, bug/flower collection doesn't feel like anything. The game loop should include some amount of exploration/re-visiting. Or just reward exploration somehow.
General ideas:
Ways to gain bait:
purchase, order in bulk, mulch fish, battle monsters (FF RPG style)
Ways to catch fish:
Baitless - with net, chum and use net, fishing rod.
Things to do:
Catch fish, sell fish, take river survey? (Ys Celceta), donate fish (see sprites moving ala Animal Crossing?)
Things for fish to do:
Donate to local aquarium/home aquarium, sell, mulch into bait/chum(fish size = bait or chum resource?)
Rivers/lakes:
Shallow-water fish are cheaper, smaller fish that can be used as cheap bait or sold for a pittance, caught with a net, mostly. Crawdads and minnows, basically. Deeper water fish won't come to shore, need to be caught with a rod (or chummed to come to the shore), and should be more valuable (but perhaps not good as bait, for balance reasons, I guess.)
Lakes can require long-casting rods to gain very large fish which prefer the center of the lake. Same would apply if seaside is included.
Fish behavior:
In River King, fish rotate a positive or negative integer, then swim straight forward a set distance. If they collide with an object, they just stop. If they move within 'sight' of the bobber, they'll move toward it and begin nibbling.
Bait has no impact on the distance fish are attracted, only on which fish are attracted. Same with lures and flies, which are treated like bait.
If the bobber is cast on top of the fish, they swim off mostly straight very quickly. This prevents them from being caught without recasting, basically.
Fish have a lifespan (roughly a minute or 90 seconds), when their lifespan ends, they just disappear (fade away, actually). New fish spawn as soon as they're gone, to keep the population roughly the same. It's noticeable.
During the catch phase, fish swim away from you, you reel them in. If you reel while they pull, the line feels more tension and can break. I see no reason to change this mini-game, as it's fun enough, however the 2nd dimension pulling (left and right) of Mystic Valley adds nothing but an annoyance.
I could talk for actual hours about how bad the quest design is in Mystic Valley, but I won't be doing that now.
Here's my idea for the game loop:
This is about resource management. You catch fish to sell to spend money on bait to catch fish.
Should you fail at fishing often enough, you'll run out of money. In such a situation, you either use a net (baitless) and scoop up some bait fish from the shallows, or you forage in the forest for worms/bugs and get beset by rats or whatever that trigger Final Fantasy style combat. I could scrap this second idea because it's seeming more and more pointless and would only be added as homage to the original games. Of course, winning combat would reward you with bait/money.
The idea here is the flexibility of using a net and a rod. While playing Mystic Valley, I would sit there with the bobber in the stream, waiting for something to bite and I'd see a fish just collide with the shore and mill about there. I really just wanted a net to walk over there and scoop it up. Which would break the main issue I have while playing River King: mainly, you just stand in the same spot and burn through all your bait, then go back to town. At least now there's something else for you to do, if you want to.
I'll keep hammering these ideas out, so any suggestions are appreciated.
-=#-=#-=#-=#-=#-=#-=#-=#-=#-=#-=#-=#-=
So today (because the teachers are required to come back, but the kids aren't allowed to come back to school because of a recent outbreak of covid), I had no work to do at all. With my time, I decided to make a very basic game to try to express the loop. I don't think it captures what I was trying to do, but it's good practice iron out what I want in 2D movement and methods to determine if you're fishing in shallows or depths. Anyway:
Here's our map. We've got a small pond with a shore (light blue) and a deeper section (the darker blue), plus a patch of exposed dirt. We also have a small nudist.
I've determined these are the things we want to do in the game. Let's associate some keys to these actions.
Luckily, we're going to scrap all this eventually because I absolutely hate all of the names I've given stuff.
I make some crappy net and rod/bobber sprites out of the Godot logo and give them a brief time of existence when you press their respective button:
When that timer runs out, it runs this function:
I end up having to do this twice, and really what I want is to use a state machine. I'll get into what that is more next time I write an update. Either way, we end up with our bobber and net existing for a brief time and I attached an area to both of them. Because of the way Godot works, I can check if the area the rod/net enters is the depths or shallows, and I print a message if it is the right one!
This requires setting up the correct collisions. Eventually, I settled on using the Layers built in to Godot. Basically: collisions can occur on one or multiple levels. I set level 1 to be present for everything except the walkable terrain - so our player won't walk into the water, but can walk everywhere else. The shallows is collision 2, which is also what the net is. The depths are collision 3, same as the rod. If they're not in the same collision layer, they don't interact, so we merely have to check if they ran into a body.
I wrote a quite rotation check for whenever you press left-right-up-or-down, with points the rod/net in that same direction. It's a bit silly because rapidly tapping left and right makes you catch several fish on a single cast.
Finally, since the dirt is an unusual shape, I establish another Area, and give it a complex polygon collision. I drew that by hand, and now the game knows if you're on the exposed dirt or not.
Finally, I added a basic game loop - digging for worms can cause a rat to attack you, lowering your health and ending the game.
If you want to play, go ahead
here! It's only in-browser, as this isn't really worth a full export process. This was a useful experience because I know I /don't/ want to code it in this way and will instead do some research on state machines.
I want to play the PS2 River King, though it might take some effort
to emulate it. I mean, legitimately obtain a copy and system.