Filetrip will be closed definitely on March 31st. Please backup your files before the end of the month Filetrip is now permanently closed

Filetrip Logo

AGB Hack 1.6

Thumbnail 1 for AGB Hack
AGB_Hack version 1.6
Copyright (C) 2007 by Donnie Russell

AGB_Hack is based on RevivedHack 1.1,
an adaptation of Don G. Kneller's
PC Hack 3.61.

Level compression uses Markus Franz
Xaver Johannes Oberhumer's
miniLZO 1.08, a mini subset of the LZO
real-time data compression library.

History Of This Game

[1984?] Hack by Jay Fenlason with help from Kenny Woodland, Mike Thome and Jon

Inspired by Rogue, with twice as many monster types.

[1985] Hack 1.0.3 by Andries E. Brouwer.

Evolution of Jay Fenlason's Hack, more than three times larger.

[1986] PC Hack 3.61 by Don G. Kneller.

Hack 1.0.3 ported to MS-DOS, with new features and bugfixes.

[1987] NetHack project begins, organized by Mike Stephenson.

[2004] RevivedHack 1.1 by Donnie Russell.

PC Hack 3.61 updated for modern operating systems, with color, sound
effects, and bugfixes.

[2007] AGB_Hack 1.6 by Donnie Russell.

RevivedHack 1.1 ported to the GameBoy Advance, with level compression,
menus, graphical tiles, and bugfixes.


The software contained in this archive is freeware, and may not be sold in any
form for any reason whatsoever. This software is provided to the end-user
"as is", and comes with no warranty of any kind. In no event shall the
copyright owner be liable for any damage that may result from the use of this

This software may be redistributed provided that the original archive is
whole, intact, and unmodified. Only copies identical to the original
distribution archive available from my web site are authorized for
redistribution. Proper credit must be given to all people involved in the
creation of this software near the point of redistribution. Redistribution of
this software on cartridge media is strictly prohibited.

Getting Started

When the initial screen appears the game will ask you to enter your name. You
can allow the game to pick a name for you by pressing the START button (Enter
key), or you can enter one with the key selector. Turn it on by pressing the L
button, then type your name by moving the cursor around the alphabet with the
directional buttons, pressing the B button on each letter. Press the L button
to turn the selector off. When the selector is off, pressing the B button
(Backspace key) moves the cursor back one space. Press the START button to
enter your name.

At this point, the game will seed a sequence of random numbers based on the
amount of time elapsed since startup. Hack's gameplay is influenced by the
year, day of the year, and time of day, which are set to random values in the
GameBoy Advance version.

Next, you can select the type of character you would like to play, or have one
chosen for you randomly. Move the arrow-shaped cursor using the directional
buttons to the character you want then press the Enter, B, or A button. Each
character has its own strengths and weaknesses, so choose carefully.

Use the directional buttons to move your character. To move diagonally, hold
down the SELECT button, select the direction, then release the SELECT button.
To run, hold down the START button, select the direction, then release the
START button. You can also release the SELECT/START button before releasing
the directional buttons.

Roguelike games such as Hack are typically played by entering commands with
a keyboard. Since the GameBoy Advance doesn't have a keyboard, two alternative
input methods are available.

The easiest method is to press the Start button (Enter key) to open the game
menu, which consists of two screens, for objects and actions. Press the Left
and Right directional buttons to switch between them. Objects listed on the
object menu are those which you are currently carrying. Selecting an object on
this menu brings up a list of things you can do with that object. Some actions
on the actions menu also work on objects, either in your inventory or on the
ground. Pressing the R button (Escape key) exits the menu.

The second method is more cumbersome but also more flexible. Commands can be
entered by "typing" them with the key selector. Consult the two in-game help
screens that list the available commands (accessed with the '?' command), and
the meaning of various symbols (the '/' command) for more information.

While playing, some game messages are too numerous to be displayed at once. To
continue viewing the following message(s), press the A button (Space key).

To cancel a command in progress, press the R button (Escape key).

Entering the '@' command with the key selector toggles the automatic picking
up of objects on or off. This setting is off by default. Gold is always picked
up if it is the only object at your current location.

To repeat the last command (for example, to fire another arrow), open the key
selector with the L button, move the cursor to the 'a' key (the "again"
command) and press the R button. Thereafter, pressing L then R repeatedly will
continue entering the same command.

At the bottom of the display, you can see what dungeon level you are on, how
many hit points you have now and will have when fully recovered, how much gold
you are carrying, what your armor class is (the lower the better), your
strength, experience level and the state of your stomach. Please note that in
graphical tile mode some status information may be obscured by the minimap.

If you ever find yourself inside a room with no exits, use the 's' (search)
command repeatedly along the walls of the room. This command can also be used
to find hidden traps. By default, the Select button is defined as 's'.

To quit the current game, enter the 'Q' command with the key selector, or
select "Quit" from the actions menu screen.

How Saved Games Work

As you play AGB_Hack, each "keystroke" is recorded in a special area of memory
that is not erased when the power is turned off. Before ending a game session,
you should enter the command 'S' with the key selector to save and halt the
game, making it safe to turn off the power. If you accidentally turn off the
power without using this command first, there is a small chance that the saved
data will be corrupted.

To continue a previous game, turn on the console, and if a saved game is
found it will be played back to the point where you left off. During playback
a progress bar is displayed. Pressing and releasing the A button allows you to
switch the progress bar off so you can see each move being played. Holding
down the B button slows down each move. Saved games play back faster with the
progress bar turned on.

A Note About Memory

There is a limited amount of memory available for saving games, enough
for 65,523 "keystrokes". Any input made after this limit is not recorded, but
the game will continue playing normally. In my own experience, this limit has
never been reached, even for winning games.

Also, in testing, I have found that the GameBoy Advance has enough memory to
store around 30 visited dungeon levels, which theoretically is enough for a
complete winning game. Levels are compressed when not in use, and since the
amount of compression varies with each level, this is a very rough estimate.

If you attempt to visit more than 30 levels, there is an increasing chance
that the game will run out of memory. When that happens the dungeon will
collapse, immediately ending the current game. However, you will still be able
to see your final score.


I made adjustments to memory usage in version 1.6 that may lower the risk of
dungeon collapses, even after visiting 35 levels.


Buttons (key selector off)

A Type Space key

B Type Backspace key

L Turn key selector on

R Type Escape key (cancel command, close menu)

START Type Enter key (open game menu when game is waiting for a command)
When used with directional buttons: run in specified direction

SELECT Type defined key, initially 's' (search command)
When used with directional buttons: move in specified diagonal

Buttons (key selector on)

A Type Space key, keep key selector on

B Type selected key, keep key selector on

L Turn key selector off

R Type selected key, turn key selector off

START Type Enter key, turn key selector off

SELECT Define selected key, initially 's' (search command)

Change log (1.6):
1.3 -> 1.4


Menu command interface was added.

Graphics functions were optimized.

Removed "last_multi" so that "again" command always executes previous command
only once. This is to prevent, for example, repeated prompts for the object
and direction of the "throw" command after a count was used.

When "pick up" command is used, and gold and one item are at player's
location, pick up gold but ask before picking up item.

During saved game playback no sound effects are played and dungeon now

Key selector is positioned so as to avoid obscuring current position of

First byte of SRAM is skipped due to incompatibility with some hardware.

Bugs fixed

If you are levitating, and zap a wand of digging downwards, you'll still fall
into the hole you make.

Reading a scroll of food detection while you are confused is supposed to
detect potions. What it actually does is detect potions, except that when
counting the number of potions to show, it still counts food. This can cause
problems when there are different numbers of potions and foods on the board.

A scroll of destroy armor fails to operate on your shield.

If you read a scroll of enchant weapon while confused, the program fails to
check to see if you're actually wielding a weapon, which means that you can
wield your armor and rustproof it with an enchant weapon scroll.

Enchant or damage weapon, read while confused, fail to check for plural in
stating what happens to the weapon.

There doesn't seem to be any limit on how many hit points your pet can have.
Therefore, the pet can get negative or zero hit points if it wraps around
(past 127).

Wielding a dead cockatrice is safe, even if you aren't wearing gloves. (Gloves
are still required to safely pick one up, though, and you can't remove the
gloves while wielding it.)

Eating a dead bat sets confusion to 50, instead of adding 50. If you are very
confused, eating the bat could conceivably reduce your confusion.

When you wield a dead cockatrice against monsters, you are told that they turn
to stone, but the monsters only leave normal corpses.

A long worm that dies without leaving a corpse fails to print the worm tooth
on the screen.

If you eat a lump of royal jelly and it increases your strength but does
nothing else that would change the status line, the program fails to update
the status line.

Doing an inventory of gold will produce the response "1 gold pieces" (instead
of piece) if you only have 1.

A cockatrice that hits another cockatrice turns it to stone. However, when
you hit a cockatrice with a cockatrice corpse nothing happens.

When you zap a wand of undead turning at a corpse to bring it back to life,
the corpse doesn't get erased from the screen.

A cancelled rust monster can still rust your helmet, though not your armor.
A scorpion cannot be cancelled.

If you are confused and read a scroll of fire, you are damaged by the scroll
catching fire and burning your hands even if you are fire resistant.

You are damaged by scrolls catching fire after being hit by dragon fire or
bouncing wands of fire even if you are fire resistant.

'M' character remains on SDOOR after mimic is killed.

1.4 -> 1.5


Graphical tile mode was added (on by default).

Sound effects were changed, and new ones were added.

Cursor now wraps around at top and bottom of menus.

Bugs fixed

Lockup in xmore() caused by docrt() calling cls() calling more() calling
xmore() infinitely because flags.toplin was set. Fixed by setting
flags.toplin to 0 before calling docrt().

1.5 -> 1.6


Progress bar was added and is displayed by default when restoring saved game.
Visible playback can be toggled on/off by pressing A button. Visible playback
can be slowed by holding down B button.

levl[] was moved from EWRAM to IWRAM and data types of bitfields were adjusted
to conserve memory.

Bugs fixed

Player tile was displayed as guard when u.ux, did not match '@' position.

Dungeon offset did not follow cursor in getpos(). Previous bug prevented this
from being fixed.
comments powered by Disqus