Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - nhdaniel

Pages: [1]
Traditional Roguelikes (Turn Based) / Interhack 2.1.39 released
« on: March 12, 2010, 10:40:58 AM »
Note: This is still an alpha version (despite the version number).

You can find more information here:

And download the source from here:

Release notes are also available:

Another two version releases... I just skipped actually release 2.1.38. Mainly bugfixes and improved support for multi-weapon combat. Note: Given the way Interhack works, a player or monster with multiple arms could wield more weapons. Of course more weapons can have advantages and disadvantages, and thus is balanced by DEX and STR etc. So if you are wielding four weapons but lack DEX, you could seriously injure yourself. (The body-slot system used also allows players to loose limbs etc, however the loss of limbs has yet to be fully coded).

I have received some more feedback on the multi-player turn based algorithm. Quote:
The way you came up with to adapt this turn-based
SP game for MP really seems to be a good compromise.
It plays much better than the ToME MP version for sure!

There are a few "big" gameplay items to finish off before the game can go beta... when it will also be released under a completely new name. As always, people who want to help are welcome.

Version 2.1.39    2010-03-12

Added - interfaces/ - Colour warning for low HP
Bugfix - - 'remove' not declared (thanks to Stefan Hahn)
Bugfix - interfaces/ - (,[,% not displayed in inventory window

Version 2.1.38    2010-02-09

Bugfix - plugins/magic/othersight - Applying to oneself crashed
Bugfix - Level::Refresh - increased # of objects added to level
Bugfix - Objects in slots are loaded / saved correctly
Bugfix - Global File << Map and >> declr was incorrect
Bugfix - Monster's memory of maps are now saved / loaded
Bugfix - Removed "silver" - complicated gameplay too much
Added - Support to wield nothing (bare handed combat)
Bugfix - Monster::PutOn - wording for nowhere to _wield_ a weapon
Bugfix - Monster::AddToPack - merging objs and non-ident additions
Bugfix - Level::NewPlayer - current player map memory was not loaded
Bugfix - Monster::DoAttack - rewrite to support multi-weapon application
Bugfix - MonAttack::DoAttack - support for applying weapons in combat

Traditional Roguelikes (Turn Based) / Interhack 2.1.37 released
« on: February 06, 2010, 08:15:23 AM »
Note: This is still an alpha version (despite the version number).

You can find more information here:

And download the source from here:

Release notes are also available:

Another two version releases... I just skipped actually release 2.1.36. Bigfixes as per normal. Big changes this time round include player role and race selection now works. It is very simple to add new roles or races... More weapons have been added and I am in the process of improving the code where weapons are applied.

If anyone with C++ experience (C experience should be okay for the most part) wants to help create more plugins, send an email to the address found in any of the source files. You can tackle anything you want - from Monster AI, to monsters, to objects, magic, special levels...

Version 2.1.37    2010-01-29

Added - plugins/players/
Added - plugins/objects/
Added - plugins/objects/
Bugfix - interfaces/ - corrected menu prompt offset
Bugfix - server crash on invalid role or race selection
Bugfix - Objects can now be created without a group name (improves wishing)
Bugfix - Updated bits of game documentation in doc/
Added - plugins/players/
Added - plugins/players/
Added - plugins/players/
Added - plugins/players/
Bugfix - plugins/players/role_*.cc - Multiple object creation
Bugfix - Level::Move_ObjectInteraction - obj count was not being updated
Bugfix - plugins/objects/ - Magic not being applied
Added - plugins/players/
Added - plugins/players/
Added - plugins/players/
Bugfix - - Weapon/Armor enchantment not working / displayed
Bugfix - migrated race and attribute initial code to Player::PostCreate

Version 2.1.36    2010-01-26

Bugfix - interfaces/ansi - Menu page count corrected
Bugfix - plugins/object/lockpick - Corrected name of object
Bugfix - plugins/object/drawbridge - tune is loaded/saved to disk
Bugfix - interfaces/ansi - Menu being displayed when no objects to choose
Added - Support for menu input from a monster / player
Bugfix - - cerr output not showing socket file descriptor
Added - plugins/players/
Added - Role selection menu for new players
Bugfix - interfaces/ansi - Menu page count displayed when only one page
Added - Initial code for more armor and weapon types for samurai role
Bugfix - interfaces/ansi - Extra ':' in some prompts
Added - plugins/players/
Added - plugins/players/
Added - plugins/players/
Added - Race selection menu for new players
Added - plugins/players/
Added - plugins/players/
Added - plugins/players/
Added - plugins/players/
Bugfix - moved attribute creation into Monster::PostCreate
Bugfix - moved player attrib creation to Player::PostCreate

Programming / Re: Questions about programming a Roguelike game
« on: January 30, 2010, 01:16:26 PM »
First up, choose a language you are comfortable with and familiar with using it. If you plan on learning a language by coding a roguelike, I would suggest starting on a small roguelike attempt first. Trying to achieve a large goal in a new language is difficult at best. As for which is more popular... download a few roguelikes and see...

On map/level generation... there are plenty of articles about this, the pitfalls and solutions. Path finding can be as simple or as complex as you choose to make it. And lets define slow... You are typically working with a small map (lets say 80x20), which even if you have to visit EVERY location four times you are only looking at 6400 visits to each location. Now this may have been a problem pre-1995, but I am fairly sure a dual-quad-core running the latest Radeon ANSI-8192 GPU will have no problems performing this task before you can blink.

My suggestion - go write some simple tests... see how the code works... this will help understand what makes things slow or fast.

An interesting discussion... For the most part, I agree with many points in this discussion. The key (pun intended) points as I understand it:

* Using a generic key to "verb" and object is generally not viable - This would select too many objects from a player's pack to be useful. The idea of having a key allocated to each action creates a better user interface with only a select number of objects that verb applies to.

* For the most part, redundancy in commands can enter a game, probably from a historical perspective. Nethack with the wear and PutOn commands are a good example. However the problem once again becomes the use of a command that is too generic.

* Directional input - While "laptops" have been mentioned as the "minimum" requirement, the primary limitation is in the diagonal movement. Keypads are useful as they are a discrete entity on the keyboard, and it is difficult to hit the wrong key when using specifically setup direction keys.

As a general rule of thumb, you want to allow a player to perform actions with the least input possible. I think one problem not really discussed is tying an action to a specific set of objects. For example, "Read" being tied to only scrolls and spells. What if you could also "Read" other objects such as potions (such as reading the label on the potion). Thus when a player presses "r" to read something, they are given the normal menu, but can opt to read any other object as well. This opens a whole new level of gameplay, whereby more complex objects can exist, with complicated user interaction.

This is why in Interhack I have isolated the user interface from the actions performed. Anyone can write the interface however they like, yet the core game engine will not change. When defining the user interface, you set it up such that a physical action performed by a player (such as pressing a key or clicking a mouse button), leads to a message being sent to the server containing the relevant information. The ACTION was "read" and the object ID was YYY. Combine this with objects that can choose what actions to respond to, and you end up with some unique gameplay.

As such, I can code a potion, that has a label, which when read will give some clue for something else in the game. Or add an action "Study" - and the more an object is studied, the more it may reveal. Thus an archaeologist may be more skilled at studying objects, and may discover more.

Of course taking this path adds all sorts of complications to the game engine. And lets not get started on first person and third person perspective of verbs and generation of messages... :)

Traditional Roguelikes (Turn Based) / Interhack 2.1.35 released
« on: January 21, 2010, 09:27:15 AM »
Note: This is still an alpha version (despite the version number).

You can find more information here:

And download the source from here:

Release notes are also available:

Since I missed announcing version 2.1.34, here are the updates for both... lots of bugfixes as per normal. The server can recover nicely from most crashes. Disconnected players games are saved, and players can save/load nicely now. I have also done some testing of playing the game with network latency. The game is generally playable up to 300ms latency. Beyond that, it starts to get annoying.

Version 2.1.35    2010-01-16

Added - MonAttack - More support for variation in attack types
Added - plugins/monsters/ants
Bugfix - plugins/magic/Invis - Directional / vs Immediate application
Added - support in main code for displacement, invis, projection etc
Bugfix - Map::op>> - Obscure client bug (passing reference, returning ref)
Added - Level::Move_Kick - Damage levels and kicking walls etc
Bugfix - Level::Move_Kick - Dead monsters now show msg + exp gain
Bugfix - plugins/objects/magicmarker - Many small fixes
Bugfix - plugins/magic/invis - Was not timing out on potions
Bugfix - plugins/magic/displacement - Again, not timing out
Bugfix - Player::op>> - Obscure bug (passing ref and returning ref)
Bugfix - Map / Interface/ANSI - Infravision / Infrared now works
Bugfix - Action::op>> - Obscure bug (passing ref and returning ref)
Added - plugins/objects/drawbridge

Version 2.1.34    2009-12-20

Bugfix - Minor fixes for potential race conditions (using valgrind/helgrind)
Bugfix - Map::Map - Clear the flags for "visible" (uninit value)
Bugfix - Level::MainLoop - integrated Action read into main mutex lock
Bugfix - Branch::Recover - templates are now recovered correctly
Bugfix - Branch::Recover - forgot to set parent on levels when recovered
Bugfix - Branch::Recover - Levels need cleaning after temp construction
Added - support for password validation on save games
Bugfix - Minor fixes for login bugs and support for 3 passwd attempts
Bugfix - Player::NeedMoreInput... - Killed client was locking up server
Testing - Added / Tested code to simulate network latency
Bugfix - Global "players" changed to "roles" due to Level::players
Bugfix - Better selection of monster AI

Traditional Roguelikes (Turn Based) / Interhack 2.1.33 released
« on: December 06, 2009, 10:27:20 AM »
Note: This is still an alpha version (despite the version number).

The server can now recover from crashes. Players can save and load games too, and monsters are now saved to disk as well. I have also made some more changes since then, including lots of little bugfixes, more multi-threading issues sorted out. Work will now start to shift towards more monsters, improved AI, and more types of magic.

(For those interested, multiplayer can be simulated using the script. Open the server in one terminal, open and run the script in a second terminal, and login on a third terminal).

Note: Soon I may be looking for people to assist in coding more AI, monsters and objects. Interhack uses a plugin based system, so you can develop say, AI for rodents. Or write a new type of magic, and simply create a few objects than can use it. Plenty of examples for objects and magic already.

You can find more information here:

And download the source from here:

Release notes are also available:

Off-topic (Locked) / Re: Realtime Roguelike
« on: November 29, 2009, 03:03:56 AM »
but there's a lot more interaction that could occur without fundamentally changing the typical turn-based roguelike gameplay style.

You can actually go a lot further than you suggest. Interhack is fully turn based and multiplayer. And no, one player does not have to wait for another player to move. Social interaction was added some time ago, so players can "talk" or "yell" to others on the level. It is not real-time, although it can feel like real-time with multiple players on the same level. However if you stop, go get a coffee and come back, you will find your '@' in fundamentally the same location, and with the same HP (there are a few very minor exceptions to this, such as a monster displacing you).

Traditional Roguelikes (Turn Based) / Interhack 2.1.31 released
« on: November 28, 2009, 10:42:12 AM »
Note: This is still an alpha version (despite the version number).

Lots of work so the server can save / load to disk (and eventually recover in the event of a crash). I have also re-written a big chunk of the socket and file IO. You can also now find a copy of the "Roguelike Theory of Relatively" (RTOR) paper on Sourceforge - this helps to explain how some of the fully turn-based movement works in multiplayer.

You can find more information here:

And download the source from here:

Release notes are also available:

Off-topic (Locked) / Re: GTK-- and Glade: TreeViews
« on: November 12, 2009, 08:41:50 AM »
Dunno about the Glade side of things, but you can find an example of a treeview in Interhack project (fully turn based multi-player). ( Look in src/interfaces/ Summary:

The following are the defn:

Code: [Select]
    /* For the inventory list */
    class ModelColumns : public Gtk::TreeModel::ColumnRecord {
        ModelColumns(void) { add(name); add(obj); add(order); }
        Gtk::TreeModelColumn<Glib::ustring> name;
        Gtk::TreeModelColumn< Pointer<Object> > obj;
        Gtk::TreeModelColumn<unsigned int> order;
    } modelColumns;
    Gtk::TreeView treeView;
    Glib::RefPtr<Gtk::TreeStore> treeStore;
    Gtk::TreeModel::Row weapons, armor, food, potions, scrolls,
                        spellbooks, rings, wands, tools, amulets, gems;
    Gtk::Window invWindow;
    Gtk::ScrolledWindow invSWindow;

Next we setup the who thing:

Code: [Select]
    /* Inventory Window */
    treeStore = Gtk::TreeStore::create(modelColumns);
    invWindow.set_title("Interhack Inventory");

And finally add some fixed rows:

Code: [Select]
    /* Setup basic groups in inventory window */
    weapons = *(treeStore->append());
    weapons[] = "Weapons (";
    weapons[modelColumns.order] = 0;
    armor = *(treeStore->append());
    armor[] = "Armor [";
    armor[modelColumns.order] = 1;

Then when you want to add a sub-row:

Code: [Select]
Gtk::TreeModel::Row row = *(treeStore->append(spellbooks.children()));
row[] = "something";

Traditional Roguelikes (Turn Based) / Interhack 2.1.27 released
« on: November 03, 2009, 10:22:30 PM »
Note: This is still an alpha version (despite the version number).

Major work has been done to make the main server more thread safe. And also a big thanks to Jeff Garneau who has compiled Interhack on Mac OS X (not sure if it is running) and provided a patch. A few minor things have broken and will be patched soon enough.

OS XYesYes?
WindowsYesClient Only

You can find more information here:

And download the source from here:

Release notes are also available:

Traditional Roguelikes (Turn Based) / Re: Interhack 2.1.22 released
« on: October 29, 2009, 09:02:33 AM »
Yes, most development I do is on *nix based systems. So as pointed out wordpad is a better option for the release notes.

Version 2.1.23 is out. Extract from the release notes:

Re-enabled support for Magic::ApplyRay to deal with players
Bugfixes in ANSI Interface for topline when input interrupts messages
Enabled TrapRooms (rooms that shrink without warning)
Implemented basic endgame score system
Bugfix in Rooms/Shops to better detect player entry and exit from shops
Added support to detect when monsters/players step on or off an object
Added support to detect monster/player proximity to an object
Bugfix in distance between two monsters FindDistanceS (dy would always be 0)
Added more support for Nethack 3.4.3 templates (.des files)
Bugfix in template generation (level.h GetName no longer returns template name)
Bugfix to allow a player to rest as a move ('.' in nethack)
Made shops non-digable
Added code to save and load level maps to disk when not in use
Minor changes to release process

For those interested I will release a short paper on the fully turn based multiplayer to those attending IRDC 2009 - and to the rest of the world at around the same time.

Traditional Roguelikes (Turn Based) / Interhack 2.1.22 released
« on: October 26, 2009, 12:59:24 AM »
This is the original Interhack - as in multiplayer variant of Nethack. It uses a fully turn based system. No real time in any form at all. Note: It is currently in an alpha state - despite the version number.

You can find more information here:

And download the source from here:

Release notes are also available:

Pages: [1]