Files
RustRaptor/raptor/src/gfxapi.h
T
raptorreplica 214789fe87 Fork the vendored engine into the playable replica
Engine changes vs the vendored upstream (full ledger in
docs/upstream-patches.md):

- Assets: replace the encrypted FILE000N.GLB archives with a catalog of
  pre-decrypted loose files (data/INDEX); GLB_SlotItems() drives
  mission-pack / registered-version detection; payloads never run the
  GLB cipher at runtime.
- Platform: Linux/SDL2/ALSA only; Android, MSVC/MinGW, macOS packaging,
  bundled Windows SDL2 SDKs and the ENDOOM exit screen are gone;
  EXIT_Error now prints before exiting.
- Rendering: decouple presentation from simulation -- sim stays at the
  original 70/3 Hz, frames render interpolated at display rate (player,
  map scroll, enemies, shots, bonuses, anims, shadows); menus keep 70 Hz
  pacing; vsync with a delay-guard fallback.
- QoL: borderless window mode (Video/borderless), no menu cursor
  snapping onto default buttons.

Fix four regressions from the render split:

- Shield bars never redrew: RAP_ThinkStats latches g_oldshield each sim
  step before RAP_DisplayStats' dirty check could fire. Bars now draw
  unconditionally per rendered frame; g_oldsuper deleted, g_oldshield
  kept as sim-side damage-detection state only.
- Dying ships despawned without exploding: the render loop never called
  ANIMS_DisplayHigh(); most air-death explosions register HIGH_AIR.
  Restored between the player and enemy shots, as upstream orders it.
- Laser turret broke: reusing doneflag as a draw marker (it is
  hit/retire game state, and the turret retire path never frees its
  shot) hid the beam on hitting ticks and leaked one SHOTS pool slot
  per fire until no weapon could shoot. S_LINE tracers now carry an age
  counter: one Think pass, every render of their birth step, purged at
  the top of the next Think.
- Muzzle flash was cleared per rendered frame, making it invisible at
  display refresh rates; now cleared once per simulation step.
2026-08-26 18:45:07 +10:00

128 lines
3.7 KiB
C

#pragma once
#define G3D_DIST 200
#define GFX_DARK 0
#define GFX_LITE 1
#define SCREENWIDTH 320
#define SCREENHEIGHT 200
typedef enum
{
UPPER_LEFT,
UPPER_RIGHT,
LOWER_LEFT,
LOWER_RIGHT
}CORNER;
typedef enum
{
DARK,
LIGHT,
GREY
}SHADE;
typedef enum
{
GSPRITE,
GPIC
}GFX_TYPE;
#define CLIP_XRIGHT 2
#define CLIP_XLEFT 4
#define CLIP_YTOP 8
#define CLIP_YBOTTOM 16
typedef struct
{
GFX_TYPE type; // type of picture
int opt1; // option 1
int opt2; // option 2
int width; // width of pic
int height; // heigth of pic
}GFX_PIC;
typedef struct
{
int x; // X POS OF SEG
int y; // Y POS OF SEG
int offset; // OFFSET FROM X, Y
int length; // LENGTH OF LINE
}GFX_SPRITE;
typedef struct
{
int height;
short charofs[256];
char width[256];
}FONT;
extern char *displaybuffer;
extern char *displayscreen;
extern int ud_x, ud_y, ud_lx, ud_ly;
extern int o_ud_x, o_ud_y, o_ud_lx, o_ud_ly;
extern int update_start;
extern char *gfx_inmem;
extern int gfx_xp, gfx_yp;
extern int gfx_lx, gfx_ly;
extern int gfx_imga;
extern int framecount;
extern int tablelen;
extern int stable[324];
extern char *ltable, *dtable, *gtable;
extern int ylookup[200];
extern int retraceflag;
extern int G3D_viewx, G3D_viewy, G3D_viewz;
extern int G3D_x, G3D_y, G3D_z, G3D_screenx, G3D_screeny;
void GFX_UpdateTimer(void);
void GFX_InitSystem(void);
void GFX_InitVideo(char *curpal);
int GFX_GetFrameCount(void);
void GFX_SetInterp(int num, int den);
int GFX_InterpCoord(int cur, int prev);
int GFX_ClipLines(char **image, int *x, int *y, int *lx, int *ly);
void GFX_SetPalette(char *curpal, int startpal);
void GFX_FadeOut(int red, int green, int blue, int speed);
void GFX_FadeIn(char *palette, int steps);
void GFX_FadeStart(void);
void GFX_FadeFrame(char *palette, int cur_step, int steps);
void GFX_SetPalRange(int start, int end);
void GFX_MakeLightTable(char *palette, char *ltable, int level);
void GFX_MakeGreyTable(char *palette, char *ltable);
void GFX_GetScreen(char *outmem, int x, int y, int lx, int ly);
void GFX_PutTexture(char *intxt, int x, int y, int lx, int ly);
void GFX_ShadeArea(int opt, int x, int y, int lx, int ly);
void GFX_ShadeShape(int opt, char* mask, int x, int y);
void GFX_VShadeLine(int opt, int x, int y, int ly);
void GFX_HShadeLine(int opt, int x, int y, int lx);
void GFX_LightBox(int opt, int x, int y, int lx, int ly);
void GFX_ColorBox(int x, int y, int lx, int ly, int color);
void GFX_HLine(int x, int y, int lx, int color);
void GFX_VLine(int x, int y, int ly, int color);
void GFX_Line(int x, int y, int x2, int y2, int color);
void GFX_ScalePic(char *buffin, int x, int y, int new_lx, int new_ly, int see_thru);
void GFX_DisplayUpdate(void);
void GFX_PutImage(char *image, int x, int y, int see_thru);
void GFX_PutSprite(char *inmem, int x, int y);
void GFX_MarkUpdate(int x, int y, int lx, int ly);
void GFX_ForceUpdate(int x, int y, int lx, int ly);
void GFX_SetFrameHook(void (*func)(void (*)(void)));
void GFX_WaitUpdate(int count);
void GFX_DisplayScreen(void);
void GFX_DrawSprite(char *dest, char *inmem);
void GFX_DrawChar(char *dest, char *inmem, int width, int height, int addx, int color);
void GFX_Shade(char *outmem, int maxlen, char *dtable);
void GFX_PutPic(void);
void GFX_PutMaskPic(void);
int GFX_StrPixelLen(FONT* infont, char *instr, int maxloop);
int GFX_Print(int printx, int printy, char *str, FONT* infont, int basecolor);
void GFX_ShadeSprite(char *dest, char *inmem, char *dtable);
void GFX_ScaleLine(char *outmem, char *inmem);
void GFX_CScaleLine(char *outmem, char *inmem);
void GFX_3D_SetView(int x, int y, int z);
void GFX_3DPoint(void);