I'm putting a cunning plan in place to attempt to have a version of Unangband ready for the 2011 Annual Roguelike Release Party.[1]
A cunning plan which is in serious threat of being derailed by this (scroll down for review). You have 3 days to convince me not to buy it...
[1] I cannot promise the new version won't eat your computer however.
Friday, 9 September 2011
Annual Roguelike Release Party
Posted by
Andrew Doull
at
20:23
4
comments
Labels: development updates, links, the unday papers
Sunday, 24 January 2010
The Unday Papers
Undays* are for kicking back, getting out the bug spray and fixing the hole in the screen windows in the bedroom while avoiding scratching the mosquito bites on your toes.
Let's try and avoid adding more insect monsters to Midgewater Marshes and have a look at what's happened on the SVN server over the last fortnight (I guess this is a biweekly column now):
- We've gone from rev 2792 to 2890 - that's a total of 98 commits, slightly up on the 45 commits per week I achieved the previous week I reported on. A lot of those commits are smaller - and seem to feature statements like 'fix the obvious compilation bug left in the previous revision' - it looks like my overall coding quality is dipping a little as development fatigue sets in. But a lot of tidying up and bug fixing at the same time - we're heading in the right direction for release.
- Quite a bit of work followed on directly from the competition: fixes for monster allies, balancing and revising druid spells based on player feedback, bug fixes for targeting spells.
- I've added a 'h'andle command ('%' in roguelike keyset) which allows you to choose an item, then specify which command you use with that item. This command has been some time coming, with most of the required framework in the code. There is a larger game plan afoot with this, that should benefit players using graphics more than ASCII...
- I've completed the third attempt for allowing running next to unusual terrain - this time successfully. There's still some work to be done allowing the player to run along the walls of wide corridors, but I'm happy with running in Unangband now.
- Angband released version 3.1.2 and as usual, the most important thing is to steal are any user interface improvements. I borrow the command to center the screen on the player (^L) and there's a few other improvements I'd like to use but the code base has diverged enough that'll I have to do the heavy lifting myself.
- I've spent considerable time improving the description of spells: both those that create regions and shape change spells, as well as the regions themselves. Players won't use an ability if they don't understand it, and one of the more successful Unangband players in the competition has avoided the Druid specialty of region spells in favour of summoning...
- SaThaRiel conveniently pops up after every release and let's me know about the compilation warnings he sees. I appreciate the effort to keep me honest.
- The pre3 release trips one of the more classic release bugs. Bumping the version number does little except cause every data file to fail to load - and I managed to compile and release the game in this state. D'oh!
- Pav, the generous maintainer of angband.oook.cz, is forced to update the code to parse the competition character dumps twice, because of formatting errors on my part in producing some game statistics in the character dump. But you can now see which monsters you are killing the most of. Unsurprisingly it is fruit bats.
- I've bumped up the power of familiars considerably - all of my testing featured familiars that had blows, and without blows they were a lot less useful. My wife finds it mildly amusing that I'm teaching my character's pet monkey to fetch things. Especially since we visited the Monkey Forest in Ubud, Bali late last year and the monkeys were much keener on stealing than fetching for you.
- Please ignore the mention of dungeon towns for the moment, and imagine you're reading the next Unday papers - when I'll be ready to discuss them in detail.
- Add birth_gollum option which starts you deep in the dungeon, but with the snivelling, wretched ability to make any offer sound good to a hostile monster who would listen to you. It sounds intriguing, even to me. I hope it's playable.
- Long standing bugs fixed: I think, just quietly, I may have fixed the mysterious 'body parts getting created in walls bug.' I'm not marking this fixed at the moment, but am hopeful I'll be able to.
- New spells this fortnight: Briarpatch. Razorwood. Hoar Frost. New items this week: None. New monsters this fortnight: Wooden golem. Wooden figurine. Got to give druids something to warp...
The Unday papers is a somewhat stylistically derivative summary of SVN commits for the week and other development issues.
Posted by
Andrew Doull
at
17:45
0
comments
Labels: the unday papers, unangband
Sunday, 10 January 2010
The Unday Papers
Undays* are for finishing staining the deck of the house, barbecuing some kangaroo steaks for lunch and waiting for an ftp server to come back up so I can do the Unangband 0.6.4 pre-release.
Let's try and avoid mentioning too much more of my personal life and have a look at what's happened on the SVN server this week:
- We've gone from rev 2747 to 2792 - that's a total of 45 commits. I've been the only developer to contribute this week, which is hardly surprising given the amount of code changes occuring at the moment. Since I've done most of the coding on the train to and from work without roaming Internet, the commits haven't been especially granular either, so it's undoubtedly hard to follow what's going on.
- The big change for the week has been the attempt to have neutral monsters in the game - monsters which don't necessarily attack the player outright. I've reused the MFLAG_TOWN monster attribute to indicate this since this flag was already doing most of the work already. I've cleaned up the tell_allies_x set of functions to use a single tell_allies_info function with various hook functions - this had been on my to do list for some time. Quite a bit of the AI code has been made more robust as a result, and I've found and fixed few bugs so you'll hear monsters talking a bit more now.
- At the moment, neutral monsters are only generated in town, but it is possible to convert them elsewhere from hostile to neutral by 'O'ffering them something. The offer command was the initial driver for neutrality - I figured out I needed a command to give items to allied monsters, and it felt like a natural extension to be able to sell items to monsters in town, and bribe monsters in the dungeon. The actual 'O'ffer code has been anything but natural however - it looks ugly, and plays out weirdly, and I spent most of Friday night and Saturday trying to beat it into shape.
- The reason I needed a command to give items to allied monsters, is that I added commands to take items from allies or order them to drop items. This was incredibly easy - just an some copying and pasting of code in the get_item() function in object1.c, add some new flags to the do_cmd_item_type table in tables.c, and code to the inven_takeoff command in object2.c to handle the case of taking items off another monster instead of yourself. I had initially guessed I'd have to do the reverse - add a command 'O'rder a monster to give you items - but as soon as I made the connection between 't'aking off items from yourself and taking an item off an ally and realised the same code and command could be used for both functions, the solution was obvious.
- While I was in melee2.c I happened to stare at the monster waking up code in recover_monster() and put in a one liner that meant instead of waking up by x amount if the player was sneaking, monsters instead woke up by a random number from 0 to x-1 instead. Sneaking had already been in the game, but only as a way of specifying that you didn't want your allies to attack sleeping monsters. It was time, with neutral monsters you might want to avoid now in the game, for sneaking to become more useful.
- I took and break and cleaned the pool and realised while doing getting the gum tree leaves out of the sump, what bad behaviour the above code change would encourage in the players. People would unnecessarily try to min/max whether they were sneaking around the dungeon in general as avoiding waking monsters up as this is such an important part of game play for Angband and variants. So I came back to the code and instead of a random value, I capped the maximum x a monster could wake up by while the player was sneaking, so that it would only have any effect if the player was aware of the monster and it was less than 5 grids away. This is designed specifically to allow a player to sneak up to or past a room full of sleeping monsters, and provide advantages in no other situation.
- I decided, incorrectly as it turns out, to have sneaking prevent other actions that would create noise, like shooting, casting spells and so on by marking these actions in with a CONDITION_NO_SNEAKING in the do_cmd_item_type table (this table has been a real source of inspiration this week). But the UI was annoying for this - you kept getting told you couldn't do stuff while you sneaked - so I instead just assume that the player doesn't want to sneak if they do something noisy. The trick to this is keep p_ptr->sneaking set if the player is trying to be sneaky in general, and then mark them with p_ptr->not_sneaking if they do an action that isn't sneaky. We then check both p_ptr->sneaking and p_ptr->not_sneaking to see if the player is actually quiet during the monster processing part of the turn, and clear p_ptr->not_sneaking at the start of the player's turn. I've used similar tricks elsewhere with blocking, dodging and charging.
- Sneaking prevents dodging and charging, for those people looking for the downside to doing it all the time. And since you automatically dodge if you move normally, sneaking makes you more vulnerable to ranged attacks and spells. You can run while you're sneaking to indicate you'd like to dodge instead (Shift-move).
- The ability to steal from monsters is another consequence both the interacting with monster inventory and sneaking changes. I'm glad I had looked at the wake up code before implementing this, because otherwise the stealing code would be much less clean. Separating out the generation of a monster's inventory - monster_drop() - from the monster_death code makes this a no brainer. The MFLAG_MADE flag - used to prevent the player abusing cloning or breeding monsters to farm them for drops - gets re-used here naturally.
- I'm going to overload the 's'earch command so you'll be able to 's'teal if you're next to a monster and 's'earch otherwise. I'll have to make it easy to specify to search if you're next to a monster, as the few times you'll want to do this, you'll really want to do this.
- The other big change this week has been splitting up the mage spell books so that there is a 'low' and 'high' version of each of the dungeon spell books. This is purely a game balance exercise, as there were a huge number of spells in most of these books which made playing a high level mage much less of a challenge than I had intended. You'll now have to carry a lot more books if you want a really wide spell selection. I've also added an extra spell book to each mage school and move the spells around the school books for the same reason.
- Long standing bugs fixed: Detection spells now refresh the screen correctly when cast. Ohmygod, I hadn't finished implementing the rogue class. Now fixed.
- New spells this week: Drain Mana. Raise Familiar. Second Sight. New items this week: About 30 new mage spell books added. New monsters this week: None, but the behaviour of town monsters has changed in many subtle ways, so keep alert.
- There's been lots of other small changes, including UI improvements during character creation, so as always, check the SVN logs for details.
Failed.
* The Unday papers is a somewhat stylistically derivative summary of SVN commits for the week and other development issues.
Posted by
Andrew Doull
at
09:55
2
comments
Labels: development updates, the unday papers