Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Common Lisp
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
COPYING
README.org
alpha-particle.png
beatup.ogg
beta-particle.png
biclops.png
bigboom.wav
blop.wav
blurp.wav
blurp2.wav
bomb-ammo.png
bomb-flash1.png
bomb-flash2.png
bomb-flash3.png
bomb.png
bomb1.png
bomb2.png
bomb3.png
bomb4.png
bombs-away.wav
bonux1.wav
bonux2.wav
bonux3.wav
boop1.wav
boop2.wav
boop3.wav
carrier-dead.png
carrier.png
chip.png
chip.wav
clip.wav
corruption1.png
corruption2.png
corruption3.png
corruption4.png
corruption5.png
corruption6.png
countdown.wav
countdown2.wav
crunch.wav
database.blx
datafile.png
datafile2.png
datafile3.png
deathx.wav
doorbell.wav
doorbell2.wav
doorbell3.wav
drone.png
energy-ammo.png
explode.wav
explosion.png
explosion2.png
gamma-particle.png
geiger1.wav
geiger2.wav
geiger3.wav
geiger4.wav
generator.png
gond1.wav
gond2.wav
index.blx
invec.ogg
lose.png
magenta-alert.wav
melcrov8r.ogg
midnight.png
monitor.png
monitor2.png
monitor3.png
munch1.wav
nexttime.ogg
ompula.ogg
paz.wav
phong.ogg
pip1.wav
pip2.wav
pip3.wav
power.wav
powerdown.wav
powerup.wav
presents.wav
pulse.wav
rappy.ogg
remembering-xalcyon.ogg
robot.png
robovoxx.wav
rook.png
rook2.png
shield-ammo.png
shield-bounce.wav
shield-hum1.wav
shield-hum2.wav
shield1.png
shield2.png
shield3.png
shutdown.wav
skull.png
slam1.wav
slam2.wav
slam3.wav
spark.png
suspiria-synthesis.ogg
talk.wav
theme3.ogg
variables.blx
vedex.ogg
vent-hole1.png
vent-hole2.png
vent-hole3.png
vent.png
vent2.png
vent3.png
vent4.png
vent5.png
vixon.ogg
vox-0.wav
vox-1.wav
vox-10.wav
vox-2.wav
vox-3.wav
vox-4.wav
vox-5.wav
vox-6.wav
vox-7.wav
vox-8.wav
vox-9.wav
vox-alpha.wav
vox-base-destroyed.wav
vox-beta.wav
vox-bomb-pickup.wav
vox-bomb.wav
vox-brennan.wav
vox-delta.wav
vox-energy.wav
vox-epsilon.wav
vox-gamma.wav
vox-hazard.wav
vox-message.wav
vox-mission-completed.wav
vox-now-entering.wav
vox-proceed-to.wav
vox-radiation.wav
vox-repair.wav
vox-restored.wav
vox-sector.wav
vox-shield-pickup.wav
vox-shield-warning.wav
vox-shutdown.wav
vox-unidentified.wav
vox-viceroy.wav
vox-virus-detected.wav
vox-winning.wav
vox-you-lose.wav
wall-blue.png
wall-green.png
wall-orange.png
wall-purple.png
wall-red.png
wall-white.png
wall-yellow.png
wall.png
whack1.wav
whack2.wav
whack3.wav
win.png
wraparound.ogg
wreckage1.png
wreckage2.png
wreckage3.png
wreckage4.png
xalcyon.lisp
xalcyon.ogg
xalcyon.org
xioforms.ogg
xiomacs.ogg
xmrio.ogg
xplod.wav
zap.wav
zoomdown.wav

README.org

Video

Check out a video of XALCYON.

Download

Downloads for various platforms are located on the Xalcyon downloads page.

Play

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.

About

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] line-of-sight

[#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

[#B] investigate http://angg.twu.net/ICON/tron.icn

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

select adventure? and difficulty? tower of doom intv http://www.youtube.com/watch?v=XYELjUGArEA

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”

energy meter

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.)

Difficulty A/B

don’t start quadtree searches on :passive collision-type objects

Archived Entries

[#A] fix border-around so that size arg comes first, then &rest worlds

[#A] player should glide along wall not stick

optimize draw-wall to make single rectangle per call

only draw onscreen objects?

Something went wrong with that request. Please try again.