NAME
Games::Roguelike::World - roguelike world
SYNOPSIS
package myworld;
use base 'Games::Roguelike::World';
$r = myworld->new(w=>80,h=>50,dispw=>40,disph=>18); # creates a world with specified width/height & map display width/height
$r->area(new Games::Roguelike::Area(name=>'1')); # create a new area in this world called "1"
$r->area->genmaze2(); # make a cavelike maze
$char = Games::Roguelike::Mob->new($r->area, sym=>'@', pov=>8); # add a mobile object with symbol '@'
$r->setvp($char); # set viewpoint to be from $char's perspective
$r->drawmap(); # draw the active area map from the current perspective
while (!((my $c = $r->getch()) eq 'q')) {
$char->kbdmove($c);
$r->drawmap();
}
DESCRIPTION
library for pulling together field of view, character handling and map drawing code.
* contains a hash of Games::Roguelike::Area's for each "level" or "region" in the game
* uses the Games::Roguelike::Console library to draw the map
* assumes the user will be using overridden Games::Roguelike::Mob's as characters in the game
METHODS
- new(OPT1=>VAL1, OPT2=>VAL2...)
-
Options can also all be set/get as class accessors:
vp => undef # Games::Roguelike::Mob that is the 'viewpoint' dispx, dispy => (0,1) # x/y location, of the map dispw, disph => (60,24) # width & height of the map msgx, msgy => (0,0) # x/y location of the "scrolling message box" msgw, msgh => (60, 1) # width & height of the "scrolling message box" maxlog => 80, # maximum number of rows stored message log msgoldcolor => 'gray', # color of non-curent messages (if left blank, color is left alone) wsym => '#', # default wall symbol fsym => '.', # default floor symbol dsym => '+', # default door symbol debugmap => 0, # turn on map coordinate display noview => '#+', # list of symbols that block view nomove => '#', # list of symbols that block movement area => undef, # Games::Roguelike::Area that contains the currrent map
None of these features have to be used, and can be easily ignored or overridden.
- area([name or Games::Roguelike::Area])
-
No arguments: returns the current area
Specify a scalar name: returns an area with that name
Specify an Games::Roguelike::Area object: stores that object in the area hash, overwriting any with the same name, then makes it the active area
- dprint ( msg1 [,msg2 ,msg3 ...] )
-
Debug print messages For now, hard coded to far right side of screen, at col 82, past most terminal game widths
- getch ()
-
Read one character, blocks until a char is pressed.
- refresh ()
-
Refreshes the console display.
- nbgetch ()
-
Read one character, nonblocking, returns undef if none are available.
- findfeature (symbol)
-
searches "map feature list" for the given symbol, returns coordinates if found
- dispclear ()
-
Erases the "display world", and resets the "display line" (used by dispstr)
Useful for displaying an in-game menu, inventory, ability or skill list, etc.
- dispstr (str[, line])
-
Increments the "displine" and draws a tagged string at that line position.
Automatically scrolls if the next line is past the screen.
Returns nonzero on success, 2 for "on last line", and 3 for "scrolled".
- drawmap ()
-
Draws the map, usually do this after each move
- prompt (msg[, match])
-
Same as showmsg, but also shows the cursor, and gets a character response, optionally waiting until it matches.
- cursor (bool)
-
Turn on/off display of cursor for next operation.
- pushmsg (msg, color)
-
Shows a message and pushes it into the log. Use of color argument is deprecated. Prefer to use "<$color>$msg" tagged strings.
- showmsg (msg, color[, push])
-
Shows a message at msgx, msgy coorinates and optionally logs it. Also displays up to (msgh-1) old messages.
- save ([file])
-
Saves the world (!), optionally specify filename which defaults to "rll.world".
- load ([file])
-
Loads a world, optionally specify filename, returns a reference to the new world.
Console is not initialized, and is, instead, copied from the current world.
SEE ALSO
Games::Roguelike::Area, Games::Roguelike::Mob, Games::Roguelike::Console
AUTHOR
Erik Aronesty erik@q32.com
LICENSE
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://www.perl.com/perl/misc/Artistic.html or the included LICENSE file.