NAME

Game::PlatformsOfPeril - the platforms of peril

SYNOPSIS

Platforms of Peril is a terminal-based game. Assuming App::cpanminus (and possibly also local::lib) is installed and setup, in a suitable terminal (possibly one with a square font such as White Rabbit and a black background) install and run the game via:

cpanm Game::PlatformsOfPeril
pperil

Help text should be printed when the game starts. Use the ? key in game to show the help text again.

DESCRIPTION

You are the only spawn (son, daughter, etc.) of a Xorbian Ranger and as such are duty bound not to peruse pointless background material such as this. You have long hair, green eyes, and start the game with a bomb, and need to collect gems all the while avoiding the enemies. The enemies have been blessed with pretty much bog standard A* pathfinding yet do know a thing or two about gravity. Gems can be made into bombs (the details as to how are not entirely clear) and bombs in turn will explode on contact with things that move. You also have two magic boots, one on each foot. These do something when activated.

P.S. Do not drop a bomb while falling, as it will fall with you and then explode.

P.P.S. You can make bombs while falling. This is perhaps a more productive use of that time than mashing space or the . key.

Customizing the Game

pperil accepts a number of options that do not do very much:

Usage: pperil [--err=file] [--level=N] [--prefix=path] [--seed=N]

  --err    - send STDERR to this file if not already redirected
  --level  - level integer to start on
  --prefix - path to the levels directory (containing the files
             level0, level1, ...)
  --seed   - PRNG uses the given integer as the seed

Otherwise customizing the game will involve hacking directly at the module code or level maps, see "Known Issues".

Terminal Setup

This game may benefit from the use of a square font; ~/.Xdefaults might contain something like:

# "White Rabbit" square font (the name is "New" in the
# "whitrabt.ttf" file that I downloaded from who knows where)
wrterm*background:black
wrterm*colorMode:true
wrterm*cursorBlink:false
wrterm*cursorColor:white
wrterm*dynamicColors:true
wrterm*faceName:New
wrterm*faceSize:24
wrterm*foreground:gold
wrterm*geometry:70x24
wrterm*termName:xterm-256color

And with that loaded by X11 an xterm could be launched via:

xterm -class wrterm

to play the game in.

BUGS

Probably lots.

Please report any bugs or feature requests to bug-game-platformsofperil at rt.cpan.org, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Game-PlatformsOfPeril. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

Patches might best be applied towards:

https://github.com/thrig/Game-PlatformsOfPeril

Known Issues

The most glorious lack of tests, the unconvincing and ham-fisted attempt at documentation, etc.

More weaken calls may be necessary due to the cross linkages between the %Animates (which need to know things about the level map) and the $LMap (which needs to know things about the animates). In other words, this game may leak memory.

Some may be desirous of non-hjkl movement keys and so forth. Fiddle with the code (our variables can be clobbered from outside the module), or abstract things to use MOVE_LEFT etc and then map keys to those symbols. At that point one might add a configuration file or in-game editor of the key commands, but that sounds like work.

Automatic level generation might be nice? Or more levels made by hand...

Need to research how gems are made into bombs.

The game is not very perilous. And probably needs much tuning.

SEE ALSO

Lode Runner, but this game evolved off in some other direction. The bombs are from Bomberman but behave more like animate-sensing landmines. One idea is that a gem plus a bomb could make a smartbomb which, being smart, tracks the player. However bombs lack limbs so have trouble with the ladders, and that idea is otherwise presently tied up in committee.

Game::TextPatterns may help draw candidate level maps:

use Game::TextPatterns;

my $pat = Game::TextPatterns->new( pattern => <<'EOP' );
.==P..
o#===.
####=.
=====.
.=*#..
.=###.
EOP

print $pat->four_up->flip_four(1)->string;

AUTHOR

thrig - Jeremy Mates (cpan:JMATES) <jmates at cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2019 by Jeremy Mates

This program is distributed under the (Revised) BSD License: http://www.opensource.org/licenses/BSD-3-Clause