Monday, February 25, 2013

Character Screen, Park, and more

The first major feature I implemented was the Character Select screen. Back in an early build of Felinity, eating the food bowl gave the entire party +1 to all stats, and that was fine as the party was only 1. But with the story rewrite to have Tandy and LilKitty be a duo earlier on, fixing up this functionality came up.

Just a normal dialog, but helps establish that someone gets it, and not everyone.
Very similar to the normal Character screen.
Namely it allows previewing stats before you give your character the buff.

The character select screen can be used for any number of things, and will just send a bitmask to the script state for any further actions to interpret. Namely the "IncreaseStat" command which increases the stat of all party members set in the script state.

On the Debugging side of things, I added the GID Stack. Basically to find out a bunch of info about any place clicked on the map while playing to help debug, or add features:

2013-02-25 00:42:52.027 Felinity[29818:10403] tilelocation : 18.000000,5.000000
2013-02-25 00:42:52.028 Felinity[29818:10403] Wpeep: LilKitty
2013-02-25 00:42:52.028 Felinity[29818:10403] GID Stack
2013-02-25 00:42:52.029 Felinity[29818:10403] triggers: 0
2013-02-25 00:42:52.030 Felinity[29818:10403] collision: 0
2013-02-25 00:42:52.031 Felinity[29818:10403] roof: 0
2013-02-25 00:42:52.031 Felinity[29818:10403] notroof2: 0
2013-02-25 00:42:52.032 Felinity[29818:10403] notroof: 0
2013-02-25 00:42:52.033 Felinity[29818:10403] objects: 0
2013-02-25 00:42:52.034 Felinity[29818:10403] terrain2: 0
2013-02-25 00:42:52.034 Felinity[29818:10403] terrain1: 69

Another useful debugging feature added was turning on the collision layer:
Helps visualize in game various walking paths etc.
Next up, I added "party" to the map loading. This allows maps to be aware of a "party" of characters to follow the main character around. This was sorely needed, because trying to "setup" a map with scripts to follow the main character was not gonna work when I had multiple entry/exit points. And with this, I just define the party, and everything auto-follows correctly.

Rats only included for testing purposes. They were promptly ate by Tandy and LilKitty after this photoshoot.
A subtle, but "big" feature that was added was smarter moving using the touch / click method of movement. User feedback deemed the boundaries of movement (using the mouse) to be unresponsive when clicking on areas that were not walkable on. They were deemed too unforgiving sometimes. So now clicking on a "unmovable spot" will be a smarter about moving you to where you probably intended to go. Should work great on the ipad when you're fat-fingering around.

And one more thing. I've been working on The Park. In the uDevGames version of Felinity, this was actually part of the Alley map, but I wanted to make this much bigger, and be its own little area. It's still very much a work in progress, but I'm liking how it's shaping up.

Sunday, February 3, 2013

Felinity - March of the Green People

A few updates for the past 2 weeks.

I put out a brief demo for a few people to test. Very brief. In doing so I found a few bugs:

  • My game doesn't work on retina displays. A few people in the cocos2d forums posted some suggested fixes, but they seem sketchy. I'll have to give them a try.
  • Apparently Lick didn't heal you completely back to full. Weird bug where you would be stuck at like 239.999999 / 240, and it wouldn't make it the full 240 (since the display it casts to an integer)
  • If dialogs contain a line break before a pause, it would show the first character of the next line. The appropriate fix is to put the pause before the line break (since there is a bug in my version of cocos2d that really doesn't like strings of 0 length)
  • You could click on selectors while the character screen was up, and you could click on the character screen while dialogs were up. Those have been fixed.
  • Fixed player stuttering bug which was also the cause of why there was a "race condition" issue for wpeeps following the player
Along with those bug fixes I did some some map work on the post office:
Tandy walking around the empty post office.
Using a reference from the pixeljoint forums, I created a 32x64 walking man template to base my people on. I think the sizing looks perfect: 
The walking animation in each of the 4 directions.
So from those, I'll need to pixel a generic man, a generic woman, and a post office worker.

I've added 2 new script commands that are 2 variations on the same theme: GotoScript and CallScript. GotoScript interrupts the current script and loads the new one. CallScript involved implementing a script stack, so that you can load a script, then return to the current one.

Monday, January 14, 2013

Felinity - Follow the leader

Work has begun again on Felinity. I've updated my TODO and started working through it again.

Three updates for this round:

Wpeeps can now follow other wpeeps. This will namely be used to create the party following system. When a new cat joins your party, it can follow Tandy around. I created a simple test level to show this off.

I got Graphics Gale working in OS X! This is fantastic news to me as pixeling on the Mac is an incredible pain in the butt. Many people suggest Pixen, but it's simply not there yet as a pixeling tool. And Photoshop, while an excellent pixeling tool, costs too many arms and too many legs. Adobe does offer old versions of Photoshop CS for free, unfortunately, CS2 is PPC only, and Apple effectively killed that with OS X Lion.

But back to Graphics Gale. I got it working under OS X using Wine / Wine Bottler. Simply download the executable (trying out GraphicsGale's new beta), create a new Bottle with Wine Bottler (do make sure you have X11 installed) using the Graphics Gale installer executable. Bing bang boom, you're done. Open that up. It was a bit tricky to find my working directory folder, but otherwise, it's working just like what I'm used to.

Lastly,  you can now add party members. Implementation was pretty straightforward, and it'll allow the new story rewrite to happen sooner.

Sunday, July 15, 2012

Felinity Progress

You thought I was dead didn't you?

Not in the least. Lots of work has been done on Felinity. I'll admit I did have a fall out midway into continuing work on it where I got depressed about the gameplay. But fear not, I found a story change that will allow me to enhance the gameplay to match traditional party based RPGs!

So what has changed?

Felinity was originally 1024x768, 1:1 pixels. Tile sizes and most people were 64x64. This proved beautiful, and unwieldy. I'm a decent artist, but by no means am I an artist. So what did this I do?

I downsized. Tile size has been reduced to 32x32, and the view is zoomed by 2x. This creates a more pixelated view (more akin to the 16 bit era). the upside to this is now it's much easier for me to create art for Felinity (at least the map). About 4x easier. It also allows for me to draw on work people have already done (32x32 is FAR more popular than 64x64).
The new face of our protagonist
Also done was a new wpeep format. Wpeeps are the people who populate my map, and the way I was doing before was naive and inefficient. Now wpeeps are packed into more compact spritesheets, and this has brought down the amount of space they require by 4x! Combined with being 4x smaller (64x64 -> 32x32) the memory savings are huge! I suppose now that I've saved 16x the space, I suppose you'll expect me to add 16x the amount of people to make up for my lack of updates? So demanding aren't you!


Super Packed

Also added is a fully functioning Character Panel. This allows you to view all of Tandy (and other party member's) intimate stats as well as use certain abilities of of combat, or just see what certain abilities are.

My, how you have grown Tandy.

Tandy's Techniques

Another excellent thing added was the ability for Felinity's scripting to have branching! Currently all branching is handled through Yes/No Dialogs, but is certainly not limited to just that. One of the major advantages of this is for players to have ways to back out of sleeping (and not using up cardboard boxes) or to create more branches in the story and dialog. This is, by far, the most exciting change.

Tandy has important decisions to make now.
On the battle side of things, I've implemented debuffs as well a wide variety of them to be used in conjunction with any ability. Currently we have:
  • Stat modifier
  • Disable (stuns)
  • Physical Damage over time (reduced by mitigation)
  • Magical Damage over time (not mitigated)
  • Healing Absorbs (prevents N amount of healing)
  • Reduced Healing (reduces amount healed by N%)
  • Silence (can't use Techniques)
  • Disarm (can't use Attack or Skills)
Poor Tandy has so many Debuffs on her

I have a decent start here, and I'm open to more debuff possibilities in the future. They were truly a joy to code.

In addition, I back-ported all of Felinity to iOS/iPad and merged the codebase. So now 1 workspace builds both Mac and iPad! Felinity Engine was always designed in mind with being played on the iPad.

There have been tons of minor changes, that still add so much depth to the engine.
  • Multi-size wpeeps (large people) with proper depth sorting. 
  • Attack points in combat to allow smaller or larger enemies
  • Script and Map Trigger support for playing sounds
  • Ability to modify character stats via scripts
  • Scripts can directly modify the contents of the tilemap (the use of this in Felinity was to have breaking branches that Tandy falls from)
  • Abilities are more extensible and promote reuse. I also added about 8 cool ones

Anyways, my apologies for the long delay between updates.

Friday, October 14, 2011

Felinity Postmortem

Third place Originality
Sixth Place Overall

I set out at the start of this contest to make an RPG. I knew I wanted to make an RPG. I had played enough RPGs over my years to know the good stuff and the bad stuff in them. But what could the story be about? I chose my darling cat Spiffie as the main protagonist, and used her adopted name, Tandy. I figured a story about a cat would be most interesting, but more so, a non-anthropomorphic cat. I want the player to really be the role of this young orphaned kitty. The story developed for the uDevGames version of the game only covered 1/8th of the story I wanted to, and only has a small fraction of the total content I wanted to get out, but I had a plan!

What Went Right
Starting out fast right out of the box. I had the start of an RPG engine for iPad using the Cocos2D engine. It took about 1 hour to get it working on the Mac over from the iPad. This was a good sign for me. I spent the next week getting all the mac specific stuff ironed out, changing screen resolution, minor bugs, etc. Overall using Cocos2D was just a huge plus. I was able to focus heavily on game design and assets, and less on asset management. I also employed the use of several tools meant to assist Cocos2d such as TexturePacker, Tiled, Glyph Designer, and some custom Cocos2D extensions (HKATMXTiledMap, AWScreenshot, etc.).

Once I had established some basics, I quickly hit my friends up for rapid feedback. This allowed me to iterate often on the art direction and gameplay mechanics. While they say you're ultimately developing a game for yourself, something you yourself would love, you are really developing it for the people who will play it. Most people can quickly tell you "I like that" or "I dislike that" and you can get a firm idea of what works and what doesn't work. Gameplay is a bit harder to tweak, but I initially set the bar very high. A bit too high, actually, as many people who were quite good, were failing. The level of difficulty I set it at felt just right. Inexperienced players to the traditional 16 bit genre of turn based RPGs may find it a bit difficult, but those who were experienced might find it a bit easy. Most importantly, did they have fun?

And to tweak the hell out of it, I wrote several Perl scripts to helped translates from easily digestible and tweakable Excel sheets, and scripts that convert to the data format. While I didn't integrate them into my build process, they could easily have been made to, and overall they greatly simplified certain aspects of content creation. It also allowed the dance sequence at the end of the game to be an absolute joy to choreograph!

What Went Wrong
What kept me awake my first night when deciding how to make this game was George Seurat. He developed this crazy pointillism style that was kind of astonishing to look at. I loved it. I wondered if I could make a game in that style. I actually pushed the art style for about a month before I got two overwhelming bits of insight. One, it was insanely difficult to create tile-able assets like that, difficult to create alpha based assets, and lastly it was just time-consuming. And two, the reception was ice cold. While some thought it was clever and pretty, the majority did not like the art style juxtaposed with pixel art. What I did find out was more people loved the pixel art. There was some critical reception about not liking it, or concerns over the anatomical nature of Tandy; but in general, people liked the new direction. I think if I had started out working in pixel art sooner, I could have churned out at least another few plot points worth of content.

The control schemes for the game are heavily touch driven. I had originally designed things for the iPad, and had spent months contemplating perfect controls for the iPad. While they "worked" on the mac, most people clamored for joystick / keyboard controls. It's just what they are used to when dealing with a 16 bit genre RPG. I made some last minute tweaks that added keyboard shortcuts to the battle scenes, but I think it might have been too little too late. I still ultimately want to design this as an iPad game as I find the controls for the iPad to be absolutely perfect and clever, but for a mac contest, I should have made it allow keyboard as the main input, or a better hybrid of both.

Content! Content! Content! Content games for a 3 month contest is a drudging no-no. Especially as a sole developer splitting time between programming, art, and design. I had designed out several hours of content, but my eyes designed far more than I could chew. Most time consuming was the pixel art. While I had an absolute joy pixeling them into the wee hours of the morning, most of them took hours, and some animation took days. Trying to mingle in the time to pixel these in between my day job and the rest of my life was just consuming. What's worse is the rate of content consumption compared to content creation is astronomical. People devour content. They love it, but they want more of it. I think in the grand scheme of things, I should have brought on an artist to take over this so that more hours could have been dedicated to making the game longer and more complete.

Like most games, sound was sadly an afterthought, and it wasn't till late in the contest that the background "music" to the level was added. Once it was added though, it really set the mood, and it became so obvious how much of the tone was going to be lost without it. Even more frustrating is the composer who offered to make a quick 30 second battle music to fit the game bailed on me, without even a heads up, so I went into the voting period with no battle music. A good friend of mine was irritated by the lack of battle music, and started singing a little song whenever he went into battle. He was kind enough to quickly throw this together in Garage Band, and I quickly added this mid-voting period. It made going into battle far less jarring and you didn't get that "sudden silence" feel. And while I had this music, I still lacked the polish of sound effects. All those "little things" that make a game complete. Button clicks. Menu selection. Attack noises. Rushing wind. All simple things that could have been added to give more depth.

Not Really Post Mortem
While I write this postmortem for Felinity, development is not dead. While many, many features were implemented, there were many crucial features left out. Character screens, attack points, sleep points, more stuff to do! And the content! Oh so much more content. I want to finish up this story of this beautiful kitten. I want people to live her life and feel the emotions she feels. If you want to keep track of the progress and development, just keep tuned in to this blog.

  • Developer: Brian Ramagli
  • Title : Felinity
  • Genre: Cat RPG
  • Development Cycle: 3 months
  • Source Code & APIs: Xcode (Objective-C), Cocos2D
  • Critical Software: Graphics Gale, Texture Packer, Glyph Designer, Excel, Komodo Edit, Perl, Tiled
  • Hardware Used: Octocore MacPro, iPad, pen and notebooks

Wednesday, September 7, 2011

Usability and Content

Our main protagonist has been granted with an attacking animation. Not only that, but she also has a full sprite sheet (with her correct color)
Isn't she adorable?

This is her Dialog picture. This pops up anytime she is chatting (meowing?) at various things.

On the engine side, I've added a new RNG (my old trusty Ranrot), I've also made it so you are safe to travel at least one square before you encounter another battle. There were certain play-testers whose random battles were extremely biased (despite a relatively low encounter rate).  Overall this just gives a nicer feel to the game's encounter rate.

Also added was support for background music (rain!), screen flashes, removing scripts from other scripts (this creates a kind of lock and key type system, though that also needs to be overhauled as well). This allows me to slightly better guide the player by semi-gating content in hopes to better steer the player in an otherwise VERY open ended map.

Lastly I fixed up some UI bugs for those who get to much higher levels and get to see more of Tandy's abilities.

So is there any new content from this build and the last build? Technically no. Just a much better looking game. These last few weeks are going to be dedicated to content, bad guys, and hopefully finishing up the first level before the contest ends. The engine is nowhere near 100% feature complete and is still missing basic RPG features such as character screens, map and battle sound effects, but these will probably have to wait.

Download Preview

Sunday, August 21, 2011

Huge Update

So since we last met, I did some major overhauls. For one, the graphics for the map has been changed completely. I really liked the "idea" of seuratting the map as well as it creates a unique effect, however it's damn hard to effectively create art like that. I also have more experience pixeling than seurratting, so after some rough feedback from the #iDevGames crowd, I changed the art style.

The battle backgrounds will remain seuratted (mostly cause I don't have the time to pixel in 1024x768 backgrounds).

So besides revamping the art, I also added a new bad guy, the pigeon.

With the pigeon came with a few backend updates:

  • AI now takes into account all of their abilities
  • Special effects
I also tweaked the level scale for this game to be slightly accelerated to account for 1) no rest stops and 2) only one party member so far. Once your party expands, it'll be less brutal to spread out the leveling up love as you will have 2 party members to ding.

Also related to the level scale is I've fleshed out the beginning to end of "how strong" characters will be. This was pretty crucial as by setting the progression of Tandy, I can then set the difficulty of the enemies (which I've made challenging, but not impossible... but don't get over your head too fast, or you might find yourself kitty filet).

Lastly, I've set up SaveFile versioning. Mostly this will be for production, as I'm still heavily developing the game. If some change that is added that would seriously break the game if you loaded a bad save, it would be good not to load it. I highly recommend this for any game that utilizes saves.