This project's canonical repositories is hosted on Gothel
Software.
Goals
This project likes to demonstrate a complex system written in modern
C++ for our computer science class.
Besides management of animated sprite graphics, maze environment and
tile positioning, the interesting part might be the ghost's state
machine and their movements.
To implement the original pacman game behavior like weighted tile
collision, ghost algorithm, etc. - we have used the following documents
for reference
git clone https://jausoft.com/cgit/cs_class/pacman.git
cd pacman
make
The binary shall be build to bin/pacman.
Usage
Commandline Arguments
Following commandline arguments are supported
-audio to turn on audio effects, i.e. playing the audio
samples.
-pixqual <int> to increas pixel filtering
quality, i.e. 0 = nearest (default), 1 = linear and 2 = anisotropic
filtering.
-no_vsync to force off hardware enabled vsync, which in
turn enables manual fps synchronization
-fps <int> to enforce a specific fps value, which
will also set -no_vsync naturally
-speed <int> to set the 100% player speed in
fields per seconds
-wwidth <int> to set the initial window
width
-wheight <int> to set the initial window
height
-show_fps to show pacman's speed and to periodically
show the frames per seconds (fps) value on the console
-show_modes to show all players' mode changes
-show_moves to show all players' move criteria like
distance and collisions incl. speed changes on the console
-show_targets to show the ghost's target position as a
ray on the video screen
-show_debug_gfx to show all debug gfx
-show_all enable -show_modes,
-show_moves, -show_targets and
-show_debug_gfx
-no_ghosts to disable all ghosts
-bugfix to turn off the original puckman's behavior
(bugs), see Bugfix Mode below.
-dist_manhatten to use the Manhatten distance function
instead of the Euclidean default
-level <int> to start at given level
-record <basename-of-bmp-files> to record each
frame as a bmp file at known fps. The basename may contain folder names.
The resulting bmp files may be converted to video using scripts/bmps_to_mp4.sh, see
below.
Hence this code utilize a more current Puckman position, in case the
original code has such a double look-ahead implemented using an older
Puckman position.
This needs to be berified.
Bugfix Mode
With the -bugfix mode enabled, see Usage
above, the original puckman behavior (bugs) are disabled.
The list below shall be updated in case we further the implementation
and kept in sync with include/pacman/globals.hpp.
By default the original pacman behavior is being implemented:
weighted (round) tile position for collision tests
pinky's up-target not 4 ahead, but 4 ahead and 4 to the left
...
If false, a more accurate implementation, the pacman bugfix, is
used:
pixel accurate tile position for collision tests
pinky's up-traget to be 4 ahead as intended
...
Implementation Status
Done
Maze
Read maze specification from text file
Sprites
Speed per tile accurate key-frame animation
Weighted tile position from floating position
Renderer fps derived step width, i.e. sub-tiles
Sync speed by dropping tick, every n-frames
Ghost AI
Scared RNG target
Scatter, chase and phantom targets
Next direction_t algo
Grouped wave switch of scatter, chase and frightened
Exit home using local and global pellet timer
PRNG with an identical seed value every new level and life for
predictable results
Adjust tunnel speed
No turning up in Red-Zones if chasing or scattering
Optionally use alternative Manhatten distance function instead of
the Euclidean default.
Pacman
show eaten ghosts and fruit score onscreen (FREEZE)
Freeze pacman only for 3 frames after eating power pellet
Level specification (per level)
Timings
scatter and chase duration per phase
frightening/powered duration
Speed
pacman normal on empty tile or eating
pacman powered on empty tile or eating
ghost speed normal, frightening or in tunnel
Score
Score
ghost 1-4 per power pellet
Fruits / Bonus
Sound
Using wav chunks, mixed from seperated channels
Persistent game state
Snapshot (screenshot)
Video recording via bmp snapshots each frame
To Do
Ghost AI
Elroy 1+2 mode
Pacman
Lives
Sound
Use lossy formats
Complete samples
Extension
Second player moves a ghost
Maze
Render maze itself from maze-spec file
Persistent game state
Save/load game state
Media Data
The pixel data in media/playfield_pacman.png and
media/tiles_all.png are copied from Arcade
- Pac-Man - General Sprites.png, which were submitted and created by
Superjustinbros and assumed to be in the public domain.
Changes
0.2.0
Stability, next_target bug fix and alternative distance
function
0.1.0
Usable working state with most ghost algorithms for further analysis
and demonstration
0.0.1
Initial commit with working status and prelim ghost algorithm.