Pac-In-Time

Description

A conversion of Fury of the Furries with the Pac-Man licence, this game was never released; the version available is a prototype owned by the developer. (The DOS, SNES and Game Boy versions were released.)

It's a puzzle action game, with keys, switches, ropes etc. which you (as Pac-Man) navigate by jumping and swinging from ropes.

I started mapping this game soon after the ROM was released, but gave up since it was impossible to see all of the background - the sky went too far. Then a few years later I decided to have a go at hacking it, and that turned out to be pretty easy.

The hack

In Meka I watched the RAM values changing as I jumped, isolating the ones that seemed to be determining the position of Pac-Man at $d604 and $d609. I typed values in and he warped around, and the camera chased after him.

I set write breakpoints to determine where these locations were being written to; there were just four places - two for movement (and gravity) in the x and y directions, and two for collision detection. I stubbed out the containing routines by writing a ret opcode at their first byte.

I disassembled the VBlank handler and handily it was just a jump to the real handler, followed by plenty of blank space. I didn't even have to install a hook, I could just use the space and end with the original jump.

WLA-DX's .background feature came in handy again, as I could just assemble directly over the top of the ROM.

.memorymap
defaultslot 0
slotsize $4000
slot 0 $0000
slot 1 $4000
slot 2 $8000
.endme

.rombankmap
bankstotal 16
banksize $4000
banks 16
.endro

.background "Pac In Time [Proto].gg"

.define Y $d604
.define X $d609

; free space here
.unbackground $38 $65

.bank 0 slot 0
.org $38
.section "hack" force
  push af
  push hl
    in a,($dc) ; get P1 inputs
    ld hl,(Y)
    bit 1,a
    jr nz,+
    inc hl
+:  bit 0,a
    jr nz,+
    dec hl
+:  ld (Y),hl
    ld hl,(X)
    bit 3,a
    jr nz,+
    inc hl
+:  bit 2,a
    jr nz,+
    dec hl
+:  ld (X),hl
  pop hl
  pop af

  ; resume game
  jp $2524
.ends

.bank 1 slot 1
.orga $448b
.section "patch Y movement" overwrite
ret
.ends

.orga $445d
.section "patch Y collision" overwrite
ret
.ends

.orga $44a1
.section "patch X movement" overwrite
ret
.ends

.orga $437d
.section "patch X collision" overwrite
ret
.ends

This lets the joypad control Pac-Man's position directly, moving at one pixel per frame. Interestingly, with the movement routines stubbed out, the enemies no longer moved, which was helpful to avoid death and to capture their starting positions.

Brief game guide

Pac-Man is attempting to get to the end of some levels for some reason.

In each level he will have certain "items" that give him abilities:

  • Bubbles let him swim underwater, and shoot bubbles when underwater
  • Rope lets him swing Spider-Man style through the level
  • The fireball lets him attack enemies and scenery
  • The hammer lets him bite through certain bricks

Sometimes you will see an electric field that will add or remove an item from Pac-Man each time you pass through it.

Controls:

  • U/D/L/R = walk/swim/aim/swing/change rope length
  • 1 = shoot/bite/deploy rope
  • 2 = jump (hold to bounce)
  • Start = change equipped "item"

Level 1

Level 1-1 (6KB, GetAttachDims) Level 1-2 (8KB, GetAttachDims) Level 1-3 (9KB, GetAttachDims) Level 1-4 (8KB, GetAttachDims) Level 1-5 (10KB, GetAttachDims) Level 1-6 (8KB, GetAttachDims) Level 1-7 (13KB, GetAttachDims) Level 1-8 (7KB, GetAttachDims) Level 1-9 (9KB, GetAttachDims) Level 1-10 (9KB, GetAttachDims)

Level 2

Level 2-1 (13KB, GetAttachDims) Level 2-2 (11KB, GetAttachDims) Level 2-3 (14KB, GetAttachDims) Level 2-4 (11KB, GetAttachDims) Level 2-5 (11KB, GetAttachDims) Level 2-6 (10KB, GetAttachDims) Level 2-7 (15KB, GetAttachDims) Level 2-8 (18KB, GetAttachDims) Level 2-9 (15KB, GetAttachDims) Level 2-10 (13KB, GetAttachDims)

Level 3

Level 3-1 (12KB, GetAttachDims) Level 3-2 (19KB, GetAttachDims) Level 3-3 (13KB, GetAttachDims) Level 3-4 (7KB, GetAttachDims) Level 3-5 (7KB, GetAttachDims) Level 3-6 (6KB, GetAttachDims) Level 3-7 (9KB, GetAttachDims) Level 3-8 (8KB, GetAttachDims) Level 3-9 (10KB, GetAttachDims) Level 3-10 (10KB, GetAttachDims)

Level 4

Level 4-1 (10KB, GetAttachDims) Level 4-2 (7KB, GetAttachDims) Level 4-3 (9KB, GetAttachDims) Level 4-4 (10KB, GetAttachDims) Level 4-5 (10KB, GetAttachDims) Level 4-6 (12KB, GetAttachDims) Level 4-7 (7KB, GetAttachDims) Level 4-8 (7KB, GetAttachDims) Level 4-9 (3KB, GetAttachDims) Level 4-10 (3KB, GetAttachDims)

Credits

Credits (2KB, GetAttachDims)

The Kalisto Team

- Coding -
Gil Espeche

Additional Graphics
Francois Rimasson

- Original Design -
Cyrille Fontaine

- Music -
Frederic Motte

-Technical Director-
Olivier Goguel

- Producer -
Thierry Robin

Thanks to Namco and Mindscape

The End