Category Archives: programming

New gameplay footage (music, telekinesis, invisibility, planets)

I just posted two new videos of gameplay footage from the most recent build of Arcana Manor (7-27-09).

The video has two parts.

The first part demonstrates several new features, including:
musical tones that correspond to colors and planets in the magic system,
mountable weapons based on the tarot suits,
elemental projectiles flung from melee weapons,
weapon cycling,

guard bots with basic AI,
an invisibility spell,
a demon model with flame effects from a procedural shader

The second part showcases these features:

a spell interface based on tarot cards
Moving platforms
A telekinesis spell
Collectible orbs whose colors and associated musical tones correspond to the seven planets of the ancients
A color-based and tonal magical interface corresponding to the orbs

Adventures in AI scripting

I added two AI bots to my game prototype, and the process took a long time and a lot of work.  I ended up learning how to use echo statements to track the loading of the many files that I had changed and to determine where a particular file was erroring out.  This was useful debugging experience.

The way that I incorporated the AI bots initially resulted in my player character being chased by mirror versions of herself, which was eerie and reminiscent of similar Alucard versus Alucard doppleganger battles in Castlevania: Symphony of the Night.  But I soon switched the AIGuard model out so that I was fighting two demonic space orcs.

I also changed the projectile scripts on my first-person spells so that the projectiles would do damage, as well as creating various other effects such as invisibility and healing.

Then, while working on loading the animations for the ai bots, my mission stopped loading and started crashing in the middle of phase 2 loading.  I can’t figure out why, so I’m building a debug version of the app with the hope that I can find the specific line where the mission load is crashing.

Object selection problems and selecting objects in FPS mode

Here is today’s update on Arcana Manor, in the form of a post I made to the ArcaneFX section of the Garagegames forum.  The only addendum I have is that after this post I managed to fix most of the object selection problems, thanks to the help of the user named Gibby.  They were in the playgui.gui file.  Next up is the more challenging problem of selecting objects in first-person shooter mode.

In the process of making many script and code changes to implement several different features, I seem to have interfered with the game’s ability to select objects with the mouse rollover raycast.  I can select the orc AI player, but only from certain angles (specifically from a slight angle while he is running toward the player, and sometimes from behind if the player is standing close to him).  I can’t select the orc corpse at all, even though “corpsehiddenfromraycast” is set to “0″ and “$TypeMasks::CorpseObjectType”  is enabled in “AFX::targetSelectionMask.”  If I run the AFXDemo from a fresh install of AFX 1.7.1, it is much easier to select the orc and the orc corpse from almost any angle and distance, which suggests to me that I’ve done something to mess up the rolloverraycast function or another piece of code or script related to object selection.

I’ve used WinDiff to check afxtsctrl.cp against the same file in the fresh install of AFXDemo, but restoring this file to its original state doesn’t solve the problem.  Could anybody suggest where else I might look for changes to try to fix this problem?  I also checked in GameConnection.cpp because I think some of the object selection code is in that file, but I’m wondering where else the problem might be coming from.

To provide a little context, I am working on a game in which the player can cast spells from first-person mode, like in Oblivion.  So, one of the ultimate goals here is to be able to select objects in first-person shooter mode by toggling the cursor or using the crosshairs.   Gibby’s AFXFps mod and tutorial has been extremely helpful with this, though his solution is to cast spells from a 3rd person “psionics” mode.  For some reason, I can select objects in Gibby’s 3rd-person mode but not in his first-person mode, even when I toggle the cursor on.  I’ve studied the commands.cs script that Gibby uses to switch modes (which involve showing the reticle and the shapenamehud in first-person mode), but I’m not sure which part of this script would be causing the conflict between first-person mode and object selection.

So, a second question once I fix the raycast problem would be: how can I select objects while staying in first-person mode?

Moving Platforms

It’s been a few days since I’ve updated progress on Arcana Manor because I’ve been intently involved in implementing an important feature: moving platforms.  These are moving planes or scaled cubes that players can stand on top of, moving along with the platforms as on an elevator.  These moving platforms are important, by definition, to a game in which platforming a key part of gameplay.

Torque Game Engine Advanced doesn’t have out-of-the box support for moving platforms, which means that they have to be added as C++ code, preferably by the addition of one of the downloadable resources on Garagegames.com.  To integrate such a resource with a codebase that I’ve already heavily modified, I had to use WinDiff, a program for comparing files and isolating their differences.  Once I isolated these conflicting code fragments, I had to choose how to merge them by incorporating relevant new lines of code from the resource and discarding irrelevant lines of code.  This process was complicated by the porting of the resource from TGE 1.5.2 to TGEA 1.7.1, especially since the resource itself was actually for TGEA 1.8.1 but had been compiled from multiple TGE versions.  In practical terms, these multiple versions and resources meant that I had to spend several days reading through C++ source code, puzzling out its logic and structure until I could figure out which lines of code were needed and which were not.  I re-compiled the engine dozens of time, de-bugging code changes to preserve the resource’s functionality while updating it and slotting it in with ArcaneFX, melee, and other code changes I’ve already implemented.

I now have moving platforms.  The key is making the player object a child of the platform, which is a pathshape moving along the nodes of a path.

Unfortunately, I have to use a rectangular dts shape that came packaged with an early version of the resource, because the player falls through any dts that I make myself in Softimage.  I think this has to do with the way that collision meshes are set up in the process of exporting the model from Softimage to dts format, but after spending a day on collision meshes I haven’t been able to isolate the problem.

I’m now trying to trigger the moving platforms with a spell so that I can incorporate telekinesis into my magic system.  Since the magic system is the focus of the game and the surreal mansion is the secondary focus, it would be best if these two aspects of gameplay could be tied together.  I have a telekinesis spell that can move an interior instance with the settransform() function, but the interior leaps all at once rather than animating smoothly and carrying the player with it.  If I can trigger a pathshape with a spell, the player could raise and lower bridges with the alterative school of magic, corresponding to the wands.

next Arcana Manor goals

Next Arcana Manor goals for features:

Set up a control scheme using the 360 controller

This will keep the magic system from becoming too unruly (a collection of chaotic key-presses) and more focused around a set of core mechanics

Fix melee system so that the sword can swing more than one time

Implement “platforms that move” for TGEA 1.7.1 using Windiff

Correlate spell-casting with platform movements via settransform function or applyimpulse

Finish modeling demon

Begin to script more spells

Script power-up mechanic for tarot items

Work on first-person spell-casting (such as casting animations for hands, effects that don’t require selectrons to target but work as projectiles as in Oblivion, effects that don’t depend on a zodiac

or make the zodiac vertical

or displace it in front of the player

Put more enemies into the game, make them customizable

Put music in background (e.g. Danse Macabre)

new Arcana Manor feature: mounted particle emitter

Finally, after six months, succeeded in attaching a particle emitter to the cursor.

This is the beginning of a gestural magic system, since the player can now trace sigils in the air because the cursor leaves behind a trail of glowing particles (in this case, fire) which look like a will o’ the wisp.

Here’s a video of the feature out of context

And here’s a longer video of the complete build, with the particle emitter feature in context

Interested readers might want to watch these videos in conjunction with this previous video of a recent build, which lacks the sigil drawing feature but also showcases the game’s spellcasting interfaces as they’re evolving.

Video: New Arcana Manor build

As promised, here is a short video of the newest build of Arcana Manor.

This build features some experiments with a new spell interface, including a rotating 3d tarot deck and a hexagram gui with jewel buttons that summon magical sigils with spellcasting powers. The player can also shift between first person shooter mode for melee and third-person mode for cursor-based spell-casting in the interfaces. I’m using Jeff Faust’s ArcaneFX in conjunction with these interfaces to implement spell-casting effects, including a custom attack spell with my own zodiacs and rune rings and a modified levitation spell using physical zones. The build also features some custom items representing the minor arcana of the tarot deck, including an ankh wand, a glowing black sword, a cup, and a pentacle.

customizing spells

Have been working on customizing spells in ArcaneFX, a special effects program for Torque. The process of making spells is essentially advanced scripting, and I’ve managed to modify one existing spell (Light My Fire) to produce a larger and differently colored fire on the ground and the caster’s hands. I’ve also been working on modifying the Great Ball of Fire spell to be an Iceball, but I keep getting a connection error. Jeff Faust (the designer of ArcaneFX, whose Faustian name is delightfully appropriate) offers the following help in a forum: “It’s not unusual to have to do some debugging when writing advanced scripts like this.” No doubt. I’m keeping at it.

Magic Systems and Meaningful Scripting

Runes in Eternal Darkness

Runes in the Magic System of Eternal Darkness

One of my next projects will be an article comparing the magic systems of various games, both conceptually and in terms of their underlying quantitative mechanics, as one example of how interactive symbolism can be programmed. As readers of Quests know, I regard programming as a form of procedural, interactive writing, which unfolds according to a set of rules that both constrain and facilitate player actions and interpretations. For example, the magic systems of role-playing games (tabletop, single-player, and MMO) comprise rigorous, quantitative rules for altering the physical and sometimes mental reality of a particular game world. Because these systems often involve glyphs, runes, and incantations, there are opportunities to encode meaning into a core game mechanic, as in the tabletop game Mage: The Awakening or the elaborate cosmology of Eternal Darkness.

Questions for research include:

  • How have different table-top RPG’s, CRPG’S, action-adventure games, and MMO’s implemented magic systems?
  • What are the origins of magic systems in fantasy novels? For example, the convention of having magic users memorize spells that are then erased from their memory after being cast derives from Fritz Leiber, but not from Tolkien (who eschewed direct references to the concept of magic in his work).
  • What is the relationship between game systems of magic and real occultist systems? (This treads on difficult ground, because of many gamers’ understandable discomfort with the association by fundamentalists of Dungeons and Dragons with black magic. However, Gary Gygax himself encouraged dungeon masters to consult encyclopedias of the occult as reference works, and Silicon Knights did thorough research into actual historical arcane systems in order to build the elaborate spell-casting system of Eternal Darkness. The table-top role-playing systems Nephilim and Mage: The Awakening both embrace mystical lore as metaphors explored through their game mechanics.)
  • Most importantly, as relates to programming practice:
  1. How did the World of Darkness mod (WoDMod) script the magic system of the Mage tabletop game into Vampire: The Masquerade Redemption?
  2. How do custom NWN scripters make their own spells?
  3. How could we as designers learn from past design of magic systems in order to make our own games’ magic systems both more fun and metaphorically resonant, so that we invest this aspect of fantasy with all its potential for symbolism rather than reducing it to the glitz and glamor of flashy visual effects without substance?