Home
2012/01/30
Wyvern, perhaps
To break past this EnemyBehavior code, I think the best course of action is to make a new creature that requires new code.
I'll start working on a "wyvern" creature type. Sort of a small flying dragon. Ideally, this creature will move in arcs and attack while moving forward. These simple changes in movement will require new behavior code. Once we see the new code, the EnemyBehavior interface should become more evident.
2012/01/25
EnemyBehavior
I've been thinking about the EnemyBehavior interface and it's tricky. I'm trying to plan for several future enemy types, but not having those spec'd out makes it hard to design the interface. Ideally, I'd code up a few very different kinds of enemies and then figure out their common interface.
Most likely an EnemyBehavior base class will have these functions:
- move() // enemy changes position and facing direction
- act() // enemy uses a power if appropriate
Enemy position, animation frame, and power usage would be public. Most other behavioral variables could be private, allowing completely different "black-box" implementations for creatures. E.g. some creatures might follow specific patterns (think Mega Man boss) instead of taking random %-based actions like the current creatures do. Even the enemy's "state" could be done inside the behavior object, as it should be irrelevant to the rest of the game (as long as state and animations are sufficiently decoupled).
When finalized, I'd like there to be several base enemy behavior types. Imagine a Melee type, a Ranged type, a Flying/Swooping type, and several boss types. There will be many configuration options to build a variety of creatures within each type. To add a completely new type (e.g. to design a unique boss unlike any existing creatures) would require adding a new behavior implementation in C++. Though this should be extremely rare, only for ambitious projects that are already content with hacking around in the source to do new things. Great new fan-made behavior types could be contributed back to the main Flare code base.
This is the main feature we want for v0.16 (now that A* and enemy spawning are complete). If you have ideas for enemy behavior types, or interesting pointers for implementation, drop me a note!
2012/01/09
Code Diagram
I drew up a quick diagram of how Flare's code is structured. This mainly shows parent/child/sibling relationship of the main objects. Not all objects and relationships are shown, but this should give you a rough idea of how the game is structured.
Before we reach Beta there will be just a few more classes added. At that point I'll make an interactive diagram that explains how all the moving pieces work together. Here's a quick rundown:
Flare's timing is frame-based instead of ms based, capped to 30fps. This is fine for the low demands of old 2D sprites, and for a single-player game. The main game loop is a typical 2D game loop:
- wipe screen
- perform logic on all objects
- perform render on all objects
- wait until 1/30th of a second has passed.
Most objects have a logic() and render() routine that handles a single frame. Parent objects call the logic/render routines of their children.
2011/12/31
Two Years of Flare
If you check the archives you'll see that Flare v0.01 was released on Jan 1, 2010. That means I started work on Flare a bit over two years ago. Have a nostalgic peek at the v0.01 preview video.
Interesting historical notes about this project:
- The art was originally created for turn-based combat and tile-based movement.
- Started as a Java applet, but I switched to C++ early on.
- Originally named "OSARE" (open-source action roleplaying engine), renamed after a nice conversation with Richard Stallman.
Two years is a hell of a time for one person to work on a project. Even after greatly narrowing down the project scope (2D, no multiplayer, static maps, etc) it's still a frighteningly huge project. I wouldn't have made it (sanity intact) this far without help from many contributors. Thanks crew!
Version 0.16 info
v0.16 "Advanced Enemies" will be devoted to making enemies better all around. Contributor "nojan" has already added A* pathfinding, the first major new feature for enemy AI. Try the latest master branch, you'll find that enemies handle obstacles much better now.
Next task we'll want to tackle is allowing powers to spawn enemies. The actual code shouldn't be too bad; it's mostly a matter of adding new art. Most creatures will get a spawning animation. Perhaps I'll start with the Antlion, get it burrowing out from the ground. We'll add map events where antlions burst up all around the hero. We'll add Queen antlions that summon hatchlings as a ranged power. Once all that is acceptable, I'll work on spawn animations for the other creatures.
Finally, the major work in v0.16 will be separating my messy tangle of Enemy::logic code. Enemies will gain base types that explain their basic movement/behavior. The starting types will be melee, ranged, and flying. We'll probably also create one "boss" type to demonstrate how new one-off behaviors can be added by modders.
2012 Plans
Time permitting, here's how I'd like to see Flare shape up in 2012: a release every 3 months while we march towards Beta.
- v0.16 "Advanced Enemies" target March 31st, 2012.
- v0.17 "Menus Config" target June 30th, 2012.
- v0.18 "Power Enhancements" target Sept 30th, 2012.
- v0.19 "Alpha Polish" target Dec 31, 2012, marks the Beta feature freeze
2011/12/25
Flare v0.15.1 for Linux
I've tagged v0.15.1 especially for Linux users. It fixes a couple issues (build flags, random enemy groups) that weren't an issue on Win or OSX. Those of you working on packages: thanks for your work!
2011/12/23
Flare v0.15 "Translations and Mods"
Screenshots
Download
Release Notes
It's been a long road! Finally we're at the v0.15 release with a nice amount of new content. Enjoy!
- Now using TTF for fonts
- All game data can be overwritten/added via mods
- Translation support for the core engine and mods
- New Grassland tileset
- New questing areas: Frontier and Living Bones
- Redesigned creatures are tougher and more varied
Special thanks to the following contributors:
- Thane Brimhall "pennomi" - Living Bones mod and plenty of code
- Manuel A. Fernandez Montecelo - code and Debian/Ubuntu packaging
- Igorko: code and Win build features
- Hennr - Debian/Ubuntu packaging
- Remaxim - composer of Magical Theme
- Brandon Morris - steps foley, new level up sound
- Justin Nichol - character portraits
- Stefan Beller - Tiled flare export mod and automapping help
- Thorbjorn Lindeijer - Tiled tileset offset feature
- AMDmi3 - Build help
- acieroid - Display power cooldown timer and various mouse/menu fixes
And thanks to the following translators:
- (by) Belarussian by mikhailSaTuRn
- (de) German by Thomas 'CruzR' Glamsch
- (es) Spanish by Juan Pablo 'morris989' Tamayo
- (fi) Finnish by Timo Sievänen
- (fr) French by acieroid and Bonbadil
- (gl) Galacian by Gallaecio
- (ja) Japanese by Paul Wortmann
- (ru) Russian by Sbasalaev
- (sv) Swedish by Andreas Berheim Brudin
- (uk) Ukrainian by igorko
(I'm sure I'm missing someone -- drop me a note and I'll add you to the list! If you'd like to list your real name instead of your github username, let me know. Also, if you'd like me to add a link to your website here or in the credits, drop me a note. -Clint)
Community Links
2011/12/19
I'll be without consistent Internet access until Wednesday night, Dec 21. I'll catch up on Pull Requests etc. then. Thanks for understanding!
2011/12/16
Font Rendering BugFix
We were seeing drastic lag when trying to render Cyrillic text (maybe any multi-byte utf8?) in real-time. After digging around and making my algorithms as speedy as I could, it's still slow. At this point I'm assuming rendering text (vector to raster) is expensive (much more so than blitting the rastered font to screen).
So the solution is to hold onto that rasterized text instead of rendering it each frame. This may sound obvious, but it wasn't an issue when we were using a bitmap font. And isn't an issue with ASCII characters and the particular font I'm using. So maybe there's still a bug somewhere, but buffering the rendered font works.
We have lots of translations rolling in (keep them coming!) so I want to make sure those users get a great experience. This tiny bug fix has turned into refactoring many menus and widgets. I don't want to drop v0.15 right after I've introduced a ton of new code. So, v0.15 may be delayed up to a week (!). The new release target date is around Friday, Dec 23.
2011/12/13
v0.15 String Freeze - Time for Translations
If you are interested in translating Flare, now's the time! There will be no string changes between now and the v0.15 release (coming soon).
Take a look at Flare's github page, inside the mods folder. Each mod can contain its own translation. Here are the five main translation files:
- mods/fantasycore/languages/engine.pot - UI text. If you can only translate one file, I suggest putting a priority on this one. If players can read the basic UI they can at least play some of the game.
- mods/fantasycore/languages/data.pot - Core data text. Second highest priority translation file, though it's a big one (lots of item names, in particular!)
- mods/frontier/languages/data.pot - Proper names and a small amount of quest text for the overworld areas
- mods/averguard/languages/data.pot - Text for the Averguard Keep quest area
- mods/living_bones/languages/data.pot - Text for the Living Bones quest area
Flare uses a simplified subset of GNU gettext, where only simple msgid, msgstr pairs are used. Take a look at existing translation files to see how it works.
Thanks to everyone who is helping translate!
2011/12/12
Flare v0.15 RC 1
Playing on Windows? Try out the Release Candidate for Flare version v0.15.
Translations
Tomorrow (Dec 13th) there will be a String Freeze for version 0.15. If you are interested in translating the current content of Flare, please check in tomorrow for instructions.
What's Left
- Test the encampment quest, especially out of order
- Add new zombie death sound
- Add new level up sound
- Assign appropriate music to zones
- New NPC art for important town NPCs (at least one for Martigan)
- Update monster placement in Averguard Hold for level 3-5 range
- Bug Fixes
- Update the Credits page
- Clean up the Tiled folder
2011/12/08
Creature Updates
Every time we add a lot of new content, everything we've done as far as balance goes out the window. As time goes on, though, this balance will start to settle into the right groove.
Many of the current monsters are too easy or boring, so I'm doing a small revamp here. Mainly this is needed because the content will be more spread out: rather than cramming levels 1-6 into the same old dungeon+cave, we now want different areas to contain a small window of creatures.
When possible, we want creatures to be unique rather than just having more stats than the last creature. So here's what we're trying.
Goblins
Problem with goblins was they were just too easy. Not scary at all.
- Goblin (level 1) - just hops around and stabs, more hp than before
- Goblin Charger (level 2) - runs fast, special attack that causes bleeding
- Goblin Charger Elite (level 2) - rare and more powerful version
- Goblin Spearman (level 3) - throws spears, so more dangerous to more players
- Goblin Spearman Elite (level 3) - rare and more powerful version
- Goblin Shaman (level 4) - casts shield and shock
Zombies
Problem with zombies is they didn't feel like zombies, just walking cannon fodder. Now the low level zombies have a much more devastating bite attack, and the higher level zombies have intimidating abilities.
- Rotting Zombie (level 1) - more hp than before, small chance to bite for big damage
- Zombie (level 2) - more hp, much higher chance to bite (possible to one-shot a player)
- Zombie Brute (level 3) - high hp for its level, fast speed and very fast attack rate
- Icegrip Zombie (level 4) - melee attack causes the player to be immobilized for 5 seconds
- Bloodthirsty Zombie (level 5) - melee attack heals the zombie for 50% of dealt damage
Skeleton
The skeletons were decent, just need some number tweaking and maybe some power shifts (e.g. take crossbows away from regular skeletons, place more archers). Eventually the skeletal warrior should block and counterattack; that will make him more interesting in v0.16.
- Skeleton (level 2) - much more hp, no ranged attack
- Skeletal Archer (level 3) - generic ranged attack skeleton
- Skeletal Mage (level 4) - casts ice missile, causes slow
- Skeletal Warrior (level 5) - high defenses, heavy attacks, armor-piercing special
- Skeletal Sniper (level 6) - level-appropriate upgrade to Archer
- Skeletal Occultist (level 7) - level-appropriate upgrade to Mage
- Skeletal Knight (level 8) - level-appropriate upgrade to Warrior
Antlions
The spitting antlions were by far the best: their high damage and rate of fire made them always intimidating. We're going to make the other antlions much more interesting to bring the creature up to a mid-range enemy.
Also we'll decrease the average HP for their levels, but greatly increase their armor absorption. They will become very weak to fire, ice, or both.
- Antlion Hatchling (level 3) - mostly dangerous because they're found in swarms
- Antlion (level 4) - will get much higher health/damage
- Antlion Blinker (level 5) - will also spit a poison that stuns the player
- Antlion Slasher (level 6) - will get a higher rate of attack for poison damage
- Antlion Spitter (level 7) - ice and fire versions will have tweaked numbers to match other creatures, mostly satisfied with these guys
- Antlion Burster (level 8) - will self-detonate for insta-kill level damage
Minotaurs
Undecided, we're not using these guys much yet. They'll be a higher level creature, so we'll put them to more use once we get more content in.
The Numbers
It's a bit tricky to spell out the right formula for now. Ideally a creature +2 levels is hard and a creature -2 levels is easy. For now I'm basically doing playtesting to see what vaguely feels right. Once we get a few creatures ready we'll have updated formulas (e.g. a level X creature should have about Y health).
Maps Updates
Because of all the number shifts, we might have to go back and repopulate old maps with new level-range-appropriate creatures. Also the new maps should be constrained to specific levels. Creatures +/-2 levels are acceptable in small doses (e.g. mini-bosses might be +2 lvl).
- Frontier Plains - level 1 (mostly goblins, some patches of zombies)
- River Encampment - level 2 (goblins)
- Ydrakka Pass - level 3 (goblins early on) and level 6 (antlions in the second half)
- Goblin Warrens - level 3 (high-end goblins, and ukkonen)
- Averguard Atrium - level 3
- Averguard Prison - level 4 (showcase the new zombies)
- Averguard Academy - level 4 (skeletal mages and warriors, some zombies)
- Averguard Temple - level 3 (before locked area), level 5 (after lock)
- Averguard Complex - level 5 (lots of warriors)
We'll probably detach the antlion caves and move them to a new place. Those will be level 6.
The new Living Bones module will feature level 7 or 8 content.
2011/12/05
Grassland Tiles Complete
Phew, finally! I've posted the set on OpenGameArt.org. If you want to play with the set in Tiled check out the data files over at Flare github site. Time to make some maps!
The only art that might still be added to v0.15 is some NPC stuff. I'll add 2-3 NPCs to the starting village.
2011/12/01
v0.15 Timeline
The primary code for Flare v0.15 is done. Already translations and mods are incredibly useful. Mods let me test all kinds of weird stuff without breaking the build.
This weekend I plan to finish up the new raw art needed for v0.15. The grassland tile set will be ready to go. New walking sounds. New NPCs. Art deadline is Dec 4th.
One week of making new content from the assets. New maps, maybe a couple simple quests if there is time. We won't worry about the maps being "final" or part of some grand story. The new maps will intentionally have stubs: e.g. walk into a cave and it's small and empty. These will be invitations for modders to add their own adventures in those locations (overwrite the stub maps with a sprawling dungeon if you want!). New content deadline Dec 11th. There will be a Release Candidate and a string freeze at that point.
A week for testing and translating. v0.15 will be released Dec 18th, or as early as Dec 16th if everything's in place.
After v0.15 release the holidays will be upon us. Good time for brainstorming about the future and for simply enjoying the game. We'll pick up new coding in earnest on Jan 1st.
Peeking at the Future
Wondering where Flare is heading? Here are some goals for 2012.
v0.16 Advanced Enemies
Right now enemies have primitive steering and simple chance-based actions. We'll evolve creatures to have better pathfinding and more variety in movement. Behavior classes will be added that cover new enemy types. Flying creatures won't move like melee creatures; they will swoop and fly in wide arcs. Guardian creatures will patrol and favor blocking. Each creature will be assigned a base behavior, with a few configuration options to add variety.
We'll add support for creatures that drop predictable equipment (e.g. skeleton soldiers that sometimes or always drop short swords). Creature-specific drops could have an assigned drop rate.
We'll also add support for large creatures (require 2 or more squares to move) and try some unique boss behaviors.
Of course, v0.16 will feature lots of new enemy art!
v0.17 Improved Menus
We'll do an overhaul of the menu system. Part of it is refactoring parts into the Menu base class and moving menu configurations to engine/ config files. It should be possible to completely reskin and rearrange a menu without touching the source code. Menu screen size and positions will be configurable.
The Character menu will be built from a long list of display-able stats. The weapon/armor proficiency unlocking art will be removed.
The Inventory menu will support a configurable number of equipment slots, along with rules on which slots are visible on the player sprite.
The Log menu will get improvements from new WidgetTabs and WidgetScrollBox features.
The Powers menu will be completely redesigned. Each level the player will gain 1 talent point to spend, for unlocking or improving a Power. Powers will be arranged in talent trees. The fantasycore mod will supply trees for Warriors, Rangers, and Mages.
The Action Bar will come with several config options: more/less action slots, hide/show menu buttons, and changing the hotkey labels for buttons.
We'll introduce configuration menus and mod-manager menus.
v0.17 will come with cleaner menu art, new/better icons, and new fantasy paintings for the main menus.
v0.18 and beyond
As time gets closer we'll hammer out the theme for v0.18. Here are some features that will be in the pipeline towards Beta.
- Additions to the Powers system. Better handling of buffs/debuffs, passive abilities, powers that trigger in new ways (e.g. on-block, on-death)
- More event types, to support simple cutscene-like interactions
- Animated tiles and map backgrounds
- Configurable damage types (e.g. slashing, ice, toxic) instead of a fixed list
- Loot groups (e.g. Magic Loot, Armor Loot) to give creatures thematic drops or vendors limited wares
- Statistics tracking (deaths, kills, total gold, most gold carried, etc)
Beta, 1.0, and 2.0
Once the above features are in place, Flare (the engine) will go into a feature-freeze Beta. We'll limit work to bug fixes, code polish, error handling, etc. in preparation for a stable 1.0 release.
Major new development can continue on branches and forks. Solid, essential features could be introduced in 1.1 and beyond. The Flare 1.x series will remain committed to simple single-player action RPG gaming.
Flare 2.0, if necessary, would contain a critical mass of large rewrites. Multiplayer, or scripting languages, or OpenGL -- those would warrant moving to 2.0.
Games
All of that future talk is in terms of the Engine. When are the games coming?
Flare 1.0 contains what I personally need to make the games I like. I think my role in the Flare project will shift once Beta kicks in. I'll be the arbiter of decisions for the 1.x series: this will probably mean rejecting features rather than adding them. With less of my time going towards code, I plan to focus on art and game design.
During Beta I'll be focused on building a real game. The best way to test the engine is to put it to actual use. We'll make a short but extensible campaign using many of the current assets. If feasible, Flare 1.0 will come with a fully-playable game.
After Flare 1.0, I plan to spend most of my time building new assets that work with the engine. I want to release all new high-quality art. I might build small game vignettes to show off these assets as they are released. Giving tools to people who want to make Flare games.
2011/11/28
Grasslands
The grasslands are coming along. If you're playing from the latest github master, you can enable the "frontier" mod to run around the starter outpost village.
Here's what would be nice to round out the tile set. I have models for about half of these.
tent (done) boat (done) wood pile (done) anvil (done) fire pit (done) rocks (done) cave entrance (done) mines entrance (done) ruins entrance (done) well (existing) signpost (existing) lamp post (existing) stump and axe (existing) stump no axe (existing) more trees (existing)
Walking Sounds
I'm going to replace the walking sound effect (currently echoes on wood) with a more neutral effect. I'll need four similar-sounding effects, maybe something like running in belted leather boots. If you know where I can get such sounds (appropriately licensed) let me know. (UPDATE) I have Brandon Morris on the task.
2011/11/27
v0.15 coming soon
We've been busy on v0.15. I know there hasn't been a new blog post in a while, but simply take a peek at the Flare github network graph to see the action.
All of the technical features for v0.15 are ready. We're looking at adding a few new art assets and maps to round out the release.
2011/11/04
Translations
First, I want to thank everyone sending in translations. You guys are awesome, and it makes testing our newest code that much easier.
However, fair warning: all of this data is subject to change. The current game data amounts to a short tech demo, and it's very possible that all of it will be discarded before the first game is complete.
It's certainly nice if people in many countries can experience the tech demo in their native language. But don't worry about a huge concentrated effort to translate the current data into everything. We can have a strong localization effort further down the road.
It might look to the layman that the game is near feature-complete, but that still means the game itself is just starting. We're far enough into the game design process to see which parts of the gameplay don't work. There will be some redesigning, and thus translations will become obsolete. So let's talk about that.
Gameplay Thoughts
A couple weeks ago I picked up Dark Souls. It's the first console game I've played since... hm, since Ocarina of Time or Symphony of the Night. I'm absolutely loving it, especially as a great example of hard melee combat.
It's making me rethink some game design choices. Although the engine itself should support several options, a great game could use some tweaks. Here are some ideas I'm tossing around.
Defense
I like the low number scale in the game currently -- it's a bit easier to visualize. But there's hardly room for varied armor when light armor is 1 absorb and heavy armor is 2 absorb. This is more affected by shields which have passive absorb. So I'm toying with changing the armor and shield system.
What if shields didn't have passive absorb, but instead required using active Block to have an effect? E.g. a Wood Buckler could have "Absorb 5 while blocking". Heavy enemy attacks could still power through such a shield, but weaker attacks would be fully absorbed.
By moving shield absorption to active Blocking, it's okay to allow higher passive armor ratings. And allow more armor. I'd want more armor styles that span the Defense rating from 1-5. I don't like how the Defense skill currently alternates between unlocking armor and shields. Each level should give both. The baseline armors/shields could look like this:
- Leather (Absorb 1, requires Def 2)
- Maille (Absorb 2, requires Def 3)
- Plate (Absorb 3, requires Def 4)
- Dragonscale (Absorb 4, requires Def 5)
- Buckler (Block 3, requires Def 2)
- Small Shield (Block 6, requires Def 3)
- Large Shield (Block 9, requires Def 4)
- Tower Shield (block 12, requires Def 5)
Enchanted or special gear could have higher bonuses.
Character Menu
Because of the above, and similar changes I have in mind, I want to remove the item proficiency visuals from the Character menu. This will add more flexibility in gear design. Example: we can have a Warhammer that requires Physical 3, and we don't have to think of a name for the class of weapons that requires Physical 3.
Resistance
Right now in the engine, elemental resistance (damage reduced by a percentage) is treated differently than physical resistance (damage reduced by a fixed number). One could argue to combine these systems to all be like physical damage is currently. Then, each attack could have a damage type (physical, or a specific element) and an entity could have damage reduction per type. This could somewhat simplify the code, as all damage is handled the same way.
What are the pros/cons for the player? I'm not sure. One thing is, percent-based gear scales with enemy damage, so one particular piece of gear is useful for longer. This means less inventory management and gear feeling more special, but it could also mean few pieces of gear trivializing large parts of a game.
It's possible for every armor/shield to list damage absorption for each type. It leads to having a ton of numbers on each piece of loot, and that's just a bit overwhelming.
Equipment Slots
So, it's relatively easy to support these visual equipment slots: chest, legs, arms, head, both hands. Anything more complex would be hard to do with layered sprites.
But, are gloves and boots actually exciting? I suppose it is neat to mix and match equipment for visual looks (how much does this matter in an isometric sprite-based game?). Min/maxing gloves or boots stats seems a bit tedious to me. If gloves/boots always have unique effects and no armor value, I'm more excited. (e.g. acidwalk boots)
There is satisfaction with getting a whole matching set of armor, but some players end up sacrificing style to mix up optimal stats. Maybe it's okay for armor to all come in one piece, so that the player is stylish and only has to make one stat choice. Maybe having single-slot armor is less "hardcore", I don't know.
Stats
I'm considering removing health and mana regen as regular stats in the game (I'd leave code support for them though). Health regen makes some games cheap (I'm not intimidated by the next fight if I can always rest up to full) and tedious (I'm spending more time waiting for health to come back than actually fighting). When a game doesn't have regenerating health it encourages players to get better at combat to clear new areas.
One problem I have with health and health regen being separate stats: it's not obvious the best way to improve your character. Why have two stats that essentially do the same thing?
If there's no health regen, then healing spells and potions become way more important. But if there's no practical limit on those healing items/spells, someone without them (e.g. melee builds?) have a large disadvantage.
What about mana regen? It would hurt to be a caster with limited mana. Instead of a "mana regen" stat, maybe mana should have a standard regen rate that scales with max mana (e.g. 10 seconds to regen 100% mana). Weapons with mana drain could be very helpful.
Mundane vs. Magical
This is a personal preference: a game world where magic is too prevalent is boring. I'd rather have more interesting mundane items, and any magical item to be rare and wondrous.
I really like the weapon/armor upgrade system in Dark Souls. I had a similar, less refined idea going when I originally created those gemstone icons. Maybe I'll look into an Enchanting system for Flare, where you combine one equipment and one rare consumable to make upgraded equipment.
Selling to Vendors vs. Crafting
I don't know if this is necessary. It doesn't make sense in most game worlds, and is just there because of tradition at this point.
If I had a crafting system, I'd rather have items useful for their base components rather than being vendor trash. Longswords and bows could be scrapped into steel ingots and wood rods, which could then be used to build other base items.
Melee Attack Animations
When I create the planned upgraded art for Flare, I want to put in different melee attack animations. I haven't decided on the set I need, but imagine if there was an overhead smash, an uppercut swing, left and right hooks, and lunge/jab. I could make it so that these animations are used randomly so that combat simply looks interesting. I could make it so that each weapon uses one animation when standing still and a different animation if you attacked while moving (perhaps with different damage for each). I could have each weapon type affect the speed of each animation. I could have certain powers use specific animations.
Making Melee Fun
Combat can be more interactive if creatures have "tells" before they use an attack; e.g. a big wind-up before a huge swing. That would give time for the player to dodge or block. It would require more thought put into each creature but it could be well worth it. Right now there's really no time to react to what a creature does if you're in melee range; at best you can hold block while waiting for an attack, then counter-attack (which isn't too bad, really).
I've read interesting articles on how to make melee combat feel "crunchy". Instead of having a melee swing always follow through at the same speed, it feels better when the animation pauses slightly on the frame where the hit lands. It gives the attacks weight, rather than just feeling like all combat is simply swinging at ghosts.
Blocking should have some small effect on the attacker, maybe a higher-than-usual cooldown time before they may attack again. This could mimic "staggering" an enemy with a successful block and give time for the player to land a counter swing.
2011/10/27
In Development for v0.15
Translations
Thane is working on translation support. After some deliberation, we decided to use a very simplified set of gettext rules and .po files. This is mainly because I'm always reluctant to add large dependencies to the project (especially where multi-platform support is a must). So for now, our .po files will support basic translations (simple msgid, msgstr pairs) but not more advanced features (stuff like gender/plural support). Basic translations might be sufficient for us: action RPGs are not text-heavy interfaces, and dialog is translated in whole paragraphs.
It should be fairly easy for us to expand to using full .po features and something like tinygettext in the future (recommended by the SuperTuxCart crew).
Make Install
New contributor Manuel has added a "make install" option for those building from source, and has cleaned up some executable bits on various data files. He's more familiar with linux distribution concerns than I am, so his expertise is very welcome!
Tiled tileset offsets
I'm working with Bjorn over at Tiled to commission a feature for Tiled 0.8. In Flare tilesets, each tile can have an arbitrary offset from the grid space it's on. In practice, large tile subsets share the same offsets (e.g. all the "cave water" tiles have to be drawn below the regular grid). This new Tiled feature will allow setting a display offset to one entire tileset. At least for Flare's purposes, it will allow us to do all the mapbuilding currently supported.
Once the feature is ready, I'll get to build new grassland maps! With a simple overworld set we can connect multiple dungeons, add a village, more quest-givers, etc. I'm hoping to put new content in for Flare v0.15.
Data Mods
This week I'm working on data mod support. It will be easy to create mods that replace existing data files or add new data files. What this means is that adding new creatures, items, powers, quests, maps, etc. will be a breeze. Along with translations, this is one major feature for v0.15.
We'll be working on a few demo mods to show what's possible. In the not-too-distant future we'll be putting up several tutorials on how to create content for Flare. Exciting times!
v0.15 release date?
I don't have a planned released date yet for v0.15, but I'm looking at sometime mid to late November. Once we get the above features done, and we're sure everything is clean for downstream packaging, we'll turn the binaries loose.
2011/10/24
Flare in Debian
Flare is now a package in Debian (unstable). Wow! Special thanks to Manuel A. Fernandez Montecelo and Jan-Hendrik (hennr) Peters for the legwork.
Putting FIRE in Flare!
I've been on a bit of a code hiatus while messing with new art. But it's time to get back into the 1s and 0s!
I plan on tackling some code towards v0.15 this week. I have one task that requires knowledge of GNU gettext, and another that requires knowledge of Qt. If you are interested in contributing to the project, please contact me!
2011/10/22
Relearning Blender
I'm messing around with the latest Blender (2.6) after sticking with 2.49 for as long as I could. It will take a while before I feel proficient with the new interface.
Most of my previous work carries over. Some of my old baked normals are inverted but that's not a big deal. I haven't tested particles yet but that art (spells effects) is very old now and I'd like to do it better anyway.
Progress
Life events have claimed most of my free time and Flare has been pretty stagnant for a couple months. Time to start turning down other side projects and get back into focus.
Here are the major tasks that need attention.
- Replace MessageEngine with GNU gettext
- Add mod folders and ordered asset loading
- [Tiled] Allow (x,y) display offsets per tile set
Nothing flashing nor fun to work on. I'm sure that's a big part of why I'm in a rut. So what might be fun instead?
Fun Stuff
I have a very primitive action RPG done, but there are some things that deserve improvement. Here are some long-term plans. Some of these might be worth fixing before the first game.
- The inventory menu deserves a better layout. The engine ought to allow creators to define new equipment slots.
- Allow new equipment slots to display as a layer on the hero (e.g. for boots, gloves, helmet). Once this gets more complex it'll probably require having an equipment layer z-order per direction, if not per piece of equipment.
- I don't like the current Power unlocking system. It just isn't very fun: some levels you unlock useless powers, other levels you don't get any new powers. I should throw this out and implement a more traditional system to unlock powers (e.g. one unlock per level, or unlocked via magic books)
- Melee combat feels boring. The animation needs improvement, and probably there should be multiple melee swing motions. The engine should allow multiple variations for each animation, not just melee.
- I want some creatures to move very differently. I ought to implement e.g. a flying creature, then figure out how to refactor creature behavior.
- The current implementation of armor isn't very satisfying. I should probably have the Defense stat unlock armor and shields at each rank. Armors can be leather, chain, plate mail, full plate; shields can be buckler, small shield, large shield, great shield.
- I think the hard connection between base stats (phys, mag, off, def) and specific items should be broken. Remove those item icons from the Character menu, they're misleading at best.
- It was a nice idea to make Power trees based on the combination of base stats (e.g. Physical Offense), but it's awkward in practice. The idea could easily be lost in translation. Instead I'd want to make arbitrary power trees by "build". E.g. a Warrior tree, a Ranger tree, and a Mage tree. Once the trees are no longer tied to the core powers, it should be easy to add random trees with new powers.
- This is completely personal preference, but I'd like to have more non-magical items and far fewer magical items. I want magical items to be special and feel unique.
- The better I get with isometric art, the more I feel that I'm terrible at it. I think it's time to step up my techniques and push for higher quality.
2011/09/17
GNU gettext
Rather than roll my own translation solution, I think it makes the most sense to simply use GNU gettext. This would obsolete our recent work on the MessageEngine, which essentially is a similar solution.
If anyone has advice on using gettext with games, please pass it along. I believe several successful projects (e.g. Wesnoth) already use it to great effect.
Looks like gettext can just as easily handle data files as strings in source codes. See this wesnoth campaign file example.
2011/09/12
Grassland Preview
Let's take a look at the almost-complete Grassland tile set (click to enlarge).
I'll add more trees, rocks, and various set pieces as needed.
New Scale Hero Preview
It's likely that this new scale will be used in game #2 for the Flare engine. But it's a good outlet now for creativity. Here's actual-scale art for the base human male and rough leather armor.
2011/09/06
The Game Plan
Flare is only going to be relevant if I release several games: improve the engine each time until it's proven and practical.
I'm going to save the new game scale for game #2. For now I'm going to take what we already have and think about the kind of small-scope game that can be made. Maybe grasslands, caves, dungeons, and that's enough for one small episode.
Story Idea
Here's a tiny story I could tell using most of the current art.
Part 1: Mines
Trade caravan drops off the player and supplies to a mining outpost. Player's just looking for work. Some of the other workers are sick so you're a welcome addition. Take a pick, head down into the mines. The hero follows a suspicious tunnel and ends up in a creature-infested cave system. Has to fight his way back to town. One of the miners died, became a zombie, and had to be put down. This is trouble.
Part 2: Journey
The village will be wiped out without help. There is a fort not far from here that houses an old paladin order. Maybe they can send swordsmen or magical help. Travel overland to the fort, only to find the area crawling with creatures. Help fight the undead. Help find ingredients for a possible cure.
Part 3: Passage
The villagers must come to the fort for safety, but overland is too dangerous. The paladins know of an abandoned tunnel that connects the fort to a spot near the village. Clear it and get to the villagers, and guide them to the relative safety of the fort.
Part 4: Siege
Back at the fort, the villagers get help. The potions seem to make them feel better. Meanwhile there is a heavy siege under way against the fort, an army of undead. Fight against the hordes at the gates. Find the twisted villainous leader and destroy him.
Part 5: Guardian
When you slay the villain, his beastly corpse becomes the body of a frail old druid. The paladins recognize him, he was a great elemental guardian. Something or someone corrupted him, allowing evil to overwhelm the scales of balance. The player becomes the new Guardian. Some of the previously-sick villagers and paladins, slain in combat, are becoming undead. The cure has failed, only treating the symptoms. When you all finally die, you will become undead too. As the new guardian, you eventually seal the Fort with yourself and the infected survivors inside.
Assets
Most of this short story can be told with the existing assets. Let me list out how it would work.
Part 1 would use the grasslands and cave tileset to represent the mining village area and the mines. The caves could contain goblins, antlions, and a couple zombies.
Part 2 would feature mostly grassland areas. Closer to the village there can be more goblins/antlions, and closer to the fort there would be mainly undead. There would need to be a new set piece for the Averguard Keep entrance; it doesn't need to be a whole tile set (it can be e.g. a mostly pre-rendered set). The interior of the keep would be the dungeon tile set.
Part 3's passage would be half dungeon, half caves. The dungeon half of the passage could be minotaurs, and the cave half could be tougher antlions.
Part 4 would again happen at the gates set piece, probably an instance map that now contains tougher undead and siege tiles. The boss encounter could be just inside the fort, perhaps. The boss itself would require a new creature model.
Part 5 is mostly the denouement. Will require a handful of new graphics but nothing like a whole tile set or creature.
2011/08/28
Sprite Scale
I've been experimenting with larger scale sprites. Here is the base human male at the current scale (each tile is 1.5m) and the proposed new scale (each tile is 1m).
I've applied a high quality normal map to the larger version, to show the kind of detail possible with this new scale.
Obviously the larger scale looks great. I'm tempted to start using it immediately. But there are concerns.
Pros
- Better scale images for this genre
- Higher detail makes equipment choices more visual and interesting
- 1m scale will have a higher universal appeal
- I'd like to redo some art anyway (e.g. dungeons), I can do much better now
Cons
- Most of the old art will be unusable and incompatible
- Any new art will require significantly more time to create
- If I switch now, there will be delays in delivering an actual game
I will definitely move to this new scale at some point, it's just a matter of when.
2011/08/25
Cabin
I need a very small camp/village for the grassland area. So here's a quick & dirty cabin.
2011/08/18
Flare mentioned in OpenGameArt talk
Here's Bart Kelsey's talk at Libre Graphics Meeting 2011 about OpenGameArt.
Flare gets a quick mention around the 5 minute mark.
2011/08/15
Grasslands Tileset List
The grasslands is one of those tile sets where 256 tiles aren't anywhere near enough to fit all the tiles that could belong here. So I'm going to focus on the most-usable tiles and leave some room for customization. Listed by 16-tile groups.
- 0: reserved for collision
- 1: 16 grass tiles
- 2: 16 water tiles
- 3: 16 path tiles
- 4: 16 cliff tiles
- 5: 8 cliff tiles, 8 bank tiles
- 6: 16 bank tiles
- 7: 16 bridge tiles
- 8: 8 containers, 8 village objects
- 9: 16 weeds and shrubs
- a: 16 rocks and formations
- b: 16 trees
- c: 16 top-of-cliff grass tiles
- d: 8 wood fence
- e: buildings
- f: exits
2011/08/09
Slow Times!
Flare has taken the back burner while real life stuff has been out of control. It happens.
This week I plan to pick back up on this grassland tile set. My next big concern is making sure the tile shapes are usable. I plan on having high cliffs and low water; but, Flare's maps are currently flat. So all the split levels will be faked, essentially. Tiles should be easy to place and work with the existing grid.
What I plan to do is make a proof-of-concept set of tiles and then see how they play out in Tiled. If the basic shapes work, it'll be easier to move on to textures. I'd rather do that than put a lot of work into the textures, only to find out the shapes don't fit together.
[--Update--]
I was really hoping to be able to fake split-level areas: terraced elevations that look like different heights but are actually flat and faked with forced perspective. But it looks like it's too tricky to deal with. What I'd gain by forcing this, I'd lose by making the tile set much harder to create and work with.
Actually the tile set art will still be friendly to such an engine, but it just isn't quite working here. I'd need to add n layer support and drawing tiles in vertical order first. It just isn't necessary at this point, but would be a nice thing to consider for a future version of Flare.
So I'll have to do basically the same thing I did in the Cave tile set. In the Tiled version of the tileset image I had to flatten the water areas to work in Tiled.
[--Update--]
Raw cliff test. Not too bad, maybe the rock layers are a bit too defined. I can make some changes so that they smooth more in some places.
2011/08/01
Experimenting with Grasslands
I made some grass and water tiles before, but I don't care for the way they turned out. Using particles for grass seems gives me a very noisy grass, and it's difficult to deal with the translucency on the edges. I'm going to try to make new grass that relies more on good textures.
I want to add small cliffs. Some will just run along a grassy area to give the illusion of a split-level floor. Some will lead down to water. I'm trying to draw inspiration from the Cliffs of Moher -- look at the texture on those vertical cliff faces. I'd like to accomplish something like that if possible.
Because of the way tiles work in Flare, the cliffs won't be extremely tall. This might lead to a terraced look in some areas. Maybe that's a good, interesting thing. We'll see how it turns out.
I'll be trying different techniques. I want the result to be relatively low-poly and perhaps useful in 3D games. I might need to use some combination of sculpting, 3D outlining, and good textures to get it working correctly. I also need them to tile seamlessly. Going to be tricky, but I think I have the work flow figured out. It will be similar to what I did with the cave walls, but with more manual modeling instead of using random Fractal subdivision.
[--Update--]
Trying out some textures and basic shapes for the cliffs. This is only one tile repeated. Just experimenting to see if this gets me anywhere near where I'm trying to go. I've zoomed these in at 200% so the detail is easier to see.

I dunno. Maybe. The angle of the light kind of washes away the details on the right side. It could look good given more variety.
[--Update--]
I've found an easier way to get this variety on the cliffs, with a better-looking result.

Before I was trying to subdivide and extrude chunks of rock. This time, I vertically subdivided the section into 10 parts and shifted the curves of each horizontal rock layer. It's a lot faster than the previous method. I ended up with more faces but it's still not a lot (this example is 117 quads/234 tris per section).
For kicks I might tone down the poly count to 64 quads, to be extra 3D-game friendly.
2011/07/27
SDL_ttf dependency added
I don't take adding dependencies lightly. In my mind, every new dependency is another barrier to building, another possible limitation on various platforms.
However, SDL_ttf is likely supported to the same extent that SDL_image and SDL_mixer are. And, this lets us do Unicode language support. If Flare is to be taken seriously and used by gamers all over the world, it needs to at least handle translations.
2011/07/21
Follow-up Thought to Bug Tale #1
One reason this bug was hard to see was the delayed trigger -- something happens in one part of the code (potion use restores health), but the immediate effect actually doesn't take place until way later in the code (remove potion from inventory).
Ideally, don't do this! Have everything resolve together if possible. Why isn't it possible? Does the code need to be refactored?
In this particular situation, I think it's a matter of avoiding circular dependencies in C++ files. But there's probably a solution that gets around that and performs all the necessary steps together.
2011/07/20
Bug Tale #1
Today I merged many significant patches added by various contributors. It was time to get back into the swing of things and try out the new code. I was especially excited to try pennomi's new "monster pack" code, where monsters in combat would notify nearby monsters to enter combat. Finally, large groups of monsters couldn't always be picked off one by one.
I'm merrily testing with a new character. I get through the alpha quest line, enjoy a romp in the caves, and make my way to the Lost Mines. I pull a large group and have to use a health potion to stay up. But the potion doesn't go away. I clear out the enemies and try drinking again. I'm getting the full effect of the potion, but the potion is still in my inventory. I check my inventory and try using the potion from there -- and finally it's gone.
A bug!
But no code relating to potion use has changed, not in a long while. So what's happening?
I restart the game. I test, and potions work fine. But I'm full health; let's see what happens if I take damage. I find the nearest friendly Skeletal Warrior That Shoots Icicle Spells and take damage. Viola, my potion is stuck again!
I set debuggers to look at power use, for when I use my potion. I play again and the breakpoint is hitting every frame. Oh right, once the skeleton sees me he's dropping his warning beacon; his beacon uses the same Power system as my potions. I tweak my breakpoints and test more.
Maybe it only happens when my health isn't full? No, that's not true. I take damage from the skeleton, drink my health back to full, and the potions are still there. Maybe it's being in combat? I kill the skeleton, and my potions still persist. I test so much that I find this out: if I stand near the map entrance my potions work fine; if I go further in towards the skeleton they stop working. I can move back and forth a few tiles and watch my potions break and fix! Surely this can't be related to map position. I trace all sorts of variables but nothing turns up.
Time for a break.
...
A minute into my break and the answer is obvious. The potions aren't working when the skeleton sees me.
When the skeleton can see me, he's creating a warning beacon every frame. When I move towards the exit he can't see me anymore, and he's not doing his warnings anymore.
When I drink a potion, there's a "used_item" field that is set in the PowerManager. Another part of the code, later in the frame, looks for used items and removes them from the player's inventory. Well, the enemy beacon spell doesn't require an item, so it was resetting used_items to "no item used". In a single frame the hero's actions are processed first, then enemy actions, then afterwards is the cleanup code that checks for used items.
Previously, it was very rare for a hero and an enemy to use a power on the exact same frame. Even when it did happen, the consequences almost never mattered. With this new code, though, enemies are dropping beacons constantly. So this bug's been in my code for months and only manifested now: enemy powers were resetting the hero's powers "used_item" field. Thus making my potions endless if I was in sight of an enemy.
These are the weird bugs that can haunt a project for months. And apparently, keep programmers up until 3am. Feels good to solve 'em though.
2011/07/18
Catching up on GitHub
I took a few days away from GitHub and Flare to write part of a book chapter, give a talk, and handle other strange affairs. I plan on doing some catching up tonight.
Visual Story
I'm working with Flare concept artist Justin Nichol on hammering out the visual story of Flare's first game. We took the map progression I posted about recently and wove it into a basic story. Justin is working on various environmental concept pieces which will guide the building of new tile sets.
I plan to post more about the story soon.
2011/07/13
Flare v0.14.1 Bugfix Release
I've tagged v0.14.1 over at the Flare GitHub site. It patches a significant memory leak in the v0.14 release.
If you maintain Flare in a distro repo, I suggest updating to this version.
I will update the Windows and OSX binaries soon.
2011/07/09
Free Gamer and HD Video
qubodup over at Free Gamer posted a update about Flare v0.14. He also recorded this 720p HD video of the game running in Linux.
Thanks qubodup!
2011/07/07
Flare v0.14 "Main Menus" Released
This release is all about wrapping the core gameplay in main menus, pushing Flare closer to feature-completeness. Now players have four game slots to experiment with different builds. Also, choose your gender and a portrait for your hero or heroine!
Screenshots
Changelog
Title Screen added Load Game Screen added with four game slots New Game Screen added with choosable portrait and hero name Title Music by Brandon Morris Customizeable portraits with matching sprite heads for heroes Player portrait displayed during NPC conversations Female heroine option added Six player portraits added by Justin Nichol Save and Exit to Main Menu confirmation added by kitano GameState base class by kitano Entity base class by kitano Variable MP cost for spells added by kitano Animation class added by kitano WidgetButton generalized by kitano Arrow and X to show conversation progress added by kitano Input text widget added by kitano Clickable map events added by Thane "pennomi" Brimhall Enemy group random spawning added by Thane "pennomi" Brimhall Freeze and Multishot code expanded by Thane "pennomi" Brimhall Damage Multiplier for powers added by Thane "pennomi" Brimhall Life Steal and Mana Steal for powers added by Thane "pennomi" Brimhall Power Cooldowns added by Thane "pennomi" Brimhall and wokste Item bonus to increase base stats added by Alexander Olkhovskiy Enabled multiple bonuses on items (up to 8) Joystick support added by Artur "Zear" Rojek FileParser now used by all data files added by Bonbadil Added close buttons to several menus Attempts to use standard *nix directories if available (XDG or $HOME) Sound effects volume added to settings.txt Double Buffering option added to settings.txt Hardware Surfaces option added to settings.txt Bug Fix: Teleport Scrolls can no longer be used without a target Bug Fix: Windows mkdir fixed by Paul-Wortmann
Download (v0.14)
2011/07/06
Map Progression
I've been thinking about story progression in terms of maps and tile sets.
There are specific tile sets I want to build. Some just because they sound fun, some because I want to cover various elemental themes (sorta wu xing).
Let's say I shoot for 12 tile sets in this game. Alternating between "overworld" and "underworld" areas (almost) where the overworld areas feature a town and the underworld areas feature quest targets and bosses.
- Grasslands (feat. a pioneer village)
- Dark Forests (wood boss)
- Badlands/Ruins (feat. a gothic/zombie village)
- Dungeons (metal boss)
- Mountain Passages (feat. a mountain village)
- Caves (earth boss)
- Tundra (feat. a frozen fort)
- Ice Palace (water boss)
- Desert (feat. a trade post)
- Fire Temple (fire boss)
- Sky Bridge (feat. a handful of powerful NPC allies)
- Villain Fortress (end boss)
Assuming I aim to have about an hour of main-quest content in each tile set, that's a decent 12-hour story with plenty of changes of scenery. There can be side quests and optional maps too. Numbers are minutes:
- 000-060 Grassland
- 060-120 Forest
- 120-180 Ruins
- 180-240 Dungeon
- 240-300 Mountain
- 300-360 Caves
- 360-420 Tundra
- 420-480 Ice Palace
- 480-540 Desert
- 540-600 Fire Temple
- 600-660 Sky Bridge
- 660-720 Villain Fortress
Also, assuming early levels go by faster than later levels. Approximately:
- Level 1 for 10 mins (000-010)
- Level 2 for 20 mins (010-030)
- Level 3 for 30 mins (030-060)
- Level 4 for 40 mins (060-100)
- Level 5 for 50 mins (100-150)
- Level 6 for 60 mins (150-210)
- Level 7 for 70 mins (210-280)
- Level 8 for 80 mins (280-360)
- Level 9 for 90 mins (360-450)
- Level 10 for 100 mins (450-550)
- Level 11 for 110 mins (550-660)
- Level 12 for 120 mins (660-780)
Conveniently this means the player would be level 12 when on the 12th map. This fits the equipment curve as well (where max level items are about level 14)
Applying time spans to maps, here are the expected creature and treasure levels for each map.
- Grasslands level 1-3
- Forests level 4-5
- Ruins level 5-6
- Dungeon level 6-7
- Mountain level 7-8
- Caves level 8
- Tundra level 9
- Ice Palace level 9-10
- Desert level 10
- Fire Temple level 10-11
- Sky Bridge level 11
- Villain Fortress level 12
The actual XP amount per level will be adjusted once content is in place. Here's a rough estimate. Currently I'm using XP per kill is the enemy's level. Estimate about 10 kills per minute (assume some downtime dealing with loot etc, and also assume large quest reward xp).
| Level | Minutes | XP to Next | Total XP |
|---|---|---|---|
| 1 | 10 | 100 | 100 |
| 2 | 20 | 400 | 500 |
| 3 | 30 | 900 | 1400 |
| 4 | 40 | 1600 | 3000 |
| 5 | 50 | 2500 | 5500 |
| 6 | 60 | 3600 | 9100 |
| 7 | 70 | 4900 | 14000 |
| 8 | 80 | 6400 | 20400 |
| 9 | 90 | 8100 | 28500 |
| 10 | 100 | 10000 | 38500 |
| 11 | 110 | 12100 | 50600 |
| 12 | 120 | 14400 | 65000 |
| 13 | 130 | 16900 | 81900 |
| 14 | 140 | 19600 | 101500 |
| 15 | 150 | 22500 | 124000 |
| 16 | 160 | 25600 | 149600 |
| 17 | - | - | - |
2011/07/05
Windows Ready
Here is a Windows release candidate for v0.14. We have a few more minor data changes but the code is ready for testing.
And here's the OSX release candidate for v0.14
v0.14 Testing
The current code is the v0.14 candidate. All milestones are now complete.
Over the next couple days we'll do some testing (especially on various operating systems) to ensure the latest changes work as expected. I'll put out testing builds for Win and OSX later today.
Meanwhile we'll do a few data tweaks just before release:
- Make a final "X" graphic for the conversations menu
- Convert existing maps to use click hotspots and enemy groups
- Remove loot crates between the two cave maps
- Fix collision on the skeletal mage trap in the caves level 1
Windows Woes
I'm working up some fixes for Windows.
- mkdir() calls are different on Windows, setting up some preprocessor stuff to handle this
- ItemDatabase.h blows up my MinGW c++ compiler! The item array with the new multiple bonuses is too large. Changing that array to sized at runtime.
2011/06/28
Isometric Hero and Heroine
I've uploaded all the hero/heroine sprite art to OpenGameArt under CC-BY-SA 3.0.
Flare v0.16 focus
Flare v0.16 will be about Improved Enemies. We need enemies to be smarter, have better pathfinding, attack in packs, etc. Smarter enemies should make combat more interesting. Once these improved enemies are ready, we'll take a new look at the way heroes are built and balanced.
2011/06/25
Female Sprites added
Very exciting -- one of the huge art components needed for v0.14 is ready. All the female sprites have been added!
There are only a handful of art pieces left for v0.14:
- Close menu button
- Close dialog/talker button
- Finished portraits (coming soon thanks to Justin!)
- Female combat vocals (hurt, die)
When those are in place I'll put out a release candidate Windows binary. We'll still be working on one more code piece (standard linux directories support).
2011/06/21
Note To Self (Art Scale)
Herein I justify the current scale of Flare's art. I'm writing this because I get tempted to scale the art up often. Here are reasons why it's not a great idea, and that I should continue on my current path.
Concern: Tiles are 1.5m on a side. That's weird. Maybe it should be 1m instead.
- 1.5m is pretty close to 5 feet, the same scale used in U.S. D&D battle grids. Perhaps 1m or 2m scaled tile sets could be used without it being too obvious.
- 1.5m gives a pretty good combat range on many animations. For tile/turn based games (e.g. tactics or roguelikes) this scale gives a pretty good visual combat (weapons are in range to connect). 1m squares means human combatants are close enough to touch each other and weapons extend too far. 2m squares means short weapons sometimes don't reach.
- 1.5m on a side tiles means a 32x32px square directly facing the camera is almost exactly 1 sq. meter. This is perhaps more interesting for judging scale!
- At 1.5m tiles, an adult human with long weapons can all fit in a 128x128 sprite. If the switch is made to 1m tiles, the sprites could not each fit in 128x128.
- Additionally at this scale, larger non-boss creatures can nicely fit into 128x128 (see the minotaur). Need a boss creature? Go ahead, use 256x256!
Concern: high-res graphics could require nicer-looking, more detailed 3D models
- Nothing stopping me from doing more detailed models now. Some details would show up even at the current scale (more than you'd think).
- The current scale is a good trade-off between ease of creating assets and detailed required.
Concern: other games use larger graphics!
- This scale is almost identical to Diablo, Baldur's Gate, and Fallout
- These games had great-looking art at this scale.
But... but...
- Flare's engine should allow a high-res pack, with all the assets rendered at double size.
2011/06/20
Test Build for Windows
Here is a Flare test build for Windows. Many of the new v0.14 features are ready (mostly the main menu systems).
What's left before the v0.14 release:
- Fix some placeholder art
- Implement OS-specific folder usage
- Add female hero options
- Add final hero portraits
- Add main menu music
You'll notice that the New Character menu is a bit simpler than the sketch I planned below. As I was implementing it, it just seemed keeping it simple was the best course of action.
Version 0.14
Maybe July 1st? Sounds like a good goal. The only feature I'm not confident about is switching to OS specific data and save folders, only because I have zero practical experience there. I'm hoping that feature makes it in, but I wouldn't be upset if that slips until v0.15 (when many folder changes are happening anyway). I know this is a highly-requested feature, I just want to make sure it's done properly before shipping it out.
Polish
Flare v0.14 is getting quite a bit of much-needed polish with the new main screens. I hope this will be evident in their current form. Once those menus get the background music and images, Flare will actually start to feel like a game.
The GitHub project has a long list of open issues, mostly looking at what might be added in the short term. Some are additional polish, some are slight game improvements, and some are just fun features. If you'd like to help with any of that, drop me a message. Or, fork away!
Future thoughts: v0.15
It looks like we will probably handle translations as a game-data mod. Mods will be able to override any file in the core data set or add new files. This isn't a very elegant solution but it should be powerful enough for everything from simple translations to total genre conversions.
Because translations are mods, we'll be putting the basic mod rules in place for v0.15. This means v0.15 will spend a lot of time in development. But I think that'll be okay -- after all, without a ton of game content in existence there isn't a pressing need for translations yet.
In your opinion, what should my personal priority be for v0.15? I have several programmers helping with cleaning up the code, so I'm confident about the code side of the game for the foreseeable future. But currently I'm the only artist on board for tile sets and sprites. Maybe I should do high-level code management on v0.15 via github and focus my time on creating art? Or should I get through a few more releases before I switch to an art focus?
2011/06/12
Flare Progress
Flare is coming along nicely. Several of you are helping with much-needed cleanup and refactoring of the code. New neat features are being added (e.g. better multi-missile options).
I've finally rendered the male armor layers without heads. I've added three male head options (the current head, a bald head, and a hooded head). Currently these "look" options can be set in the save file. The New Game (Create Character) menu will allow these choices, with matching portraits.
2011/06/07
New Character Screen
ASCII sketch time!
####### Choose a Portrait ########
Base Type # #
# #
(*) Human Male # #
( ) Human Female # #
( ) etc # #
# #
< # # >
# #
Preview # #
######### # #
# # # #
# # # #
# # # #
######### ##################################
Name: [______________________________]
[Cancel] [Create Character]
2011/06/06
Officially Moving To GitHub
Flare is taking a distinct change in direction with a move to GitHub. The Google Code page will stay up until v0.14 is released, at least (though it will be increasingly out of date).
I've posted a list of code issues to tackle. If you are interested in helping Flare, this is a good place to start. As always, an easy way to contribute is to add some specific feature that you feel is lacking.
I've decided to go with a much more community-friendly approach to Flare development than I posted a few weeks ago. Some of those principles still apply, but now I will intentionally be more welcoming to change and new ideas. Already I've accepted pull requests for changes I was hesitant about before.
Essentially, this is me admitting that Flare is bigger than just me, and that Flare irrevocably belongs to the community. This isn't my game, this is our game. With GitHub it is much easier to branch, experiment, and merge. Hopefully this means Flare will improve at an ever-growing pace.
2011/06/03
Git?
[--Update--]
I've made a copy of Flare on GitHub. I'll try this out for a while, see how it goes.
As part of this, I want to be more open/accepting to contributions. With git, this might be easier than ever before. If you implement an interesting feature please send me a pull request on github. Note I'm fairly new to git so things may be slow at first.
2011/05/31
Current Questions
Q. Is Flare ready for me to make games?
A. No. The funny part about software development: the first 90% is easy, it's the second 90% that is tough. Though Flare appears (at the surface) close to basic "feature completeness" it has a lot of work to go. I will have big announcements and tutorials up when certain parts are ready for real content-building. Map-making will probably come first. Keep in mind that you're watching the Alpha process as it happens; usually players and modders don't see games until well into Beta.
Q. Why not use OpenGL?
A. The current game runs okay enough without needing that added complexity. But I plan to experiment with it at some point. I'll also consider using a different library that does basic OpenGL for me (e.g. SDL 1.3 or SFML). As long as the game runs fine without it, OpenGL won't be a high priority.
Q. What will your game be about?
A. I have some themes in mind: elemental themes (fire vs. ice or wu xing), exploration in dangerous wilderness, ruined civilization, undead plagues, magic outlawed, religious corruption. I don't have a solid plot picked from those themes yet.
Q. What will your game be called?
A. No idea! Flare is just the engine/internal codename. I've been hunting for a good name. If you have suggestions please share them.
2011/05/30
Game Slots
Here's a preview of the game slots menu which appears when you want to load a game or start a new game.
When clicking on a load slot, I will display the hero's portrait on the right side. Eventually I will add painted art in the background (though I'm not sure what of yet).
So, it's not thrilling to have a fixed number of game slots. However, four slots have nice symmetry with the four attributes and disciplines. As with everything in Flare, I've done it simple the first pass and reserve the right to do it much nicer later.
The displayed information for each slot might change. Maybe I should translate the hero's build into a class label. Maybe I should display the current map name. Possibly display the file timestamp.
2011/05/27
Crazy Code Weekend
I'm planning on writing a lot of code this weekend. Fair warning: the latest svn version might not be playable until Monday!
2011/05/24
Tiled and Maps
I'm looking at Tiled's automapping feature as a way to speed up basic map building. I can set up all the ruleset files for each tile set. For my reference, here's a much-needed tutorial video on Tiled automapping.
(Update) I checked in a first version of Tiled automapping files for the Dungeon and Cave tile set. It's very useful for quickly laying out the basic level. Instead of drawing with individual tiles, there is a new layer to draw with only four tiles: Void, Wall, Floor, Pit. Tiled's Automapping feature translates that to basic tiles.
My automapping files aren't perfect so it requires some touching-up for some corner cases. Some of these cases can be solved as I improve my map rulesets.
The auto-mapper does only one variation. Once the map-maker is satisfied with the basic layout he should delete the automapping layer ("set") and apply variations and decorations manually.
2011/05/20
Violence
Action RPGs, traditionally, base the core gameplay around violent combat. Flare is no different.
So far I've been reluctant to include human enemies. Indiscriminately grinding human mobs seems in poor taste, and perhaps a waste of possibility. I'd prefer if the chance to kill another human was rare and optional, if it came down to a villain who deserves it (let the player decide if vigilante justice is moral).
Sometimes I even question having other sentient enemies as creatures. My girlfriend does not like that the cute goblins are enemies. For me it's not about cute, but about massacre of a self-aware race. There's no explanation in-game why goblins are enemies and why they should die. Sure, they do attack the hero on sight... but in my mind, the goblins were always more curious than cruel.
I'm a bit torn on how to "solve" the issue, or whether it needs solving. I could change Goblins to Imps and Minotaurs to Demons, thus have all killable creatures be some form of undead or demon. But having a game be so black & white could be boring.
I think it could be interesting if this is addressed during the story, e.g. some NPCs pushing for peace, compromise, mercy, or isolationism. It could be even more interesting if some races (e.g. goblins) are neutral and can become allies or enemies through player choice.
Do you ever think about this when destroying creatures in video games?
2011/05/15
Contributions
Lately I've gotten several very large contributions to Flare (code and art) that I've had to reject. I don't like doing that. So here are guidelines to helping the project.
0. I might not need help
Before I talk about doing a contribution the right way, realize that I may not need your contribution at all. This project is different than some free/libre projects that need contributors -- I can do most of it on my own, and I enjoy doing most of it on my own.
If you are looking to actively contributing to projects, I can point you to several other free/libre RPGs that are looking for help.
When I do need help or input on a specific task, I will put out a call for help -- often with an attached commission fee.
1. Talk to me before you begin
If you don't talk to me first, your large patch of code might break something else I was working on. Or it might not be the right time -- it's a feature that might have to be added later for various reasons. Or it might be something I had planned to do a different way. Your art contribution might not follow specifications or follow the art direction I have in mind.
Save yourself plenty of effort and contact me before you begin. If I like your contribution idea, I will give you plenty of specifications and guidelines towards a useful contribution.
2. Keep it simple
This applies mostly to code. I'm intentionally keeping the Flare code very simple. If you have a patch that adds a lot of complexity to the codebase, I will probably reject it without taking the time to comprehend it.
I want the code to be simple so that it's easy to comprehend. Especially for game programmers who are just getting started. But also, I will have to maintain this code, and simple code is easier. I vastly prefer Composition to Inheritance. I prefer implementing a small feature rather than including a new bulky dependency.
3. Keep it small
Don't sent patches that add several features simultaneously. If I like one change but not the others, now I have to perform surgery on your patch. My time is very limited; I could be making other features instead. It is often better for me to reject the entire patch.
If I already like your feature idea but it requires changing a lot of code, consult me on the timing of it. It will be harder to add your patch into a rapidly changing code-base if it is very large. I may ask you to wait to implement the feature until later, when those areas of code will be more stable (or when I'm working on different areas of the project).
4. Be mindful of licenses
I have to be very strict about licensing issues. I can only take GPL v3 code or compatible, and I can only take CC-BY-SA 3.0 art or compatible. If you're unsure about what this means, please contact me.
2011/05/09
Flare Vision
Loristan asked: "Clint, what is your vision for Flare, what are you trying to ultimately achieve?"
I haven't thought of Flare in exactly those terms yet. So here goes.
First, a list of big goals in approximate time order.
- Implement the minimal number of features to create a simple game
- Build enough assets to create a rich game in the medieval/fantasy genre
- Release a solid medieval/fantasy game
- Begin plans for a new game. Still action/RPG but a different genre most likely.
- Refactor the engine code so it works for the new game and for previous games.
- Build assets for the new genre
- Release a new game
- GOTO #4
I plan to keep going until I at least release one game (task #3 above). If I'm not sick of it by then, I'll continue the cycle of making new games and polishing the engine. As I get tired of code I'll focus on new assets, and vice versa.
Meanwhile I will help (to some extent) any team that wants to build a game with Flare. This might include helping with art assets or implementing new features.
So the ultimate goal? Release a fantasy action RPG.
Then if I'm not insane yet, maybe, release a zombie survival game (heavy on action, light on RPG). Then if I'm still not insane, maybe, release a steampunk intrigue game (heavy on RPG, light on action). Meanwhile, each step of the way the engine matures into a stable, proven framework that does a few things very well.
---
If you want to get existential, my vision for Flare is to make something I'm proud of. I've been toying with game development for 19 years yet I don't have a real game I can point to and say "I made that."
2011/05/07
Joystick Support
Artur "Zear" Rojek sends in a patch to add joystick input support for Flare. Excellent!
To make that patch really useful, I need to add an aiming option that always aim powers the direction the player is facing. Perhaps I can look at supporting non-cursor (mouse, stylus, touch) systems -- some of the menus could be tricky.
While I was in that area of the code, I added Hardware Surface and Double Buffering options to settings.txt -- should help with systems that don't have those capabilities.
2011/05/06
Title Menu
I've added a basic title menu. Along with this I created a semi-generic button class (buttons that are all the same size) which I'll reuse on the other main menus. The buttons look great and use Lamoot's interface widgets from Open Game Art.
For now I'm temporarily using the Flare logo for the title screen. This will not last until release; Flare is only an engine codename.
2011/05/05
Flare Wiki
I set up a Wiki for Flare. I have it open to anyone right now. I'm collecting story ideas for the first Flare game. If you have ideas for areas, quests, bosses, NPCs, etc. please post them!
2011/05/04
No Rest for the Wicked
v0.14 is ambitious. Let's take a look.
Title Menu
The first attempt at a title menu will be completely simple.
- New class MenuTitle, child of GameSwitcher
- Centered image/logo on black background
- Bottom-center: buttons for Play, Options, Exit
- Other buttons can be added later
- Button clicks change GameSwitcher state
- Play goes to the Load Game screen
- Options will be disabled for now
- Exit quits the game without prompt
Load Game
This screen should display a list of the current save games. It should read each save file to see the hero's name, level, location. If we get fancy it could show the hero's stance animation (load the hero's head and base body depending on equipped items).
For now this menu can support a fixed number of save game slots. Let's say 4.
- New class MenuLoadGame, child of GameSwitcher
- List of the 4 save slots, click to highlight
- Buttons at the bottom: New, Delete, Load (active an inactive art for each)
- If the player clicks on an existing game slot, the Delete and Load buttons are enabled.
- If the player clicks on an empty game slot, the New button is enabled.
New Game
The new game menu could be the most complex, especially if I want to make room for interesting choices in the future.
- New class MenuNewGame, child of GameSwitcher
- Text box to enter character name
- List of portraits, choose one
- Config file that matches portraits with heads and base bodies
- Accept button (clicking causes switch to GameEngine state)
Each portrait could be tied to a base body type and have an associated head layer. If I have the time, v0.14 will have two base body types (human male, human female). So this menu will start with 6 portraits (3 male, 3 female). In the future I could add more base body types (maybe a bulky body type, or even an elf or dwarf race type).
2011/05/02
Flare v0.13 released - "Quests"
Flare now supports quests! This release marks a major leap forward for the story-telling capability of the engine. NPC questgivers can send players on quests and give rewards on completion. Quests can also involve finding items, killing bosses, or exploring a map area.
Detailed list of changes in v0.13:
- New "Lost Mines" area by Thane Brimhall (pennomi)
- MenuTalker code beginnings by Juan PabloTamayo (morris989)
- Added GameSwitcher class in preparation for Main Menus
- Block power buffed
- Framerate fixed. Animations adjusted and should be smoother on low-power systems.
- Added healing-over-time support for powers.
- New stat awards on level up.
- Added new potion levels
- "Magical" renamed "Mental" for genre neutrality
- Rearranged power tree. All power slots now implemented
- New "Channel" spell: short-range spell that costs 0 mana but requires a Mental weapon
- New "Immobilize" power: use a ranged weapon to pin a creature to the ground
- New config files to edit resolution, fullscreen, keybindings
- Updated health bar by Scrittl
- Stackable items and inventory refactoring by Bonbadil
- Basic conversations added
- NPC portrait by Justin Nichol
- Campaign Manager added to handle quest states
- Enemies no longer use ranged powers when losing line of sight
- Added consumable spell scrolls by Thane Brimhall (pennomi)
- Added elemental spell scroll icons
- Separated icons into 32px and 64px pages
- Added NPC ability to advance quest and give rewards
- Added monster kill to advance quests
- Added quest loot for monsters
- Added a tutorial NPC
- Added on-pickup quest advancement on items
- Added Averguard Keep quest chain featuring 4 bosses and 3 quest items
- Added a quest-giver NPC
- Added key and book icon for quests
- Added tabbed interface to Log Menu
- Log Menu has room for Quests, Messages, Statistics, and Achievements
- Weapon requirements displayed on Power tooltips
- (bugfix) Enemies no longer run before changing directions when entering combat
- (bugfix) Enemies leave combat when the player is dead
- (bugfix) Missing menu deconstruction calls added
- (bugfix) Correct memory reallocation when chaning equipment
- (bugfix) Correct resist stats on bows
Downloads
Video
Screenshots
Community Announcements
2011/04/29
Testing for v0.13
I plan to release v0.13 soon. Over the last couple days I improved the Log menu to display help/reminder text for active quests. The new tabbed interface for the Log menu is also ready for achievements and statistics (will be added later).
If everything looks okay, I plan to release v0.13 this weekend. Let me know if you test the new features in the latest check-in.
2011/04/25
Windows test for r359
Here is an out-of-band test release for Flare (for Windows folks). This release is for players interesting in trying the new Quest system. I've added a short quest chain that covers a few of the current game maps. Download now!
2011/04/22
Quest Chain
The first quest chain is added to Flare in r353. It walks players through Averguard Keep. Heroes must defeat the bosses of four areas of the Keep; meanwhile they learn a bit about the history of the keep (and hints at the larger story).
All this stuff takes a lot of playtesting -- e.g. what happens if a player defeats a boss but fails to pick up the quest item he drops? What happens if a player tries to do quests out of planned order? There are many combinations at play. If you try the Averguard Keep quest chain and get stuck let me know. Note I'm not concerned with players who edit their save files incorrectly.
The quest items are using temp icons.
Next up: adding a Quest tab to the log menu.
2011/04/17
CampaignManager
v0.13 has a new class called CampaignManager that I'm using to store the progress of the current story. Essentially it is a collection of strings. Various parts of the game engine can read/write these strings to create some persistence and progress in the game world.
Related To Do:
- Move the processDialog and chooseDialogNode into NPC
- Give each NPC a pointer to the current Map (which also contains the CampaignManager). This structure choice will allow future NPCs to move around the map.
- Create handling for Quest Items. Perhaps this should be a new base item type.
- Prevent quest items from being dropped or sold
- Add an on_pickup command to quest items that sets a campaign state
- Allow CampaignManager to check for or remove items from the player inventory (pointer to the carried MenuItemStorage)
v0.13 Quests
With this simple quest implementation in place, I need to create a few archetype quests for v0.13. My plan is to create a simple quest chain that ends in slaying the skeletal warrior Sir Evan Maddox.
- Report for duty: talk to this person, they have work for you.
- Exploration quest: I need intel from an area but it's too dangerous for me to go
- Fetch quest: get this item for me
- Key quest: take this item, now you can get into a new area
- Kill quest: kill this creature
Other common types not yet represented:
- Escort quest: universally hated so I probably won't even implement this.
- Gather quest: I don't have support for e.g. gather 10 boar lungs. That kind of tedium is more for time sink MMOs anyway. Simpler quests (e.g. gather 1 of each of these ingredients) can instead be done in a quest chain or in parallel quests.
- Genocide quest: Kill X of this creature. Again, more of an MMO time sink type quest, I might not implement this.
By covering these basic quest archetypes, I'll have the first Flare quest chain and have examples of how to create each basic type.
2011/04/16
NPC Me
Open Game Art has a new weekly challenge coordinator. User kurtisevan has taken over for me, after I started and ran the contest for one year. The first new challenge: Get in the Game!, where you create a version of yourself for use in a game.
Well I'm working on NPCs and dialog anyway, and there's already a tutorial NPC with my name, so I created NPC art of myself. Looks fun in game, see the latest check-in at the Google Code page for Flare.
2011/04/12
Contributions On Hold
I've been overwhelmed lately by the amount of interest in Flare. For now I'm asking that code/art contributions be put on hold. My personal/professional life is absolutely full for the next few weeks.
If stand-alone art or programming tasks come up, I will put out specific calls for help.
2011/04/10
Flare Timeline
This is the approximate timeline from where we are now to Flare's first full game.
April 2011: Flare v0.13 "Quests"
In late April, Flare v0.13 will be released. It will contain talking NPCs and support for simple quests.
May 2011: Flare v0.14 "New Game"
In late May, Flare v0.14 will be released. It will contain a Title Menu, New Game Menu, and Load Game Menu.
June 1st, 2011: Feature Freeze
The engine will receive a freeze on major new features after v0.14. Any programming done after v0.14 will focus on making options in the existing engine configurable.
- Translation support
- Menu themes/design options
- Minor AI config options
- New base powers, items, etc. as needed
Focus changes from Engine to Game
At this point the focus of this project will switch from making an engine to making a game. Basically, if I can't build a game with this engine then it's useless.
June 2011 through May 2012: Art Assets
I expect to focus an entire year on creating art assets for Flare. More tile sets, creatures, equipment, NPCs, powers, etc. During this time I will be plugging the art into the engine with new test maps, side quests, etc.
June 2012 through Nov 2012: Tell A Story
At the end of 2012 it will be time to pull the assets together into the first Flare game. There should be enough variety to tell a decent story -- even a 20 hour single player campaign would be great for a project like this.
Dec 2012: Post Mortem
Assess the engine as a stand-alone project. Possible outcomes:
- If the engine is worthwhile, build a second game. Aim to reuse as much of the old code as possible. Refactor as necessary. Make sure both the first and second games run on the same engine.
- If the engine is mediocre, consider a rewrite. Design it from the ground up to support scripting engine, multiplayer, etc.
- If the engine is worthless, it ceases to be supported as a stand-alone engine. Instead it's basically the beta code-name for the finished game.
2011/04/06
Monologue
The latest check-in has example dialog support. Well, really at this point it's Monologue (the hero doesn't talk back yet). I also have support for completing dialog options (same function for completing quests) and awarding xp, gold, and loot.
I implemented campaign states as strings instead of as ints. It's much more readable and easier to maintain the data. See an example of the syntax here.
I still have to make campaign get/set in Map Events and on Enemy deaths. That will open up many simple quest types.
2011/04/04
CampaignManager.cpp
I started the very basic framework for the Campaign (story) Manager class for Flare. Right now all it does is read/write a bool status[1024] from the save file (as plaintext hex, cause that sounded good at the time).
On the plus side, this will be very easy to implement. Various classes will get/set these booleans. NPCs, map events, and the quest log will react to these simple statuses.
On the down side, this is as complex as I would get before strongly considering a full scripting engine. So extravagant cutscenes, branching dialog, etc. probably won't be part of the first game.
Item Storage
Bonbadil completed some fine refactoring of the Inventory and Vendor menus. Here's a quick explanation of the new classes.
ItemStorage is all about data; an array of ItemStacks along with generic functions to add/remove/return items.
MenuItemStorage is a derived class of ItemStorage that adds GUI functions (rendering icons, determining on-screen slot locations).
And here's how they're currently used:
- MenuVendor has a MenuItemStorage for the 80 vendor slots
- MenuInventory has two copies of MenuItemStorage (equipment and carried blocks)
- NPC has an ItemStorage for vendor stocks; multiple vendors share the one MenuVendor. NPC ItemStorage data is passed to the MenuVendor MenuItemStorage on MenuVendor::setInventory()
Having common code pulled into these new classes should help these menus work consistently. It also makes some features easy to add later e.g. workspaces for crafting or player stashes.
2011/03/30
Stackable Items
Bonbadil has sent in a patch that adds stackable item support. Old save files should be safe. The patch touched lots of areas in the code -- if you notice a bug let me know.
2011/03/29
Art used in 7-Day Roguelike
I'm proud to see one of my tilesets used in a 7-Day Roguelike Challenge game! The developers, Ido Yehieli and Corey Martin, really poured some life into this minimalist tileset! Congrats to those guys -- making a game in a short amount of time is quite a feat.
Ido is also raising funds for a more in-depth roguelike. Check out Cardinal Quest on 8-bit funding (only 3 days left)!
2011/03/28
Portraits
I'm starting to test portrait integration into NPC talkers. Here's an in-game mockup.
Campaign Dialog
I've been pondering how to handle dialog that depends on the current state of the story. The NPC files will have [dialog] blocks that contain story-dependent conversations.
Here's an example of plain back and forth dialog that only occurs once (sets a new campaign status upon completion).
[dialog]
requires_status=1
him=Welcome to ... say, you wouldn't happen to be Matthias's kid?
you=I didn't know my father was known in this part of the Kingdom. My name's %n.
him=The kingdom's smaller than you think. I'm Reginald. I worked with your old man on the Skybridge project, back before your time. How is he these days?
you=Surviving, like the rest of us.
him=Glad to hear it. Say, unless you're just passing through, pay a visit to Jameson over at the Frothy Tankard Inn. He served at Skybridge with us too. The two of them were best of friends. Hells, Jameson might even put you up for the night free of charge.
set_status=2
If you talk to the guy again, he'll say something different. The engine will display the lattermost dialog option where the requirements are all met.
[dialog]
requires_status=2
him=Frothy Tankard Inn is right on town square. This road will take you straight to it. I'm sure Jameson will have plenty of stories to share about your father.
Now here's an example of how quests might work with dialogs.
[dialog]
requires_status=10
her=There is a storage room under the cathedral ruins. There should at least be a few sacks of grains, if the plague rats haven't gotten to them first. It would buy us a couple more weeks here... but don't go risking your neck on our account.
set_status=11
[dialog]
requires_status=11
her=There must be a safe path to the cathedral storage rooms...
Campaign status checks could also be added to map events.
[event]
# if on the "sack of grain" quest, drop it here
requires_status=11
requires_not=12
msg=You find a sack of wheat grain. Maybe luck has turned around for those refugees.
loot=item,2000
set_status=12
And quest turn-in:
[dialog]
requires_status=12
requires_item=2000
her=You've found food! I don't know what to say, or how we could possibly repay you.
remove_item=2000
reward_xp=100
set_status=13
So, the possible fields in a dialog node:
- requires_status
- requires_item
- requires_not
- him
- her
- you
- remove_item
- reward_item
- reward_xp
- reward_gold
- set_status
Campaign statuses will be checked or set in various ways to create stories and quests.
- Map Events might only occur on a specific status, or set a status
- Enemies might only spawn on a specific status, or set a status when defeated
- The Log menu will display reminder text based on current statuses
Examples of the kind of simple connections possible with this system:
- Boss treasure chest only openable if the boss is dead
- Story bosses that stay dead
- Conditional map teleports to make map phasing (e.g. village burns down, next time you enter that area it actually loads a different map)
- Doors that require specific keys to open
- Chest drops a quest item if you're on the quest, otherwise it drops random loot
The status booleans will be written to the save file. The first implementation will have 1024 status fields. I'll store them as plain text hexadecimal like this:
campaign=f1fea3b000000000000000000000000000000000000000000000000000000000
2011/03/27
Flare on Ubuntu
If you're interested in trying Flare on Ubuntu, this article from Ubuntu Vibes is a great place to start: How to Download and Install Action RPG 'Flare' on Linux.
2011/03/23
Config Settings Files
This was way overdue, but now there are finally some main config files. Now the following items are configurable:
- fullscreen
- video resolution
- background music volume
- max frames per second
- keybindings
2011/03/22
Stat Renaming
This is what happens when I get too much extra time -- I start changing things randomly!
I have renamed the following stats (across the game source code and data files).
- Magical is now Mental
- Health is now HP
- Mana is now MP
I've done this to make the engine genre-neutral. An additional reason for this is to make populating the Powers menu easier, thematically -- I can slot Mental Offense or Mental Defense powers that aren't necessarily Magical in nature. Later when I add translation support, it will be possible to change the "Mental" label back to "Magical" (if desired).
Also, I did this update with bulk find/replace. I'm sure I broke stuff in the process. If you see something wrong lemme know.
Power Tree Rearrangement
From the change log for r298:
Trying a rearranged Powers tree. - Lore removed, in its place is Channel - Return removed, in its place Block - Blood Strike moved to where Block was - Immobilize added where Blood Strike was - Haste and Cleave swapped - Piering Shot and Multi Shot swapped Additionally with this revision: - New art for Channel - New icons for the rearranged tree, and new base Powers menu - Refactored "requires_ammo" into "requires_offense_weapon" - Added requires_physical_weapon, requires_mental_weapon
2011/03/21
Playtesting levels 1-4
Tonight I playtested each "pure" build from levels 1-4. It's a vulnerable area, especially in a non-class-based system where a player might make unusual attribute choices. Later levels aren't so bad, especially once a character starts mixing in secondary attributes.
Pure Physical (straight to longsword proficiency)
The higher health pool definitely helps this build. I didn't really need potions until I got to the cave. I was a bit reckless around some spitters so I used up a few potions, but overall I felt like I could run around and destroy stuff. Pulling using line-of-sight and bleed kiting was effective and fun.
Pure Magical (straight to staff proficiency)
I had to conserve mana at first (picked off the slow zombies with a rod bash) but it felt fun and precarious. Once I could afford it I bought a handful of mana potions that kept the action going. Keeping shields up at level 4 was important for survival.
Pure Offense (straight to longbow proficiency)
This character has a very easy time at early levels. When he starts facing ranged creatures (skeletal mages and antlion spitters) he can easily be two-shot, so cautious and smart play take over. Feels like it's lacking a mana-cost power at levels 2 and 3; a high-powered arrow shot could help.
Pure Defense (straight to steel armor proficiency)
By far the worst build in terms of fun. I died a lot until I could afford a buckler; after that I was able to stay alive by blocking and counterpunching. Survival becomes easy with a buckler and block, but it takes forever to kill anything. Block/counterattack does have a fun feel to it, but it definitely makes more sense with Physical sprinkled in. I'm not worried about the deficiencies here; nearly all players build around their main weapon first and add defense later.
2011/03/20
Balance - Part 2
I'm testing several balance changes.
- Starting HP and MP is now 12
- Each level of Physical now grants +8 HP and +4 HP regen
- Each level of Magical now grants +8 MP and +4 MP regen
- Shock now costs mana again
- HP Regen, MP Regen, and Crit are doubled on gear bonuses
The result I'm looking for: I want basic Physical characters to feel sturdier and Physical Defense characters to feel like damage-soaking tanks.
Low-level mages and archers will have lower health. Mages have an easy Heal and early Shield but have to manage mana. Archers have no easy healing but no resource management (e.g. ammo).
I packaged up a Windows build of these changes. Also, I started up a forum thread to talk about balance issues.
Update: Potions
In r295 I have a new low-level potion (25 points, 25 gold). The high level potion has been changed (75 points, 75 gold).
2011/03/19
Balance
Balance, the RPG task that never ends! But has to start somewhere.
If you've played Flare enough times, you know that melee builds are far too weak right now. Over the last few days I've been trying to fix this with Powers, but now I realize it's the wrong way to go.
A new revelation: characters should be fun to play and manageable even if you take away the fancy powers. A player should be able to just basic melee attack or basic ranged attack to victory. A Physical build should feel physical/brutish instead of dying in only a few attacks. Even the Magical build has a mana-free missile right now just to make its core gameplay doable.
So this weekend I'm going to be pondering the core game stats, and ways to keep something of a balance.
2011/03/18
Various Fixes
- Fixed frames-per-second throttling, should now correctly run at a max ~30fps.
- As a result of the above, many animation speeds had to be changed. I'll tweak more of this later.
- As a result of the above, the game should feel faster on old machines.
- Can no longer interact with NPCs if the hero is dead
- Enemies abandon combat when the hero is dead
That's enough damage for one day. I will be out of town this weekend, and probably without a constant internet connection.
2011/03/17
NPCs with Dialog
morris989 sent in a Flare patch to add talking NPCs. It's a simple implementation, but it adds the needed hooks to expand into more interesting conversation options later. Check out r280!
GameSwitcher added
A new class named GameSwitcher has been inserted. It is in the main.cpp. GameEngine is removed from main.cpp and is not a child of GameSwitcher. The new class handles the main game modes (anything that takes up the entire screen and controls). Basically it just calls the logic() and render() for the current game mode, and will perform various checks to transition to new game states. This is the place where the Title Menu, New Game (character create) Menu, and Load Game Menu will exist.
This is how I want the menus to interact:
Executable launched -> Main Menu
Main Menu -> New Game
-> Load Game
-> Exit Game (executable ends)
New Game -> Game Play
-> Main Menu (on cancel)
Load Game -> Game Play
-> Main Menu (on cancel)
Game Play -> Main Menu (Save and Exit To Title)
2011/03/15
Flare v0.12 "Vendors" Released
It's only been a couple weeks but v0.12 is ready! Here's a quick list of changes since v0.12
- Vendors have been added. Buy and sell items! There is one vendor at the spawn point and another vendor in the cave.
- Voice-acting for the vendor by Brandon Morris (Augmentality)
- Male vendor 3D model by TiZiana
- Potions can be placed on the Action Bar. The number of remaining potions is shown. When you run out of that potion, the icon goes dark. Thanks to help from LongerDev.
- Support for other powers on items has been added. This opens up the possibility for interesting items in the future (e.g. teleport boots).
- Action is no longer paused when menus are open. This behavior can be changed in Settings.h. Contributed by LongerDev
- Basic support for Mouse Movement added. Edit your save file and you'll see a mouse_move option. Contributed by Cheshire.
- Mouse-over on creatures shows a menu with the monster's name, level, and health. Contributed by Cheshire.
- Added a basic cmake file to the source distributable. Also rearranged the folder structure to make things easier for novice users. Thanks to gnurobert and ceninan for help on this!
- Dying now has a penalty: 50% gold loss
- Crits are more powerful and always do more damage than a regular attack.
- Click here for a full list of credits.
Screenshots
Download v0.12
Community Announcements
v0.12 Gameplay Video
2011/03/14
v0.12 Release Candidate
I've packaged (win, osx, src) what might be version 0.12. Will do an official release tomorrow. If you'd like to test before then, drop me a note or try building from svn.
Restructuring for easier Make
I'm slightly restructuring the files/folders of Flare so that the checkout and source-packages more resemble the final structure needed to build and play the game. The "resources" folder no longer exists and all its subfolders are now moved up one level.
2011/03/13
Vendor Ready For Testing
I've finished the basic Vendor system. There is now a vendor standing near the spawn/starting point in Goblin Warrens. He sells potions and level 2-4 normal quality items. He also has a random stock of items based on his level (same calculations as game loot).
Death Penalty
To make Gold more interesting I've added a death penalty -- 50% gold loss upon death.
2011/03/12
Flare Promotion
I've gotten this question more than any other in the past two weeks: "Why aren't you promoting Flare more?"
Short answer: it's coming. Sometime this summer I plan to do wider promotion of Flare.
Some people are confused: why would any project want to wait to get more attention? Well, even the tiny trickle of Flare feedback I'm getting these days is taking up a significant portion of my time. Not that I mind -- the feedback I'm getting is often earnest and helpful, and the volume is such that I can respond to pretty much everyone.
I'm not a "sales" guy -- I'm terrible at promotion because most of the time it just isn't genuine. Perhaps you can help me. I'd much rather see Flare grow organically. I feel bad signing up for a new forum to talk about Flare, but I'm comfortable talking about it to the communities I already know. Maybe you are part of communities that would enjoy this game: if so, share a link.
I'm not here to make a dime. I will probably never try to make a dime from this. I just want to make nice things; maybe someone else will enjoy them if I'm fortunate. Hopefully I'll find more people who love the genre enough to craft worlds with me.
2011/03/11
Item Powers on the Action Bar
Items with Powers can now be used through the action bar. Details from r260:
- Potions can now be put on the action bar.
- The number of remaining potions is shown on the action bar.
- If you have no remaining potions of that type, the potion icon is darkened/disabled in the Action Bar.
- ItemDatabase no longer has an activate(). It is now handled by PowerManager.
- Powers can be attached to items. This is how potions are done as well.
- You can put permanent powers on non-consumable equipment.
- These items can be dragged onto the Action Bar to Use their Power.
- Added a Lightning Rod (item 1021) to show a spellpower on a weapon.
- Added Teleport to the Boots of Testing (item 1022) to show another item power example.
- If you remove or unequip a power item, that power is darkened/disabled in the Action Bar.
- Increased the number of total allowed powers from 128 to 1024
Special thanks to LongerDev who helped me immensely in figuring out the best way to tackle action bar items!
2011/03/10
Pausing
Having a menu open no longer pauses gameplay. This option is set in Settings.h.
Vendors
I'm starting to build the Vendors menu. For now, for easy testing, I made a hard-coded vendor menu open when you press V (for Vendor). Ctrl+Click an item to buy it. I will add drag/drop buying and selling soon.
2011/03/09
Flare Art
Here's a list of art I'd like to see in Flare soon.
Grassland Tileset
A good grassland tileset will, of course, have excellent grass -- this is way harder than it looks. Have a look at my first attempt at grass and water tiles. It's not bad, but it's too noisy when tiled on an entire screen. It needs to be muted to fit as a non-distracting background. Also, that translucent grass sticking above the tile doesn't work well when removing the alpha layer. The final grassland tileset should avoid these issues.
The grassland tileset should contain grass-water transitions and grass-cliff transitions. It should probably also contain dirt roads, wood or stone fences to border the roads, wood road signs, and wood footbridges. The set could have various shrubs, weeds, lone trees, odd rock structures. Maybe some forgotten and unexplained monuments -- a carved statue, a circle of stones, abandoned campsites, and more. It might need a few special "exit" tiles -- a cave opening that leads to a Cave Tileset level, a thicket of trees that leads to a Forest Tileset level, etc. Perhaps this Broken Tower could be used as a Dungeon entrance.
Forest Tileset
The forest tileset might be the most challenging to get correct. I want a thick, mystical forest. The player should get the sense that he is traveling in the shaded underbrush. Thick trees and brambles form "walls". The walls can't be made by just combining lots of trees. Trees can't also be too tall and obstruct view. Diablo 2 Act 3 did something sorta like this, but I want to go for a more "deep in the woods" feel (rather than simply traveling along the river or treeline). I'll probably need the help of a great concept artist to get this tileset going.
I might want this tileset to be more fantasy-oriented than the others so far. There should be huge gnarled roots, weird glowing plant/fungal life. It should feel like a fey place of elves, fairies, dryads, centaurs, etc.
This Temple Entrance could have a place in this tileset.
Village Tileset
I made this Medieval Building Tileset. I'll probably re-render them for Flare using different lights. Some of the Grassland tileset can probably be reused here (e.g. grass and dirt paths). There can be a few unique buildings added. Maybe a series of shop signs. Because of the way the engine works (small maps connected by teleport/transition points), the village should probably be surrounded by a wall, fence, natural cliffs, or something of that nature.
Lots of small bits to bring a village to life will be needed here. I think it's best if the village is designed by a concept artist first. That way the village looks less like a random assembly of tiles and more like a planned, living town.
And more...
Those tilesets -- dungeon, cave, grasslands, forest, village -- would be a solid start to building a world. I already have music ready for those. Many more tilesets can be added in the future. Here's some ideas:
- Natural outdoor tilesets
- Desert
- Mountain
- Swamp
- Jungle
- Pine Forest
- Tundra
- Beach
- Fantasy outdoor tilesets
- Crumbling Bridge Highways
- Ziggurat
- Good-guys Castle
- Bad-guys Fortress
- Magical Destruction/Fallout
- Fantasy indoor tilesets
- Inn, Shop, Home, Tavern
- Temple
- Elemental Cavern
- Evil Fortress
- Crypts
- Wizard School/Tower
Of course, most everything in that list is a fantasy trope. Reminder: I'm mainly building an engine at this point. I'm much more curious to see unique, imaginative tilesets.
Enemies
Current Flare has zombies, skeletons, antlions, goblins, and minotaurs. Here are my other must-have creatures, which have been in the Bestiary list since before Flare v0.01 was released.
Dragonman
Maybe I liked Dragonlance too much growing up, but I want heavily-armored draconic humanoids in my game. Originally these were going to be the main foes of my game, but I've kinda backed off that concept. In fact, it may be more appropriate to drop Dragonmen and use the concept to make a faction of heavily-armored humans instead. So the inspiration here is: Dragonlance's Draconians, Borderlands' Crimson Lance, Fallout's Brotherhood of Steel, etc.
Elemental
I want Archon-style elemental creatures in the game. Fire and Ice variants at least. If I end up going the Western Element route, add Earth and Wind options. If I go the Eastern Element route, add Earth/Metal/Wood. Most likely I'll just start with Fire and Ice though. These creatures might make heavy use of particle effects, so they might require full alpha layer art.
Wyvern
Wyverns can double as bat-like creatures or as dragon whelps with only a few minor changes. I like this Wyvern concept by Benalene. The wyverns would be pretty small in-game. They would be the first flying creatures in game, ignoring any low-obstacles during movement.
OGA Asset Creatures
There are a handful of creatures that can be made using mostly OGA assets. There probably are many more; this is just a quick perusal.
- Ghouls -- crawly undead that stun on attack (classic old-school ghoul paralysis). These should be feared because they can lock-down a hero. This ghoul model by Riidom is perfection.
- Giant Spiders -- a fantasy trope, but throw in a ranged web immobilize attack and some poison and you have a great monster. Sunburn has a great spider sculpt that can be polished for Flare.
- Death Knights -- this character by Santiago Calleriza is begging to be made 3D. When I have a free weekend I'll probably do it myself. Would make a great boss character.
- Lizardman -- this humanoid reptile could use some tribal dress, and would make a great humanoid enemy race. There's also this lizardman, and both could be used for variety.
- Executioner -- this executioner would make a solid boss, or even an elite minion of a later boss.
- Scorpion -- this scorpion would make a great desert beast
- Antlion Demon -- this antlion demon would make a unique boss.
- I don't know what this is but I like it
- Insect Humanoid -- love this model
- Vampire -- this model would be perfect
- Vampiress -- and this one. This pair could also make interesting townsfolk.
2011/03/08
Another v0.11 video: this time showing off more powers.
2011/03/07
Why yet another Diablo-like?
Flare is mentioned in this post about 4 problems with FOSS games. The author says "I’m actually pretty psyched about FLARE, but if I was a Windows user I’d probably be thinking 'why not just reinstall Diablo?'"
Great question -- once that I don't have a good answer for. It's a fool's quest to try to beat or match Blizzard, even the Blizzard of 15 years ago!
I'm doing this because I'm having fun. Writing low-level game code is how my brain spends its spare cycles. And of the genres of game I'm interested in, 2D isometric action RPGs are probably the most interesting/ambitious.
Staying close to the formula is helping keep my engine on track, for what that's worth. If I'm lucky, someday, people will use Flare to tell their own interesting stories. I don't even have a storyline in my current plan. I intend to create enough assets and code to make basic storytelling and world-creating possible. The genre is still ripe for potential, even if Diablo was a perfect game.
Flare v0.11 at Free Gamer Blog
I'm always excited when someone at Free Gamer Blog talks about Flare. Thanks for the plug, qudobup!
And some Russian Blizzard fans...
2011/03/04
Flare r247 binary for Windows
I've released an out-of-band, UNSTABLE AND EXPERIMENTAL binary of the latest code -- mainly to show off the contributions by Cheshire.
https://code.google.com/p/flare-engine/downloads/detail?name=flare_win_r247.zip
If there's demand for an OSX binary of the same, I'll release it too.
2011/03/03
Mouse Movement
Pavel Kirpichyov "Cheshire" has submitted a patch that enables mouse movement to Flare. For those of you who prefer that method, it's a great start! Look for revision 237 or later. To enable mouse movement, set mouse_move=true in your new save file.
Enemy HUD
Cheshire has submitted another patch! This one adds an enemy HUD on mouse-over. It shows the enemy's name, level, and current HP. Look for it in revisions 239 and later.
2011/03/02
v0.11 Video
by Sunburn. Warning: a couple spoilers of the new Cave level.
Over 1500 downloads in 2 days
No real publicity or advertising -- basically there are hundreds of people very interested in the project and its progress. Excellent!
So the obvious question....
What's Next?
Every time I put out a new version I get a flood of great feedback. Now that we're seeing what kind of Powers can be done easily, it's tempting to think about making new powers and replacing old ones. It's tempting to rework the entire Powers menu and make it talent-based with optional trees of powers. That may come eventually. But for now it's important to actually finish something -- I have a constant desire to replace just about everything in the game, but it's far more fun to actually have something worth playing.
The To Do List says that Vendors are up next. It's a much-needed addition for two reason: (1) a way to get the correct weapons at early levels and (2) potions! It's pretty hard to think about combat balance when a fundamental feature like "buying potions" isn't implemented yet.
Vendors
I'll probably do Vendors as a left-screen menu. Perhaps the menu will show the name of the vendor as a caption. There will be a large block of sale slots (similar to the Inventory menu). Probably drag and drop to buy or sell. The starting vendors might have: dagger, shortsword, leather armor, buckler, wand, rod, slingshot, shortbow, health potion, mana potion, and 10 random items level 1-4.
Vendors can have a fixed item list plus a number of random items. I'll probably use the Loot algorithm to give vendors random items -- just assign the Vendor a Level and he'll carry random items +/-3 levels.
Potions
I'll do a new implementation of Potions in v0.12 that uses the Action Bar. The Action Bar is not storage (like Diablo's belt system) but shortcuts to powers and items (like WoW or Torchlight). Put a potion on the Action Bar and it will show the number of potions in your inventory. It should be grayed-out or darkened when there are zero potions remaining.
Potions can be implemented with Powers. Perhaps with a new "requires_item" or "consumable" field that tells the system to remove that item upon use.
2011/02/28
Flare v0.11 "Enemy Powers"
Flare v0.11 is up! It's been a long, busy four months and I'm finally back on track. The focus on this release is Enemy Powers!
- Enemies have four slots for powers. New enemies shoot bows, cast spells, throw javelins, and more!
- Most powers moved to a config file.
- New: Cave level (head east from the Goblin Warrens. Creatures are level ~6)
- New creature art: skeletal archer, skeletal mage, fire antlion, ice antlion, antlion hatchling
- Some magical ranged weapons have Ice and Fire Ammo...
- Various bug fixes and new minor features
Special thanks to these contributors:
- Brandon Morris composed the Cave theme
- Thane "pennomi" Brimhall scripted the Cave enemies and events
- Gordon "mogrohl" patched the looting-while-dead bug
- ferrer patched uninitialized music variables
- BartK contributed new zombie sounds ("Braaaains!")
- Full list of credits here
Download v0.11
2011/02/26
v0.11 Release Candidate
Google Code revision 232 represents the release candidate for v0.11. As far as I know, the code features I want are complete. I may still add a couple bug fixes. I'll also add a few tweaks to pennomi's cave map.
Items that modify Powers
Items may now modify powers. This was mainly implemented to have various projectiles by bows e.g. to have slingshots shoot stones.
I converted all fire/ice resist slings and bows into weapons that shoot fire/ice missiles (and I switched the resist on them... a bow that shoots fire gives resistance to ice). This isn't just for show -- it adds that elemental trait to attacks. These weapon powers show up as Green Text on the weapon tooltip. The system can be used to add things like bleed/stun to weapon attacks. It can't change the base power type though (e.g. you can't make a melee sword shoot missile fire... yet).
Enemies with Elemental Resist/Vulnerability
The fire-shooting bows aren't just for show. Now creatures can resist or be vulnerable to Fire and Ice. Generally, if a creature shoots ice spells it is resistant to ice but vulnerable to fire (and vice versa). So Skeletal Mages that shoot Ice Shards take double damage from fire (e.g. Burn spell or fire weapons). The new fiery-colored antlions that spit fire take half damage from fire and double damage from ice.
New Creature Art
I added fire, ice, and hatchling versions of antlions. These are simple recolors/resizes.
2011/02/24
Monster Levels and Power Definitions
Two new Wiki pages have been added.
Monster Levels is a guideline of what base stats a monster should have at each level. It's kinda untested at the moment, so these numbers will shift as the game matures.
Power Definitions is a list of all the available elements in the powers.txt file. This is a handy guide to creating new powers.
2011/02/15
Random Updates
Fireball (a ranged magic spell cast by some enemies) has new art. I figured out that fire has to be significantly turbulent to register as animated, especially when flying across the screen.
This isn't something I planned on doing until later, but I added on-hit and wall-hit after effects on spells. Now that's how Blood Strike creates its blood spurt on hit. Some elemental spells have on-hit and wall-hit sparks. And finally, arrows stick into walls. This actually helps with aiming -- sometimes a missile will clip a wall or corner and it wasn't obvious before. I think the result feels much better and adds a lot of needed polish.
Since I've come this far, I want to change the way ammo works on ranged weapons. I want to make ranged weapons have a specific power as ammo. Then I'll implement slingstone missiles and arrow missiles as separate powers. This should also let me create more powerful-looking missiles for magic bows.
2011/02/14
Weekend Update
I was able to update several items this weekend (revision 219).
- Created a nice spear animation
- Created a goblin spearman to match. You'll find two in the Atrium and two in the Complex.
- Updated the cave tileset to include exit markers, crates, barrels, chests
- Linked the Goblin Warrens to the Cave Level 1
- Enabled fire/ice resist gear. Damage reduction due to resistance is calculated first, then regular armor absorption is applied.
Here's what I want to finish for v0.11:
- Create a new Shoot animation
- Populate the cave level
2011/02/07
Enemy HP Lowered
I lowered enemy HP across the board. It shouldn't be a chore to dispatch one enemy of equal level -- this is an action rpg, after all. Enemies that take several hits will now stand out and appear tougher. This effect was present in Diablo, where by far most enemies died in one attack.
2011/02/06
Cave Test Map and Speed Improvement
I'm working on a new cave map. It's not populated yet but it's looking great. I also added SDL_DisplayFormatAlpha() calls when loading SDL Surfaces. This seems to greatly improve performance, at least on my dev machine (OSX) -- hopefully it's going to help on more platforms.
2011/01/31
Level Cap raised to 17
I've gone ahead and raise the level cap to 17. This allows one hero to unlock the entire proficiency and powers trees. The XP scale will be going through several iterations but should be fine for alpha purposes.
2011/01/29
Enemy Power Cooldowns
Added cooldowns per power slot (currently melee physical, melee magical, ranged physical, ranged magical) for enemies. While doing so I noticed that enemy ranged powers weren't using the global cooldown. No wonder they could shoot/cast so quickly! I'll check in the update tomorrow.
One more item off the list. Flare 0.11 is way overdue!
2011/01/25
Dispelling the Cave Magic
If you're wondering how I made those Cave Tiles so that they seamlessly fit together, here's a rough tutorial.
2011/01/23
High Poly Modeling
I want to take the time to do nice, polished, high-poly models. But instead I'm putting that time into Flare. The sprites I need are so small that quality models aren't really necessary. A superb model might take me 80 hours; I could do a lot of Flare code in that time.
So I put together a simple skeletal archer and skeletal mage. They'll serve their purpose: get something working now. It can be made prettier later, or maybe in a future game.
0.11
This has been the longest time span between releases for Flare. I hope to fix this soon. A few more things to go:
- Goblin magic-user
- Parametrize multishot, freeze, vengeance
- Cooldown per enemy power slot
- Monster line of sight option
- Cave map
2011/01/18
Creature Options
I've given monsters lots of great powers, but it seems silly for identical creatures to throw out very different powers. I want to be proud of each release... so it's time to make monster varieties.
- Goblin witchdoctor
- Skeleton mage
- Skeleton archer
2011/01/12
Indie Games
I got to play several great indie games in 2010. Even some very small experiences have left a strong impact on the way I see games.
Minecraft
I've put more hours into Minecraft than any other game this year, indie or not. My main save world hasn't changed in weeks though. I built myself a luxurious castle and feel like a conqueror, but now I'm quite comfortable. Feels like I "won". Maybe I should build a town surrounding my castle walls, or nearby cities or dungeons.
Minecraft is a 3D experience that isn't overwhelming. The interface is simple, with the world divided into 1m^3 blocks. Most of the gameplay is taking a block or placing a block. Yet, with a simple set of blocks one can make anything. Minecraft also manages to make darkness scary again, without cheap tricks. Finally, Minecraft shows that a well-done algorithmically generated world can be inspiring.
Super Meat Boy
To me, Super Meat Boy is all about polish. The cutscenes are well-done and add a specific attitude to the game. Meat Boy is squishy, bouncy, and leaves red trails and splashes everywhere. Accomplishments are loud and satisfying. Controls are impeccable.
Replayability is finely tuned -- there are dark versions of most levels, secret levels and unlockable characters, rewards for doing levels faster (A+) or harder (bandages), and stats tracking for overall progress and number of deaths. This keeps many players at it until they have accomplished everything possible.
Mighty Jill Off
I played a lot of Mighty Bomb Jack back in the day so I'm glad to see that movement mechanic brought back. I actually enjoy the game's short length -- it does well to explore the basic combinations of obstacles and movement. Here's an example of a well-contained experience that doesn't take years to produce.
With Flare I took on a project at the edge of what I can accomplish -- been working on it a full year and still have a ways to go. After Flare I will probably make several small games. Mighty Jill Off is inspirational and shows how a game doesn't need hours and hours of content to be fun.
Of course I also like the human themes explored in the very simple story. Sex doesn't have to be gratuitous, or vanilla, or absent in video games.
Every Day The Same Dream
To me this stretches what games can be. It's an emotional piece of art with minimalist graphics and interaction.
2011/01/02
Refactoring Powers II
I've been working on some tedious refactoring. I've got most of the powers moved to config file.
Some powers are a bit busted, temporarily. E.g. slingshots will shoot regular arrows. I'll probably make a new graphic that works for both slingshots and arrows.
The powers not yet converted are the complicated ones: Multishot, Freeze, and Vengeance. Multishot will become a "multi-missile" base type where the number of missiles and the angle between each are options. Freeze will have a "repeater" base type where the number of hazards and the distance/delay between each are options. Vengeance will have an on_block component and a requires_buff component, plus will require a separate "buff" spell I think. I might have to make "buff" a new base spell type.
2010/12/17
Big Picture: CC, EFF, FSF
Making and playing games are great hobbies. On terms of global importance, though, these things are pretty small.
This week four important individuals became backers of Justin Nichol's Fantasy Portrait Marathon:
- Mike Linksvayer, Vice President of Creative Commons
- Joi Ito, CEO of Creative Commons
- Lawrence Lessig, founding board member of Creative Commons and former board member of the Electronic Frontier Foundation
- Richard Stallman, founder of GNU and president of the Free Software Foundation
I'm thrilled that their portraits will appear as NPCs in Flare. In return, I support these important organizations and I hope you will as well.
Creative Commons
Creative Commons (CC) is an organization that creates art content licenses which allow creators to give various permissions to users. These licenses are a valuable part of our remix, mash-up, and sampling culture.
Electronic Frontier Foundation
The Electronic Frontier Foundation (EFF) fights for user rights the world over. They focus on issues like internet free speech, privacy, and fair use.
Free Software Foundation
The Free Software Foundation (FSF) promotes computer user freedoms through licenses that grant and protect freedoms, free software development, and campaigns against DRM and software patents.
2010/12/15
Project renamed to FLARE
This project is being renamed to FLARE (Free/Libre Action Roleplaying Engine). Stay tuned for more info...
2010/12/14
Portraits of Giants
I previously mentioned that Justin Nichol is doing a Kickstarter project to make Creative Commons Fantasy Portraits of donors.
The idea is simple: Justin needs tuition for school next semester. He'd rather create art for video games than work at Starbucks. So, donors can pledge some cash and in return get a digital painting of themselves. These paintings will be released under the Free/Libre license CC-BY-SA (and GPL for compatibility with games like Wesnoth) and are designed to fit with the style of FLARE. They will be PC portrait choices or NPCs in the final game (probably displayed during conversations).
Well, only a few days into the Kickstarter we see some interesting names: Joi Ito and Mike Linksvayer -- the current President and Vice President of Creative Commons! Somehow they've gotten wind of the project and thought it's a neat idea.
We're thrilled! And it seems only fitting that giants of the Free/Libre, Copyleft, and Creative Commons community make guest appearances in my free-licensed game. So I joke: what if we ask other people? Stallman, Doctorow, Lessig... I know those guys are busy. It can't hurt though, right?
Today I get an email response from Lessig that says "done". Holy hell, Lawrence Lessig has commissioned a fantasy portrait of himself and will appear in my video game! Justin, the artist, is beyond excited too -- his portfolio will forever contain commissioned portraits of three giants in copyleft culture. And I'm excited because Lessig -- one of my personal heroes -- will end up as a literal hero in my video game!
[--Update--]
I also got an email response from Richard Stallman! He admitted he could not donate towards a project that used the term "Open Source" to describe itself, but would gladly participate or give a nod of approval if we instead agreed to use the terms "Free" or "Free/Libre" to describe it. I've decided to take it a step further and rebrand the entire project. I'll be posting more about this later today.
2010/12/10
Refactoring Powers
Once a system is far enough along, any refactoring is daunting. Especially when it involves temporarily breaking code that works well.
I want to define powers in config files. Ideally it should be easy to make new powers similar to existing ones. The config files might get rather long, but them's the breaks. Time to break down the plan:
- Create a config file for Shoot
- Create a new struct to hold power data
- Copy ini file code to load power data
- Rework Missile routine to use this Shoot struct
- Create power config file for Shock
- Generalize Missile routine to handle common missiles
That should get me pretty far. Once I see the generalization for Missiles it should be simple to adapt the same for the other types.
Harder thought will be required for a power like Vengeance. I'll figure that part out later...
2010/12/06
Character Creation Screen
Time to lay down my ideas about a character creation screen.
Because of OSARE's classless system, the Character Creation screen is mostly for cosmetics.
So the choices at Character Creation are:
- Character Name
- Character Gender
- Character Portrait
Note, in the future Gender choice could be changed to Race/Gender choice. Each race-gender combination requires its own base model, own animations, and own equipment layers. At first I plan to only support two base options: human male and female.
The interesting bit will be choosing a Character Portrait. If you think hard back to Diablo 1 (or look at a few screenshots) you'll see that the hero sprites have these layers:
- Hero head or helmet
- Base full-body armor
- Main hand weapon
- Off hand item
The other Diablo 1 equipment slots are not shown (two rings and an amulet) on the hero sprites.
OSARE does not have a helmet slot, and the three jewelry slots are replaced with one Artifact slot. Otherwise the display is the same. Instead of the helmet slot, I will be making a set of head choices (e.g. various skin and hair styles). These heads will match the Fantasy Portraits by Justin Nichol.
2010/12/04
PayPal removed
I removed PayPal as a donation option. I do not agree with their closure of the Wikileaks donation account. Previously they froze Minecraft's account without warning, causing much headache/effort to that indie developer. I simply don't want to do business with them anymore.
2010/12/01
Creative Commons Fantasy Portrait Marathon
OpenGameArt contributor Justin Nichol is taking pledges towards creating 30 high-quality fantasy portraits. They will be featured in OSARE as PC portrait choices or story-line NPCs. Additionally these portraits will be uploaded to OpenGameArt under CC-BY-SA and GPL licenses. Finally, these pledges will help Justin attend his next semester at Concept Art Academy in Pasadena.
A $50 pledge gets you a fantasy portrait in your likeness! Maybe you'll even be the first vendor, quest NPC, or villain of OSARE...
2010/11/29
Art To Do
OSARE has a few months of alpha code tasks before it's time to really focus on more art. However, that new art should trickle in with each release until Beta.
New Enemies
- Dragonmen with paladin and priest equipment.
- Elementals with fire and ice main options
- Wyverns
Enemy Variants
- Antlion hatchling and queen size variants
- Skeletal archers and mages
- Goblin war chiefs and shaman
- Minotaurs with tribal and armored options
Existing Creatures
I'm on the lookout for existing creatures I can add to osare. If you have an open-licensed creature and want to see it in my game, let me know!
There are plenty more fantasy-standard creatures I'd like in my game. Ogres, dragons, centaurs, gnolls, demons, etc. all deserve a spot in osare.
Tilesets
The Caves are coming in v0.11, but there are plenty more tilesets I want to do.
- Grassland
- Town
- Forest
- Desert
- Mountain
- Tundra
- Ancient Bridges
- Temple Interior
- Coastal
- Wizard Academy
- Villain Fortress
Equipment
I want to add hammers and axes, both using Physical requirements. They'll basically operate the same as swords in my current loot setup. This would make physical weapons much more common than other weapons. That's okay by me -- it's harder to survive anyway when you have to get into melee range to kill anything.
- Club (Phys 2)
- Mace (Phys 3)
- Hand Axe (Phys 3)
- Hammer (Phys 4)
- Axe (Phys 4)
- Greathammer (Phys 5)
- Greataxe (Phys 5)
I want to have visual variants on all items. Each weapon/armor should have a mundane, high quality, and epic art version. Maybe a few color variations for each.
2010/11/22
v0.11 Plans
This changes almost daily but it helps me to write things down. The more I write down, the less I have to juggle mentally.
- four power slots per enemy
- various power fixes for creature use
- add slot-based power cooldowns for enemies
- move all power data to config file
Some things will slip to later releases. It's easy to forgive creatures for being kinda unintelligent if they have interesting powers.
What this release will allow is an explosion of creature variations. To help with that I hope to include several variations on existing creatures. E.g. I want a skeleton variation that is obviously a spellcaster, and one that is obviously an archer.
I'll add at least one cave map too. If you've played osare as much as I have, you're ready for a change of scenery.
Timeline? I'll be traveling this weekend. Hopefully during the down time I'll get some code done. v0.11 should be ready early December.
Future Timeline
2010 has been the year of OSARE's alpha development. I released v0.01 on January 1st, 2010. I've almost been able to do one release per month. Note that OSARE has been my priority #3 at best: work and girlfriend come first. So I'm pleased with this pace.
OSARE still has big milestones left to go. If I'm only concerned with essential features:
- Vendors/Merchants
- NPC Dialog
- Simple Quest System
- Title Screen
- Load Game Screen
- Character Creation Screen
Glance at the list and you'll notice that it's mostly about menus. The core gameplay -- the action part of the game -- is already near completion. I would love to have those things done by May 2011 (and I think it's doable). At that point the project might be (gasp!) Beta.
Development will still continue as-needed. It's important for me to deliver a real game, instead of making tons of game types possible. These things are not going to be a priority. I probably won't be needing them for my first osare game. Essentially -- these features are neat, but distract from the goal of having a great action rpg.
- Dialog trees
- Reputation system
- Crafting system
- Minigame (e.g. fishing) system
- Scriptable cutscenes
- Puzzle style bosses (e.g. Zelda)
- Pets or hirelings
- Achievements and unlockables
2010/11/21
Enemy Powers
Playing with enemy powers is far more fun than I expected.
If you check out the latest update you'll find a few bizarre monster combos. My favorite is teleporting antlions.
2010/11/18
Making Powers Configurable
v0.10 added hero powers in a pretty crude way. I added power variables as needed until the entire first set was complete. With that finished, now I need to move all the powers out to config files.
Power config files will contain variables like name, description, requires_mana, animation type, graphics and sounds, etc. Then I'll have to modify the PowerManager class to handle any variation on powers, instead of branching on specific powers. PowerManager will also handle an arbitrary collection of images and sounds.
The Powers menu will be changed under the hood. A config file will allow slotting any power into the given slots. Powers could be swapped out. New powers could be added for even-numbered stat combinations. In the future, the entire layout of this menu will be configurable (but probably constrained to the given window size).
Each power will still rely on a base type. Current base power types:
- consume (for single-use items like potions)
- nonDamage (various special effects)
- missile (Shoot, Piercing Shot, Shock)
- missileX3 (currently only used by Multishot)
- groundRay (currently only used by Freeze)
- single (nonmoving area attacks that are dangerous on a single frame, like Burn and Quake. Includes melee attacks.)
New power types will simply be added as needed. I don't mind having base types that are very niche (only used by one power) but it would be nice if I can generalize them (e.g. turn Missile x3 into MultiMissle that can handle X missiles separated by Y degrees. Should be possible to make a multimissle spell that, for instance, shoots missiles out in a complete circle around the player). Ground Ray will still be pretty niche, but at least similar powers can be done with a different visual style (e.g. a flame wave or shockwave).
Hooks will need to be added for powers that work in special ways. E.g. Block is an entire state, not just a power that occurs briefly. Vengeance is a power that is activated and expended in areas of the code unrelated to Powers in general. In the case of Block, it might simply need to be its own power type. Vengeance could belong to a new class of powers that trigger upon attack (Life Stealing could be added to this type).
All this effort so that we can easily slot powers for monsters...
Enemy Powers
Enemies don't have PMOD stats in a meaningful way. Instead, enemies will have four fixed slots for powers.
- Physical Melee (usually a melee swing attack)
- Physical Ranged (shooting a bow/crossbow or throwing a projectile)
- Magical Melee (a close-ranged spell)
- Magical Ranged (often a missile spell)
Furthermore, enemies will have % chance per frame of activating these powers. This % can be zero (e.g. some creatures can simply have no magic, or no ranged). First, the enemy will determine whether he's in melee range or physical range. Then, a random chance to active the appropriate powers.
Each power (in the config file) will have a unique numeric ID. Then, each enemy file will allow assigning these power IDs into the four creature power slots.
Further behavior will be determined by simple % chances to act. E.g. some creatures will favor staying at ranged, so they will not approach the hero (instead, staying back and using ranged powers).
2010/11/16
Cave Tilesetdef
The "Tilesetdef" file for the Cave tileset is complete and checked in.
For those wondering, this is the file spec:
The first line is the name of the .png file for the tileset. It's assumed this file will be in the images/tilesets folder.
Each line after that contains the following data:
- index,x,y,w,h,offset_x,offset_y
where
- index is a two-digit (always two-digit) hex value from 00-ff. This corresponds to map layer data in the map files (note, often the map files are encoded in decimal instead, so you might have to do the conversion to match them up)
- x,y is the top-left corner of this tile image
- w,h is the width-height of this tile image
- offset_x and offset_y describe where the tile should be drawn in relation to the base/floor tile slot. Assuming a rhombus-shaped isometric tile, the offset (0,0) is the exact center of the rhombus. Screen left (-x) and up (-y) are positive offsets.
Tilesets are not arranged exactly the same way each time e.g. swapping tilesets on a map does not yield a usable map. But the tiles are put into these basic categories. (The categories above 0f are not enforced in any way, this is just to help keep them organized)
- tiles 00-0f are reserved for collision types
- tiles 10-3f are floors
- tiles 40-7f are walls
- tiles 80-bf are standalone objects
- tiles c0-ff are oddly-shaped, multi-tiled, or special tiles
2010/11/14
Cave Tileset
The first version of the Cave Tileset is complete. Check it out over at Open Game Art! I still need to create the tilesetdef file so it can be used in-game. I might get around to that tomorrow.
Rather than create full cave maps now, I'm sort of doing cave room sketches in Tiled. Putting together interesting set pieces. Then, later, it's just a matter of copy/pasting and connecting them up to make larger, thematic caves.
Cave Sketches
In the above render I'm experimenting with a serene sort of cave with a monolithic rock surrounded by water. I love when game maps have landmarks that don't require explanation but instead leave you in wonder. Also, you see I'm using cave litter sparingly. Too much and the scene is cluttered; too little and it seems empty and unfinished.
Here's a hub room for a mining operation. Would work great as a classic "first dungeon" for a young, frightened adventurer.
You are in a maze of twisty little passages, all alike.
2010/11/11
File Format Changes
I made two small changes in some of the file formats. I wanted to make these changes now before too many people rely on them. Basically these new values make much more sense.
- Save game spawn line (x,y) location is now tiles, instead of map units
- Map Event location (w,h) is now actual tile width/height, not (w-1,h-1)
If you try the latest code and want to preserve your save game, simply delete the entire line that starts with "spawn=". This will cause you to spawn at the beginning of the starting map, with everything else intact.
Contributor Map
I put up a new Google map showing contributors from around the world. It's rather blank so far; I'm contacting major contributors now to get permission to pin them to the map! (If you have contributed, please contact me!)
2010/11/07
Isometric Tiles Tutorial
Added a tutorial on how to create good-looking isometric 2D tiles using Blender. This should help anyone get started in making custom art for OSARE (and most other isometric games).
2010/11/02
Art Week
I have next week off from work. Staying at home. Letting the brain rest. So I'm also putting a moratorium on new osare code next week.
Instead, I'll spend the week relaxing and making osare art. I'm hoping to put together the beginnings of two new tilesets: grasslands and caves. I started making grass and water tiles way back, but I think I can improve on them now.
2010/10/29
And next up...
Version 0.11 will likely center around monsters. Now that the hero has Powers, it's only fair if we get skeletal archers and goblin witch-doctors.
Features coming up soon that will probably go towards 0.11
- Monsters will have four slots available for powers: physical melee, physical ranged, magical melee, magical ranged
- Move Powers to config files so they're easy to alter/add
- Add A* pathing to help monsters navigate around obstacles
- Enemies enter combat when their nearby ally enters combat
- Render a few equipment variations of existing monsters
Anything much further ahead is wildly subject to change, but here's a rough roadmap to the future. Some of these might be broken into multiple releases.
0.12
- NPC Vendors
- NPC Dialog
- Very primitive quests
0.13
- Title Menu
- Load/Save Game Menu
- Character Creation Menu
2010/10/25
OSARE version 0.10 "Powers" released
New in this version:
- Magic, melee, and ranged powers
- Action bar support for powers
- Click-to-activate action bar and menus
- XP bar on HUD
- Minimap on HUD
- New health/mana bar images
- New creature: Minotaur
- README.txt to help new players
Video
Downloads
2010/10/17
v0.10 Progress
I have most things I want done for v0.10. The only thing I'd want to add in this release is placing potions on the action bar. But seeing as there isn't an easy way to get potions right now, it isn't an immediate priority.
Time for testing. If you try the current source from Google Code let me know what you think.
For this upcoming release I will include a good README file that explains controls and what works vs. what doesn't.
2010/10/15
Hello
How are you?
I am busy.
I'm considering replacing the "Charge" power. It would just be a pain to implement. I need to replace it with a Shield Bash or a Missile Ward.
I'm hiring a sound effects/foley artist to finish up the remaining power sound effects I need. Please contact me if you're interested. I will update this post once I've found someone.
- Shooting a bow
- Blocking with a shield
- Echoing warcry
- Earthquake rumble
- Force field appearing
[--Update--]
Brandon Morris "Augmentality" is helping with these. Thanks!
2010/10/07
Too busy! So I squandered my lunch break on this.
[--update--] Added a starfield background (view at 480p) and bullets.
2010/10/03
Power Sound Effects
I'm adding sound effects to powers. These are the ones that need effects; crossing them out as I add them to my local build.
- Shoot (slingshot/bow)
- Block (hollow metal thump)
- Warcry (yell echo)
- Shock (electricity) - augmentality
- Quake (rumble)
- Freeze (ice shatter) - bartk
- Burn (fiery blast) - bartk
- Heal (warm sparkles) - remaxim
- Shield (force field)
- Teleport - augmentality
- Time Stop (ticking) - remaxim
2010/09/27
First Game World
The first osare-powered game (you're seeing the beginnings of it in the "Game World" section on this site) will be a generic fantasy hack & slash. I'm using Wu Xing as a vague inspiration for the world layout. Examples follow:
Earth
The center of the map has mild environments. The earth temple is guarded by a gold dragon.
Wood
The east side of the map is springtime, windy, and heavily forested. The forest temple is guarded by a blue dragon.
Metal
The west side of the map is autumn. Perhaps mines, caves, mountains. The metal temple is guarded by a white tiger.
Water
The north side of the map is tundra, frozen, glacial. The ice temple is guarded by a black tortoise.
Fire
The south side of the map is hot, summer, desert. The fire temple is guarded by a phoenix.
The ordinal directions can be mixes of these. Northwest (Water + Metal) might be my bridge area. Southwest (Metal + Fire) might be volcanic. Southeast (Fire + Wood) might be tumbleweed badlands. Northeast (Water + Wood) might be swamp/marsh.
Next Update
Working on a side project that's due on 2010/09/30 so there won't be OSARE updates this week.
v0.10 is around the corner. Things left to work on:
- Line of Sight checks on Freeze, Burn, Teleport
- Items on Action Bar
- Clicking on Action Bar
- Adding sound effects for powers
Things that probably will be implemented later:
- Charge implementation
- Lore implementation
- Return implementation
- Cleave graphic
2010/09/22
Screenshots and Videos
I set up new screenshots and videos pages. I can't believe I let the project go this far without a screenshots area. It's always the first thing I look for when checking out a game project.
2010/09/18
Powers Update
Most hero powers are now implemented, if in a crude way. I need to add line-of-sight checks for several powers.
Notably missing: Lore (not sure how I want to handle it yet), Return (should be easy), and Charge (could be a mess).
2010/09/17
Selling Items
Traditionally in these kinds of games, selling unwanted items means a trek back to the vendor every time your inventory is full. Some games like Torchlight added a convenience feature to allow your pet to handle this errand for you. I'm going one further: just CTRL-click an item in the inventory and you sell it, no matter where you are. This has been implemented in the latest svn check-in.
Perhaps this ruins immersion or simulation, but it's not like hack & slash games are sims. Assume your hero stashes unwanted items somewhere and does the actual transaction when you do reach a vendor. This also removes the real need for a two-way Town Portal and encourages uninterrupted action. I'll make it so this instant-sell can be disabled, in case games don't want that feature.
Mini Map
Added a simple minimap. I hadn't planned to do that just yet but it didn't take long.
I might add a new collision type for invisible walls. This will help mark off exits and keep hidden passages secret on the mini-map.
[--update--]
Added invisible wall type. This is tile #15 (h0f) of the tileset (the first 16, 00-0f, being reserved for collision). This acts like a wall when it comes to collision but does not display in the minimap. Now, map exits appear as openings on the minimap but are solid walls -- this will help with the Teleport spell to keep the player from getting off the map. I'm also using these "invisible" walls to keep hidden passages from being spoiled on the mini-map.
2010/09/16
Speed
Player/Enemy speed is stored as int coordinates. Diagonal speed vs. cardinal speed is calculated using the Pythagorean Theorem.
There are rounding errors of course. Here is a table of acceptable speed/dspeed for enemies. The hero uses 10,7 (it would more accurately be 10,7.07 which is close enough). Note that when moving diagonal (map coordinates; this looks cardinal on the screen) the dspeed is applied in both directions.
- speed,dspeed
- 3,2 (rotting zombie, goblin)
- 4,3 (skeleton, zombie)
- 6,4 (goblin charger, skeletal warrior)
- 7,5 (antlion, zombie boss)
- 9,6 (skeleton boss)
- 10,7 (hero)
- 11,8
- 13,9 (hero with Boots of Speed)
- 14,10
- 16,11 (hero with Boots of Travel)
Item bonus speed (boots) are multiples of 3. An item with 3 speed actually adds (3,2) to speed.
Projectiles/missiles use floating point coordinates to accommodate arbitrary angles instead of the cardinal+ordinal eight.
2010/09/15
Powers Progress
- Shoot
- Swing
- Lore
- Return
- Bleed
- Block
- Shock
- Heal
- Multishot
- Warcry
- Quake
- Shield
- Cleave
- Charge
- Freeze
- Teleport
- Piercing Shot
- Vengeance
- Burn
- Time Stop
2010/09/14
Buffs and Debuffs
These buffs/debuffs are planned for my game:
- DamageOverTime: lose 1 hp per second for the duration (e.g. bleed, poison)
- HealingOverTime: gain 1 hp per second for the duration (e.g. food)
- Stun: unable to move/act for the duration (breaks upon damage)
- Immobilize: unable to move for the duration
- Slow: movement speed halved for the duration
- Shield: absorbs damage up to the shield amount
- Vengeance: when this ability is available, gained when blocking (up to 3)
These buffs/debuffs have to be stored in StatBlocks. The routine that gathers renderables should check each active StatBlock. Each of these types will have an associated icon. If they do have an animation (e.g. Shield), the animation info is stored in StatBlock. The sprites will be stored in PowerManager.
Other animations happen over the player when casting a new spell (e.g. Heal, Return). These could be simply handled as non-damaging Hazards.
Finally, some animations happen upon impact (e.g. blood spurt, electrical sparks). These can also be non-damaging Hazards created during the TakeHit() routines of Avatar/Enemy.
Actually, all after-effects should be applied by TakeHit(). Usually these will be debuffs set to the StatBlock.
Powers Analysis
Taking a look at each power and how they operate.
- Shoot creates a Missile hazard. Already implemented.
- Swing creates a Single hazard. Already implemented.
- Lore isn't implemented, not yet determined how this will be handled.
- Return creates a NonDamage hazard; when the animation is done, set the teleportation variables. Maybe use some kind of return_countdown variable in StatBlock to facilitate this.
- Bleed upon hit sets a DamageOverTime debuff. Create a blood spurt NonDamage hazard.
- Block is a special case. It is a unique state. Transition to the state when the block key is pressed. Transition back to Stance when the key is released. Set a "blocking" bool in StatBlock.
- Shock is a Missile hazard. Upon impact it has to chain to another creature. Not sure the best way to implement this. Perhaps within HazardManager where it has access to enemies and collision data. The routine should be in PowerManager itself; HazardManager should call that routine and pass the needed data (collision info and living enemy positions). This is such a specific implementation that it might slip to another release. Tagged with Air trait.
- Heal creates a NonDamage hazard and sets hp. Not yet implemented.
- Multishot creates three Missile Hazards. When I convert to polar coordinates I can offset (+/-) Theta to get the angle of these side missiles. Multi hit is handled by the 5 frame invulnerability.
- Warcry removes all debuffs from StatBlock. Create a Single hazard that doesn't do damage but has the Fear after-effect.
- Quake creates a Single hazard with a Stun after-effect. Already implemented. Tagged with Earth trait.
- Shield sets Shield in StatBlock. No hazard.
- Cleave creates a Single multi-target hazard with a very large radius
- Charge requires a specific implementation. Probably needs to be a distinct Avatar/Enemy state with increased speed at a floating point (x,y) angle. Basically the hero becomes a missile. Stun after-effect.
- Freeze is a series of Single hazards with execution delays. Care should be taken to not let Freeze travel past walls, so PowerManager might need a copy of the collision grid. Tagged with Ice trait.
- Teleport creates a NonDamage hazard and sets an intramap teleport at the mouse target location.
- Piercing Shot creates a multitarget Missile hazard tagged with ArmorPiercing trait.
- Vengeance causes a stack of Vengeance buff to be created when taking a hit. Casting Vengeance creates a Single hazard with increased accuracy/crit and removes Vengeance stacks.
- Burn causes a Single hazard with wide radius. Already implemented.
- Time Stop creates a wide-radius hazard with the Stun aftereffect.
2010/09/13
Missile Accuracy
Missile spells have a radius and speed. Radius is how close a creature has to be to the projectile for an attack roll to take place. Speed is the distance the projectile moves each frame.
Mouse aiming shouldn't be frustrating. The best way to aid this is to give projectiles a very wide radius. However, make the radius too wide and a stationary enemy might be attacked by a projectile twice on consecutive frames. This messes up accuracy as a stat.
One solution idea: each time a missile attacks an enemy, hit or miss, mark that enemy as Targeted. This enemy is no longer a valid target of this projectile. Targeted can wear off after a very short time (say, 5 frames). Because of the global cooldown (1 second) and because there are not multiple heroes, we can just set Targeted every time an enemy is attacked and do auto-miss if still targeted. That way we can increase the radius of ranged spells without worrying about overlapping attack rolls. One side effect is that the Multishot skill is fixed and becomes an AOE skill as planned instead of a WeaponX3 skill.
One concern with this solution is firing a new missile while the previous missile is active. I believe this is not possible with current timing.
2010/09/12
AOE Spells
I added a couple AOE spells, as those are fairly easy to implement: Quake and Burn. Note Quake doesn't have its Stun component yet.
Also note that these spells are massively overpowered at the moment. I will be changing them so they can only hurt creatures if you have line-of-sight on them. Also I'll change Burn so that you can only cast it on a location if you have line of sight on that location.
Burn will still be overpowered because of its long range + radius. Right now monsters won't pursue if you are out of their threat range, even if they get hurt. I will have to modify creature behavior in two ways: (1) if an enemy gets hurt but the hero is out of threat range, pursue anyway; (2) if an enemy gets hurt but the hero is not in line-of-sight, use A* to find the hero.
2010/09/11
Projectiles
The latest check-in (revision 128) contains simple support for projectiles: arrows and shock spell. Note that Shock isn't fully implemented (it doesn't chain). You can't use Shoot unless you have a ranged weapon equipped. Normally you wouldn't be able to use Shock until you unlock the power, but I haven't finished the changes for the ActionBar yet.
Note that simple hero sword swings are also converted to the new power system. Enemies aren't converted yet, nor are potions.
2010/09/10
Armory Page
The new Armory page lists all the weapons and armor currently in the game!
Vista Workaround
Using Vista but having problems with OSARE? I've uploaded v0.09b which may help.
It looks like when running an .exe from Windows Explorer, the "Working Directory" is not always set to that folder. So when I try to load game assets (images/sounds) it fails. It fails ungracefully because I need to fix error handling in my code. But for now I've added Launcher .bat files that should help make sure the local folder is the one used when running the game.
If you have Vista please try it out for me and let me know. Thanks!
2010/09/09
Action Bar and Powers
Time to nail down the logistics of the Action Bar and Powers.
Action Bar already has a place in the dependency hierarchy: GameEngine -> MenuManager -> MenuActionBar. Note that Avatar.logic() will need to read from MenuActionBar to determine actions.
It's possible that Powers need to be accessible in several places: MenuActionBar, MenuPowers, ItemDatabase, Avatar, Enemies, etc. It probably does not have dependencies of its own. So might create it in GameEngine and pass its pointer to the children who need it.
Action Bars slots (1-0 numbers and M1/M2) are loaded with Powers. Those 12 slots will be integers of the appropriate Power ID.
Powers have ID and Type. Each type (or collection of types) will be handled by its own function. An activate() function in turn calls the appropriate handler function for the type.
Example 1: Drink a Potion. Currently the activate() for this item is in ItemDatabase but it will move. Drinking a potion can be triggered in these ways: (1) right-click on the inventory, (2) hotkey or click the potion on the action bar. Play the potion sound effect. Alter Avatar.StatBlock.hp. Remove the potion from the inventory.
Example 2: Shoot a Bow. Triggered by hotkey or click the potion on the action bar. Create a new missile hazard. Change the Avatar state to Shooting.
Example 3: Cast Shock. Triggered by hotkey or click the potion on the action bar. Create a new missile hazard. Change the Avatar state to Shooting. Alter Avatar.StatBlock.mp.
To have access to activate(), MenuActionBar needs a pointer to Powers. Same with MenuInventory and MenuPowers, to allow right-click use. Powers will have its own set of sound effects. Powers will have a public Hazard (or queue of Hazards) so that the HazardManager can pick those up. Powers needs access to Avatar.StatBlock to change various stats. I think that's it.
What about Powers generated by enemies? I think this is basically handled similarly. Powers needs a link to the Enemy.StatBlock (in fact, activate() should probably take StatBlock as a parameter). Hazards have damage sources so that's taken care of.
Where are buff durations, etc. stored? In the StatBlock.
Where are animations and graphics for Powers stored? Probably in the Powers class. When getting renderables for Hazards we'll need to read some info from Hazard and some from Powers. When getting renderables for Buffs/Debuffs we'll need some info from StatBlock and some from Powers.
Powers could be stored in a powers.txt file.
[power] id=1 type=basic_ranged #defines tells activate() which name=Shoot requirement=po,1 #places this power in the skill tree state=shoot description=Basic Range Attack [power] id=2 type=basic_melee name=Swing requirement=pd,1 #places this power in the skill tree state=swing description=Basic Melee Attack value=p # damage is based on the equipped Physical weapon [power] id=8 type=cast_heal name=Heal requirement=md,3 #places this power in the skill tree state=cast description=Restore health sfx=heal gfx=heal value=m # healed amount is based on the equipped Magical weapon [power] id=100 type=potion_hp sfx=potion name=Health Potion description=Restore 100% Health value=max_hp # healed amount is the drinker's max hp
When a power is used that requires the user to change state (e.g. melee swing), the power (often, hazard) activates on a specific frame of that animation. The action frame should be a parameter in the animation part of StatBlock.
Where are the power animations defined? perhaps a power_animations.txt in the powers folder.
2010/09/08
Why?
I want to write a long overdue post about why I'm making OSARE. So many thoughts churning through my head that I need to commit them to paper so I have room to think again.
I turned 30 this year. 30 has this way of making me feel both very old and very young at the same time. I've been a gamer for 27 years and a programmer for 18 (professionally for about 10). The peak of my gaming and coding was during the 90s, when I had summers of nothing to do but tinker with code or play RPGs. Also during the 90s was the height of 2D gaming -- beautiful pixel art or pre-rendered sprites seemed to push what we thought possible in games. The first generation of 3D games in that era looked primitive by comparison.
Also during the 90s is when I created and finished games. One game had a very primitive Bards-Tale style view and turn-based combat. Another had Gauntlet-style action and a nice map editor. Since then I've started and discarded countless new engines.
Typically the engines I create are of two genres: overhead or isometric RPG (action or turn-based), or side-scrolling platformer. These two genres represent my absolute favorite style of games at the height of 2D gaming. Even now when a Final Fantasy Tactics or Castlevania game comes out for the DS I'm there on release day.
One constraint I had for the longest time is creating art. I did poor quality pixel art for most of my projects. I started tinkering with Blender in 2002 but only in the last couple years have I finally learned enough to make game-quality art. I'm still learning about making polished 3D art, but my skills are enough that I can make pre-rendered 2D sprites that look similar quality to games of the 90s.
Of my favorite genre of games, some are well represented in Open Source. There are already plenty of platformers. There are plenty of console-style and turn-based RPGs. There aren't many prominent action RPGs -- surprising given the immense popularity of Diablo.
So I set off to make an isometric action RPG in the spirit of Diablo. I started it as a Java Applet, but quickly realized I didn't want to be streaming megs of content every time someone launched the game. I chose C++ because it's still the primary language of non-casual console and PC games. I chose SDL because I've worked with it before and found it does what I need it to do.
It's important for me not to take on a project too big to complete. MMOs are fantastic but take dozens of people years to make. 3D games have their charm but my heart is in the simplicity of 2D gaming. I even cut out networking support for now because a multiplayer game would be a larger undertaking than I'm capable of.
If each game takes 2-5 years to create, a game developer might not finish many games in his/her lifetime. I would love to make a platformer engine but they've been done (I'll probably save my ninja game for later and create it using the Frogatto engine).
It's an intersection of many opportunities for me. I have the programming and art skill to put together a good 2D game. There isn't a prominent open source 2D action RPG in existence. I have a good day job that I can leave at the office when I'm done for the day. OSARE begs to be made and I'm having a grand time making it.
2010/09/06
What's Next for OSARE?
I pushed a lot of new code out this last week. It feels pretty good to sit back and just play the game for a while. I have a hero up to level 6 wearing mostly Warlord (+health) gear. The Skeletal Warriors (level 5) are no longer a real threat. The challenge and fun both feel pretty good so far.
Next up is a major update for gameplay: Action Bar and basic Powers.
The action bar needs to be customizable with Powers (from the Powers menu) and consumables (food/potions from the Powers menu). Essentially all these can be lumped under Powers. Items "effect" entries are essentially item-bound Powers.
So I need a Powers class that handles all the one-off code to deal with all possible powers. Powers each need an icon. Many powers will need data to create Hazards. Instead of planning out all the data I need for these, I probably need to start with simple examples (potions, bow shooting) and figure out what I need just for those.
Some powers will be much harder to implement than others. In particular, the Multishot (fire 3 arrows) and Freeze (sliding ground ice shards) will be tricky. Those are special cases in that they have multiple renderables and need to be balanced so they don't hurt the same creature multiple times.
When the basic Action Bar, bow/slingshot shooting, and Shock spells are done I will probably pack that up and call it v0.10. At least by then someone who wants to wield Bows and Staffs will have a reason to do so.
2010/09/05
OSARE v0.09 Released
A fast release this time! Less than a week since v0.08, I've been having lots of fun coding updates.
- Games are automatically saved upon exit.
- Level Up system in place!
- You must meet requirements to equip items now
- Now you can respawn after dying
- Gold added to loot drops! Though nothing to spend it on yet...
- New map "Averguard Complex" added!
Note that bows and spells still don't yet work. These will be coming up in v0.10! So for now, you'll want to upgrade Physical and Defense skills, as the others won't help you much.
2010/09/04
Averguard Complex
Added the last wing of the Averguard Keep: the Complex. The monster composition is significantly harder than the other wings.
2010/09/03
Experience and Leveling Up
I'm on a code spree; v0.09 might come soon.
The major addition I wanted to do for v0.09 is XP and Levels. I plan to use a very simple system to start: xp granted by killing a creature equals the creature's level. So a level 5 creature gives 5 xp. This is reasonable; creature difficulty also scales linearly.
Then comes the philosophical question: how much XP to gain levels? I think I found the correct answer: "Depends on how much content there is". Basically I'm going to playtest the game, and when it feels like I should be gaining a level I'll find a nearby XP cutoff point. This point will change as I add more of the game world to explore.
The important code for XP will be on the Character menu. Each level gained (2 through 9) the player can increase one core attribute (physical, magical, offense, defense). Anytime the character menu is open and not all points have been spent I need to display [+] buttons for spending those points.
I've decided to not bother adding a respec/reset button. It's easy enough to do out of game: edit the save game file and set build=1,1,1,1. Then when you load your game you can reassign your points.
Finally I need to enforce requirements checks when equipping items. This should be easy, as I think MenuInventory already has a reference to the player's StatBlock.
[--update--]
XP, leveling, attribute upgrading, and item requirements checks added. Please let me know on the forums if you test this.
Here's what I did for now, for the XP requirements. I want the number of creatures to be killed (thus, time spent at each level) to increase logarithmically (20,50,100,200,500,1000,2000,5000). So the scale looks like this:
- 20 lvl 1 kills to 2: 20 xp
- 50 lvl 2 kills to 3: 100 xp (120 total)
- 100 lvl 3 kills to 4: 300 xp (420 total)
- 200 lvl 4 kills to 5: 800 xp (1220 total)
- 500 lvl 5 kills to 6: 2500 xp (3720 total)
- 1000 lvl 6 kills to 7: 6000 xp (9720 total)
- 2000 lvl 7 kills to 8: 14000 xp (23720 total)
- 5000 lvl 8 kills to 9: 40000 xp (63720 total)
How long does it take in a hack & slash to kill 10,000 creatures? I have no clue, really. Sounds like hours of gameplay though. I timed myself getting to level 4:
- 3 minutes to reach level 2
- 6 minutes to reach level 3
- 15 minutes to reach level 4
The number of kills required approximately doubles each level, and as expected the grinding time doubles also. Projecting the rest of the levels:
- 30 minutes to reach level 5
- 1 hour to reach level 6
- 2 hours to reach level 7
- 4 hours to reach level 8
- 8 hours to reach level 9
Total 16 hours of gameplay (not counting quests, trips to town, etc). That's a pretty solid number. I'd need a good collection of maps to make 16 hours work.
2010/09/02
Gold Coins
The latest check-in has gold coins dropping from creatures/containers. Warning: if you get over 2 billion gold you might end up with negative 2 billion :)
Respawning
The latest Google Code check-in allows respawning. Grab this updated code if you like collecting epic magic items!
Save Game Files
This makes me start to think about Save Game files. I plan on using plaintext save files. This might entice some people to cheat, but how rewarding is it for some young person to edit their own save games and experiment!
What needs to be stored in the save game file:
- Name
- Experience
- Skill points spent (PMOD)
- Equipped and Carried items (68 slots total plus gold)
- Action Bar customization (12 slots total)
- Respawn point (map name and coordinates)
- Campaign Flags and Quest data
- Achievement Statistics
Of those, the only implemented features are the items and respawn point. I will be working on gold, experience, leveling, and action bar stuff for 0.09 and at that point a save file makes a lot of sense (and should be easy to do).
I've added simple save same support added in the latest check-in. The game is saved to saves/save1.txt. Edit the file if you want to change your hero name (or cheat by giving yourself uber gear). Delete or rename the file if you want to start a new character.
2010/09/01
OSARE v0.08 "Loot" Released
The newest OSARE release is focused on loot. Over 500 items are in the game, dropped from enemies or found in treasure chests. I also added the starting logic for the Log Menu (and a heads-up log display). Finally, there is a new starting area called "Goblin Warrens" where you can fight low-level creatures to scavenge for beginner equipment.
Downloads
2010/08/30
Bug Testing for v0.08
The latest OSARE Google Code check-in is my candidate for v0.08. Included is nearly 600 game items, lootable from creatures and containers. You start without any equipment, so it's kinda fun to see how long you can survive with what items drop.
If you test it (build from source), please send feedback. If no major bugs appear I'll publish the Win and OSX binaries in a few days.
2010/08/29
Item Database
All of the coding is done for the v0.08 loot update. Woot!
What remains is adding all the starting game items to items.txt. This is impractical to create or maintain by hand. What I'm going to do is put all the item data into a MySQL database and use PHP to create the items.txt from that data.
Once the data is online, I can easily create a webpage to search/browse items.
2010/08/26
Loot Stats
Finally got all the starting loot animations done. As far as I know, this means I'm completely done with art assets for v0.08. More will be added in later releases but this is plenty for now. I checked those animations into the OSARE svn, so you can see them in action if you don't mind compiling.
Next up is adding all the item stats. I have plenty of starting stats worked out, though I need to work on item names for bows and armors. This is all stored in the /resources/items/items.txt file. I will probably create a mysql database of the items and some php to create the items.txt. Then I could make a real item database/lookup section of the OSARE website. Sounds win-win to me.
I have two major code pushes left for v0.08. First is loot from containers. This shouldn't be too bad. In the map files I assign a level to each container event (default: level 1). When a container is opened, use a similar chain of events as killing a creature to produce loot.
The second major feature, and of course the whole point, is picking up loot. Right now when the menus are closed, mouse clicks are assumed to be basic attack actions aimed at the cursor. Loot will have a rectangular click region to be picked up. When someone clicks on the playing field, I have to check all the loot to make sure the mouse click isn't aiming for loot pickup before assigning it as an attack action. Similar code will be added for the action bar (don't know if that will be added in this release).
Then it's a few tiny bits of cleanup code. I need to add % chance of dropping loot to creature definitions. Bosses will drop loot 100% of the time, weak zombies maybe 5%. This is a pretty minor update; I'll add it right before releasing v0.08 though, because testing loot is easier when every kill basically drops something.
2010/08/18
Loot Animation
Making a list of the loot animations I need. Just to keep track. Essentially every item type has a unique icon and loot animation, and possibly a character layer if it is a main/off/body item.
0.08 will contain at least these loot animations:
- Dagger
- Shortsword
- Longsword
- Greatsword
- Wand
- Rod
- Staff
- Greatstaff
- Slingshot
- Shortbow
- Longbow
- Greatbow
- Clothes
- Leather Armor
- Buckler
- Steel Armor
- Shield
- Health Potion
- Mana Potion
- Ring
- Boots
- Belt
- Generic Gem (white and shiny)
It feels like I'm putting a lot of effort into content and not into the engine itself. But, a long loot list will give me enough variables to play with to see if my implementation is flexible enough for real game needs.
2010/08/08
Loot
Lots of real life events have been overshadowing my OSARE time. Thanks to all of you who still have interest in the project.
I'm only 2-3 coding sessions (and an art/data session) away from being done with loot. Currently in svn I have a good dagger and shortsword "flying loot" animation done, and I have those dropping off creatures. The coming data push will add a couple dozen more loot animations and a few hundred items.
I still have to add the "click to pickup" mechanism for loot. It's not a particularly interesting set of code, but once that's done I should be able to use similar routines for other items. At this point I'm considering a ClickRegion struct (similar to the current Renderable struct) that can be generated by dropped loot, containers, switches, etc.
Finally I need to add support for loot to be generated from containers. I'll probably assign a loot container a level and % chance to drop an item, much like I do with monsters.
2010/07/08
Unicode
Unicode is slightly intimidating, but I think I've found the most useful way to tackle it in my game.
GNU Unifont is a GPL-licensed bitmapped font that I can work with. It is fixed height (16 pixels tall) and fixed width (8 or 16 pixels wide) so coding for the font should be easy. In C++ I could use double-width chars (wchar_t) and I should be able to find matching string functions.
Working with OpenGameArt means I'm working with artists from all over the world, and plain ASCII won't cut it for most of the people who already have direct interest in the game. If I support Unicode, at least someone could modify all my game data files to make a native translation.
Of course, just supporting a Unicode font isn't enough. I need to add RTL text support and possibly modify some menus for those languages. I need to macro lines like "Increases accuracy by 5" so the sentence can be reworked and rearranged for the target language. I need to isolate the displayed text as much as possible so that translators don't have to hunt for changes. Finally, ideally, I need to support choosing language at runtime or at least in a config file.
Language translations isn't the exciting part of making a game. My development model for OSARE has been to make the fun parts first, then make it work properly/flexibly later. Unicode/translation support might actually come once I have most everything else in place... perhaps around that phase where most of OSARE's features are complete and I need to start generating tons of game assets (more monsters/tilesets).
If I use the GNU Unifont format directly, I might not even need a bitmap version of the font. I could write out the pixels just as described in the text format. Don't know what kind of performance concerns that would create with SDL.
2010/06/27
Minotaur WIP:
2010/06/24
OSARE updates might be slow for a couple weeks while I'm apartment hunting. I am still choosing a loot system and I may have settled on something that sticks pretty close to the genre. Updates soon!
It is the business of the very few to be independent; it is a privilege of the strong. And whoever attempts it, even with the best right, but without being OBLIGED to do so, proves that he is probably not only strong, but also daring beyond measure. He enters into a labyrinth, he multiplies a thousandfold the dangers which life in itself already brings with it; not the least of which is that no one can see how and where he loses his way, becomes isolated, and is torn piecemeal by some minotaur of conscience.
- Nietzsche, Beyond Good and Evil
2010/06/21
Analyzing Loot
Choosing a loot system is probably the trickiest part; implementation is a close second. Loot affects most subsystems of OSARE: maps, camera position, renderables, mouse state, tooltips, enemies, inventory, events/containers, etc.
Here's what I plan to do with loot drops.
- Assign items a new variable: level
- Item level will determine the item's sell price and drop chance.
- Item level will also determine automatic loot tables
Item Level
First, let's talk about level. Weapons and armor will be our starting point for determining level.
- Regular daggers, wands, slingshots, and leather armor will be level 2
- Shortswords, rods, shortbows, bucklers will be level 4
- Longswords, staffs, longbows, steel armor will be level 6
- Greatswords, greatstaffs, greatbows, shields will be level 8
I'll use basic judgment to assign the rest of loot.
- Food is level 1
- Potions are level 3
- Gems are level 9
- Artifacts are base level 5
Item modifiers change the level of items. This is calculated outside of the game for now and applied directly to the items.txt file
- -1 damage = -1 level
- +1 damage = +3 levels
- -0.5 absorb = - 1 level
- +0.5 absorb = +3 levels
- +1-3 hp/mp/accuracy/avoidance = +1 level
- +4-6 hp/mp/accuracy/avoidance = +2 levels
- +7-9 hp/mp/accuracy/avoidance = +3 levels
- +1 crit/regen/speed = +1 level
- +2 crit/regen/speed = +2 level
- +3 crit/regen/speed = +3 level
Drop Chance
Now I can automatically generate loot tables for creatures, containers, and vendors. Loot will be on a basic bell curve. When loot DOES drop, what level is it?
- [Editor's Note: final implementation is +/- 3 levels]
- 1% chance: -5 level
- 2% chance: -4 level
- 5% chance: -3 level
- 10% chance: -2 level
- 20% chance: -1 level
- 24% chance: same level as creature/container/vendor
- 20% chance: +1 level
- 10% chance: +2 level
- 5% chance: +3 level
- 2% chance: +4 level
- 1% chance: +5 level
Note I can tag some monsters as "no loot" types (e.g. antlions, wyverns). Instead of dropping loot, you should find loot around their layers (in nests, rubble, dead adventurers, etc). Also I can tag some loot as "quest" types, so they don't appear in random tables.
2010/06/11
OSARE v0.07 Released: Inventory
The newest version of OSARE is ready, this time with the focus on Inventory. In game, open the Inventory (I) menu and try out some test equipment! New in this release:
- Word wrap, size calculation, and font colors on the font engine
- Created a mouseover tooltip system
- Drag and drop support for arranging and equipping items
- Item drop sound effects
- Changing hero graphics based on equipped items
- Changing combat stats based on equipped items
- Adjusted monsters based on combat stats
- Basic test items and a few low and high quality variations
Downloads
2010/06/08
0.07 Coming Soon
0.07's main focus is "Inventory". I will probably package 0.07 this weekend. The current checked-in code represents most (if not all) of 0.07. If you try it out, please send me some feedback.
To get loot drops in 0.08 I will need to decide how to animate loot drops, probably corresponding to each icon. That will be a lot of tedious work. I also need to spend a few days away from OSARE coding, maybe playing other inspirational games.
My target for 0.08 is July, with the focus on "Loot".
My target for 0.09 is August, with the focus on "Powers". That will be a huge milestone, as the core gameplay will be there to experience.
2010/06/06
Artifacts
I got artifacts working in-game. Currently they can be created to boost a few main stats: hp, hp regen, mp, mp regen, accuracy, avoidance, crit, speed. (These bonuses can be added to weapons/armor too, but would be more powerful on artifacts)
2010/06/02
Working on 0.07
I'm working on some fun interface stuff for version 0.07.
- Mouseover tooltips system (done)
- Word wrap and newline support for text rendering (done)
- Inventory display and drag/drop arrangement (done)
- Item Database (done)
- Changing hero graphic based on equipped items (done)
- Equipment stats affect combat (done)
Here's what I'm thinking for 0.08
- Loot drops from creatures
- Loot drops from containers
- Experience from creatures
- Leveling up
- Equip items requirements check
For 0.09 I will be working on Powers and customizing the Action Bar.
2010/05/28
OSARE v0.06 released!
OSARE version 0.06 is now ready for download. New in this release:
- Tweaked some sound effects due to license questions
- Added menu open/close sound effects
- Added map interactions when stepping on certain tiles
- Added opening containers
- Added throwing switches to open doors
- Added support for various monster types
- Added several varieties of zombie, skeleton, antlion, and goblin
Gameplay Video
Downloads
2010/05/27
Antlion and Goblin
Finally finished animating the old Antlion and Goblin models that have been sitting on my hard drive for a year or so. I will probably add a few new animation sequences later (e.g. the antlion needs his burrowing graphics). This means that half of my bestiary is complete (coincidentally, the half of the list that represent lower level creatures).
These low-poly, untextured models are so easy to create/rig/animate. If I tried to put too many tiny details on the model it would make the in-game renders too noisy. Sometimes I want to stop and instead create incredibly detailed 3D models, but it wouldn't add much to OSARE and would slow down my current progress. I always have the option of making better graphics later, and I'm sure the graphics of OSARE will improve as I keep making more. One thing that keeps OSARE ticking is that I just try stuff, do what's fun, and I'm not afraid to just throw something out and redo it.
2010/05/25
Skeletons!
I just finished adding support for multiple enemy types. The maps now have both zombies and skeletons. There are weak, strong, and boss versions of both. You can infer what kind they are by how fast they move and where you encounter them.
2010/05/24
Containers and Switches
I added support for map containers and switches. Currently these are all "pressure plate" type activation, where you merely walk onto a certain tile area to interact. In most games of this genre you click on objects to interact with them: I'll add this method soon.
To accomplish these interactions I have two new Event Components for map events: mapmod (edit the current map) and soundfx (play the specified sound effect once). Each map event can have up to eight components. As an example, here are the Event Components for throwing a switch that opens a portcullis:
- mapmod to change the switch tile from position a to b
- mapmod to change the portcullis tile from closed to open
- mapmod to change the collision under the portcullis to walkable
- soundfx to play a "door opening" effect
Powers Update
Thinking about Powers again. I want to remove passive powers and separate melee vs. ranged powers. The new working list:
Physical Offense - Shoot (basic ranged attack) - Rip Strike (melee attack that causes Bleeding) - Multi Shot (ranged attack that fires three missiles) - Cleave (melee attack with a wide area of effect) - Piercing Shot (ranged attack that ignores armor and goes through enemies) Physical Defense - Swing (basic melee attack) - Shield Block (raise shield to increase defenses) - Warcry (remove debuffs and scare enemies) - Charge (rush and knockback a target) - Vengeance (after blocking, deal an accurate heavy attack) Magical Offense - Lore (get more info about items or nearby landmarks) - Arcane Bolt (missile that bounces to another enemy) - Earthquake (stun nearby enemies) - Freeze Ray (slow enemies in a straight line) - Burn (burn enemies in a large distant area) Magical Defense - Return (teleport to a previously-discovered safe point) - Heal (restore health) - Magic Shield (absorbs damage) - Teleport (instantly appear at target area) - Time Stop (freeze enemies for a few seconds or until you act)
I'll make new icons and update the Build Calculator and Powers pages soon.
2010/05/19
Footsteps
I added footstep sound effects to OSARE (look at the Google Code link for the bleeding edge stuff). The game's animations are frame-based not millisecond-based so everything slows down when framerate drops; thus I need to play a new footstep noise every time (I can't just put it on a timed loop).
Oddly, SDL_mixer was having trouble playing sounds this rapidly (2.5 steps per second when running, it would simply skip playing some steps). I toyed with settings until something worked. On the initialization call Mix_OpenAudio(), I changed the last argument from 4096 to 1024 and it made a difference. It seems to work now in OSX and XP. But I don't know why changing the audio buffer there makes a difference.
I started having the same problem when adding new sound effects, even with the buffer at 1024. I found that reducing their quality (stereo to mono, 44k to 22k) helps. I'm not an audiophile so maybe I'm doing this the wrong way.
2010/05/16
OSARE v.0.05
OSARE version 0.05 is now up.
- Added map transitions
- Added a starter dungeon with three wings named Averguard Hold (click for map)
- Added support for hex or dec map data format
- Changed definition files to use = instead of :
- Upgraded zombie steering AI. They now pursue to where they last saw the hero.
- Started refactoring to prepare for more monster varieties
- EnemyManager now holds enemy sound effects, so that we only load one copy of each
- I now use Tiled 0.4.1 to edit map layers
- Reminder: use the command-line argument -f (or --fullscreen) to play in fullscreen mode.
- Changed the tileset to use magic pink as the transparency and removed the tileset alpha layer. This should improve performance on most systems.
- Note to self: in GIMP set Alpha Threshold to 32, then remove the alpha channel onto magic pink.
Download
Upcoming
I'm gathering my resource files (especially the Blender and Tiled files) for a new download archive. Also soon I'll be putting stuff into Google Code for easy perusal and tracking.
2010/05/15
Editing OSARE Maps with Tiled
I'm using Tiled to do most of my OSARE map editing. Here's how my current process works:
- I have specially-made tileset images for Tiled. The indexes for those correspond to the OSARE tilesets.
- I edit background, object, and collision layers in Tiled.
- In Tiled 0.4.1 I use the "Store tile layer data as: CSV"
- I use a text editor to copy the three csv sections from the .tmx file into my OSARE map files
- Currently I still create the headers, events, and enemies in a regular text editor. I use Tiled's status bar to get my cursor location to get placement for events and enemies.
- Note that the Tiled tileset isn't a perfect copy of OSARE's tileset. I left it brighter to be easier to see when editing. Also some irregular shaped tiled are cropped to work in Tiled.
There are two types of collision tiles. Empty (0) is no collision. Red (1) is full collision which blocks movement, sight, spells, arrows, etc. Blue (2) is partial collision that only blocks walking, but sight/spells/arrows/flying is still allowed. Blue is used for low obstacles the player can see over and for water/chasms.
Files:
2010/05/09
Tiled
Today I tried using Tiled to edit maps for OSARE. It took a bit of work to set up, but I think it's worth it.
My maps use CSV for tile data. The latest Tiled release (0.4.1) supports writing map layers in CSV. So I can use Tiled to edit maps, then just grab the piece I need from the output XML file.
Tiled expects tilesets to have consistent tile sizes/spacing, but I pack tiles in my tileset to save space. So I made a new tileset image for my dungeon tiles where each tile is 64x128. Tiled handles this tileset beautifully. I still use the packed tileset for my game, for performance.
Tile index 0 is blank space in Tiled and in my engine. The first tile on the tileset image is given index 1, so I have to position the tiles accordingly.
Also, the CSV map format uses decimal; OSARE uses hex. The easiest thing is to allow map files to define the layer format it uses, that way I can copy/paste layer data directly from Tiled files.
Tiled will be great for laying out the map graphics. With a bit of tinkering I think I can make enemies and events with Tiled's Object Layer.
Check out this map I'm working on and the accompanying dungeon tileset.
2010/05/06
Town Tiles
Testing some medieval building tiles:
[--Update--]
Done! Medieval Building Tiles
2010/04/30
Dungeon Entrances
I've been working on some larger graphics for dungeon entrances and other set pieces.
2010/04/29
Free Gamer Blog plug
qubodup has plugged OSARE over at the Free Gamer blog. Sweet!
Map Loading
Collecting my thoughts on map loading. The following things have to occur to dump an old map and load a new one:
- User steps on a tile tagged with an event.
- A flag is set to load a new map, with the new map filename and position taken from the triggered event.
- GameEngine needs to check for this flag because it is the parent of the following objects.
- MapIso::load(filename)
- EnemyManager::handleNewMap() // add function to remove all enemies
- HazardManager::handleNewMap() // add function to remove all hazards
- Add logic to TileSet: if we already have the correct tileset we shouldn't reload it.
- Set the Avatar (x,y) to the trigger event's destination (x,y).
- Change MapIso and TileSet to interpret tile indexes as hex 00-ff instead of dec 00-99
2010/04/28
Looking Towards 0.05
I've been pretty busy with life and work, so I haven't really touched anything yet for 0.05. The first step is to narrow down what sounds fun to work on. If I think about the project as a whole it's overwhelming, but if I focus on a short list of tasks it's manageable.
Category 1: Map Interaction
- Map interaction (switch toggle, open door/chest/crate/barrel, extinguish brazier)
- Map interactions that edit the map (throw a lever to open a secret wall)
- Map "pressure plate" triggers (e.g. traps or portals)
- Runtime map unloading/loading
Category 2: Menu Interaction
- Word Wrap support for font class
- Upper ASCII on font graphic
- Draggable Icons (Powers and Inventory menus)
- Icon database
2010/04/20
Commissions Update
Several artists have contacted me in the last couple weeks to see if help is needed on OSARE. I'm already blown away with the interest in this very early project.
At this point in the project I'm not interested in forming a "team" (simply because that sounds too much like work to me). I can do a significant amount of the game art myself, and the rest I pay commissions to get specific tasks done. Especially for areas I'm not strong in: concept art (I'm a very left-brain artist, so I need creative help), music (not a composer), and items that require good painting skills (finished icons, portraits, etc).
Unfortunately, real life has interrupted my commission plans. I will have to put new commissions on hold for at least a couple months. My car died two days ago. I'm digging into my savings to get a new one. Until I get adjusted to these new payments I won't know how much I have to spend on commission work.
In the meantime I can work on getting more features into the engine. Really, the bulk of the commission work will happen when OSARE is in beta (mostly feature complete) and production on an actual game begins. At the current pace, OSARE will be close to feature complete in Fall 2010.
2010/04/14
OSARE v0.04 Release
OSARE v0.04 is ready for download. New to this version is font support and basic menus. I spent a lot of time in the last few weeks creating several iterations of the graphics for the font, menus, and icons
Features
- NOTE: now runs in windowed mode by default (apologies to XP users, windowed mode seems to change the desktop resolution). To run in fullscreen mode use -f or --fullscreen options at command line (easier to use options coming in a future release)
- FontEngine is a class that handles drawing of a bitmap font, with support for left/center/right justify (word wrap coming in a future release)
- Finished the icons for Powers. Commissioned Blarumyrran to finish the icons for the basic set of weapons/armors.
- Character Menu displays the proper info based on the Avatar's stats (level up coming in a future release)
- Powers Menu displays the Avatar's build (dragging powers to the action bar coming in a future release)
- Log and Inventory menus are mostly static. Inventory drag/drop and equipping coming later. I still haven't settled on a design for the Log, which will contain quest info and achievements.
- I refactored all the menus and hud under a MenuManager class. That class controls which menus should be displayed. In a future release it will handle drag/drop between the Inventory, Powers, and ActionBar menus.
- When the core menus are open (Character, Log, Powers, Inventory) the game action is paused.
- The actionbar hotkeys work but clicking on the action bar doesn't work yet. Also, still no way to change the default key bindings. All this coming in future releases.
Download
2010/04/06
Blarumyrran (from #opengameart on freenode) has taken on a commission to put some polish on my equipment icons. Thanks, Blarumyrran!
[--Update--]
And they turned out amazing!
2010/04/05
Font and Menus
I've been doing lots of work on OSARE and 0.04 is just around the corner. Most of my work has been outside of code: designing icons, menus, and a font.
I have the basic font class working and it's nice. I'm using an ascii-based bitmap font. Right now I have lower ascii, but it should be easy to add upper ascii. At the moment I'm not too interested in unicode support; that might be a sin but I don't care (yet). I have routines to write out text with left/center/right justify. I don't yet have smart word wrapping (I'll save that for when I actually need it, probably once I start doing the dialog engine).
I've been drawing up the four main gameplay menus: character, inventory, powers, log. The first version of the Character menu is done: it displays the avatar's StatBlock properly (a second version will handle level-ups and resets). The Powers menu shows the build correctly (a second version will allow dragging powers to the action bar). The Inventory and Log menus are basically blank for now. I also created a MenuManager to hold each of the menus and govern their opening/closing. I also changed the HP/MP bar and the Action bar to "menus" and put them under the Menumanager class.
The proficiency icons on the Character menu are the stock weapons/armors I have for the current male hero. Maybe the icons should be something more generic (a barbarian or samurai would have very different base items).
I will create Powers-style icons for the C,I,P,L menu buttons on the bottom-right of the action bar. Maybe make them clickable. Maybe add a very simple MenuToolTip class. Once I feel at a good stopping point I'll release 0.04.
OSARE Blog
The OSARE project has a new blog. I've imported previous news items and the conversion is complete.
I spend a lot of time thinking about my programming projects (not just OSARE). As the projects grow it's impossible to keep all those thoughts organized between releases. This blog will probably be barely-edited ramblings of ideas, dev updates, etc.
2010/02/28
Version 0.03 Release
Version 0.03 is up! The core gameplay is starting to emerge.
- Combat to the death. You can kill zombies and they can kill you.
- Added combat sound effects.
- Added a health and mana bar
- Left-mouse click is now an aimed sword attack (1-key will instead attack the way you're currently facing)
Although the RPG combat mechanics aren't in yet (accuracy, dodge, absorption, weapon damage, etc), basic melee values are hardcoded in for this demo. The zombie has a high chance of being crit, along with a satisfying crit death animation and sound. Next to the health/mana bar is a slot for a 32x32 pixel character portrait.
I added a lot of memory cleanup in the class deconstructors. Please let me know if you encounter a game crash on exit.
One user has reported it doesn't work under Vista (hard lock, requires reboot). It works on my XP and Win7 systems. I'm compiling the Windows version with MinGW on XP. If anyone has tips on SDL with Vista please contact me.
2010/02/15
Version 0.02 Release
Version 0.02 is up! Things are finally starting to get interesting.
- Re-rendered all assets using Blender's CatRom AA setting. The result is much sharper.
- Added SDL_mixer support and background music by Remaxim
- Added the bare bones for the Action Bar
- Set Action Bar slot 1 to melee attack (no customization yet)
- Added (much hardcode) a basic zombie creature. The zombie will pursue and try to melee attack.
- Bug: fixed an issue in the Collider class with a variable not initialized
Although the hero and zombie can try to attack each other, I haven't yet implemented the attack collisions, damage, dying, etc. That will probably come in 0.03. Zombies make a great starting creature because it's okay if their AI is oversimplistic. This zombie will pursue if in range, stop once it gets to melee range, and try to melee attack. After some melee attacks it will try to bite. The current zombie gets stuck behind walls a bit too easy. Right now he chases the player directly and can basically see through walls; in 0.03 he will not see through walls and pursue the spot where he last saw the player. This will make his pathing appear slightly more intelligent, but still as unintelligent as a Walking Dead should be.
The other major addition is background music. In the map.txt file you'll see a line that says music: dungeon_theme.ogg. If you want to hear remaxim's other tunes in game, change that .ogg file to one of the other songs included in the music folder.



















