RLX: a cross-platform graphical roguelike engine

Update

2008-03-24 RLX is being ported to Common Lisp. See my blog for development updates, or stop by channel #rlx on irc.freenode.org.

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:

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!

More Screenies

An outdoor scene. Note the cool transparent targeting reticle.

The ray-casting engine at work.

The emacs-based development system.

Obsolete testing guide

The cool RLX official ColorTheme

You can download this from my ColorThemes page.

Controlling the test game

Movement

  • Use the numeric keypad to move around. Watch stuff happen.
  • Look at your current location with Numpad-5

Inventory

  • Select object to pick up with keypad / and *
  • Pick up object with keypad Enter
  • Move objects in inventory with Alt-/ and Alt-*
  • Move objects into containers with Control-/ and Control-*
  • Open containers with Control-Enter
  • Equip items with "E"
  • Equipment screen: "e"

Combat

  • You need to have a weapon equipped. Look for a Rusty Wrench.
  • Alt-Direction to attack

Targeting

  • Move targeting reticle with Control-arrows. Notice the cool alpha transparency!
  • Describe target with Control-5
  • Cancel targeting with Control-Backslash

Vehicles

  • Look for a yellow spaceship. Enter it with "v", leave with "V".

More info

The current task list is always at the bottom of this page under the heading Tasks.

API Notes

The API will consist of:

Links

Pixel Art

Line of sight

Pathfinding

Terrain generation and mapping

AI

Roleplaying

Simulations

Roguelike resources

RLX Tasks

TODO http://roguelikedeveloper.blogspot.com/\

TODO http://www.squidi.net/three/index.php

TODO Establish RLX mailing list

TODO Implement metaworld planet generator / serialization manager

TODO Implement plasma planet map and "metatiles"

TODO Template for world generation/deserialization function

TODO Serialization

TODO Implement all ops, including :erase

TODO Add new grid operations for world building

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

Artificial Intellgence

TODO FSM framework built into RLX?

TODO Implement better wandering where wander direction is related to last

TODO Implement LOS-based simple seeking with latency

TODO Make enemies that only wake up on LOS / nearness

TODO Behaviors

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

DONE Add heuristic tie-breaker in rlx-path

CLOSED: 2006-09-28 Thu 05:03

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.

TODO Documentation

TODO Examples of prototype at prototype section

TODO Examples of each cell type

TODO Explain default events better

TODO RLX2

DONE Choose a Common Lisp implementation

CLOSED: 2006-10-20 Fri 17:42

Author: David O'Toole <dto@gnu.org>

Date: 2008/03/24 04:00:55 AM