# Blessing of Ra **Blessing of Ra** - a two-player pyramid escape for the Commodore 64 (ACME + VICE), in the same spirit as [rabbitc64](../rabbitc64). The legend: when the great pyramid rose, a worker was sealed in its peak. He prayed to Ra until the sun god took pity - now Ra bends the pyramid's labyrinth walls to lead him out. **Player 1** (joystick 2, or `w a s d`) is the worker, running the corridors toward the green exit portal. **Player 2** (joystick 1, or `i j k l`) is Ra: a bracket cursor rides the corners of the walls - fire (or `return`) spins the four wall pieces around the cursor by 90 degrees, reshaping the maze in real time. A spin is denied while anyone is standing in one of the four slots (the border blips red); the spun pieces flash white. Eight levels, each maze one cell bigger than the last: a square that starts at 4x4 cells and grows to 11x11 - the tallest square lattice the screen fits - always centered on screen. One more enemy joins each level (up to four): the cyan **scarabs** roam the corridors, and the light-red **scorpions** also spit a venom sting whenever they line up with the worker - the purple drop flies down the corridor until a wall swallows it. The look: a desert palette of sandstone walls and brown pivot posts from a custom RAM charset, every actor (worker, cursor, bullet, sting, enemies) a hardware sprite gliding smoothly between the cells, an animated exit portal, a raster color band behind the status row, and a fade to black between all screens. The menu floats over a dark maze backdrop under the big gold-washed title. The options screen adds two optional twists: - **worker gun** - player 1 shoots a bullet with fire/`space`; a hit enemy respawns on a random cell after a pause. - **spin cooldown** - each spin starts a recharge; further spins are denied until the bar on the status row drains (pixel by pixel) and the readout flips back from *wait* to *ready* (the cursor also turns red while recharging). Screens: TTG intro (ported from rabbitc64) -> pyramid title card (the pyramid, the trapped worker and the pulsing sun of Ra) -> main menu (play / options / story / credits) -> game -> next level, and after the last one the escape screen (back to the menu); game over lets fire retry the same level with a fresh maze, `m` backs out to the menu. The story screen tells the legend and lists who steers what. ## Build & run ``` make deps # macOS: brew install acme vice make build # -> blessingofra.prg make run # build + launch in x64sc ``` Test builds can boot straight into one state: ``` acme -DAUTOPLAY=1 -f cbm -o blessingofra.prg main.asm # also: AUTOOPTIONS, AUTOSTORY, AUTOPYRAMID, AUTOCREDITS, # AUTOWIN, AUTOLOSE; add -DFORCEOPTS=1 to start with both # options turned on ``` ## Files - `main.asm` - entry point, BASIC stub, per-frame state machine, the border/status-band raster work - `defs.asm` - registers, constants, zero page, macros - `intro.asm` - TTG boot logo with the gold color wash - `pyramid.asm` - title card: the pyramid, the worker, the sun of Ra - `menu.asm` - main menu card over a dark maze backdrop - `options.asm` - the optional extras and their toggle screen - `story.asm` - the legend of the worker and Ra + the controls - `credits.asm` - the crew - `play.asm` - maze geometry + generation (recursive backtracker, animated) + the game and its eight growing levels - `win.asm` / `over.asm` - end screens - `common.asm` - shared routines: printing, big block font, the title wash, input, RNG - `sound.asm` - single-voice SID SFX driver - `gfx.asm` - RAM charset with the custom tiles, the sprite engine, the portal animation and the fade-to-black transition