About
RLX is a portable, free-software graphical roguelike engine written in
Emacs Lisp. The system provides the basic nuts and bolts required to
build graphical roguelikes:
-
Graphical tile map display engine with alpha transparency
-
Turn-based action
-
Objects can be scripted in emacs lisp, and can have arbitrary
properties attached
-
Pluggable game modules, just like a real console
-
Basic AI support and pathfinding
-
Line-of-sight and dynamic lighting
-
Heads-up-display (HUD)
-
Terrain generation and pattern-based map synthesis
The first RLX game is called Void Mission. It's a sci-fi roguelike
influenced by all the oldskool stuff I used to play as a kid. I use it
to test RLX, but it is also my attempt to (eventually) redefine the
boundaries of what is possible in a roguelike, and hopefully to create
the best sci-fi roguelike ever!
Void Mission Tasks
TODO Create laptop keymap alternatives
TODO Complete Outpost
TODO "Described" command allows object to give knowledge
TODO Allow equipping both handst
- TODO [ and ] to choose attacking hand, other hand is Using hand
TODO Make lanterns and batteries work properly
- TODO Properly compute items in containers
- TODO Battery should receive turns while contained.
TODO Revise outpost rendering routine
TODO Update HUD when contained object is destroyed
TODO Use some kind of Observer pattern?
TODO Fix picking up more than one item, doesn't work…
TODO Implement :replace-top in editor
--------------------------------------------------------
TODO Implement overworld map and generation of wilderness regions
TODO Implement :created action for cells when cloned
TODO Refine combat model and formulas
TODO Implement more sophisticated attack system with hit/miss/dodge
DONE [#C] Bugfix: max-appearances not being honored in metamap generator
CLOSED: 2006-10-04 Wed 06:16
TODO [#B] Implement item collections that aggregate, via :quantity property
TODO [#C] Implement slave AI players who cluster around and defend player
Enhancements and fixes
TODO Add colors to status display
TODO Allow property sheet editor to edit multiple cells on a grid
TODO red asterisks, allow to edit text lambdas in editor
TODO Come up with better scheme for spraying fractal terrain.
TODO Metamap: Allow really low and really high / required probability maps
TODO Use horizontal space in narration window to summarize encounter.
TODO Cells that prevent ships from entering. Ship checks for :vehicle-obstacle
TODO Synthesize :step events to all cells in a grid when you step
TODO Hierarchical HUD: with back button
TODO You shouldn't be able to see through the floor to the icy surface.
TODO Properly move things out of containers
TODO [#C] Fix narration getting into/out of vehicles
TODO [#C] Fix lines between tile rows when font is too big
TODO [#C] Read Braitenberg's "Vehicles"
TODO [#C] Make rlx-load-game use completing-read
TODO Implement formatted sensor values by returning more stuff in plist
TODO [#C] Implement cellular automata terrain
TODO Implement floating light sources
TODO Use make-progress-reporter
TODO Don't allow targeting of shadowed areas.
TODO [#C] Implement wiki backlink search (for categories etc.)
TODO Quickly navigate wiki: hotkey for front page ("/") and right-click to follow
TODO [#C] rlx-grid-paint-replace-all
TODO Combine the duplicated HUD move functions into one
TODO Write specifications for all events and use (let) to rename "to" and "from"
TODO Evaluate non-spec values in defcell
TODO Always return next-player from rlx-run-world?
TODO Make utility defsubsts for forwarding commands to self
CellMode Tasks
TODO Use symbol-macrolet to bind instance vars in (cell-mode-define
TODO Add documentation to each section of cell.el
TODO Docstrings!
TODO Rename things for more consistent naming convention… make-cell-sheet
TODO Try to split it into three parts: UI, dataflow, wiki
TODO Elisp Cell: Don't blitz buffer when already open
TODO Add buffer-undo-list progammable elements
Optimization
TODO Use macros to eliminate zillion funcalls in rlx-trace-*
TODO Don't cons so much during lighting process
TODO Use diagonal distance as heuristic in rlx-path
-
h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y))
DONE Add heuristic tie-breaker in rlx-path
CLOSED: 2006-09-28 Thu 05:03
-
h(n) = (1.0 + p), example p=stepcost/expected max path length ** TODO Don't call rlx-default-event for commands or :turn
DONE Replace BLOCK by COND in defcell expansion
CLOSED: 2006-09-14 Thu 07:43
DONE Render tiles by replacing text properties
CLOSED: 2006-09-11 Mon 08:18
TODO Make sure :tile and :event are at start of plists
TODO Don't send :turn to non :cpu/:player cells
TODO More defsubst
TODO Speed up cell-image-compute: don't use temp-buffer/insert-image
TODO (info "(elisp)Forcing Redisplay")
TODO Speed up rlx-invoke-event
TODO Profile and optimize cell-mode
TODO Don't use (append) in rlx-run-events
TODO Use integer math in (rlx-trace)
DONE Don't narrate enemy turns
CLOSED: 2006-09-08 Fri 11:38
DONE Turn off undo information in rlx-mode buffre
CLOSED: 2006-09-06 Wed 23:20
DONE Don't use (rlx-grid-get) in (rlx-grid-render)
CLOSED: 2006-09-06 Wed 23:32
This looks up the same row every time… instead i should try mapc or
something, loading each row just once.
Author: David O'Toole
<dto@gnu.org>
Date: 2008/03/24 04:00:55 AM