Last week, I gave a brief presentation about Flare for the FSFE‘s I Love Free Software Day event. The talk was written with the expectation that a sizable chunk of the audience would be people with little-to-no knowledge of games. So there’s nothing too ground-breaking here. Nonetheless, I think it is a nice summary of what we’ve accomplished over the years.
- AppImage (x86_64 Engine + Game) (127 MB)
- Disk Image (Engine + Game) (127 MB)
- Added ‘bar_gfx’ property to menus/enemy.txt for setting the “fill” image
- Fix crash when trying to read a non-existent file with INCLUDE
- Fix passive powers not being correctly re-applied after death
- Improve performance of WidgetListBox by caching all items instead of just the visible ones
Update: Bug-fix release 1.13.04 is available, so grab that instead.
Flare 1.13 is now available for download. There’s lots of new stuff in this release, so let’s dive in.
Better gamepad behavior
Gamepad functionality has been given an overhaul. We’ve moved from using the SDL_Joystick API to using the SDL_GameController API. Instead of trying to map actions to arbitrary buttons and axes, we can now map them to the common XBox 360 controller layout. And thanks to SDL_GameController, these mappings will match up logically for non-360 controllers (e.g. XBox “B” matches Playstation “Circle”). We also fixed some bugs with the analog deadzone setting, including setting a minimum value of 8000. This should prevent players from accidentally setting their deadzone at too low of a value.
The new default mappings are as follows:
- Left stick & D-Pad: Move player/Navigate menus
- Right stick: Aim (change direction without moving)
- A: Accept/Confirm
- B: Cancel
- X: Menu activate (use selected item/power)
- Y: Open the Inventory menu
- Start: Pause the game
- Back: Toggle focus on the action bar
- L1/R1: Navigate menu tab pages
- Right trigger: Use primary (Main1) attack/power
- Left trigger: Use secondary (Main2) attack/power
- L3: Use the first action bar slot (Bar1) attack/power
- R3: Use the second action bar slot (Bar2) attack/power
Navigating menus with a gamepad is also much improved. One of the most notable changes is the addition of an “action picker” dialog box. When a player presses the Accept action on a selected item or power, the dialog will pop up with a list of all the available actions. Previous to this change, performing some of these actions with a gamepad was either difficult or outright impossible (i.e. dropping items on the ground). And it’s not just better for gamepads. Mobile/touchscreen users will also be able to take advantage of the action picker when interacting with items and powers.
Secondary equipment set
A contributor who goes by r-a-cristian-93 on Github added support for multiple equipment loadouts. We now provide players with two sets of equipment slots in their inventory. By pressing the arrow buttons in the inventory (or the default key, Tab), players can quickly swap between different loadouts of equipped items. For example, players may want a loadout for farming that focuses on XP gain and item drop rate and a loadout for fighting bosses that focuses on physical and magic defenses.
Another contribution by r-a-cristian-93. The fog-of-war feature can be used to draw dark fog over unexplored tiles, and light fog over tiles outside the player’s range of vision. It’s been a requested feature for a while now, but it wasn’t something I particularly wanted to use for the Empyrean Campaign game. What made the feature more attractive to me was the secondary feature: fog-of-war for the minimap. Now, only the areas where the player has explored will be revealed on the minimap.
Improved font rendering
Text was sometimes hard to read, especially when it involved small font sizes or complex glyphs. By blending text with a copy of itself, I was able to get a much clearer looking result. The effect is subtle, but these comparisons should illustrate the difference:
Health and Mana potions now have Super and Ultra variants that can be crafted through the alchemy system. The Goblin Thief and Alchemist’s Skirt have also been updated to work with all of the available kinds of potions.
The Adept class’ Shield power has been modified to be more useful to players of all classes. Instead of just Mental Damage, the shield’s power is determined by a combination of player level, the Mental stat, and the Defense stat. Of course, Adepts will still be the best when it comes to effectively using the power.
Several problems have been fixed for players on Android. Most importantly, Flare should now work properly on Android 10 or greater.
We also updated some of the packages that we distribute. The Windows version now includes a 64-bit executable by default. The 32-bit executable is still included as a optional extra. We’ve also replaced the x86_64 tarball for Linux users with an AppImage.
- AppImage (x86_64 Engine + Game) (127 MB)
- Disk Image (Engine + Game) (127 MB)
- Added additional requirement properties (requires_status, requires_item, etc) to enemy and NPC map objects. The properties now match what is available for map events.
- When ‘mouse aim’ is disabled, the Shift key can now be used with the direction keys to change the player’s orientation without moving.
- Added optional ‘fog-of-war’ feature (r-a-cristian-93)
- Added support for multiple sets/loadouts of equipped items (r-a-cristian-93)
- Added random_status attribute to Events for setting/unsetting a random status from a list.
- Reworked gamepad handling using the SDL_GameController API.
- Several new key bindings, many of which will benefit gamepad users.
- Added an “action picker” for interacting with items/powers when using a gamepad or a touchscreen.
- Added misc.selection_rect_corner_size to engine/widget_settings.txt. This allows for a nicer “targeting reticle” appearance when selecting widgets without a mouse.
- Added ‘background’ property for all menus. Menus will fall back to the existing hard-coded filenames if this property is omitted.
- Added ‘close’, ‘label_title’, and ‘action_list’ properties to MenuConfirm configuration.
- Added ‘render_layers’ section to StatBlock definitions. It has the same syntax and functionality as engine/hero_layers.txt, so that file is now considered deprecated.
- Added ‘animation_slots’ section to StatBlock definitions. This allows for multiple animation layers on non-player entities that don’t have an inventory like the player.
- Added a ‘direction’ property to map NPCs, indentical to the property of the same name for map enemies.
- Added ‘vendor_ratio_buy’, ‘vendor_ratio_sell’, and ‘vendor_ratio_sell_old’ properties to engine/loot.txt. These deprecate ‘vendor_ratio’ and ‘vendor_ratio_buyback’.
- Added ‘vendor_ratio_buy’, ‘vendor_ratio_sell’, and ‘vendor_ratio_sell_old’ properties to NPCs. These can be used to override the global settings in engine/loot.txt.
- Added ‘tooltip_visible_max’ to engine/tootlips.txt to control the maximum number of visible floating tooltips.
- Fix enemies not being able to target NPC followers
- Fix loot and sound effects being cleared in StatBlock files with multiple sections
- Fix potential crash when removing summons that would be out-of-bounds on the next map.
- Fix bug where a damage type with no name could be removed if another damage type was defined after it.
- Don’t show hidden stats under ‘Related Stats’ section of tooltips of Character menu.
- Fix bug where negative regen wouldn’t work if the resource was 100% full.
- Fix bug where negative regen would overflow after reaching zero.
- Fix bug that caused built-in effect types to be ignored by Power post_effect.
- Fix disappearing sprites due to render priority overflow.
- Fading of corpses is now correctly disabled when corpse_timeout=0 is used in engine/misc.txt.
- Fix cast animation not playing when using an inventory item that is not instant.
- Fixed a bug on Android where loading the default settings would exit fullscreen mode.
- Fixed crash in NPC dialog when using gamepad.
- Fixed several small bugs with navigating UI elements with a gamepad.
- Fixed incorrect handling of gamepad stick/trigger deadzone.
- Fixed fullscreen setting being turned off when loading configuration defaults on Android.
- Fixed input hint for item tooltips when using a touchscreen.
- Improved file access handling on Android versions 10 and up. This fixes the infinite cutscene loop when starting a new game.
- Fixed memory leak when loading NPCs.
- Entity animations will now fall back to the ‘die’ animation when ‘critdie’ isn’t defined.
- Improved text rendering by blending text with a copy of itself.
- Fix infinite loop that could occur when setting unlocked powers.
- Elemental resistances can now be used with ‘stat’, ‘stat_per_level’, and ‘stat_per_primary’ in StatBlock definitions.
- New formula for the ‘Shield’ power. Instead of Mental Damage, it is now based off a combination of player level, Mental stat, and Defense stat. This should increase its usefulness on mixed builds.
- Added ‘Super’ and ‘Ultra’ variants of Health and Mana potions. They can be obtained through the Alchemy system.
- New icons for Health and Mana potions variants.
- Fixed Alchemist’s Skirt so that it works with all potions.
- Prevent the player from damaging Mez before being trapped.
- Made Lezaith immune to slow/stun effects.
- Goblin Thief can now steal all available kinds of potions. Its drop table has also been expanded to make it easier to replenish lost potions.
- Improved contrast for “highlight” state of red square buttons (“close” and “plus”).
- The minimap is now gradually revealed as the player explores.
- Added icon artwork to the equipment slots on the Inventory menu.
- Basque (eu) update (aitzkora)
- Scottish Gaelic (gd) update (GunChleoc)
- Norwegian Bokmal (nb) update (Elias Nykrem)
- Polish (pl) update (Pawonashi)
- Russian (ru) update (Igor Polyakov)
Submissions for translation updates are still open until Jan 30. See the Translations page on the wiki if you’re interested.
The first (
and possibly only) release candidate for Flare 1.13 is now available. For a list of changes, see the release notes.
If you’re interested in helping with translations, be sure to read over the Translations page on the wiki. The string freeze begins today, Jan 9, and ends on
Jan 23 Jan 30.
I’d like to start by saying thank you to everyone for the response to 1.12. I’ve seen nothing but positive comments, which made the long gap between 1.11 and 1.12 feel worthwhile.
Of course, it wouldn’t be a major release without a crash slipping through the cracks. Should you encounter this, the guaranteed workaround is to defeat all the enemies on the map before trying to move to the next map. If I were to guess, I’d say most players do that anyway. Either way, the core issue has been fixed for 1.13.
I’ve also given some pages on the website a bit of attention. The Other platforms & distributions section of the Download page was full of errors. Many of the links were either broken or pointed to an older version of the game. I was shocked to see that the Amiga OS4 port has a “recent” (version 1.09) build! Last time I checked it was still somewhere around version 0.18 or 0.19. I had thought our switch from SDL 1.2 to SDL 2 had killed that port, but I guess there’s no stopping Amiga fans.
Finally, the Other Mods page has been updated with links to the forum threads for the Heresy and Open Valley mods. Heresy is in more of a playable state than Open Valley, which is still very much in development. I do recommend checking out both if you’re curious as to what the community’s been creating with Flare.
Flare 1.12 is now available for download. In the two years since version 1.11, there have been many improvements to both the engine and the Empyrean campaign.
The HP and MP bars have gotten a visual refresh. The goal was to make them easier to read when they are close to being empty. The HP bar is also now a more traditional red color instead of a red-to-green gradient.
The mini map has also gotten some new features. There is now a button placed below the map that allows easy access to the pause/configuration menu. In addition, various objects are now indicated with different colors on the map:
- Red = alerted enemies
- Yellow = player allies
- Green = NPCs
- Blue = map transitions
Inventory and action bar tooltips have had some improvements as well. Comparison tooltips are now displayed for items, which show the currently equipped items for a given slot. Useful for deciding which gear to use. But some players might find it a bit cluttered, so there is an option to disable these tooltips in the Interface configuration page.
While on the topic of item tooltips, a few things have been tweaked. If an item is part of a set, we now highlight which set bonuses are active based on the number of equipped set items. Also, the buy and sell prices now use the currency item’s color to make them stand out more.
Action bar tooltips now display more information about powers, such as the power description and MP cost.
New configuration options
In the Video section of the Configuration page, there are two new options: Maximum Render Size and Frame Limit.
The Maximum Render Size is the vertical resolution of the game’s drawing surface. With the addition of this option, we’ve increased the default maximum render size for the Empyrean Campaign to 768 pixels. If you find this to make things too “small”, consider decreasing this setting to the previous default of 600.
The Frame Limit controls the maximum FPS that the game will run at. Lowering it to 30 from the default of 60 can help get a more consistent experience on very slow systems (or save battery life). Conversely, increasing it can provide a smoother experience for players with high refresh rate monitors.
The Input section of the Configuration page now includes options for touch controls. These options allow enabling touch controls on non-Android devices, as well as changing the scale of the on-screen gamepad.
Version 1.12 of the Empyrean campaign sees the addition of a new alchemy ingredient: Mushrooms. With this ingredient, four new potion recipes have been added. Drop rates for alchemy resources have been slightly decreased, but players should still have no problem finding what they need. Lastly, Florin in Perdition Harbor now gives a quest to introduce the alchemy system to new players.
Map and quest redesigns
There were a handful of maps in the Empyrean campaign that tried to trap the player in a specific area as part of their related quest: the Family Crypt, the Nazia Mines, and the Torture Chambers. Yet there was always the chance the player could use a Perdition Scroll, so we had to resort to resetting the quest when the player re-entered the map. So we decided to ditch the idea of trapping the player and redesigned the affected maps to allow free travel.
It’s also worth noting that it is now possible to store all of the game’s quest items in the player’s private stash.
Player and enemy power changes
The Cleave power has received some new artwork, and has had its effective hit circle reduced to match. This change applies for both the player and enemy versions of the Cleave power.
Rakk’s close-range ice attack was vastly over-powered, so both its strength and hit circle have been reduced.
The Goblin Thief’s potion steal ability has been fixed so that it can’t steal from the player’s Summoned Zombie.
Spike traps have also been rebalanced. Instead of dealing a large amount of instant damage, they now deal less instant damage while inflicting a strong bleeding effect. They have also had their hit circle slightly reduced. This all should result in less surprise deaths by giving the player time to react and heal.
- Engine + Game (126.4 MB)
- NPC interactions are now canceled when the player is attacked. ‘combat_aborts_npc_interact’ has been added to engine/misc.txt to control this setting.
- Added ‘bar_fill_offset’ and ‘bar_fill_size’ to MenuStatBar and MenuEnemy properties.
- Added support for fading out combat text. See the ‘fade_duration’ property in engine/combat.txt.
- Added ‘save_oncutscene’ property to engine/misc.txt. Saving before a cutscene was previously controlled with ‘save_onload’, which caused issues with cutscenes when set to false.
- Added ‘save_anywhere’ property to engine/misc.txt. This allows for saving via the pause menu. (m7600)
- Added display of enemies, allies, NPCs, and intermap teleport events to the minimap.
- Added support for defining the colors of tiles and entities on the minimap.
- Added ‘show_on_minimap’ event component. Currently, this only applies to intermap teleport events.
- Added ‘show_on_minimap’ property to NPCs.
- Properties that take an alignment can now be aligned to the menu frame.
- Support multiple images in animation definitions. (bloodhero)
- Expanded slot widget configuration in engine/widget_settings.txt. Quantity text color can be changed, as well as label settings for displaying hotkeys.
- Re-implemented displaying hotkeys on action bar slots.
- Support for ‘item:quantity’ syntax for Event properties: ‘requires_item’, ‘requires_not_item’, ‘remove_item’, and ‘reward_item’.
- Added ‘show_randomize’ property to new game menu configuration.
- Added ‘disable_equip_slots’ property for passive powers.
- ‘Block’ powers can now use post_power to trigger a power when taking damage.
- Power descriptions are now displayed in action bar tooltips. This can be controlled with the ‘tooltip_length’ property in menus/actionbar.txt.
- A dialog box is now displayed instead of a log message when the player dies, giving the options to exit or respawn (if applicable).
- Added movement input type dialog box. It is displayed for new players to easily select between keyboard, mouse, and joystick movement.
- Added ‘–safe-video’ command line option. For troubleshooting purposes, this feature is displayed as an option when starting after a potential crash.
- The ‘categories’ property has been extended to the player character. The Power property ‘target_categories’ can now be used for the player as a result.
- The ability to stash quest items can now be controlled with the ‘no_stash’ property.
- Added a button for opening the pause/configuration menu as part of the minimap.
- Added ‘script’ property to items. This removes the need to create a power in order to execute a script via activating an item.
- Player ‘melee_range’ is now configurable in engine/stats.txt.
- Added comparison tooltips for items. These can be disabled in the Interface settings. (r-a-cristian-93, Justin Jacobs)
- Added ‘parallax_layers’ property to Events. This functions exactly like the Map property of the same name.
- Added ‘visible’, ‘visible_check_locked’, and ‘visible_check_status’ to powers and upgrades in power trees.
- Added ‘requires_status’ and ‘requires_not_status’ to powers and upgrades in power trees. ‘visible_requires_status’ and ‘visible_requires_not_status’ have been marked as deprecated.
- Added ‘on_interact’ as a possible value for Event types. Essentially the same as ‘on_trigger’, except the event can ONLY be activated through the hotspot.
- Support an arbitrary number of Stash tabs. Each tab has a display name and an ‘is_private’ flag.
- Added ‘save_onstash’ property to engine/misc.txt, so it is now possible to disable the automatic save when modifying stash contents.
- The player’s last used Stash tab is now remembered across sessions.
- Added the ability for NPCs to join the player’s party. (Igor Paliychuk)
- Added support for the ‘delay’ property used by Events contained in script files.
- Added ‘Frame Limit’ option to Video settings.
- Added ‘Maximum Render Size’ option to Video settings.
- Improved visual indication of which item set bonuses are active.
- Support enabling touch screen controls on non-Android systems.
- Added ‘Touch Gamepad Scale’ option to Input settings.
- Support fullscreen mode in the Emscripten port.
- Added scrollbar.bg_color to engine/widget_settings.txt.
- Updates to package_osx.sh, including usage of Homebrew for dependencies (ludoza)
- Fix memory leak of tab control in stash menu (MiroslavR)
- Fixed stat bars not having any fill when the value they were representing was non-zero. Now they will always show at least 1 pixel of the bar’s fill graphics.
- Fixed a bug where the game window could be resized below the minimum size after exiting fullscreen mode.
- Removed the default resolution scaling when virtual_heights is undefined.
- Improved performance when checking map event hotspots.
- Fix Windows-style paths with backslashes not working on non-Windows systems.
- Prevent allies counting as attack targets when using mouse movement.
- Fix needing to press the ‘Cancel’ key twice to exit the vendor menu.
- Fix unintended key presses being registered when quitting the game via an OS keyboard shortcut.
- Fix divide-by-zero crash when using the dev HUD with a game that uses orthogonal rendering.
- Fixed a memory leak in Loot copy constructor.
- Fixed ‘resist_percent’ property of engine/combat.txt not working when targets had 100% resistance.
- Support attack_speed effects with a magnitude less than 100%.
- Fixed bug where dead entities could steal HP/MP.
- Fix broken parsing of engine/default_keybindings.txt.
- Fix Effect animations not being synced properly in some cases.
- Removed hard-coded restrictions on using items from the inventory. Now any item that has a power and is not equipment can be used.
- Fix crash when fonts are missing. The engine will try to fall back to the next available font for the current language.
- Background color when using sdl_hardware renderer no longer fills entire window, instead only filling the drawing surface as it should.
- Fix crash when loading a cutscene from a book event.
- Fix infinite transformation loop when dying in a transformed state that was activated by a passive power.
- Fix bug where the player wasn’t returned to their normal state after dying in a transformed state.
- Prevent combat text from overlapping.
- Improved performance when handling many status effects.
- Improved performance when an entity is repeatedly unable to find a path to thier target.
- Fix bug where killing an enemy with return damage would not set defeat status or reward XP/loot.
- Fix check of item requirements when a power requires an item but doesn’t consume it.
- Fix ‘respec’ events to no longer remove item-based powers from the action bar.
- Fix log message when gaining more than one level at once.
- Fixed excessive memory usage when using Items, ItemSets, and Powers with high-value IDs.
- Fix bug where power upgrades that didn’t require power points would not automatically upgrade if other requirements were met.
- Fix infinite loop bug when a power’s list of upgrades contains the base power ID.
- Fix infinite loop bug when locking power upgrades.
- The executable directory is now used when trying to find PATH_DATA on Linux. (r-a-cristian-93)
- Fix ‘corpse_timeout’ in engine/misc.txt being parsed incorrectly (r-a-cristian-93)
- Reworked camera speed curve to prevent graphical “wiggle” during slow movement.
- Fix missing effect description text in power tooltips when using built-in types.
- Fix static events not executing on the same frame as on_load events.
- Fix parsing bug in power trees that would save base power properties to an upgrade power.
- Fix on_load events with requires_class not working in maps/spawn.txt
- Fix timing of Effects so that the first “tick” happens immediately.
- Fix “Press button to use” prompt no showing up for some items.
- Fix loud loot drop sound effect when there are a large number of drops at once.
- Fix incorrect HP/MP regen for high regen values and high frame limits.
- Fix camera, parallax layer, and cutscene speeds when using alternative frame limits.
- Fix not restoring fullscreen option when pressing Cancel or Defaults in config menu.
- Smoother scrolling in WidgetScrollBox.
- Fix click-and-drag behavior on WidgetTabControl, WidgetSlider, and WidgetScrollBar.
- Fix dialog topics being auto-selected when they shouldn’t for non-vendor NPCs.
- New graphics for HP and MP status bars
- Reworked art for the Cleave power
- Cleave power radius reduced to closer match its artwork
- Reduced the strength and radius of Rakk’s freeze attack
- Fixed the Goblin Thief being able to steal potions from a Summoned Zombie
- Reduced the hitbox for spike traps
- Greatly reduced the damage for spike traps. In exchange, the traps now inflict bleeding.
- New alchemy ingredient: Mushrooms
- Added 4 new potion recipes
- Overall reduced drop rates for alchemy items
- Added Alchemy quest
- Added animations for immunity and ice-based slow status effects
- Redesigned the Family Crypt map and quest
- Redesigned the Nazia Mines maps and quest
- Redesigned the Torture Chambers map and quest (again)
- Mortar & Pestle can now be placed on the action bar
- All quest items can be stored in the player’s private stash.
- Belarusian (be) update (Źmicier Turok)
- Catalan (ca) update (Maria Cano)
- German (de) update (Wuzzy2)
- Spanish (es) update (Agustin Ferrario)
- Basque (eu) by aitzkora
- French (fr) update (leø, Christophe Nemo, Bafy)
- Scottish Gaelic (gd) update (GunChleoc)
- Hungarian (hu) update (litoll)
- Indonesian (id) by Kirim Saja
- Korean (ko) by Kor_OfenTHource (team members: bnk159hair, kangdonghun1230, HunSeongPark and paparad0x)
- Norwegian (nb) update (Elias Nykrem)
- Polish (pl) update (Błażej Pęksyk, Grzegorz Szymaszek)
- Portuguese (pt) update (Rui)
- Portuguese (Brazilian) (pt_BR) update (Vicente Monteiro)
- Russian (ru) update (Igor Polyakov)
- Slovak (sk) update (MiroslavR)
- Ukranian (uk) update (Sergiy Borodych)
- Vietnamese (vi) update (Nguyễn Gia Phong)
- Chinese (zh) update (dumaosen, sakura09123)
- Chinese (Taiwan) (zh_TW) by RedBug312
After, two years of no blog updates, I’m happy to announce Flare 1.12 Release Candidate 1. Version 1.12 brings many engine changes as well as new game content. The purpose of the release candidate is to do a final round of testing, and more importantly, initiate a string freeze. See the release page for the release notes and downloads.
Before I continue talking about 1.12, I should mention our new IRC channel. With the recent exodus from Freenode, we also moved our IRC channel to FreeGameDev.net‘s server. You can join via web chat here, or connect manually to irc.freegamedev.net:6697/#flarerpg.
New content means there are several new strings that are in need of translating. If you’re interested in helping, be sure to read over the Translations page on the wiki. The string freeze begins today, July 3, and ends on August 1. However, I’m willing to extend this time period by another month if translators need more time.
Version 1.12 marks the return of the MacOS build! I’ve only been able to test it on MacOS High Sierra, so please do give feedback if you use another version of MacOS.
For the release candidate, downloads are only available on Github. The final release will additionally have them on itch.io and Sourceforge.
Initially, we only offered downloads of Flare binaries through Sourceforge. Later releasing the game on itch.io allowed us to offer an alternative download location. As of today, we’re going to also offer downloads through Github Releases starting with version 1.11. Because we release the engine and game data simultaneously, releases will only appear on the flare-game repository.