There is no spoon
Legacy:Land Of The Dead
|Release Date||October 2005|
|Official Web Site||http://www.landofthedeadgame.com/ (Archive)|
|Latest Patch||Version 1.1 – November 2005
|Unreal Engine Version||[[Unreal Engine Versions/2||Unreal Engine 2.0]] Build 2226|
|UnrealEd Version||[[UnrealEd Versions||UnrealEd 3]]|
Land of the Dead is a first-person shooter, developed by Brainbox Games and published by Groove Games, in October 2005.
It is loosely based on a license for the Land of the Dead movie.
- Operating System
- Windows XP
- Hard Disk Space
- Audio System
- Windows® compatible sound card
- Video System
- 3-D Video, 32MB+, 64mb+ to run editor
- Internet (TCP/IP) and LAN (TCP/IP) play supported. Internet play requires a 33.6 Kbps or faster modem
LOTD:RTFG is extended by the Bink video player extensions, and also seems to support some sort of Unreal version of Java Interface classes.
New native functions:
- Actor CopyMaterialsToSkins
- Copies all default materials for a Static or Skeletal Mesh to the Skins override array of the Actor
- Actor FilterStateDirty
- PlayerController LeaveVoiceChat
- Unknown - possibly XBox voice related
- PlayerController ChanveVoiceChatter(int IPAddr, int Handle, bool Add)
- Unknown - possibly XBox voice related
- BinkVideoPlayer Bink_Play(string filename)
- Play specified video
- BinkVideoPlayer Bink_Scale(float scale)
- Scale video (1.0 = normal)
- BinkVideoPlayer Bink_Stop
- Stop all bink player instances
- BinkVideoPlayer Bink_Is_Playing
- returns true if bink is playing, false if not
- Profiler Load(int v)
- Load profile? from slot? v
- Profiler Save
- Save profile
- Profiler SetValue(string vk, string vv)
- Set key/value pair for profile
- Profiler GetValue(string v)
- Return string value given key 'v'
- Profiler NewProfile(string v)
- Create new profile with name 'v'
- Profiler DeleteProfile(int v)
- Delete profile from slot? 'v'
- Profiler GetProfileCount
- Loads all profiles, refreshes list, returns count of total profiles
- Profiler GetProfileByName(string v)
- Returns profile slot? named by 'v'
- Profiler GetProfileName(int v)
- Returns string containing profile name, given slot 'v' (note: call GetProfileCount first)
- Profiler GetCurrentProfileName
- returns currently loaded profile, or "" if not loaded
- Profiler IsValidProfile
- Not documented? Not sure if this is called in Uscript to return wether we have a valid profile, or what
- Profiler GetTotalCheckpoints
- "Returns total number of checkpoints in profile", whatever that means.
- Profiler GetChecpoint(int v)
- "Returns name of checkpoint at index v", whatever that means
Land of the Dead/Actor reference
Land of the Dead/NavigationPoint reference
- If being played on Windows Vista (or 7?), save files are not stored in the default \Land of the Dead\Saves folder. Windows Vista introduced a safety feature that disallows programs run by a standard user (rather than run as administrator) write access to the Program Files folder. That being said, any modifications or new files will be stored in a remote folder for your windows user account. Said folder can be found at C:\Users\[Username]\AppData\Local\VirtualStore\Program Files. Past that, it will mirror your Program Files folder with any directories that contain modified files. So navigating into .\Groove Games\Land Of The Dead\System, you will most likely see a few *.ini files that were created due to you changing settings. Navigating a directory up, then into the Saves folder, you will see all of your save directories, with the information stored within.
- A patch to V1.1 was released in November, 2005, and includes a fair amount of updates, as well as support for custom content, and Brain Box's version of UnrealEd. The Editor seems mostly unchanged, except it reads *.dz files for maps, instead of *.uz files.
- The IPDRV.HttpDownload module is utterly broken, on the client end. HTTPDownload is apparently not available for this game, unless someone can come up with a unique way of fixing it.
- When a player stands on a static mesh, that is higher than a few UU above the zombies, and is lower than another level of accessible geometry, the AI gets extremely confused, and causes a fair amount of lag. This is normally not an issue with developer shipped levels, which rarely have more than 4 or 5 enemies at a time, but is an issue for a lot of custom created content. Some of the modifications for the game have attempted to alleviate this by changing the AI, and some have lessened it, but none have been exceptionally successful at eliminating the lag.
- Mover classes, and all their subs, suffer from the fact that the KeyRot and KeyPos variables are not replicated, which will create all sorts of weird issues online. A few people at http://www.undeadgames.com/ have offered fixes in their forum.
- DestructableMover classes suffer from an issue where they are not removed from the world after they suffer enough damage to destruct them. This causes splash damage, such as something doing damage using the RadiusActors iterator to call TakeDamage() in all nearby actors, to cause the mover to replay it's destruction animation, even though it has already been destructed. There are two easy ways to fix this in a subclass: From TakeDamage() either call Destroy() when the mover has taken fatal damage, or have TakeDamage() not call the super if the DamageCapacity <= 0.
- Sometimes on a multiplayer game, the zombies will go to negative health, and their bodies will explode when you hit them again. This is apparently due to a rumored engine bug that causes function calls to mysteriously stop executing when they call something that inherits but doesn't define a particular function. In this case, it's "PreventDamage()" in the gametypes. So, I recommend if you do any gametyping, you add a PreventDamage() function, and just point it to the super. It may just help.
Interfaces in LotD
As mentioned above, LotD seems to have support for Interface classes. These appear to act somewhat like their similarly named Java counterparts, and are especially useful for implementing several different behaviours, such as an add-on class that is Smashable, Burnable, and Movable.
The following interfaces are defined in LotD:
- HudDrawable gives any program that implements a drawToHud(Canvas, float, float) function, the ability to register with a player's HUD (player.myHUD.register(self) according to the comments)and get called for drawing.
- SaveHandler is only in a few objects, and gives them the ability to have a PreSave() and PostSave() function for when it's time to save.
- VideoNotification is apparently used in PlayerController to handle when to pause the game when video begins and unpause when video ends
- EventDispatcher and MessageDispatcher are supposedly implemented in the ObjectiveManager code, but there don't seem to be matching interface classes
- Smashable is implemented by DOTZDestructableMesh, DOTZDoor, and all subs of WoodenDoor.