//------------------------------------------------------------------------- /* Copyright (C) 1997, 2005 - 3D Realms Entertainment This file is part of Shadow Warrior version 1.2 Shadow Warrior 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Original Source: 1997 - Frank Maddin and Jim Norwood Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms */ //------------------------------------------------------------------------- #ifndef PANEL_H #define PANEL_H #include "mytypes.h" #include "game.h" #define FRAG_BAR 2920 #define PRI_FRONT_MAX 250 #define PRI_FRONT 192 #define PRI_MID 128 #define PRI_BACK 64 #define PRI_BACK_MAX 0 #define MAKE_CONPIC_ENUM enum conpic_id { #include "conpic.h" }; typedef enum conpic_id CONPIC_ID; #undef MAKE_CONPIC_ENUM enum PanelSpriteIDs { ID_BORDER_TOP = 1, ID_BORDER_BOTTOM, ID_BORDER_LEFT, ID_BORDER_RIGHT, ID_BORDER_SHADE, ID_PANEL_BORDER_LEFT, ID_PANEL_BORDER_RIGHT, ID_TEXT, ID_TEXT2, ID_TEXT3, ID_TEXT4 }; struct PANEL_STATEstruct { short picndx; // for pip stuff in conpic.h int tics; void (*Animator)(PANEL_SPRITEp); // JBF: return type was long PANEL_STATEp NextState; uint32_t flags; uint8_t xvel; uint8_t yvel; }; #define PANF_PRIMARY (BIT(0)) // denotes primary weapon #define PANF_SECONDARY (BIT(1)) // denotes secondary weapon #define PANF_BOB (BIT(2)) #define PANF_REST_POS (BIT(3)) // used for certain weapons - fireball #define PANF_RELOAD (BIT(4)) // reload flag used for uzi #define PANF_TRANS_FLIP (BIT(5)) // translucent flip - matches rotate sprite #define PANF_ACTION_POS (BIT(6)) // used for certain weapons - fireball #define PANF_WEAPON_HIDE (BIT(7)) // hide when climbing/driving #define PANF_TRANSLUCENT (BIT(8)) // turn invisible #define PANF_INVISIBLE (BIT(9)) // turn invisible #define PANF_DEATH_HIDE (BIT(10)) // hide done when dead #define PANF_KILL_AFTER_SHOW (BIT(11)) // kill after showing numpages times #define PANF_SCREEN_CLIP (BIT(12)) // maintain aspect to the screen #define PANF_STATUS_AREA (BIT(13)) // maintain aspect to the screen #define PANF_IGNORE_START_MOST (BIT(14)) // maintain aspect to the screen #define PANF_XFLIP (BIT(15)) // xflip #define PANF_SUICIDE (BIT(16)) // kill myself #define PANF_WEAPON_SPRITE (BIT(17)) // its a weapon sprite - for V mode #define PANF_CORNER (BIT(18)) // draw from the corner #define PANF_NOT_IN_VIEW (BIT(19)) // not in view #define PANF_UNHIDE_SHOOT (BIT(20)) // shoot after un-hiding a weapon #define PANF_JUMPING (BIT(21)) #define PANF_FALLING (BIT(22)) #define PANF_DRAW_BEFORE_VIEW (BIT(30)) // draw before drawrooms #define PANF_NOT_ALL_PAGES (BIT(31)) // DONT use permanentwritesprite bit for rotatesprite typedef void (*PANEL_SPRITE_FUNCp)(PANEL_SPRITEp); typedef struct { PANEL_STATEp State; int flags; short tics; short pic; short xoff; // from panel sprite center x short yoff; // from panel sprite center y } PANEL_SPRITE_OVERLAY, *PANEL_SPRITE_OVERLAYp; struct PANEL_SPRITEstruct { PANEL_SPRITEp Next, Prev; PANEL_SPRITEp sibling; PANEL_STATEp State, RetractState, PresentState, ActionState, RestState; PLAYERp PlayerP; // Do not change the order of this line uint16_t xfract; int16_t x; uint16_t yfract; int16_t y; // Do not change the order of this // line PANEL_SPRITE_OVERLAY over[8]; PANEL_SPRITE_FUNCp PanelSpriteFunc; short ID; // id for finding sprite types on the // list short picndx; // for pip stuff in conpic.h short picnum; // bypass pip stuff in conpic.h short x1, y1, x2, y2; // for rotatesprites box cliping short vel, vel_adj; short numpages; int xorig, yorig, flags, priority; int scale; int jump_speed, jump_grav; // jumping vars int xspeed; short tics, delay; // time vars short ang, rotate_ang; short sin_ndx, sin_amt, sin_arc_speed; short bob_height_shift; short shade, pal; short kill_tics; short WeaponType; // remember my own weapon type for weapons with secondary function }; typedef struct { PANEL_STATEp pstate; short state_size; } PANEL_STATE_TABLE, *PANEL_STATE_TABLEp; extern PANEL_STATE_TABLE PanelStateTable[]; // Panel State flags - also used for #define psf_Invisible BIT(16) #define psf_QuickCall BIT(23) #define psf_Xflip BIT(24) #define psf_ShadeHalf BIT(25) #define psf_ShadeNone BIT(26) enum BorderTypes { BORDER_NONE = 0, BORDER_MINI_BAR = 1, BORDER_BAR = 2 }; #define MICRO_SIGHT_NUM 0 #define MICRO_SIGHT 2075 #define MICRO_SHOT_NUM 2 #define MICRO_SHOT_20 2076 #define MICRO_SHOT_1 2077 #define MICRO_HEAT_NUM 1 #define MICRO_HEAT 2084 #define UZI_COPEN 2040 #define UZI_CCLOSED 2041 #define UZI_CLIT 2042 #define UZI_CRELOAD 2043 #define HEAD_MODE1 2055 #define HEAD_MODE2 2056 #define HEAD_MODE3 2057 #define SHOTGUN_AUTO_NUM 0 #define SHOTGUN_AUTO 2078 PANEL_SPRITEp pSpawnSprite(PLAYERp pp, PANEL_STATEp state, uint8_t priority, int x, int y); PANEL_SPRITEp pSpawnFullScreenSprite(PLAYERp pp, short pic, short pri, int x, int y); PANEL_SPRITEp pSpawnFullViewSprite(PLAYERp pp,short pic,short pri,int x,int y); void pSetSuicide(PANEL_SPRITEp psp); SWBOOL pKillScreenSpiteIDs(PLAYERp pp, short id); void pFlushPerms(PLAYERp pp); void PreUpdatePanel(void); void UpdatePanel(void); void PlayerUpdateKeys(PLAYERp pp); void PlayerUpdateArmor(PLAYERp pp,short value); void pToggleCrosshair(PLAYERp pp); void pKillSprite(PANEL_SPRITEp psp); void InitChops(PLAYERp pp); void ChopsSetRetract(PLAYERp pp); void PlayerUpdateTimeLimit(PLAYERp pp); #endif