RIP AND TEAR

Doomenstein is a remake of the Doom mod of Wolfenstein created in my personal engine that includes 3D tile-based maps, an editor mode, and split-screen multiplayer.

<Definitions>
    <ActorDefinition name="SpawnPoint" />
	
    <ActorDefinition name="Marine" 
		     possessable="true" 
		     health="100">
		
	<Audio sfxPain="Data/Audio/PlayerHurt.wav" 
	       sfxDeath="Data/Audio/PlayerDeath1.wav"/>
        
	<Collision radius="0.45" 
	           height="2.2" 
	           pushOffWorld="true" 
	           pushOffActors="true" 
	           immovable="false"/>
		
        <Physics enabled="true" 
		 walkSpeed="4.0f" 
		 runSpeed="8.0f" 
		 turnSpeed="180.0f" 
		 drag="8.0f"/>
		
        <!--...-->
		
	<Inventory>
	    <Weapon name="Pistol"/>
	    <Weapon name="PlasmaRifle"/>
	</Inventory>
		
    </ActorDefinition>
    <!--...-->
</Definitions>
void Controller::PossessActor( Actor* actor )
{
    Actor* currentlyPossessedActor = GetPossessedActor();
    if( currentlyPossessedActor != nullptr )
    {
 	OnActorUnpossessed( currentlyPossessedActor );
	currentlyPossessedActor->OnUnpossessed( this );
	m_possessedActorUID.Invalidate();
    }

    if( actor )
    {
	actor->OnPossessed( this );
	OnActorPossessed( actor );
	m_possessedActorUID = actor->GetUID();
    }
}

Post-Mortem

Doomenstein was my first foray into developing with DirectX 3D, so part of the difficulty with developing the game was getting used to the new rendering framework. I also learned about the pros and cons of having a monolithic data-driven Actor class. While this allowed me to contain all the actor-related data in one XML document, it became more unwieldy to add new fields that were only required by one or two actor types. These data requirements also ended up dictating what functions I implemented in the Actor and World code.

Previous
Previous

Sidewalk Showdown

Next
Next

SimpleMiner