Friday, December 31, 2010

New Year Update

And so 2010 slips away.  The original plan to have magelore as a Xmas 2010 game has been buried for many months now. Trying to keep enough cash flow to keep afloat has been slowing down progress to a crawl. Seems I can't stay up to 2am every night of the week - not sure why I'm so tired lately. Gotta sort that out - I need those hours.

Happy New Year

To celebrate new year, I've been watching predator while making notes on magelore quests. Yes, I am a part animal - don't try to keep up with me,  I'd just wear you out.  Anyway, it appears that I will really need some dynamically generated dungeons to provide enough monsters to grind on. This is quite a deviation from plan - I'm not sure how much extra content I need to keep the dungeons interesting.  A few side quests like - go rescue little jimmy from the deep dark cave will add a lot of gameplay and grinding for not a lot of work. Ive never written a dynamic dungeon generator but the algorithms look pretty straight forward.  I should be able to just give a list of monsters and herbs that I want in the dungeon and some prize for reaching the bottom and how many levels there are. I'll need to jot down some more design notes - how to the players go up and down. What happens if you die in a dungeon. What happens if you exit and immediately re-enter - will it just be an exploit of infinite monsters to grind on?

The original plan was to just populate the world with monster areas and you can fight them on the mainland. I'll keep looking into making that work. Currently you go up to a monster spawner and just wait and kill them as they come out - not really good. Could randomise the spawns - so they never spawn in front of you. Just hang around an area for a while and you will find them, but never know where they are coming from. I guess I'll try this first. I think some dungeons would add a lot anyway, if I can chuck them in without too much effort.

Am I the most indecisive person in the world? I think I"ve changed my mind twice during the length of this blog. Oh well. Keep writing stuff down and implementing and testing. It's pretty obvious when something is working and when its not working. At the moment all I know for sure is that the spawning needs more work. Perhaps I've made the map layout too dense in an attempt to keep it from looking too sparse. Will need to experiment with that too.

I've got about 7 NPCs now. That's most of my family now and good friend from work and his wife. Need a few old wise men, and a couple more miscellaneous and that should be enough for the first release. 

I did some art revamping to the gui. Added some texturing to the inventory screen and the magic sidebar. Looks a truckload better. I think the health/mana status bar is a bit small,  and there needs to be a bit more fanfare when you get XP from monsters to give you a good feeling of achievement. I really wanna get some more content in first though - I got the tutorial mission in a couple of months ago and have made no progress on adding other missions. I'm fairly optimistic that once I get the next mission in place, it will build a lot of momentum.

Till later... party on dudes.





Thursday, November 11, 2010

Much ado about nothing

It's been hectic hear but not in a good way. The company I have been with for 10+ years just folded, and I've been frantically looking for new work. I don't have the confidence to go full time on iPhone work since the last 3 wretched games apps only made a few grand each. I envy all the college aged developers - if there was something like the app-store around when I was living at home, doing university, it would have been glorious. Now we old farts with families need to do this as a very part-time hobby.

But I digress... so the company went down due to lots of staff with no paid projects sapping all the cash. I stayed with them with my team for another week hoping the current paying project could be salvaged but unfortunately the publishers didn't want to play ball with starting up a new company to finish the project so it was resume time for me. I quickly got a new job with another company in Brisbane but they got their funding cut and revoked a bunch of job offers a few days later so it was back to square one again.

Nearly a month later and I've now got a contract working on a war simulation project which should be a lot of fun and with an added bonus of being able to work from home. A substantial pay cut, but now that I'm contracting and working from home I should make back some of the money in savings from travel and taxation. I'm just registering my new business name now - Mad Muppet - which I hope to release Magelore under sometime early next year.

As for Magelore, while I've been mostly demotivated by the whole company-going-down affair, I have managed to get a small amount down. I've added a shop interface which uses the same universal inventory screen that everything else uses. Not the prettiest thing in the world but functional, flexible, consistent and done.

I've also done a small revamp to the hitpoints and play hud as seen in this shot..  In the top left you can see the player hud. Not sure if it is too small yet - will take some playtesting on the device. Should be trivial to enlarge if it necessary. The enemies now just show their hitpoints and level. The level is important since I use a WoW style adjustment feature to make sure it is very hard to kill enemies above your level, regardless of how you have specced and equipped. It will still be important for me to try and balance the game so an equal level monster is comparable in power,  but the level adjustment trick just covers my ass to make sure no-one can just breeze few the game after finding some exploit with the enchantments.



Now I've hit a point in the project that has bogged me down a bit - filling out the storyline and quests. I've decided to start setting myself numeric goals - like number of spells needed to release the game,  number of quests needed per level, etc.  Having defined numeric targets will give me a definitely marker to aim at, as well as a feeling of developmental pace. Firstly, there will be just 20 character levels in the game. I think that should be sufficient for a $1 iPhone game - I don't want the game to be too long that people don't complete it. I'd rather make a smaller $1 game and then release episodes or sequels. This is not because I am stingy - I actually think people would prefer to be able to finish the content and then going onto the next part at their leisure rather than get some 15hr epic that 90% of the public get tired of after a few hours. The trick should be to have nicely finished off storylines, but with some untied plotlines that can be expanded into sequels.

 So next on my list is to come up with 20 unique spells and up to 3 levels of each spell. I think that should be more than enough variety for a game of this scope. I know the top level spell will be some sort of vulnerability spell that will require quest-based ingredients to learn and will be needed to kill the final boss. Now I just need to fill in the content to cover from the end of the tutorial to the end boss :)

Ok, enough for now. Back to filling out my ABN forms.

p.s.  Just saw this brilliant line from John Carmac on iphone games.


"The Escalation programmers...codebase is all STL this, boost that, fill-up-the-property list, dispatch the event, and delegate that.
I had been harboring some suspicions that our big codebases might benefit from the application of some more of the various “modern” C++ design patterns, despite seeing other large game codebases suffer under them. I have since recanted that suspicion."


I've been harboring the same suspicions since I've been something of a dinosaur and completely avoided boost, and only recently embraced STL though the assembly bloat it generates still irks me. Nice to see someone like John Carmac back up my exact internal dialogue. Now I don't need to feel so guilty at not liking the overly complex template meta-programming that seems to be the norm now... Would love to see what his current large-project codebases look like.. Apparently he's still been using C till quite recently.



Monday, October 11, 2010

Back in the Helm

I've been really demotivated to work on Magelore lately, but I think the worst of it is past now. I had a bad cold and cough for about 3 weeks - painful. I still have remnants of the cough but the cold is gone.  Work has been very taxing - I'm working on an xbox/ps3 downloadable arcade title and the timeframe and code team is quite small. However, the workload is very creative and the game looks like it will be a really good title so I've been happy to put in lots of hours. Whenever I'm being creative at work, its takes from my drive to be creative in my home projects - I think I have a fixed per-day creativity budget.

I jumped onto Twitter today and have been tweeting with the creators of Rogue Touch and Sword of Fargoal on iPhone and its been a great motivator for me.  They're both doing very well - Rogue Touch is on sale and jumped into the top 25 list for RPGs which is awesome. So I'm back into MageLore again.  I've reworked the main menu now to be a simple 3 slot profile creation screen. You can delete a profile by dragging the delete icon from across the profile - I'm hoping this is enough to stop any accidental deletion. However, my 3 yr old has been happily deleting saved games from all my ipad apps and this technique wouldn't really stop him. I think its nicer than a "Do you want to delete Y/N" requester though.

I also pop up my own keyboard layer now. I spent a few hours playing with the UIKit keyboard overlay but it seems to be heavily biased towards automatically coming up when you use the appropriate UIKit control - which is not much use for me since all my UI is custom OpenGL code.

Anyway, feels like a proper game flow now - create a character, rename him, watch the intro video, and play, or select an existing profile and jump straight into the game.

I think things will move fast once I start adding some quests again. I've not nutted out my overall story yet. Maybe I should take some notes on the train to/from work - though I'm usually trying to catch up on sleep on my train rides...

Anyway, stuff is happening - so I just need to keep up motivation and stay in the saddle.

Thursday, September 23, 2010

Tutorial mission done

The distance between blogs seems to be slowly creeping up. Be assured I'm still working hard on the game, but not a lot of visual candy to show off.  I've finished the tutorial mission in Magenta. It teaches the player how to fight, learn spells, gather herbs and do enchantments. It shows off some conversation choices and starts the main quest thread. I've decided going for a monkey-island comic style,  partially because its a very popular game that I've enjoyed myself,  and partially because my attempts at serious fantasy literature sucked badly.

On the technical front,  I've implemented the player load/save system now. I'm going to go with an auto-save whenever possible but avoid saving during conversations and specific points that might make it difficult to provide updates without breaking someones profile, like during spell casting or conversations.

Next on my list is to add Jesters (what would Ultima have been without all the pointless Jesters in the towns) and general mobile NPCs in the main cities,  and then I need the shops in finally so you've got something to spend your random drops on if they aren't needed for spell/enchantment recipes.

I just updated my iPhone4 to have GameCenter now and I'm very keen to start supporting it. At the very least, a health list of achievements would be easy to add.  I'd still like to add minigames to all the cities but I think this will have to come after initial release or I'll never get this thing on the shop. Christmas is already looking pretty doubtful unless I cut a lot of corners with the quest content and I don't want to risk bad reviews from releasing the game when its not ready...

I'm still working hard at my day job but we seem to have gotten the schedule under control now - at least as far as code goes, so hopefully I'll have more time for Magelore work now. I haven't added any new art in, but here's a shot of me fighting some caged rats in the tutorial mission.  A star now appears on the inventory icon whenever there are stat points to spend, or mission details have changed,  so the player should never get lost as to what to do next



Monday, September 13, 2010

First town map done

My first town map is finally done. Magenta. This is where you will start out in the world and where a short tutorial mission will take place.  I had to add a few new tiles to populate it but I think its got sufficient variety now. I'm slowly working through the tutorial mission now. The first missions take longer to write as I have to add new script support as I need it. I've added an OnCreate script so I can conditionally lock doors and unlock them later through conversations. It should be easy enough to conditionally unlock them also, say if you need a specific key or item. The tutorial missions locks you in a small room with the main female protagonist of the game - mina. She starts as your tutor but will turn up throughout the game at points in the storyline.  As you complete her tutorial quests, she unlocks doors for you and eventually you'll be free to roam the world looking for quests.

That's all for now. My day job is still eating into magelore hours.  The chances of releasing this thing by christmas are looking pretty slim unless content starts speeding up really quickly,  and I still don't have any shops which will  take a little while to get right.

Wednesday, September 8, 2010

Spring Update

Start of spring and everyone is sick.  Terrible stomach cramps and flew is sweeping my home and workplace. I got it a few days ago but not too severely and am just recovering now. On top of that, I've been crunching a few days a week on my daytime work,  which has been eating away my Magelore development time.

So I thought I better update that things are still moving but very slowly. I keep thinking I've finally done with tech and can concentrate on content and then something comes up.  Most recently, I've been filling out the world map. Its 256x256 which didn't seem like a lot, but hand painting 65000 tiles is taking longer than expected. I originally was using a "clever" trick to save on alpha overdraw, but it meant that I was restricted as to what trees I could put on what terrain. I've had to drop the trick so that I am now have a more conventional overlay/underlay terrain system. I've also added a mountain edging pass to my existing edging system. This means I can just paint any terrain and put any mountains or trees over the top and it will clean it up for me later.

Since there has been no new art released for a while I thought I'd drop out a couple of screen shots. Nothing too exciting, just shows some of the new muddy areas and the street lightings at night. I'll need to pull in some large landmarks that will help people identify exactly where in the world they are as the roads and trees can look a bit similar.


Thursday, August 26, 2010

Lots of optimisation work - no content progress

Just a quick blog tonight..

I've had to crunch hard at work on a new project. Can't mention what it is because of the usual NDA's announced project bla bla bla.... Unfortunately means I haven't made much progress on Magelore content. I have managed to spend a couple of nights optimising it and fixing some memory issues... Reduced the memory usage on iphone 3g frame 17meg down to 7meg by changing the packing algorithm of my sprites. Also found my texture pipeline was not freeing up intermediate memory it used to build the open gl textures.

Also rebuilt the project from scratch because something in it was causing issues with the 3g version. In the process, I now have access to open gl 2.0 for ipad or iphone 4 if want to take advantage of shaders,  though not sure what I'd do with them - the focus is really on getting maps and quests in now.

Looks like I'm going to have to cut some of the side features if I want to make a christmas release - things like the town minigames might have to come after the initial release.

Tuesday, August 17, 2010

Starcraft II completed - back to work

Just a quick blog to say I've been temporarily delayed by StarCraft II but I've completed the campaign missions now and can start getting back into MageLore development.

I've been developing on iPad for a while now and went back to my old 3g phone and noticed the framerate has degraded a lot. Not sure when this happened :( I think it was running ok after upgrading to OS4 but its pretty unacceptable now... I'll have to trim the code back and see if I can spot what is taking all the time. I don't have that many poly's or overdraw so there's really no reason for it to run less than 30fps on an old ipod touch or 3g phone.

On a brighter night,  I got and iPhone4  and Venger runs like a dream,  even in 3d stereoscopic mode. Need to try and track down my 3d glasses again and have a go.  If you haven't played it,  there's links to all our games at  http://www.wretchedgames.com/   They all have free demos you can try.

Wednesday, August 11, 2010

Tile edging technology

I spent a night working on the world map and soon realized it was far to slow to manually placing down the edging tiles for the paths and oceans. Also, having to draw all the edge pieces takes ages and precious tile slots. So I went to ground for a couple of days and developed an automatically edging layer.  I can now just have a single tile for each terrain type and the sys will add the appropriate edge tiles around the edge. The result is pretty good, though its a simple overlay system and has the limitation that everything must edge with the default grasss terrain. I'm pretty confident this won't be a major limitation.

Raw Map Data
With Edging Tech
Raw Map Data
With Edging Tech

This new tech means I fill out maps very quickly, and add in new terrain types quickly. The world map is quite large,  and I'm finding I need a few terrain types to keep the regions unique and interesting.

Other new things that can be seen in todays youtube video - I've upgraded the city graphics with some cheap models from TurboSquid. There's lots of great art on that site now. I've added the new tree and grassland section as well as a snow section that can be seen in this weeks you-tube video. There is now a blizzard spell and spell casting now has a target indicator. The town lamp graphics has been revamped and there is now a signpost object that will be found all over the game giving directions as well as the occasional clue.

I'm mainly adding content now,  though there are a number of bugs I need to fix, and features like shops and the minigame framework haven't been started yet. I really don't want to release the game with large parts of it missing but then I don't want to hold it back for years, so I'll probably have to work out which features can be added after release without turning away potential buyers.

http://www.youtube.com/watch?v=0Tua1XzQCx8





Thursday, August 5, 2010

the content work begins

Added some more spells and began working on the real maps finally. New spells include a WoW style blizzard spell to freeze or slow a group of monsters, and a meteor strike spell, which is like the Rain of Fire except you pick 5 specific targets. Also added a heal spell and a magic shield enchantment. I've given trolls a high level regeneration enchantment so they will regenerate over time. I might need to make some extra strong monster-only enchantments since the player enchantments have to be balanced to be not too overpowering.

I've started working on the main world map.  It's 256x256 which doesn't seem too big until you start trying to fill it with interesting landscape.. I don't think I've got enough variety of tiles yet to give the world enough variety yet, but it should be easy to come up with some more. Also need to add some signposts to guide players around the map. I'll be starting the magenta city map soon also. This city of magic is where the player will start and his tutorial missions will begin.

Not too much to report. Between StarCraft II being released,  catching up on True Blood season 3, and a new project at work, it's been hard to maintain focus on magelore, but I'm still managing to keep some momentum which is good.

Thursday, July 29, 2010

Enemy Spells

Despite power blackouts at home and new workloads in my day job, I've managed to get some progress done so I'm uploading a new video today. Enemies can now cast spells and have enchantments. I've started by giving the fire element an immolation enchantment and the ability to cast firebolt. The nice thing is that it takes very little data to set up, so I should be able to go crazy with enemy enchantments.  The fire elements data is fairly simple:

  < enemy name="fire.element" desc="fire.element" sprite="fire.element" lvl="5" str="15" dex="2" con="15" int="10" fireresist="100" coldresist="-100"  >
    < drop chance="10" minCount="50" maxCount="100" name="gold" / >
    < enchant name="IMMOLATE" / >
    < spell name="FIREBOLT" cond="(randomPercent 50) and (inRange self target 2 4)" / >
  < / enemy >

A simple condition script determines when they should fire the firebolt. This one is a simple random chance when in range of the player.  I can make them more complex if needed.

The immolate spell is also just a simple script:


  < enchant name="IMMOLATE" desc="IMMOLATE" longdesc="Inflicts 2 points of fire damage to any nearby enemies per move and increases fire resistance by 10" >
    < req name="ruby" / >
    < req name="abrusseed" quantity="2" / >
    < req name="bloodroot" quantity="3" / >
    < event name="OnSecondaryStats" script="addStat fireresist (power * 10)" / >
    < event name="OnTick" script="foreachneighbour 2 (doDamage it fire (power * 2) immolate)" / >
  < /enchant >


The enchantment increases your fire resist whenever the secondary stats are calculated,  and does damage to all neighbouring actors, regardless of friend or foe. I think friendly fire is usually a good thing so I'm letting the fire elements kill other creatures if they go too close. I'm hoping this will create some interesting strategies and dynamics.  Creatures will be able to attack other creatures. There will be charisma based spells that can influence creatures into going passive or attacking other creatures.

Firebolts, on the other hand, are still quite hard coded.  I'm still conflicted with which way to go with them. Moving them to script would be good, though the visual effects tend to be very specific per spell so I'll need to think it over more to see if it a few generic systems could cover a lot of spells.

I've also added tabs to the universal inventory screen. The number of elements in the menu was always going to be quite large and scrolling through pages of entries is far too tedious. Splitting into 4 groups seems to cover it well for now. Hopefully I can get by with only four,  though I think it may be necessary to split them up further when there are a lot more spells, enchants, missions and beasts.





Sunday, July 25, 2010

More content...no videos...

Spent the last night playing Microsoft GameRoom on the PC... I don't have an X360 :( so I've been relegated to playing it on my laptop. Some great classics on there if your into retro gaming. Of course, I may be biased, since I work on GameRoom during the daytime :)  I'm in the leaderboards for Scramble and Gyruss... at least for a little while until I get knocked out of the leaderboard.

I had intended to post a video of the town tonight, but I've reneged and am going to work on adding new content instead. It takes most of a night for me to take video, convert and upload.it along with an accompanying block.  I'll definitely get a video next week, and it should have a lot more goodies to show off. The town art is in, but I've not designed any towns yet.  I've got nearly enough content to start the tutorial mission and design "magenta" which will be my primary town, for the early missions at least.  I still need to add some scripts for locking and unlocking gates, so your trapped until the tutorial mission is over, but that's fairly trivial stuff.

This week I've added some animated water, fixed up various minor iPad bugs, added some scripts so the immolation enchantment is now working and damaging nearby enemies and a new enemy - fire elemental. Not much point posting a static screenshot of animated water, but I can at least post a shot of the elemental..


On an unrelated point, I think I found a great subject for a minigame... The towns and cities in Magelore will have at least one minigame each - not necessarily all available at launch time. This is presented as a mage who will sell you a magical tonic to drink. If you drink it you are transported into the game and return when the game is finished. The games can be any gameplay idea I'd like to prototype. I think I'd definitely be able to come up with way to squeeze Trogdor into a minigame...










Tuesday, July 20, 2010

Work started on Town graphics

I've started work on gettng the town graphics into the game and I'm really happy with the progress. I had to add some new features to the lighting system to make it look just right and it all seems to be working out quite well. I've made the wooden floor lighting use an "interior floor" lighting mode where sunlight fades out quickly over distance, so even at midday, the interiors will get quite dark if you don't have any artificial lights.  I've added a couple of tables that give light and a wall lantern, so most rooms will be lit 24hrs a day,  but it allows me to do complex adjoining rooms that are very dark even during the day. I've also changed the way walls are lit so the entire wall brightens up. Previously the 4 corners of a tile would receive different lighting, and to cut a long story short, this meant that the top verts could go black from being in shadow while the bottom verts would be light... this is a side effect of a trick I use to save on overdraw - everything is actually a flat 2d tileset and just made to look like things are orthographic 3d. Allowing tiles to overlap neighbouring tiles completes the illusion.

I've added door objects that open and close as you pass through them, which works great with the dynamic lighitng. I've made the doors 50% shadow casting (like the forests) otherwise doors below you would just be black silhouettes due to the shadow system. You can see this in the screenshot below.

So, here is a teaser screenshot. I'll do a video of it on the weekend as it looks great watching the dynamic lighting kicking in as you walk around and open and close doors..

Saturday, July 17, 2010

New content - ice magic, respawn points

Hooray, hazzah and woot..  I've made some actual visual progress at last. A couple of weeks of restructuring and engine fixes are finally over and I've started working on miscellaneous new features.  This week, I've done a few additions and modifications.

Firstly, the death and respawning is in now. Respawn spoints will be spread throughout the maps and are activated by running over them. Only 1 respawn point can be active at once, so the player will respawn back at the most recently activated respawn point. This is meant as a strategic penalty to be managed by the player... Of course, pretty much anything that is a penalty to the player is open to revision since players don't usually appreciate being penalised for anything.  Whenever you die, you teleport back to the respawn point and are revived with minimal hitpoints and mana and with any spells/curses or ailments removed.







Secondly, there is now an Ice Bolt spell. This is like Fire Bolt except with a chance to freeze. All cold damage done also attaches a cold status modifier for a few turns which will reduce their movement and attack rate. Also, any frozen enemy has a slightly increased critical hit chance. I pinched that idea from WoW. I hope they forgive me.





Next, I've upgraded the inventory screen. You can now see exactly how much effect any enchantments have on each stat. This includes indirect effects such as Giant Strength increasing your damage since damage is affected by strength. The enchanted crystals graphics have had a rework and it also shows how effective each crystal is when slotted  (since slots are all affected by misc. elements like light/day/war/peace).





I've added 2 new enemies. Trolls and Ogres. Both of these turn to stone during daylight so there is an element of strategy here, especially if you get quests that involve killing these beasts, or running through an area inhabited by high level ogres or trolls. While they are stone they are completely immune to damage, so no sniping them. You'll need to camp and wait till sundown if you want to battle them.





Finally, I've done some more work adding hi-res versions of more textures and tilemap graphics. Looking forward to getting an iPhone4 to see how they look on the "retina" display.

I think I'll probably work on getting a shop working, and getting some puzzle elements in place yet, but I should dump some more ideas on paper and prioritize them. Looks like a few weeks still till I'm really ready to start laying out real content.



Saturday, July 10, 2010

Universal App - Technical Details

Back again... I've been hard at work upgrading the engine to handle multiple resolution issues properly, since universal apps must deal with 480x320, 960x640 and 1024x768. Most of the systems in the engine jwn systems  (just-whats-needed)  and it turned out the view system was a nest of hardcoded view sizes.  I've got it working fairly well now, and I've had some requests to talk over some technical issues, so tonights blog will be mostly boring technical facts to do with how I handle the universal app problem.

Firstly,  Magelore will be a universal app - which means one download will work on iPhone, iPhone4 and iPad. This means the download will include high definition (2x resolution) artwork that will be used on iPhone4 and iPad. All the apps I've purchased so far for my iPad have been specific "HD" apps that only run on the iPad. I can only guess why this is currently, though I can think of a few factors at play. Currently, you can get away with $5-$11 for an iPad app, but its hard to get more than $1 for an iPhone app.. So packaging iPhone and iPad together would mean you either get no iphone sales, or you get poor return on iPad sales.  My answer to this is that I may release a low-def version of the game that is iPhone only if I have to... There's also a possiblility the game will be free with in-app purchases, so initial sales are not important - I want it in as many hands as possible.

So, as a universal app, I need to support the 3 resolutions. I don't want to have to completely layout the UI 3 times,  especially since iPhone and iPhone4 are the same screen size and aspect ratio, it seems more appropriate to make the writing and buttons clearer than smaller.  For iPhone4, everything can be identical to the iPhone, just using double resolution art. So I've set the orthographic projection size for both of these to 480x320. No code has to change for the iPhone4 version.

However, for iPad, you have to deal with a different aspect ratio of 4:3 instead of 3:2.  Anyway you do it, some UI will need to have a different co-ordinates. Also, the distance between buttons is physically different with a much bigger screen, so its desirable to move some buttons around to reduce the amount the players will need to move their hands during play. So for iPad, I've gone with ortho co-ordinates of 512x384. This has lots of advantages. Without altering the map renderer,  we get slightly more map view area, which is nice,  but not so much that its a different game (due to being able to see enemies much further away).  It's also very important to stick with ortho co-ordinates that are a multiple of the hardware pixels. This way we still get pixel perfect rendering of fonts and sprites. I ended up spending 3 days getting the font rendering just perfect so all resolutions display their fonts cleanly. As a test, you can see in the image below that the 'i' and the 't' have perfect clean edges - no stretching or bilinear filtering artifacts.


The next problem was how to get the game rendering with higher definition sprites. My current sprite pipeline is to load a psd, and each layer becomes a sprite. Another layer can be used to define the "hotspot" of the sprite (also known as the pivot point or handle). Adding a double size sprite in my pipeline would just make them doublesized on screen.  There's a lot of solutions to the problems, but I'll just outlay what mine was without going into pages of reasons. The engine now appends a "_hd" to the filename and tries to load that first.  If we are NOT in highdef mode,  that file is downsized to half size for the low def version.  If the "_hd" file is not found,  the regular file is loaded instead.  For any "_hd" file (that is not downsized), the resulting Image and Sprites are marked as highdef and are rendered at half size.  The same system is in place for fonts. I use "BMFont" from AngelCode to generate my fonts. With high def, I can make the fonts a little fancier and they are still readable. In lowdef mode, I've gone for fairly boring fonts, preferring to make sure they are easily readable.

Here is a sample of how the extra resolution adds to the quality of the graphics.  Note that I haven't added highdef versions of the tileset yet.


Since most of my UI system will go through the universal info screen,  I've redesigned that to work of percentages rather than actual co-ordinates. That means it only shows slightly more information on the iPad than the iPhone.  Also, it means the art work is quite geometric (rendered boxes and gradient) rather than intricate artwork. I'm not sure if this detracts from the overall production values, so it may change in the final version of the game, but for now it is quite function.


Finally, here is a shot of the same scene on iPod, iPhone4 and iPad. To be honest they are screen shots from the PC version running in "compatibility" mode (I can put ipod, iphone4 or ipad on the command line and it emulates the correct backbuffer and viewport sizes).

iphone

iphone4

ipad

Thats all for now. I've also added icebolts and the ability to freeze enemies, or slow them. I've still got a little work to do - I need to convert the magic absorption stats to magic resistant stats so they can be used to resist freezing or cold effects. Once thats all in I'll do a new gameplay video. Hopefully I can get back to adding content now and less engine work.

p.s. if you have any questions or topics you'd like me to discuss, please add a comment below or email me.

Sunday, July 4, 2010

False Alarm - Old apps are fine...

Got confirmation that Apple won't be removing any old 2.0 apps from the appstore - just not allowing new apps to come in using that sdk. This means I don't have to upgrade Venger and my other apps after all. yeah! Back to work on Magelore.

I've put in support for high definition art now - just need to create it all now... The engine now appends an _hd extension to psd's and png's for the ipad and iphone4 versions so they can load a 32 bit double rez version, and the iphone 3g / ipod will load a 16 bit standard rez version. The plan is to keep the app universal, so if you buy on any platform you can play on every platform with the appropriate graphics set. I'm still stressing over if the app should be free with in app purchases, or a one time price. Plenty of time still to work that one out.

Anyway, a few more bugs to work out on ipad (alpha is coming out white instead of black,  and my touch processing is getting throttled from my render pipeline since switching to CADisplayLink style timer) then back to adding content. I think I'll add some ice magic next, and I want to get some of the more interesting monsters in place - some will turn to stone during the day time, so you will need to hunt them at night. I guess I'll need to make a new todo list and try and prioritise some features. Would be good to get started on the real scripts, but I really want to nail down the feature set as much as possible so I don't have to interrupt writing scripts to do more tech.

Friday, July 2, 2010

iPad iPad iPad

Been hard at work getting the game working on iPad as a universal app. Turned out all my view information was hacked in badly and needed some cleaning up,  but its all good now.  I just have to decide what I'm going to do with the extra resolution.  iPhone4 is easy because its the same screen size, just double the resolution in x and y. However iPad is a different aspect ratio and a much bigger screen.  I think I'll probably just uprez the art and go with 480x360 play area instead of 480x320 - so there's a little bit more vertical map and gui to fill, but otherwise its just generally just going to look much nicer.  Also, I'll use all 32 bit sprites for iPad whereas the iphone version s use dithered 16 bit textures.

Apple just announced that they will stop selling sdk 2.0 apps.   I actually have 4 sdk 2.0 apps on the appstore currently under the Wretched Games label, so looks like I'll be spending the next week or so upgrading them all to 3.1.3 so they can keep selling - they still dribble cash in each week so would be ashame to lose that even though its just a bit of pocket money these days. Might upgrade them all to iPad universal apps while I'm at it...

No video to show off this week, and its unlikely there will be one for next week. I've just taken a week off work but I'll be spending most of my time with the family and working around the house so probably won't help my MageLore progress at all.

p.s. It's damn cold here!

Saturday, June 26, 2010

All-In-One UI Screen

I've been hard at work this week implementing the all-in-one UI screen. This little wonder replaces my old enchant screen and socket screen... It's simply a long list of everything I track in the game. This currently includes the player stats, inventory of items, crystals, and recipes,  players learnt spells.

Here's a screenshot of the stats section while the player has points available for upgrading stats.
I expect I'll add a tab on the right to group different sets of information together,  but for now, the screen is fully functional and I've deleted the old enchant and socket screens. With only one interface doing all this, I can put a single button on the main game UI for accessing it all and hopefully the player will find it easier access to all the features of the game if there is just a single list to scroll through.


The screen is still lacking polish - transitions and general artsie goodness, so it will undoubtedly get some love in the proceeding months, but, for now, it is fully functional so I can leave it and move onto other things.

Apart from working on this,  I bought an iPad this week. I love it  (though its cost me some productivity this week) !! and the kids love it too. Prior to Aug 2008, I owned absolutely no Apple products and thought them rather overpriced for what you get.  Now I have an iPod touch, iPhone 3g, mac mini, iMac, iPad, and I'm queuing up for an iPhone4 as soon as my current contract runs out.  I've got Magelore running as a universal app so it opens up as a fullscreen app on the iPad. Currently, this just means it scales from the 16:9 of an iPhone to the 4:3 aspect ratio of the iPad. I'm still thinking through how I'm going to layout the UI on the iPad. I'd like to take advantage of the extra rez to show more content, rather than to simple uprez. However, this basically means every UI element and backdrop now needs 2 sets of co-ordinates.Once I get some UI sorted on the iPad, I'll send through some new screenshots.

I may lose some dev time soon as I really need to go through all my Wretched Games apps and upgrade them to iPad. Having an iPad myself now,  I'm loathe to download iPhone apps and have them scale and blur to a portion of the play area. Instead I mainly just browse the iPad only games since they will be nice and crisp on my screen.



View on You-Tube - Shows Annotations

Saturday, June 19, 2010

NPCs and Quests - Making progress again...

I've finished my major code refactoring for now. I've even managed to make some content progress again, and have started on a universal inventory screen that can display all stats, ingredients, quests, enchantments, and the bestiary. I was originally planning on having lots of independant UI screens for these things, but it's looking like a single scrolling menu will work better - though probably with some tabs for viewing different subsets of items - scrolling through 300 items would get a bit tedious and noisy...  I think this will also replace the current enchant screen and possibly even the socket screen.  If it works out it will be great because it means the player will have one standard interface to learn to get access to all the games stats and items.  There is a small preview of this screen midway through tonights video, though there is still much to do on it.

I thought I'd go over some of the quest & conversation system tonight.  It's actually been in and working for a couple of months now. Each NPC in the game has a list of conversations they can have with you if particular conditions are met. Missions are generally (but not always) be started and ended in conversations. On any line in a conversation I can run scripts that can control any aspect of the game. Each line also has the option of giving the player multiple possible responses...  This allows the player to control the conversation at key points and will results in minor rewards or punishments to the player. I don't want these choices to have long lasting consequences as I don't want the player to be afraid to experiment with responses. Sometimes a nasty response can give good benefits - intimidating an NPC into giving extra rewards -  and sometimes a friendly response is going to work more in your favour.

In tonights video you can see a clip from the tutorial mission for the game. The setting of the mission will be moved in the final content as you will start in a city and not be allowed to leave the area until you have completed the tutorial. I don't want players getting lost in the world until I've explained some of the basics. Experienced players won't take long to complete the tutorial. I can always slot in some fast-track responses if needed that will skip the tutorial. I've gone with photographed people for the NPCs. Apart from it being a really cheap way to get lots of character art,  the grand plan is to have a mode where people can add their own faces to the actors in the game - effectively you could put all your family and friends into the game.  It's something of a gimmick but I think it could be really well received. Yes, that is myself and my wife as the main characters, but don't tell her I've put her up on youtube :)

So, anyway, in the video you can see me having a chat to the mage master Mina and she is going to eventually teach me how to do magic. Early in the conversation I am given a choice of response.  If I respond confidently, I jump straight to the harder mission. I am not confident, she gives me an easier mission first (as seen in a second run through at the end of the video).  The final outcome is not affected as I still get to do the hard mission either way, but it is a good example of how the conversation flow can change according to your responses. Other examples would have the NPC giving me additional rewards or puzzle clues.

Thats probably enough reading for one night. Enjoy the video and see you next week.



See it on youtube

Monday, June 14, 2010

Not everything should bend...

The rendering system I use bends tiles so they don't look too linear. I was finding the square old-style tiles just look a little too bland for modern games, so I warped all space.  However, this looks pretty bad on a city wall which really needs to be straight or very subtley bent...  So I've add the ability to remove bending on certain tiles.

I spent some time reworking some of the tiles that were looking particularly bad. I find doing a little art once in a while is good for motivation. After spending most of the week refactoring code that doesn't advance the game at all,  I felt the need to some some change in the game...

That's all for now. I'll keep the mid-week blogs very small, or else I might need to drop them and just concentrate on the end-of-week blog.

Friday, June 11, 2010

Keep it clean or you're doomed...

Just spent the last 2 nights restructuring the code to keep it clean and simple. I had objects like herbs and crystals that were being created by one manager, spells by another, and enemies by a third. So I bit the bullet and made them all derive from a common system. All my xml files are now read by a single system that can create all manner of objects... Of course that means not much glitter for this weeks blog video :( but its just too dangerous to let your code get too messy. The way I program, I tend to rush in and prototype stuff and get it working quickly, then spend a day or two redesigning the code framework. I try not to spend too much time designing up front until I know what the final design needs to be, and there's no way to know that until you've given it some prototyping and play testing.

Also I've switched all my enchants to script driven now, which lets me add an enchant to the game in, literally, a few seconds - though balancing it and choosing how the player will get the recipe takes a lot of thought and time. A script for my lowest level regeneration enchant looks like:

event name="OnTick" script="onPercent 10 (addHealth recipient (power * 1))"

This effectively reads that on every game cycle, we have a 10 percent chance to add power * 1 health to whoever is the recipient of this enchant.  The power is calculated based on the mages skill as well as the socket that the enchanted crystal is placed in.  There are 7 to choose from and they change in power depending on whats happening in the game.  The Life socket has more power if you have more life.  The War socket has more power you are attacking or being attacked.  The Dark socket has more power at night,  etc... The Balance socket is always active but is only half the power of the other sockets. In the video you will see me attack a giant. The first attack goes bad and I'm quite hurt. I back off and socket the regeneration enchant in the Life socket, but since I have few hitpoints, it has little effect.  Moving it to the balance or Spirit socket gives it a huge boost.  In the final game, you'll only be able to juggle sockets at midnight at a special location. This will mean you must live with your choices for a full game-day before you can experiment again.

Also in the video, you can see more of the dynamic lighting system. The distance you can see is reduced in caverns and you see the shadows nicely wrapping to the cave walls.



Watch on you tube

Wednesday, June 9, 2010

Time moves fast when you're having blog

Wow. You really notice time moving fast when you commit to writing a blog every 2 days. At least I made some progress this time. I've reworked the entire damage system so my enchantments and spell effects can patch in at any stage and intercept results. This should make it a breeze to implement any type of stats affecting or damage affecting enchantment. Yay! Too exciting, I know!

Since I don't have "equipment" in the game to upgrade, enchantments have the important role of filling this void. You get 7 slots to fill with enchanted crystals. Each slot has different properties defining when it is effective, such as being more effective at night time, or more effective when your health is full. The player will be able to reconfigure their choices at no cost, though they will need to do it at a particular place and time. We'll see how this goes with play testing. I may make it require gold to access the the screen, or make it only accessible at midnight, etc... Or maybe it should just be accessible at any time for free... It probably won't be clear what works best until I have some real missions and enemies that need specific enchantments to kill.

Here's a teaser screenshot of the socketing screen to tie you over till my end-of-week video..



As a p.s.,  someone told me that h1 tags are important for google searches. So, if I had no scruples and was to imbed something like

MageLore iPhone retro RPG is teh awsomz

then this blog might score higher in a google search. But I guess I'll never know...

Monday, June 7, 2010

Slow weekend...

Well, I got absolutely nothing done on MageLore over the weekend.
Spent most of Friday night doing the video blog, Saturday night catching up on sleep (even with a ring of +3 to awakedness and mug of endless coffee, I still need some sleep), and Sunday night was spent converting Venger to a universal ipad + iphone app - only to have it crash in release mode :( but I'll fix that once I get my hands on a real iPad.

A friend at work put me onto Google App Engine. Looks like it will be a great way to keep stats and power any custom community aspect to the game that Apple's GameCenter (leaderboards/friends/etc) doesn't cover.

So I'll leave this blog uber-short and get stuck into making some actual MageLore progress.

Oh, and p.s., I just found out some friends from work have an XBox Indie game online - Rock a Block - apparently doing quite well at no.#7 on the indie chart. Check it out if you have an x360 on live.

Friday, June 4, 2010

Magic System

Hello again.  I had intended to work on the enchantment system but ended up getting sidetracked into spending a night trying to come up with a nice transition when entering and exiting cities..

Well,  I tried an old style noise dissolve and a rasterline wipe, but they ended up looking more like bugs than transitions. I've settled on a set of random screen warps for now, but I'm still not really happy with them. However, I don't want to get bogged down looking for the perfect transition, so I'll let it sit for a few weeks and come back to it.

SO... I said I'd talk about the magic system today...  It's very important to magelore because I've ditched traditional weapon and armour upgrades and put all the effort into spell and enchantment upgrades.  All spells and enchantments have recipes - lists of ingredients and requirements that need to be met.  You will need to find a recipe for a spell before you can learn it and these can be bought from shops, dropped from enemies, dug up from hidden spots on the map, or (possibly) stolen from npc's.  Once you have all the ingredients there will be some kind of alchemy lab minigame to complete to learn the spell.  Then it is permanently learnt and you can start using it whenever you have free mana.  Some more powerful spells will have a per-cast cost as well... Killing an enemy with a spell can also cause them to drop different items.  In the video below, I had to kill the snake with a fireball in order to collect the charred serpent ingredient needed for the rain-of-fire spell.

ok, that's sounding more like an instruction manual than a blog now...  The main goal here is to keep micro-rewarding the player along the way to learning magic,  and making sure the magic is worth learning but not overpowering... Killing with magic tends to be faster than melee and you're less likely to take damage since its often a ranged attack. Hopefully its just a fun way to kill also...

As well as spells, there are enchantments. I think these need there own blog, but basically you enchant crystals and socket them much like making a gem in WoW. However, once you have your enchanted gem you never lose it and can rearrange them periodically to overcome specific challenges or just to experiment to get the best effect... But more on that later..


That's me for tonight. Here is a little video showing the town transition effect and the rain-of-fire spell.



Watch it on youtube

Wednesday, June 2, 2010

City Tech

Had a productive couple of nights. You can now enter cities from the world map and triggers at the edge of the map will take you back to the world.  I increase the zoom a fraction in cities/towns so it feels like the scale has changed slightly.

I'm going to keep the world mostly persistent. That is, if monsters chase you into a city, they will be waiting for you when you exit back out, along with any treasure chests you may have not picked up yet. I knocked up a quick serializer last night so now all the entities are saved to a file whenever you change maps. I'll still need to ensure that resetting the maps works with the game design because I'll need to do that when I release updates such as new towns and npcs. I think the best approach might be to timestamp the maps so they reset if you haven't been in the map for a game day.

I'm still evaluating what to do with my 'warp' tech in towns.  You'll see in the videos that all the tiles are not square like in other games,  there is a subtle curve through everything. I find this really improves the look of outdoors areas,  but looks really odd on hard structures like town walls.  I've been experimenting with techniques to flatten out the warp selectively, but its a little expensive at the moment on the first gen ipod's. Hopefully I can get some more performance out of it.

Next, I want to get my enchantments working. I'll release another video update on Friday and talk a bit about the game design and magic system.  So long till then.

Monday, May 31, 2010

Well, I guess now's as good a time as any for my first development post.

I'm currently adding towns and cities to the game. Each will have its own tile map and you'll get quests and clues and shops in cities and towns.

I don't have my own tile map editor yet. I've been using the imaginatively named "Tiled" tile editor. It's pretty basic but it's free and it does what it does very well.


I threw around the idea of having a single huge streaming tilemap, so everything can just be to scale, a bit along the lines of the classic "The FaeryTale Adventure" on the Amiga, but have settled on separate maps per location as in Ultima 3 and 4. If you've played WoW from the early days, you'll remember long hours of running from town to town until they eventually started adding flight paths everywhere and everyone got flying mounts. It did give you a great sense of open world, but eventually you just want to get to the action. I could put teleport gates around the place like in Diablo, but there's numerous advantages in smaller maps... It's easy to edit them and easy to redesign your main map or add new wads of content at a moments notice...

So now I'm putting in cities. I've added a bunch of them that I thought sounded interesting. Nothing set in stone. In the cities you'll be visiting shops, getting quests and clues from npc's and playing mini-games. The mini-games will be a big part of the community aspect of the game - leaderboads / challenges / etc... But more on that another time. Suffice to say they will be entirely optional, and will be quite diverse.

Ok, the kids are in bed and the wife will be off to bed soon so time for me to get some work done.


Saturday, May 29, 2010

MageLore - Avatars of Alturia

Greetings traveller.

Welcome to the MageLore development blog.

First, what is MageLore you ask? It's a game I started writing when I was 13 on the Amiga after being inspired from playing Ultima 3 on the Amiga. I soon gave up and then technology and 3d took over and the idea become obsolete until the advent of phone games and touch screens and suddenly the idea seems very viable again.

So what will you see in this blog? Well, over the weeks/months of development I'll be trying to post weekly talking about anything and everything to do with the implementation and design of the game.

Why Blog? Obviously its to get filthy rich from the ads on the side of the page... that would be awesome, but extremely unlikely... My real motivation is motivation itself... By blagging on about my game I'll hopefully keep up the momentum to get it done and on the iPhone by Christmas 2010.

"I don't wanna read all this rubbish, just show me the damn game!?!" Well ok, no need to yell. Here is my first gameplay video... see you next time...