100s of games at your fingertips, as long as your fingertips are on an Apple ][
Go to file
Andrew Roughan 1f780da57c
Gamehelp (#228)
* Create hw.mockingboard.a

* Call HasMockingboard

* Mockingboard Detection

* Mockingboard Detection

* Mockingboard Detection update for FastChip //e

* Mockingboard Detection

* Mockingboard Detection

* Mockingboard Detection

* Add files via upload

* Mockingboard Detection

* Delete hw.mockingboard.a

* Correct location for Lancaster.a

* Pitfall II Mockingboard patch

* Add mockingboard patch to Berzap

Removed re-entry check because code is so long that it wont survive on stack. Instead have patched out the cheat2 entry so the code is only executed once.

* Changes requested by 4am

* Resolve conflicts

* Resolve conflicts

* Gamehelp from roughana

AE
Aztec

* Gamehelp from roughana

Aztec

* Update AZTEC

* Update AZTEC

* Update AZTEC

* Gamehelp Roughana

Beer Run
Bruce Lee
Cannonball Blitz

* Gamehelp

Bolo
The Bilestoad

* Gamehelp

Death Sword
Skyfox

* Gamehelp

Thexder

* Gamehelp

Black Magic
Summer Games II

* Gamehelp

Crisis Mountain
Cyber Strike

* Gamehelp

Alcazar, Cyclod, Drelbs, Gumball, Mr Cool, Pitfall II, Short Circuit, Situation Critical, Spy Hunter, Castle Wolfenstein

* Gamehelp

Alcazar, Mr Cool, Situation Critical

* Gamehelp requested fixes

Gumball, Pitfall II, Castle Wolfenstein

* Gamehelp

Bad Dudes
Ballblazer
Battlezone

* Gamehelp

Batman

* Gamehelp

Bad Dudes

* Gamehelp

Ankh
Apple Panic
Arkanoid
Axis Assassin

* Update ANKH

* Gamehelp

Berzap
Dung Beetles
Eggs It
Falcons
Free Fall

* Update FREE.FALL

* Gamehelp

Gamma Goblins
Genetic Drift
Gorgon
Gremlins
Guardian

* Gamehelp

Hadron
Ikari Warriors
International Grand Prix
Summer Games

* Gamehelp

Jungle Hunt
Karateka

* Gamehelp

Labyrinth
Moon Patrol
Ms Pacman
Pacman

* Gamehelp

Resolve conflict
2020-05-31 08:51:38 -04:00
bin Fix make attract on Linux (#176) 2020-05-03 15:03:17 -04:00
res add assets for Oid Zone, update changelog 2020-05-30 09:56:07 -04:00
src shave some bytes 2020-05-30 11:14:04 -04:00
.gitignore refactoring transition scripts 2019-10-29 10:11:35 -04:00
LICENSE . 2020-03-21 10:58:20 -04:00
Makefile Icon for GS/OS finder (#209) 2020-05-20 22:53:38 -04:00
README.md update developer docs 2020-03-12 19:25:00 -04:00
winmake.bat strip CR from credits and helptext 2020-04-05 12:37:13 -07:00

Is this page for you?

Download the latest Total Replay disk image at the archive.org home page if you just want to play hundreds of Apple II games. The rest of this page is for developers who want to work with the source code and assemble it themselves.

Building the code

Mac OS X

You will need

Then open a terminal window and type

$ cd 4cade/
$ make

If all goes well, the build/ subdirectory will contain a 4cade.2mg image which can be mounted in emulators like OpenEmulator or Virtual II.

Windows

You will need

(Those tools will need to be added to your command-line PATH.)

Then open a CMD.EXE window and type

C:\> CD 4CADE
C:\4cade> WINMAKE

If all goes well, the BUILD\ subdirectory will contain a 4CADE.2MG image which can be mounted in emulators like AppleWin.

Navigating the code

Initialization

4cade.a is the main assembler target. It builds the launcher itself. Launcher code is split into code that can be run once from main memory then discarded, and code which is relocated to the language card and persists throughout the lifetime of the launcher. As the language card is only 16KB and will also need to store some persistent data structures, memory is precious and tightly managed.

4cade.init.a contains the code that is run once at program startup. First, we do some hardware detection, like how much memory you have, whether you have a joystick, and whether you have a IIgs. Then we relocate selected code to the language card. constants.a has a rough map of what ends up where, within the language card and its overlapping memory regions. Then we load and parse the global preferences file (PREFS.CONF) and master game list (GAMES.CONF) and store the results in the language card. Finally, we jump to the main entry point (Reenter). The launcher is initialized; anything left in main memory is discarded.

Search mode

There are three major modes in the launcher: search mode, browse mode, and mega-attract mode. Search mode is the default, and it is always the first mode you enter when launching the program. ui.search.mode.a tracks your keystrokes to determine the best match within the game list for the keys you have typed, then loads the game's title screenshot and displays the game name and other information at the bottom of the screen. If you have not yet typed any keys, it displays the title page and welcome message instead. The InputKeys table documents all other recognized keys.

The text ranking algorithm is in textrank.a. It was inspired by Quicksilver but is an independent implementation.

Browse mode

The user enters browse mode by pressing the right or down arrow key. ui.browse.mode.a then watches for other arrow keys and displays the next or previous game in the game list. The BrowseKeys table documents all other recognized keys.

Mega-Attract mode

If the user presses Esc from any other mode, or does not type anything for 30 seconds, the launcher goes into Mega-Attract mode, a.k.a. screensaver mode. ui.attract.mode.a manages loading and executing attract mode modules. An attract mode module can be a short slideshow, a self-running demo, or just a single screenshot. Modules are listed in ATTRACT.CONF and are run in order until end-of-file, then it starts over from the beginning. The entire cycle is quite long (several hours), and some screenshots appear in multiple slideshows, but there is no actual randomness in selecting the next attract mode module.