Emily's Curious Adventure


el_pango

Member
Joined
May 31, 2006
Messages
145
Location
California
A few weeks ago, I posted a prototype of a directional-gravity platformer to General Talk, and it seems to have been quite a success. I'm now moving forward with making an entire game out of it. Herein shall be my devblog.


Occasionally, I'll post demos as appropriate.


I should mention that it's going to be a 2D action RPG with weird gravity, fishing and cooking skill trees, along with their attendant minigames and a wee bit of romance to boot. My dev setup is as follows:

  • Language: C
  • Libraries: Allegro 4.3, DUMB,FBlend
  • Images: GIMP 2.6
  • Sounds: Goldwave, Milkytracker
  • Caffeine: Yes.
 
Last edited by a moderator:
Day 1.


The first second task to overcome was how to handle lightmapping. (The real first task was to figure out how to draw directly to the hardware overlay, but that's covered on the wiki.)


Because the game is 'only' 2D, but I want it to 'feel' very immersive and and emotionally compelling, having dramatic lighting is going to play a big part. Since I'm working in Allegro, I settled on the following:

  1. When loading a new map, the engine will also load an image that controls how tiles should be lit.
  2. The engine makes a copy of this image.
  3. Dynamic lights, like lanterns, fire, spell effects and the like get painted into the image from step 1.
  4. The image from step 1 is used as inputs to draw_gouraud_sprite().
  5. At the end of every frame, the lightmap image from step 1 is restored from the copy in step 2.


The restoring part sounds expensive, but it really isn't - because the world is split into rooms, a bit like Maze Of Galious, the lightmap and the copy I'm restoring from only need to be 50x30, since a 400x240 display will hold about half those dimensions worth of 16x16 tiles, and I want each room to be at most two screens across. Most of the drawing time will be taken up by the gouraud-shaded tiles, and even though all of the shading and blending is happening on the CPU, it seems like a Pandora's up to the task, even at the stock 500 MHz, even with a MOD player running.


I wrote a quick proglet to raycast from light positions to walls that should block light and save the output to a file. It's admittedly quite stupid, slow and performs a lot of ray-following it doesn't need to, but because lightmaps get made out of band on the content-authoring side, I don't care :) .


With that sorted out, along with deciding to use Mappy as a tilemap editor, I tried to draw my first map to the screen, only to discover that - surprise! - draw_gouraud_sprite() doesn't fully take into account RGB when setting up the gradients between the corners of the sprite, and instead, just blindly interpolates between c1, c2, c3 and c4 (whoops). I guess, when it was originally written, no one ever expected handhelds to be fast enough to do colour lighting in software.


I'll probably just rewrite it somewhere inside the game engine. I think, since all tiles are going to be 16 by 16 pixels anyway, I can probably replace some of the divisions with shifts.


More later after work and hockey practice.
 
Last edited by a moderator:
I would appreciate it if people posted beta tests in the Beta testing forum instead of in General. I try to add all new PNDs to the three Pandorawiki software lists, but there's no way that I have time to check all the threads in General, so I only check certain subforums.


Moderators here don't seem to be as diligent about moving threads to the correct forum as they are on GP32X.
 
Last edited by a moderator:
^ We need more mods. For one the voting thread for the platforming competition was still pinned in general talk the last I checked.
 
Possibly Craig is vary of mods after what happened last time.


P.S. "is apply for modship"? Let's speak English here, please.
 
Last edited by a moderator:
Hi ESN,


Sorry, I had no idea I wasn't playing by the rules! The reason I'd rather post .PNDs here, at least during the early stages, is they'll most likely be quick unit tests of one or two features, rather than actual full gameplay, and as such, shouldn't be publicised just yet. Once I start to approach something vaguely alpha-like (all planned features implemented but not yet tuned, a level can be played in its entirety), I'll move them to the official beta test area. Is this acceptable, or would you and the mods rather have the rough-cut stuff show up there, too?


Sony: I haven't. I suppose I might, but I really don't need anything other than a tester, and not even that yet. I also don't know if I can hit that deadline...


Anyway,


Day 2.


I started to decide how the fishing minigame will play. Throughout the world, there will be tiles the player can stand on marked as 'fishable', and the default action for the attack button will switch from 'attack' to 'fish' if there are no monsters within a certain radius. Once the player has decided to fish, I'll blur the background and bring up the bar graph (see attached screenshot). The reticle will bounce from left to right and back again, and the player has to use the attack button again to stop it in the 'get fish!' area. After that, I'll internally do some kind of dice roll to determine what fish they'll get and what size it'll be. (Ignore the crazy lines in the background, I just wanted something back there that wasted some CPU time to check performance.)


One problem I've run into is that the LCD on a Pandora does seem to ghost a bit more than I was expecting, making the reticle hard to see when it's moving quickly. I may have to make it bigger and/or darker and/or make the bar dark and the reticle light.


Also, I've cooked up a reasonably non-harebrained story:

Emily, the protagonist, has just moved to a new town and is timid, lonely and unpopular at school. One night, while reading a novel about a magical castle with topsy-turvy gravity, she dozes off, which is how she ends up inside the game world. To escape and go back to her own world, she has to rescue four people trapped in four different worlds, each of whom conveniently have part of some mcguffin that promises to grant the holder power over fate. Furious buttonmashing ensues, ending when Emily has rescued the last person and everyone is assembled in the castle.



Emily asks if she can use the mcguffin to improve her situation in the real world, and one of the rescued NPCs points out that, over the course of navigating the world and rescuing them, she's become stronger, mentally tougher and more courageous than ever before, and, as such, she already has the power over fate she seeks, all she needs to do is use it.






Emily and the NPCs are about to say their goodbyes, when suddenly, Emily's real-world alarm clock comes on.






The game ends with Emily at school, and a boy she has a crush on noticing that she seems more confident and outgoing than before and striking up a conversation. Roll credits, this story is happy end, congraturation and all that.




I probably will make little progress this weekend, as the weather is nice and I want to get some hiking in...

Screenshot_fish.png
 
Last edited by a moderator:
Hi ESN,


Sorry, I had no idea I wasn't playing by the rules! The reason I'd rather post .PNDs here, at least during the early stages, is they'll most likely be quick unit tests of one or two features, rather than actual full gameplay, and as such, shouldn't be publicised just yet. Once I start to approach something vaguely alpha-like (all planned features implemented but not yet tuned, a level can be played in its entirety), I'll move them to the official beta test area. Is this acceptable, or would you and the mods rather have the rough-cut stuff show up there, too?
Sure, that makes sense; thanks for considering. I do check the Dev section from time to time, it's software releases in the General section that I find hard to keep track of.


I'll try it out, anyway; I'm not sure whether I'll post it or not, I guess it depends on how playable it is. Some games like "Panjoust" have very unfinished but playable betas, for example. I guess one advantage is that if you're looking for feedback, posting it (and clearly marking "beta" or "test" beside it, and linking to this discussion thread) might help some more people become aware of it and get you some feedback.
 
Last edited by a moderator:
Day 8.


No, this project didn't die.


One of the hardest parts of doing homebrew is staying motivated. It's easy to find reasons to just veg out in the evenings: long commute, bad day at work, etc. For the early part of the week, I failed pretty miserably at this, but I've resolved to put the wheels back onto the cart and keep going.


I've decided to dump colour lighting until a point release; I sorta, kinda got it to work...I guess, but it didn't run well, and rather than spend weeks profiling it and holding up the actual 'game' parts of the game for this one feature, it seems like it'd be better to punt it until later.


I have gotten my first map to display, although dim areas are too dim on a Pandora.


Ignore the hideous tiles, they're just test tiles from a template tileset sheet I made specifically for testing.

blargh.jpeg
 
looking good, I am watching this :)


I liked the initial prototype, it had several minor problems, but the core idea was good, I am interested to see what you will make of that idea.
 
^ Is that map cut off and there more to it?
Yep - each map will be 50 tiles by 30 tiles. The worlds will be room-based, kind of like Maze of Galious, and each room will be no larger than two screens high and two screens across.
 
Day 12.


Not much to report - I really haven't had a lot of time on this thing. It looks like the girlfriend is traveling on the weekend, though, so that helps.


My latest effort has been on making skies and weather effects. Here's what I got so far.


You can't see it in a still, but the ocean and meteors are both animated. Once I have time to make the tropical island/karst tileset, my test map will probably look really beautiful and dramatic.

blargh.jpeg
 
Last edited by a moderator:
Day 13.


No pretty screenshot today, but progress was still made:

  • Wrote a bunch of Lua scripts to make Mappy export the maps in the formats I wanted.
  • Created a daytime tropical island sky background.
  • Tweaked the nighttime tropical sky background slightly.
  • Reviewed and profiled code from a previous unfinished game to draw more atmospheric effects.



Tonight, I will start on creating the various tilesets I'll need, but I don't expect to finish them in one go.
 
Day 19.


Yesterday's progress:

  • Added animated tile support.
  • Started working out the logic of how the game should decide which orientation an entity's sprite should be in.



So far, here's what the roadmap looks like:


*Animated sky backgrounds



  • Ocean waves

    done
  • Meteors

    done
  • Clouds
  • Aurora (may possibly borrow this from another project)
  • Tropical day backdrop
  • Tropical dusk backdrop
  • Tropical night backdrop




*Particle system



  • Make self-contained and fire-and-forget from calling code
  • Explosion
  • Implosion
  • Implosion with whorl
  • Optionally parametrize colour




*Entity movement



  • Directional gravity
  • Collision with world
  • Collision with other entities
  • Logic to appropriately rotate and flip sprite




*Tile map



  • Can render and scroll correctly
  • Lightmapping
  • Allow glowing/additive blend sprites in foreground
  • Animated tiles
  • Allow glowing gravity arrows as needed and have them pulsate
  • Support for triggers (player can pass through tile, but it kicks off an event)




*Decide how inventory will work, write up specs


*Fishing



  • Bar graph/sliding reticle minigame

    done
  • Rod and reel casting noise when minigame begins
  • Rod and reel windup/pulling noise as reticle accelerates
  • Rainbow particle implosion on successful fish catch
  • Study how to increase visibility of reticle on LCD as needed
  • Tune difficulty




*Cooking and forging



  • Decide whether to keep this in the game
  • UI for putting together four items in oven
  • Decide data structure for holding which groupings of items can craft what new items
  • Decide whether this will have a minigame attached or just be a dice roll carried out internally
  • Figure out whether these will be just healing items (feels kinda tacked on...?) or whether to make, say, learning how to bake a cake essential to a subplot




*Story



  • UI for displaying character dialogue and system messages
  • Revise premise or optionally discard and come up with a new one
  • Come up with quests and dialogue (

    important!

    )




*Monsters (partially blocked by entity movement and drawing stuff)



  • Decide what kinds of monsters should be in the game and how they should behave
  • Implement various AI patterns (for simplicity, these will be handled directly in the code and not scriptable)
  • (optionally) Find someone who can draw (!!)




*Art and graphics and sound (partially blocked by monster designs and story)



  • Decide what environments/biomes there will be
  • Tileset for each biome




*BGM and sound (partially blocked by monster designs and story)



  • Decide whether to go with samba and/or calypso themed music throughout the game if it all takes place on the same island




It may take a while :) .
 
Last edited by a moderator:
Back
Top