Files
CydandClaude Opus 4.8 4abbf8879f Initial import of Red Planet v4.10 Win32 source
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>
2026-06-30 07:59:51 -05:00

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);
}
}