mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			160 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
	
		
			5.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// DR. ROBOTNIK'S RING RACERS
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// Copyright (C) 2024 by Vivian "toastergrl" Grannell
 | 
						|
// Copyright (C) 2024 by Kart Krew
 | 
						|
//
 | 
						|
// This program is free software distributed under the
 | 
						|
// terms of the GNU General Public License, version 2.
 | 
						|
// See the 'LICENSE' file for more details.
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
/// \file  k_boss.h
 | 
						|
/// \brief Boss battle game logic
 | 
						|
 | 
						|
#ifndef __K_BOSS__
 | 
						|
#define __K_BOSS__
 | 
						|
 | 
						|
#include "doomdef.h"
 | 
						|
#include "doomstat.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
	SPOT_NONE = 0,
 | 
						|
	SPOT_WEAK,
 | 
						|
	SPOT_BUMP,
 | 
						|
} spottype_t;
 | 
						|
 | 
						|
#define NUMWEAKSPOTS 8
 | 
						|
#define WEAKSPOTANIMTIME (3*TICRATE)
 | 
						|
 | 
						|
struct weakspot_t
 | 
						|
{
 | 
						|
	mobj_t *spot;
 | 
						|
	spottype_t type;
 | 
						|
	tic_t time;
 | 
						|
	UINT16 color;
 | 
						|
	boolean minimap;
 | 
						|
};
 | 
						|
 | 
						|
#define BOSSHEALTHBARLEN 110
 | 
						|
 | 
						|
extern struct bossinfo
 | 
						|
{
 | 
						|
	boolean valid;						///< If true, then data in this struct is valid
 | 
						|
 | 
						|
	UINT8 healthbar;					///< Actual health bar fill amount
 | 
						|
	UINT8 visualbar;					///< Tracks above, but with delay
 | 
						|
	fixed_t visualdiv;					///< How far apart health bar divisions should appear
 | 
						|
	tic_t visualbarimpact;				///< Bar jitter (on damage)
 | 
						|
	UINT8 healthbarpinch;				///< If actual health is lower than this, make it orange
 | 
						|
	UINT8 barlen;						///< The length of the bar (only reduced when a boss is deceased)
 | 
						|
	char *enemyname;					///< The name next to the bar
 | 
						|
	weakspot_t weakspots[NUMWEAKSPOTS]; ///< Array of weak spots (for minimap/object tracking)
 | 
						|
	boolean coolintro;					///< Determines whether the map start(s/ed) with a boss-specific intro.
 | 
						|
	spottype_t doweakspotsound;			///< If nonzero, at least one weakspot was declared this tic
 | 
						|
	tic_t titleshow;					///< Show this many letters on the titlecard
 | 
						|
	sfxenum_t titlesound;				///< Sound to play when title typing
 | 
						|
	char *subtitle;						///< The subtitle under the titlecard
 | 
						|
} bossinfo;
 | 
						|
 | 
						|
/*--------------------------------------------------
 | 
						|
	void K_ResetBossInfo(void);
 | 
						|
 | 
						|
		Resets boss information to a clean slate.
 | 
						|
--------------------------------------------------*/
 | 
						|
 | 
						|
void K_ResetBossInfo(void);
 | 
						|
 | 
						|
/*--------------------------------------------------
 | 
						|
	void K_ResetBossInfo(void);
 | 
						|
 | 
						|
		Updates boss information and timers for this level tic.
 | 
						|
--------------------------------------------------*/
 | 
						|
 | 
						|
void K_BossInfoTicker(void);
 | 
						|
 | 
						|
/*--------------------------------------------------
 | 
						|
	void K_InitBossHealthBar(const char *enemyname, const char *subtitle, sfxenum_t titlesound, fixed_t pinchmagnitude, UINT8 divisions);
 | 
						|
 | 
						|
		Initialises boss information for opponent spawn, including filling the health bar.
 | 
						|
 | 
						|
	Input Arguments:-
 | 
						|
		enemyname - Zone memory string for HUD/titlecard name.
 | 
						|
		subtitle - Zone memory string for titlecard subtitle.
 | 
						|
		titlesound - Sound effect enum for titlecard typewriting.
 | 
						|
		pinchmagnitude - 0-FRACUNIT range for healthbar to display pinch status at.
 | 
						|
		divisions - # of segments on healthbar.
 | 
						|
--------------------------------------------------*/
 | 
						|
 | 
						|
void K_InitBossHealthBar(const char *enemyname, const char *subtitle, sfxenum_t titlesound, fixed_t pinchmagnitude, UINT8 divisions);
 | 
						|
 | 
						|
/*--------------------------------------------------
 | 
						|
	void K_UpdateBossHealthBar(fixed_t magnitude, tic_t jitterlen);
 | 
						|
 | 
						|
		Updates boss healthbar to a new magnitude.
 | 
						|
 | 
						|
	Input Arguments:-
 | 
						|
		magnitude - 0-FRACUNIT range for healthbar to update to.
 | 
						|
		jitterlen - Duration healthbar should vibrate for.
 | 
						|
--------------------------------------------------*/
 | 
						|
 | 
						|
void K_UpdateBossHealthBar(fixed_t magnitude, tic_t jitterlen);
 | 
						|
 | 
						|
/*--------------------------------------------------
 | 
						|
	void K_DeclareWeakspot(mobj_t *spot, spottype_t spottype, UINT16 color, boolean minimap);
 | 
						|
 | 
						|
		Updates the list of Weakspots for the HUD/minimap object tracking.
 | 
						|
 | 
						|
	Input Arguments:-
 | 
						|
		spot - mobj_t reference.
 | 
						|
		spottype - Type of spot.
 | 
						|
		color - Color of associated UI elements.
 | 
						|
		minimap - If true, appear on minimap.
 | 
						|
--------------------------------------------------*/
 | 
						|
 | 
						|
void K_DeclareWeakspot(mobj_t *spot, spottype_t spottype, UINT16 color, boolean minimap);
 | 
						|
 | 
						|
/*--------------------------------------------------
 | 
						|
	boolean K_CheckBossIntro(void);
 | 
						|
 | 
						|
		Checks whether the Versus-specific intro is playing for this map start.
 | 
						|
 | 
						|
	Return:-
 | 
						|
		true if cool intro in action,
 | 
						|
		otherwise false.
 | 
						|
--------------------------------------------------*/
 | 
						|
 | 
						|
boolean K_CheckBossIntro(void);
 | 
						|
 | 
						|
// Arena objects
 | 
						|
 | 
						|
boolean VS_ArenaCenterInit(mobj_t *mobj, mapthing_t *mthing);
 | 
						|
mobj_t *VS_GetArena(INT32 bossindex);
 | 
						|
fixed_t *VS_PredictAroundArena(mobj_t *arena, mobj_t *movingobject, fixed_t magnitude, angle_t mompoint, fixed_t radiussubtract, boolean forcegoaround, fixed_t radiusdeltafactor);
 | 
						|
fixed_t *VS_RandomPointOnArena(mobj_t *arena, fixed_t radiussubtract);
 | 
						|
 | 
						|
// Blend Eye
 | 
						|
 | 
						|
void VS_BlendEye_Init(mobj_t *mobj);
 | 
						|
void VS_BlendEye_Thinker(mobj_t *mobj);
 | 
						|
boolean VS_BlendEye_Touched(mobj_t *special, mobj_t *toucher);
 | 
						|
void VS_BlendEye_Damage(mobj_t *mobj, mobj_t *inflictor, mobj_t *source, INT32 damage);
 | 
						|
void VS_BlendEye_Death(mobj_t *mobj);
 | 
						|
 | 
						|
boolean VS_BlendEye_Eye_Thinker(mobj_t *mobj);
 | 
						|
void VS_BlendEye_Glass_Death(mobj_t *mobj);
 | 
						|
void VS_BlendEye_Eggbeater_Touched(mobj_t *t1, mobj_t *t2);
 | 
						|
void VS_BlendEye_Generator_DeadThinker(mobj_t *mobj);
 | 
						|
 | 
						|
boolean VS_PuyoTouched(mobj_t *special, mobj_t *toucher);
 | 
						|
void VS_PuyoThinker(mobj_t *mobj);
 | 
						|
void VS_PuyoDeath(mobj_t *mobj);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
} // extern "C"
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |