Fri 21 Oct 2008

 

    -       Text from board




Fri 28 Sep 2006

 

    -       ATML 'print' event handler erases any active input control before appending text to page

 

Fri 8 Sep 2006

 

    -       Fixed bug that could cause physical_space::object_picking_ray() to oscillate and

lock up when firing ray at two coincident OBBs

    -       Check for presence of wielded object before picking up another in the same hand (revealed bug above)

    -       Idea: IIgnitionSource's default active action (assuming it's unwieldable): try to

ignite an in-hand IFlammable object if there is one?  Why just in-hand?  What if there are multiple

IFlammable objects?  Better idea: Default actions that take IOs require drag-and-drop, just for consistency.

 

Sun 28 Aug 2006

 

    -       Initial implementations of IFlammable and IIgnitionSource

    -       Implemented flint_and_steel, including the ability to set stuff on fire with it

    -       Added on/off status to light sources

    -       Basic ENLI mechanics to support drag-and-drop IO actions

 

Thu 24 Aug 2006

 

    -       Added model-index parameter to physical_object::render() to support objects like torches that

            need to take on varying physical appearances.  The primary model identified at load time

remains the only supported basis for wearing, animation, and collision volumes.

 

Fri 18 Aug 2006

 

    -       Burned-out/normal torch models in Maya; work on supporting multiple models per file

 

Mon 7 Aug 2006

 

    -       Spent a lot of time figuring out why skeletal-animated torch flames were inverted in Y relative to

            unskinned torch flames.  Turns out that Maya applies a different local-axis frame to joints

            versus unskinned geometry, controllable via the Skeleton ->Orient Joint dialog.  By default,

            a joint's local X axis is that of the bone leading away from it.  If this frame doesn't coincide with the

            world-coord frame, then any rotations applied to that bone, including the rotation used by the Granny

            exporter's MoveToOrigin feature, will not be identical in world space. 

This effect can be remedied by using the GrannyGetModelInitialPlacement4x4() rotation

during world-transform construction at runtime... or by setting the Skeleton->Orient selection to 'None'.

For now, we'll use the initial-placement orientation everywhere we construct a transform.  This

is awkward in a few places (such as IK), but it may prove more stable in the long run

   -        Worn objects now have the same space considerations as wielded ones (see below)

   -        Default (0-degree) facing direction is now +Z for models imported from both Max and Maya, as a

            consequence of the initial-placement transform

 

Fri 5 Aug 2006

 

    -       Modelled an emitter object for torches, plus positioning/orientation updates.  TODO: model_filename needs to be an array...

 

Thu 4 Aug 2006

 

    -      Spent a lot of time figuring out why wielded torches caused Granny errors in camera.begin_frame()

when dropped from a wielding position.  Problem was that wielded objects were not being taken out of

KINEMATIC_CONTROL mode by game.drop_object_into_space().  They were subsequently triggering

kinematic collisions of depth < MIN_KINEMATIC_DEPTH when returned to KINEMATIC_CONTROL

after their fall into inventory space.  This was a problem because generate_collisions() was failing to

ignore kinematic collisions with zero valid contact points, so the torch's position ended up

at -1.#QNAN0.  The torch's light emitter then updated its shadow-camera position with the NAN, which

caused GrannyRayIntersectsPlaneAt() to fail

 

Sun 30 Jul 2006

 

     -      Spent a lot of time figuring out why torches weren't illuminating the inventory space when dropped

from a wielding position.  Problem was that items owned by the PC were being updated and rendered

by the PC... without verifying that they actually occupied the same space as their owner.  Consequently,

they were being updated twice per frame.  In the case of torches, the first update took place in world

space, setting the light source's "surveyed" flag for the frame so it was never being linked to any

objects in inventory space

 

Mon 17 Jul 2006

 

     -      Added multithread protection to Eden's small-block allocator.  This implementation isn't great for

applications with any amount of concurrency, but it'll prevent the memory corruption symptoms

that EDBUG has been exhibiting since the recent optimization work

 

Thu 14 Jul 2006

 

     -      Added vector.is_zero operator

     -      Some IK maintenance work (TODO: had to lower n_links from 2 to 1 to avoid left-arm deformation when carrying torch... why?)

 

Tue 11 Jul 2006

 

     -      Eden fix: instances being compared for equality weren't being type-checked

     -      Dialog base class uses new, more-explicit subpane names to reduce confusion

     -      Palettes are no longer physical_spaces.  They handle their own object containment,

and they don't need active-set, physics, or lighting support.  TODO: try to break dependencies between

cameras and physical_spaces; it would be lame to force palettes to inherit from physical_space just to make

translucency work.  And make sure that physical_objects are OK without a valid space association...

 

Mon 10 Jul 2006

 

     -      Always use clipped panes for 3D-related functions (fixes offset highlight boxes in clipped panes)

     -      User objects in palettes drawn with filled footprints for easy recognition

 

Sun 9 Jul 2006

 

     -    Asset browser dialog may be dragged by its header

     -      TODOs

                        - Fix behavior of physical_object::highlight_selected() in clipped panes

                        - Fix placement/deletion problems with user objects in asset browser

 

Thu 6 Jul 2006

 

     -    Perforce batch files for schedule maintenance

 

Wed 5 Jul 2006

 

     -    physical_space::ray() no longer ignores coincident terrain/path hits

 

Mon 26 Jun 2006

 

     -    Current preproduction TODO list

            - Postponed:

                        - Height map editing

                        - Directional shadows

                        - Spot light angle/falloff

                        - Ambient-light regions

                        - SFX instancing

            - Implement ENLI paradigms

                        - Left-click for passive actions (examine, listen, talk...)

                        - Double-click for active actions (use, open/shut, wield/wear, attack, eat...)

                        - Drag-drop to use an item on/with another item

                                    - Containment

                                    - Wield/wear alternation?

                                    - Lock/unlock doors

                                    - Examples of commands supported via drag/drop

                                                "Fill teapot with water"

                                                "Put mat under door" (drag mat to door)

                                                "Put opener in keyhole" (drag opener to door)

                                                "Feed object to lizard" (drag item to door keeper)

                                                "Point wand at menhir" (drag wand to menhir or equip the wand and wave it manually)

                                                "Light torch" or "Fire cannon" (by dragging flint/steel to object)

            - Implement new physics/kinematics model

                        - Ragdoll mode when player goes dynamic

                        - Collision mass categories

                                    - Pushable (affected by both kinematic and dynamic collisions)

                                    - Small (unaffected by any but dynamic objects)

                                    - Fixed (never moves in response to collisions)

            - ENLI escape codes in ATML

            - Secondary container spaces, double-click to open/close?

            - Region interior/exterior tests

            - Scene logic

            - Space insertion check

            - Wield/wear exchanges

            - Highlight object on first click (or hover?) for feedback

            - Undo mechanism

            - Think functions

            - Open issues

                        - Editor highlight boxes misaligned?

                        - Suspended objects in mid-air

 

Wed 10 May 2006 - Sun 14 May 2006

 

     -    Optimize Eden compiler (~3x speedup for full build)

 

Fri 25 Feb 2006

 

-         Updated ODE to  the Feb-10 unstable snapshot

 

Fri 23 Jan 2005

 

-         Trying Vice-Versa Pro for directory syncs between RAD/home…

-         Moved effects-face list to camera so it can be cleared by palettes and other spaces that don’t call survey_active_set().  Effects faces are still rendered by CPP_Space::render_post_effects(), though, because they need access to the space’s light cache, and cameras don’t currently know about spaces.  If cameras keep track of their spaces in the future, it will make sense to move effects-face rendering to CPP_Camera::end_frame().

 

Fri 14 Jan 2005

 

-         Art support over the past couple days:

o       Got rid of assert(material_name != -1) in MESH::render() and other places.  Locks up Kathy’s machine if invalid meshes are accidentally exported and viewed.

o       MEL scripts/buttons to export and view static, animated, and worn objects

o       Improved selection list interface for viewing bones and materials on base/worn models

o       Viewer fails gracefully if model file not found (although there still needs to be a way to verify that a model was actually loaded, since the file load happens inside physical_object::initialize() …)

 

Wed 24 Dec 2004

 

-         Got rid of CPP_Space::clear_active_set().  Active set is now persistent from frame to frame; objects are added and removed (with hysteresis) by CPP_Space::survey_active_set().  This allows IActivatable::activate/deactivate() to be implemented

 

Wed 19 Dec 2004

 

-         Numerous editor/viewer tweaks

-         Normals calculated correctly for terrain-block border vertices

-         Shut down themes when exiting level

-         Worn/wielded objects don’t collide with any other objects with the same owner

 

Wed 14 Dec 2004

 

-         Terrain vertex normals

 

Wed 1 Dec 2004

 

-         Begin work on miscellaneous MSS issues to get ready for ports

 

Tue 30 Nov 2004

 

-         Overhauled sound classes.

1.      CPP_Engine now provides a very thin wrapper over AIL, just sufficient to abstract all supported audio file types (3D PCM sounds, XMIDI sequences, non-spatializable 2D tracks from MP3 files) at the “voice” (HSAMPLE/H3DSAMPLE/HSEQUENCE) level.

2.      The Eden sound class provides a convenient way to allocate one or more voices to play files, with full save/restore support on all playback parameters.  Nothing prevents Eden code from working with files and voices directly at the engine level; sound is just a convenient contents class that makes serialization transparent, deals with volume ramps and other background tasks, and ensures that only playing sounds have voices allocated to them. 

3.      For convenience, each physical_space provides an array of sound instances that can be allocated, assigned a source filename, and triggered by objects and events in that space with a single call to physical_space::play_sound().  Again, an object can still take responsibility for managing its own sound instances if desired.

-         Disabled broken-contact purging in contact cache.  Not clear why this was done in the first place; it eliminates an easy way to limit repetitive sound generation, since a broken contact is the natural result of a collision.

 

Mon 29 Nov 2004

 

-         Extensive work on wieldable-object IK

-         Containers/owners are now responsible for updating and rendering their owned contents, even if the owned objects are part of a space’s active set (e.g., wielded weapons)

-         Got rid of MLVIEW::row_source_string member in atml.cpp, which wasn’t updated properly when a string with nothing but whitespace was appended to the document just prior to a visible one.  This bug caused the visible string to be added to the page on two successive calls to ATML_view::compose(). 

 

Fri 26 Nov 2004

 

-         Fixed Eden bug that was preventing access to interface functions in non-anonymous classes.  E.g., if “foo” is a function declared in an IWeapon interface rather than in physical_object, then “x.foo()” would compile if x is an “object with IWeapon” but not if x is a “physical_object with IWeapon”.  Dealt with this by getting rid of the o_source member of PVAL; its existence was based on an assumption that interfaces would be associated with anonymous classes rather than named ones.  ECOMP::name_reference() now checks the PV->type of the subexpression it’s passed, under the assumption that IS_OBJINST_TYPE(PV->type) implies a valid instance prefix, anonymous or otherwise.

 

Thu 25 Nov 2004

 

-         Fixed Eden bug causing invalid double values to be returned from C/C++ functions

-         Got rid of SEvent_adjust_game_clock() and all clock-recentering functionality in the engine.  All time-related variables converted from singles to doubles.  Reason: Too much of a hassle to expect every script object that stores and compares time values to deal with clock-recentering events.  Monotonic time is much easier and safer to work with. TODO: Engine will need to hide Granny clock-recentering from the script code, currently removed altogether.

 

Wed 24 Nov 2004

 

-         Theme-switching for background music

 

Sat 20 Nov 2004

 

-         Initial implementation of new single/double-click UI

 

Mon 9 Nov 2004 – Fri 12 Oct 2004

 

-         HP 8566B tracking generator

-         Half-Life 2

-         Any other excuses?

 

Sat 13 Nov 2004

 

-         Extensive rework on contact cache, including purging entries corresponding to broken contacts

 

Mon 9 Nov 2004 – Fri 12 Oct 2004

 

-         Equinox client-server conversion, including streaming audio

 

Sat 7 Nov 2004

 

-         IPortable implementation defined for takeable/droppable objects

-         Ongoing work on contact-cache mechanism

 

Tue 2 Nov 2004

 

-         Editor support for wielded-object IK animations

 

Sun 31 Oct 2004

 

-         Added BEING_WIELDED flag

-         Added physical_object::update_IK() to support wieldable (attached) objects

-         Eden issue: wrong line number being reported for errors in certain interface calls?

 

Fri 29 Oct 2004

 

-         Added BEING_WORN flag to replace old location field

-         Added physical_space::separation() to return spherical-boundary distance between two objects in a space

-         Adjacency function uses physical_space::separation(); seems to work well apart from visible jitter in object piles when picking up a nearby object

 

Thu 28 Oct 2004

 

-         Fixed a couple of bugs in Pool<> and HashPool<> that should never have made it out of the Mesozoic.  Both were related to pools that are forced to grow before any other accesses

-         Cleaned up model/instance radius calculations in preparation for adjacency-list construction

 

Wed 27 Oct 2004

 

-         Tried to build adjacency graph using of ODE’s AABB broad-phase collision handler.  Didn’t work -- too many cases where objects resting on each other don’t have overlapping AABBs.  Worth a try, but this will have to be done with sphere bounds testing

 

Tue 26 Oct 2004

 

-         Some contents space management work (contents space now saved in level file that contains object being viewed; references to inventory items are stored in contents space)

-         Don’t call update() from physical_object::initialize() or other potential restoration-time routines – order-of-restoration dependencies may arise with respect to owned items

-         Got rid of physical_object::location

-         Added physical_space::is_quiescent() and physical_space::wait_for_equilibrium()

-         Some near-term TODOs:

o       Function to wake up island containing object about to be removed from a space

o       Basic height-map editing

o       Height normals

o       %-codes for NLI access in ATML

o       Sort out NLI/ENLI/game/object responsibilities for object interaction

o       Editor support for wield transforms

o       Instance flag for wearables

 

Mon 21 Oct 2004

 

-         Added OBB_point_depth() to renderer – this is a (more) accurate rewrite of dGeomBoxPointDepth() that uses sqrt() calls.   Too slow for physics use, but provides better consistency for reachability tests via CPP_Object::boundary_distance()

 

Fri 22 Oct 2004

 

-         Added EXECFLAG_KEEP_SYMS to Eden runtime

-         Fixed Eden aliasing bug (22 Sep 2004) by making temporary copies of indirect function parameters.  Not clear how undo buffer in text_input class could possibly have worked before.  Worrisome.

 

Thu 21 Oct 2004

 

-         Submitted dGeomBoxPointDepth() fix to ODE list.  Still pretty broken for exterior points, but much better than before.  Rewrite when there’s time...

 

Wed 20 Oct 2004

 

-         Final object selection UI

o       PC turns to face selected object

o       Picking ray is smart about OBB/visible-polygon selection

o       Both ray- and camera-based visibility tests finalized

-         Eden issue: does mat4x4.set_view_target() work properly?  Had to use .set_frame() instead, which is fine, but need to find out why set_view_target() didn’t work Updated: set_view_target() uses +Z as forward vector; game objects use +X.  This was explicitly documented for set_frame() but not set_view_target().  Docs fixed.

-         Eden issue: fix of 22 Sep removes ability to create and work with temporary variables in the debugger console (duh)

-         ODE issue: dGeomBoxPointDepth() does not return valid results for points outside the OBB.  Distant objects are sometimes selectable in preference to nearby ones; need a workaround

 

Mon 11 Oct 2004 – Sun 17 Oct 2004

 

-         Microwave Update, OKC trip...

 

Sat 9 Oct 2004

 

-         Player directional movement UI

-         Eden issue: subclassed procedure with different default parameter value generates mismatch error

 

Mon 4 Oct 2004

 

-         Begin work on camera-based object visibility test to prevent reaching through walls, etc.

 

Sun 3 Oct 2004

 

-         Ongoing UI work

-         CPP_Space::probe_ray() refactored for use with separate terrain/path/object collision checks

-         Fixed Eden bug related to use of “= nothing” as default out parameter

 

Fri 22 Sep 2004

 

-         Eden bug seems to have broken the undo feature in class text_input?!

-         Initial work on drag/drop command synthesis

-         Added object names, nouns, and adjectives as common variables on physical_objects

 

Wed 22 Sep 2004

 

-         Eden interface to NLI

-         EVM_execute_inline() discards changes to SYM dictionary before dynamic code begins executing

 

Tue 21 Sep 2004

 

-         NLI input hook added

-         Removed keyboard accelerators from game class

o       TODO: in “editable mode”, keyboard accelerators should work when cursor isn’t in text pane

 

Fri 17 Sep 2004

 

-         Notes on object appearance/UI model

- Object types have only one default scale and orientation for all spaces

- Object instances have instance scale…

§         Normally unity

§         Can be copied to type scale and reset to unity in asset editor

§         Valid in all spaces

§         Never changes (except under script control)

- … and orientation

§         Normally identity

§         Can be copied to type orientation and reset to identity in asset editor

§         Screenspace proxy interactions

·        Copied from target during grab

·        Reverted to identity when space window boundary crossed

·        Copied back to target during drop

-         UI mechanics notes

o       On dropping a dragged object

§         Generate command text for drag operation

·        Map -> map                          

o       Object dropped within arm’s reach

§         “move <DO text=”(type name)” name=”obj0004”> <DEST x=? y=? z=?>”

o       Object dropped outside arm’s reach

§         “throw…”

·        Map -> inventory

o       “take…”

·        Inventory -> map

o       “drop…”

·        Inventory -> inventory

o       Probably won’t generate a command for moving objects within inventory

·        Inventory -> player icon

o       Equips item

§         Just carrying a light source is enough to “equip” it, but…

§         Weapons and clothing/accs must be dragged to player icon to equip

·        Equipped items do not show up in inventory

·        Player icon -> map

o       Identify what equipped item was selected (or closest to selection point)

o       Generate “drop”, “remove”, or “lower weapon” command

·        Inventory, icon, or map -> container or surface

o       Destination object has a chance to convert “drop” or “throw” command to “put <DO> in/on/under… <IO>” command

§         Or: generate command as soon as object lands on destination object?

·        Probably not, because “drop” command has already been executed

o       If no IO action generated, default to “drop” or “throw”

o       “Put in” command must also be generated when dropping item into open container in inventory

 

·        Containers and surfaces

o       Single-click to generate “Look inside the …” command

§         Assigns physical space to container

§         Places close button in inventory view

o        

§         Enable all objects in active set within specified radius of target’s former location

o       Drag can be aborted by:

§         Dropping within 0.1 meters

§         Right-clicking while dragging

§         ESC key

 

Mon 13 Sep 2004

 

-         Drag/drop UI in progress

-         Added CPP_Object::ground_clearance()

-         Added CPP_Object::boundary_distance()

-         Physics clock not permitted to fall more than 1 second behind wall clock, in case a space doesn’t get updated regularly

-         Camera function semantics = similar to active-set semantics; i.e., OK to call picking_ray until state is reset at beginning of next frame.  Probably need to make sure that nobody can move the camera except at specific points in the frame, though

 

Sun 12 Sep 2004

 

-         Ongoing work on drag/drop functionality

-         See Eden bug note on 28 Feb: same thing happens with camera.pane.mouse_in_pane()

-         Need to resolve awkwardness re: calling picking-ray and other camera functions outside begin/end frame

 

Sat 11 Sep 2004

 

-         Enable collisions for geoms corresponding to newly-created rigid bodies.  This prevents fallthrough problems when a space’s physics clock starts out far behind the global wall clock.  (Normally happens only if somebody fails to initialize physical_space::clock properly, but it may avoid trouble in the future…)

 

Fri 10 Sep 2004

 

-         Inventory spaces modelled with 5 planes rather than trimesh for better collision quality

-         Inventory spaces rendered automatically from space dimensions and texture spec.  We’re giving up on the idea of fancy 3D containers (backpacks, etc.), but those weren’t going to work well anyway due to relatively-poor trimesh collision quality with ODE

-         Terrain and inventory-space cells rendered with alternating quad orientation to reduce vertex-shadow artifacts

-         Got rid of hardwired map-size constants; spaces (and their associated objects like terrain, paths, lights…) can now support any dimensions, not just 256x256

 

Mon 6 Sep 2004

 

-         Eden issue: need error message for writes to temporaries originating from accessor functions

-         Created inventory_space class

-         Ongoing work moving update/render functionality into space classes so that palettes, inventory, etc. can take advantage of lighting and physics…

 

Sat 4 Sep 2004

 

-         Fixed Eden bug that was causing garbage in upper 24 bits of 8-bit types returned from C/C++ functions to be interpreted as valid data (e.g., failure of bool opcodes to recognize returned false values)

 

Fri 3 Sep 2004

 

-         Static portions of scene (everything except physical_objects with collision classes other than FIXED_ENVIRONMENT) are cached in shadow buffers, so that only movable objects need to be rendered by shadow cameras each frame

-         Restructured main loop for fixed physics timesteps.  Current default is 30 Hz.  This allows for gameplay at frame rates much lower than previously possible.  Kinematic updates kept on wall-clock time for now, since animation becomes jerky when quantized.  (Also, kinematic updates are required for all active objects in a frame; they can’t be skipped like dynamics updates.)

-         Added physical_object::moved and ::reoriented accessors.  These are valid from update_active_set() to clear_active_set().

 

Tue 31 Aug 2004

 

-         Shadow buffers allocated from finite pool maintained by physical_space

 

Mon 29 Aug 2004

 

-         Added OBJ_FORCE_ENABLE and OBJ_FORCE_DISABLE flags to control rigid body status

-         Dynamics enable/disable function in asset editor works properly with trimesh objects

 

Sun 29 Aug 2004

 

-         Editor maintenance/bug fixes (path framing, gadget rendering, etc.)

-         Active set boundaries based on camera ground footprint plus active-set margin, so zooming way out works now

-         iron_dark.tga found to be corrupt in a way that causes a Max-exported texture to have zero alpha.  Load and save file in PS7 to fix

 

Sat 28 Aug 2004

 

-         Effects pipeline separated into Z-sortable and normal effects to keep transparent objects’ interiors from being rendered

-         Enabled alpha-tested objects

-         Editor gadgets rendered with Z bias to force them to show up against geometry

-         Switched to ODE quadtree space for world collision set (slightly faster than previous hash space)

-         Added max_length parameter to all functions that call probe_ray().  Long rays cast along diagonals have a serious performance problem with terrain.

-         Added explicit_shutdown() method to CPP_Space and CPP_Path to complement the one that’s already in CPP_Object.  In general, game objects should clean up after themselves via explicit-shutdown methods rather than relying on possibly out-of-order GC that can confuse ODE and other external libraries.

 

Sat 21 Aug 2004

 

-         Z-buffer access transform used by shadow mapper

-         Screenshot of the month…

 

 

 

Fri 20 Aug 2004

 

-         Added explicit_shutdown() method to physical_object, to be called when removed from a space

-         Fixed Eden bug involving improper resolution of parent. calls to grandparent classes

 

Wed 18 Aug 2004

 

-         Path geometry refactored – path interiors can be filled independent of perimeter

-         Path edge blending (beta factor) implemented

 

Sat 14 Aug 2004

 

-         Translucent object rendering

 

Wed 12 Aug 2004

 

-         TODO:

1.      render_post_effects() for polygons requiring alpha blending

2.      Directional light regions

 

Wed 11 Aug 2004

 

-         Import/export height-map .TGAs

-         Eden issue: foreach sometimes releases an invalid temporary

 

Mon 9 Aug 2004

 

-         Added height-assignment modes for paths (flat / conformal / waterfall)

 

Fri 6 Aug 2004

 

-         Finished optimization pass on terrain; overall FPS improved 35% (26->35) in test scene with two spotlights and one path

 

Thu 5 Aug 2004

 

-         Render terrain via cached index buffers

 

Sun 1 Aug 2004

 

-         Lighting work in progress (Surface normals for path geometry; can’t do vertex normals because the post-subdivision vertices aren’t shared.  Looks fine, but potentially costs a lot of performance as vertices are transformed redundantly.  TODO: some sort of geometric binning to unify path vertices and turn them into indexed-primitive buffers.)

 

Sat 31 Jul 2004

 

-         Lighting work in progress

-         Editor UI work in progress

o       Unified right/middle-button movement across modes

o       Automatically launch browser for selected object’s category

 

Thu 29 Jul 2004

 

-         Shadow optimization in progress

 

Tue 27 Jul 2004

 

-         Unified Pixo and Granny projection math

-         Some lighting work

-         Viewer maintenance

 

Fri 23 Jul 2004

 

-         Collision report integration still in progress…

-         Added new CPU fan, NV40 to dev machine

-         Some Equinox UI work

 

Sat 17 Jul 2004

 

-         Spent the week on 1.50 release of 7470.exe

 

Sun 11 Jul 2004

 

-         Animation velocity calculations

-         Collision report integration in progress

 

Wed 30 Jun 2004 – Thu 8 Jul 2004

 

-         Vacation

 

Wed 23 Jun 2004

 

-         Extensive reworking of rigid-body lifetime management aimed at taking advantage of ODE auto-disable functionality.  Looks very good so far; should be fairly compatible with Novodex.  In progress…

 

Mon 21 Jun 2004

 

-         Some ODE 0.5 tweaking, including contact depth sorting.  Kinematic collisions between capsules and trimeshes/height maps now appear rock-solid in all respects

-         TriMesh terrain is outta there

 

Sun 20 Jun 2004

 

-         Found contact-overflow in Croteam trimesh-OBB collider

 

Sat 19 Jun 2004

 

-         Switched to Croteam’s new TriMesh-CCylinder collider; works well when deepest contact used for kinematic collisions (as opposed to the first).  The game is now able to use a bone-stock build of the ODE library for the first time

-         Retried dTerrainY collider with higher MAX_CONTACTS; results much improved.  Still some issues with kinematic CCylinder collisions, but dynamic collisions appear reasonably robust.  TriMesh terrain is outta there, unless some real showstopper(s) emerge with dTerrainY

-         Terrain blocks and path blocks are now the same sizes.  This will make it easy for regions to suppress rendering of completely-obscured terrain

 

Tue 15 Jun 2004

 

-         Some rendering tweaks/cleanup

-         Near/far planes exposed via Eden camera object.  Bringing in the near plane to support light sources mounted on walls causes bias linearity problems; second-surface occlusion for shadow cameras seems to help.

-         Remaining rendering cleanup tasks this week:

o       Finalize lighting equations

o       16-bit Z-buffer crash

o       Get rid of ground-intercept hacks

o       OBB-, sphere-, trimesh, and LSS frustum culling

o       Path block-frustum culling

o       Terrain-frustum culling

o       Planar terrain optimization for shadows

o       TCACHE debugging and performance tuning

o       Palette object layout bug

o       MM drag in normal gameplay

o       Ambient-light regions

o       Terrain dig/raise operations using paths (both open and closed)

 

Mon 14 Jun 2004

 

-         PVS functionality removed from physical_space; all renderers are responsible for culling active-set objects against the active camera frustum.  Shadowed environments need a single, relatively-large active set that supports either multiple PV sets (ugh) or fast culling of unseen objects via frustum planes.  Plan is to go with the latter.

 

Fri 11 Jun 2004

 

-         Classes level and palette both inherit from physical_space, allowing lighting and dynamics support in palettes. This will be useful for inventory-palette implementation, as well as unifying editor- and inventory-selection behavior.  Also allows unification of PVS databases and instance-name directories across levels and palettes

-         Updated to Croteam trimesh-OBB collider (which turns out to require high MAX_CONTACTS to work reliably).  Still using Erwin’s trimesh-Ccylinder collider until there’s time to tune kinematic collisions with the Croteam version

 

Wed 9 Jun 2004

 

-         Ground PVS limited by far plane distance

-         Added background_color parameter to camera class

-         Updated to ODE 0.50, but still using de Vries’s trimesh colliders from 0.039 due to poor collision quality with the new Croteam colliders.

 

Tue 8 Jun 2004

 

-         Added Z-bias parameter to camera class

-         Added range parameter to camera class

-         Store all 6 frustum plane equations to aid visibility tests

-         Camera offset member split into offset_H, offset_V, and offset_distance members

-         Added double underscores to parameter names in all autogenerated Eden functions to avoid name conflicts with class member variables

 

Sun 6 Jun 2004

 

-         Added Z-only rendering for lighting passes on objects, terrain, and paths

-         Added NO_FRAME_BUFFER texture option for light target textures.  This saves memory, and enforces Z-only rendering implementations by forcing a crash if anyone tries to draw to the texture bitmap

 

Thu 27 May 2004

 

-         Shadow mapping tweaks and epsilon fixes.  This code is going to need a lot of optimization, but it looks really good.

-         Moved lighting to Pixo vertex callbacks.  Appears to be visually stable for clipped triangles, and I’m not 100% sure why.

-         Taking a (10-day) break to work on Equinox receiver control application

 

Wed 26 May 2004

 

-         Initial shadow-map functionality up and running (slowly)

 

 

Sat 24 May 2004

 

-         Ongoing shadow-map R&D

-         Various changes to pipeline structure to support nested begin_frame/end_frame calls

 

Sat 22 May 2004

 

-         Evaluated Benoit Chaperot’s dGeomTerrainY height-map contribution to ODE.  Contact generation is far less stable than TriMesh, and collision behavior is mushy/twitchy in general (e.g., when walking into steep slopes).  Not useful.  (Rant: why don’t people realize that primitive-dependent collision response in a physics engine is insanely lame?  If something bounces off a wall, it shouldn’t behave differently if the wall geometry is defined by a trimesh or a convex hull or a box or a plane.  ODE is very frustrating in this respect, probably because of its n-blind-men-and-one-elephant approach to collision-primitive implementation.)  Update: In retrospect, this complaint may have had the same root as the Croteam trimesh collider issue noted on June 9 above.  Need to retry this test with higher MAX_CONTACTS to make sure. 

-         Began work on shadow-mapping support.  Light-probe rays don’t appear to be workable due to poor performance and epsilon bugs, so we’ll try associating granny_cameras with spotlights, rendering from each light source to a per-source Z-buffer that’s later used to determine exposure on a per-vertex basis during frame-buffer rendering.

 

Fri 21 May 2004

 

-         Reimplemented T_BLOCK system as a cache to avoid long terrain-tessellation times, prepare for possible ray-acceleration work later.  Performance is pretty awful, due to time needed to build trimesh geometry during cache misses.

-         Edge epsilon bug in OPCODE’s ray/triangle collider prevents use of dGeomRay for light probes

 

Tue 18 May 2004

 

-         Ongoing lighting R&D work…

 

Sat 15 May 2004

 

-         Created light cache class

-         Lighting UI added to asset editor, including color picker

-         Background thread for ChooseColor() dialog

 

Fri 14 May 2004

 

-         Lighting in progress

-         Added EVM_query_interface() to Eden

-         Created index for Eden reference manual

-         Added some error checking for user types in EVM_restore()

 

Wed 12 May 2004

 

-         CPP_Objects support animated textures

 

Fri 7 May 2004

 

-         Texture animation options supported by path editor

 

Thu 6 May 2004

 

-         Initial work on texture animation, including water animation

 

Wed 5 May 2004

 

-         Unified wall and terrain-region geometry and rendering code

 

Mon 3 May 2004

 

-         Eden issue: invalid class name assertion when declaring member variable of a user type declared in a base class (workaround: use explicit classname override on type declaration)

-         Added road-mapping options to wall mapper.  Looks pretty sharp:

 

 

Sun 2 May 2004

 

-         Ongoing work on path debugging and mapping functions…

 

Wed 28 Apr 2004

 

-         Region triangulation and PVS tested with solid region fill: 40 FPS baseline, 37 FPS with 100% overdraw, 35 FPS with 100% alpha-blended overdraw. 

-         Same test with Z enabled for region-fill: 40/34/33

-         Same test with Z=-0.001 for region: 40/36/36

-         Tentative conclusion is that 100% overdraw of Z-rejected polygons costs about 10%.  Need similar results for textured fill before deciding on overdraw-suppression strategy, but it appears that block-level culling of covered terrain will be adequate.

 

Sun 25 Apr 2004

 

-         Terrain-region triangulation in progress

 

Sat 24 Apr 2004

 

-         Started work on terrain-region representation

-         Learned that “tesselation” is spelled with only one ‘L’ in OpenGL-ese

 

Fri 23 Apr 2004

 

-         Updated preproduction task list

 

Wed 21 Apr 2004

 

-         Wall wizard UI complete

-         Added path-merge command

-         User variables stored with collision geoms are EVM_INSTANCEs, not CPP_Objects

 

Tue 20 Apr 2004

 

-         Some path UI features (insert points, split path)

-         C++-derived objects support bycopy semantics

-         Added post_copy() functionality to Eden (although still not altogether happy about different inheritance behavior of post_create() and copy() / post_copy() ….)

-         Tested Kathy’s kickass horse model : )

 

Mon 19 Apr 2004

 

-         Wall wizard UI in progress

 

Fri 16 Apr 2004

 

-         Initial implementation of spline-based wall mapping and rendering

 

Thu 15 Apr 2004

 

-         Collision detection implemented for walls

 

Wed 14 Apr 2004

 

-         More work on wall wizard, including wall mesh generation

 

Tue 13 Apr 2004

 

-         Initial implementation of wall-wizard footprint layout function

 

Fri 9 Apr 2004

 

-         Finished preliminary evaluation of Novodex.  Requires, in general, much less tweaking than ODE, and performs substantially better in both speed and stability. 

o       1,000 objects drops FPS from 40->30 with no explicit enabling/disabling of active set. 

o       Novodex does not appear to vulnerable to unexpected “explosions” when manually moving rigid bodies around, so it requires less tweaking than ODE.

o       By use of the BF_FROZEN_ROT body flag, actions like stair-climbing and –descent just work without having to implement a separate kinetic-collision path.  (Which is a good thing, because the Novodex collision API is not as flexible as ODE’s.) 

 

Thu 8 Apr 2004

 

-         Finished a fairly-extensive refactoring job on the ODE-based dynamics/kinematics code

 

Mon 6 Apr 2004

 

-         Still dorking with Novodex (taking the opportunity to clean up a lot of ODE glue code as well…)

 

Sat 3 Apr 2004

 

-         Taking a couple of days to evaluate the Novodex physics engine.  This package is significantly faster than ODE, and more stable as well.  Initial installation is going smoothly, but the collision API is vastly different than ODE’s.

 

Wed 29 Mar 2004

 

-         Initial implementation of path-editor functionality

-         Spline curves supported by path editor UI

 

Thu 25 Mar 2004

 

-         Initial implementation of path-editor menu functions

 

Wed 24 Mar 2004

 

-         Continuing work on path editor

-         Eden bug noted: array.copy_to() fails to compile if source expression has override

 

Sun 21 Mar 2004

 

-         Continuing work on path editor

-         Some defensive tweaks to list_box and button_list classes to fix path-editor UI glitches

-         system.Eden.sort() ignores “nothing” and deleted entries in source array

 

Mon 15 Mar 2004

 

-         Continuing work on path editor, including integration of name input control with list box

 

Fri 12 Mar 2004

 

-         Created path_editor, path_editor_list_box, path_entry classes

 

Thu 11 Mar 2004

 

-         Made some notes on path/region-editor UI

-         Enlarged the power_fn[] table in mp3dec.cpp to fix an .MP3 glitch

 

Wed 10 Mar 2004

 

-         Finalized wall-mapping texgen function (see note below)

-         Separated user- and default-item lists in palettes, other assorted tweaks

 

Tue 9 Mar 2004

 

-         Wall-mapping texgen function implemented:

o       At load time, we substitute U and V for X, Y, or Z in each polygon’s object-space plane equation (Ax+By+Cz-D=0), in place of each polygon’s dominant axis; e.g., a Y-facing polygon has coefficients calculated for the planes (A=X, B=U and V, C=Z). 

o       At render time, the scaled wall dimensions are inverse-rotated back into object space and plugged into the texture plane equations to find the equivalent U/V values that would have been assigned in a planar mapping if the polygon had been created with those dimensions in the first place. 

-         This seems to work very well, but even the slightest rotation around a given axis causes lots of texture swimming in the other two axes.  Need to understand why before marking the code “done.”  (Update: Was caused by numerical instability due to vertex-sharing between triangles with slightly different plane equations; fixed by generating texcoords for each triangle just before it’s rendered)

 

Mon 8 Mar 2004

 

-         Snap-to-grid, other functionality added to object browser

-         Bitched a lot about how hard wall-mapping functions are to write

 

Wed 3 Mar 2004

 

-         Object-placement editor UI completely functional

 

Sun 29 Feb 2004

 

-         Initial implementation of object-placement editor interface and functionality.  If ODE kicked any more butt, it would be licensed by the Bureau of Alcohol, Tobacco, and Firearms.

 

 

Sat 28 Feb 2004

 

-         Object placement editing

-         Two Eden bugs noted for future repair:

1.      physical_object obj = new symval(global.selected_object).type doesn’t compile, but should

2.      <library_name>.<some_other_unrelated_library_name> does compile, but shouldn’t

 

Thu 26 Feb 2004

 

-         Object placement editing in progress….

-         Added some syntactic sugar to Eden’s flags user type (“+“ and “-” are now equivalent to “|” and “& ~”, respectively)

 

Wed 25 Feb 2004

 

-         More shuffling of simulation-loop code….

 

Tue 24 Feb 2004

 

-         Moved simulation code into “game” class; moved saved state variables into “state” class.  (Because an Eden instance can’t destroy itself, the game state class can’t restore games or start new ones without assistance from another class that can free the old state.)

-         Added smart-declaration warning option to Eden compiler

 

Sun 22 Feb 2004

 

-         Removed browser class, replaced with global::launch()

-         Moved simulation loop from game class to global::launch().  Class game now contains nothing but game-specific event handlers and UI

 

Sat 21 Feb 2004

 

-         Initial implementation of level object storage and database maintenance.  Current version is entirely non-incremental, spending roughly 1.7 ms/frame on a 3.4 GHz P4 (~8% at 50 FPS) in determining the PVS and “active set” of objects accessible to the scripting and dynamics subsystems for a 1,000-object level.  Fine for production; probably worth reworking for incremental operation once the rest of the game code has stabilized.

-         Initial implementation of terrain navigation, including kinematic ascent/descent and free-fall dynamics.  This works really well except for jitter issues mentioned below.  Probably already less annoying than Neverwinter Nights.

-         Local pose now stored with each object in anticipation of future IK support

-         Collision bounding volumes no longer depend on a valid world pose

 

Fri 20 Feb 2004

 

-         Reviewed a few clothing deliveries from Rosie (pants/shirt for man_bod).

-         Ongoing terrain/object database R&D

 

Wed 18 Feb 2004

 

-         Ongoing terrain/object database development.  ODE’s stability has remained exemplary, with only a few quirks noted so far:

o       Tendency for box-trimesh penetration to spontaneously resolve itself when additional boxes are created or moved into the vicinity.  (Update: Pilot error.  3x3 terrain-block neighborhoods were not being activated properly.)

o       Small objects (e.g., vases) sometimes fall through TriMeshes.  This is the most serious issue encountered to date.  It will most likely be tolerable if appropriate sanity checks are performed… but it may be difficult to recover objects that fall through wall pieces and land on the ground inside them.  (Mostly fixed by establishing a minimum OBB size for objects)

o       Jitter and lurchiness when hugging corners due to lack of Minkowski-rounding support

o       Jitter and lurchiness when kinetic collision responses cross terrain-block geom boundaries

o       High-speed “skating” along walls due to addition of kinematic and collision forces (not really ODE’s fault; various workarounds should be possible)

o       Excessive CPU time needed to build terrain mesh from height map (Will probably be fixed by ditching TriMesh terrains in favor of specialized height-map terrain geom)

-         Some rudimentary stair-descent tests…

 

Thu 12 Feb 2004

 

-         Evaluated new TriMesh/box collider written by Jeffrey Smith at SoftImage.  It has its advantages versus the stock TriMesh collider, but it appears to have at least one or two bugs that allow objects to fall through the terrain mesh depending on their orientation at impact time

-         Renderer and world-database tweaks, including object position clamping

 

Wed 11 Feb 2004

 

-         Ongoing terrain/object database test development…

 

Sun 8 Feb 2004

 

-         Some experiments with overlapping terrain block meshes and quadtree/hash collision spaces.  Significant CPU penalty (~50 FPS -> ~30 FPS) noticed when test mesh broken into 1024 separate TriMesh geoms (32x32 blocks), even when using quadtree and hash collision spaces.  Turns out to be very important not to leave inactive geoms in the collision set. 

 

Sat 7 Feb 2004

 

-         Continuing work on terrain collision geometry data structures

 

Fri 6 Feb 2004

 

-         More TriMesh work.  Tested a million-quad terrain mesh successfully – allocation took 20 seconds and 100 MB of RAM with debug ODE/OPCODE build, but no significant CPU penalty was noticed over a single-quad mesh.  Slight increase in jitter observed for objects resting in hollows of sin(x) + cos(z) test map.  Update: The main cause of jitter appears to be the TriMesh/box collision handler.  Moving an object along one collision normal tends to embed it more deeply along other collision normals.

-         Some terrain data-structure design work

 

Tue 3 Feb 2004

 

-         Wrote MEL script for static-object exports (GleamExportStaticScene.mel)

 

Mon 2 Feb 2004

 

-         TriMesh geoms implemented and working well (used by static environmental features such as walls, stairs, and possibly terrain, if OPCODE proves stable enough).

-         Extensive kinematic collision improvements including stair-climbing heuristics

 

Sun 25 Jan 2004

 

-         Preliminary assessment of ODE complete.  Very impressive, overall!  Stability (both code-wise and dynamics-wise) seems reasonable.  Performance is a nonissue in this application, since relatively few objects will undergo rigid-body simulation at any given time.  ODE is provisionally greenlighted for development, which means that some time will need to be spent on the following:

1.      Integration with Granny kinematics.  ODE is happiest when you don’t set derivatives (positions and velocities) directly, and its friction model is not the most intuitive in the world, so it may be a challenge to “drive” the character with good animation quality and response feel.

2.      Integration with terrain.  ODE supports a third-party TriMesh data type, but we’re already relying on a rather shaky third-party type (dCylinderClassUser) for creature geometry, and I’m not crazy about having TriMesh dictate the design of the terrain system.  TriMesh will have to be evaluated concurrently with terrain-system design.

3.      Collision detection and response.  ODE will simplify this substantially, assuming peace can be made between it and Granny.

4.      Ongoing R&D:

1.      The terrain system needs a collision representation, assuming we don’t use TriMesh.

2.      Cylinders, boxes, and spheres need to collide with whatever terrain representation we settle on.

3.      Cylinder-cylinder collisions may need to be improved with additional contact points.

4.      Support and debugging of some of the most incomprehensible code known to Man

5.      Possible need to add joint representation and controls to Eden

5.      Inevitable tweaking needed to maintain stability in all circumstances.

All in all, it appears that the time needed for integration and ongoing maintenance will be justified by the features ODE will add to the game and the benefits it will offer to the development process.

 

Thu 22 Jan 2004

 

-         Added some sanity checks for single-bone object export (reset transforms / Move To Origin enabled)

 

Wed 21 Jan 2004

 

-         Models for static objects are recentered on their root-bone OBB origin at load time

-         Material exclusion tested OK

-         3DSMax export scripts for static objects now do a “reset transform” prior to exporting

-         3DSMax export scripts for static objects now automatically select the geometry and export only the selected object, skipping cameras and lights

-         Objects created in Maya need to have both “Freeze Transformations” and “Reset Transformations” performed, in that order, prior to launching exporter

-         Validated all 170 static objects exported via new Max script:

1.      barrel.gr2: Shape distorted (lidless_barrel and open_barrel are OK)

2.      bed.gr2: Normal problems

3.      blackcloak.r2: Normal problems

4.      candle.gr2: Wick scaled incorrectly

5.      canopy_bed.gr2: Same problem as bed.gr2

6.      crossbow.gr2: Scale distorted

7.      dagger.gr2: Scale distorted

8.      footlocker.gr2: Need to merge top/bottom models

9.      footlocker_open.gr2: “”

10.  goldcloak.gr2: Normal problems

11.  greencloak.gr2: “”

12.  keg.gr2: Shape distorted

13.  key_silver.gr2: “”

14.  leatherleggings.gr2: Normal problems

15.  redcloak.gr2: Normal problems

16.  rubble1.gr2: Invalid texture (all black)

17.  silverleggings.gr2: Normal problems

18.  skeleton_burialpose.gr2: Shape distorted; uses multiple bones

19.  skeleton_prostrate.gr2: “”

20.  skeleton_slump.gr2: “”

21.  wine_cask.gr2: Stand geometry in model 0 has extra space in Y

 

Mon 19 Jan 2004

 

-         Got rid of MODEL_INSTANCE type.  physical_objects can specify a non-default model number if desired, but only one Granny model can be represented by each physical_object

-         Continuing work on ODE integration….

 

Thu 15 Jan 2004

 

-         Financing secured for development through CY ’04.  This turkey had better fucking fly. :)

 

Tue 13 Jan 2004

 

-         New viewer application (V5) supports material-exclusion diagnostics

 

Sun 11 Jan 2004

 

-         Worked on collision data structures to support various geom types

 

Sat 10 Jan 2004

 

-         Implemented material-name exclusion; awaiting test art from Rosie

 

Tue 6 Jan 2004

 

-         Cleaned up bind/unbind functionality

-         OBB/AABB functions and geom construction work with BEING_WORN objects

 

Fri 2 Jan 2004

 

-         Began integrating ODE 0.039 into the game on a trial basis.  If successful, The Gleam will be the world’s first text adventure with its own physics engine. :)

 

Wed 31 Dec 2003

 

-         Finished moving books and equipment home from the RAD offices

 

Sun 28 Dec 2003

 

-         Continuing work on object browser…

 

Wed 26 Dec 2003

 

-         Added physical_object::update_shape_geometry() to solve conflict between game’s use of common-variable records and editor’s need for dynamically-specified objects

 

Wed 24 Dec 2003

 

-         Ported renderer to Pixomatic 2.0 API

 

Thu 18 Dec 2003

 

-         Added object.ray_collision_test()

-         Object selection works

 

Tue 16 Dec 2003

 

-         Added camera.picking_ray() and camera.world_ground_intercept()

 

Mon 15 Dec 2003

 

-         Initial implementation of object-palette display functionality

-         Cameras use clipped panes

-         Fixed mismatched user_record values in derived classes

 

Sat 13 Dec 2003

 

-         Created object_browser class

-         Eden dynamic-new feature supports constructor parameters (unsafely)

 

Wed 10 Dec 2003

 

-         Completed edits for 1.00 release of Eden Developer’s Reference manual

-         Began work on class/interface schema for physical_objects

 

Wed 3 Dec 2003

 

-         ATML_input functionality complete

 

Sat 29 Nov 2003

 

-         More work on ATML_input

 

Fri 28 Nov 2003

 

-         Initial implementation of ATML_input class and EmbeddableControl interface for text line input

-         Eden enforces optional constructor parameters on interface declarations, primarily for the benefit of C code that needs an exact specification for the constructors it’s calling

 

Fri 21 Nov 2003

 

-         Continuing work on input-control integration with ATML browser…

-         Update list of completed art assets for Rosie

 

Thu 20 Nov 2003

 

-         Started work on embedded_control functionality for command input, conversation menus, etc.

 

Wed 19 Nov 2003

 

-         Text window scrolling functionality complete

 

Thu 13 Nov 2003

 

-         Continuing work on text-window UI, including scrollback support

 

Fri 7 Nov 2003

 

-         Eden compiler’s emit_operation() method takes PVALs instead of types for better error-checking

-         Finished initial implementation of ATML API

-         Continuing work on text-window UI….

 

Thu 30 Oct 2003

 

-         Implemented and tested remaining ATML element- and paragraph-alignment features

 

Tue 28 Oct 2003

 

-         All ATML composition tags implemented

-         Image flow maps and drop-caps functional

 

Thu 23 Oct 2003

 

-         Basic ATML text and image layout complete, tested for compatibility with IE6

 

Wed 22 Oct 2003

 

-         Initial IMG tag functionality with horizontal (left, right) alignment

 

Tue 21 Oct 2003

 

-         Initial IMG tag functionality with vertical (top, bottom, middle) alignment

-         Fixed inconsistent left/right-side ordering in Eden’s vector subtraction and matrix subtraction/multiplication operators

 

Fri 17 Oct 2003

 

-         Initial implementation of ATML page-layout functionality

 

Mon 13 Oct 2003

 

-         Initial implementation of ATML parser

 

Thu 9 Oct 2003

 

-         More work on ATML_document and ATML_view classes

 

Wed 8 Oct 2003

 

-         Started work on ATML_document and ATML_view classes

 

Mon 6 Oct 2003

 

-         Initial Active Text Markup Language (ATML) tag set derived from HTML

 

<b> … </b>                                                                                                             Bold

<I>  … </I>                                                                                                               Italic

<u> … </u>                                                                                                             Underline

<h> … </h>                                                                                                             Highlight

 

<img         src                           =              ”name.tga”                                               Mandatory image source texture name

                align                         =              ”top” | “bottom” | “middle” |                       Alignment with optional horizontal centering

                                                                “center” | “absmiddle” | “baseline”  |

                                                                “absbottom”  | “left” | “right” | “hcenter”

                flow                         =              “0” | “1” | “mask.tga”                                Determines if, and how, text flows around image footprint

                border                     =              “n”                                                           Image border (drawn in current font color)

                height                      =              “n{%}”                                                     Height and width in pixels or percentage of window size

                width                       =              “n{%}”                                                     (0 to calculate either parameter based on original aspect ratio)

                hspace                    =              “n{%}”                                                     Extra transparent space in pixels or percentage of height/width

                vspace                    =              “n{%}”

                scale                       =              “tile” | “stretch” | “center”                         Determines behavior when height/width != image size

                alpha                       =              “n%”        >                                              Alpha opacity applied to entire image

 

<br           clear                        =              “left” | “right” | “all”   >                              Hard newline with optional destination

 

<p            left                           =              “n{%}”                                                     Set left margin in pixels or percentage of current

                right                         =              “n{%}”                                                     Set right margin in pixels or percentage of current

                align                         =              “center” | “left” | “right” >                         Align row contents between margins

</p>                                                                                                                         Paragraph closing tag is optional; restores default formatting

 

<font        name                       =              “name”                                                     Specify user font name

                color                        =              “colorspec” >                                          Specify non-default text foreground color (named or numeric)

</font>                                                                                                                     Font closing tag is optional, restores outer settings

 

 

Fri 2 Oct 2003

 

-         Added EVM_base_constructor_result() and EVM_fail_base_constructor()

-         Exposed singleton-creation functionality in EVMAPI.H

-         Fixed improper display of <> brackets in debugger’s source view window

-         PANE::set()’s requested_x/y parameters changed to screen_x/y and relative_x/y

 

Wed 1 Oct 2003

 

-         Initial implementation of “Return to bookmark” functionality

 

Tue 30 Sep 2003

 

-         Initial implementation of “Save bookmark” functionality

 

Mon 29 Sep 2003

 

-         Added GFX_BITMAP::save_BMP() and ::save_TGA()

-         Started work on save_game_command class

 

Fri 26 Sep 2003

 

-         Initial implementation of text_input class

-         Added utility::read_clipboard_text() and utility::write_clipboard_text()

 

Thu 25 Sep 2003

 

-         Added numerous features to text_input class (horizontal scrolling, mouse highlighting, undo….)

-         HIGHLIGHT font effect XORs pixels of specified color with 0xFFFFFF, writes specified color to all other pixels

-         Break statements in while loops clean up the scope stack properly

 

Wed 24 Sep 2003

 

-         More work on text_input class

-         Imported classes added by dynamically-compiled Eden code resolved properly

 

Tue 23 Sep 2003

 

-         Started work on text_input class

-         Added HIGHLIGHT font effect

-         Experimented with link-record caching in ERC.  Ended up backing out (most) changes until there’s time to hunt down the resulting dependency bugs

 

Mon 22 Sep 2003

 

-         Continuing work on save/load dialogs

 

Fri 19 Sep 2003

 

-         Develop bookmark- and session-file management plan for various scenarios (starting new game, resuming an existing session, exiting and entering levels, saving/restoring, editing….)

 

Thu 18 Sep 2003

 

-