You do not steer. You bank.
The Apple II shipped this game with paddles, and the paddles do not point the ship — they set a rate. Each pass of the main loop adds a step to your pitch and your bank, and it is the bank that brings the nose round. Let go and the bank stays where it got to, so the ship keeps turning until you bank back the other way. It is a roll, not a yaw, and it is the whole feel of the game.
- Bank left / right← →
- Nose up / down↑ ↓
- Speed, small steps1 2
- Speed, large steps3 4
- FireSpace
- Missile / laserW
- AutopilotA
- Battle conditionB
- ShieldsS
- RadarR
- HyperdriveH
- Computer / ordersC
That is every key the flight loop answers — the original's table is exactly this long, and the port's matches it.
This game is slow, and deliberately so. One pass of the main loop takes about 2.5 seconds on real hardware, and that is one step of movement and one new picture. A missile leaves the rack every 6.69 s.
All of that is measured, not guessed — and if you would rather not play at 1982 speed, the switches below will speed it up.
Seven switches, all off
Anything that makes this nicer than the machine was is an addition, and an addition that is always on is indistinguishable from a bug — you can no longer tell what the game did. So every one lives behind a switch in the QOL panel, in the top right corner of the game screen, and every one starts off. A browser that has never seen this page plays the game the Apple II played.
The filters come off
These three are the odd ones out: they were already on, hard-coded into the blit, until someone asked why the text looked fuzzy. A bilinear upscale, a second pass in screen blending so bright pixels bleed, and a dark line every other row.
None of it was measured and none of it is what you are meant to be looking at — an Apple II pixel is a hard-edged pixel. Off is nearest-neighbour and nothing else. Turn them back on if you miss the glass.
Gamepad
Stick or d-pad to fly, A to fire, B for return, X for the weapon toggle, Y for the computer, shoulders for speed. The keyboard keeps working alongside it.
The stick is the interesting part. This game was built for paddles, and a paddle is analogue — so a stick hands the flight model a real deflection and the gentler turns become available. A key can only ever be full tilt.
Fast fire & smooth flight
Fast fire puts the trigger at about half a second. The machine tests the button once per pass of its main loop, which measured at 6.7 s for a missile and 6.0 s for the laser.
Smooth flight carries the view forward between steps, so the starfield drifts instead of jumping. The machine moves the ship once per pass — about every 2.9 seconds — and off is exactly that: one jump, then stillness. The ship's own position stays stepped either way.
Save slots
Four saved games instead of one, and a saved game that comes back where it was.
Off is the disk, and the disk is unkind here: it keeps one save, a new game destroys it, and the ship's position is in none of the three blocks it writes — so switching the machine off loses where you were and which planet you were at. That is faithfully reproduced, and this is the way out of it.
Where it came from
Space Vikings is a space-combat and conquest game for the Apple II,
published in 1982 by subLOGIC and developed by Mitchell Robbins - the
asterisk card says only G.M. ROBBINS, and it is the second opening
screen, the one with the grid, that credits either of them properly. You command one
ship in a galaxy of twenty planets: fly, fight whatever is defending the
place, bombard it, land troops, take the surrender, and move on. There is an economy
underneath — loot to sell, repairs to pay for, troops to enlist, bases to
build — and a crew whose morale you can wreck by working them without leave.
Technically it is a 140 KB DOS 3.3 floppy holding 23 chained Applesoft
BASIC programs, each of which RUNs the next, plus machine-language
modules for the things BASIC was far too slow for: the 3D projection, the shape
drawing, and the flight controls. Changing screen means loading a program off the
disk, which is why moving between the cockpit and the computer costs a visible
second and a quarter.
A single pass of the flight loop — read the paddles, move the ship, draw the starfield, flip the page — takes two and a half seconds. That is not emulation overhead. That is how fast the game ran in 1982.
How it was ported
Not by reading the BASIC and reimplementing it. The listings tell you what the author wrote; they do not tell you what the machine does — and on this project the difference turned out to matter again and again.
So the port is built against an oracle: the real game, running on an Apple II emulator inside a headless browser, driven by a script that can press keys, read memory and screenshot the hi-res page. Everything goes through two stages.
A probe asks the machine
Boot the disk, play to the thing in question, and record what happened — the bytes, the screen, the timing. The answer is written to a golden file. There are 113 of these.
A harness checks the port
Drive the port the same way, through its own screens, and compare against the golden — pixel for pixel where it is a picture, value for value where it is a number. There are 53 of these, and they all have to pass.
The disk wins
Where the port and the floppy disagree, the floppy is right — including when it is obviously a bug, and including when the manual says otherwise. The findings are written up as they are measured, in a document that is now about 6,700 lines long.
Several harnesses were, at one point, quietly meaningless: some built the screen they were about to compare against, and some printed a report and exited zero whatever it said. The flight controls were wrong for most of the project's life while forty-eight suites passed — the measurement existed, sat in a file, and nothing read it. Every harness now has to be shown failing before it is believed.
What the disk actually said
A sample of things that are true of the original, that nobody would have guessed, and that the port now does too.
Your position is not saved
The save writes three blocks to disk, and the sixteen bytes holding the ship's position and attitude sit in the gap between two of them. Save and continue in the same session and the ship is where you left it; switch the machine off first and it starts over, at the wrong planet.
The hardest turn is unreachable
The table that turns bank into heading has a strongest row, at a bank of 48. The clamp that stops you banking too far stops at 47. One short, so that row can never fire in play.
A half turn that is not half
Point the nose far enough back and the heading flips. The flip adds 126 and wraps at 253 — while every other angle on the ship wraps at 256. So it is not quite a half turn, and flipping twice leaves you one off where you started.
Shore leave, or else
Put your troops on the ground, then jump to another system without stopping for shore leave, and morale drops a point. Taking the leave is what clears it — and the flag is set before the game asks whether you will pay them. They got their leave either way. They just did not get paid.
15 FOR OO = 0 TO 1: IF PEEK(38164) = 1 THEN 20 19 J = PDL(1):K = PDL(0): POKE 38397,J: POKE 38398,K 20 P = PEEK(P1):B = PEEK(B1):H = PEEK(H1) 129 ... X = X + X1:Z = Z + Z1:Y = Y + Y1 ... 150 CALL CA