Wednesday, August 5, 2009

Lights, Camera, ... months of work... action?

Since my last post, many new systems have been implemented and we're on the final stretch before pre-beta release. The design side of things has been particularly challenging lately, since we don't really know how these numbers are going to behave once we get them in-game. I'm starting to have a nagging feeling that our damages are too high, but I think we can remedy our situation simply by stretching everything to give us a buffer. Once all of our equations are set, slash damage in half, reduce xp to 25% of what we think it should be, make armor half as good as it is supposed to be, and so on.


For the record, here's what happened since my last post (simply copied from the pre-beta document):
Triggers
Display zone names & zone effects (background sound)
Display player names, player name toggle
Item attachment points - preview in editor
Arena - no PK consequences created "zone rules"
Attach VisualFX to actor type no support for attaching to anything other than feet currently; also, might not look right when geonans die (effect might stay vertical) -Karlgluck 7/22/09 5:50 PM
Special FX bindings - be sure hidden scenery bindings are hidden
framework
implementation
tools
compilation
Mouse-over-actor
Equip Items
Make client actor manager detect swimming/wading/falling/visibility correctly
All equations
HP, MP
Movement Speed, Action Speed
Alignment
Melee Damage/Defense, Spell Damage/Defense
EXP: from party, xp to level, xp from monster
Pits & falling into them
Melee System
Fix client-server request interaction
swimming
Event System
Framework
projectile
targeted special effect
manager

Create "projectile" that compiles an event, embed object for ranged weapons
resulted in necessity of extracting old projectiles -> magic -> spells...
dynamic event compiler
Integrate framework & types into editor
this actually became unnecessary! all types that require events actually contain the events themselves, and integrate them using the dynamic compiler
Add preview dialog
since the types are dynamic, any preview dialog would have to be container-specific; for example, a preview dialog for ranged weapons, one for spells, etc. so this is unnecessary work

Enable compilation of events
Enable compilation of projectiles in server item description
Integrate event framework into client
acquireResources
disable old projectile/magicfx/magic/spells code
done by assigning 0 to number of array entries in each, assert(false) in loader

benchmark test: do server and client start up and work normally?
passed!!!

create network messages for projectile event management
create projectile event
destroy event

pass messages client-side to the event framework
enable ranged weapon combat on the server
client to send create projectile/destroy event packets
detect ranged weapon in processAttackRequest
updateRangedAttack
processProjectiles
add 'range' to item description
remove old scenery renderer from client

Goal: finished on Thursday, July 30
Test: ability to kill monsters with shots from ranged weapons
Completed: 3:00 PM

extra time spent applying new combat profiles, including swimming profile, and debugging the event framework; all item types are now in the game and should compile into their specializations correctly (added: crossbow, javelin, thrown and spear)
Magic System - I
finish framework outline
integrate types into editor
shared/magic
shared/magic/tools

write header for dynamic compiler for magic
add spells framework:
mp cost, listed in classes, casting action, CONTAIN magic
action delay is specified by magic, not by spell--this lets spells' delay go down noticeably at a level-threshold if that is appropriate for a given magic (beam, for ex)

shared/spell
shared/spell/tools

write tool actions
complete-editor/spell/spellactions
complete-editor/magic/magicactions

write source file for Tools::MagicCompiler
compile types
magic list for server
spells list for client & server

load spell list in client
get rid of old spell descriptions
load magic & spells in server
game-file manager

processCastRequest
updateUsingMagic

Goal: finished on Friday, July 31
Test: can kill a monster using direct-damage flame attack
Completed: July 31 at 11 pm
remove old projectile/magicfx/magic/spells/enchantments code
sanity check: can 2 players still see each other online? yep, looks good so far

code cleanup - clean out all old stuff that has been replaced so far

Magic System - II
direct damage
validate distance before applying damage

AOE spells
handle request type
fix parameters in editor
packet event types (p->p, p->l, l->l, l->l+p, p->l+p)
updateUsingMagic

create spell of each type in editor & recompile (save creating & recompiling multiple times later!)
had to change the avatar spells to make referencing work correctly
instead of creating each by hand, write "create spell of each type" method

after recompiling, I noticed that I had to fix the spell availability mask update code
AOE spells work!
teleport
projectiles
handle request type
updateUsingMagic

portals
processCastRequest
incrementMagicStage
advancePortals

add chaos effects to opening a portal to an invalid map
write code for raytrace-validating teleports (needed for dimension doors)

fix portal description in editor
rebuild (fix syntax errors), compile new game file with editor
test: dimension door - passed!
mark system
set via text ("mark1" thru "mark0"), handle in Client netmsg
test: self port to mark 1 - passed!
give maps a hashed unique ID
save marks to database on logout
load marks from database at login

invalid map -> chaos
spin attack
editor type
processCastRequest
incrementMagicStage

recompile & test
remove radius from spin attack (it's taken from the weapon)
attack run
editor type
processCastRequest
incrementMagicStage - (shouldn't get here--assert!)
updateAttackRun
recompile & test

leap
editor type
processCastRequest
incrementMagicStage - (shouldn't get here--assert!)

updateAttackRun
update client to move character vertically when leaping
recompile & test
heal
editor type
processCastRequest
incrementMagicStage
cure
remove from -hp regen
its just a buff

buff
configurable buff icons in editor
mutations (including flying, levitating)
enchantment - armor
make enchantments show up in character descriptions
enchantment - shield
enchantment - reactive healing
enchantment - thorns
add # limit to all AOEs (bow-spin included)
separate threshold levels

DOT/AOE cloud
aoe-buff
dot-aoe-buff
branching
summon
trap - dimension door
trap - black hole
disenchant
invisibility



Notes along the way:
- terrain blending rules aren't compiled!
need jumping animation

Swimming/javelin profiles
Add javelin & other ranged weapons to item types
Need to fix the swimming profile so that it is applied at first entrance to the water (instead of after first action)

Quite a lot, in other words! I broke off from doing the spells today in favor of implementing the treasure system. Although I haven't created the editing utility yet...it's quite a pain to design...the limited testing I've done indicates that the categorized weighting system works quite well.

We're going to make it!

No comments: