Brad Wardell's Blog


Art game artists all insane?

Published on Tuesday, December 18, 2012 By Brad Wardell In PC Gaming

image

 

I was looking very closely at one of the city tiles today in Elemental: Fallen Enchantress and came to realize there is a ridiculous amount of detail that a non crazy person would never notice.

So if you zoom in close enough, you can see a dog staring at a pig being cooked. There is a baby Skath in a pen, and a woman appears to be imploring guests to wash their hands before eating. And the tents are actual (virtual) tents that could have things in them.

No one can see this stuff in a normal game.  So, game artists out there, are you people all crazy or is this specific to our artists? Winking smile

The Hobbit movie thread

Published on Tuesday, December 18, 2012 By Brad Wardell In Movies & TV & Books

We closed down shop last Friday and migrated to our local movie theater to see “The Hobbit”.

I’m very interested in hearing what others thought.  Here are my thoughts in no particular order:

  • I did not enjoy 3D 48fps viewing. It’s distracting
  • The movie could be best described as giving unlimited budget and control to the ultimate Tolkien fan and letting him indulge in that.
  • As a border-line obsessive Tolkien lore guy, I loved every single minute of the movie and would have easily sat through another 3 hours of it without blinking. There was not a minute I wish I hadn’t seen.
  • Non Tolkien fans or simply those who aren’t into indulging in Tolkien lore for the sake of indulging it will find the lack of editing off-putting
  • Radagast the Brown will become a meme, particularly with his “sleigh”.
  • I plan to see it again as soon as possible at 2D.

Update: Saw it in 2D

I actually preferred it in 2D as I felt like I was more free to watch the movie how I wanted to watch it rather than the 3D jarring my attention on whatever the directory wanted.

Destiny’s Embers: Sneak peek

Published on Monday, December 17, 2012 By Brad Wardell In FE Sneak Peeks

image

For those of you who have bought Elemental: Destiny’s Embers, we’re working on some new DLC for Fallen Enchantress just for people who have the book.

image
Up in the Henge is the fortress city of “Outpost”.

image
Exploring the caves

If you ever wanted to see what it would be to go on the adventure that Xander, Geni and friends went on, you’ll be able to see it. Ambrose, Mirdoth, Tandis, Nym and the rest will be there.

(in these screenshots I’m using Relias to travel the map)

Map Editor Hot keys

Published on Monday, December 17, 2012 By Brad Wardell In Elemental Dev Journals

image

(Map I made where my character starts out in the middle of an abandoned village)

 

For those of you who are taking full advantage of the map editor, here is a list of hot keys to help make it easier to make maps.

     {'B',           MFLG_CONTROL,   ELEMENTALUI_MAPEDITOR_KEY_SELECT_CHOKE_POINTS,      IMKEY_KEYBOARD, ENUM_VALUE,},
    {'C',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_COPYASSTAMP,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'D',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_KEY_TOGGLEDEBUGTEXT,            IMKEY_KEYBOARD,    ENUM_VALUE,},
    {'E',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_EXECUTE,                        IMKEY_KEYBOARD, ENUM_VALUE,},
    {'G',            MFLG_CONTROL,   ELEMENTALUI_MAPEDITOR_KEY_SHOWGRID,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'I',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_KEY_SAVEMAPIMAGE,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {'N',           MFLG_CONTROL,   ELEMENTALUI_MAPEDITOR_KEY_NEWMAP,                   IMKEY_KEYBOARD, ENUM_VALUE,},
   
    {'R',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_KEY_CLEARRIVERS,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {'S',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SAVESTAMP,                    IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_ADD,        MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_INCREASE_STAMP_ROTATION,        IMKEY_KEYBOARD, ENUM_VALUE,},
    {VK_SUBTRACT,    MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_DECREASE_STAMP_ROTATION,        IMKEY_KEYBOARD, ENUM_VALUE,},
    {'O',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_CLEAR_OBJECTS,                IMKEY_KEYBOARD, ENUM_VALUE,},
    {'A',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_CLEAR_MAP,                    IMKEY_KEYBOARD, ENUM_VALUE,},

    {'1',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_1,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'2',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_2,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'3',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_3,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'4',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_4,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'5',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_5,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'6',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_6,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'7',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_7,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'8',            MFLG_CONTROL,    ELEMENTALUI_MAPEDITOR_SET_PLAYER_STARTING_POINT_8,    IMKEY_KEYBOARD, ENUM_VALUE,},

    // SHIFT keys:
    // CTRL+SHIFT keys:

    {'N',           MFLG_CONTROL | MFLG_SHIFT,   ELEMENTALUI_MAPEDITOR_KEY_REGENMAP,     IMKEY_KEYBOARD, ENUM_VALUE,},
   
    // regular keys:
    {'A',            0,                ELEMENTALUI_MAPEDITOR_TOOL_GOODIEHUT,                IMKEY_KEYBOARD, ENUM_VALUE,},   
    {'B',            0,                ELEMENTALUI_MAPEDITOR_TOOL_BEACH,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'C',            0,                ELEMENTALUI_MAPEDITOR_TOOL_CLIFF,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    //{'C',            0,                ELEMENTALUI_MAPEDITOR_TOOL_SHARD,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'D',            0,                ELEMENTALUI_MAPEDITOR_TOOL_SELECTION_WAND,            IMKEY_KEYBOARD,    ENUM_VALUE,},
    //E
    //{'F',            0,                ELEMENTALUI_MAPEDITOR_TOOL_DUNGEON,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'F',            0,                ELEMENTALUI_MAPEDITOR_TOOL_FOREST,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'G',            0,                ELEMENTALUI_MAPEDITOR_TOOL_RESOURCE,                IMKEY_KEYBOARD, ENUM_VALUE,},
    {'H',            0,                ELEMENTALUI_MAPEDITOR_TOOL_STARTINGPOINT,            IMKEY_KEYBOARD, ENUM_VALUE,},
    {'I',            0,                ELEMENTALUI_MAPEDITOR_TOOL_ROAD,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'J',            0,                ELEMENTALUI_MAPEDITOR_TOOL_BUILDING,                IMKEY_KEYBOARD, ENUM_VALUE,},
    {'K',            0,                ELEMENTALUI_MAPEDITOR_TOOL_UNIT,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    //{'L',            0,                ELEMENTALUI_MAPEDITOR_TOOL_PROP,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'L',            0,                ELEMENTALUI_MAPEDITOR_TOOL_FLATHEIGHT,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {'M',            0,                ELEMENTALUI_MAPEDITOR_TOOL_MOUNTAIN,                IMKEY_KEYBOARD, ENUM_VALUE,},
    //N
    {'O',            0,                ELEMENTALUI_MAPEDITOR_TOOL_STAMP,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'P',            0,                ELEMENTALUI_MAPEDITOR_TOOL_ENVIRONMENT,                IMKEY_KEYBOARD, ENUM_VALUE,},
    {'Q',            0,                ELEMENTALUI_MAPEDITOR_TOOL_QUESTS,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'R',            0,                ELEMENTALUI_MAPEDITOR_TOOL_RIVER,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'S',            0,                ELEMENTALUI_MAPEDITOR_TOOL_SELECTION,                IMKEY_KEYBOARD, ENUM_VALUE,},
    //T
    //U
    //V
    {'W',            0,                ELEMENTALUI_MAPEDITOR_TOOL_WATER,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'X',            0,                ELEMENTALUI_MAPEDITOR_TOOL_DESTROY,                    IMKEY_KEYBOARD, ENUM_VALUE,},
    //Y
    //Z
    {'1',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_NORTH,        IMKEY_KEYBOARD, ENUM_VALUE,},
    {'2',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_NORTHEAST,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'3',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_EAST,            IMKEY_KEYBOARD, ENUM_VALUE,},
    {'4',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_SOUTHEAST,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'5',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_SOUTH,        IMKEY_KEYBOARD, ENUM_VALUE,},
    {'6',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_SOUTHWEST,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'7',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_WEST,            IMKEY_KEYBOARD, ENUM_VALUE,},
    {'8',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_NORTHWEST,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {'9',            0,                ELEMENTALUI_MAPEDITOR_ACTIVEDIRECTION_SAME,            IMKEY_KEYBOARD, ENUM_VALUE,},
    {VK_ADD,        0,                ELEMENTALUI_MAPEDITOR_BRUSHSIZE_INCREASE,            IMKEY_KEYBOARD, ENUM_VALUE,},
    {VK_SUBTRACT,    0,                ELEMENTALUI_MAPEDITOR_BRUSHSIZE_DECREASE,            IMKEY_KEYBOARD, ENUM_VALUE,},
    //{VKEY_UP,        0,                ELEMENTALUI_MAPEDITOR_BRUSHSTRENGTH_INCREASE,        IMKEY_KEYBOARD, ENUM_VALUE,},
    {VKEY_UP,        0,                ELEMENTALUI_MAPEDITOR_KEY_MOVE_CAMERA_UP,            IMKEY_KEYBOARD, ENUM_VALUE,},
    //{VKEY_DOWN,        0,                ELEMENTALUI_MAPEDITOR_BRUSHSTRENGTH_DECREASE,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {VKEY_DOWN,        0,                ELEMENTALUI_MAPEDITOR_KEY_MOVE_CAMERA_DOWN,            IMKEY_KEYBOARD, ENUM_VALUE,},
    //{VKEY_RIGHT,    0,                ELEMENTALUI_MAPEDITOR_BRUSHSTRENGTHFALLOFF_INCREASE,IMKEY_KEYBOARD, ENUM_VALUE,},
    {VKEY_RIGHT,    0,                ELEMENTALUI_MAPEDITOR_KEY_MOVE_CAMERA_RIGHT,        IMKEY_KEYBOARD, ENUM_VALUE,},
    //{VKEY_LEFT,        0,                ELEMENTALUI_MAPEDITOR_BRUSHSTRENGTHFALLOFF_DECREASE,    IMKEY_KEYBOARD, ENUM_VALUE,},
    {VKEY_LEFT,        0,                ELEMENTALUI_MAPEDITOR_KEY_MOVE_CAMERA_LEFT,            IMKEY_KEYBOARD, ENUM_VALUE,},
    //{VKEY_DELETE,    0,                unused,                IMKEY_KEYBOARD, ENUM_VALUE,},   
    {VK_NUMPAD1,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_SOUTHWEST,            IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_NUMPAD2,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_SOUTH,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_NUMPAD3,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_SOUTHEAST,            IMKEY_KEYBOARD,    ENUM_VALUE,},   
    {VK_NUMPAD4,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_WEST,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_NUMPAD5,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_RANDOM,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_NUMPAD6,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_EAST,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_NUMPAD7,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_NORTHWEST,            IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_NUMPAD8,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_NORTH,                IMKEY_KEYBOARD,    ENUM_VALUE,},
    {VK_NUMPAD9,    0,                ELEMENTALUI_MAPEDITOR_TDFACING_NORTHEAST,            IMKEY_KEYBOARD,    ENUM_VALUE,},

    {VK_CAPITAL,    0,              ELEMENTALUI_MAPEDITOR_AUTO_PLACE_CLIFFS_AROUND_LAND, IMKEY_KEYBOARD, ENUM_VALUE, },

Why are the discussions here so good?

Published on Monday, December 10, 2012 By Brad Wardell In Fallen Enchantress

This came up over the weekend when a friend of mine was talking about the forum poster quality here on Fallen Enchantress versus your normal "game site" forum.  The question was, why is the "signal to noise ratio" so good here?

As some of you are aware, we barely moderate. I can't remember the last non-spam account we banned. Locking a post is so rare that it's a big deal when we do it. 

So my question to you guys, especially those of you who are on lots of game sites, why is the discussion quality so high (or if you disagree, put that in as well).

Thanks!

Cameras sure have gotten good

Published on Sunday, December 9, 2012 By Brad Wardell In Photography

Every year I send out a Christmas letter to friends and family full of pictures. Our pictures are taken with whatever the typical consumer grade gadget we have on us. In more recent years, that’s been iPhones. 

This year marks a threshold being crossed where the picture quality really has gotten spectacular. The sharpness, color balance and just general quality is amazing.Camera+ recipe?? scene: Auto

Some of the AI updates coming in 1.1

Published on Friday, December 7, 2012 By Brad Wardell In Fallen Enchantress

Just checked this in:


----------
12.07.12
----------
+ Moved AIEvaluateAreaThreat to AIfaction
+ AI looks for enemy defenders sitting on top of targeted improvements in AIFindClosestEnemyImprovement
+ AI trait weighting reduced from 1000 to 100 for researching techs purposes
+ AI checks to make sure a given unit isn't a city guardian unit before doing AI on it
+ AI calculates the battle rank of its champions and sovereigns each turn afresh to accurately reflect how strong it is prior to operating on it
+ AI no longer uses post message to leave a city in order to ensure it has real time strength notice of a target city
+ AI caps how much it will count crystal, influence and metal when factoring what it should research
+ AI vastly better at choosing technologies to research
+ AI is more protective of its cities
+ Fixed bug where AI pioneers couldn't build outposts if they were in an army with a champion or a sovereign (hence, armies of pioneers late game)
+ Fixed AI bug where sovereigns and champions, late game, would tend to lone wolf attack cities
+ AI pioneers better about staying put if there is an area threat around them (i.e. will stay inside a city)
+ AI values armor more than before when designing units
+ AI champions now care more about whether the city is defended well enough before leaving a city
+ Fixed bug that prevented AI from casting strategic attack spells on enemy units
+ AI interacts more with players
+ Modified Average combat rating to be 100 instead of 200 in elementaldefs.xml
+ Fixed crash bug in elementalsectormapper where the ZOC would get updated in a thread
+ Fixed bug in mapgenerator.cpp in which terrain decals were being loaded and placed (we don't display them so we were just using CPU and memory for no reason)
+ Modified the prop code so that deserts display more props and other terrains show fewer (mapgenerator.cpp)
+ Fixed path finding bug that caused any AI units that intersected during movement to cancel their destinations. This prevented AI units from being able to effectively create armies or get around late game (basically crippled AI movement late game)
+ Modified the combat rating calcualtor to consider defense a bit more

 

We're going to tweak easy and below to be easier because of these changes.  My 1.05frog build (https://forums.elementalgame.com/437369/) has these improvements in it already for anyone who wants to try a private build.

 

One thing I learned from extensive testing is that the AI "quality" is heavily dependent on which factions you play against. Some factions are weaker than others (in terms of the AI's effective use).  Krax and Trogs are the ones the AI loves the most.

Fallen Enchantress’s Map Pack DLC FAQ

Published on Wednesday, December 5, 2012 By Brad Wardell In Elemental Dev Journals

image

Q: What is the Map Pack?

A: It is a collection of pre-made maps and random map stamps.

Q: Does it help with randomly generated maps?

A: Yes, it includes a host of new stamps that make the random maps richer as well.

Q: What’s special about the pre-made maps over a randomly generated map?

A: With pre-made maps, we can do things that the random map generator can’t.

Q: Like what?

A: For example, it includes the Anthys map which is over 5X bigger than the normal large map. A normal large map fills up with 8 players. With Anthsys, over a dozen players would have lots of room to expand.

We also have boats on these maps that players can take to sail out to areas and explore the seas for hidden islands and treasures. Pre-made maps also let us do crazy things like have a map where it’s all Wild Lands all the time with everyone trying to survive and ultimately conquer them.

Q: Are the starting positions hard-coded?

A: No, even on Anthys, we made it so that the starting positions are randomized so that you can play it over and over again.

Q: How much does it cost?

A: $4.99

Q: Where can I get it?

A: You can get it here: https://www.elementalgame.com/fallen-enchantress/purchase.  If you bought FE on Steam, you can get it on the Steam page.

The Steam Factor and game sales

Published on Tuesday, December 4, 2012 By Brad Wardell In PC Gaming

imageLast week I talked to Brendan Sinclair of GameIndustry.biz regarding the lack of transparency in digital distribution.  If you’re a game developer trying to decide whether to make a game for the PC, XBox, Wii U, PS3, iPad, Android, etc. knowing the likely sales outcome is critical.  And yet, even at this stage, it’s very difficult to have an idea of how well a game will do on a target platform.

For example,  last year, we released a little Christmas game for the XBox Live indie channel called Elf Squad 7.  For a couple weeks, it was in their top sellers list.  But that meant selling just a few hundred copies. If we had been a start-up targeting XBox Live Indie, we’d be doomed.  What is needed is some sort of metric that lets would-be developers gauge what their prospective return on investment is if they are successful on that platform.

As a game developer, I’m a lot less interested in how many copies the #1 game on a platform does than I am what the 100th did.  I’m sure Angry Birds on the iPad has sold millions of copies.  But I’m not likely to make the next angry birds. Getting into the top 10 or even top 100 sellers on a given platform is a successful achievement. But if my game can make it into the top 10 seller on a given platform by selling only a few hundred units for a given time period, that’s not a good sign to me.

For all the shouts that “PC gaming is d0med” we’ve heard over the years, it strikes me as odd that Galactic Civilizations II, a game released 6 years ago and is almost certainly in the top 100 best sellers on Steam has done over $1 million in the past year alone on that platform.  And that’s just Steam and not counting Impulse or direct or retail or anywhere else it’s available.  That strikes me as a  pretty healthy platform.  As a developer, if I know that something that didn’t even crack the top 100 for that year can make 7 figures then that’s a good platform to target.

But until that developer has taken the plunge on a particular platform, there is no readily available way for them to know what kinds of sales their game can expect.  If I were making cars, I know exactly how many Chevy Volts or Honda Accords have sold in the past year.  But in games? It’s guess work.

It would be really handy if the platform owners would divulge what their 100th best selling game did that year. They don’t need to name the game. Just the # of units sold and its average price point.  Understandably, the weaker platforms wouldn’t divulge this but the stronger ones could use this as a competitive advantage.  Right now, game developers too often feel like they’re playing the lottery and that’s not a healthy way to run a business.