
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 -
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 - -
Wield/wear exchanges -
Highlight object on first click (or hover?) for feedback -
Undo mechanism -
Think functions -
Open issues -
-
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
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 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 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: 2.
Directional
light regions Wed 11 Aug 2004 -
Import/export
height-map .TGAs 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
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 -
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 -
-
Fix behavior of physical_object::highlight_selected() in clipped panesFix placement/deletion problems with user objects in asset browserSpace
insertion check Editor highlight boxes misaligned?Suspended objects in mid-airo
Function to wake up island containing object about to be removed from a
spaceo
Editor support for wield transformso
Instance flag for wearables-
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 
1.
render_post_effects() for polygons requiring alpha blending-
Eden issue: foreach sometimes releases an invalid temporaryo
16-bit Z-buffer crasho
Get rid of ground-intercept hacksOBB-,
sphere-, trimesh, and LSS frustum cullingo
Path block-frustum cullingo
Terrain-frustum cullingo
Planar terrain optimization for shadowso
TCACHE debugging and performance tuningo
Palette object layout bugo
MM drag in normal gameplay
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. 

