X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fpacman.h;h=652ee3142e60183575180395bb602c2bcbfafa52;hb=6f5482d73adb0165c0130bb47d852644ab0c4869;hp=3b8e40b449775b1e8564acdb11735a9a93147a17;hpb=ffd8c0873576a9e3065696a624dce6b766b77062;p=xscreensaver diff --git a/hacks/pacman.h b/hacks/pacman.h index 3b8e40b4..652ee314 100644 --- a/hacks/pacman.h +++ b/hacks/pacman.h @@ -1,3 +1,4 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*- * Copyright (c) 2002 by Edwin de Jong . * @@ -24,21 +25,41 @@ #ifndef __PACMAN_H__ #define __PACMAN_H__ -#include "config.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include "xlockmoreI.h" +#if defined(HAVE_GDK_PIXBUF) || defined(HAVE_XPM) || defined(HAVE_COCOA) +# define USE_PIXMAP +#include "xpm-pixmap.h" +# else +# if defined(USE_PIXMAP) +# undef USE_PIXMAP +# endif +#endif + #define LEVHEIGHT 32U #define LEVWIDTH 40U +#define TILEWIDTH 5U +#define TILEHEIGHT 5U + #define GETNB(n) ((1 << (n)) - 1) #define TESTNB(v, n) (((1 << (n)) & v) != 0x00) #define SNB(v, n) ((v) |= (1 << (n))) #define UNSNB(v, n) ((v) &= ~(1 << (n))) #define GHOSTS 4U +#if defined(USE_PIXMAP) +#define MAXMOUTH 3 +#else #define MAXMOUTH 11 +#endif #define MAXGPOS 2 #define MAXGDIR 4 #define MAXGWAG 2 +#define MAXGFLASH 2 #define MINGRIDSIZE 4 #define MINSIZE 3 #define NOWHERE 16383 @@ -58,77 +79,152 @@ #define GETFACTOR(x, y) ((x) > (y) ? 1 : ((x) < (y) ? -1 : 0)) #define SIGN(x) GETFACTOR((x), 0) #define TRACEVECS 40 +#define PAC_DEATH_FRAMES 8 + +#define GHOST_TRACE ( LEVWIDTH * LEVHEIGHT ) + +#define DIRVECS 4 +#define NUM_BONUS_DOTS 4 + +typedef struct +{ + int vx, vy; +} tracevec_struct; + +typedef enum + { inbox = 0, goingout, randdir, chasing, hiding, goingin } GhostState; +typedef enum + { ps_eating = 0, ps_chasing, ps_hiding, ps_random, ps_dieing } PacmanState; +typedef enum +{ GHOST_DANGER, GHOST_EATEN } GameState; + +typedef struct +{ + volatile unsigned int col, row; + unsigned int lastbox, nextcol, nextrow; + int dead; + int cfactor, rfactor; + int cf, rf; + int oldcf, oldrf; + volatile int timeleft; + GhostState aistate; + int speed; + XPoint delta; + XPoint err; + int flash_scared; + int trace_idx; + tracevec_struct trace[GHOST_TRACE]; + int home_idx; + volatile int home_count; + tracevec_struct way_home[GHOST_TRACE]; + volatile int wait_pos; /* a cycle before calculating the position */ +#if 0 /* Used for debugging */ + int ndirs; + int oldndirs; +#endif + +#if 0 /* Used for debugging */ + char last_stat[1024]; +#endif -typedef struct { int vx, vy; } tracevec_struct; - -typedef enum { inbox = 0, goingout, randdir, chasing, hiding } GhostState; -typedef enum { ps_eating = 0, ps_chasing, ps_hiding, ps_random } PacmanState; -typedef enum { GHOST_DANGER, GHOST_EATEN } GameState; - -typedef struct { - unsigned int col, row; - unsigned int lastbox, nextcol, nextrow; - int dead; - int cfactor, rfactor; - int cf, rf; - int oldcf, oldrf; - int timeleft; - GhostState aistate; - /*int color; */ - int speed; - XPoint delta; - XPoint err; } ghoststruct; -typedef struct { - unsigned int col, row; - unsigned int lastbox, nextcol, nextrow; - int mouthstage, mouthdirection; - int cfactor, rfactor; - int cf, rf; - int oldcf, oldrf; - int oldlx, oldly; - int justate; - PacmanState aistate; - tracevec_struct trace[TRACEVECS]; - int cur_trace; - int state_change; - int roundscore; - int speed; - int lastturn; - XPoint delta; - XPoint err; +typedef struct +{ + unsigned int col, row; + unsigned int lastbox, nextcol, nextrow; + int mouthstage, mouthdirection; + int cfactor, rfactor; + int cf, rf; + int oldcf, oldrf; + int oldlx, oldly; + int justate; + PacmanState aistate; + tracevec_struct trace[TRACEVECS]; + int cur_trace; + int state_change; + int roundscore; + int speed; + int lastturn; + XPoint delta; + XPoint err; + int deaths; + int init_row; } pacmanstruct; -typedef struct { - unsigned short width, height; - unsigned short nrows, ncols; - short xs, ys, xb, yb; - short incx, incy; - GC stippledGC; - int graphics_format; - pacmanstruct pacman; - ghoststruct *ghosts; - unsigned int nghosts; - Pixmap pacmanPixmap[4][MAXMOUTH]; -/* Pixmap ghostPixmap[4][MAXGPOS];*/ -/* Pixmap ghostPixmap; */ - Pixmap ghostPixmap[4][MAXGDIR][MAXGWAG]; -/* Pixmap ghostMask[4][MAXGDIR][MAXGWAG]; */ - Pixmap ghostMask; - char level[LEVHEIGHT * LEVWIDTH]; - unsigned int wallwidth; - unsigned int dotsleft; - int spritexs, spriteys, spritedx, spritedy; - - GameState gamestate; - unsigned int timeleft; -} pacmangamestruct; -#define DIRVECS 4 +typedef struct +{ + unsigned int x, y; + int eaten; +} bonus_dot; + + +/* This are tiles which can be placed to create a level. */ +struct tiles { + char block[TILEWIDTH * TILEHEIGHT + 1]; + unsigned dirvec[4]; + unsigned ndirs; + unsigned simular_to; +}; + +typedef struct +{ + unsigned short width, height; + unsigned short nrows, ncols; + short xs, ys, xb, yb; + short incx, incy; + GC stippledGC; + int graphics_format; + pacmanstruct pacman; + ghoststruct *ghosts; + unsigned int nghosts; + Pixmap pacmanPixmap[4][MAXMOUTH]; + Pixmap pacmanMask[4][MAXMOUTH]; + Pixmap pacman_ds[PAC_DEATH_FRAMES]; /* pacman death sequence */ + Pixmap pacman_ds_mask[PAC_DEATH_FRAMES]; + Pixmap ghostPixmap[4][MAXGDIR][MAXGWAG]; + Pixmap ghostMask; + Pixmap s_ghostPixmap[MAXGFLASH][MAXGWAG]; /* Scared ghost Pixmaps */ + Pixmap ghostEyes[MAXGDIR]; + char level[LEVHEIGHT * LEVWIDTH]; + unsigned int wallwidth; + unsigned int dotsleft; + int spritexs, spriteys, spritedx, spritedy; + + GameState gamestate; + unsigned int timeleft; + + char last_pac_stat[1024]; + + /* draw_pacman_sprite */ + int pm_mouth; + int pm_mouth_delay; + int pm_open_mouth; + int pm_death_frame; + int pm_death_delay; + + /* draw_ghost_sprite */ + int gh_wag; + int gh_wag_count; + + /* flash_bonus_dots */ + int bd_flash_count; + int bd_on; + + /* pacman_tick */ + int ghost_scared_timer; + int flash_timer; + PacmanState old_pac_state; + + /* pacman_level.c */ + bonus_dot bonus_dots[NUM_BONUS_DOTS]; + struct tiles *tiles; + +} pacmangamestruct; -extern pacmangamestruct *pacmangames; -extern Bool trackmouse; +extern pacmangamestruct *pacman_games; +extern Bool pacman_trackmouse; typedef char lev_t[LEVHEIGHT][LEVWIDTH + 1];