#pragma once #include "setup.h" #include "..\Game\draw.h" #include "..\Game\collide.h" #include "..\Game\Box.h" #include "..\Game\missile.h" #include "..\Game\control.h" #include "..\Objects\objects.h" #include #include void __cdecl NewObjects() { OBJECT_INFO* obj; obj = &Objects[ID_SMALL_SCORPION]; if (obj->loaded) { obj->initialise = InitialiseSmallScorpion; obj->control = SmallScorpionControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 8; obj->pivotLength = 20; obj->radius = 128; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; obj->hitEffect = true; } obj = &Objects[ID_WILD_BOAR]; if (obj->loaded) { obj->initialise = InitialiseWildBoar; obj->control = WildBoarControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 40; obj->pivotLength = 50; obj->radius = 102; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 192] |= ROT_Z; Bones[obj->boneIndex + 192] |= ROT_Y; Bones[obj->boneIndex + 208] |= ROT_Z; Bones[obj->boneIndex + 208] |= ROT_Y; } obj = &Objects[ID_BAT]; if (obj->loaded) { obj->initialise = InitialiseBat; obj->control = BatControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 5; obj->pivotLength = 10; obj->radius = 102; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_CHAIN]; if (obj->loaded) { obj->control = ChainControl; obj->collision = GenericSphereBoxCollision; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_PLOUGH]; if (obj->loaded) { obj->control = PloughControl; obj->collision = GenericSphereBoxCollision; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_FLOOR_4BLADES]; if (obj->loaded) { obj->control = FourBladesControl; obj->collision = GenericSphereBoxCollision; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_CEILING_4BLADES]; if (obj->loaded) { obj->control = FourBladesControl; obj->collision = GenericSphereBoxCollision; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_SPIKEBALL]; if (obj->loaded) { obj->control = SpikeballControl; obj->collision = GenericSphereBoxCollision; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_COG]; if (obj->loaded) { obj->control = CogControl; obj->collision = GenericSphereBoxCollision; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_BADDY1]; if (obj->loaded) { obj->initialise = InitialiseBaddy; obj->control = BaddyControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 25; obj->pivotLength = 50; obj->radius = 102; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 112] |= ROT_Y; Bones[obj->boneIndex + 112] |= ROT_X; Bones[obj->boneIndex + 352] |= ROT_Y; Bones[obj->boneIndex + 352] |= ROT_X; Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 32]; Meshes[obj->meshIndex + 60] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 56]; Meshes[obj->meshIndex + 36] = Meshes[Objects[ID_MESHSWAP1].meshIndex + 22]; } obj = &Objects[ID_BADDY2]; if (obj->loaded) { obj->initialise = InitialiseBaddy; obj->control = BaddyControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 25; obj->pivotLength = 50; obj->radius = 102; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 112] |= ROT_Y; Bones[obj->boneIndex + 112] |= ROT_X; Bones[obj->boneIndex + 352] |= ROT_Y; Bones[obj->boneIndex + 352] |= ROT_X; } obj = &Objects[ID_SAS_CAIRO]; if (obj->loaded) { obj->initialise = InitialiseSas; obj->control = SasControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 40; obj->pivotLength = 50; obj->radius = 102; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex] |= ROT_Y; Bones[obj->boneIndex] |= ROT_X; Bones[obj->boneIndex + 112] |= ROT_Y; Bones[obj->boneIndex + 112] |= ROT_X; } obj = &Objects[ID_MUMMY]; if (obj->loaded) { obj->initialise = InitialiseMummy; obj->control = MummyControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 15; obj->radius = 170; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 112] |= ROT_Y; Bones[obj->boneIndex + 112] |= ROT_X; Bones[obj->boneIndex + 288] |= ROT_Y; } obj = &Objects[ID_QUAD]; if (obj->loaded) { obj->initialise = InitialiseQuadBike; obj->collision = QuadBikeCollision; obj->savePosition = true; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_SHARK]; if (obj->loaded) { obj->control = SharkControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 30; obj->pivotLength = 200; obj->radius = 340; obj->intelligent = true; obj->waterCreature = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 9 * 4] |= ROT_Y; } obj = &Objects[ID_BARRACUDA]; if (obj->loaded) { obj->control = BarracudaControl; obj->collision = CreatureCollision; obj->shadowSize = UNIT_SHADOW / 2; obj->hitPoints = 12; obj->pivotLength = 200; obj->radius = 204; obj->intelligent = true; obj->waterCreature = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 6 * 4] |= ROT_Y; } obj = &Objects[ID_ROLLING_SPINDLE]; if (obj->loaded) { obj->initialise = InitialiseSpinningBlade; obj->control = SpinningBlade; obj->collision = ObjectCollision; obj->savePosition = true; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_SPRINGBOARD]; if (obj->loaded) { obj->control = SpringBoardControl; obj->saveAnim = true; obj->saveFlags = true; } obj = &Objects[ID_TIGER]; if (obj->loaded) { obj->control = TigerControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 24; obj->pivotLength = 200; obj->radius = 340; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 21 * 4] |= ROT_Y; } obj = &Objects[ID_COBRA]; if (obj->loaded) { obj->initialise = InitialiseCobra; obj->control = CobraControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 8; obj->radius = 102; obj->intelligent = true; obj->nonLot = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 0 * 4] |= ROT_Y; Bones[obj->boneIndex + 6 * 4] |= ROT_Y; } obj = &Objects[ID_RAPTOR]; if (obj->loaded) { obj->control = RaptorControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 100; obj->radius = 341; obj->pivotLength = 600; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 20 * 4] |= ROT_Y; Bones[obj->boneIndex + 21 * 4] |= ROT_Y; Bones[obj->boneIndex + 23 * 4] |= ROT_Y; Bones[obj->boneIndex + 25 * 4] |= ROT_Y; } obj = &Objects[ID_SCUBA_DIVER]; if (obj->loaded) { obj->control = ScubaControl; obj->collision = CreatureCollision; obj->shadowSize = UNIT_SHADOW / 2; obj->hitPoints = 20; obj->radius = 340; obj->intelligent = true; obj->waterCreature = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; obj->pivotLength = 50; Bones[obj->boneIndex + 10 * 4] |= ROT_Y; Bones[obj->boneIndex + 14 * 4] |= ROT_Z; } obj = &Objects[ID_SCUBA_HARPOON]; if (obj->loaded) { obj->control = HarpoonControl; obj->collision = ObjectCollision; obj->savePosition = true; } obj = &Objects[ID_EAGLE]; if (obj->loaded) { obj->initialise = InitialiseEagle; obj->control = EagleControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 20; obj->radius = 204; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; obj->pivotLength = 0; } obj = &Objects[ID_CROW]; if (obj->loaded) { obj->initialise = InitialiseEagle; obj->control = EagleControl; obj->collision = CreatureCollision; obj->shadowSize = 128; obj->hitPoints = 15; obj->radius = 204; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; obj->pivotLength = 0; } /* obj = &Objects[ID_SPIKEY_WALL]; if (obj->loaded) { obj->control = ControlSpikeWall; obj->collision = ObjectCollision; obj->savePosition = true; obj->saveFlags = true; } obj = &Objects[ID_TREX]; if (obj->loaded) { OBJECT_INFO* obj = &Objects[ID_TREX]; obj->control = DinoControl; obj->collision = CreatureCollision; obj->hitPoints = DINO_hitPoints; obj->shadowSize = UNIT_SHADOW / 4; obj->pivotLength = 1800; obj->radius = DINO_RADIUS; obj->intelligent = true; obj->savePosition = true; obj->saveHitpoints = true; obj->saveAnim = true; obj->saveFlags = true; Bones[obj->boneIndex + 10 * 4] |= ROT_Y; Bones[obj->boneIndex + 11 * 4] |= ROT_Y; } obj = &Objects[ID_TRIBESMAN_AX]; if (obj->loaded) { obj->control = TribeAxeControl; obj->collision = CreatureCollision; obj->shadowSize = UNIT_SHADOW / 2; obj->hitPoints = TRIBEAXE_hitPoints; obj->radius = TRIBEAXE_RADIUS; obj->intelligent = 1; obj->savePosition = obj->saveHitpoints = obj->saveAnim = obj->saveFlags = 1; obj->pivotLength = 0; Bones[obj->boneIndex + 13 * 4] |= ROT_Y; Bones[obj->boneIndex + 6 * 4] |= ROT_Y; } */ } void __cdecl CustomObjects() { } void __cdecl InitialiseObjects() { for (__int32 i = 0; i < NUM_OBJECTS; i++) { Objects[i].drawRoutine = DrawAnimatingItem; Objects[i].floor = NULL; Objects[i].ceiling = NULL; Objects[i].pivotLength = 0; Objects[i].radius = 10; Objects[i].shadowSize = 0; Objects[i].hitPoints = -16384; Objects[i].explodableMeshbits = 0; Objects[i].intelligent = 0; Objects[i].waterCreature = 0; Objects[i].saveMesh = 0; Objects[i].saveAnim = 0; Objects[i].saveFlags = 0; Objects[i].saveHitpoints = 0; Objects[i].savePosition = 0; Objects[i].frameBase += (ptrdiff_t)Frames; } // Standard TR5 objects BaddyObjects(); ObjectObjects(); TrapObjects(); // Reset MIP flag so we can reuse slots for (__int16 i = 0; i < NUM_OBJECTS; i++) Objects[i].objectMip = 0; // New objects imported from old TRs NewObjects(); // User defined objects CustomObjects(); InitialiseHairs(); InitialiseSpecialEffects(); CurrentSequence = 0; OldPickupPos.roomNumber = 0; // TODO: with the new renderer this can be safely deleted for (__int32 i = 0; i < 6; i++) { SequenceUsed[i] = 0; } for (__int32 i = 0; i < gfNumMips; i++) { } if (Objects[ID_BATS].loaded) Bats = GameMalloc(1920); if (Objects[ID_SPIDER].loaded) Spiders = GameMalloc(1664); if (Objects[ID_RATS].loaded) Rats = GameMalloc(832); } void Inject_Setup() { INJECT(0x00473600, InitialiseObjects); }