Oddworld : Stranger’s Wrath
-
Upload
prunella-ronny -
Category
Documents
-
view
31 -
download
0
description
Transcript of Oddworld : Stranger’s Wrath
The bad news - you’re not Valve or Bungie
• Most of your team are weak links
• Design is unclear and changes often
• Have to make demos with little notice
• Features get cut and added at all times
• Content team and other coders don’t follow the rules
The Oddworld Method
• Lead Programmers – make the whole company more productive
• Use the code and engine to help other coders, content developers
• Improve your weak points, don’t perfect your strong points – each company is unique
• Rapid development and messy design – iteration, ease of changes, forgiving design tools
• …
The Oddworld Method, cont.
• robustness, flexibility, and rapid-response• the engine is at all times crash-free and can be
turned into a shippable demo on short notice• little tips to improve productivity are worth
millions• many of your coders are junior – make it hard for
juniors to write broken code; eg. Code that seniors write should be self-correcting & self-enforcing
Never bring down other people
• People make mistakes, you can’t stop that
• Make mistakes only affect that one system
• Everything is in perforce; roll back bad content, bad builds
• All code is reviewed
• Compiler asserts; table size checks
• Exceptions…
Background : engine summary
• All tools in Maya, all geometry triangle soup• Visibility through portals, clip frustum, scissor• Zones also define paging units and ticking objects; only
current & adjacent zones tick• Collision on triangle soup w/ KDtree and spatial index• Lightmapper for static lighting; cube maps for characters;
material-based renderer with high triangle throughput• Objects tick one by one and move themselves; simple
zone-based manager• Paging in big blocks; huge continuous levels with
persistent state
Exceptions
• Not in final game• Not for normal errors, only for fatal errors• Default action is to propagate error; better than
return values (malloc example)• Catch in individual object creation, tick & render• SEH is better than C++ EH, lets you write code
in the catch and provides call stack• Handler can detect attached debugger and int 3• Bad for cross-platform
Stack traces and error logs
• Small binary stack traces on Xbox (64 bytes)
• Parser on PC• Mailer to coders• VC double-click• Used for many things• Error messages – for anything the artists
can get wrong. Log stack traces with every error.
Builder
• Use free POP3 client; just check mail to build account
• Run the subject line as a command
• Batch file does sync+incredibuild+submit
• Can easily do any task – so also process lipsync, make DVD, just use windows task scheduler
NetSlave
• Simple distributed farm; master machine controls a set of slaves
• Just a queue of commands, farmed out FIFO with dependency analysis
• Lets you use simple single-proc tools; no need for multi-proc bugs!
• Slaves use p4 for data transfer
Memory Management
• Systems use more or less memory at different times.
• Stack traced alloc tracker, parser for hierarchies in tabview.
• 3 heaps – contiguous (20 M, relocatable), small block (5 M, fast), heap (used rarely at runtime).
• STL and XMemAlloc directed into our allocators• Future – separate heap for 64 meg debug data
STL
• Saves dev time; dev time is not just writing code
• STL-port; configurable
• Vector is used heavily; all other containers very rarely used
• Array<>; few C-style arrays, lots of vectors!
• …
STL - vector
• Release(), tighten(), tighten if excessive
• Modified vector growth scheme; doubles on PC, limit at 4k on Xbox
• Vecsorted – like a map, but tight in memory; sometimes faster
• Vector_s, vector_t, vector_a ; note that the base vector class itself is 12 bytes
Inst/Def paradigm
• Many insts created from one shared def
• CoreObject = instance, made from tag, class factory, needs to be IO’d in save games.
• Resource = def, const, made from binary data blocks, const, shared, kept in memory across level loads, etc.
• Many other things use inst/def
IOZ (the Z is for cool)
• Templated type-traits based IO system.• Client code is very easy – just call IOZ on all
members; all logic is compile-time• Type traits and template specialization know if a
type is binary or not, also if vectors are vectors of binary, etc.
• Pointer IO – CoreObject or Resource?• Resources written as Token references • CoreObject data must be written once, but other
pointers just write references (use the RefCounted table index)
Smart Pointers
• Every type should clean itself up on destruction, so pointers should too.
• Other types of GC would be okay; GC reduces errors, GC is required for exceptions. SP is the simplest form of GC.
• Weak Pointers – a reference, not a hack; 4 bytes + 4 for table entry. Table also provides index for IO. (2 byte table index, 2 byte UID)
• …
Smart Pointers, cont.
• Can’t have loops; use Weak or Naked for back pointers; must have a tree-structure of ownership.
• Pass naked pointers; avoids exposing interface and avoids temporaries; can’t do with boost style SP, need base class RefCounted; need to be a little careful with this.
• Stack-trace ref tracking for ref leaks; catches loops and other bugs.
Tweaker and Prefs
• Text is nice for p4 diffs and searches with simple perl tools – making spreadsheets of all healths, dependency finding, etc.
• Cvar – no per instance overhead, handles MI. In the future, generic template Reflection visitor.
• GameControl system for spatial overrides and inheritance
• In the future – more pref inheritance with rule-based inheritance, eg. Super Wolvark = Wolvark w/ health*2
Resource Bundler
• Just load the level and track resource queries.
• Bundle resources for NPC’s, Zones, cines, etc.
• Bundle optimization – minimize bundle count, constrain to 64 meg limit, minimize total bundle size
ArtWatcher
• Watch dirs with ReadDirectoryChangesW, copies content to Xbox and notifies game; ArtWatched resources override bundled content
• Does p4 adds (we add .cpp and .h files too), helps artists a lot
• Right click menu for common tools• One error – on restart, ArtWatched info is
lost
Other stuff
• Skeleton LOD
• Cube Map Lighting
• Practical PSM
• Decorator Renderer
• AI System
• Animation control
• … but technology is easy!