mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-15 23:21:40 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
389
Code/Combat/mendozabossgameobj.h
Normal file
389
Code/Combat/mendozabossgameobj.h
Normal file
@@ -0,0 +1,389 @@
|
||||
/*
|
||||
** Command & Conquer Renegade(tm)
|
||||
** Copyright 2025 Electronic Arts Inc.
|
||||
**
|
||||
** This program is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** This program is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/***********************************************************************************************
|
||||
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
|
||||
***********************************************************************************************
|
||||
* *
|
||||
* Project Name : combat *
|
||||
* *
|
||||
* $Archive:: /Commando/Code/Combat/mendozabossgameobj.h $*
|
||||
* *
|
||||
* Author:: Patrick Smith *
|
||||
* *
|
||||
* $Modtime:: 12/18/01 5:04p $*
|
||||
* *
|
||||
* $Revision:: 8 $*
|
||||
* *
|
||||
*---------------------------------------------------------------------------------------------*
|
||||
* Functions: *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#ifndef __MENDOZABOSSGAMEOBJ_H
|
||||
#define __MENDOZABOSSGAMEOBJ_H
|
||||
|
||||
#include "soldier.h"
|
||||
#include "statemachine.h"
|
||||
#include "cardinalspline.h"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Forward declarations
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
class PowerUpGameObj;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// MendozaBossGameObjDefClass
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
class MendozaBossGameObjDefClass : public SoldierGameObjDef
|
||||
{
|
||||
public:
|
||||
|
||||
DECLARE_EDITABLE (MendozaBossGameObjDefClass, SoldierGameObjDef);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Public constructors/destructors
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
MendozaBossGameObjDefClass (void);
|
||||
~MendozaBossGameObjDefClass (void);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Public methods
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
uint32 Get_Class_ID (void) const;
|
||||
PersistClass * Create (void) const;
|
||||
bool Save (ChunkSaveClass &csave);
|
||||
bool Load (ChunkLoadClass &cload);
|
||||
const PersistFactoryClass & Get_Factory (void) const;
|
||||
|
||||
protected:
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Protected methods
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
void Save_Variables (ChunkSaveClass &csave);
|
||||
void Load_Variables (ChunkLoadClass &cload);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Protected member data
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Friends
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
friend class MendozaBossGameObjClass;
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// MendozaBossGameObjClass
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
class MendozaBossGameObjClass : public SoldierGameObj
|
||||
{
|
||||
public:
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Public constructors/destructors
|
||||
///////////////////////////////////////////////////////////////////
|
||||
MendozaBossGameObjClass (void);
|
||||
~MendozaBossGameObjClass (void);
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Public methods
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
// Definitions
|
||||
//
|
||||
virtual void Init (void);
|
||||
void Init (const MendozaBossGameObjDefClass &definition);
|
||||
const MendozaBossGameObjDefClass & Get_Definition (void) const;
|
||||
|
||||
//
|
||||
// From save/load
|
||||
//
|
||||
bool Save (ChunkSaveClass & csave);
|
||||
bool Load (ChunkLoadClass & cload);
|
||||
void On_Post_Load (void);
|
||||
const PersistFactoryClass & Get_Factory (void) const;
|
||||
|
||||
//
|
||||
// Inherited
|
||||
//
|
||||
bool Wants_Powerups (void) { return true; }
|
||||
bool Allow_Special_Damage_State_Lock (void) { return false; }
|
||||
|
||||
//
|
||||
// Think
|
||||
//
|
||||
void Think (void);
|
||||
void Apply_Control (void);
|
||||
|
||||
//
|
||||
// Damage
|
||||
//
|
||||
virtual void Apply_Damage_Extended (const OffenseObjectClass &offense, float scale = 1.0f, const Vector3 & direction = Vector3 (0, 0, 0), const char *collision_box_name = NULL);
|
||||
|
||||
protected:
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Protected methods
|
||||
///////////////////////////////////////////////////////////////////
|
||||
void Save_Variables (ChunkSaveClass &csave);
|
||||
void Load_Variables (ChunkLoadClass &cload);
|
||||
|
||||
void Attach_Fire_Sound (void);
|
||||
void Attach_Sound (const char *sound_name, const char *bone_name);
|
||||
bool Apply_Bone_Collision_Damage (const char *bone_name);
|
||||
bool Fly_Move (const Vector3 &vector);
|
||||
void Initialize_Boss (void);
|
||||
|
||||
PowerUpGameObj * Find_Best_Powerup (void);
|
||||
void Spawn_Health_Powerups (void);
|
||||
|
||||
//
|
||||
// Taunt control
|
||||
//
|
||||
void Shuffle_Taunt_List (void);
|
||||
|
||||
//
|
||||
// State support
|
||||
//
|
||||
enum
|
||||
{
|
||||
OVERALL_STATE_FLYING_SIDEKICK = 0,
|
||||
OVERALL_STATE_MELEE_ATTACK,
|
||||
OVERALL_STATE_RANGED_ATTACK,
|
||||
OVERALL_STATE_FIREBALL_ATTACK,
|
||||
OVERALL_STATE_FIND_HEALTH,
|
||||
OVERALL_STATE_SYDNEY_BOLTS,
|
||||
OVERALL_STATE_RUN_AFTER_SYDNEY,
|
||||
OVERALL_STATE_TOY_WITH_SYDNEY,
|
||||
OVERALL_STATE_DEATH_SEQUENCE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
MOVE_STATE_STOP = 0,
|
||||
MOVE_STATE_GET_CLOSE_TO_PLAYER,
|
||||
MOVE_STATE_ATTACK_PATTERN1,
|
||||
MOVE_STATE_ATTACK_PATTERN2,
|
||||
MOVE_STATE_GOTO_HELIPAD,
|
||||
MOVE_STATE_RUN_TO_HEALTH,
|
||||
MOVE_STATE_CHASE_SYDNEY,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
MENDOZA_STATE_STANDING = 0,
|
||||
MENDOZA_STATE_FALLING,
|
||||
MENDOZA_STATE_KIPPING,
|
||||
MENDOZA_STATE_PACK_EXPLODING,
|
||||
MENDOZA_STATE_DYING,
|
||||
MENDOZA_STATE_DEAD
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
SYDNEY_STATE_WAITING = 0,
|
||||
SYDNEY_STATE_BOLTING,
|
||||
SYDNEY_STATE_TRIPPING,
|
||||
SYDNEY_STATE_GETTING_UP,
|
||||
SYDNEY_STATE_COWERING,
|
||||
SYDNEY_STATE_STRIKE_A_POSE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
HEAD_STATE_NONE = 0,
|
||||
HEAD_STATE_LOOKING_AT_STAR,
|
||||
HEAD_STATE_LOOKING_AT_SYDNEY,
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ATTACK_STATE_NONE = 0,
|
||||
ATTACK_STATE_MELEE,
|
||||
ATTACK_STATE_MELEE_FLYING_SIDEKICK_RUN,
|
||||
ATTACK_STATE_MELEE_FLYING_SIDEKICK,
|
||||
ATTACK_STATE_MELEE_CRESENT_KICK,
|
||||
ATTACK_STATE_MELEE_SIDE_KICK,
|
||||
ATTACK_STATE_MELEE_SIDE_KICK_RETRACT,
|
||||
ATTACK_STATE_MELEE_PUNCH,
|
||||
ATTACK_STATE_FLAMETHROWER,
|
||||
ATTACK_STATE_FIREBALL,
|
||||
ATTACK_STATE_HANDGUN,
|
||||
ATTACK_STATE_SYDNEY
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CAMERA_STATE_NORMAL = 0,
|
||||
CAMERA_STATE_FACE_ZOOM,
|
||||
CAMERA_STATE_WAYPATH_FOLLOW,
|
||||
CAMERA_STATE_LOOK_AT_DEAD_BOSS
|
||||
};
|
||||
|
||||
//
|
||||
// Overall state handlers
|
||||
//
|
||||
DECLARE_STATE (OVERALL_STATE_FLYING_SIDEKICK, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_MELEE_ATTACK, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_RANGED_ATTACK, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_FIREBALL_ATTACK, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_FIND_HEALTH, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_SYDNEY_BOLTS, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_RUN_AFTER_SYDNEY, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_TOY_WITH_SYDNEY, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (OVERALL_STATE_DEATH_SEQUENCE, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
|
||||
//
|
||||
// Move state handlers
|
||||
//
|
||||
DECLARE_STATE (MOVE_STATE_STOP, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MOVE_STATE_GET_CLOSE_TO_PLAYER, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MOVE_STATE_ATTACK_PATTERN1, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MOVE_STATE_ATTACK_PATTERN2, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MOVE_STATE_GOTO_HELIPAD, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MOVE_STATE_RUN_TO_HEALTH, SM_BEGIN, SM_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MOVE_STATE_CHASE_SYDNEY, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
|
||||
//
|
||||
// Mendoza state handlers
|
||||
//
|
||||
DECLARE_STATE (MENDOZA_STATE_STANDING, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MENDOZA_STATE_FALLING, SM_BEGIN, SM_NO_END, SM_THINK, SM_REQ_END);
|
||||
DECLARE_STATE (MENDOZA_STATE_KIPPING, SM_BEGIN, SM_END, SM_THINK, SM_REQ_END);
|
||||
DECLARE_STATE (MENDOZA_STATE_PACK_EXPLODING, SM_BEGIN, SM_NO_END, SM_THINK, SM_REQ_END);
|
||||
DECLARE_STATE (MENDOZA_STATE_DYING, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (MENDOZA_STATE_DEAD, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
|
||||
//
|
||||
// Sydney state handlers
|
||||
//
|
||||
DECLARE_STATE (SYDNEY_STATE_WAITING, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (SYDNEY_STATE_BOLTING, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (SYDNEY_STATE_TRIPPING, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (SYDNEY_STATE_GETTING_UP, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (SYDNEY_STATE_COWERING, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (SYDNEY_STATE_STRIKE_A_POSE, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
|
||||
//
|
||||
// Head state handlers
|
||||
//
|
||||
DECLARE_STATE (HEAD_STATE_NONE, SM_BEGIN, SM_NO_END, SM_NO_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (HEAD_STATE_LOOKING_AT_STAR, SM_NO_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (HEAD_STATE_LOOKING_AT_SYDNEY, SM_NO_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
|
||||
//
|
||||
// Attack state handlers
|
||||
//
|
||||
DECLARE_STATE (ATTACK_STATE_NONE, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_MELEE, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_MELEE_FLYING_SIDEKICK_RUN, SM_BEGIN, SM_NO_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_MELEE_FLYING_SIDEKICK, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_MELEE_CRESENT_KICK, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_MELEE_SIDE_KICK, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_MELEE_SIDE_KICK_RETRACT, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_MELEE_PUNCH, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_FLAMETHROWER, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_FIREBALL, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_HANDGUN, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
DECLARE_STATE (ATTACK_STATE_SYDNEY, SM_BEGIN, SM_END, SM_THINK, SM_NO_REQ_END);
|
||||
|
||||
//
|
||||
// Camera state handlers
|
||||
//
|
||||
void On_CAMERA_STATE_NORMAL_Begin (void);
|
||||
|
||||
void On_CAMERA_STATE_FACE_ZOOM_Begin (void);
|
||||
void On_CAMERA_STATE_FACE_ZOOM_Think (void);
|
||||
|
||||
void On_CAMERA_STATE_WAYPATH_FOLLOW_Begin (void);
|
||||
void On_CAMERA_STATE_WAYPATH_FOLLOW_Think (void);
|
||||
|
||||
void On_CAMERA_STATE_LOOK_AT_DEAD_BOSS_Begin (void);
|
||||
void On_CAMERA_STATE_LOOK_AT_DEAD_BOSS_Think (void);
|
||||
|
||||
private:
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Private constants
|
||||
///////////////////////////////////////////////////////////////////
|
||||
enum
|
||||
{
|
||||
MAX_TAUNTS = 6
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Private methods
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// Private member data
|
||||
///////////////////////////////////////////////////////////////////
|
||||
float MendozaTauntTimeLeft;
|
||||
int TauntList[MAX_TAUNTS];
|
||||
int AvailableTaunts;
|
||||
|
||||
float OverallStateTimer;
|
||||
float MendozaStateTimer;
|
||||
float CameraStateTimer;
|
||||
float CameraShakeTimer;
|
||||
float AttackStateTimer;
|
||||
float RandomTargetTimer;
|
||||
float SydneyStateTimer;
|
||||
float MoveStateTimer;
|
||||
float NextMeleeAttackTime;
|
||||
float FireballStartTimer;
|
||||
float NextKnockdownAvailableTime;
|
||||
bool HasMeleeAttackHit;
|
||||
float LastMeleeAnimFrame;
|
||||
float StartTimer;
|
||||
|
||||
RenderObjClass * CameraBoneModel;
|
||||
GameObjReference Sydney;
|
||||
StringClass AttackingBoneName;
|
||||
|
||||
Vector3 SideKickPos;
|
||||
Vector3 ShootGroundPos;
|
||||
CardinalSpline3DClass CameraSpline;
|
||||
|
||||
Vector3 MendozaPos;
|
||||
Vector3 StarPos;
|
||||
|
||||
StateMachineClass<MendozaBossGameObjClass> OverallState;
|
||||
StateMachineClass<MendozaBossGameObjClass> MendozaState;
|
||||
StateMachineClass<MendozaBossGameObjClass> SydneyState;
|
||||
StateMachineClass<MendozaBossGameObjClass> MoveState;
|
||||
StateMachineClass<MendozaBossGameObjClass> HeadState;
|
||||
StateMachineClass<MendozaBossGameObjClass> CameraState;
|
||||
StateMachineClass<MendozaBossGameObjClass> AttackState;
|
||||
};
|
||||
|
||||
|
||||
#endif //__MENDOZABOSSGAMEOBJ_H
|
||||
Reference in New Issue
Block a user