Check out a video of XALCYON.
Downloads for various platforms are located on the Xalcyon downloads page.
If you are a Windows user, unzip the XALCYON-WIN32.ZIP file and look for XALCYON.EXE in the resulting folder. You can configure your joystick by pressing F1 to go to the config screen.
Linux users: The file XALCYON.APP is the 32-bit GNU/Linux executable program. You will need to have installed the SDL libraries. Please see the installation instructions for Blocky, and also blocky-init.lisp for info on how to configure other settings.
XALCYON is a challenging multidirectional PC shooting game with dual analog stick control and procedurally generated levels. XALCYON is the sequel to XONG, and exhibits the same 80s-home-computer-game audiovisual aesthetic that I employed in XONG.
XALCYON requires a USB or other game controller with dual analog sticks and at least three buttons. The player uses the analog sticks to independently control both movement and aiming/firing of his robot as it fights through a series of increasingly difficult levels. These maps are randomly generated from a library of templates specifying different terrain and enemy combinations. Once all enemies on a level are destroyed, the gateway to the next level will appear.
As in XONG, one single hit from any bullet or enemy or explosion will kill you and completely end the current game. However, you can simply hit ESCAPE to generate a fresh scenario starting from level 1. Sudden permadeath increases tension, but characters are quite disposable, so it becomes a score challenge.
Your robot can hold and use one item at a time. The player starts the game with a shield which blocks bullets coming from the direction the right stick is aiming. The shield (or other item) can be activated by pressing L1 or L2. Items are found in boxes, or left behind by smashed enemies.
The main gun is always equipped, and can be fired by pressing or holding R1 or R2. However, both shield and gun must consume energy to operate. Your robot has a limited energy supply, and the gauge will run out quickly if you use the shield for a long period (even faster if you are also shooting the main gun.) When energy is too low, you will not be able to use guns or shields for a few moments, and will be highly vulnerable while you wait for it to recharge.
The player can equip a bomb instead of the shield; these explode a few seconds after being fired, and they stick to enemies and walls. But there are enemies that can fire bombs at you too.
“Monitors” are orange robotic drones that patrol the fortress, firing a spread of bullets before dashing away from the player. Highly dangerous in groups. They turn red when they’re badly damaged.
fixed width energy readout field
do the simplest thing that could possibly work
[#A] exit at origin that opens to next level when completed, “return to origin” normally hidden <<< landing area with cool opening animation/sound
crazy linear vertical level
[#B] enemies with spinning shields that vary speed
use swig to make libmikmod bindings
properly set dt
review tigforum comments for todo list item fixes etc
Story files, get encrypted data to the transmitter, but you lose your copy if you pass through some region or barrier
revise the death paddles to work properly
[#B] debug wall glide
have the aliens say things with little icons/sounds
Profile and optimize!
[#A] weapon is an auto-firing pod that pops out, uses energy while it fires in a circle, then comes back.
[#A] or acquire a trail
[#B] radiation cloud world
[#B] new enemy and/or new item
[#B] onscreen event-responsive particle glitch grids, really quick transient effects with transparency mismunch
[#C] enemy whose bullet knocks you backward possibly into other stuff
enemies who camouflage themselves as walls
special sound/flash for “ineffective” shots
XALCYON is an undiscovered letter symbol of great power
final level is Xalcyon Infinity
[#B] more themes
basic in-game help screen (doubles as pause feature) on F1, any joystick button to cancel
archive: a few monitors in a very simple berzerky environment.
outpost: open area with 1 difficult base, spewing monitors and radiation hazard
place flares in certain locations
radiation vent chambers, floating hot clouds and jets, simply subdivided, with guys who throw bombs at you
level divided into two unequal portions by a barrier with a gap, and moving enemies who spawn color creepers
multi-ring concentric squares megabase w interior turrets and gates you have to unlock
small rooms with item boxes so that often theres access to the bomb.
[#B] larger faster more menacing-sounding radiation creepers
[#B] display level number
[#B] easily distinguishable objects that reflect size-increased bullets
[#B] boss with bullets that grow larger and faster as they approach you, but move in straight line
[#C] :target tag causes onscreen highlight (i.e. bubble)
[#C] freeze trail to create walls
breaking shield pieces
Story texts, places, “PROCEED TO DATA ARCHIVE 1365” or “REACTOR”
occasional evil Dr. Niven voice
DTOVISION PRESENTS.. XALCYONNNN
map screen before each level with blinking indicator of where you are in the (branching) quest?
[#C] allow BLOCKY:CLONE to accept non-keyword symbols
[#B] optimize draw-wall to make one object per call
destroy-region, select-region, get-region-objects
Restrict objects movement to active quadtree space
[#B] auto-resize quadtree to width, come up with a formula
grammars that boil down to simple lisp functions invoking methods for making worlds etc
world building routines that are parameterized with a bounding box or worldq
[#B] large seamless persistent worlds with lazy procedural generation
Make a really giant quadtree with zillions of objects in it
Choose any subtree as “active”
Only compute/collide objects in active quadtree (i.e. load them into a world with that %quadtree)
quadtrees do not need to be serialized (the object positions are retained for re-insertion, which is deterministic)
[#C] cache raw struct instead of uuid in #’add-block (instead of ‘t’) — and in quadtrees?
[#C] and in #objects?
[#B] rename defresource to define-resource for consistency, and make it more useful (auto-type-detect naming, plus animation)
[#B] recharge time penalty if you run out the meter
Sanctuary HD ideas
(09:50:29 PM) dto: ive got it (09:51:14 PM) dto: procedural terrain, i.e. you encounter different sequences of forest, riverbank, mountain pass, tundra along the way to your destination (09:51:27 PM) dto: but there are story achievements. (09:52:48 PM) dto: like, you find a certain goodie and it reveals part of the story, or witness something scripted and get a cool item, and from that point on even if your character suffers permadeath on this quest, whatever it unlocked will remain unlocked (for example it might add new things to the procedural mix every time you find a story item) (09:53:22 PM) dto: so that the game has several levels, the low-level resource management of food and fire—plus the combat and fatigue—-then the quest where you are trying to get from point A to B (09:53:29 PM) dto: then the hunting for cool stuff and story (09:53:33 PM) dto: i.e. replay value
make menubar togglable or DISABLED, plus MERGE shell into world with a hotkey to switch modes
basic switching between F1
allow dynamically adjusting quadtree to existing objects and detect clustering, ?
fix world borders not colliding properly
combine turtle and world so that draw-room and stuff are direct members of “reactor” not reactor-turtle
algebra of worlds: merge, group-vertically, group-horizontally
[#A] layout determined by computing leaf sizes and creating next level up in terms of that
Let computed world size be what it is, then try to auto-fit quadtrees
get rid of grid-height grid-width?? i think so
Level gen Notes
<dto> im working on finally cracking my issues with level generation, i.e. things colliding or being off the map <dto> the solution has presented itself. i’m going to use my new quadtree code to allow generating pieces of a level in a “void” and then generating a bounding-box for them , i can process collisions at that point to make sure the level is kosher before pasting it into a larger level in its own area and then doing that for the other level pieces until you calculate the bounding box for the whole level dynamically and then just build a proper <dto> quadtree automatically. i can even detect areas of buildup and possibly re-grid once or twice
sticky bomb, delay/sound before firing ala howitzer
red shields in the doors of some bases to stop player just firing bomb from distance
redzone warning sound
shield with limited use, only faces the dir you are shooting.
as in Xong—ONE hit kills
bases move around slowly like aircraft carriers
the trail is your shield.
player bullets have limited range
“chips” are the XP and currency (you buy upgrades/items)
chips are left behind by enemies or found in crates
level completion when all targets/bases are destroyed
non-moving bases that spawn enemies
display word “WIN” or “LOES”
sweeping the trail across bouncing Chip particles is the only way to pick them up
Design doc (outdated)
MicroXONG is a retro-remake of XONG with graphics, sound, and controls similar to those of an Intellivison or Atari 5200 game from the bygone era of 8-bit games, but with OpenGL transparency and scaling added to the mix.
You are a vulnerable white square that can move only in the four cardinal directions (using the arrow keys, numpad, or gamepad). Using the spacebar (or joystick button) you can fire a bullet in the direction you last moved. (This direction is indicated by a little dot on the player’s sprite.)
One hit kills you, and completely ends your game—to win at MicroXONG you must reach the end without taking a single bullet from an enemy or touching a single hot zone. A successful game of SuperXONG should be able to be completed in less than 20 minutes. Player lives are disposable, and pressing ESCAPE after death will instantly begin a new game.
You must infiltrate an enemy research facility with four increasingly difficult levels. Each level is semi-randomly generated as in a roguelike, but levels are not entirely grid-based. Your goal is to defeat all enemies, retrieve one or more encrypted data files, and transmit them back to your home base at a terminal located somewhere on each level. Each transmission results in a random bit of story being shown to the player in the form of a fictional email, and a story could be sketched in this way with a small library of these emails.
Your character is trailed by a positronic filament “tail” (represented by a yellow line following your square) which can destroy bullets and certain other moving objects. By sweeping the filament across the path of an oncoming particle or bullet, you can annihilate them and reduce the danger level. The tail is not overly long (this would make the game too easy) and cannot be extended.
An energy meter is shown at the bottom corner of the game window as a segmented horizontal bar with an E next to it. Energy is required to fire your bullets, and when your energy is too low, the tail shield will not function and you will be more vulnerable.
You can regain energy by grabbing an “E” powerup (these should be somewhat scarce) or by absorbing particles with your tail.
Your bullets bounce back and forth along a line (either horizontal or vertical.) You can catch your own bullets, which restores an equivalent amount of energy. So part of the strategy will be in destroying colorful blocks and/or objects in paddle-and-brick-game fashion.
Your bullets don’t directly kill enemies—instead you must trigger bombs when they pass by, or direct the enemies into incinerators.
There are forcefield doors between some rooms that open when shot with a bullet, and close after a few seconds. Colliding with the forcefield kills you.
Player speed should be 1 pixel when shift is held (use in danger areas.)