Initial Source Code commit
Initial commit of original Tiberian Dawn and Red Alert source code converted to build as DLLs, and compatible with the release version of Command & Conquer Remastered.
This commit is contained in:
parent
ea8ecc76fa
commit
03416d24e1
1038 changed files with 629779 additions and 0 deletions
270
REDALERT/VORTEX.H
Normal file
270
REDALERT/VORTEX.H
Normal file
|
@ -0,0 +1,270 @@
|
|||
//
|
||||
// Copyright 2020 Electronic Arts Inc.
|
||||
//
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code 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.
|
||||
|
||||
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
||||
// in the hope that it will be useful, but with permitted additional restrictions
|
||||
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
||||
// distributed with this program. You should have received a copy of the
|
||||
// GNU General Public License along with permitted additional restrictions
|
||||
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
|
||||
|
||||
/***********************************************************************************************
|
||||
*** 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 : Command & Conquer - Red Alert *
|
||||
* *
|
||||
* File Name : VORTEX.H *
|
||||
* *
|
||||
* Programmer : Steve Tall *
|
||||
* *
|
||||
* Start Date : 8/12/96 *
|
||||
* *
|
||||
* Last Update : August 29th, 1996 [ST] *
|
||||
* *
|
||||
*---------------------------------------------------------------------------------------------*
|
||||
* Overview: *
|
||||
* Definition of ChronalVortexClass. The Chronal vortex sometimes appears when the *
|
||||
* chronosphere is used. *
|
||||
* *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
|
||||
#ifndef VORTEX_H
|
||||
#define VORTEX_H
|
||||
|
||||
|
||||
#define MAX_REMAP_SHADES 16 //Number of lookup tables required for vortex shading.
|
||||
#define VORTEX_FRAMES 16 //Number of frames in one complete rotation of the vortex.
|
||||
|
||||
|
||||
|
||||
class ChronalVortexClass {
|
||||
|
||||
public:
|
||||
|
||||
/*
|
||||
** Constructor and destructor.
|
||||
*/
|
||||
ChronalVortexClass(void);
|
||||
~ChronalVortexClass(void);
|
||||
|
||||
void Detach(TARGET target);
|
||||
|
||||
/*
|
||||
** Makes the vortex appear at the specified coordinate.
|
||||
*/
|
||||
void Appear (COORDINATE coordinate);
|
||||
|
||||
/*
|
||||
** Makes the vortex go away.
|
||||
*/
|
||||
void Disappear (void);
|
||||
|
||||
/*
|
||||
** Call this every frame.
|
||||
*/
|
||||
void AI (void);
|
||||
|
||||
/*
|
||||
** Render the vortex
|
||||
*/
|
||||
void Render (void);
|
||||
|
||||
/*
|
||||
** Flags cells under the vortex to be redrawn
|
||||
*/
|
||||
void Set_Redraw (void);
|
||||
|
||||
/*
|
||||
** Call whenever the theater changes to recalculate the shading lookup tables
|
||||
*/
|
||||
void Setup_Remap_Tables (TheaterType theater);
|
||||
|
||||
/*
|
||||
** Functions to load and save the vortex.
|
||||
*/
|
||||
void Load(Straw &file);
|
||||
void Save(Pipe &file);
|
||||
|
||||
/*
|
||||
** Returns true of vortex is currently active.
|
||||
*/
|
||||
bool Is_Active(void) {return (Active);};
|
||||
|
||||
/*
|
||||
** Makes the vortex attack the specified target. Target must be in range of the vortex.
|
||||
*/
|
||||
void Set_Target (ObjectClass *target);
|
||||
|
||||
/*
|
||||
** Disables the vortex.
|
||||
*/
|
||||
void Stop(void);
|
||||
|
||||
/*
|
||||
** Members to allow read access to private data
|
||||
*/
|
||||
COORDINATE Get_Position (void) {return (Position);};
|
||||
int Get_Range (void) {return (Range);};
|
||||
int Get_Speed (void) {return (Speed);};
|
||||
int Get_Damage (void) {return (Damage);};
|
||||
|
||||
/*
|
||||
** Members to allow write access to private data.
|
||||
*/
|
||||
void Set_Range (int range) {Range = range;};
|
||||
void Set_Speed (int speed) {Speed = speed;};
|
||||
void Set_Damage (int damage) {Damage = damage;};
|
||||
|
||||
/*
|
||||
** Possible states the vortex can be in.
|
||||
*/
|
||||
typedef enum AnimStateType : unsigned char {
|
||||
STATE_GROW, //Vortex has just appeared and is growing larger
|
||||
STATE_ROTATE, //Vortex is rotating
|
||||
STATE_SHRINK //Vortex is shrinking and about to disappear
|
||||
}AnimStateType;
|
||||
|
||||
private:
|
||||
|
||||
/*
|
||||
** Members for setting up the lookup tables.
|
||||
*/
|
||||
void Build_Fading_Table (PaletteClass const & palette, void * dest, int color, int frac);
|
||||
void Coordinate_Remap ( GraphicViewPortClass *inbuffer, int x, int y, int width, int height, unsigned char *remap_table);
|
||||
|
||||
/*
|
||||
** Misc internal functions
|
||||
*/
|
||||
void Attack(void);
|
||||
void Zap_Target(void);
|
||||
void Movement(void);
|
||||
void Hide(void);
|
||||
void Show(void);
|
||||
|
||||
/*
|
||||
** Position of the top left of the vortex
|
||||
*/
|
||||
COORDINATE Position;
|
||||
|
||||
/*
|
||||
** Direction of rotation
|
||||
*/
|
||||
int AnimateDir;
|
||||
|
||||
/*
|
||||
** Current frame of animation
|
||||
*/
|
||||
int AnimateFrame;
|
||||
|
||||
/*
|
||||
** Animation flag. When 0 vortex will animate 1 frame.
|
||||
*/
|
||||
int Animate;
|
||||
|
||||
/*
|
||||
** State of vortex. See ENUM for info.
|
||||
*/
|
||||
AnimStateType State;
|
||||
|
||||
/*
|
||||
** Color lookup tables for shading on vortex.
|
||||
*/
|
||||
unsigned char VortexRemapTables [MAX_REMAP_SHADES][256];
|
||||
|
||||
/*
|
||||
** Color lookup table to make the blue lightning orange.
|
||||
*/
|
||||
unsigned char LightningRemap[256];
|
||||
|
||||
/*
|
||||
** Is vortex currently active?
|
||||
*/
|
||||
int Active : 1;
|
||||
|
||||
/*
|
||||
** Is the vortex winding down?
|
||||
*/
|
||||
int StartShutdown : 1;
|
||||
|
||||
/*
|
||||
** Is the vortex about to hide from view?
|
||||
*/
|
||||
int StartHiding : 1;
|
||||
|
||||
/*
|
||||
** Is the vortex active but hidden?
|
||||
*/
|
||||
int Hidden : 1;
|
||||
|
||||
/*
|
||||
** Theater that lookup table is good for.
|
||||
*/
|
||||
TheaterType Theater;
|
||||
|
||||
/*
|
||||
** Last frame that vortex attacked on
|
||||
*/
|
||||
int LastAttackFrame;
|
||||
|
||||
/*
|
||||
** How many times lightning has zapped on this attack
|
||||
*/
|
||||
int ZapFrame;
|
||||
|
||||
/*
|
||||
** Ptr to object that the vortex is zapping
|
||||
*/
|
||||
TARGET TargetObject;
|
||||
// ObjectClass *TargetObject;
|
||||
|
||||
/*
|
||||
** Distance to the target object
|
||||
*/
|
||||
int TargetDistance;
|
||||
|
||||
/*
|
||||
** Game frame that vortex hid on.
|
||||
*/
|
||||
int HiddenFrame;
|
||||
|
||||
/*
|
||||
** Direction vortex is going in.
|
||||
*/
|
||||
int XDir;
|
||||
int YDir;
|
||||
|
||||
/*
|
||||
** Direction vortex should be going in
|
||||
*/
|
||||
int DesiredXDir;
|
||||
int DesiredYDir;
|
||||
|
||||
/*
|
||||
** Range in cells of the vortex lightning
|
||||
*/
|
||||
int Range;
|
||||
|
||||
/*
|
||||
** Max speed in leptons per frame of the vortex.
|
||||
*/
|
||||
int Speed;
|
||||
|
||||
/*
|
||||
** Damge of vortex lightning zap.
|
||||
*/
|
||||
int Damage;
|
||||
|
||||
/*
|
||||
** Offscreen buffer to render vortex into. This is needed so we can handle clipping.
|
||||
*/
|
||||
GraphicBufferClass *RenderBuffer;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
Reference in a new issue