Imports the current Win32 source for the pod-racing game 'Red Planet', built on the MUNGA engine and its L4 (Win32/DirectX) platform layer: - MUNGA / MUNGA_L4: cross-platform engine core and Win32 backend - RP / RP_L4: Red Planet game logic and Win32 application - DivLoader, Setup1: asset loader and installer project - lib, MUNGA_L4/openal, MUNGA_L4/sos: third-party audio dependencies Removed stale Subversion metadata and added .gitignore/.gitattributes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
187 lines
4.2 KiB
C++
187 lines
4.2 KiB
C++
#include "rp.h"
|
|
#pragma hdrstop
|
|
|
|
#include "rpreg.h"
|
|
#include "rpmssn.h"
|
|
#include "rpplayer.h"
|
|
#include "rpdirect.h"
|
|
#include "crusher.h"
|
|
#include "runner.h"
|
|
#include "blocker.h"
|
|
#include "vtv.h"
|
|
#include "vtvpwr.h"
|
|
#include "booster.h"
|
|
#include "chute.h"
|
|
#include "scorzone.h"
|
|
#include "demopack.h"
|
|
#include "rivet.h"
|
|
#include "weapsys.h"
|
|
#include "..\munga\mission.h"
|
|
#include "..\munga\hostmgr.h"
|
|
#include "..\munga\app.h"
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Registry ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
//
|
|
//#############################################################################
|
|
// Registry
|
|
//#############################################################################
|
|
//
|
|
RPRegistry::RPRegistry(ResourceFile *)
|
|
{
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// ~Registry
|
|
//#############################################################################
|
|
//
|
|
RPRegistry::~RPRegistry()
|
|
{
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// GetStaticData
|
|
//#############################################################################
|
|
//
|
|
Entity::SharedData*
|
|
RPRegistry::GetStaticData(ClassID class_ID)
|
|
{
|
|
switch (class_ID)
|
|
{
|
|
case VTVClassID:
|
|
return &VTV::DefaultData;
|
|
case ScoreZoneClassID:
|
|
return &ScoreZone::DefaultData;
|
|
case RivetClassID:
|
|
return &Rivet::DefaultData;
|
|
case DemolitionPackClassID:
|
|
return &DemolitionPack::DefaultData;
|
|
case RPPlayerClassID:
|
|
return &RPPlayer::DefaultData;
|
|
case CrusherClassID:
|
|
return &Crusher::DefaultData;
|
|
case BlockerClassID:
|
|
return &Blocker::DefaultData;
|
|
case RunnerClassID:
|
|
return &Runner::DefaultData;
|
|
default:
|
|
return Registry::GetStaticData(class_ID);
|
|
}
|
|
}
|
|
|
|
//
|
|
//#############################################################################
|
|
// GetStaticData
|
|
//#############################################################################
|
|
//
|
|
Player*
|
|
RPRegistry::MakePlayer(Mission *mission)
|
|
{
|
|
Check_Pointer(mission);
|
|
|
|
RPMission *rp_mission = Cast_Object(RPMission*, mission);
|
|
|
|
const char* player_name = rp_mission->GetPositionName();
|
|
|
|
int team_id = rp_mission->GetTeamID();
|
|
|
|
Logical score_compression;
|
|
score_compression = rp_mission->ScoreCompressionOn();
|
|
|
|
int player_bitmap_index = rp_mission->GetPlayerBitmapIndex();
|
|
|
|
if (strcmp(player_name, "runner") == 0)
|
|
{
|
|
Runner::MakeMessage
|
|
make_player(
|
|
Runner::MakeMessageID,
|
|
sizeof(Runner::MakeMessage),
|
|
RunnerClassID,
|
|
EntityID::Null,
|
|
ResourceDescription::NullResourceID,
|
|
Runner::DefaultFlags,
|
|
Origin::Identity,
|
|
player_bitmap_index,
|
|
RPPlayer::RunnerPlayerType,
|
|
team_id,
|
|
score_compression
|
|
);
|
|
return new Runner(&make_player);
|
|
}
|
|
|
|
else if (strcmp(player_name, "crusher") == 0)
|
|
{
|
|
Crusher::MakeMessage
|
|
make_player(
|
|
Crusher::MakeMessageID,
|
|
sizeof(Crusher::MakeMessage),
|
|
CrusherClassID,
|
|
EntityID::Null,
|
|
ResourceDescription::NullResourceID,
|
|
Crusher::DefaultFlags,
|
|
Origin::Identity,
|
|
player_bitmap_index,
|
|
RPPlayer::CrusherPlayerType,
|
|
team_id,
|
|
score_compression
|
|
);
|
|
return new Crusher(&make_player);
|
|
}
|
|
|
|
else if (strcmp(player_name, "blocker") == 0)
|
|
{
|
|
Blocker::MakeMessage
|
|
make_player(
|
|
Blocker::MakeMessageID,
|
|
sizeof(Blocker::MakeMessage),
|
|
BlockerClassID,
|
|
EntityID::Null,
|
|
ResourceDescription::NullResourceID,
|
|
Blocker::DefaultFlags,
|
|
Origin::Identity,
|
|
player_bitmap_index,
|
|
RPPlayer::BlockerPlayerType,
|
|
team_id,
|
|
score_compression
|
|
);
|
|
return new Blocker(&make_player);
|
|
}
|
|
|
|
else if (strcmp(mission->GetGameModel(), "camera"))
|
|
{
|
|
RPPlayer::MakeMessage
|
|
make_player(
|
|
RPPlayer::MakeMessageID,
|
|
sizeof(RPPlayer::MakeMessage),
|
|
RPPlayerClassID,
|
|
EntityID::Null,
|
|
ResourceDescription::NullResourceID,
|
|
RPPlayer::DefaultFlags,
|
|
Origin::Identity,
|
|
player_bitmap_index,
|
|
RPPlayer::GeneralPlayerType,
|
|
team_id,
|
|
score_compression
|
|
);
|
|
return new RPPlayer(&make_player);
|
|
}
|
|
|
|
else
|
|
{
|
|
RPCameraDirector::MakeMessage create_director(
|
|
RPCameraDirector::MakeMessageID,
|
|
sizeof(RPCameraDirector::MakeMessage),
|
|
CameraDirectorClassID,
|
|
EntityID::Null,
|
|
ResourceDescription::NullResourceID,
|
|
RPCameraDirector::DefaultFlags,
|
|
Origin::Identity,
|
|
player_bitmap_index
|
|
);
|
|
return new RPCameraDirector(&create_director);
|
|
}
|
|
}
|
|
|