X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fpacman.h;h=fbe1eae0f98e95ce3294aec6f7ae0660deb128f6;hb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;hp=ba336ff3581ff6c30f40166f577ef76213c983a9;hpb=bc7b7a8eb122206d239ec0e693676bcce31be1aa;p=xscreensaver diff --git a/hacks/pacman.h b/hacks/pacman.h index ba336ff3..fbe1eae0 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,27 @@ #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) -#define USE_PIXMAP +#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 +# 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))) @@ -52,6 +59,7 @@ #define MAXGPOS 2 #define MAXGDIR 4 #define MAXGWAG 2 +#define MAXGFLASH 2 #define MINGRIDSIZE 4 #define MINSIZE 3 #define NOWHERE 16383 @@ -71,72 +79,149 @@ #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 pacmanMask[4][MAXMOUTH]; - Pixmap ghostPixmap[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;