master 25243550b6e1 cached
582 files
1.4 MB
775.2k tokens
1 requests
Download .txt
Showing preview only (1,574K chars total). Download the full file or copy to clipboard to get everything.
Repository: jmechner/Prince-of-Persia-Apple-II
Branch: master
Commit: 25243550b6e1
Files: 582
Total size: 1.4 MB

Directory structure:
gitextract_ss962m30/

├── .gitattributes
├── 01 POP Source/
│   ├── Images/
│   │   ├── IMG.BGTAB1.DUN
│   │   ├── IMG.BGTAB1.PAL
│   │   ├── IMG.BGTAB2.DUN
│   │   ├── IMG.BGTAB2.PAL
│   │   ├── IMG.CHTAB1
│   │   ├── IMG.CHTAB2
│   │   ├── IMG.CHTAB3
│   │   ├── IMG.CHTAB4.FAT
│   │   ├── IMG.CHTAB4.GD
│   │   ├── IMG.CHTAB4.SHAD
│   │   ├── IMG.CHTAB4.SKEL
│   │   ├── IMG.CHTAB4.VIZ
│   │   ├── IMG.CHTAB5
│   │   ├── IMG.CHTAB6.A
│   │   ├── IMG.CHTAB6.B
│   │   └── IMG.CHTAB7
│   ├── Levels/
│   │   ├── LEVEL0
│   │   ├── LEVEL1
│   │   ├── LEVEL10
│   │   ├── LEVEL11
│   │   ├── LEVEL12
│   │   ├── LEVEL13
│   │   ├── LEVEL14
│   │   ├── LEVEL2
│   │   ├── LEVEL3
│   │   ├── LEVEL4
│   │   ├── LEVEL5
│   │   ├── LEVEL6
│   │   ├── LEVEL7
│   │   ├── LEVEL8
│   │   └── LEVEL9
│   └── Source/
│       ├── AUTO.S
│       ├── BGDATA.S
│       ├── BOOT.S
│       ├── COLL.S
│       ├── CTRL.S
│       ├── CTRLSUBS.S
│       ├── EQ.S
│       ├── FRAMEADV.S
│       ├── FRAMEDEF.S
│       ├── GAMEBG.S
│       ├── GAMEEQ.S
│       ├── GRAFIX.S
│       ├── HIRES.S
│       ├── HRPARAMS.S
│       ├── HRTABLES.S
│       ├── MASTER.S
│       ├── MISC.S
│       ├── MOVEDATA.S
│       ├── MOVER.S
│       ├── SEQDATA.S
│       ├── SEQTABLE.S
│       ├── SOUND.S
│       ├── SOUNDNAMES.S
│       ├── SPECIALK.S
│       ├── SUBS.S
│       ├── TABLES.S
│       ├── TOPCTRL.S
│       ├── UNPACK.S
│       └── VERSION.S
├── 02 POP Disk Routines/
│   ├── CP.525/
│   │   ├── CUBE.S
│   │   ├── LOSHOW.S
│   │   ├── POPBOOT0.S
│   │   ├── PURPLE.MAIN.S
│   │   ├── PURPLE.S
│   │   ├── RYELLOW1.S
│   │   ├── UPDATE.LS.S
│   │   └── YELLOW.MAIN.S
│   └── RW1835/
│       ├── DEMOBOOT.S
│       ├── MOVE35.S
│       ├── MOVE53.S
│       ├── POPBOOT35.S
│       ├── RW1835.POP.S
│       └── RW1835.S
├── 03 Disk Protection/
│   ├── CUBE.S
│   ├── LOSHOW.S
│   ├── POPBOOT0.S
│   ├── PURPLE.MAIN.S
│   ├── RYELLOW1.S
│   ├── UPDATE.LS.S
│   └── YELLOW.MAIN.S
├── 04 Support/
│   ├── DRAZ/
│   │   ├── F/
│   │   │   ├── COLLAPSE
│   │   │   ├── DBS
│   │   │   ├── DRAW
│   │   │   ├── DRAW.LG
│   │   │   ├── DRAW.SM
│   │   │   ├── DRINK
│   │   │   ├── IMG.ALPHA
│   │   │   ├── IMG.CHTAB5
│   │   │   ├── IMG.CHTABLE4
│   │   │   ├── IMG.CHTABLE4.W
│   │   │   ├── IMG.TEXTSET
│   │   │   ├── PAC.ADVANCE
│   │   │   ├── PAC.BASIL
│   │   │   ├── PAC.BIGBLOX
│   │   │   ├── PAC.BIGBLOX2
│   │   │   ├── PAC.BLADE
│   │   │   ├── PAC.BLONDGIRL
│   │   │   ├── PAC.BLUELINE
│   │   │   ├── PAC.BONES
│   │   │   ├── PAC.BYZ1
│   │   │   ├── PAC.C5.B
│   │   │   ├── PAC.CLEANCLIMB
│   │   │   ├── PAC.CLIMB.CLEAN
│   │   │   ├── PAC.CLIMBUP
│   │   │   ├── PAC.CLIMBUPA
│   │   │   ├── PAC.CLIMBUPB
│   │   │   ├── PAC.CLIMBUPC
│   │   │   ├── PAC.COLL1
│   │   │   ├── PAC.COLL2
│   │   │   ├── PAC.COLL3
│   │   │   ├── PAC.COLLAPSE
│   │   │   ├── PAC.DBS
│   │   │   ├── PAC.DRAW
│   │   │   ├── PAC.DRAW1
│   │   │   ├── PAC.DRINK
│   │   │   ├── PAC.DRINK1
│   │   │   ├── PAC.EXITARCH
│   │   │   ├── PAC.FALLWSWORD
│   │   │   ├── PAC.FANCYARCH
│   │   │   ├── PAC.FANCYEXIT
│   │   │   ├── PAC.FITING
│   │   │   ├── PAC.FLAME
│   │   │   ├── PAC.GOSTONES
│   │   │   ├── PAC.GRID
│   │   │   ├── PAC.GUARD
│   │   │   ├── PAC.GUARDMOD
│   │   │   ├── PAC.GUARDMOD.BK
│   │   │   ├── PAC.GUARDMOD2
│   │   │   ├── PAC.GUARDMODEL
│   │   │   ├── PAC.GUY1
│   │   │   ├── PAC.GUY1.CLEAN
│   │   │   ├── PAC.GUY1.REV1
│   │   │   ├── PAC.GUY2
│   │   │   ├── PAC.GUY2.CLEAN
│   │   │   ├── PAC.GUY2.REV1
│   │   │   ├── PAC.GUY3.CLEAN
│   │   │   ├── PAC.GUY3.REV1
│   │   │   ├── PAC.GUY4.CLEAN
│   │   │   ├── PAC.GUY4.REV1
│   │   │   ├── PAC.GUYBLOCK
│   │   │   ├── PAC.GUYMODEL
│   │   │   ├── PAC.GUYMODEL.GD
│   │   │   ├── PAC.HALVES
│   │   │   ├── PAC.HIBLOX
│   │   │   ├── PAC.IMPALED
│   │   │   ├── PAC.JUMPFALL
│   │   │   ├── PAC.JUMPHANG
│   │   │   ├── PAC.L1
│   │   │   ├── PAC.L2
│   │   │   ├── PAC.L3
│   │   │   ├── PAC.LITEBRIX
│   │   │   ├── PAC.MAGICFIRE
│   │   │   ├── PAC.MSG
│   │   │   ├── PAC.PANELS
│   │   │   ├── PAC.PRINCESS
│   │   │   ├── PAC.ROB1
│   │   │   ├── PAC.ROB1.REV
│   │   │   ├── PAC.ROB1.REV0
│   │   │   ├── PAC.ROB1.REV1
│   │   │   ├── PAC.ROB1MID
│   │   │   ├── PAC.ROB1SM
│   │   │   ├── PAC.ROB2
│   │   │   ├── PAC.ROB2.REV
│   │   │   ├── PAC.ROB2MID
│   │   │   ├── PAC.ROB2SM
│   │   │   ├── PAC.ROB3
│   │   │   ├── PAC.ROB3.REV
│   │   │   ├── PAC.ROB3MID
│   │   │   ├── PAC.ROB4
│   │   │   ├── PAC.ROB4MID
│   │   │   ├── PAC.ROB4SM
│   │   │   ├── PAC.ROBGUYSTR
│   │   │   ├── PAC.ROBMODEL
│   │   │   ├── PAC.ROBSTANCES
│   │   │   ├── PAC.RUN
│   │   │   ├── PAC.RUNJUMP
│   │   │   ├── PAC.RUNWSWORD
│   │   │   ├── PAC.SLICE
│   │   │   ├── PAC.STANDJUMP
│   │   │   ├── PAC.STEPFWD
│   │   │   ├── PAC.STEPFWD.T
│   │   │   ├── PAC.STRIKE
│   │   │   ├── PAC.STRIKEBLOCK
│   │   │   ├── PAC.STRIKESCRN
│   │   │   ├── PAC.STRTSLICE
│   │   │   ├── PAC.TORCHONWALL
│   │   │   ├── PAC.TUNNEL
│   │   │   ├── PAC.TURNROUND
│   │   │   └── ROB3SM
│   │   ├── I/
│   │   │   ├── C1.A
│   │   │   ├── C1.B
│   │   │   ├── C1.C
│   │   │   ├── C2.A
│   │   │   ├── C2.B
│   │   │   ├── C2.C
│   │   │   ├── C3.A
│   │   │   ├── C3.C
│   │   │   ├── C4.GD.A
│   │   │   ├── C4.GD.B
│   │   │   ├── C4.SH.A
│   │   │   ├── C4.SH.B
│   │   │   ├── C4.SKEL.A
│   │   │   ├── C4.SKEL.B
│   │   │   ├── C4.VIZ.A
│   │   │   ├── C4.VIZ.B
│   │   │   ├── C5.A
│   │   │   ├── C5.B
│   │   │   ├── C6.A
│   │   │   ├── C6.B
│   │   │   ├── C6.C
│   │   │   ├── C6.D
│   │   │   ├── C6.E
│   │   │   ├── IMG.BGTAB1.DUN
│   │   │   ├── IMG.BGTAB1.PAL
│   │   │   ├── IMG.BGTAB1.PALB
│   │   │   ├── IMG.BGTAB2.DUN
│   │   │   ├── IMG.BGTAB2.DUNN
│   │   │   ├── IMG.BGTAB2.PAL
│   │   │   ├── IMG.BGTAB2.PALB
│   │   │   ├── IMG.BGTAB2.PALN
│   │   │   ├── IMG.CHTAB1
│   │   │   ├── IMG.CHTAB2
│   │   │   ├── IMG.CHTAB3
│   │   │   ├── IMG.CHTAB4.FAT
│   │   │   ├── IMG.CHTAB4.GD
│   │   │   ├── IMG.CHTAB4.SHAD
│   │   │   ├── IMG.CHTAB4.SKEL
│   │   │   ├── IMG.CHTAB4.VIZ
│   │   │   ├── IMG.CHTAB5
│   │   │   ├── IMG.CHTAB6.A
│   │   │   ├── IMG.CHTAB6.A.BK
│   │   │   ├── IMG.CHTAB6.B
│   │   │   ├── IMG.CHTAB7
│   │   │   ├── IMG.EDTABLE
│   │   │   ├── PAC.C1.A
│   │   │   ├── PAC.C1.B
│   │   │   ├── PAC.C1.C
│   │   │   ├── PAC.C2.A
│   │   │   ├── PAC.C2.B
│   │   │   ├── PAC.C2.C
│   │   │   ├── PAC.C3.A
│   │   │   ├── PAC.C3.B
│   │   │   ├── PAC.C3.C
│   │   │   ├── PAC.C4.B
│   │   │   ├── PAC.C4.C
│   │   │   ├── PAC.C4.FAT.A
│   │   │   ├── PAC.C4.FAT.B
│   │   │   ├── PAC.C4.GD.A
│   │   │   ├── PAC.C4.GD.B
│   │   │   ├── PAC.C4.SH.A
│   │   │   ├── PAC.C4.SH.B
│   │   │   ├── PAC.C4.SKEL.A
│   │   │   ├── PAC.C4.SKEL.B
│   │   │   ├── PAC.C4.VIZ.A
│   │   │   ├── PAC.C4.VIZ.B
│   │   │   ├── PAC.C5.A
│   │   │   ├── PAC.C5.B
│   │   │   ├── PAC.C6.A
│   │   │   ├── PAC.C6.B
│   │   │   ├── PAC.C6.C
│   │   │   ├── PAC.C6.D
│   │   │   ├── PAC.C6.E
│   │   │   ├── PAC.GRID
│   │   │   ├── PAC.MOUSE
│   │   │   ├── PAC.PMODEL
│   │   │   ├── PAC.PWALK1
│   │   │   ├── PAC.SHEATHE
│   │   │   ├── PAC.VCAST
│   │   │   ├── PAC.VCAST1
│   │   │   ├── PAC.VCAST2
│   │   │   ├── PAC.VTURN
│   │   │   ├── PAC.VTURN1
│   │   │   ├── PAC.VWALK
│   │   │   ├── PAC.VWALK1
│   │   │   └── PAC.VWALK2
│   │   ├── IP/
│   │   │   ├── IMG.BG2.HARL
│   │   │   ├── IMG.BGPAL2.BK
│   │   │   ├── IMG.BGTAB.DUN1
│   │   │   ├── IMG.BGTAB.DUN2
│   │   │   ├── IMG.BGTAB.PAL1
│   │   │   ├── IMG.BGTAB.PAL2
│   │   │   ├── IMG.BGTAB.RED1
│   │   │   ├── IMG.BGTAB.RED2
│   │   │   ├── IMG.BGTAB.TWR1
│   │   │   ├── IMG.BGTAB.TWR2
│   │   │   ├── IMG.BGTAB1.PAL
│   │   │   ├── IMG.BGTAB2.PAL
│   │   │   ├── IMG.BGTABLE1
│   │   │   ├── IMG.BGTABLE1.B
│   │   │   ├── IMG.BGTABLE1.BK
│   │   │   ├── IMG.BGTABLE2
│   │   │   ├── IMG.BGTABLE2.B
│   │   │   ├── IMG.BKUP
│   │   │   ├── IMG.BYZ4
│   │   │   ├── IMG.CHTAB4.FAT
│   │   │   ├── IMG.CHTAB4.GD
│   │   │   ├── IMG.CHTAB4.SKEL
│   │   │   ├── IMG.CHTAB4.VIZ
│   │   │   ├── IMG.CHTAB5.BK
│   │   │   ├── IMG.CHTABLE1
│   │   │   ├── IMG.CHTABLE2
│   │   │   ├── IMG.CHTABLE3
│   │   │   ├── IMG.CHTABLE4
│   │   │   ├── IMG.CHTABLE4.GD
│   │   │   ├── IMG.CHTABLE4.SH
│   │   │   ├── IMG.CHTABLE5
│   │   │   ├── IMG.CHTABLE5.B
│   │   │   ├── IMG.EDTABLE
│   │   │   ├── IMG.PAL2.BK
│   │   │   ├── IMG.PANELS
│   │   │   ├── IMG.TEXTSET
│   │   │   ├── MIR
│   │   │   ├── PAC.ARCH
│   │   │   ├── PAC.ARCHES
│   │   │   ├── PAC.ARCHMOD
│   │   │   ├── PAC.ARRS
│   │   │   ├── PAC.BACKBRICKS
│   │   │   ├── PAC.BALC
│   │   │   ├── PAC.BG1
│   │   │   ├── PAC.BG1.B
│   │   │   ├── PAC.BG1.GR
│   │   │   ├── PAC.BG2
│   │   │   ├── PAC.BG2.B
│   │   │   ├── PAC.BG3
│   │   │   ├── PAC.BG3.B
│   │   │   ├── PAC.BGTAB.PAL2
│   │   │   ├── PAC.BGTAB2.PAL
│   │   │   ├── PAC.BOOKS
│   │   │   ├── PAC.BORDERS
│   │   │   ├── PAC.BYZ3
│   │   │   ├── PAC.BYZ4
│   │   │   ├── PAC.BYZ5
│   │   │   ├── PAC.BYZ6
│   │   │   ├── PAC.BYZ7
│   │   │   ├── PAC.CHTABLE4.SH
│   │   │   ├── PAC.DAR1
│   │   │   ├── PAC.DAR2
│   │   │   ├── PAC.DAR3
│   │   │   ├── PAC.DAR4
│   │   │   ├── PAC.DAR5
│   │   │   ├── PAC.DAR6
│   │   │   ├── PAC.DAR7
│   │   │   ├── PAC.DAYTIME
│   │   │   ├── PAC.DEAD
│   │   │   ├── PAC.DIE
│   │   │   ├── PAC.DOC
│   │   │   ├── PAC.DUNJBLOX
│   │   │   ├── PAC.DUNJBRIX
│   │   │   ├── PAC.EXIT
│   │   │   ├── PAC.FATMODEL
│   │   │   ├── PAC.FIVE
│   │   │   ├── PAC.FIVE1
│   │   │   ├── PAC.FIVE2
│   │   │   ├── PAC.FLASKS
│   │   │   ├── PAC.G
│   │   │   ├── PAC.G1.PAL
│   │   │   ├── PAC.G2.PAL
│   │   │   ├── PAC.G3
│   │   │   ├── PAC.G3.PAL
│   │   │   ├── PAC.G4.PAL
│   │   │   ├── PAC.G5
│   │   │   ├── PAC.G5.PAL
│   │   │   ├── PAC.G6.PAL
│   │   │   ├── PAC.GRAYFRONT
│   │   │   ├── PAC.GREEN
│   │   │   ├── PAC.GUARDMODEL
│   │   │   ├── PAC.GUYMODEL
│   │   │   ├── PAC.HALLOWEEN
│   │   │   ├── PAC.HASSANMOD
│   │   │   ├── PAC.IMPALED
│   │   │   ├── PAC.JOIN
│   │   │   ├── PAC.JOIN2
│   │   │   ├── PAC.LWIND
│   │   │   ├── PAC.MASKMODEL
│   │   │   ├── PAC.MEDWIND
│   │   │   ├── PAC.MIR
│   │   │   ├── PAC.MIR1
│   │   │   ├── PAC.MIR2
│   │   │   ├── PAC.MIR3
│   │   │   ├── PAC.MUSTARD
│   │   │   ├── PAC.NAR
│   │   │   ├── PAC.NEWDOR
│   │   │   ├── PAC.NITETIME
│   │   │   ├── PAC.NOSTRIPE
│   │   │   ├── PAC.PAL1
│   │   │   ├── PAC.PAL2
│   │   │   ├── PAC.PARCH
│   │   │   ├── PAC.PAT
│   │   │   ├── PAC.PNB
│   │   │   ├── PAC.PR2
│   │   │   ├── PAC.PRINC2
│   │   │   ├── PAC.PRINC4
│   │   │   ├── PAC.PRINC5
│   │   │   ├── PAC.PRINC6
│   │   │   ├── PAC.PROOM
│   │   │   ├── PAC.PSKETCHES
│   │   │   ├── PAC.Q
│   │   │   ├── PAC.RIM
│   │   │   ├── PAC.ROBMODEL
│   │   │   ├── PAC.ROW
│   │   │   ├── PAC.ROW10
│   │   │   ├── PAC.ROW11
│   │   │   ├── PAC.ROW12
│   │   │   ├── PAC.ROW13
│   │   │   ├── PAC.ROW14
│   │   │   ├── PAC.ROW15
│   │   │   ├── PAC.ROW16
│   │   │   ├── PAC.ROW17
│   │   │   ├── PAC.ROW18
│   │   │   ├── PAC.ROW2
│   │   │   ├── PAC.ROW20
│   │   │   ├── PAC.ROW21
│   │   │   ├── PAC.ROW22
│   │   │   ├── PAC.ROW24
│   │   │   ├── PAC.ROW25
│   │   │   ├── PAC.ROW26
│   │   │   ├── PAC.ROW3
│   │   │   ├── PAC.ROW30
│   │   │   ├── PAC.ROW31
│   │   │   ├── PAC.ROW33
│   │   │   ├── PAC.ROW34
│   │   │   ├── PAC.ROW35
│   │   │   ├── PAC.ROW36
│   │   │   ├── PAC.ROW37
│   │   │   ├── PAC.ROW4
│   │   │   ├── PAC.ROW40
│   │   │   ├── PAC.ROW41
│   │   │   ├── PAC.ROW6
│   │   │   ├── PAC.ROW8
│   │   │   ├── PAC.ROW9
│   │   │   ├── PAC.SHADMODEL
│   │   │   ├── PAC.SKELMOD
│   │   │   ├── PAC.SKELMOD2
│   │   │   ├── PAC.SKELMODBK
│   │   │   ├── PAC.SKELMODEL
│   │   │   ├── PAC.SKELPILE
│   │   │   ├── PAC.SMEAR
│   │   │   ├── PAC.SMEAWR
│   │   │   ├── PAC.SS
│   │   │   ├── PAC.SS1
│   │   │   ├── PAC.SS2
│   │   │   ├── PAC.SS3
│   │   │   ├── PAC.SS4
│   │   │   ├── PAC.SS5
│   │   │   ├── PAC.SS6
│   │   │   ├── PAC.SS7
│   │   │   ├── PAC.SSEX
│   │   │   ├── PAC.TEMPLATE
│   │   │   ├── PAC.TEMPO
│   │   │   ├── PAC.TEST
│   │   │   ├── PAC.TEST2
│   │   │   ├── PAC.TEXT
│   │   │   ├── PAC.TIN
│   │   │   ├── PAC.TORCHSETS
│   │   │   ├── PAC.VIZMODEL
│   │   │   ├── PAC.WITE
│   │   │   ├── PAL1
│   │   │   ├── PRINC2
│   │   │   ├── PRINCESS2
│   │   │   ├── PROOM
│   │   │   ├── TEST
│   │   │   └── TEST2
│   │   ├── SS/
│   │   │   ├── PAC.HG
│   │   │   ├── PAC.HG1
│   │   │   ├── PAC.HG3
│   │   │   ├── PAC.ROOM
│   │   │   ├── PAC.ROOM2
│   │   │   ├── PAC.SS0
│   │   │   ├── PAC.SS1
│   │   │   ├── PAC.SS11
│   │   │   ├── PAC.SS4
│   │   │   ├── PAC.SS6
│   │   │   ├── PAC.SS7
│   │   │   ├── PAC.SS8
│   │   │   ├── PAC.SS9
│   │   │   ├── PAC.SS98
│   │   │   ├── PAC.SS99
│   │   │   ├── PAC.WINDZ
│   │   │   ├── SLIDE
│   │   │   ├── SS0
│   │   │   ├── SS0.OLD
│   │   │   ├── SS1
│   │   │   ├── SS10
│   │   │   ├── SS11
│   │   │   ├── SS12
│   │   │   ├── SS13
│   │   │   ├── SS14
│   │   │   ├── SS4
│   │   │   ├── SS5
│   │   │   ├── SS6
│   │   │   ├── SS7
│   │   │   ├── SS8
│   │   │   ├── SS9
│   │   │   ├── TEST
│   │   │   └── VILL
│   │   └── Z
│   ├── Levels/
│   │   ├── Finder.Data
│   │   ├── LEVEL0
│   │   ├── LEVEL1
│   │   ├── LEVEL10
│   │   ├── LEVEL11
│   │   ├── LEVEL12
│   │   ├── LEVEL13
│   │   ├── LEVEL14
│   │   ├── LEVEL2
│   │   ├── LEVEL3
│   │   ├── LEVEL4
│   │   ├── LEVEL5
│   │   ├── LEVEL6
│   │   ├── LEVEL7
│   │   ├── LEVEL8
│   │   └── LEVEL9
│   └── MakeDisk/
│       ├── DRAZ/
│       │   ├── BLAST18.S
│       │   ├── DRAZ.S
│       │   ├── DRAZMOVER.S
│       │   ├── GBLAST.S
│       │   ├── GBLAST2.S
│       │   ├── GRAB.S
│       │   ├── HIRES.S
│       │   ├── HRPARAMS.S
│       │   ├── HRTABLEQ.S
│       │   ├── HRTABLES.S
│       │   └── MBLAST.S
│       ├── EDSORC/
│       │   ├── BSUBS.S
│       │   ├── BUILDER.S
│       │   ├── BUILDEREQ.S
│       │   ├── DBLHIRES.S
│       │   ├── DBLIMAGE.S
│       │   ├── DEBUGS.S
│       │   ├── DIALOGER.S
│       │   ├── EDDATA.S
│       │   ├── EDDEBUGS.S
│       │   ├── EDITOR.S
│       │   ├── EDMASTER.S
│       │   ├── MENUDATA.S
│       │   └── TEXTSET.S
│       ├── FORMAT18.S
│       ├── INSTALL18.S
│       ├── S/
│       │   ├── AUTO.S
│       │   ├── BGDATA.S
│       │   ├── BOOT.S
│       │   ├── CHARCOMMENTS.S
│       │   ├── COLL.S
│       │   ├── COMMENTS.S
│       │   ├── CTRL.S
│       │   ├── CTRLSUBS.S
│       │   ├── DEBUGS.S
│       │   ├── EQ.S
│       │   ├── FRAMEADV.S
│       │   ├── FRAMEDEF.S
│       │   ├── GAMEBG.S
│       │   ├── GAMEEQ.S
│       │   ├── GRAFIX.S
│       │   ├── GRAFIX525.S
│       │   ├── HIRES.S
│       │   ├── HRPARAMS.S
│       │   ├── HRTABLES.S
│       │   ├── MASTER.S
│       │   ├── MASTER525.S
│       │   ├── MISC.S
│       │   ├── MOVEDATA.S
│       │   ├── MOVER.S
│       │   ├── MSYS.S
│       │   ├── PURPLE.S
│       │   ├── RYELLOW1.S
│       │   ├── SEQDATA.S
│       │   ├── SEQTABLE.S
│       │   ├── SHSTUFF.S
│       │   ├── SOUND.S
│       │   ├── SOUNDNAMES.S
│       │   ├── SPECIALK.S
│       │   ├── SUBS.S
│       │   ├── TABLES.S
│       │   ├── TOPCTRL.S
│       │   ├── UNPACK.S
│       │   ├── UNPACK525.S
│       │   └── VERSION.S
│       └── USR18.S
├── LICENSE
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
* binary
*.S crlf diff
LICENSE crlf diff
README.mkd crlf diff


================================================
FILE: 01 POP Source/Images/IMG.BGTAB1.PAL
================================================
a3aabAbsbbcydddefAf_fwffg)gOgAhOh]hkhyhhyiij3jejjjj$k<kkklTlll\mmmmmmmn8nXnxnnnnnnoo'o/o4o7o:o=o@ofooo:pXpqqrrrstt$uuuuvv$vwpww4xxxxyIyLy^yyyy<zz0{{$|'|a}{}}}k~t~}~~~~~~~~~~+9ĈĠĈĀĈĀĀĀ'ĀĈժժȡժժĈĠĈĀĀĀĀĀĈ;ĈĠĿѿĀĀĀĀĀ<ĀÈժժĈꈑĈꀑĈꀐꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀꀀ<ĀҀІІІІІІІІІІІІІІІІІІІІЮІІ΀ІІЮІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ	ĈĿѿՀր؀Ĉ߀݀Հ̀݀݀݀݀瀀瀀瀀瀀瀀瀀𿀀ĈĈĈ	ĠĀ<Ĉ֐ˆ֊ĖĖՐ–؊⪖րւ֊֪ݻݻꀀꀀݻĈݻ<πժǂȺǂժĀĈ?ĢĈĠĈĀĈĀĀĀѻĈĀĈĀĀĀĀ
׻נĢĈĠĀр݀
ĠĀȑĈĠĉрТĀĀĀĈĈȑȑиĠĠ˓ŊÊȑ๺ุ̰Ȱذ˓ËNjȑ…ฺุ̰Ȱذ˓ËNjȑ…ฺุͰ̰Ȱ˓ËNjݻݻݛ
ӀӀӀр׀܀Ѐ
ߐӀӀӀӀрԀЀ
׀߀ÀӀӀӀӀЀЀ
р׀߀ÀӀӀӀЀЀ
Ӏр׀߀ÀӀӀЀЀ
ӀӀр׀߀ÀӀЀЀ
̃ӀӀӀр׀߀ÀЀЀ
ӀӀӀр׀߀ЀЀ̃ӌӌӌэׇߜ̃ӌӌӌэׇ̃ӌӌӌэ̃ӌӌӌ̃ӌӌ̃ӌ̃ЀЄЄЄЄЌЌЌэчќ
:<ժժȡժժ;ઝઝ?ઝ<ĀĈ
ݻĈĠĈĀĈĀĀĀݻ<ĈĢĈĢĈĢĈĢĈĢĈLjֆֆֆֆֆֆֆֆֆֆֆ<ĀĈؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚ蝀ȘȘȘ蝀ؚؚݻ֪ժݒĈĈĈ֪ժݻȘȘȘߚݻժ՚ĘĘĘժ՚ݻ*ĀĈպժȡպժԔԜЀАՕؘА<ĈĈψܹ޵𐀀"ĈĈψ󿀀㿀ỀṀ𐀀ĈĈψτ󿀀㿀ỀṀĈĈ̓ĄψĄ牑ƧĀ—Ā㓀ˀṀĈĄňĄLjƢĀ£ĀǀᑀАԐАȀĀԀЀЀрՀԀрЀЀԀ<Ĝ<Ĝƀ€€<Ĝƀ€€<Ĝ̓τƀ€€<ČDŽǀƀ€€4LjĈڇ膠ĈʆȆˇݻʆ녀ݻݻݻĈچ膀ʆȇʆꅀݛچ놀ȆʇȆꅀۆꆀˆʇʆ؅؇膀ȆȆȇ膀؅؇膀ȆȆȇݻ̙ժժ̙ݻ̙ժժ̙ݻݻժժݻ>ĀĈĈĈĈĈĈĈňЈĀĈĈĈĈĈ𙘀
ԪժժժժԪժժժժԪժժժժժժƼ憀憀澀憀憀ǧ́ၳ͍͍́ԪժժժժժժԪժժժժժժժ烿ᶶƱƱッƱᶶƱ烃Ԫժժժժժժժժժժժժժժ猼栁漆̍憞澶栁짌猼ժժժժժժժヰ𰰰ヰダժժժժժժժ栁짌猼ժժժժժժժ

================================================
FILE: 01 POP Source/Images/IMG.BGTAB2.PAL
================================================
2g`iaabccccccccdddeefghihhhhhhiiiijjjkk5ll1mn}nnoYpkppoqqqqqq@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϊ݅Ӫ͇̪ȩϑ
ϑ΅⁀즄𳄀턀؅<ݻݻݻݻݻݻݻ݆ݻĈрݺݺݺݺݺݺݺݺݸĀݻǻݻݻݻݻݻݻݻݻݻԀ>ĀĈĈĈĈĈĈĈňЈȈĀĈĈĈĈĈ	ĈňЈݻݻԀԀԨԨ<ĈĈψ꿬꿴֢آܹ޵"ĈĈψ꿌꿄꿄꿀꿀¢¢ĈĈψČ꓌τ꿄꿀꿀¢¢<ĈĢĈĢĈĢĈĢĈĢĈޞڞڌڌތ܌ތ݌݌݌ތ܌ތڞڌڌތܿ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀސ܀ހ݀<ĈĢĈĢĈĢĈĢĈĢĈĢڰڰڰްܰްݰݰݰްܰڰڰڰ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހ܀ހڀڀڀހ܀ހ݀݀ހ܀ހڀڀځށ܁ރ݃݇ݏ޿ժ݀݀ހ܀ހڀڀڀހ܀ހ݀݀݀ހժԊ@쁀ȝ󀀎ك瑻℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎ۅ℘ϣ󹄎턛ۅ℘ϣ󹄎턛ۅ윲ͣ󦄎ٹ瑛瑛𜲇℀Σไ=󀀀ك恠✠ϣ̣ħdžͦ󆜲ۧ⼆ϣ̇ćǦ͆✠ǜسׯϟʗޜ񀀀:ꀀꀀꀀժꑢĈꑢĈꑢĈꑢĈꑢĈꐢĈꐢꐢꁢꇈ꜠ٳׯϟ˗ꝻꀀꀀꀀꀀꀀĀĈժժȡժժ)ĀĈՊЪȡՊЪՊЪȡՊЪ4ĄĄĄĄĄĄĄĄĄĄÂĀāǂ܀ĈĠĿѿĀĀĀĀĀ;:ۀπۀπ۠π۠ρۡߛߛۂφۄۙ۳ۿޝޛժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ✠Ĝٳׯϟ˗ޝψۀ ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ‑ĈLJ˗ ժժĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈĈ③ĸĈڑĈĈΑ߄ޏ񀀀

================================================
FILE: 01 POP Source/Images/IMG.CHTAB1
================================================
A``VaaGbb{cddeKffgyhhDiiiajjekkil7mQn3oo[ppqqqkrr}sttu<vw6x(yyzG{{{a||R}}7~~~'1o΁3q')࿀ЏЏЏЎԎЀԀԁԃ)Ѐ࿀࿀迀聀ꀀꁀ(Џ䟀ׁׁ׀ീീ'ğϟ𝀸聀ꀀꁀ&ǿǟϟߟߟ돀돀끀뀀뀀຀ԃԁԃ&߂׀Հ'𫀀ߊ߂߀🀀🀀(࿀񏀀߁׀׀߀߀πǀ׀Հ࿀࿀(Ѐ؀ߞооؾ߂ׂ׀'🀀Ճׂ߂߀׀Հ&ρϿϟǿ￀￀Շ׃׃׃Ձീ臀(࿀՞Ԇކކދ׋ׁ׀🀀🀀(🀀ꃀꃀુ઀઀ЇԀԁԃ'〰ԇ߇߃߃߀߀׀Հ聀ꀀꁀ))ППԀԀԃ(𕰅ꁪ'߂ՀՀꁀꀀ!ԿԮתߊժժ🀀ꏀꁀ!Ԇԁ"އ𿀀𿀀МІЎ#🀀𿀀Ɓ࿀𿀀௝ժЊ㿀󿀀􏀀􇀀􇀀􃀀􁀀Ⱥ㏜󟞀ꁀտ࿀࿀ǂÀрӀꏀ􃀀Џп"蟀$'ꇀꇀ臀臀胀胀胀ꀀꁀ(п࿀&🀀🀀激ԿпПЎ؆ނ߀߀׀ꇀꀀꁀ%ǁÃ׊ׂꏀꀀꁀ&Ͽ࿀࿀🀀ժՊꁀ'က𿀀࿠🠀🨀ǂ׀臀ꃀ)ֿ֞ގߎ߂ׁ׀Ԁԁԃ+🀀࿀࿀а🀀)࿀ꝀꟀ֮ޮ޾࿦𿾀߂׀Հޮޮ#׊ՂՀ!🀀߂ׂՀо'܆܆܆܆܆܆܆؆'ܾоԿԟ࿀(؀׀߀߀(ÇÇÇ࿁Ŀ࿀࿀'ߊނ􀀕%ППОЃԀԁԃ&և׃׃փփցցց'꿨''&࿀࿈Ђ%𿀀🀀🀀🀀必俁Կп#"߂߀߀߀߀߀߀#ÏÏÏÏ߀߀߀߀πς߀׀藀߀߀܀܀!࿁ЂЊԫիԫԫՋԀՊŊ0

================================================
FILE: 01 POP Source/Images/IMG.CHTAB2
================================================
F`^aab[ccdfeefDggh&i|i jrjjklkk8llPmm2nnoo8ppqzqqrnrqrssNtt2uuFvvwxPyzz{'||O}}~]~~~|\ր\ǁ;)ßϟ𕀀𗀀𗀀׀߀߀߀߀߀߀🀀🀀'เเ࿠􀀕'࿀߂߂߀𝀀🀀🀀&🀀ԀԀ🅀𿅀𿁀𿁀ເ࿀࿀&Հ׀߀߀߀߀߀🀀🀀%ϟԂՊ𿁀𿁀𻀀࿀࿀$ՀՀ߂߇ނІЎ!ގ܂ъ!ъՃ#Ͽߟ߃߂߂$ßÿЀЯ%ǟ߿߿߂ކ܎ЎПீ%珀矀Ͽ߀߀πǀǀÀ׀תը🀀🀀ը׀𕀎葠𗠿ЯЬЬЮՀӂ򃊠㏀Ï)쏬)쏬(؎؎ЎЏЀЁԃԇ((߂߀׀聀耀ꁀꃀ(߂ߨߨ׊ׂՀ샀耀ꁀꃀ'𿀀𿀀𿀀🀀܇Ǫժ耀ꁀꃀ&ժՂ耀ꁀꃀ$࿀࿀ނ߆߆߃ׁׁ耀ꁀꃀ#ԟԏԇ􀀔&샀惀⁀􀠵/࿀܇ꏀꏀꃀ2࿀菀8ނ؂ЎООܞܞІЀЀ60އ܇܇ЃԀԁԃЃփփЀ)ЂІЎ&ꇪ(ԿпОЂІЎ3࿀࿀5࿀5ׁׁցԀЁԃԃЃЁЀ79ЎООО7ގ؎؆ЀЃЇЇЇЇЃЀ6Çχ臀聀耀6聀聀聀샀聀耀3က぀ǃ燀LJ𿀀𿀀聀聀聀聀耀3胀臀臀胀샀2矀𿀀𿀀𿀀𿀀փփԁ􀀀􁀀􁀀􁀀􁀀2࿀𿀀𿀀؇؃ЃЃЁЃ􃀀􁀀􀀀2࿀𿀀#㿀󟀀񏀀񇀀ЪԪ臀臀$վԺЏԁ􃀀#𿀀🀀𿀀࿀࿀Ꟁ&࿀՞Ն$пďпІЎПоǏ臀燀񟁀񿀀񟀀῀χ㏀㇀ 蟀Կៀ𾀀!ُ𛀀𻀀ֿן臀#܆؎܏֏ꇀ&ꀀເເԃԁ'Џ؏؏؏؎􀕀𿀰ܟ
0࿀净Շꁀꇀ0࿀ꁀꇀ

================================================
FILE: 01 POP Source/Images/IMG.CHTAB3
================================================
N``Aaabbbccd,eeeIffgigghiii^jj2kkllmvmmmmmmmmmn=nunnnnnnooo)o1ooppqqqrrrstt%uu
v!vGvovvvvvvvvw.wEwOwaw(菨'ԏЏЏЎЂЂЇ'ԟԟЎЊЀԀ'ßρ࿁ԇЎЂЏ&灀߁臀臀&Ǐ🇀𿀀𿀀࿀࿀ЪЪ𿀀𿀀࿀&𿀀臀%ЀǏχ𿎀🀀🀀🀀&ρ𿁀ԂԂԀԁԃ'࿀ՂԂԀԁԃ(׀׀߀ހހހ)࿠5耈,🨟胊,ՎԞ-聀ꀀ'ʿꟀꏀ菀ꏀ뇀냀!Ь֮֮şŏ埀ퟀנퟀר߮߁Տܺ叀ߏ󀀈ď񀀀ר蟀ſ꿀蟀"3🠟胈	
က'ߟߟ֪ՠ'ǟǟ܆ՆՂЎОО(ϟϟϏԪ'ϟϟԎՎ܊݇ІЎЎ'ЪԿվ聀ꀀꁀ'ǟϟ߃׃ׂԀԁԁ&ǿϟԇՁ&ÏррЯկ&㿈㿈ῈῊ߂׀׀Ԫܪ&ςςπ׀腀֪ꁀ&؀ǟǏ珀珀ހ݀🀀🀀%ßßЀ׿ӾО&࿐࿔ППԯЯЮЎ܆&ໄໄຄ྅опппЯЯЎ؎࠰ЀЀՀЂުՀ


================================================
FILE: 01 POP Source/Images/IMG.CHTAB4.GD
================================================
 C``abc|dFeefZghhiUj;k'llmfnooXppqq'rrrVsss]tt$񯅀񯁀῁῀ៀ՟՟՟՟ԟП菀𿀀ꃀ%߀翀վվտԿԿ🀀🀀ПЏ叀叀$࿀𿀀􇀨ꟀꏀՀ🁀𿁀ꁀ!🀿՘࿀ԘԪԪԪЪЪ🀀О܂ӔՅ׀%߿߿߿տԾԀԂԪЪЪ뾅ꚅʄǀ(՟ԊԂՂ׀𗀀⏀ꏀꏀ폀׏(Дԧԯ'ԔДоꀀꃀ#🀀ԿԾԾԾЪЪЪʀʀπ߀߀Ѐ&􏀀􇀀Ԥжܞꁀꃀ%ꁪ%è߫߯د࿀ៀ埀埀􏀀􏀀ٿ՟՟ԏ'ꁀ&԰ԂԪԪԪت'🀀࿵ԀԀ԰ԼԼ԰ԊԪЪ럀ʀڀЇԀԁԇ*諂ЎО$🀀ԀЊЪЪꁀӞ%ЀЊª߂߀߀ԁԇ'񏴠ԔДоꀀꃀ'ԔДоꀀꃀ$߆򿀀򟀀忀🀀菀%՞ՆՀꀀ࿀꿀􏀀ԃ$聀ЪЪԪԊԂԂԊКкк؀ş𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և(ккԺԞԞԞОооооԞԞԏԇ#ԊԊƒʀؾоОԞԝԅԅԏꀀꃀ ЪЪЪ퇐폀ҀԀހԪԮЮ뀨므Ń큠ʏժ꿾ʇȯԀՀЅЀЀժՔӟՔӿ׿ժԪԀՀЅЀЀ
ժǏՔӟՔӿ׿ժԪϏ􇀀က𿀀࿠🠀🨀ǂ׀臀ꃀ)ֿ֞ގߎ߂ׁ׀Ԁԁԃ+🀀࿀࿀а🀀)࿀ꝀꟀ֮ޮ޾࿦𿾀߂׀Հޮޮ#׊ՂՀ!🀀߂ׂՀо'܆܆܆܆܆܆܆؆'ܾоԿԟ࿀(؀׀߀߀(ÇÇÇ࿁Ŀ࿀࿀'ߊނ􀀕%ППОЃԀԁԃ&և׃׃փփցցց'꿨''&࿀࿈Ђ%𿀀🀀🀀🀀必俁Կп#"߂߀߀߀߀߀߀#ÏÏÏÏ߀߀߀߀πς߀׀藀߀߀܀܀!࿁ЂЊԫիԫԫՋԀՊŊ

================================================
FILE: 01 POP Source/Images/IMG.CHTAB4.SKEL
================================================
 C``abYc'ddxe
ff}g)hhidj>kkl@mmdnoo9p<pp@qCqFqIqLqOqq"ǘ뇀"𿂀࿀࿀臀!΁Ã߀퀀瀀ǀ࿀ 󂟀"㠀Àρ݁ɀฎ⁀رÁ􃀀% 섀΃끀܀ЁρЏ🀀%̇぀΃܁̀࿀$ೀ࿀솀 🀀ව󀀀โ󀀀#ࠀ老ކ܇㇀􁀀"܇؋߁#ޙ🀀×𸇀ೆ샀$΃ȁ#🃀ǁ܀􀀀࿀$灀඀΁#ȃ􃀀!🀀șƍ臀"ЃÀÁÁೀࣞߙ$ೀ࿀솀$ೀ࿀솀#臀$Áダダ쀀Ì𾀀Џ🀀$𹀀぀Ã𸀀Ƒρ񀀐ㅛ􃀀ǁ񀀇Λ䁀"うÁ獃ী怀胀
ժǏՔӟՔӿ׿ժԪϏ􇀘ী怀胀
ժǏՔӟՔӿ׿ժԪϏ􇀪ЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և

================================================
FILE: 01 POP Source/Images/IMG.CHTAB4.VIZ
================================================
 C``abcvd;eesfAghhri2jkkl^mnnMoop!q$qq:rrrnsstbt$񯅀񯁀េៀៀ՟՟՟՟ԟПППпп俀🀀%Ç柀翀վԿԿԟ֟֟ППՏ叀叀샀蟀$࿀𿀀􇀨Ꟁꏀ࿁𿀀!🀿՘࿀ԘԪԪԪЪЪ🀀ח쇀蟀$ϟ߿߿߿տԾԀԂԪЪЪᅤ瀀샀蟀࿀'՟ԊԂՂ׀𗀀⏀ꏀꏀ鏀ޏꃀ𿀀'ԟ՟ןԿտտտՏ&񃼠ԾԾԟԏ󃀀"🀀ԿԾԾԾЪЪЪЪߪϪЀ뿀􏀀&ԟԟПߞמվԾԾԞԞԏև󃀀$ꃨ꿪ԟԟԟԟԿԿԿԟ՟՟蟀%ϧϿ࿀῀埀埀՟՟՟՟՟ԟԟԟԾԾ־ӾӾѾўЎЎՎ՞՞՟ԏ&􏀀叀寀寀忀埀􏀀%԰ԂԪԪԪت􇀀&🀀԰ԾԾԾԾ԰ԊԪЪ諽燀􏀀.꿀꿀꿀꿀꿀꿀忀忀꿀꿀꿀꿀꿀迀迀⏀ԃԏ$🀀ЊЪЪ꿀؇п%Њ􏀀&߰ﯠԾԿԟ&ԾԿԟ󃀀"ώ򿀀򟀀忀샀菀$՞ՆՀ􏀀%תߪЪԊԂԊԚкк𿪅ʯԪЪЪžѾѾѾѾ՞՞ޞԪЊꫥꏠꏠêժǪՊՂ⪕⫅߂׃և&ккԺԞԞԞОооооԞԞԟԏ"ԊԊƒʀоԾԟԟԟԏ쁀菀ꀀЪЪЪ퇀폀🀀샀蟀ԪԮЮ뿀ʟժժժ򁀀ԂԀԪՊտտʟժ꿾ʇȯԀՀЅЀЀϏߟӿ׿ԯχӿ׿ժԪϏ

================================================
FILE: 01 POP Source/Images/IMG.CHTAB5
================================================
-]``a{bVc$ddueffnghh\i6jkkkolmWmm+nnooplppOqqUrrUsssOtt]uvYvvv=www"ß🀀🀀𕀀׀׀ꕀꅀꁀ&ÿծծՀ׀ꃀ#㟀ժݟ׏ՏՂՂ🀀뀀🀀պЪ݂ݪݪ"뀾🀀׊ׂ׀%ៀ󏀀߆݆߂߂߀߀🀀🀀%ǟ⁀࿀࿀$ׁׁ׀߀߀߂߂׀Հ땀ꅀʇ࿀࿀"࿀ի%߿߿࿀ീ򵀀׀׀蕀ꇀꀀ&Ճׂׂ߂굀ЂԀ'𿀀𿀀𿀀Ձ׀׀߀Հ$຅຅к򁀀Ў$࿀Ъી寀𫀀Ћԏԁԃ$܇𿀀ீீ𯁀߿߯֫֫Ջ"ǟժݿןՏՂՂ#߆߂݂݂݊%ՁՁպ׀պ׀׀߀ǁիկダ뿀ի돾Ͽ࿀࿀🀀ԏ׏ׇ 𿀀🀀𿀀냸냰끠$Ппؚݎ݆݂(຀ເીீீીીՊՏՁ)؎؞ЏԆՆՎ׏ׇ,࿀ߟ,Пк-ӀÀÀ׀׀׀🀠􁠰-࿀׀ǀÀǂǂ߂׀׀׀ՇՃу)࿀ӀÀÀÀǂςς߀׀׀ՇՇԁ+࿀Àǀǀǂ߂߂߂݀ԏԞԞԞԚЀ)ррÂÂǂς߂׀׀׀ׁՏՏԎԆЀ*ς߂߀׀׀ׇߟ֞ԞԚԂЀ'߀߂&࿀࿀࿀ુઁоվ຀ЂІЎ&ǟǏ珀㇀пտŋЀޚ࿀࿀+࿀࿀࿀࿀𿀀𿀠𺕊кІЎ㇀&!菀՟׾׾ԿԿ臀ગ׀׀πÂՀՂ͊ʏꏠꏠ

================================================
FILE: 01 POP Source/Images/IMG.CHTAB6.A
================================================
g````
aa+a:aIaXaa[bb:ccc!dnddeUeeeeeFffLggLhhi'jjj2kk8llmnnn n#n&n)n,n/n2n5n8n;n>nAnDnGnJnMnPnSnVnYn\n_nbnenhnknnnqntnwnzn	oopq_rssAtteuuvKw	xxyz{|P}~~6)ӂ

Ѐ
Ԕ
Ԕ

ДЀ


ДĀ+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чус*ԪԪԪЪЪЪʏꏀԇևևԃЃЃЁЁЁЁЁЃЇ҇уср0߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎߧ՜̆Ύ͖Ơ̆̏ƵՌՍՎՎՎ߯՜̆Ύ͖Ơ̆̏ƵՌՍՎՎߧ՜̦ՌΎ͖Ơ̆̏ƵՌՍՎߧ՜̦ՌΎ͖Ơ̆̏ƵՌߧ՜̦ՌΎ͖Ơ̆̏ƵՌ߯՞ήՎήՎ͖Ơ̆̏Ơ߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ	Ĥ	Ġ	+ՊՊՂՂՂՂՀՀ׀׀Ԃ䒀ࢀАА+ժժՊՊՊՊՂׂτ࿃ԎծЮ΀€€€€+ժժժՊՊՊՊׂ߂࿀࿀Ԃ*࿀฀ఀՀժժժժժՊՊ׌׆׃ժՠ*ՊժԪԪԪЪЪЪЪ*ԊժժԪԪՀԪԪԪԪժӊךΌՀĀ+ՀՊՊՂՂՂՀՀՁΟǎφ+ժՊՊՊՂՂՀՂ僫瀀+ժժՊ՚՚ՌՆŇ脀聀胀胀聀耀+ՊՊՊՊՂՂՂՀՎՇ+ժԪԪԪЪЪЪԃЃЃЇ֏ҏ҇փ+ՊՊՂՂՂՀՀՁԿԿппо耠+ժժժժժժժʃտ𿀀胀胀胀胀胀臀+ՊժժժժժժժՒ՟񏀀ꀀ耀耀聀胀郀遀退+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чус‚Ƃ/՟՟Տ࿀࿀࿀؏Ўо/տտտ՟՟؏Ўо/׏ЪЪ꿀꿀꿀/ߏྀ࿀/ЂЂЊЪ꿀꿀꿀꿀꿀/տտྀ࿀0؏Ўо0珀忀؏Ўо0؏Ўо0؏Ўо0؏Ўо0ྀ࿀0/0̟/Ꟁ🀀0𡕨ժժժժժתת׊ߊ𿊀𿀀𿀀𿀀߁߀߀𿀀0оЂЂЂԂԂԀԀԀՀՀՀՀՀ𿕀࿕׀׀߀߀߀߀߀߀࿀0🀀ըԪԪԪЪЪê𿪅𿁀࿁࿁𛀀🀀0蟀蟀蟀蟀蟀蟈菨0蟀蟀蟀ꟀꟀ00菀菀菀菀菈菊菨臸Ŀ쟀࿀0кккккккоԾԾԾԞԟԟԟԏԏҏҏ׏ՏՇ؏Ўо1𝀀ЎԎԇԇՇՇՇ؏Ўо1ЂЂ ⁀򁀀վ՟՟՟ՏՏՏՇЂЀ؀ꁀڀꃀ6տ8ԀԂԂՏ՟տԀЀД:6ꃨ

================================================
FILE: 01 POP Source/Images/IMG.CHTAB6.B
================================================
I````````
aaajbbLccc3dddegeeeeeXff^gg^hii9jj?kkEllvm$nnAoDoGogoo	pppq rrhsttu>vvZwwIxxyzyy[zzM{{|}}M~~t

Ѐ
Ԕ
Ԕ

ДЀ


ДĀ0ԄԈԜռռռ՞՞՞՞՞՞՞ՎՎՏՏ遀ß.ԄԈԜռռռ՞՞՞՞՞՞՞ՎՎՏՏԔԏՇՇՃ1߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎߧ՜̆Ύ͖Ơ̆̏ƵՌՍՎՎՎ߯՜̆Ύ͖Ơ̆̏ƵՌՍՎՎߧ՜̦ՌΎ͖Ơ̆̏ƵՌՍՎߧ՜̦ՌΎ͖Ơ̆̏ƵՌߧ՜̦ՌΎ͖Ơ̆̏ƵՌ߯՞ήՎήՎ͖Ơ̆̏Ơ߇̆Ύ͖Ơ̆̏ƵՌՍՎՎՎՎ	Ĥ	Ġ	+ՊՊՂՂՂՂՀՀ׀׀Ԃ䒀ࢀАА+ժժՊՊՊՊՂׂτ࿃ԎծЮ΀€€€€+ժժժՊՊՊՊׂ߂࿀࿀Ԃ*࿀฀ఀՀժժժժժՊՊ׌׆׃ժՠ*ՊժԪԪԪЪЪЪЪ*ԊժժԪԪՀԪԪԪԪժӊךΌՀĀ+ՀՊՊՂՂՂՀՀՁΟǎφ+ժՊՊՊՂՂՀՂ僫瀀+ժժՊ՚՚ՌՆŇ脀聀胀胀聀耀+ЪժՊՊՊՊՂՌՏ+ՊՊՊՊՂՂՂՀՎՇ+ժԪԪԪЪЪЪԃЃЃЇ֏ҏ҇փ+ՊՊՂՂՂՀՀՁԿԿппо耠+ժժժժժժժʃտ𿀀胀胀胀胀胀臀+ՊժժժժժժժՒ՟񏀀ꀀ耀耀聀胀郀遀退+ԪԪԪЪЪЪʏꏀևևԃЃЃЁЁЁЁЁЁЃ҇чус‚ƂՊՂՂՀՀ'ԈԨԪԪԪԪ̪̊܊򀪀(ʼnժժԪܪ臨ؗ'𜀰ՀՀՂՂՂ߂߀࿀࿀࿀ЊпплЪ਀਀&ЪЪԪЪЪЪ؀ԀՂԂЀ%၀၀Ԫժժժժժի胀菀菀%ՠբժժժժ߃߀߀׀ր􀀀􀀀􁀀􁀀􃀀􃀀ЁЀ$ЊԪԂԪժժժժԪժЪժՊ$ЪЪժԪժԪЪǀπ׀(؀ЀԪԪԪЪՀՀՂՂ࿀࿀𿀀𿀀Ђ𿀀𿀀🀀ԪԪ՟Տԏԁԁ(ԎԪԪժԪժЪ꿀ЪꟀꏀꇀ࿀࿀(珀ÃÃЪşԪşԪşԪЪЪЪ￀ՃރЪЂ񟀀(揀އ܇쏀쏀ꏀꏀꟀꟀꟀꟀꟀꟀоо࿿ꇀܯտƾܾ迀࿀(΃߿߿߿ҺҺҟ⏀(惌܃܏̟ʟߟ߿߿߿߿Һҿ⇀ԪԪՀՊժժՊ׊ׂ߂ך֪ԯЀدЦԪԪՀՊժժՊ׊ׂ߂ךЂ֪ԯدЦԪԪՀՊժժՊ׊ׂ߂ڐ֪ԯدЦԪԪՀՊժժՊ׊ׂ߂ڄ֪ԏ؏ІովժժժՀՂՂՂՂՂժԪުՀ߀Հр΁ЪԪՀЪՊժժժת𿥀કꁀ냀뇀ࠀꇀꁀԪՊԪՊЪՊЪժժժ׈ܪ؎Ў𞀀Ъժժժժժת߂ЀЀ ՇժժՀժՂժՂժՂժՀժՀԪ🊀Ђ҂‚Ă𐀀$ՃՁՊժժժժժժժ埁ǂÀӀЀЀȁ%ժժժժժժժժժժǂ׀ЀЀÁ'ժժժժժժժժժժ􀀠ЀрÁ*ЪՀԪՂԪՂԪՂԪՀЪՀЪЪЪꟀࠀÀ)ժժԪԪԪԪԪЪУЧчуср‚‚‚‚‚‚

================================================
FILE: 01 POP Source/Images/IMG.CHTAB7
================================================
`y`aa/bbAccd2ккккккккккоооооОППԏԇԿԿԿԟ䀊0ꏀꏀꏀꏀꏀꏀꇀꇀ0迀迀迀迀⏀ԃԏ0迀迀迀迀迀迀迂迚꿀꿀蟀⏀ԃԏ0ԃԏ:Ԁԃԇ՟՟ՏՏ:ԀԃԇՇ0臀臀臀臀ꇀ

================================================
FILE: 01 POP Source/Source/AUTO.S
================================================
* auto
DemoDisk = 0
org = $5400
 tr on
 lst off
*-------------------------------
*
*  PRINCE OF PERSIA
*  Copyright 1989 Jordan Mechner
*
*-------------------------------
 org org

 jmp AUTOCTRL
 jmp CHECKSTRIKE
 jmp CHECKSTAB
 jmp AUTOPLAYBACK
 jmp CUTCHECK

 jmp CUTGUARD
 jmp ADDGUARD
 jmp CUT

*-------------------------------
 lst
 put eq
 lst
 put gameeq
 lst
 put seqdata
 lst
 put soundnames
 lst
 put movedata
 lst off

 dum $f0
ztemp ds 1
prob ds 1
]cutdir ds 1
ProgStart ds 2
 dend

plus1 db -1,1
minus1 db 1,-1

* Thresholds for cut to new screen

TopCutEdgePl = ScrnTop+10
TopCutEdgeMi = ScrnTop-16
BotCutEdge = ScrnBottom+24

LeftCutEdge = ScrnLeft-4
RightCutEdge = ScrnRight+4

*-------------------------------
* Locations of special objects

flaskscrn = 24
flaskx = 3
flasky = 0

mirscrn = 4
mirx = 4
miry = 0

swordscrn = 15
swordx = 1
swordy = 0

mousetimer = 150 ;from topctrl

*-------------------------------
* Strike/block ranges

strikerange1 = 12
strikerange2 = 29
blockrange1 = 0
blockrange2 = 29 ;from TestStrike

*-------------------------------
* Other constants:

swordthres = 90
engardethres = 60
strikethres1 = strikerange1
strikethres2 = strikerange2
blockthres1 = 10
blockthres2 = blockrange2
tooclose = strikethres1
toofar = strikethres2+6 ;min dist at which you can advance safely
offguardthres = 8
jumpthres = 50
runthres = 40
blocktime = 4

*-------------------------------
*
* Fighter params (indexed by guardprog #)
*
* strikeprob = probability x255 of striking from ready posn
* restrikeprob = prob x 255 of restriking after blocking
* blockprob  = prob x255 of blocking opponent's strike
* advprob = of advancing to within striking range
* refractimer = length of refractory period after being hit
*
*               0   1   2   3   4   5   6   7   8   9   10  11

strikeprob
 db 075,100,075,075,075,050,100,220,000,060,040,060
restrikeprob
 db 000,000,000,005,005,175,020,010,000,255,255,150
blockprob
 db 000,150,150,200,200,255,200,250,000,255,255,255
impblockprob
 db 000,075,075,100,100,145,100,250,000,145,255,175
advprob
 db 255,200,200,200,255,255,200,000,000,255,100,100
refractimer
 db 020,020,020,020,010,010,010,010,000,010,000,000
specialcolor
 db 000,000,000,001,000,001,001,000,000,000,000,001
extrastrength
 db 000,000,000,000,001,000,000,000,000,000,000,000

numprogs = 12

*-------------------------------
* Basic guard strength & uniform color (indexed by level #)

basicstrength
 db 4,3,3,3,3,4,5 ;levels 0-6
 db 4,4,5,5,5,4,6 ;levels 7-13

basiccolor
 db 1,0,0,0,1,1,1 ;0 = blue, 1 = red
 db 0,0,0,1,1,0,0

shadstrength = 4

*-------------------------------
*
* 10: kid (demo)
* 11: enemy (demo)
*
*-------------------------------
*
*  Automatic enemy control routine
*
*  In: Char vars reflect position in PRECEDING frame;
*      Op vars reflect position in UPCOMING frame
*      guardprog = program #
*
*  (Exception: When used by kid fighting in demo, both
*  Char & Op vars reflect preceding frame.)
*
*-------------------------------
]rts rts

AUTOCTRL
 jsr DoRelease

 lda CharID
 beq :5 ;control kid in demo

 lda justblocked
 beq :jb0
 dec justblocked

:jb0 lda gdtimer
 beq :gt0
 dec gdtimer
:gt0
 lda refract ;refractory period after being hit
 beq :2
 dec refract
:2
 lda CharID
 cmp #24 ;mouse?
 beq :6
 cmp #4 ;skel?
 beq :3
 cmp #2 ;guard?
 bcc :1
 lda level
 cmp #13 ;vizier?
 beq :4
 jmp GuardProg
:1 jmp ShadowProg
:3 jmp SkelProg
:4 jmp VizierProg
:5 jmp KidProg
:6 jmp MouseProg

*-------------------------------
*  M O U S E
*-------------------------------
MouseProg
 lda CharFace
 cmp #86
 beq ]rts
 lda CharAction
 beq :1 ;already stopped
 lda CharX
 cmp #166
 bcs ]rts
 lda #Mleave
 jsr jumpseq
 jmp animchar ;sets CharAction = 0

:1 lda CharX
 cmp #200
 bcc ]rts
 jmp VanishChar

*-------------------------------
*  S H A D O W M A N
*-------------------------------
 do DemoDisk
ShadowProg
SkelProg
VizierProg
 brk

 else
ShadowProg
 lda level
 cmp #4
 bne :0
 jmp ShadLevel4

:0 cmp #5
 bne :1
 jmp ShadLevel5

:1 cmp #6
 bne :2
 jmp ShadLevel6

:2 cmp #12
 bne :3
 jmp FinalShad
:3
]rts rts

*-------------------------------
* Level-specific code for:
* Level 6 (plunge)
*-------------------------------
ShadLevel6
 lda CharScrn
 cmp #1
 beq Shad6a
 rts

* Level 6, screen 1
* When kid jumps chasm, step on plate

Shad6a
 lda KidPosn
 cmp #43
 bne ]rts
 lda KidX
 cmp #$80
 bcs ]rts
 jsr DoPress
 jmp DoFwd ;step fwd

*-------------------------------
* Level 5 (THIEF)
*-------------------------------
ShadLevel5
 lda CharScrn
 cmp #flaskscrn
 beq Shad5
]rts rts

* Level 5, screen 24
* When gate opens, steal potion

Shad5
 lda PlayCount
 bne :1 ;continue playback

 lda #flaskscrn
 ldx #1 ;x
 ldy #0 ;y
 jsr rdblock ;gate
 lda (BlueSpec),y
 cmp #20
 bcc ]rts
;begin playback
 lda #0
 sta PreRecPtr

:1 lda #ShadProg5
 ldx #>ShadProg5
 jsr AutoPlayback

 lda CharX
 cmp #15
 bcs ]rts
 jmp VanishChar

*-------------------------------
* Level 4 (mirror)
*-------------------------------
ShadLevel4
 lda CharScrn
 cmp #4
 bne ]rts
 lda CharX
 cmp #80
 bcc :gone
 jmp DoFwd ;run o.s.
:gone jmp VanishChar

*-------------------------------
* Level 12 (final battle)
*-------------------------------
FinalShad

* Screen 15: Jump on top of kid

 lda CharScrn
 cmp #swordscrn
 bne :cont
 lda shadowaction
 bne :cont ;already did it
 lda OpX
 cmp #150
 bcs :hold ;hold shad at top until kid arrives

 lda #1
 sta shadowaction
 bne :cont

:hold lda #shadpos12
 ldx #>shadpos12
 jmp csps
]rts rts

* Continue

:cont lda CharSword
 cmp #2
 bcs :fight
 lda OpSword
 cmp #2
 bcs :hostile
 lda offguard
 bne :face
:hostile
 lda EnemyAlert
 cmp #2
 bcc :2
 jsr getopdist
 cmp #swordthres
 bcs :2 ;wait until kid gets close

 lda CharPosn
 cmp #15
 bne ]rts
 jmp DoEngarde ;draw on kid

* turn to face kid

:2 jsr getopdist
 bpl ]rts
 jmp DoBack

* Normal fighting

:fight
 lda offguard
 beq :1 ;has kid put up sword?
 lda refract
 bne :1 ;yes--wait a moment--
 jmp DoDown ;--then lower your guard

:1 jmp EnGarde ;normal fighting

* Face to face--swords down

:face jsr getopdist
 bmi :merge ;whammo!

 lda EnemyAlert
 cmp #2
 bne :wait
 lda OpPosn
 cmp #3
 bcc :wait
 cmp #15
 bcc :go
 cmp #127
 bcc :wait
 cmp #133
 bcs :wait

* If kid starts moving towards you, reciprocate
* (Accept startrun & stepfwd)

:go jmp DoFwd

* Kid & shadow reunite

:merge
 lda #$ff ;white
 sta lightcolor
 lda #10
 sta lightning

 jsr boostmeter

 lda #s_Rejoin
 ldx #85
 jsr cuesong

 lda #42
 sta mergetimer

 lda #0
 sta CharID
 jsr SaveKid ;shadow turns into kid
 jmp VanishChar
:wait
]rts rts

*-------------------------------
* S K E L E T O N
*-------------------------------
SkelProg
 lda #2
 sta CharSword
 jmp GuardProg

*-------------------------------
* V I Z I E R
*-------------------------------
VizierProg
 jmp GuardProg

 fin ;DemoDisk

*-------------------------------
* K I D (in demo)
*-------------------------------
KidProg
 jmp GuardProg

*-------------------------------
* G U A R D
*-------------------------------
GuardProg
 lda CharSword
 cmp #2 ;Are you already en garde?
 bcc Alert ;no
 jmp EnGarde ;yes
]rts rts

*-------------------------------
*
* Alert (not en garde)
*
*-------------------------------
Alert
 lda KidLife
 bpl ]rts ;kid's dead--relax

* If kid is behind you, turn to face him

 jsr getopdist
 ldx OpBlockY
 cpx CharBlockY
 bne :difflevel
 cmp #-8 ;if kid is right on top of you, go en garde!
 bcs :eng
:difflevel
 ldx alertguard
 beq :ok ;otherwise wait for a sound to alert you
 ldx #0
 stx alertguard
:alert
 cmp #128
 bcc :eng
 cmp #-4
 bcs :ok ;overlapping--stand still
 jmp DoTurn ;turn around

* If you can see kid, go en garde

:ok cmp #128
 bcs ]rts ;kid is behind you

:eng lda EnemyAlert
 beq ]rts

 lda level
 cmp #13
 bne :1 ;Vizier only: wait for music to finish
 lda SongCue
 bne ]rts

:1 jmp DoEngarde
]rts rts

*-------------------------------
*
* En garde
*
*-------------------------------
EnGarde
 lda CharPosn
 cmp #166
 beq ]rts
 cmp #150
 bcc ]rts ;wait till you're ready

 lda EnemyAlert
 cmp #2
 bcs :ea2
 cmp #1 ;EnemyAlert = 1: Kid is in sight, but a
 beq ]rts ;gap or barrier separates you--stay put

* Kid is out of sight (EnemyAlert = 0)
* If kid has "dropped out" of fight, follow him down

 lda droppedout ;flag set by CHECKFLOOR
 beq :1
 jmp FollowKid

* else return to alert position

:1 lda CharID
 cmp #4
 beq ]rts ;(except skeleton)
 jmp DoDropguard

* EnemyAlert = 2: Clear stretch of floor to player

* If kid is stunned, let him recover...

:ea2 jsr getopdist
 bmi :norec
 cmp #12
 bcc :norec ;unless he's right on top of you
 lda OpPosn
 cmp #102
 bcc :norec
 cmp #118
 bcs :norec
 lda OpAction
 cmp #5
 beq ]rts
:norec

* Advance to closest safe distance

 jsr getopdist
 cmp #toofar
 bcs :outofrange

 ldx CharSword
 cpx #2
 bcc :offg

 cmp #tooclose
 bcc :tooclose
 jmp InRange

:offg cmp #offguardthres
 bcc :tooclose
 jmp InRange
]rts rts

* Out of range

:outofrange
 lda refract
 bne ]rts

 lda CharFace
 cmp OpFace
 beq :nojump ;chase him

 lda OpPosn
 cmp #7
 bcc :norun
 cmp #15
 bcc :runwait
:norun
 cmp #34
 bcc :nojump
 cmp #44
 bcc :jumpwait ;If kid is running towards you, stay put
:nojump
 jsr getinfront
 jsr cmpspace ;Don't advance unless solid floor
 beq :gap
 jsr get2infront
 jsr cmpspace
 bne :solid

:gap jmp DoRetreat
:solid jmp DoAdvance

* Kid is trying to get past you--cut him down!

:jumpwait
 jsr getopdist
 cmp #jumpthres
 bcs ]rts ;wait
 jmp DoStrike

:runwait
 jsr getopdist
 cmp #runthres
 bcs ]rts
:strike jmp DoStrike

* Too close to hit him

:tooclose
 lda CharFace
 cmp OpFace
 beq :ret
 jmp DoAdvance
:ret jmp DoRetreat

*-------------------------------
*
*  Kid has "dropped out" of fight
*  Advance until you run out of floor--
*  then decide whether to jump down after him
*
*-------------------------------
FollowKid
 lda OpAction
 cmp #2
 beq :hanging
 cmp #6
 beq :hanging ;wait--kid is hanging on ledge

 jsr getinfront
 sta ztemp
 jsr cmpbarr
 bne :stopped
 lda ztemp
 jsr cmpspace
 beq :atedge
 jmp DoAdvance

* At edge of floor.  Follow kid down ONLY if:
* (1) it's a 1-story drop to solid floor
* (2) kid is still down there

:atedge
 jsr getinfront
 inc tempblocky
 jsr rdblock1
 sta ztemp ;is it safe?
 cmp #spikes
 beq :stopped
 cmp #loose
 beq :stopped
 jsr cmpbarr
 bne :stopped
 lda ztemp
 jsr cmpspace
 beq :stopped

 lda CharBlockY
 clc
 adc #1
 cmp OpBlockY
 bne :stopped ;kid's not down there

* It looks safe--follow him down

 jmp DoAdvance

:stopped lda #0
 sta droppedout
 jmp DoRetreat ;so you can kill him if he climbs up
:hanging
]rts rts

*-------------------------------
*
*  In range
*
*-------------------------------
InRange
 lda OpSword ;is opponent armed & en garde?
 cmp #2
 beq :fight ;yes

* Opponent is unarmed or off guard--maul him!

 lda refract
 bne ]rts

 jsr getopdist
 cmp #strikethres2
 bcc :1
 jmp DoAdvance ;advance until within range...
:1 jmp DoStrike ;then strike

* Opponent is en garde--use strategy

:fight
 jmp GenFight

*-------------------------------
*
* General Fighting Routine
*
* (Fighters are en garde, face to face, and too close to
* advance safely)
*
*-------------------------------
GenFight
 jsr getopdist
 cmp #blockthres1
 bcc :outofrange
 cmp #blockthres2
 bcs :outofrange

 jsr MaybeBlock ;block opponent's strike?

 lda refract
 bne ]rts

 jsr getopdist
 cmp #strikethres1
 bcc :outofrange
 cmp #strikethres2
 bcs :outofrange

 jmp MaybeStrike ;strike?

:outofrange
 jmp MaybeAdvance ;advance to within strike range?
]rts rts

*-------------------------------
*
* Advance to within strike range?
* (Only consider it if gdtimer = 0)
*
*-------------------------------
MaybeAdvance
 lda guardprog
 beq :dumb ;Guard #0 is too dumb to care
 lda gdtimer
 bne ]rts

:dumb jsr rndp
 cmp advprob,x
 bcs ]rts

 jmp DoAdvance

*-------------------------------
*
* Block opponent's strike?
*
*-------------------------------
MaybeBlock
 lda OpPosn
 cmp #152 ;guy4
 beq :99
 cmp #153 ;guy5
 beq :99
 cmp #162 ;guy22 (block to strike)
 bne ]rts

:99 lda justblocked
 bne :impaired
 jsr rndp
 cmp blockprob,x
 bcc :block
]rts rts

:impaired
 jsr rndp
 cmp impblockprob,x
 bcs ]rts
:block jmp DoBlock

*-------------------------------
*
* Strike?
*
*-------------------------------
MaybeStrike
 ldx OpPosn
 cpx #169
 beq ]rts
 cpx #151 ;opponent starting to strike?
 beq ]rts ;yes--don't strike

 ldx CharPosn
 cpx #161 ;have I just blocked?
 beq :restrike
 cpx #150
 beq :restrike ;yes--restrike?

 jsr rndp
 cmp strikeprob,x
 bcs ]rts
 jmp DoStrike

:restrike
 jsr rndp
 cmp restrikeprob,x
 bcs ]rts
 jmp DoStrike

*-------------------------------
DoRelease
 lda #0
 sta clrF
 sta clrB
 sta clrU
 sta clrD
 sta clrbtn
 sta JSTKX
 sta JSTKY
 sta btn
 rts

DoAdvance
DoFwd
 lda #-1
 sta clrF
 sta JSTKX
 rts

DoRetreat
DoBack
 lda #-1
 sta clrB
 lda #1
 sta JSTKX
 rts

DoBlock
DoUp lda #-1
 sta clrU
 sta JSTKY
 rts

DoTurn
DoDown lda #-1
 sta clrD
 lda #1
 sta JSTKY
 rts

DoStandup
 lda #-1
 sta clrU
 jmp DoBack

DoDropguard
DoRunaway
 lda #-1
 sta clrD
 jmp DoBack

DoEngarde
 lda #-1
 sta clrD
 jmp DoFwd

DoStrike
DoPress
 lda #-1
 sta clrbtn
 sta btn
 rts

DoRelBtn
 lda #0
 sta btn
]rts rts

*-------------------------------
*
*  R N D P
*
*  Return X = guardprog, A = rnd #
*
*-------------------------------
rndp
 ldx guardprog
 jmp rnd

*-------------------------------
*
*  C H E C K   S T R I K E
*
*  Check for sword contact
*
*  Going in: Kid & Shad vars represent position in
*   UPCOMING frame
*
*  Out: Kid & Shad vars
*  (Return Action = 99 if stabbed)
*
*-------------------------------
CHECKSTRIKE
 lda KidPosn
 beq ]rts
 cmp #219
 bcc :noclimb
 cmp #229
 bcc ]rts ;on staircase
:noclimb
 jsr LoadShadwOp
 jsr TestStrike
 jsr SaveShadwOp

 jsr LoadKidwOp
 jsr TestStrike
 jsr SaveKidwOp

]rts rts

*-------------------------------
TestStrike

 lda CharSword
 cmp #2 ;in fighting mode?
 bne ]rts ;no

 lda CharBlockY
 cmp OpBlockY
 bne ]rts

* Am I on a test (strike) frame?

 lda CharPosn
 cmp #153 ;guy5 (frame before full ext.)
 beq :test
 cmp #154 ;guy6 (full ext.)
 bne ]rts

* I'm striking--is opponent blocking?

:test
 jsr getopdist
 cmp #blockrange1
 bcc :nobloc

 cmp #blockrange2
 bcs :nobloc

 lda OpPosn
 cmp #161
 beq :11
 cmp #150 ;blocking?
 bne  :nobloc ;no

* Yes -- opponent blocks my strike

:1 lda #161
 sta OpPosn ;change opp to "successful block"

:11 lda CharID
 beq :12 ;am I a guard?
 lda #blocktime ;yes--impair my blocking ability for a while
 sta justblocked

:12 lda #blockedstrike
 jsr jumpseq
 jmp animchar

* Skewer opponent?

:nobloc
 lda CharPosn
 cmp #154 ;full ext
 bne ]rts

 jsr getopdist

 ldx OpSword
 cpx #2
 bcs :ong
 cmp #offguardthres
 bcs :cont1
 rts
:ong cmp #strikerange1
 bcc ]rts

:cont1 cmp #strikerange2
 bcs ]rts

 lda #99 "stabbed"
 sta OpAction
]rts rts

*-------------------------------
*  C H E C K   S T A B
*-------------------------------
CHECKSTAB
 lda ShadAction
 cmp #99
 bne :1

 lda KidAction
 cmp #99
 beq :doublestab
:2
 jsr LoadShad
 jsr StabChar
 jsr SaveShad

 jsr rndp
 lda refractimer,x
 sta refract

:1 lda KidAction
 cmp #99
 bne ]rts

 jsr LoadKid
 jsr StabChar
 jmp SaveKid

* Both chars finish lunge simultaneously

:doublestab
 lda #1
 sta KidAction
 bne :2 ;player wins a tie
]rts rts

*-------------------------------
* Change shadowman posn
* In: A-X = shadpos L-H
* Out: Char data
*-------------------------------
chgshadposn
 sta ztemp
 stx ztemp+1
 ldy #6
:loop lda (ztemp),y
 sta Char,y
 dey
 bpl :loop

 ldy #7
 lda (ztemp),y
 jsr jumpseq

 lda #1
 sta CharID

 lda #0
 sta PlayCount ;zero playback counter
 rts

* ... & save

csps jsr chgshadposn

 lda #3
 sta guardprog

 lda #shadstrength
 sta MaxOppStr
 sta OppStrength

 jmp SaveShad

*-------------------------------
* (Posn, X, Y, Face, BlockX, BlockY, Action)
*               0  1  2  3  4  5  6

shadpos6a hex 0f,51,76,00,00,01,00
 db stand

shadpos5 hex 0f,37,37,00,ff,00,00
 db stand ;just o.s. to L

shadpos12 hex 0f,51,f0,00,00,00,00
 db stepfall

*-------------------------------
EndProg = -2
EndDemo = -1
Ctr = 0
Fwd = 1
Back = 2
Up = 3
Down = 4
Upfwd = 5
Press = 6
Release = 7

* Commands:
*
* -2 - end of programmed sequence
* -1 - end of demo
*  0 - center jstk & release btn
*  1 - jstk fwd
*  2 - jstk back
*  3 - jstk up
*  4 - jstk down
*  5 - jstk up & fwd
*  6 - press & hold btn
*  7 - release btn

*-------------------------------
*
* Prerecorded sequence format:
*
*  1.  Frame # (1 byte)
*  2.  Command (1 byte)
*
* 255 frames = approx. 25-30 seconds
*
*-------------------------------
* Level 5 (THIEF): Steal potion

ShadProg5
 db 0,Ctr
 db 1,Fwd
 db 14,Ctr
 db 18,Press
 db 29,Release
 db 45,Back
 db 49,Fwd
 db 255,EndProg

*-------------------------------
*
*  Play back prerecorded movement sequence
*
*  In: A-X = program start addr
*      PlayCount = frame #
*      PreRecPtr = pointer to next command
*
*-------------------------------
AUTOPLAYBACK
 sta ProgStart
 stx ProgStart+1

* Inc frame counter

 lda PlayCount
 cmp #254
 bcs :rts
 inc PlayCount

* Look up time of next command

 ldy PreRecPtr

 lda PlayCount
 cmp (ProgStart),y
 bcs :next

* Not there yet--repeat last command

 dey
 lda (ProgStart),y
 jmp :ex

* We're there--

:next iny
 lda (ProgStart),y ;command
 iny
 sty PreRecPtr

* Execute command

:ex cmp #-1
 beq :enddemo
 cmp #0
 beq :ctr
 cmp #1
 beq :fwd
 cmp #2
 beq :back
 cmp #3
 beq :up
 cmp #4
 beq :down
 cmp #5
 beq :upfwd
 cmp #6
 beq :press
 cmp #7
 beq :release
:rts
]rts rts

* Commands

:ctr jmp DoRelease
:fwd jmp DoFwd
:back jmp DoBack
:up jmp DoUp
:down jmp DoDown
:upfwd jsr DoUp
 jmp DoFwd
:press jmp DoPress
:release jmp DoRelBtn

:enddemo ; lda autopilot
; bne :endpb
 jmp attractmode ;Game: end demo
:endpb ; lda #0 ;Editor: end playback
; sta autopilot
; rts

*-------------------------------
*
*  C U T   C H E C K
*
*  Cut with kid
*
*-------------------------------
CUTCHECK
 lda CUTTIMER
 beq :ok

 dec CUTTIMER
]rts rts

:ok
 jsr LoadKid
 jsr setupchar
 jsr getedges
 jsr cutchar ;cut with character
 bmi ]rts ;no cut
 sta ]cutdir

 jsr SaveKid

 lda CharScrn
 sta cutscrn

 lda ShadFace
 cmp #86 ;is there a guard on old screen?
 beq ]rts ;no

* What to do with guard?  Two choices:
*
*  (1) UPDATE -- leave guard behind on old screen (& update
*      his coords so he'll still be there when we come back)
*  (2) TRANSFER -- transfer guard to new screen (& delete his
*      coords from old screen)

 lda ShadLife
 bpl :update ;dead guard on old screen--leave him behind

 lda ShadSword
 cmp #2
 bne :update

* Is there a live guard on new screen?

 ldx KidScrn
 lda GdStartBlock-1,x
 cmp #30
 bcs :nonew ;no

 lda GdStartSeqH-1,x
 beq :update ;yes

* If guard is too far o.s., leave him behind

:nonew
 lda ]cutdir
 beq :left
 cmp #1
 beq :right
 cmp #2
 beq :up

:down lda ShadBlockY
 cmp #3
 bcs :transfer
 bcc :update

:up lda ShadBlockY
 bmi :transfer
 bpl :update

:right lda ShadX
 cmp #ScrnWidth+25 ;25 is safety factor
 bcc :update
 bcs :transfer

:left lda ShadX
 cmp #256-ScrnWidth-25
 bcs :update

* Take him with us

:transfer jmp transferguard

* Leave him behind

:update jmp updateguard

*-------------------------------
*
* Transfer guard from old screen to new screen
* (Also remove any dead guards from new scrn)
*
*-------------------------------
transferguard
 lda #-1
 ldx KidScrn ;new scrn
 sta GdStartBlock-1,x
 ldx ShadScrn ;old scrn
 sta GdStartBlock-1,x

 jsr LoadShad

 lda ]cutdir
 jsr cut

 jmp SaveShad

]rts rts

*-------------------------------
*
* Leaving guard behind on old screen--
* update guard coords
*
*-------------------------------

updateguard
 lda ShadFace
 cmp #86
 beq ]rts ;no guard
 lda ShadID
 cmp #1
 beq ]rts ;not for shadman
 cmp #24
 beq ]rts ;or mouse
:gd
 lda #0 ;arbitrary--ADDGUARD will reconstruct
 sta tempblockx ;CharBlockX from CharX
 lda ShadBlockY
 sta tempblocky
 jsr indexblock
 tya
 ldx ShadScrn
 sta GdStartBlock-1,x

 lda ShadX
 sta GdStartX-1,x

 lda ShadFace
 sta GdStartFace-1,x

 lda guardprog
 sta GdStartProg-1,x

 lda ShadLife
 bpl :ok
 lda #0
 sta GdStartSeqH-1,x
 beq :cont

:ok lda ShadSeq
 sta GdStartSeqL-1,x
 lda ShadSeq+1
 sta GdStartSeqH-1,x

* and deactivate enemy char

:cont lda #86
 sta ShadFace

 lda #0
 sta OppStrength
]rts rts

*-------------------------------
*
* If enemy has fallen to screen below, catch him before
* he wraps around to top of VisScrn
*
*-------------------------------
CUTGUARD
 lda ShadFace
 cmp #86
 beq ]rts

 lda ShadY
 cmp #BotCutEdge
 bcc ]rts

* If guard, remove him altogether

 lda ShadID
 cmp #4
 beq :skel
 cmp #1
 beq :shad

]RemoveGd
 jsr deadenemy ;music, etc.

 ldx VisScrn
 lda #-1
 sta GdStartBlock-1,x
 lda #86
 sta ShadFace
 lda #0
 sta OppStrength
 lda #-1
 sta ChgOppStr
]rts rts

* If shad, vanish him

:shad lda ShadAction
 cmp #4
 bne ]rts
 jsr LoadShad
 jsr VanishChar
 jmp SaveShad

* If skel, change scrn

:skel lda ShadScrn
 jsr getdown
 sta ShadScrn
 cmp #3
 bne ]RemoveGd

* Skel lands on scrn 3

 lda #Splat
 jsr addsound
 lda #$85
 sta ShadX
 lda #1
 sta ShadBlockY
 lda #0
 sta ShadFace
 lda #-1
 sta ShadLife
 jmp updateguard

*-------------------------------
*
*  C U T   C H A R
*
*  Is character passing o.s.?  If so, cut with him to next scrn
*
*  Change CharX,Y,BlockY,Scrn to reflect posn on new scrn
*
*  Return A = direction of cut, -1 if no cut
*
*-------------------------------
cutchar
 lda CharY

 ldx CharAction
 cpx #5
 beq :notup
 cpx #4
 beq :notup ;In freefall--cut only down
 cpx #3
 beq :notup

*  Cut up/down?

 cmp #TopCutEdgePl
 bcc :CUTUP

 cmp #TopCutEdgeMi
 bcs :CUTUP
:notup
 cmp #BotCutEdge
 bcs :CUTDOWN

*  Cut left/right?

 ldx CharPosn
 cpx #135
 bcc :nocu
 cpx #150
 bcc :nocut ;don't cut L/R on climbup
:nocu cpx #110
 bcc :nosu
 cpx #120
 bcc :nocut ;or on standup
:nosu cpx #150
 bcc :nost
 cpx #163
 bcc :nocut
 cpx #166
 bcc :nost
 cpx #169
 bcc :nocut ;or on strike/block
:nost lda CharAction
 cmp #7
 beq :nocut ;or on turning

 ldx CharFace ;-1=left, 0=right
 beq :faceR
;facing left
 lda leftej
 cmp #LeftCutEdge
 bcc :CUTLEFT
 beq :CUTLEFT

 cmp #ScrnRight+1
 bcs :CUTRIGHT
 bcc :nocut

:faceR
 lda CharScrn
 ldx #9
 ldy CharBlockY
 jsr rdblock

 cmp #panelwif
 beq :nocutr
 cmp #panelwof
 beq :nocutr ;don't cut R if a panel blocks view

 lda rightej
 cmp #RightCutEdge
 bcs :CUTRIGHT

:nocutr lda rightej
 cmp #ScrnLeft-1
 bcc :CUTLEFT
 beq :CUTLEFT

:nocut lda #-1
 rts

:CUTLEFT jsr mirrmusic
 jsr milestone3
 lda #0
 bpl :cut

:CUTRIGHT jsr stealsword
 jsr jaffmusic
 lda #1
 bpl :cut

:CUTUP lda #2
 bpl :cut

* Level 6 ("Plunge"): Kid falls off screen 1 into next level

:CUTDOWN
 jsr infinity

 lda level
 cmp #6
 bne :no6
 lda CharScrn
 cmp #1
 beq :nocut
:no6
 lda #3
:cut pha
 jsr cut
 pla
]rts rts

*-------------------------------
* Level 12--fall off into infinity
*-------------------------------
infinity rts

*-------------------------------
* Passed Level 3 milestone?
*-------------------------------
milestone3
 lda level
 cmp #3
 bne ]rts
 lda #7 ;scrn to R of gate
]mcheck cmp CharScrn
 bne ]rts
 lda #1
 sta milestone
 lda MaxKidStr
 sta origstrength
 rts

*-------------------------------
* Level 12: Shadow steals sword
*-------------------------------
stealsword
 lda level
 cmp #12
 bne ]rts
 lda CharScrn
 cmp #18 ;scrn below swordscrn
 bne ]rts
 lda #swordscrn
 ldx #swordx
 ldy #swordy
 jsr rdblock
 lda #floor
 sta (BlueType),y
 rts

*-------------------------------
* Level 13: Play Jaffar's Theme
*-------------------------------
jaffmusic
 lda level
 cmp #13
 bne ]rts
 lda exitopen
 bne ]rts
 lda CharScrn
 cmp #3
 bne ]rts
 lda #s_Jaffar
 ldx #25
 jmp cuesong

*-------------------------------
* Level 4 ("Mirror"): Play danger theme for mirror
*-------------------------------
mirrmusic
 lda exitopen
 beq :no4
 cmp #77
 beq :no4
 lda level
 cmp #4
 bne :no4
 lda CharBlockY
 cmp #miry
 bne :no4
 lda CharScrn
 cmp #11 ;scrn to R of mirscrn
 bne :no4
 lda #s_Danger
 ldx #50
 jsr cuesong
 lda #77
 sta exitopen ;so we don't repeat theme
:no4
]rts rts

*-------------------------------
*
*  C U T
*
*  Move char from CharScrn to adjacent screen
*
*  In: A = cut dir: 0 = left, 1 = right, 2 = up, 3 = down
*
*-------------------------------
CUT
 cmp #3
 beq Cdown
 cmp #1
 beq Cright
 cmp #2
 beq Cup

Cleft
 lda CharScrn
 jsr getleft ;get new screen #
 sta CharScrn

 lda #140
 clc
 adc CharX
 sta CharX

 ldx #1 ;new FromDir
 rts

Cright
 lda CharScrn
 jsr getright
 sta CharScrn

 lda CharX
 sec
 sbc #140
 sta CharX

 ldx #0
 rts

Cup
 lda CharScrn
 jsr getup
 sta CharScrn

 lda CharBlockY
 clc
 adc #3
 sta CharBlockY

 lda CharY
 clc
 adc #189
 sta CharY

 ldx #3
 rts

Cdown
 lda CharScrn
 jsr getdown
 sta CharScrn

 lda CharBlockY
 sec
 sbc #3
 sta CharBlockY

 lda CharY
 sec
 sbc #189
 sta CharY

 ldx #2
]rts rts

*-------------------------------
*
* A D D  G U A R D
*
* On cut to new screen--if guard is there, bring him to life
* Also handles hard-wired shadowman appearances
*
* In: VisScrn
*
*-------------------------------
ADDGUARD
 lda #0
 sta offguard

* Level 12

 lda level
 cmp #12
 bne :not12
 lda exitopen ;set when shadow drops
 bne ]rts
 lda mergetimer
 bne :1 ;shadow has been reabsorbed
 lda VisScrn
 cmp #swordscrn
:1 bne ]rts
 sta CharScrn

 ldx #swordx
 ldy #swordy
 jsr rdblock
 cmp #sword
 beq ]rts ;sword is still there
 lda #0
 sta shadowaction
 lda #1
 sta exitopen
 lda #shadpos12
 ldx #>shadpos12
 jmp csps

* Level 6 (Plunge)

:not12
 lda level
 cmp #6 ;plunge
 bne :not6

 lda VisScrn
 sta CharScrn
 cmp #1
 bne AddNormalGd

 lda exitopen
 cmp #77
 beq :norepeat
 lda #s_Danger
 ldx #50
 jsr cuesong
 lda #77
 sta exitopen
:norepeat
 lda #shadpos6a
 ldx #>shadpos6a
 jmp csps

* Level 5 (Thief)

:not6 lda level
 cmp #5 ;thief
 bne :not5

 lda VisScrn
 sta CharScrn
 cmp #flaskscrn
 bne AddNormalGd

 ldx #flaskx
 ldy #flasky
 jsr rdblock
 cmp #flask
 bne ]rts ;potion is gone

 lda #shadpos5
 ldx #>shadpos5
 jmp csps
]rts rts
:not5

*-------------------------------
AddNormalGd
 ldx VisScrn
 lda GdStartBlock-1,x
 cmp #30
 bcs ]rts ;no guard on this scrn

* Bring guard to life (or death)

 stx CharScrn

 jsr unindex ;return A = blockx, X = blocky
 stx CharBlockY

 lda FloorY+1,x
 sta CharY

 ldx VisScrn
 lda GdStartX-1,x
 sta CharX
 jsr getblockxp
 sta CharBlockX

 ldx VisScrn
 lda GdStartFace-1,x
 sta CharFace

 lda level
 cmp #3
 bne :3

 lda #4 ;skel
 bne :4
:3 lda #2 ;guard
:4 sta CharID

 lda GdStartSeqH-1,x
 bne :1 ;0 is code for fresh start

 lda CharID
 cmp #4
 bne :5
 lda #2
 sta CharSword
 lda #landengarde ;skel (ready)
 bne :6
:5 lda #0
 sta CharSword
 lda #alertstand ;guard
:6 jsr jumpseq
 jmp :2

:1 sta CharSeq+1
 lda GdStartSeqL-1,x
 sta CharSeq

:2 jsr animchar

 lda CharPosn
 cmp #185 ;killed
 beq :dead
 cmp #177 ;impaled
 beq :dead
 cmp #178 ;halved
 beq :dead

* Live guard

 lda #-1
 sta CharLife

 lda #0
 sta alertguard
 sta refract
 sta justblocked

 jsr getgdstrength
 jmp :cont

* Dead guard

:dead lda #1
 sta CharLife
 lda #0
 sta OppStrength

* Continue

:cont lda #0
 sta CharXVel
 sta CharYVel
 lda #1
 sta CharAction

 ldx VisScrn
 lda GdStartProg-1,x
 cmp #numprogs
 bcc :ok
 lda #3 ;default
:ok sta guardprog

 ldx level
 lda basiccolor,x
 ldx guardprog
 eor specialcolor,x ;0 = normal, 1 = special
 sta GuardColor  ;0 = blue, 1 = red

 jmp SaveShad ;save ShadVars

*-------------------------------
* Get guard fighting strength
*-------------------------------
getgdstrength
 ldx level
 lda basicstrength,x
 ldx guardprog
 clc
 adc extrastrength,x
 sta MaxOppStr
 sta OppStrength
]rts rts

*-------------------------------
 lst
 ds 1
 usr $a9,17,$800,*-org
 lst off


================================================
FILE: 01 POP Source/Source/BGDATA.S
================================================
* bgdata
 tr on
*-------------------------------
* Indexed by PIECE ID#:

space = 0
floor = 1
spikes = 2
posts = 3
gate = 4
dpressplate = 5 ;down
pressplate = 6 ;up
panelwif = 7 ;w/floor
pillarbottom = 8
pillartop = 9
flask = 10
loose = 11
panelwof = 12 ;w/o floor
mirror = 13
rubble = 14
upressplate = 15
exit = 16
exit2 = 17
slicer = 18
torch = 19
block = 20
bones = 21
sword = 22
window = 23
window2 = 24
archbot = 25
archtop1 = 26
archtop2 = 27
archtop3 = 28
archtop4 = 29

*-------------------------------
* A & B sections have l.l. of (X = BlockLeft, Y = BlockBot-3)
* C & D sections have l.l. of (X = BlockLeft, Y = BlockBot)
* All x & y offsets are relative to these values
* (Front pieces are relative to A)

*-------------------------------
*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
*              16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

maska hex 00,03,03,03,03,03,03,03,03,00,03,03,00,03,03,03
 hex 03,00,00,03,00,03,00,03,00,03,00,00,00,00

piecea hex 00,01,05,07,0a,01,01,0a,10,00,01,00,00,14,20,4b
 hex 01,00,00,01,00,97,00,01,00,a7,a9,aa,ac,ad

pieceay hex 00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00
 dfb 00,00,00,00,00,00,00,00,00,00,00,-4,-4,-4

maskb hex 00,04,04,04,04,04,04,00,04,00,04,00,00,04,04,04
 hex 00,04,04,04,04,04,04,00,04,04,00,00,00,00

pieceb hex 00,02,06,08,0b,1b,02,9e,1a,1c,02,00,9e,4a,21,1b
 hex 4d,4e,02,51,84,98,02,91,92,02,00,00,00,00

pieceby dfb 00,00,00,00,00,01,00,03,00,03,00,00,03,00,00,-1
 dfb 00,00,00,-1,02,00,00,00,00,00,00,00,00,00

bstripe hex 00,47,47,00,00,47,47,00,00,00,47,47,00,00,47,47
 hex 00,00,47,00,00,00,47,00,00,47,00,00,00,00

*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
*              16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

piecec hex 00,00,00,09,0c,00,00,9f,00,1d,00,00,9f,00,00,00
 hex 4f,50,00,00,85,00,00,93,94,00,00,00,00,00

pieced hex 00,15,15,15,15,18,19,16,15,00,15,00,17,15,2e,4c
 hex 15,15,15,15,86,15,15,15,15,15,ab,00,00,00

fronti hex 00,00,00,45,46,00,00,46,48,49,87,00,46,0f,13,00
 hex 00,00,00,00,83,00,00,00,00,a8,00,ae,ae,ae

fronty dfb 00,00,00,-1,00,00,00,00,-1,03,-3,00,00,-1,00,00
 dfb 00,00,00,00,00,00,00,00,00,-1,0,-36,-36,-36

frontx hex 00,00,00,01,03,00,00,03,01,01,02,00,03,01,00,00
 hex 00,00,00,00,00,00,00,00,00,01,00,00,00,00

*-------------------------------
* special pieces

gatebotSTA = $43
gatebotORA = $44
gateB1 = $37
gatecmask = $0d

gate8c hex 2f,30,31,32,33,34,35,36
gate8b hex 3e,3d,3c,3b,3a,39,38,37

*-------------------------------
* Climbup masking

CUmask = $11
CUpiece = $12
CUpost = $0e

*-------------------------------
* Exit

stairs = $6b
door = $6c
doormask = $6d
toprepair = $6e

archtop3sp = $a1

*-------------------------------
* Spike animation frames
*               0  1  2  3  4  5  6  7  8  9 10 11

spikea hex 00,22,24,26,28,2a,28,24,22,00
spikeb hex 00,23,25,27,29,2b,29,25,23,00

spikeExt = 5 ;
spikeRet = 9 ;must match MOVEDATA

*-------------------------------
* Slicer animation frames
*               0  1  2  3  4  5  6  7  8  9 10 11

slicerseq dfb 04,03,01,02,05,04,04

slicerExt = 2
slicerRet = 6 ;must match MOVEDATA

slicertop hex 00,58,5a,5c,5e
slicerbot hex 57,59,5b,5d,5f
slicerbot2 hex 8e,8f,90,5d,5f ;smeared
slicergap dfb 00,38,46,53,55
slicerfrnt hex 65,66,67,68,69

*-------------------------------
* Loose floor
*               0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

looseb = $1b

loosea hex 01,1e,01,1f,1f,01,01,01,1f,1f,1f
looseby dfb 00,01,00,-1,-1,00,00,00,-1,-1,-1
loosed hex 15,2c,15,2d,2d,15,15,15,2d,2d,2d

Ffalling = 10 ;1st "falling" frame
;must match MOVEDATA

*-------------------------------
specialflask = $95

swordgleam1 = $b3
swordgleam0 = $99

*-------------------------------
* panels

panelb0 = $9e
panelc0 = $9f
numpans = 3

panelb hex 9e,9a,81
panelc hex 9f,9b,82

archpanel = $a1

*-------------------------------
* back wall panels for space & floor

numbpans = 3

spaceb hex 00,a3,a5,a6
spaceby dfb 0,-20,-20,0

floorb hex 02,a2,a4,a4
floorby dfb 00,00,00,00

*-------------------------------
* solid blocks

numblox = 2

blockb hex 84,6f
blockc hex 85,85
blockd hex 86,86
blockfr hex 83,83

*-------------------------------
* moveparams

gmaxval = 47*4
gminval = 0

*-------------------------------
eof


================================================
FILE: 01 POP Source/Source/BOOT.S
================================================
*  boot
org = $800
 lst off
*-------------------------------
* $800 TS (0,0) boot sector

SLOT = $2b
sector = $50

text = $fb2f
home = $fc58
vtab = $FB5B
cout = $FDF0
normal = $fe84
pr0 = $fe93
in0 = $fe89

*-------------------------------
 org org

 hex 01

entry lda #$60
 sta entry

 lda #$ff
 sta $4fb
 sta $3f3
 sta $3f4
 sta $c000 ;80store off
 sta $c002 ;RAMRD main
 sta $c004 ;RAMWRT main
 sta $c00c ;80col off
 sta $c00e ;Altcharset off
 sta $c081 ;write RAM, read ROM (2nd 4k bank)
 jsr text
 jsr home
 jsr normal
 jsr pr0
 jsr in0

 ldx SLOT
 txa
 lsr
 lsr
 lsr
 lsr
 ora #$c0
 sta :rdsect+2
 lda #$0f
 sta sector

:0 ldy sector
 lda skewtbl,y
 sta $3d
 lda sectaddr,y
 beq :1
 sta $27
:rdsect jsr $005c
:1 dec sector
 bne :0

 lda SLOT
 jmp $900

skewtbl hex 00,0d,0b,09,07,05,03,01
 hex 0e,0c,0a,08,06,04,02,0f

sectaddr hex 00,09,00,00,00,00,00,00
 hex 30,31,32,33,34,00,00,00

*===============================
*  boot stage 2

rw18 = $d000

slot = $fd
track = $fe
lastrack = $ff

 dum $00

dest ds 2
source ds 2
endsourc ds 2

 dend
*-------------------------------
 ds $900-*

stage2 stx slot

 jsr check128k ;check for 128K memory

 jsr moverw18 ;& move RW18 to D000

 lda #0
 sta lastrack
 sta $3f3
 sta $3f4 ;zero reset vector

 jsr rw18
 hex 07,a9 ;Bbund ID byte

 jsr rw18
 hex 00,01,00 ;drive 1 on

 jsr rw18 ;seek track 1
 hex 02,00,01

* load & run stage 3 boot
* from drive 1

 jsr rw18
 hex c3,ee

 jmp $ee00

*-------------------------------------------------
* Check for AUX memory routine

CHECKER lda #$EE
 sta $C005
 sta $C003
 sta $0800
 lda $0C00
 cmp #$EE
 bne :0
 asl $0C00
 lda $0800
 cmp $0C00
 beq :1
:0 clc
:1 sta $C004
 sta $C002
 rts

CHECKEND = *-CHECKER

*-------------------------------------------------
*
* Check to make sure //c or //e
* with 128k
*
*-------------------------------
check128k
 sta $c081

 lda $FBB3 ;Apple // family ID byte
 cmp #6
 bne NOT128K ;Must be e/c/GS

 bit $C017
 bmi NOT128K

 ldx #CHECKEND
:0 lda CHECKER,X
 sta $180,X
 dex
 bpl :0

 jsr $180
 bcs NOT128K

 rts

*-------------------------------
* Turn off drive and display message

NOT128K ldx SLOT
 lda $C088,X

 jsr text
 jsr home
 lda #8
 jsr vtab

 ldy #0
:0 lda MEMTEXT,Y
 beq *
 jsr cout
 cmp #$8D
 bne :1
 lda #4
 sta $24
:1 iny
 bne :0

MEMTEXT hex 8D
 asc "REQUIRES A //C OR //E WITH 128K"
 hex 00

*-------------------------------
* Move RW18
* d0 < 30.40
*-------------------------------
moverw18
 bit $c08b
 bit $c08b ;rd/wrt RAM, 1st 4k bank

 lda #$d0
 ldx #$30
 ldy #$40

* a < x.y
* 20 < 40.60 means 2000 < 4000.5fffm
* WARNING: If x >= y, routine will wipe out 64k

movemem sta dest+1
 stx source+1
 sty endsourc+1

 ldy #0
 sty dest
 sty source
 sty endsourc

:loop lda (source),y
 sta (dest),y

 iny
 bne :loop

 inc source+1
 inc dest+1

 lda source+1
 cmp endsourc+1
 bne :loop

 rts

*-------------------------------
 sav boot


================================================
FILE: 01 POP Source/Source/COLL.S
================================================
* coll
org = $4500
 tr on
 lst off
*-------------------------------
*
*  PRINCE OF PERSIA
*  Copyright 1989 Jordan Mechner
*
*-------------------------------
 org org

 jmp CHECKBARR
 jmp COLLISIONS
 jmp GETFWDDIST
 jmp CHECKCOLL
 jmp ANIMCHAR

 jmp CHECKSLICE
 jmp CHECKSLICE2
 jmp markmeters ;temp
 jmp CHECKGATE
 jmp firstguard ;temp

 jmp ENEMYCOLL

*-------------------------------
 lst
 put eq
 lst
 put gameeq
 lst
 put seqdata
 lst
 put soundnames
 lst
 put movedata
 lst off

 dum $f0
ztemp ds 1
CollFace ds 1
tempobjid ds 1
tempstate ds 1
 dend

*-------------------------------
*  Distance in pixels from either edge of block to barrier
*  BarL + BarR + BarWidth == 14
*
*  Indexed by barrier code:
*  0 = clear, 1 = panel/gate, 2 = flask, 3 = mirror/slicer
*  4 = block

BarL db 0,12,2,0,0
BarR db 0,0,9,11,0

*-------------------------------
DeathVelocity = 33
OofVelocity = 22

gatemargin = 6 ;higher = more generous

]rts rts
*-------------------------------
*
*  C H E C K  B A R R I E R
*
*  Check for collisions with vertical barriers
*
*-------------------------------
CHECKBARR
 lda #-1 ;"no-collision" flag
 sta collideL
 sta collideR

* Check for situations where character is temporarily
* "collision-proof"

 lda CharAction
 cmp #7 ;turning?
 beq ]rts

* Initialize CD/SN buffers
* (Copy "lastframe" data from "thisframe", "above", or "below";
* init "thisframe" with FF)

 lda CharBlockY
 sta BlockYthis

 jsr initCDbufs

 lda BlockYthis
 sta BlockYlast

* Get beginning & end of range

 lda CDRightEj
 jsr getblockxp
 clc
 adc #2
 cmp #11
 bcc :ok
 lda #11
  ;Last (rightmost) block in range +1
:ok sta endrange

 lda CDLeftEj
 jsr getblockxp
 tax
 dex ;First (leftmost) block in range
 stx begrange

* Get CD & SN data for every block in range [begrange..endrange]
* on this level (BlockYthis) and on levels below & above

* This level...

 lda BlockYthis
 sta blocky

 lda #SNthisframe
 ldx #CDthisframe
 jsr getCData

* Level below...

 lda BlockYthis
 clc
 adc #1
 sta blocky

 lda #SNbelow
 ldx #CDbelow
 jsr getCData

* ...and level above

 lda BlockYthis
 sec
 sbc #1
 sta blocky

 lda #SNabove
 ldx #CDabove
 jsr getCData

* Got new data... now compare thisframe with lastframe
* If a nybble has changed from 0 to 1, we have a collision.

 ldx #9
:loop2
 lda SNthisframe,x
 bmi :no ;ff = no data for this frame
 cmp SNlastframe,x
 bne :no ;no corresponding data for last frame

 lda CDlastframe,x
 and #$0f ;low nybble first (L edge of barr)
 bne :noL

 lda CDthisframe,x
 and #$0f
 beq :noL

 stx collideL ;We have collision w/ L edge
;x = block # (0-9)

:noL lda CDlastframe,x
 and #$f0 ;hi nybble (R edge of barr)
 bne :noR

 lda CDthisframe,x
 and #$f0
 beq :noR

 stx collideR ;collision w/ R edge
:noR
:no dex
 bpl :loop2

 ldx collideL
 ldy collideR

]rts rts

*-------------------------------
*
*  G E T  C D A T A
*
*  Get "thisframe" data for specified blocky
*
*-------------------------------
getCData
 sta :smodSN+1
 stx :smodCD+1

 lda begrange
 jsr getblockej ;left edge of block
 clc
 adc #angle ;perspective
 sta blockedge

 ldx begrange
:loop stx bufindex

* First compare L edge of barr with R edge of char

 lda CharScrn
 ldx bufindex
 ldy blocky
 jsr getleftbar ;Get left edge of barrier

 cmp CDRightEj
 bcc :RofL
 ;= means L of L
:LofL lda #0
 beq :cont1

:RofL lda #$f
:cont1 sta ztemp

* Now compare R edge of barr with L edge of char

 lda CharScrn
 ldx bufindex
 ldy blocky
 jsr getrightbar ;Get right edge of barrier

 cmp CDLeftEj
 bcc :RofR
 beq :RofR ;= means R of R

:LofR lda #$f0
 bne :cont2

:RofR lda #0
:cont2 ora ztemp

 ldx tempblockx ;guaranteed 0-9 by rdblock
:smodCD sta CDthisframe,x

 lda tempscrn
:smodSN sta SNthisframe,x ;screen #

 lda blockedge
 clc
 adc #14
 sta blockedge

 ldx bufindex
 inx
 cpx endrange
 bne :loop

]rts rts

*-------------------------------
*
*  I N I T   C D B U F S
*
*  Initialize SN and CD buffers
*  (Take "lastframe" data from "thisframe", "above", or "below";
*  init "thisframe" with FF)
*
*-------------------------------
initCDbufs
 lda BlockYthis
 cmp BlockYlast ;same BlockY as last frame?
 beq :usethis ;yes--copy data from "thisframe"

 clc
 adc #3
 cmp BlockYlast
 beq :usethis

 sec
 sbc #6
 cmp BlockYlast
 beq :usethis

* BlockY has changed--copy data from "above" or "below"

 lda BlockYthis
 clc
 adc #1
 cmp BlockYlast
 beq :useabove
 sec
 sbc #3
 cmp BlockYlast
 beq :useabove

:usebelow
 lda #SNbelow
 ldx #CDbelow
 jmp :cont

:useabove lda #SNabove
 ldx #CDabove
 jmp :cont

:usethis lda #SNthisframe
 ldx #CDthisframe

:cont sta :smodSN+1
 stx :smodCD+1

* Copy contents of appropriate SN & CD buffers (thisframe,
* below, or above) into lastframe buffers...
* and initialize SN buffers with $ff

 ldx #9
:zloop
:smodSN lda SNbelow,x
 sta SNlastframe,x

:smodCD lda CDbelow,x
 sta CDlastframe,x

 lda #$ff
 sta SNthisframe,x
 sta SNabove,x
 sta SNbelow,x

 dex
 bpl :zloop

]rts rts

*-------------------------------
*
*  G E T   L E F T   B A R
*
*  Get X-coord of left edge of barrier
*
*  In:  X/Y/A = blockx/blocky/scrn
*       blockedge
*
*  Out: A = screen X-coord (140)
*       Return A = 255 if this block is no barrier
*
*-------------------------------
getleftbar
 jsr rdblock ;get block ID

 jsr cmpbarr ;return A = barrier code #
 beq :clear ;or -1 if clear
 tay

 lda blockedge
 clc
 adc BarL,y ;barr dist from L edge of block
 sec
 rts

:clear lda #255
 clc
 rts

*-------------------------------
*
*  G E T   R I G H T   B A R
*
*  Get right edge of barrier, 0 if clear
*
*-------------------------------
getrightbar
 jsr rdblock

 jsr cmpbarr
 beq :clear
 tay

 lda blockedge
 clc
 adc #13
 sec
 sbc BarR,y ;barr dist from R edge of block
 sec
 rts

:clear lda #0
 clc
]rts rts

*-------------------------------
*
*  C O L L I S I O N S
*
*  If a collision was detected, act on it
*
*  In: collideL/R: - if no coll, 0-9 refers to block in
*      which collision occurred
*
*  (CollideL is collision with LEFT EDGE of barrier
*  CollideR is collision with RIGHT EDGE of barrier)
*
*-------------------------------
COLLISIONS
 lda AMtimer ;antimatter timer
 beq :cont
 lda $c030
 dec AMtimer
 rts
:cont

* Check for situations where we let character
* pass thru barrier (e.g., climbing up onto ledge)

 lda CharAction
 cmp #2 ;hanging?
 beq ]rts
 cmp #6 ;hanging?
 beq ]rts
 lda CharPosn
 cmp #135
 bcc :cont2
 cmp #149
 bcc ]rts ;climbing?

:cont2
 ldx collideL
 bmi :noL
 stx collX
 jmp leftcoll

:noL ldx collideR
 bmi :noR
 stx collX
 jmp rightcoll
:noR
]rts rts

*-------------------------------
*
*  R I G H T   C O L L I S I O N
*
*-------------------------------
rightcoll
 lda CharSword
 cmp #2 ;if in fighting mode,
 beq :1 ;waive front-facing requirement

 lda CharFace
 bpl ]rts
:1
 jsr checkcoll1
 bcc ]rts

 lda tempscrn
 ldx tempblockx
 ldy tempblocky

 jsr getrightbar ;edge of barr
 sec
 sbc CDLeftEj ;dist to char

 ldx #0 ;right
 jmp collide

*-------------------------------
*
*  L E F T   C O L L I S I O N
*
*-------------------------------
leftcoll
 lda CharSword
 cmp #2
 beq :1

 lda CharFace
 bne ]rts
:1
 jsr checkcoll1
 bcc ]rts

 lda tempscrn
 ldx tempblockx
 ldy tempblocky
 jsr getleftbar
 sec
 sbc CDRightEj ;- dist to char

 ldx #-1 ;left
 jmp collide

*-------------------------------
*
* Call CHECKCOLL for block #X
*
* In: CD data; X = blockx
*
*-------------------------------
checkcoll1
 stx tempblockx

 lda CharBlockY
 bpl :2
 clc
 adc #3
 bne :1

:2 cmp #3
 bcc :1
 sec
 sbc #3
:1 sta tempblocky

 lda SNthisframe,x
 sta tempscrn

 jsr rdblock1

 jmp CHECKCOLL

*-------------------------------
*
*  C H E C K   C O L L
*
*  In: RDBLOCK results (A = objid)
*
*  Out: tempblockx,tempblocky,tempscrn
*       cs if collision, cc if not
*
*-------------------------------
CHECKCOLL
 cmp #flask
 beq :no ;flask is not really a barrier

 cmp #gate
 beq :gate

 cmp #slicer
 beq :slicer

 cmp #mirror
 beq :mirror
 bne :c1

* You can pass thru mirror from R only if you take a
* running jump

:mirror
 lda CharID
 bne :c1 ;must be kid
 lda CharPosn
 cmp #39
 bcc :c1
 cmp #44
 bcs :c1
 lda CharFace
 bpl :c1

 jsr smashmirror
 lda #$ff
 sta createshad ;set flag

 clc
 rts

* Is slicer closed?

:slicer lda (BlueSpec),y
 cmp #slicerExt
 bne :no ;no--pass thru
 beq :c1

* Is gate low enough to bar you?

:gate jsr gatebarr? ;return cc if gate bars you
 bcc :c1

* no collision--pass thru barrier

:no clc
 rts

* Yes, collision--get blockedge & return cs

:c1
 lda tempblockx
 jsr getblockej
 jsr AdjustScrn
 clc
 adc #angle
 sta blockedge
:yes sec
]rts rts

*-------------------------------
*
* AdjustScrn
*
* In:  tempscrn, VisScrn
*      scrnLeft/Right/BelowL/BelowR
*      A = X-coord on tempscrn
*
* Out: A = X=coord on VisScrn
*
*-------------------------------
AdjustScrn
 ldx tempscrn
 cpx VisScrn
 beq ]rts
 cpx scrnLeft
 beq :osL
 cpx scrnBelowL
 beq :osL
 cpx scrnRight
 beq :osR
 cpx scrnBelowR
 beq :osR
 rts
:osR clc
 adc #ScrnWidth
 rts
:osL sec
 sbc #ScrnWidth
]rts rts

*-------------------------------
*
*  C O L L I D E
*
*  In: A = distance from barrier to character
*      X = coll direction (-1 = left, 0 = right)
*      tempblockx,y,scrn set for collision block
*
*-------------------------------
collide
 stx CollFace ;temp var

 ldx CharLife ;dead?
 bpl ]rts ;yes--let him finish falling (or whatever)

 ldx CharPosn
 cpx #177 ;impaled?
 beq ]rts ;yes--ignore collision

 clc
 adc CharX
 sta CharX

* In midair or on the ground?

 jsr rdblock1

 ldx CollFace
 bpl :faceL

 cmp #block ;If this block has no floor,
 beq :2 ;use the one in front of it
 bne :1

:2 dec tempblockx
 jmp :3

:faceL cmp #panelwof ;Panelwof is only a problem
 beq :4 ;when facing L
 cmp #panelwif
 beq :4
 cmp #block
 bne :1

:4 inc tempblockx
 lda tempscrn
 bne :3
 lda tempblockx
 cmp #10
 bne :3
 lda CharScrn
 sta tempscrn
 lda #0
 sta tempblockx ;screen 0 block 10 = CharScrn block 0

:3 jsr rdblock1

:1 jsr cmpspace
 bne GroundBump

*-------------------------------
* Bump into barrier w/o floor

AirBump
 lda #-4
 jsr addcharx
 sta CharX

 lda CharAction
 cmp #4 ;already falling?
 bne :3
;yes--just rebound off wall
 lda #0
 sta CharXVel
 beq :smackwall

:3 lda #bumpfall
 jsr jumpseq
 jsr animchar

:smackwall

BumpSound
 lda #1
 sta alertguard
 lda #SmackWall
 jmp addsound

*-------------------------------
* Bump into barrier w/floor

GroundBump
 ldx CharBlockY

 lda CharSword
 cmp #2
 beq :skipair ;no airbump if en garde

 lda FloorY+1,x
 sec
 sbc CharY
 cmp #15 ;constant
 bcs AirBump
:skipair
 lda FloorY+1,x
 sta CharY

 lda CharYVel
 cmp #OofVelocity
 bcc :okvel
 lda #-5
 jsr addcharx
 sta CharX
 rts ;let checkfloor take care of it

:okvel lda #0
 sta CharYVel

 lda CharLife
 beq :deadbump

* Is he en garde?

 lda CharSword
 cmp #2
 beq :CollideEng ;yes--collide en garde

* Should it be a hard or a soft bump?

:normal
 ldx CharPosn ;last frame

 cpx #24
 beq :hard
 cpx #25
 beq :hard ;standjump-->hard

 cpx #40
 bcc :1
 cpx #43
 bcc :hard ;runjump-->hard

:1 cpx #102
 bcc :2
 cpx #107
 bcc :hard ;freefall-->hard

:2

:soft lda #bump
 jsr jumpseq
 jsr BumpSound ;soft bump sound?
 jmp animchar

:hard lda #hardbump
:doit jsr jumpseq
 jsr animchar

 jmp BumpSound

* dead when he hits the wall

:deadbump
]rts rts

*-------------------------------
* Collide en garde

:CollideEng
 lda CollFace
 cmp CharFace
 beq :collback

 lda #bumpengfwd
 bne :doit

* Char is en garde & trying to back into barrier

:collback
 lda #bumpengback
 jsr jumpseq
 jsr animchar ;get new frame

 lda #1
 jsr addcharx
 sta CharX
 rts

*-------------------------------
*
*  G E T   F W D   D I S T
*
*  In: Char data
*
*  Out: A = size of "careful step" forward (0-14 pixels)
*       X = what you're stepping up to
*           (0 = edge, 1 = barrier, 2 = clear)
*       RDBLOCK results for that block
*
*-------------------------------
GETFWDDIST

* Get edges

 jsr GetBaseBlock
 jsr setupchar
 jsr getedges

* If this block contains barrier, get distance

 jsr getunderft ;read block underfoot
 sta tempobjid

 jsr cmpbarr
 beq :nextb ;This block is clear

 lda CharBlockX
 sta tempblockx
 jsr DBarr ;returns A = dist to barrier
 tax
 bpl :tobarr

* If next block contains barrier, get distance

:nextb
 jsr getinfront
 sta tempobjid
 cmp #panelwof
 bne :99 ;Panelwof is special case
 ldx CharFace ;if you're facing R
 bpl :toEOB

:99 jsr cmpbarr
 beq :nobarr

 lda infrontx
 sta tempblockx
 jsr DBarr
 tax
 bpl :tobarr

* If next block is dangerous (e.g., empty space)
* or sword or potion, step to end of this block

:nobarr
 jsr getinfront ;read block in front
 sta tempobjid

  cmp #loose
 beq :toEOB ;step to end of block

 cmp #pressplate
 beq :toEOB1

 cmp #sword
 beq :toEOB1
 cmp #flask
 beq :toEOB1

 jsr cmpspace
 beq :toEOB

* All clear--take a full step forward

:fullstep lda #11 ;natural step size

 ldx #2 ;clear
 bne :done

* Step to end of block (no "testfoot")

:toEOB1 jsr getdist
 beq :fullstep
 ldx #0
 beq :done

* Step to end of block

:toEOB jsr getdist ;returns # pixels to end of block (0-13)

 ldx #0 ;edge

:done ldy tempobjid
]rts rts

* Step up to barrier

:tobarr
 cmp #14
 bcs :fullstep

 ldx #1 ;barrier
 bne :done

*-------------------------------
*
* Get distance to barrier
*
* In: rdblock results; tempobjid
*     Must have called setupchar/getedges
* Out: A = distance to barrier (- if barr is behind char)
*
*-------------------------------
DBarr
 lda tempobjid
 cmp #gate
 bne :ok
;treat gate as barrier only if down
 jsr gatebarr? ;returns cs if open
 bcs :clr

:ok lda tempblockx
 jsr getblockej
 clc
 adc #angle
 sta blockedge ;L edge of this block

 lda CharFace
 bmi :checkL

* Char facing R -- get distance to barrier

:checkR
 lda tempobjid ;block ID

 jsr cmpbarr ;return A = barrier code #
 beq :clr
 tay

 lda blockedge
 clc
 adc BarL,y
 sta ztemp ;left edge of barr

 sec
 sbc CDRightEj
 rts ;If -, barr is behind char

:clr lda #-1
 rts

* Char facing L -- get distance to barr

:checkL
 lda tempobjid

 jsr cmpbarr
 beq :clr
 tay

 lda blockedge
 clc
 adc #13
 sec
 sbc BarR,y
 sta ztemp ;R edge of barr

 lda CDLeftEj
 sec
 sbc ztemp

]rts rts

*-------------------------------
*
*  A N I M   C H A R
*
*  Get next frame from sequence table;
*  update char data accordingly.
*  We're now ready to draw this frame.
*
*-------------------------------
ANIMCHAR

:next jsr getseq ;get next byte from seqtab
 ;& increment CharSeq

 cmp #chx ;"change x" instruction?
 bne :no1

 jsr getseq ;next byte is delta-x

 jsr addcharx
 sta CharX

 jmp :next

*-------------------------------
:no1 cmp #chy
 bne :no2

 jsr getseq

 clc
 adc CharY
 sta CharY

 jmp :next

*-------------------------------
:no2 cmp #aboutface
 bne :no3

 lda CharFace
 eor #$ff
 sta CharFace

 jmp :next

*-------------------------------
:no3 cmp #goto
 bne :no4

:goto jsr getseq ;low byte of address
 pha

 jsr getseq ;high byte

 sta CharSeq+1
 pla
 sta CharSeq

 jmp :next

*-------------------------------
:no4 cmp #up
 bne :no5

 dec CharBlockY

 jsr addslicers

 jmp :next

*-------------------------------
:no5 cmp #down
 bne :no6

 inc CharBlockY

 jsr addslicers

 jmp :next

*-------------------------------
:no6 cmp #act
 bne :no7

 jsr getseq
 sta CharAction

 jmp :next

:no7 cmp #setfall
 bne :no8

 jsr getseq
 sta CharXVel

 jsr getseq
 sta CharYVel

 jmp :next

:no8 cmp #ifwtless
 bne :no9

 lda weightless ;weightless?
 bne :goto ;yes--branch

 jsr getseq
 jsr getseq ;skip 2 bytes
 jmp :next ;& continue

:no9 cmp #die
 bne :no10
 jmp :next

:no10 cmp #jaru
 bne :no11

 lda #1
 sta jarabove ;jar floorboards above
 jmp :next

:no11 cmp #jard
 bne :no12

 lda #-1
 sta jarabove ;jar floorboards below
 jmp :next

*-------------------------------
:no12 cmp #tap
 bne :no13

 jsr getseq ;sound #
 cmp #0 ;0: alert guard
 beq :0

 cmp #1 ;1: footstep
 bne :1
 lda #Footstep
:tap jsr addsound
:0 lda #1
 sta alertguard
 jmp :next

:1 cmp #2 ;2: smack wall
 bne :2
 lda #SmackWall
 bne :tap
:2 jmp :next

:no13 cmp #nextlevel
 bne :no14

 jsr GoneUpstairs
 jmp :next

:no14 cmp #effect
 bne :no15

 jsr getseq ;effect #
 cmp #1
 bne :fx0

 jsr potioneffect
:fx0 jmp :next

:no15
*-------------------------------
 sta CharPosn ;frame #

]rts rts

*-------------------------------
* Char has gone upstairs
* What do we do?
*-------------------------------
GoneUpstairs
 lda level
 cmp #13
 beq :ok ;no music for level 13
 cmp #4
 bne :1 ;mirror level is special
:3 lda #s_Shadow
 bne :2

:1 lda #s_Upstairs
:2 ldx #25
 jsr cuesong

:ok inc NextLevel
 rts

*-------------------------------
*
*  Sliced by slicer? (Does CD buf show char overlapping
*  with a closed slicer?)
*
*  In: Char data, CD data
*
*-------------------------------
CHECKSLICE
 lda CharBlockY
 sta tempblocky

 ldx #9

:loop stx tempblockx

 lda CDthisframe,x
 cmp #$ff ;char overlapping barr?
 bne :ok ;no

* Yes--is it a slicer?

 lda SNthisframe,x
 sta tempscrn

 jsr rdblock1
 cmp #slicer
 bne :ok

 lda (BlueSpec),y
 and #$7f
 cmp #slicerExt ;slicer closed?
 beq :slice ;yes--slice!

* No--keep checking

:ok ldx tempblockx
 dex
 bpl :loop
]rts rts

* Slice!
* In: rdblock results for slicer block

:slice
]slice
 lda (BlueSpec),y
 ora #$80
 sta (BlueSpec),y ;set hibit (smear)

:cont lda CharPosn
 cmp #178 ;if already cut in half (e.g. by another slicer),
 beq ]rts ;leave him alone

 lda tempblockx
 jsr getblockej ;edge of slicer block
 clc
 adc #7
 sta CharX

 lda #8
 jsr addcharx
 sta CharX ;align char w/slicer

 ldx CharBlockY
 inx
 lda FloorY,x
 sta CharY ;align char w/floor

 lda #100
 jsr decstr

 lda #Splat
 jsr addsound

 lda #halve
 jsr jumpseq
 jmp animchar

*-------------------------------
*
*  Sliced by slicer?
*
*  (Use this routine for enemy, who has no CD data)
*
*  In: Char data; GETEDGES results
*
*-------------------------------
CHECKSLICE2
 jsr getunderft
 jsr :slice? ;return cs if sliced
 bcs ]rts

 inc tempblockx
 jsr rdblock1

:slice?
 cmp #slicer
 bne :safe
 lda (BlueSpec),y
 and #$7f
 cmp #slicerExt
 bne :safe ;slicer open

 lda tempblockx
 jsr getblockej
 clc
 adc #angle
 sta blockedge

 lda tempscrn
 ldx tempblockx
 ldy tempblocky
 jsr getleftbar
 cmp CDRightEj
 bcs :safe

 lda tempscrn
 ldx tempblockx
 ldy tempblocky
 jsr getrightbar
 cmp CDLeftEj
 bcc :safe
 beq :safe

 jsr rdblock1
 jsr ]slice
 sec
 rts

:safe clc
]rts rts

*-------------------------------
*
* Special situation: If char is standing directly under closing
* gate, it knocks him aside when it shuts.
*
* In: Char data, CD data
*
*-------------------------------
CHECKGATE
 lda CharAction
 cmp #7 ;turning
 beq :1
 lda CharPosn
 cmp #15 ;standing?
 beq :1
 cmp #108
 bcc ]rts
 cmp #111 ;crouching?
 bcs ]rts
:1
 jsr getunderft
 cmp #gate
 beq :check

 dec tempblockx
 jsr rdblock1
 cmp #gate
 bne ]rts
:check
 ldx tempblockx
 lda CDthisframe,x
 and CDlastframe,x
 cmp #$ff
 bne ]rts

 jsr gatebarr?
 bcs ]rts

 jsr BumpSound

* bump him left or right?

 lda tempblockx
 sta collX
 jsr getunderft
 lda tempblockx
 cmp collX
 beq :left
 bcs :right

:left lda #-5
 bne :10
:right lda #5
:10 clc
 adc CharX
 sta CharX
]rts rts

*-------------------------------
*
* Return cc if gate bars you, cs if clear
*
*-------------------------------
gatebarr?
 lda (BlueSpec),y
 lsr
 lsr
 clc
 adc #gatemargin
 cmp imheight
]rts rts

*-------------------------------
*
* Limited collision detection for enemies
* (backing into wall or gate while fighting)
*
*-------------------------------
ENEMYCOLL
 lda AMtimer ;antimatter timer
 bne ]rts

 lda CharAction
 cmp #1
 bne ]rts ;must be on ground
 lda CharLife
 bpl ]rts ;& alive
 lda CharSword
 cmp #2
 bcc ]rts ;& en garde

 jsr getunderft
 cmp #block
 beq :collide
 cmp #panelwif
 beq :collide
 cmp #gate
 bne :1
 jsr gatebarr?
 bcc :collide

* If facing R, check block behind too

:1 lda CharFace
 bmi ]rts
 dec tempblockx
 jsr rdblock1
 cmp #panelwif
 beq :collide
 cmp #gate
 bne ]rts
 jsr gatebarr?
 bcc :collide
]rts rts

* Char is en garde & trying to back into barrier
* Put him right at edge

:collide
 jsr setupchar
 jsr getedges ;get edges

 lda tempscrn
 ldx tempblockx
 ldy tempblocky
 jsr rdblock
 sta tempobjid
 jsr checkcoll
 bcc ]rts

 jsr DBarr2 ;get A = dist to barrier
 tax
 bpl ]rts
 eor #$ff
 clc
 adc #1
 jsr addcharx
 sta CharX

 lda #bumpengback
 jsr jumpseq
 jsr animchar ;get new frame
 jmp rereadblocks

*-------------------------------
*
* Special version of DBarr for enemy collisions
*
* In: checkcoll results; tempobjid
*     Must have called setupchar/getedges
* Out: A = distance to barrier (- if barr is behind char)
*
*-------------------------------
DBarr2
 lda CharFace
 bpl :checkL ;Note: reversed from DBarr

* Char's back facing R -- get distance to barrier

:checkR
 lda tempobjid ;block ID

 jsr cmpbarr ;return A = barrier code #
 beq :clr
 tay

 lda blockedge
 clc
 adc BarL,y
 sta ztemp ;left edge of barr

 sec
 sbc CDRightEj
 rts ;If -, barr is behind char

:clr lda #-1
 rts

* Char facing L -- get distance to barr

:checkL
 lda tempobjid

 jsr cmpbarr
 beq :clr
 tay

 lda blockedge
 clc
 adc #13
 sec
 sbc BarR,y
 sta ztemp ;R edge of barr

 lda CDLeftEj
 sec
 sbc ztemp

]rts rts

*-------------------------------
 lst
 ds 1
 usr $a9,16,$b00,*-org
 lst off


================================================
FILE: 01 POP Source/Source/CTRL.S
================================================
* ctrl
org = $3a00
 tr on
 lst off
*-------------------------------
 org org

 jmp PLAYERCTRL
 jmp CHECKFLOOR
 jmp SHADCTRL
 jmp REREADBLOCKS
 jmp CHECKPRESS

 jmp DOIMPALE
 jmp GENCTRL
 jmp CHECKIMPALE

*-------------------------------
 lst
 put eq
 lst
 put gameeq
 lst
 put seqdata
 lst
 put soundnames
 lst
 put movedata
 lst off

 dum $f0
ztemp ds 1
jxtemp ds 1
jytemp ds 1
jbtemp ds 1
atemp ds 1
 dend

*-------------------------------
*  Misc. changeable parameters

DeathVelocity = 33
OofVelocity = 22

grabreach = -8
grabspeed = 32 ;max Y-vel to grab ledge
grablead = 25 ;increase to grab ledge earlier
stuntime = 12

jumpupreach = 0
jumpupangle = -6

JumpBackThres = 6
StepOffFwd = 3
StepOffBack = 8

swordthres = 90 ;to go en garde (facing fwd)
swordthresN = -10 ;" " (behind you)
blockthres = 32
graceperiod = 9
gdpatience = 15

gclimbthres = 6

stairthres = 30

plus1 db -1,1
minus1 db 1,-1

*-------------------------------
*
*  If he's passed thru floor plane, change CharBlockY
*  If floor is solid, stop him
*
*-------------------------------
falling
 lda CharY

 ldx CharBlockY
 inx
 cmp FloorY,x
 bcs :1

 jmp fallon ;Hasn't reached floor yet

* Character is passing thru floor plane

:1 jsr getunderft ;Check if there's
 ;solid floor underfoot
 cmp #block
 bne :2 ;Solid block is special case--
 jsr InsideBlock ;reset him to either side of block

:2 jsr cmpspace
 bne hitflr

 inc CharBlockY ;Fall thru floor plane

]rts rts
*-------------------------------
*
*  C H E C K  F L O O R
*
*-------------------------------

CHECKFLOOR
 lda CharAction
 cmp #6 ;hanging?
 beq ]rts

 cmp #5 ;bumped?
 bne :2
 lda CharPosn
 cmp #109 ;crouched (e.g. on loose floor)
 beq :ong
 cmp #185 ;dead
 bne ]rts
:ong jmp onground

:2 cmp #4 ;freefall
 beq falling
 cmp #3
 bne :1
 lda CharPosn
 cmp #102
 bcc ]rts
 cmp #106
 bcs ]rts
 jmp fallon

:1 cmp #2 ;hanging
 beq ]rts
 jmp onground ;7, 0, or 1: on the ground

*-------------------------------
*
*  Floor stops him -- Choose appropriate landing
*
*-------------------------------
hitflr
 ldx CharBlockY
 inx
 lda FloorY,x
 sta CharY ;align char w/floor

 jsr getunderft
 cmp #spikes
 beq :hitspikes

* Has he landed too close to edge?

 jsr getinfront
 jsr cmpspace
 bne :cont ;no

 jsr getdist ;# pixels to edge
 cmp #4 ;was 2
 bcs :cont
;Yes--move him back a little
 lda #-3
 jsr addcharx
 sta CharX

:cont jsr addslicers ;trigger slicers on this level

 lda CharLife
 bpl :hardland ;dead before he hits the ground

 jsr getdist
 cmp #12
 bcc :nc
 jsr getbehind
 cmp #spikes
 beq :hitspikes ;check block behind if dist>=12

:nc jsr getunderft ;what has he landed on?
 cmp #spikes
 bne :notspikes

:hitspikes
 jsr getspikes ;are spikes lethal?
 bne :impale ;yes

:notspikes
 lda CharYVel
 cmp #OofVelocity
 bcc :softland

 cmp #DeathVelocity
 bcc :medland

:hardland
 lda #100
 jsr decstr
:hdland1
 lda #Splat
 jsr addsound

 lda #hardland
 bne :doland

:medland
 lda CharID
 cmp #1
 beq :softland ;shad lands easy
 cmp #2
 bcs :hardland ;guards can't survive 2 stories

 lda #1
 jsr decstr
 beq :hdland1

 lda #Splat
 jsr addsound

 lda #medland
 bne :doland

:softland
 lda CharID
 cmp #2
 bcs :gd ;guard always lands en garde
 lda CharSword
 cmp #2
 bne :1
:gd lda #2
 sta CharSword
 lda #landengarde
 bne :doland

:1 lda #softland
 bne :doland

:impale jmp DoImpale

:doland jsr jumpseq
 jsr animchar

 lda #0
 sta CharYVel
]rts rts

*-------------------------------
*
*  Hasn't hit floor yet -- can he grab edge above?
*
*-------------------------------
fallon
 lda btn ;is button down?
 and CharLife ;& is he alive?
 bpl ]rts
 ;yes--can he grab edge?
 lda CharYVel
 cmp #grabspeed
 bcs ]rts ;no--falling too fast

 lda CharY
 clc
 adc #grablead
 ldx CharBlockY
 inx
 cmp FloorY,x
 bcc ]rts  ;not within grabbing range yet

*  Char is within vertical range, and button is down
*  Is there a ledge within reach?

 lda CharX
 sta savekidx
 lda #grabreach
 jsr addcharx
 sta CharX
 jsr rereadblocks

 jsr :test ;can you grab ledge?
 bne :ok ;yes--do it
 lda savekidx
 sta CharX
 jmp rereadblocks
:ok ;do it!

* Align char with block

 jsr getdist

 jsr addcharx
 sta CharX

 ldx CharBlockY
 inx
 lda FloorY,x
 sta CharY

 lda #0
 sta CharYVel

 lda #fallhang
 jsr jumpseq
 jsr animchar

 lda #stuntime
 sta stunned
]rts rts

:test jsr getabove
 sta blockid
 jsr getaboveinf
 jmp checkledge

*-------------------------------
*  Is there floor underfoot?  If not, start to fall

onground
 lda Fcheck
 and #fcheckmark
 beq ]rts ;0--no need to check

 jsr getunderft
 cmp #block
 bne :1
 jsr InsideBlock ;If "inside" block, bump him outside
:1
 jsr cmpspace
 bne ]rts

* Level 12: Phantom bridge

 lda level
 cmp #12
 bne :no
 lda mergetimer
 bpl :no
 lda CharBlockY
 bne :no
 lda CharScrn
 cmp #2
 beq :yes
 cmp #13
 bne :no
 lda tempblockx
 cmp #6
 bcc :no
;Create floorboards on the fly
:yes lda #floor
 sta (BlueType),y
 jsr indexblock
 lda #2
 jsr :sub
 iny
:sub jsr markwipe
 jmp markred
:no
*-------------------------------
*  No floor underfoot--commence falling

startfall
 lda #0
 sta rjumpflag
 sta CharSword ;so you can grab on

 inc CharBlockY ;# of floor just below your feet
 jsr addslicers

 lda CharPosn ;upcoming frame
;(the one we're about to replace
;with first frame of falling seq)
 sta rjumpflag

 cmp #9 ;run-12
 beq :stepfall
 cmp #13 ;run-16
 beq :stepfall2
 cmp #26 ;standjump-19
 beq :jumpfall
 cmp #44 ;runjump-11
 beq :rjumpfall
 cmp #81
 bcc :2
 cmp #86
 bcc :hdropfall
:2 cmp #150
 bcc :1
 cmp #180
 bcc :fightfall ;from fighting stance
:1

:stepfall lda #stepfall
 bne :doit

:stepfall2 lda #stepfall2
 bne :doit

:jumpfall lda #jumpfall
 bne :doit

:rjumpfall lda #rjumpfall
 bne :doit

:hdropfall
 lda #5
 jsr addcharx
 sta CharX
 jsr rereadblocks
 jmp :stepfall2
]rts rts

:fightfall lda CharID
 cmp #2
 bcc :player
 lda CharXVel
 bmi :fb ;did gd step off fwd or bkwd?
 lda #0
 sta droppedout
 lda #efightfallfwd
 bne :doit
:fb lda #efightfall
 bne :doit
:player lda #1
 sta droppedout ;for guard's benefit
 lda #fightfall
 bne :doit

*-------------------------------
:doit jsr jumpseq
 jsr animchar ;advance 1 frame into fall

 jsr rereadblocks
 jsr getunderft
 jsr cmpwall
 beq :bump
 jsr getinfront
 jsr cmpwall
 bne ]rts
 jmp CDpatch

:bump jmp InsideBlock ;If "inside" block, bump him outside

CDpatch
 lda rjumpflag
 cmp #44 ;running jump?
 bne :patchX

 jsr getdist
 cmp #6
 bcs :patchX ;dist >= 6...we're OK

 lda #patchfall
 jsr jumpseq
 jsr animchar
 jmp rereadblocks

:patchX lda #-1
:1 jsr addcharx
 sta CharX
 jmp rereadblocks

*-------------------------------
*
* Char is "inside" a block--bump him outside
* (hopefully the same side from which he entered)
*
* Change Char X & return rdblock results
*
*-------------------------------
InsideBlock
 jsr getdist ;to EOB
 cmp #8
 bcs :bumpback

:bumpfwd
 jsr getinfront
 cmp #block
 beq :bumpback

 jsr getdist ;to EOB
 clc
 adc #4
:reland
 jsr addcharx
 sta CharX
 jsr rereadblocks ;reposition char
 jmp getunderft

:bumpback
 jsr getbehind
 cmp #block
 bne :1
  ;we're screwed
;bump 2 back (what the hell)
 jsr getdist
 clc
 adc #14
 eor #$ff
 clc
 adc #8
 jmp :reland
:1
 jsr getdist
 eor #$ff
 clc
 adc #8
 jmp :reland

*-------------------------------
*
*  S H A D O W   C O N T R O L
*
*-------------------------------
SHADCTRL
 lda CharID
 cmp #24 ;mouse?
 bne :1
 jmp AutoCtrl

:1 lda CharLife
 bpl :dead
;Has char's life run out?
 lda OppStrength
 bne :cont
 lda #0
 sta CharLife
 jsr deadenemy

:dead lda CharID
 cmp #1 ;shadow man?
 bne :cont
 jmp VanishChar

:cont lda ManCtrl
 bne :manualctrl

 jsr AutoCtrl

 jmp GenCtrl

* Manual ctrl: enemy controlled by deselected device

:manualctrl
 jsr LoadDesel

 jsr getdesel

 jsr clrjstk

 jsr UserCtrl

 jmp SaveDesel

*-------------------------------
*
*  P L A Y E R   C O N T R O L
*
*-------------------------------
PLAYERCTRL
 lda CharLife
 bpl :cont1 ;dead
 lda KidStrength
 bne :cont1
 lda #0
 sta CharLife
:cont1
 lda stunned
 beq :cont
 dec stunned

:cont lda level
 bne :game
:demo jsr DemoCtrl
 jmp GenCtrl

* Character controlled by selected device

:game jsr LoadSelect ;load jstk-push flags for selected device

 jsr getselect ;get current input from selected device

 jsr clrjstk ;clear appropriate jstk-push flags

 lda #2
 jsr UserCtrl

 jmp SaveSelect ;save updated jstk-push flags

*-------------------------------
* Player ctrl in demo

DemoCtrl
 lda milestone
 bne :finish
 lda CharSword
 beq :preprog

 lda #10
 sta guardprog
 jsr AutoCtrl
 lda #11
 sta guardprog
 rts

:preprog jmp demo

:finish jsr clrall
 sta clrbtn
 lda #-1
 sta clrF
 sta JSTKX ;run o.s.
]rts rts

*-------------------------------
UserCtrl
 lda CharFace
 bpl :faceL

 jmp GenCtrl

* If char is facing right, reverse JSTK & clrF/clrB

:faceL jsr facejstk

 jsr GenCtrl

 jmp facejstk

*-------------------------------
clrall
 lda #0
 sta clrB
 sta clrF
 sta clrU
 sta clrD
 lda #1
]rts rts

*-------------------------------
*
*  G E N E R A L   C O N T R O L
*
*  In: Raw input
*        JSTKX (- fwd, + back, 0 center)
*        JSTKY (- up, + down, 0 center)
*        btn (- down, + up)
*      Smart input
*        clrF-B-U-D-btn (- = fresh press)
*
*  Set clr = 1 after using a press
*
*-------------------------------
GENCTRL
 lda CharLife
 bmi :alive

* Dead character (If he's standing, collapse)

:dead lda CharPosn
 cmp #15
 beq :drop
 cmp #166
 beq :drop
 cmp #158
 beq :drop
 cmp #171
 bne ]rts
:drop lda #dropdead
 jmp jumpseq

* Live character

:alive lda CharAction
 cmp #5 ;is char in mid-bump?
 beq :clr
 cmp #4 ;or falling?
 beq :clr
 bne :underctrl
:clr
]clr jmp clrall

:underctrl
 lda CharSword
 cmp #2 ;in fighting mode?
 beq FightCtrl ;yes

 lda CharID
 cmp #2 ;kid or shadowman?
 bcc :cont
 jmp GuardCtrl ;no

* First question: what is char doing now?

:cont ldx CharPosn ;previous frame #

 cpx #15
 beq :standing

 cpx #48
 beq :turning

 cpx #50
 bcc :0
 cpx #53
 bcc :standing ;turn7-8-9/crouch
:0
 cpx #4
 bcc :starting ;run4-5-6

 cpx #67
 bcc :4
 cpx #70
 bcc :stjumpup ;starting to jump up

:4 cpx #15
 bcs :2
 jmp :running ;run8-17

:2 cpx #87
 bcc :1
 cpx #100
 bcs :1
 jmp :hanging ;jumphang22-34

:1 cpx #109 ;crouching?
 beq :crouching
:3
]rts rts

:standing jmp standing
:starting jmp starting
:stjumpup jmp stjumpup
:running jmp arunning
:hanging jmp hanging
:turning jmp turning
:crouching jmp crouching

*-------------------------------
* Similar routine for guard

GuardCtrl
 ldx CharPosn
 cpx #166 ;standing?
 beq :alert
]rts rts

:alert
 lda clrD
 bpl ]rts
 lda clrF
 bmi :engarde
 bpl :turn

:engarde jmp DoEngarde

:turn lda #1
 sta clrD
 lda #alertturn
 jmp jumpseq

*-------------------------------
* Char is en garde (CharSword = 2)

FightCtrl
 lda CharAction
 cmp #2
 bcs ]rts ;Must be on level ground (Action = 1)

* If Enemy Alert is over, put away your sword

 jsr getunderft
 cmp #loose
 beq :skip ;unless you're standing on loose floor

 lda EnemyAlert
 cmp #2
 bcc :dropgd

* If opponent is behind you, turn to face him

:skip jsr getopdist ;fwd distance to opponent
 cmp #swordthres
 bcc :onalert
 cmp #128
 bcc :dropgd
 cmp #-4
 bcs :onalert ;overlapping
 jmp DoTurnEng

* Enemy out of range--drop your guard
* (kid & shadman only)

:dropgd lda CharID
 bne :1
 sta heroic
 beq :2
:1 cmp #2
 bcs :onalert ;guard: remain en garde
:2
 ldx CharPosn
 cpx #171 ;wait for ready posn
 bne ]rts

 lda #0
 sta CharSword

 lda #resheathe
 jmp jumpseq
]rts rts

*-------------------------------
* Remain en garde

:onalert
 ldx CharPosn ;prev frame #
 cpx #161 ;successful block?
 bne :nobloc
 lda clrbtn ;yes--restrike or retreat?
 bmi :bts
 lda #retreat
 jmp jumpseq

* Fresh button press to strike

:nobloc lda clrbtn
 bpl :10
:bts
 lda CharID
 bne :11
 lda #gdpatience
 sta gdtimer

:11 jsr DoStrike

 lda clrbtn
 cmp #1
 beq ]rts ;struck
:10 ;else didn't strike

* Down to lower your sword

 lda clrD
 bpl :nodrop

 ldx CharPosn
 cpx #158 ;ready
 beq :ready1
 cpx #170
 beq :ready1
 cpx #171
 bne ]rts
:ready1
 lda #1
 sta clrD

 lda #0
 sta CharSword

 lda CharID
 beq :drop ;for kid
 cmp #1
 beq :sstand ;for shadman

:alert lda #goalertstand
 jmp jumpseq ;for guard

:drop lda #1
 sta offguard
 lda #graceperiod
 sta refract
 lda #0
 sta heroic
 lda #fastsheathe
 jmp jumpseq

:sstand lda #resheathe
 jmp jumpseq

* Fwd to advance, up to block, back to retreat

:nodrop
 lda clrU
 bmi :up
 lda clrF
 bmi :fwd
 lda clrB
 bmi :back

]rts rts

:fwd jmp DoAdvance
:up jmp DoBlock
:back jmp DoRetreat

*-------------------------------
DoTurnEng
 lda #turnengarde
 jmp jumpseq

*-------------------------------
DoBlock
 ldx CharPosn
 cpx #158 ;ready
 beq :2
 cpx #170
 beq :2
 cpx #171
 beq :2
 cpx #168 ;guy-2
 beq :2

 cpx #165 ;adv
 beq :2
 cpx #167 ;blocked strike
 beq :3

]rts rts

* From ready position: Block if appropriate

:2 jsr getopdist
 cmp #blockthres
 bcs :blockmiss ;too far

 lda #readyblock
 ldx CharID
 beq :kid
 ldx OpPosn ;enemy sees kid 1 frame ahead
 cpx #152 ;guy4
 beq :doit
]rts rts

:kid ldx OpPosn
 cpx #168 ;1 frame too early?
 beq ]rts  ;yes--wait 1 frame

 cpx #151 ;guy3
 beq :doit
 cpx #152 ;guy4
 beq :doit
 cpx #162 ;guy22
 beq :doit

 cpx #153 ;1 frame too late?
 bne :blockmiss
  ;yes--skip 1 frame
 jsr :doit
 jmp animchar

* Strike-to-block

:3 lda #strikeblock
:doit ldx #1
 stx clrU
 jmp jumpseq
:blockmiss
 lda CharID
 bne DoRetreat ;enemy doesn't waste blocks
 lda #readyblock
 bne :doit

*-------------------------------
DoStrike
 cpx #157
 beq :1
 cpx #158
 beq :1
 cpx #170
 beq :1
 cpx #171
 beq :1 ;strike from ready posn
 cpx #165
 beq :1 ;from advance
 cpx #150
 beq :2 ;from missed block
 cpx #161
 beq :2 ;from successful block

]rts rts

:1 lda CharID
 bne :slo ;kid is fast, others slow

 lda #faststrike
 bne :dostr

:slo lda #strike
:dostr ldx #1
 stx clrbtn
 jmp jumpseq

:2 lda #blocktostrike
 bne :dostr

*-------------------------------
DoRetreat
 ldx CharPosn
 cpx #158
 beq :1 ;strike from ready posn
 cpx #170
 beq :1
 cpx #171
 beq :1
]rts rts

:1 lda #retreat
 ldx #1
 stx clrB
 jmp jumpseq

*-------------------------------
DoAdvance
 ldx CharPosn
 cpx #158
 beq :1
 cpx #170
 beq :1
 cpx #171
 beq :1
]rts rts

:1 lda CharID
 bne :slo ;kid is faster
 lda #fastadvance
 bne :doit
:slo lda #advance
:doit ldx #1
 stx clrF
 jmp jumpseq

*-------------------------------
*
*  S T A N D I N G
*
*-------------------------------
standing

* Fresh button click: pick up object?

 lda clrbtn
 bpl :noclick
 lda btn
 bpl :noclick
 jsr TryPickup
 bne ]rts ;yes
:noclick

* Shadman only: down & fwd to go en garde

 lda CharID
 beq :kid
 lda clrD
 bpl :1
 lda clrF
 bpl :1
 jmp DoEngarde

* If opponent is within range, go en garde
* (For kid only)

:kid lda gotsword
 beq :1 ;no sword

 lda offguard
 beq :notoffg
 lda btn ;off guard--push btn to draw sword
 bpl :btnup
:notoffg
 lda EnemyAlert
 cmp #2
 bcc :safe
 jsr getopdist ;fwd distance to opponent
 cmp #swordthresN
 bcs :danger
 cmp #swordthres
 bcs :safe

:danger ldx #1
 stx heroic
 cmp #-6
 bcs :behindyou

 lda OpID
 cmp #1
 bne :engarde
 lda OpAction
 cmp #3
 beq :safe
 lda OpPosn
 cmp #107
 bcc :engarde
 cmp #118
 bcc :safe ;let shadow land
:engarde jmp DoEngarde

:behindyou jmp DoTurn

:safe lda #0
 sta offguard

:1 lda btn
 bpl :btnup

*-------------------------------
* Standing, button down

:2 lda clrB
 bmi :backB

 lda clrU
 bmi :up

 lda clrD
 bmi :down

 lda JSTKX
 bpl :rts

 lda clrF
 bmi :fwdB
:rts
]rts rts

*-------------------------------
* Standing, button up

:btnup
 lda clrF
 bmi :fwd
 lda clrB
 bmi :back
 lda clrU
 bmi :up
 lda clrD
 bmi :down

 lda JSTKX
 bmi :fwd

]rts rts

:fwd jmp DoStartrun
:fwdB jmp DoStepfwd

:back jmp DoTurn
:backB jmp DoTurn

:fwdup jmp DoStandjump

*-------------------------------
* Standing, joystick up

:up

* In front of open stairs?

 jsr getunderft
 cmp #exit
 beq :stairs
 jsr getbehind
 cmp #exit
 beq :stairs
 jsr getinfront
 cmp #exit
 bne :nostairs

:stairs lda (BlueSpec),y
 lsr
 lsr
 cmp #stairthres
 bcc :nostairs

 jmp Stairs

* No -- normal control

:nostairs
 lda JSTKX
 bmi :fwdup

* Straight up...jump up & grab ledge if you can

 jmp DoJumpup

*-------------------------------
* Standing, joystick down

:down
 lda #1
 sta clrD

* If you're standing w/back to edge, down
* means "climb down & hang from ledge"

* If facing edge, "down" means "step off"

 jsr getinfront
 jsr cmpspace
 bne :notfwd ;no cliff in front of you

 jsr getdist
 cmp #StepOffFwd
 bcs :notfwd ;not close enough to edge
 lda #5
 jsr addcharx
 sta CharX
 jmp rereadblocks ;move fwd

:notfwd jsr getbehind
 jsr cmpspace
 bne :no ;no cliff behind you

 jsr getdist
 cmp #StepOffBack
 bcc :no ;not close enough to edge

* Climb down & hang from ledge

 jsr getbehind
 sta blockid
 jsr getunderft
 jsr checkledge
 beq :no

 ldx CharFace
 bpl :succeed
 jsr getunderft
 cmp #gate
 bne :succeed

 lda (BlueSpec),y
 lsr
 lsr
 cmp #gclimbthres
 bcc :no

:succeed jsr getdist
 sec
 sbc #9

 jsr addcharx
 sta CharX

 lda #climbdown
 jmp jumpseq

* Otherwise "down" means "crouch"

:no jmp DoCrouch

*-------------------------------
* Climb stairs

Stairs
 lda tempblockx ;stairs block
 jsr getblockej
 clc
 adc #10
 sta CharX
 lda #-1
 sta CharFace

 lda #climbstairs
 jmp jumpseq

]rts rts

*-------------------------------
*
*  C R O U C H I N G
*
*-------------------------------
crouching

* Fresh button click?

 lda clrbtn
 bpl :noclick

 jsr TryPickup
 bne ]rts

* Still crouching?

:noclick
 lda JSTKY
 cmp #1
 beq :1
 lda #standup
 jmp jumpseq

:1 lda clrF
 bpl ]rts
 lda #1
 sta clrF
 lda #crawl
 jmp jumpseq

*-------------------------------
*
*  S T A R T I N G
*
*  First few frames of "startrun"
*
*-------------------------------
starting
 lda JSTKY
 bmi :jump
]rts rts

:jump
 lda JSTKX
 bpl ]rts

 jmp DoStandjump

*-------------------------------
* First few frames of "jumpup"

stjumpup
 lda JSTKX
 bmi :fwd
 lda clrF
 bmi :fwd
]rts rts
:fwd jmp DoStandjump

*-------------------------------
*
* T U R N I N G
*
*-------------------------------
turning
 lda btn
 bmi ]rts

 lda JSTKX
 bpl ]rts

 lda JSTKY
 bmi ]rts

* Jstk still fwd--convert turn to turnrun

 lda #turnrun
 jmp jumpseq

*-------------------------------
*
*  R U N N I N G
*
*-------------------------------
arunning
 lda JSTKX
 beq :runstop ;jstk centered...stop running
 bpl :runturn ;jstk back...turn around

* Jstk is forward... keep running
* & wait for signal to runjump or diveroll

 lda JSTKY
 bmi :runjump ;jstk up... take a running jump

 lda clrD
 bmi :diveroll ;jstk down... running dive & roll

]rts rts

*  Running dive & roll

:diveroll lda #1
 sta clrD

 lda #rdiveroll
 jmp jumpseq

*  Running jump

:runjump
 lda clrU
 bpl ]rts

 jmp DoRunjump

*  Stop running

:runstop lda CharPosn
 cmp #7 ;run-10
 beq :rs
 cmp #11 ;run-14
 bne ]rts

:rs jsr ]clr
 sta clrF

 lda #runstop
 jmp jumpseq

*  Turn around & run the other way

:runturn
 jsr ]clr
 sta clrB

 lda #runturn
 jmp jumpseq

*-------------------------------
*
*  H A N G I N G
*
*-------------------------------
hanging
 lda stunned
 bne :9 ;can't climb up

 lda JSTKY
 bmi :climbup ;jstk up-->climb up
:9
 lda btn
 bpl :drop

* If hanging on right-hand side of a panel
* or either side of block,
* switch to "hangstraight"

 lda CharAction
 cmp #6
 beq :cont ;already hanging straight

 jsr getunderft
 cmp #block
 beq :hangstrt

 ldx CharFace
 cpx #-1 ;left
 bne :cont

 cmp #panelwif
 beq :hangstrt
 cmp #panelwof
 beq :hangstrt

* If ledge crumbles away, fall with it

:cont
 jsr getabove

 jsr cmpspace ;still there?
 beq :drop ;no

* just keep swinging

:rts
]rts rts

:hangstrt lda #hangstraight
 jmp jumpseq

*-------------------------------
* climb up (if you can)

:climbup
 jsr ]clr
 sta clrU
 sta clrbtn

 jsr getabove

 cmp #mirror
 beq :10
 cmp #slicer
 bne :1

:10 ldx CharFace
 beq :fail
 bne :succeed ;can only mount mirror facing L

:1 cmp #gate
 bne :2

 ldx CharFace
 beq :succeed
;can only mount closed gate facing R
 lda (BlueSpec),y
 lsr
 lsr
 cmp #gclimbthres
 bcc :fail
 bcs :succeed

:2
:succeed lda #climbup
 jmp jumpseq

:fail lda #climbfail
 jmp jumpseq


*-------------------------------
:drop
 jsr ]clr
 sta clrD ;clrD = 1, all others = 0

 jsr getbehind
 jsr cmpspace
 bne :hangdrop

 jsr getunderft
 jsr cmpspace
 beq :hangfall

:hangdrop
 jsr getunderft
 cmp #block
 beq :sheer

 ldx CharFace
 bpl :clear
 cmp #panelwof
 beq :sheer
 cmp #panelwif
 bne :clear

:sheer lda #-7
 jsr addcharx
 sta CharX

:clear lda #hangdrop
 jmp jumpseq

:hangfall
 lda #hangfall
 jmp jumpseq
]rts rts

*-------------------------------
*
*  D o  S t a r t r u n
*
*-------------------------------
DoStartrun

* If very close to a barrier, do a Stepfwd instead
* (Exceptions: slicer & open gate)

 jsr getfwddist
 cpx #1 ;barrier?
 bne :startrun ;no

 cpy #slicer
 beq :startrun

:solidbarr
 jsr getfwddist
 cmp #8
 bcs :startrun

 lda clrF
 bpl ]rts

 jmp DoStepfwd

:startrun
 lda #startrun
 jmp jumpseq ;...start running

DoTurn jsr ]clr
 sta clrB
;if enemy is behind you, draw as you turn
 lda gotsword
 beq :1
 lda EnemyAlert
 cmp #2
 bcc :1
 jsr getopdist
 bpl :1
 jsr getdist ;to EOB
 cmp #2
 bcc :1

 lda #2
 sta CharSword ;en garde
 lda #0
 sta offguard
 lda #turndraw
 bne :2
:1 lda #turn
:2 jmp jumpseq ;...turn around

DoStandjump lda #1
 sta clrU
 sta clrF

 lda #standjump
 jmp jumpseq ;...standing jump

DoSdiveroll lda #1
 sta clrD

 lda #sdiveroll
 jmp jumpseq ;...standing dive & roll

DoCrouch
 lda #stoop
 jsr jumpseq

 jsr ]clr
 sta clrD
 rts

DoEngarde
 jsr ]clr
 sta clrF
 sta clrbtn

 lda #2
 sta CharSword ;en garde

 lda CharID
 beq :1
 cmp #1
 beq :3 ;shad
 lda #guardengarde
 bne :2
:1 lda #0
 sta offguard
:3 lda #engarde
:2 jmp jumpseq

*-------------------------------
*
*  D o  J u m p u p
*
*  & grab ledge if you can
*
*-------------------------------
DoJumpup
 jsr ]clr
 sta clrU

 jsr getabove
 sta blockid

 jsr getaboveinf

 jsr checkledge ;Can you jump up & grab ledge?
 ;Returns 1 if you can, 0 if you can't
 bne  DoJumphang ;yes--do it

 jsr getabovebeh
 sta blockid

 jsr getabove

 jsr checkledge ;could you do it if you were 1 space back?
 bne :jumpback ;yes--move back & do it

:jumphi jmp DoJumphigh

*-------------------------------
* Jump up & back to grab block directly overhead

:jumpback
 jsr getdist ;dist to front of block
 cmp #JumpBackThres
 bcc :jumphi ;too far to fudge

 jsr getbehind
 jsr cmpspace ;floor behind you?
 beq DoJumpedge ;no

* "Jump back" to block behind you & then proceed as usual

 jsr getdist
 sec
 sbc #14
 jsr addcharx
 sta CharX

 jsr rereadblocks

 jmp DoJumphang

*-------------------------------
* Your back is to ledge -- so do a "jumpbackhang"

DoJumpedge
 jsr getabove

* Get all the way back on this block

 jsr getdist
 sec
 sbc #10

 jsr addcharx
 sta CharX

* now jump

 lda #jumpbackhang
 jmp jumpseq

*-------------------------------
DoJumphang
 jsr getaboveinf

*  Choose the jumphang sequence (Long/Med) that
*  will bring us closest to edge, then fudge the X-coord
*  to make it come out exactly

 jsr getdist ;get distance to front of block
 sta atemp ;# pixels (0-13) returned in A

 cmp #4
 bcc :Med

:Long lda atemp
 sec ;"Long" will add 4 to CharX
 sbc #4
 jsr addcharx
 sta CharX

 lda #jumphangLong
 jmp jumpseq
:Med
 jsr getfwddist
 cmp #4
 bcs :okMed

 cpx #1 ;close to wall?
 beq :Long ;yes--step back & do Long

:okMed lda atemp
 jsr addcharx
 sta CharX

 lda #jumphangMed
 jmp jumpseq

]rts rts

*-------------------------------
*
*  D o  R u n  J u m p
*
*  Calibrate jump so that foot will push off at edge.
*
*-------------------------------
RJChange = 4 ;projected change in CharX
RJLookahead = 1 ;# blocks you can look ahead
RJLeadDist = 14 ;required leading distance in pixels
RJMaxFujBak = 8 ;# pixels we're willing to fudge back
RJMaxFujFwd = 2 ;and forward

DoRunjump
 lda CharPosn
 cmp #7
 bcc ]rts ;must be in full run

* Count # of blocks to edge
* (Use actual CharX)

 lda #0
 sta bufindex ;block counter

 lda #RJChange
 jsr addcharx
 sta ztemp ;projected CharX

 jsr getblockxp
 sta blockx

:loop lda blockx
 ldx CharFace
 inx
 clc
 adc plus1,x
 sta blockx

 tax
 ldy CharBlockY
 lda CharScrn
 jsr rdblock

 cmp #spikes
 beq :done

 jsr cmpspace
 beq :done

 inc bufindex

 lda bufindex
 cmp #RJLookahead+1
 bcc :loop
 bcs :noedge ;no edge in sight--jump anyway
:done

* Calculate # of pixels to end of floor

 lda ztemp
 jsr getdist1 ;# pixels to end of block

 ldx bufindex ;# of blocks to end of floor
 clc
 adc Mult7,x
 clc
 adc Mult7,x ;# of pixels to end of floor

 sec
 sbc #RJLeadDist
;A = difference between actual dist to edge
;and distance covered by RunJump
 cmp #-RJMaxFujBak
 bcs :ok ;move back a little & jump

 cmp #RJMaxFujFwd
 bcc  :ok ;move fwd a little & jump

 cmp #$80
 bcc ]rts ;still too far away--wait till next frame

 lda #-3 ;He jumped too late; he'll miss edge
;But let's make it look good anyway
:ok clc
 adc #RJChange

 jsr addcharx
 sta CharX

* No edge in sight -- just do any old long jump

:noedge
 jsr ]clr
 sta clrU

 lda #runjump
 jmp jumpseq

]rts rts

*-------------------------------
*
*  D o  S t e p  F o r w a r d
*
*-------------------------------

DoStepfwd
 lda #1
 sta clrF
 sta clrbtn

 jsr getfwddist ;returns A = distance to step (0-13)

 cmp #0
 beq :1

:2 sta CharRepeat ;non-0 value

 clc
 adc #stepfwd1-1
 jmp jumpseq

:1 cpx #1
 beq :thru ;If barrier, step thru

 cmp CharRepeat
 bne :3 ;First time, test w/foot

:thru lda #11
 bne :2 ;Second time, step off edge

:3 sta CharRepeat ;0

 lda #testfoot
 jmp jumpseq

*-------------------------------
*
*  D o  J u m p  H i g h
*
*-------------------------------
DoJumphigh
 jsr ]clr
 sta clrU

 jsr getfwddist
 cmp #4
 bcs :ok
 cpx #1 ;barrier?
 bne :ok ;no

 sec
 sbc #3
 jsr addcharx
 sta CharX
:ok
 lda #jumpupreach
 jsr facedx
 sta ztemp

 jsr getbasex ;assume char standing still
 clc
 adc #jumpupangle
 clc
 adc ztemp ;get X-coord at which hand touches ceiling

 jsr getblockx
 tax

 ldy CharBlockY
 dey

 lda CharScrn
 jsr rdblock ;read this block

 cmp #block
 beq :jumpup
 jsr cmpspace
 bne :jumpup

 lda #highjump
 jmp jumpseq ;no ceiling above

:jumpup lda #jumpup
 jsr jumpseq ;touch ceiling
]rts rts ;& don't forget to crop top

*-------------------------------
*  reread blocks
*-------------------------------
REREADBLOCKS
 jsr GetFrameInfo
 jmp GetBaseBlock

*-------------------------------
*
*  Is character stepping on a pressure plate?
*  or on loose floor?
*
*-------------------------------
CHECKPRESS
 lda CharPosn
 cmp #87
 bcc :1
 cmp #100
 bcc :hanging ;87-99: jumphang22-34
 cmp #135
 bcc :1
 cmp #141
 bcc :hanging ;135-140: climb up/down
:1
 lda CharAction
 cmp #7
 beq :ground ;turning
 cmp #5
 beq :ground ;bumped
 cmp #2
 bcs ]rts

* Action code 7, 0 or 1: on the ground

:ground
 lda CharPosn
 cmp #79 ;jumpup/touch ceiling
 beq :touchceil

 lda Fcheck
 and #fcheckmark
 beq ]rts ;foot isn't touching floor

*  Standing on a pressplate?

 jsr getunderft
:checkit
 cmp #upressplate
 beq :PP
 cmp #pressplate
 bne :notPP

:PP lda CharLife
 bmi :push
 jmp jampp ;dead weight
:push jmp pushpp

:notPP cmp #loose
 bne ]rts

 lda #1
 sta alertguard
 jmp breakloose

*  Hanging on a pressplate?

:hanging
 jsr getabove
 jmp :checkit
]rts rts

* Jumping up to touch ceiling?

:touchceil
 jsr getabove

 cmp #loose
 bne ]rts

 jmp breakloose

*-------------------------------
*
*  C H E C K   I M P A L E
*
*  Impalement by running or jumping onto spikes
*  (Impalement by landing on spikes is covered by
*  CHECKFLOOR:falling)
*
*-------------------------------
CHECKIMPALE
 ldx CharBlockX
 ldy CharBlockY
 lda CharScrn
 jsr rdblock
 cmp #spikes
 bne ]rts ;not spikes

 ldx CharPosn

 cpx #7
 bcc ]rts

 cpx #15
 bcs :2
 jmp :running

:2 cpx #43 ;runjump-10
 beq :jumpland

 cpx #26 ;standjump-19
 beq :jumpland

]rts rts

:running
 jsr getspikes
 cmp #2
 bcc ]rts ;must be springing
 bcs :impale

:jumpland
 jsr getspikes ;are spikes lethal?
 beq ]rts ;no

:impale jmp DoImpale

*-------------------------------
* Impale char on spikes
*
* In: rdblock results
*-------------------------------
DOIMPALE
 jsr jamspikes

 ldx CharBlockY
 inx
 lda FloorY,x
 sta CharY ;align char w/floor

 lda tempblockx
 jsr getblockej ;edge of spikes
 clc
 adc #10
 sta CharX
 lda #8
 jsr addcharx
 sta CharX ;center char on spikes

 lda #0
 sta CharYVel

 lda #Impaled
 jsr addsound

 lda #100
 jsr decstr

 lda #impale
 jsr jumpseq
 jmp animchar

*-------------------------------
*
*  Pick up object
*  Return 0 if no result
*
*-------------------------------
TryPickup
 jsr getunderft
 cmp #flask
 beq :2
 cmp #sword
 bne :1
:2 jsr getbehind
 jsr cmpspace
 beq :no
 lda CharX
 lda #-14
 jsr addcharx
 sta CharX ;move char 1 block back
 jsr rereadblocks
:1 jsr getinfront
 cmp #flask
 beq :pickup
 cmp #sword
 beq :pickup
:no lda #0
 rts

:pickup jsr PickItUp
 lda #1
 rts

*-------------------------------
*
* Pick something up
*
* In: rdblock results for object block ("infront")
*
*-------------------------------
PickItUp
 ldx CharPosn
 cpx #109 ;crouch first, then pick up obj
 beq :ok
 jsr getfwddist
 cpx #2
 beq :0 ;right at edge
 jsr addcharx
 sta CharX
:0 lda CharFace
 bmi :1
 lda #-2
 jsr addcharx
 sta CharX ;put char within reach of obj
:1 jmp DoCrouch

:ok cmp #sword
 beq :PickupSword

 lda (BlueSpec),y
 lsr
 lsr
 lsr
 lsr
 lsr ;potion # (0-7)
 jsr RemoveObj

 lda #drinkpotion ;pick up & drink potion
 jmp jumpseq

:PickupSword
 lda #-1 ;sword
 jsr RemoveObj

 lda #pickupsword
 jmp jumpseq ;pick up, brandish & sheathe sword

*-------------------------------
 lst
 ds 1
 usr $a9,16,$00,*-org
 lst off


================================================
FILE: 01 POP Source/Source/CTRLSUBS.S
================================================
* ctrlsubs
org = $d000
 tr on
 lst off
*-------------------------------
*
*  PRINCE OF PERSIA
*  Copyright 1989 Jordan Mechner
*
*-------------------------------
*
*   Misc. subroutines relating to character control & movement
*
*-------------------------------
 org org

 jmp GETFRAME
 jmp GETSEQ
 jmp GETBASEX
 jmp GETBLOCKX
 jmp GETBLOCKXP

 jmp GETBLOCKY
 jmp GETBLOCKEJ
 jmp ADDCHARX
 jmp GETDIST
 jmp GETDIST1

 jmp GETABOVEBEH
 jmp RDBLOCK
 jmp RDBLOCK1
 jmp SETUPSWORD
 jmp GETSCRNS

 jmp ADDGUARDOBJ
 jmp OPJUMPSEQ
 jmp GETEDGES
 jmp INDEXCHAR
 jmp QUICKFG

 jmp CROPCHAR
 jmp GETLEFT
 jmp GETRIGHT
 jmp GETUP
 jmp GETDOWN

 jmp CMPSPACE
 jmp CMPBARR
 jmp ADDKIDOBJ
 jmp ADDSHADOBJ
 jmp ADDREFLOBJ

 jmp LOADKID
 jmp LOADSHAD
 jmp SAVEKID
 jmp SAVESHAD
 jmp SETUPCHAR

 jmp GETFRAMEINFO
 jmp INDEXBLOCK
 jmp MARKRED
 jmp MARKFRED
 jmp MARKWIPE

 jmp MARKMOVE
 jmp MARKFLOOR
 jmp UNINDEX
 jmp QUICKFLOOR
 jmp UNEVENFLOOR

 jmp MARKHALF
 jmp ADDSWORDOBJ
 jmp GETBLOCKYP
 jmp CHECKLEDGE
 jmp GET2INFRONT

 jmp CHECKSPIKES
 jmp RECHARGEMETER
 jmp ADDFCHARX
 jmp FACEDX
 jmp JUMPSEQ

 jmp GETBASEBLOCK
 jmp LOADKIDWOP
 jmp SAVEKIDWOP
 jmp GETOPDIST
 jmp LOADSHADWOP

 jmp SAVESHADWOP
 jmp BOOSTMETER
 jmp GETUNDERFT
 jmp GETINFRONT
 jmp GETBEHIND

 jmp GETABOVE
 jmp GETABOVEINF
 jmp CMPWALL

*-------------------------------
 lst
 put eq
 lst
 put gameeq
 lst
 put movedata
 lst
 put seqdata
 lst
 put soundnames
 lst off

*-------------------------------
 dum locals

tempright ds 1
ztemp ds 2
tempstate ds 1
]cutdir ds 1

 dend

*-------------------------------
*  Misc. data

plus1 db -1,1
minus1 db 1,-1

maxmaxstr = 10 ;strength meter maximum

thinner = 3

*-------------------------------
*
*  R E A D   B L O C K
*
*  In:  A = screen #
*       X = block x (0-9 onscreen)
*       Y = block y (0-2 onscreen)
*
*  Out: A,X = objid
*       Y = block # (0-29)
*       BlueType, BlueSpec set
*       tempscrn,tempblockx,tempblocky = onscreen block coords
*
*  - Offscreen block values are traced to their home screen
*  - Screen 0 is treated as a solid mass
*
*-------------------------------
RDBLOCK
 sta tempscrn
 stx tempblockx
 sty tempblocky

RDBLOCK1
 jsr handler ;handle offscreen references

 lda tempscrn
 beq :nullscrn ;screen 0
 jsr calcblue ;returns BlueType/Spec

 ldy tempblocky
 lda Mult10,y
 clc
 adc tempblockx
 tay
 lda (BlueType),y
 and #idmask
 tax ;return result in X & A
 rts

:nullscrn lda #block
 tax
 rts

*-------------------------------
*  Handle offscreen block references (recursive)

handler lda tempblockx
 bpl :1
 jsr offleft
 jmp handler

:1 cmp #10
 bcc :2
 jsr offrt
 jmp handler

:2 lda tempblocky
 bpl :3
 jsr offtop
 jmp handler

:3 cmp #3
 bcc :rts
 jsr offbot
 jmp handler

:rts rts

offtop clc
 adc #3
 sta tempblocky

 lda tempscrn
 jsr GETUP
 sta tempscrn
 rts

offbot sec
 sbc #3
 sta tempblocky

 lda tempscrn
 jsr GETDOWN
 sta tempscrn
 rts

offleft clc
 adc #10
 sta tempblockx

 lda tempscrn
 jsr GETLEFT
 sta tempscrn
 rts

offrt sec
 sbc #10
 sta tempblockx

 lda tempscrn
 jsr GETRIGHT
 sta tempscrn
]rts rts

*-------------------------------
*
*  Get adjacent screen numbers
*
*  In:  A = original screen #
*  Out: A = adjacent screen #
*
*-------------------------------
GETLEFT
 beq ]rts
 asl
 asl
 tax
 lda MAP-4,x
]rts rts

GETRIGHT
 beq ]rts
 asl
 asl
 tax
 lda MAP-3,x
 rts

GETUP
 beq ]rts
 asl
 asl
 tax
 lda MAP-2,x
 rts

GETDOWN
 beq ]rts
 asl
 asl
 tax
 lda MAP-1,x
 rts

*-------------------------------
*
*  G E T   S C R E E N S
*
*  Get VisScrn's 8 surrounding screens from map
*  (Store in scrnAbove, scrnBelow, etc.)
*
*-------------------------------
GETSCRNS
 lda VisScrn
 jsr GETLEFT
 sta scrnLeft

 lda VisScrn
 jsr GETRIGHT
 sta scrnRight

 lda VisScrn
 jsr GETUP
 sta scrnAbove

 lda VisScrn
 jsr GETDOWN
 sta scrnBelow

* and diagonals

 lda scrnBelow
 jsr GETLEFT
 sta scrnBelowL

 lda scrnBelow
 jsr GETRIGHT
 sta scrnBelowR

 lda scrnAbove
 jsr GETLEFT
 sta scrnAboveL

 lda scrnAbove
 jsr GETRIGHT
 sta scrnAboveR
]rts rts

*-------------------------------
*
*  G E T   B A S E   X
*
*  In: Char data; frame data
*
*  Out: A = character's base X-coord
*
*-------------------------------
GETBASEX
 lda Fcheck
 and #Ffootmark
  ;# pixels to count in from left edge of image
 eor #$ff
 clc
 adc #1 ;- Fcheck

 clc
 adc Fdx ;Fdx (+ = fwd, - = bkwd)

 jmp ADDCHARX ;Add to CharX in direction char is facing

*-------------------------------
*
*  Add A to CharX in direction char is facing
*
*  In: A = # pixels to add (+ = fwd, - = bkwd)
*      CharX = original char X-coord
*      CharFace = direction char is facing
*
*  Out: A = new char X-coord
*
*-------------------------------
ADDCHARX
 bit CharFace ;-1 = left (normal)
 bpl :right ;0 = right (mirrored)

 eor #$ff
 clc
 adc #1 ;A := -A

:right clc
 adc CharX
 rts

*-------------------------------
*
* Add A to FCharX
* (A range: -127 to 127)
*
* In: A; FChar data
* Out: FCharX
*
*-------------------------------
ADDFCHARX
 sta ztemp
 bpl :1 ;hibit clr

 lda #0
 sec
 sbc ztemp
 sta ztemp ;make it posititve

 lda #$ff ;hibit set
:1 eor FCharFace
 bmi :left

 lda ztemp
 clc
 adc FCharX
 sta FCharX

 lda FCharX+1
 adc #0
 sta FCharX+1
 rts

:left lda FCharX
 sec
 sbc ztemp
 sta FCharX

 lda FCharX+1
 sbc #0
 sta FCharX+1
 rts

*-------------------------------
*
* In: CharFace,CharBlockX,CharBlockY,CharScrn
*
* Out: Results of RDBLOCK for block underfoot/in front/etc.
*
*-------------------------------
GETUNDERFT
 ldx CharBlockX
 ldy CharBlockY
 lda CharScrn
 jmp RDBLOCK

GETINFRONT
 ldx CharFace
 inx
 lda CharBlockX
 clc
 adc plus1,x
 sta infrontx
 tax

 ldy CharBlockY
 lda CharScrn
 jmp RDBLOCK

GET2INFRONT
 ldx CharFace
 inx
 lda CharBlockX
 clc
 adc plus1,x
 clc
 adc plus1,x
 tax

 ldy CharBlockY
 lda CharScrn
 jmp RDBLOCK

GETBEHIND
 ldx CharFace
 inx
 lda CharBlockX
 clc
 adc minus1,x
 sta behindx
 tax

 ldy CharBlockY
 lda CharScrn
 jmp RDBLOCK

GETABOVE
 ldy CharBlockY
 dey
 sty abovey

 ldx CharBlockX
 lda CharScrn
 jmp RDBLOCK

GETABOVEINF
 ldx CharFace
 inx
 lda CharBlockX
 clc
 adc plus1,x
 sta infrontx
 tax

 ldy CharBlockY
 dey
 sty abovey

 lda CharScrn
 jmp RDBLOCK

GETABOVEBEH
 ldx CharFace
 inx
 lda CharBlockX
 clc
 adc minus1,x
 sta behindx
 tax

 ldy CharBlockY
 dey
 sty abovey

 lda CharScrn
 jmp RDBLOCK

*-------------------------------
*
*  G E T   D I S T A N C E
*
*  In: Char data
*
*  Out: A = # of pixels (0-13) to add to CharX to move
*       char base X-coord to end of current block
*
*-------------------------------
GETDIST
 jsr GETBASEX ;returns A = base X-coord

GETDIST1
 jsr GETBLOCKXP ;returns A = block #, OFFSET = pixel #

 lda CharFace ;0=right, -1=left
 beq :facingright

:facingleft
 lda OFFSET
 rts

:facingright
 lda #13
 sec
 sbc OFFSET
 rts

*-------------------------------
*
*  G E T   B L O C K   E D G E
*
*  In:  A = block # (-5 to 14)
*  Out: A = screen X-coord of left edge
*
*-------------------------------
GETBLOCKEJ
 clc
 adc #5
 tax
 lda BlockEdge,x
 rts

*-------------------------------
*
*  G E T   B L O C K   X
*
*  In:  A = X-coord
*
*  Out: A = # of the 14-pixel-wide block within which
*           this pixel falls (0-9 onscreen)
*
*       OFFSET = pixel within this block
*
*  - Use GETBLOCKXP for objects on center plane
*  - Use GETBLOCKX for absolute X-coords & foreground plane
*
*-------------------------------
GETBLOCKXP
 sec
 sbc #angle

GETBLOCKX
 tay

 lda PixelTable,y
 sta OFFSET

 lda BlockTable,y
 rts

*-------------------------------
*
*  G E T   B L O C K   Y
*
*  In: A = screen Y-coord (0-255)
*
*  Out: A = block y (3 = o.s.)
*
*  - Use GETBLOCKYP for objects on center plane
*  - Use GETBLOCKY for absolute Y-coords & foreground plane
*
*-------------------------------
GETBLOCKY
 ldx #3
:loop cmp BlockTop+1,x
 bcs :gotY
 dex
 bpl :loop
:gotY txa
 rts


GETBLOCKYP
 ldx #3
:loop cmp FloorY+1,x
 bcs :gotY
 dex
 bpl :loop
:gotY txa
]rts rts

*-------------------------------
*
*  I N D E X   B L O C K
*
*  Index (tempblockx,tempblocky)
*
*  Return y = block # (0-29) and cc if block is onscreen
*         y = 0 to 9 and cs if block is on screen above
*         y = 30 and cs if block is o.s.
*
*-------------------------------
INDEXBLOCK
 ldy tempblocky
 bmi :above
 cpy #3
 bcs :os

 lda tempblockx
 cmp #10
 bcs :os ;0 <= tempblockx <= 9

 clc
 adc Mult10,y

 tay ;return y = block #
 clc ;and carry clr
 rts

:os ldy #30
 sec ;and carry set
 rts

:above ldy tempblockx
 sec
]rts rts

*-------------------------------
*
*  U N I N D E X
*
*  In: A = block index (0-29)
*  Out: A = blockx, X = blocky
*
*-------------------------------
UNINDEX
 ldx #0
:loop cmp #10
 bcc ]rts
 sec
 sbc #10
 inx
 bne :loop
]rts rts

*-------------------------------
*
*  G E T   B A S E   B L O C K
*
*  In: Char data
*  Out: CharBlockX
*
*-------------------------------
GETBASEBLOCK
 jsr getbasex
 jsr getblockxp
 sta CharBlockX
]rts rts

*-------------------------------
*
*  F A C E   D X
*
*  In: CharFace; A = DX
*
*  Out: DX if char is facing right, -DX if facing left
*
*-------------------------------
FACEDX
 bit CharFace
 bmi ]rts

 eor #$ff
 clc
 adc #1 ;negate

]rts rts

*-------------------------------
*
*  J U M P S E Q
*
*  Jump to some other point in sequence table
*
*  In: A = sequence # (1-127)
*
*-------------------------------
JUMPSEQ
 sec
 sbc #1
 asl
 tax ;x = 2(a-1)

 lda seqtab,x
 sta CharSeq

 lda seqtab+1,x
 sta CharSeq+1
]rts rts

*-------------------------------
*
*  Similar routine for Opponent
*
*-------------------------------
OPJUMPSEQ
 sec
 sbc #1
 asl
 tax ;x = 2(a-1)

 lda seqtab,x
 sta OpSeq

 lda seqtab+1,x
 sta OpSeq+1
]rts rts

*-------------------------------
*
*  I N D E X   C H A R
*
*  In: Char data; GETEDGES results
*
*  Out: FCharIndex = character block index
*
*-------------------------------
INDEXCHAR
 lda CharAction
 cmp #1
 bne :4
;If CharAction = 1 (on solid ground)
;use leftblock/bottomblock
 lda bottomblock
 sta tempblocky

 lda leftblock
:1 sta tempblockx

 lda CharPosn
 cmp #135
 bcc :2
 cmp #149
 bcc :climbup

:2 cmp #2
 beq :fall
 cmp #3
 beq :fall
 cmp #4
 beq :fall
 cmp #6
 bne :3
:fall
:climbup dec tempblockx  ;if falling or climbing up

:3 jsr indexblock
 sty FCharIndex
 rts

* else use CharBlockX/Y

:4 lda CharBlockY
 sta tempblocky

 lda CharBlockX
 jmp :1

*-------------------------------
*
*  S E T   U P   C H A R
*
*  Set up character for FRAMEADV
*
*  In: Char data
*  Out: FChar data
*
*  Translate char data into the form "addchar" expects
*  (Decode image #; get actual 280 x 192 screen coords)
*
*-------------------------------
SETUPCHAR
 jsr zerocrop ;(can call cropchar later)

 jsr GETFRAMEINFO

 lda CharFace
 sta FCharFace

 jsr decodeim ;get FCharImage & Table from
 ;encoded Fimage & Fsword data
 lda #0
 sta FCharX+1

 lda Fdx
 jsr addcharx ;A := CharX + Fdx
 sec
 sbc #ScrnLeft ;different coord system
 sta FCharX

 asl FCharX
 rol FCharX+1
 beq :pos

 lda FCharX
 cmp #$f0
 bcc :pos
 lda #$ff
 sta FCharX+1
:pos  ;X := 2X
 lda Fdy
 clc
 adc CharY
 sec
 sbc #ScrnTop
 sta FCharY

 lda Fcheck
 eor FCharFace ;Look only at the hibits
 bmi :ok ;They don't match-->even X-coord
;They match-->odd X-coord
 lda FCharX
 clc
 adc #1
 sta FCharX
 bcc :ok
 inc FCharX+1
:ok
]rts rts

*-------------------------------
*
*  S E T   U P   S W O R D
*
*  In: Char & FChar data
*
*  If character's sword is visible, add it to obj table
*
*-------------------------------
SETUPSWORD
 lda CharID
 cmp #2
 bne :3
 lda CharLife
 bmi :2 ;live guard's sword is always visible

:3 lda CharPosn
 cmp #229
 bcc :1
 cmp #238
 bcc :2 ;sheathing
:1 lda CharSword
 beq ]rts
:2
 lda Fsword
 and #$3f ;frame #
 beq ]rts ;no sword for this frame

 jsr getswordframe

 ldy #0
 lda (framepoint),y
 beq ]rts

 jsr decodeswim ;get FCharImage & Table

 iny
 lda (framepoint),y
 sta Fdx

 iny
 lda (framepoint),y
 sta Fdy

 lda Fdx
 jsr ADDFCHARX ;A := FCharX + Fdx

 lda Fdy
 clc
 adc FCharY
 sta FCharY

 jmp ADDSWORDOBJ

*-------------------------------
*
*  G E T   F R A M E
*
*  In: A = frame # (1-192)
*  Out: framepoint = 2-byte pointer to frame def table
*
*-------------------------------
GETFRAME ;Kid uses main char set
 jsr getfindex
 lda framepoint
 clc
 adc #Fdef
 sta framepoint
 lda framepoint+1
 adc #>Fdef
 sta framepoint+1
 rts

*-------------------------------
getaltframe1 ;Enemy uses alt set 1
 jsr getfindex
 lda framepoint
 clc
 adc #altset1
 sta framepoint
 lda framepoint+1
 adc #>altset1
 sta framepoint+1
 rts

*-------------------------------
getaltframe2 ;Princess & Vizier use alt set 2
 jsr getfindex
 lda framepoint
 clc
 adc #altset2
 sta framepoint
 lda framepoint+1
 adc #>altset2
 sta framepoint+1
 rts

*-------------------------------
getfindex
 sec
 sbc #1
 sta ztemp
 sta framepoint

 lda #0
 sta ztemp+1
 sta framepoint+1

 asl framepoint
 rol framepoint+1
 asl framepoint
 rol framepoint+1 ;2-byte multiply by 4

 lda framepoint
 clc
 adc ztemp
 sta framepoint

 lda framepoint+1
 adc ztemp+1
 sta framepoint+1 ;make it x5
 rts

*-------------------------------
*
* getswordframe
*
* In: A = frame #
* Out: framepoint
*
*-------------------------------
getswordframe
 sec
 sbc #1
 sta ztemp
 sta framepoint

 lda #0
 sta ztemp+1
 sta framepoint+1

 asl framepoint
 rol framepoint+1 ;x2

 lda framepoint
 clc
 adc ztemp
 sta framepoint

 lda framepoint+1
 adc ztemp+1
 sta framepoint+1 ;+1 is 3

 lda framepoint
 clc
 adc #swordtab
 sta framepoint

 lda framepoint+1
 adc #>swordtab
 sta framepoint+1

 rts

*-------------------------------
*
* Decode char image
*
* In:  Fimage, Fsword (encoded)
*
* Out: FCharImage (image #, 0-127)
*      FCharTable (table #, 0-7)
*
*-------------------------------
decodeim
 lda Fimage
 and #%10000000 ;bit 2 of table #
 sta ztemp

 lda Fsword
 and #%11000000 ;bits 0-1 of table #

 lsr
 adc ztemp
 lsr
 lsr
 lsr
 lsr
 lsr
 sta FCharTable

 lda Fimage
 and #$7f
 ora timebomb ;must be 0!
 sta FCharImage

 rts

*-------------------------------
*
* Decode sword image
*
* In: A = image #
*
* Out: FCharImage, FCharTable
*
*-------------------------------
decodeswim
 sta FCharImage ;image #

 lda #2 ;chtable3
 sta FCharTable
 rts

*-------------------------------
*
*  G E T   E D G E S
*
*  Get edges of character image
*
*  In: FChar data as set by "setframe"
*
*  Out: leftej/rightej/topej = boundaries of image (140-res)
*       leftblock, rightblock, topblock, bottomblock
*       CDLeftEj, CDRightEj (for coll detection)
*       imheight, imwidth
*
*-------------------------------
GETEDGES
 lda FCharImage
 ldx FCharTable
 jsr dimchar ;return A = image width, x = height
 stx imheight

 tax ;image width in bytes
 lda Mult7,x ;in 1/2 pixels
 clc
 adc #1 ;add 1/2 pixel
 lsr ;and divide by 2
 sta imwidth ;to get width in pixels

 lda FCharX+1
 lsr
 lda FCharX
 ror
 clc
 adc #ScrnLeft ;convert back to 140-res

* (If facing LEFT, X-coord is leftmost pixel of LEFTMOST byte
* of image; if facing RIGHT, leftmost pixel of RIGHTMOST byte.)

 ldx CharFace
 bmi :ok ;facing L
;facing R
 sec
 sbc imwidth

:ok sta leftej
 clc
 adc imwidth
 sta rightej

 lda FCharY
 sec
 sbc imheight
 clc
 adc #1

 cmp #192
 bcc :ok2
 lda #0

:ok2 sta topej

 jsr getblocky

 cmp #3
 bne :1
 lda #-1 ;if o.s., call it -1

:1 sta topblock

 lda FCharY
 jsr getblocky ;if o.s., call it 3
 sta bottomblock

 lda leftej
 jsr getblockx ;leftmost affected block
 sta leftblock

 lda rightej
 jsr getblockx ;rightmost affected block
 sta rightblock

* get leading edge (for collision detection)

 lda #0
 sta ztemp

 lda Fcheck
 and #Fthinmark
 beq :nothin

 lda #thinner ;make character 3 bits thinner
 sta ztemp ;on both sides

:nothin lda leftej
 clc
 adc ztemp
 sta CDLeftEj

 lda rightej
 sec
 sbc ztemp
 sta CDRightEj

]rts rts

*===============================
*
*  Q U I C K   F L O O R
*
*  Mark for redraw whatever floorpieces character might be
*  impinging on
*
*  In: CharData; GETEDGES results
*
*-------------------------------
QUICKFLOOR
 lda CharPosn
 cmp #135
 bcc :2
 cmp #149
 bcc :climbup

:2 lda CharAction
 cmp #1
 bne :1

 lda CharPosn
 cmp #78
 bcc ]rts
 cmp #80
 bcc :fall
]rts rts

:1 cmp #2
 beq :fall
 cmp #3
 beq :fall
 cmp #4
 beq :fall
 cmp #6
 bne ]rts

:fall lda #markfloor
 ldx #>markfloor
 bne :cont1

:climbup
 lda #markhalf
 ldx #>markhalf

* Mark floorbuf/halfbuf for up to 6 affected blocks
* Start with rightblock, work left to leftblock

:cont1
 sta marksm1+1
 sta marksm2+1
 stx marksm1+2
 stx marksm2+2

 lda rightblock
:loop sta tempblockx

 jsr markul

 lda tempblockx
 cmp leftblock
 beq ]rts
 sec
 sbc #1
 bpl :loop

]rts rts

* mark upper & lower blocks for this blockx

markul
 lda bottomblock
 sta tempblocky

 jsr indexblock ;lower block
 lda #2
marksm1 jsr markhalf

 lda topblock
 cmp bottomblock
 beq ]rts
 sta tempblocky

 jsr indexblock ;upper block
 lda #2
marksm2 jmp markhalf

*-------------------------------
*
*  Q U I C K  F G
*
*  Mark for redraw any f.g. elements char (or his sword)
*  might be impinging on
*
*  In: Char data; left/right/top/bottomblock
*
*-------------------------------
QUICKFG

* Quick fix to cover sword

 lda CharSword
 cmp #2
 bcc :cont

 lda CharFace
 bpl :faceR
 dec leftblock
 jmp :cont

:faceR inc rightblock

* Continue

:cont lda bottomblock
:outloop
 sta tempblocky

 lda rightblock
:loop sta tempblockx

 jsr indexblock
 lda #3
 jsr MARKFRED

 lda tempblockx
 cmp leftblock
 beq :end
 sec
 sbc #1
 bpl :loop
:end
 lda tempblocky
 cmp topblock
 beq ]rts
 sec
 sbc #1
 bpl :outloop
 rts

]bug jmp showpage

*-------------------------------
*
*  C R O P   C H A R A C T E R
*
*  In: FChar data as set by "setframe"
*      leftej,rightej, etc. as set by "getedges"
*
*  Out: FCharCL/CR/CU/CD
*
*-------------------------------
CROPCHAR

* If char is climbing stairs, mask door

 lda CharPosn
 cmp #224
 bcc :nost
 cmp #229
 bcs :nost
 lda doortop ;set by drawexitb
 clc
 adc #2
 cmp FCharY
 bcs :bug ;temp!
 sta FCharCU
]rts rts
:bug ldy #$F0
 jsr showpage
:nost

* If char is under solid (a&b) floor, crop top

 ldx leftblock
 ldy topblock
 lda CharScrn
 jsr rdblock
 cmp #block
 beq :1
 jsr cmpspace
 beq :not

* Special case (more lenient): if char is jumping
* up to touch ceiling

:1 lda CharAction
 bne :10
 lda CharPosn
 cmp #79
 beq :2
 cmp #81
 bne :10
 beq :2

* Otherwise, both left & right topblocks must be solid

:10 ldx rightblock
 ldy topblock
 lda CharScrn
 jsr rdblock
 cmp #block
 beq :2
 jsr cmpspace
 beq  :not

:2 ldx CharBlockY
 inx
 cpx #1
 beq :ok

 lda BlockTop,x
 cmp FCharY
 bcs :not

 sec
 sbc #floorheight
 cmp topej
 bcs :not

:ok lda BlockTop,x
 sta FCharCU
 sta topej
:not

* If char is standing left of a panel, crop R
* Char is considered "left" if CDLeftEj falls within
* panel block

 lda CDLeftEj
 jsr getblockx
 sta blockx

 tax
 ldy CharBlockY
 lda CharScrn
 jsr rdblock

 cmp #panelwof
 beq :r
 cmp #panelwif
 bne :nor

* Char's foot is within panel block
* Special case: If character is hanging R, we don't
* need to check his head

:r lda CharFace
 bmi :cont

 lda CharAction
 cmp #2
 beq :r2 ;yes--hanging R

* Check block to right of char's head

:cont
 ldx blockx
 ldy topblock
 lda CharScrn
 jsr rdblock

 cmp #block
 beq :r2
 cmp #panelwof
 beq :r2
 cmp #panelwif
 bne :nor

* Also a panel -- make a wall

:r2 lda tempblockx
 asl
 asl
 clc
 adc #4
 sta FCharCR
 rts

* Is char standing to L of solid block?
* (i.e. does CDRightEj fall within block?)

:nor
 lda CDRightEj
 jsr getblockx
 sta blockx

 tax
 ldy CharBlockY
 lda CharScrn
 jsr rdblock

 cmp #block
 bne :nob

* Foot is under block--what about head?

 ldx blockx
 ldy topblock
 lda CharScrn
 jsr rdblock

 cmp #block
 bne :nob

* Also a panel -- make a wall

:yescrop
 lda tempscrn
 cmp CharScrn
 bne :nob

 lda tempblockx
 asl
 asl
 sta FCharCR
:nob
 rts

*-------------------------------
*
*  Z E R O   C R O P
*
*-------------------------------
zerocrop
 lda #0
 sta FCharCU
 sta FCharCL
 lda #40
 sta FCharCR
 lda #192
 sta FCharCD
 rts

*===============================
*
*  C O M P A R E   S P A C E
*
*  Is it a space (can you pass thru)?
*  NOTE: Solid block is considered a space (it has no floor)
*
*  In: A = objid
*  Out: 0 = space, 1 = floor
*
*-------------------------------
CMPSPACE
 cmp #space
 beq :space
 cmp #pillartop
 beq :space
 cmp #panelwof
 beq :space
 cmp #block
 beq :space
 cmp #archtop1
 bcs :space

 lda #1
 rts

:space lda #0
 rts

*-------------------------------
*
*  C O M P A R E   B A R R I E R
*
*  Is it a barrier?
*
*  Return A = 0 if clear, else A = barrier code #
*
*-------------------------------
CMPBARR
 cmp #panelwif
 beq :b1
 cmp #panelwof
 beq :b1
 cmp #gate
 bne :2

:b1 lda #1 ;panel/gate
 rts

:2 cmp #mirror
 beq :yes3

 cmp #slicer
 bne :3

:yes3 lda #3 ;mirror/slicer
 rts

:3 cmp #block
 bne :4

 lda #4 ;block
 rts
:4
:clear lda #0
:rts rts

:barr lda #1
]rts rts

*-------------------------------
*
* Is it a wall? Return 0 if yes, 1 if no
* (Solid block, or panel if you're facing L)
*
*-------------------------------
CMPWALL
 cmp #block
 beq :yes
 ldx CharFace
 bpl :no
 cmp #panelwif
 beq :yes
 cmp #panelwof
 beq :yes
:no lda #1
 rts
:yes lda #0
 rts

*-------------------------------
*
*  Add kid/reflection/shadowman/guard to object table
*
*  In: FChar data
*
*-------------------------------
ADDKIDOBJ
 lda #TypeKid
 jmp addcharobj

*-------------------------------
ADDREFLOBJ
 lda #TypeReflect
 jmp addcharobj

*-------------------------------
ADDSHADOBJ
 lda #TypeShad
 jmp addcharobj

*-------------------------------
ADDGUARDOBJ
 lda #TypeGd
 jmp addcharobj

*-------------------------------
*
* Add sword to object table
* In: FChar data for character holding sword
*
*-------------------------------
ADDSWORDOBJ
 lda #TypeSword
 jmp addcharobj

*-------------------------------
*
*  G E T   S E Q
*
*  Get next byte from seqtable & advance CharSeq
*  (2-byte pointer to sequence table)
*
*-------------------------------
GETSEQ
 ldy #0
 lda (CharSeq),y
 pha

 inc CharSeq
 bne :done
 inc CharSeq+1

:done pla
 rts

*-------------------------------
*
*  G E T   F R A M E   I N F O
*
*  Get frame info for char (based on CharPosn)
*
*-------------------------------
GETFRAMEINFO
 lda CharPosn
 jsr GETFRAME ;set framepoint

 jsr usealtsets ;if appropriate

 ldy #0
 lda (framepoint),y
 sta Fimage

 iny
 lda (framepoint),y
 sta Fsword

 iny
 lda (framepoint),y
 sta Fdx

 iny
 lda (framepoint),y
 sta Fdy

 iny
 lda (framepoint),y
 sta Fcheck

]rts rts

*-------------------------------
*
* Use alternate character image sets
* (if appropriate)
*
* In: Char data; framepoint
* Out: framepoint
*
*-------------------------------
usealtsets
 ldx CharID
 beq ]rts ;kid uses main set, enemy uses alt set 1
 cpx #24
 beq ]rts ;mouse uses main set
 cpx #5
 bcs :usealt2 ;princess & vizier use alt set 2

 lda CharPosn
 cpx #2
 bcc :1
 cmp #102
 bcc ]rts
 cmp #107
 bcs :1
 ;frames 102-106 (falling): substitute 172-176 altset
 clc
 adc #70

:1 cmp #150
 bcc ]rts
 cmp #190
 bcs ]rts
;frames 150-189: use altset
 sec
 sbc #149
 jmp getaltframe1

:usealt2
 lda CharPosn
 jmp getaltframe2

*===============================
*
*  M A R K
*
*  In: A = mark value (usually 2)
*      Results of INDEXBLOCK:
*      Y = block #; carry set or clear
*
*  Out: Preserve A, Y, carry
*
*-------------------------------
]os cpy #10 ;top line from scrn above?
 bcs ]rts ;no
 sta topbuf,y
 sec ;preserve cs
]rts rts

MARKRED
 bcs ]os
 sta redbuf,y
 rts

MARKFRED
 bcs ]rts
 sta fredbuf,y
 rts

MARKWIPE
 bcs ]rts
 pha
 lda wipebuf,y
 beq :2
 lda height
 cmp whitebuf,y ;if wipebuf is already marked,
 bcc :1 ;use larger of 2 whitebuf values
:2 lda height
 sta whitebuf,y
:1 pla
 sta wipebuf,y
 clc ;return with cc
 rts

MARKMOVE
 bcs ]os
 sta movebuf,y
 rts

MARKFLOOR
 bcs ]os
 sta floorbuf,y
 rts

MARKHALF
 bcs ]os
 sta halfbuf,y
 rts

*-------------------------------
*
*  Z E R O   R E D
*
*  zero redraw buffers
*
*-------------------------------
ZERORED
 lda #0

 ldy #29

:loop sta redbuf,y
 sta fredbuf,y
 sta floorbuf,y
 sta wipebuf,y
 sta movebuf,y
 sta objbuf,y
 sta halfbuf,y

 dey
 bpl :loop

 ldy #9
:dloop sta topbuf,y
 dey
 bpl :dloop

 rts

*-------------------------------
*
*  C H E C K L E D G E
*
*  In: blockid = block that must be clear;
*      A = RDBLOCK results for block that must be ledge
*
*  Out: A = 1 if grabbable, 0 if not
*
*-------------------------------
CHECKLEDGE
 sta ztemp

 lda (BlueSpec),y
 sta tempstate

 lda blockid ;must be clear

 cmp #block
 beq :no

 cmp #panelwof ;CMPSPACE considers panel w/o floor
  bne :cont ;to be clear--

 bit CharFace ;but it isn't if char wants to grab
 bpl :no ;floorpiece to right
:cont
 jsr cmpspace
 bne :no

* Clear above -- is there a ledge in front?

 lda ztemp ;must be a solid floorpiece
;with exposed ledge
 cmp #loose
 bne :notloose

 bit tempstate
 bne :no ;floor is already loose

:notloose
 cmp #panelwif
 bne :cont2 ;panel w/floor can be grabbed
;only if facing right
 bit CharFace
 bmi :no

:cont2 jsr cmpspace
 beq :no

:yes lda #1
 rts

:no lda #0
]rts rts

*-------------------------------
*
*  C H E C K   S P I K E S
*
*  Spikes spring out when char passes over them (at any
*  height).
*
*-------------------------------
CHECKSPIKES
 lda rightej
 jsr getblockxp
 bmi ]rts
 sta tempright

* for blockx = leftblock to rightblock

 lda leftej
 jsr getblockxp
:loop sta blockx

 jsr sub

 lda blockx
 cmp tempright
 beq ]rts
 clc
 adc #1
 jmp :loop

sub sta tempblockx
 lda CharBlockY
 sta tempblocky
 lda CharScrn
 sta tempscrn
:loop jsr rdblock1

 cmp #spikes
 bne :again
 jmp trigspikes

:again jsr cmpspace
 bne ]rts

 lda tempscrn
 beq ]rts ;null scrn
 cmp CharScrn
 bne ]rts ;wait till he's on same screen

 inc tempblocky
 jmp :loop ;check 1 level below

*===============================
*
*  Load/save kid/shad vars
*
*-------------------------------
numvars = 16

LOADKID
 ldx #numvars-1

:loop lda Kid,x
 sta Char,x

 dex
 bpl :loop
]rts rts

SAVEKID
 ldx #numvars-1

:loop lda Char,x
 sta Kid,x

 dex
 bpl :loop
]rts rts

LOADSHAD
 ldx #numvars-1

:loop lda Shad,x
 sta Char,x

 dex
 bpl :loop
]rts rts


SAVESHAD
 ldx #numvars-1

:loop lda Char,x
 sta Shad,x

 dex
 bpl :loop
 rts

*  Load kid w/ opponent

LOADKIDWOP
 ldx #numvars-1

:loop lda Kid,x
 sta Char,x

 lda Shad,x
 sta Op,x

 dex
 bpl :loop
 rts

SAVEKIDWOP
 ldx #numvars-1

:loop lda Char,x
 sta Kid,x

 lda Op,x
 sta Shad,x

 dex
 bpl :loop
 rts

* Load shadowman w/ opponent

LOADSHADWOP
 ldx #numvars-1

:loop lda Shad,x
 sta Char,x

 lda Kid,x
 sta Op,x

 dex
 bpl :loop
 rts

SAVESHADWOP
 ldx #numvars-1

:loop lda Char,x
 sta Shad,x

 lda Op,x
 sta Kid,x

 dex
 bpl :loop
 rts

*-------------------------------
*
* Recharge strength meter to max
*
*-------------------------------
RECHARGEMETER
 lda MaxKidStr
 sec
 sbc KidStrength
 sta ChgKidStr
]rts rts

*-------------------------------
*
* Boost strength meter max by 1 and recharge
*
*-------------------------------
BOOSTMETER
 lda MaxKidStr
 cmp #maxmaxstr
 bcs :1

 clc
 adc #1
 sta MaxKidStr

:1 jmp RECHARGEMETER

*-------------------------------
*
* Get distance between char & opponent
* (# pixels char must move fwd to reach opponent)
* If dist is greater than 127, return 127 (+ or -)
*
*-------------------------------
estwidth = 13 ;rough est of char width

GETOPDIST
 lda CharScrn
 cmp OpScrn
 bne :safe

* First, get A = OpX-CharX (abs. value <= 127)

 lda OpX
 cmp CharX
 bcc :neg
 sec
 sbc CharX
 bpl :got
 lda #127
 bpl :got

:neg lda CharX
 sec
 sbc OpX
 bpl :1
 lda #127
:1 eor #$ff
 clc
 adc #1 ;negate

* If CharFace = left, negate

:got ldx CharFace
 bpl :cont
 eor #$ff
 clc
 adc #1

* If chars are facing in opposite directions,
* adjust by estimate of width of figure

:cont tax
 lda CharFace
 eor OpFace
 bpl :done
 txa
 cmp #127-estwidth
 bcs :done2
 clc
 adc #estwidth
:done2 tax
 rts

:safe ldx #127 ;arbitrary large dist.
:done txa ;return value in A
]rts rts

*-------------------------------
*
*  Adjust CharY for uneven floor
*
*-------------------------------
UNEVENFLOOR
 jsr getunderft
 cmp #dpressplate
 bne ]rts
 inc CharY
]rts rts

*-------------------------------
 lst
 ds 1
 usr $a9,19,$200,*-org
 lst off


================================================
FILE: 01 POP Source/Source/EQ.S
================================================
 tr on
 lst off
* eq
*-------------------------------
*
*  Equates
*
*-------------------------------
*  Main l.c.

rw18 = $d000
peelbuf1 = $d000
peelbuf2 = $d800
hrtables = $e000
unpack = $ea00 ;game only
hires = $ee00
master = $f880

*  Auxmem

grafix = $400
tables = $e00
frameadv = $1290
redbufs = $5e00
menudata = $960f ;ed only
imlists = $ac00
endimspace = $b600
blueprnt = $b700

*  Aux l.c.

bluecopy = $d000 ;bank 1

*-------------------------------
*
*  Jump tables
*
*-------------------------------
 dum master

_firstboot ds 3
_loadlevel ds 3
_reload ds 3
_loadstage2 ds 3
 ds 3

_attractmode ds 3
_cutprincess ds 3
_savegame ds 3
_loadgame ds 3
_dostartgame ds 3

_epilog ds 3
_loadaltset ds 3
 ds 3 ;_screendump

 dum master ;ed

 ds 15

_edreboot ds 3
_gobuild ds 3
_gogame ds 3
_writedir ds 3
_readdir ds 3

_savelevel ds 3
_savelevelg ds 3
_screendump ds 3

 dum hrtables

YLO ds $c0
YHI ds $c0

 dum hires

_boot3 ds 3
_cls ds 3
_lay ds 3
_fastlay ds 3
_layrsave ds 3

_lrcls ds 3
_fastmask ds 3
_fastblack ds 3
_peel ds 3
_getwidth ds 3

_copy2000 ds 3
_copy2000aux ds 3
_setfastaux ds 3
_setfastmain ds 3
_copy2000ma ds 3

_copy2000am ds 3


 dum unpack

SngExpand ds 3
DblExpand ds 3
DeltaExpPop ds 3
_inverty ds 3
DeltaExpWipe ds 3

purple ds 3
prompt ds 3
blackout ds 3
clr ds 3
text ds 3

setdhires ds 3
fadein ds 3
loadsuper ds 3
fadeout ds 3

 dum grafix

gr ds 3
drawall ds 3
controller ds 3
 ds 3
saveblue ds 3

reloadblue ds 3
movemem ds 3
buttons ds 3
gtone ds 3
setcenter ds 3

dimchar ds 3
cvtx ds 3
zeropeel ds 3
zeropeels ds 3
pread ds 3

addpeel ds 3
copyscrn ds 3
sngpeel ds 3
rnd ds 3
cls ds 3

lay ds 3
fastlay ds 3
layrsave ds 3
lrcls ds 3
fastmask ds 3

fastblack ds 3
peel ds 3
getwidth ds 3
copy2000 ds 3
copy2000ma ds 3

setfastaux ds 3
setfastmain ds 3
loadlevel ds 3
attractmode ds 3
xminit ds 3

xmplay ds 3
cutprincess ds 3
xtitle ds 3
copy2000am ds 3
reload ds 3

loadstage2 ds 3
 ds 3
getselect ds 3
getdesel ds 3
edreboot ds 3 ;ed

gobuild ds 3 ;ed
gogame ds 3 ;ed
writedir ds 3 ;ed
readdir ds 3 ;ed
savelevel ds 3 ;ed

savelevelg ds 3 ;ed
addback ds 3
addfore ds 3
addmid ds 3
addmidez ds 3

addwipe ds 3
addmsg ds 3
savegame ds 3
loadgame ds 3
zerolsts ds 3

screendump ds 3
minit ds 3
mplay ds 3
savebinfo ds 3
reloadbinfo ds 3

inverty ds 3
normspeed ds 3
addmidezo ds 3
calcblue ds 3
zerored ds 3

xplaycut ds 3
checkIIGS ds 3
fastspeed ds 3
musickeys ds 3
dostartgame ds 3

epilog ds 3
loadaltset ds 3
xmovemusic ds 3
whoop ds 3
vblank ds 3

vbli ds 3

 dum redbufs

 ds 60 ;unused
halfbuf ds 30
redbuf ds 30
fredbuf ds 30
floorbuf ds 30
wipebuf ds 30
movebuf ds 30
objbuf ds 30
whitebuf ds 30
topbuf ds 10

 dum menudata ;ed only

menutype ds 30
menuspec ds 30
menubspec ds 30

 dum frameadv

sure ds 3
fast ds 3
getinitobj ds 3

 dum tables

ByteTable ds $100
OffsetTable ds $100
BlockTable ds $100
PixelTable ds $100
Mult10 ds $10
Mult7 ds $10
Mult30 ds $40
BlockEdge ds 20
BlockTop ds 5
BlockBot ds 5
FloorY ds 5
BlockAy ds 5

 dum blueprnt

BLUETYPE ds 24*30
BLUESPEC ds 24*30
LINKLOC ds 256
LINKMAP ds 256
MAP ds 24*4
INFO ds 256

*-------------------------------
*
*  Blueprint info
*
*-------------------------------
 dum INFO

 ds 64
KidStartScrn ds 1
KidStartBlock ds 1
KidStartFace ds 1
 ds 1
SwStartScrn ds 1
SwStartBlock ds 1
 ds 1
GdStartBlock ds 24
GdStartFace ds 24
GdStartX ds 24
GdStartSeqL ds 24
GdStartProg ds 24
GdStartSeqH ds 24

*-------------------------------
*
*  Image lists
*
*-------------------------------
maxback = 200 ;x4
maxfore = 100 ;x4
maxwipe = 20 ;x5
maxpeel = 46 ;x4
maxmid = 46 ;x11
maxobj = 20 ;x12
maxmsg = 32 ;x5

 dum imlists

genCLS ds 1

bgX ds maxback
bgY ds maxback
bgIMG ds maxback
bgOP ds maxback

fgX ds maxfore
fgY ds maxfore
fgIMG ds maxfore
fgOP ds maxfore

wipeX ds maxwipe
wipeY ds maxwipe
wipeH ds maxwipe
wipeW ds maxwipe
wipeCOL ds maxwipe

peelX ds maxpeel*2
peelY ds maxpeel*2
peelIMGL ds maxpeel*2
peelIMGH ds maxpeel*2

midX ds maxmid
midOFF ds maxmid
midY ds maxmid
midIMG ds maxmid
midOP ds maxmid
midTYP ds maxmid
midCU ds maxmid
midCD ds maxmid
midCL ds maxmid
midCR ds maxmid
midTAB ds maxmid

objINDX ds maxobj
objX ds maxobj
objOFF ds maxobj
objY ds maxobj
objIMG ds maxobj
objFACE ds maxobj
objTYP ds maxobj
objCU ds maxobj
objCD ds maxobj
objCL ds maxobj
objCR ds maxobj
objTAB ds maxobj

msgX ds maxmsg
msgOFF ds maxmsg
msgY ds maxmsg
msgIMG ds maxmsg
msgOP ds maxmsg

*-------------------------------
*
*  Zero page
*
*-------------------------------
*  $00-17: Hires parameters
*-------------------------------
 dum $00

PAGE ds 1
XCO ds 1
YCO ds 1
OFFSET ds 1
IMAGE ds 2
OPACITY ds 1
TABLE ds 2
PEELBUF ds 2
PEELIMG ds 2
PEELXCO ds 1
PEELYCO ds 1
TOPCUT ds 1
LEFTCUT ds 1
RIGHTCUT ds 1
BANK ds 1
BOTCUT ds 1

height = IMAGE
width = IMAGE+1

*-------------------------------
*  $18-3f: Global vars
*-------------------------------
 dum $18

JSTKX ds 1
JSTKY ds 1
BTN0 ds 1
BTN1 ds 1
BUTT0 ds 1
BUTT1 ds 1
JSTKUP ds 1
b0down ds 1
b1down ds 1
SINGSTEP ds 1
blackflag ds 1
SCRNUM ds 1
BlueType ds 2
BlueSpec ds 2
CUTTIMER ds 1
PRECED ds 1
spreced ds 1
PREV ds 3
sprev ds 3
scrnLeft ds 1
scrnRight ds 1
scrnAbove ds 1
scrnBelow ds 1
scrnBelowL ds 1
scrnAboveL ds 1
scrnAboveR ds 1
scrnBelowR ds 1
kbdX ds 1
kbdY ds 1
joyX ds 1
joyY ds 1
btn ds 1
butt ds 1

*-------------------------------
*
*  Pages 2-3
*
*-------------------------------
 dum $200

inmenu ds 1
inbuilder ds 1
ineditor ds 1
soundon ds 1
jctr ds 2
jthres1x ds 1
jthres1y ds 1
jthres2x ds 1
jthres2y ds 1
jvert ds 1
jhoriz ds 1
jbtns ds 1
joyon ds 1
develment ds 1
keypress ds 1
keydown ds 1
IIGS ds 1

 dum $3c0

sortX ds $10
BELOW ds $10
SBELOW ds $10

 dum $3f0

bluepTRK ds 1
bluepREG ds 1
binfoTRK ds 1
binfoREG ds 1
level ds 1
BBundID ds 1
redherring2 ds 1
pausetemp ds 1
recheck0 ds 1

 dend

*-------------------------------
*
*  Misc. constants
*
*-------------------------------
ScrnWidth = 140
ScrnHeight = 192

ScrnLeft = 58
ScrnRight = ScrnLeft+ScrnWidth-1
ScrnTop = 0
ScrnBottom = ScrnTop+ScrnHeight-1

secmask = %11000000
reqmask = %00100000
idmask = %00011111

and = 0
ora = 1
sta = 2
eor = 3
mask = 4

 lst off


================================================
FILE: 01 POP Source/Source/FRAMEADV.S
================================================
* frameadv
EditorDisk = 0 ;1 = dunj, 2 = palace
org = $1290
 lst off
 tr on
*-------------------------------
 org org

 jmp SURE
 jmp FAST
 jmp GETINITOBJ

*-------------------------------
 lst
 put eq
 lst
 put gameeq
 lst off
 put bgdata
 lst off

initsettings
 db gmaxval,gminval

 dum locals
index ds 1
rowno ds 1
colno ds 1
yindex ds 1
objid ds 1
state ds 1
Ay ds 1
Dy ds 1
gateposn ds 1
gatebot ds 1
xsave ds 1
blockxco ds 1
switches ds 1
obj1 ds 1
obj2 ds 1
blockthr ds 1
 dend

*-------------------------------
*
*  Draw entire 10 x 3 screen from scratch
*
*-------------------------------
SURE
 lda #1
 sta genCLS ;clear screen

 jsr setback ;draw on bg plane

 jsr getprev ;get 3 rightmost blocks of screen to left

 lda SCRNUM
 jsr calcblue ;get blueprint base addr

*  Draw 3 rows of 10 blocks (L-R, T-B)

 ldy #2
:row sty rowno ;0 = top row, 2 = bottom row

 lda BlockBot+1,y
 sta Dy ;get Y-coord for bottom of D-section
 sec
 sbc #3
 sta Ay ;& A-section

 lda Mult10,y
 sta yindex ;block # (0-29)

 lda PREV,y
 sta PRECED
 lda sprev,y
 sta spreced ;get objid & state of preceding block

 jsr getbelow ;get 10 topmost blocks of screen below

 lda #0
 sta colno ;0 = leftmost column, 9 = rightmost
:loop asl
 asl
 sta XCO
 sta blockxco ;get X-coord for A-section

 ldy yindex
 jsr getobjid
 sta objid ;get object id# of current block

 jsr RedBlockSure ;Redraw entire block

 lda objid
 sta PRECED
 lda state
 sta spreced ;Move on to next block

 inc yindex
 inc colno

 lda colno
 cmp #10
 bcc :loop ;...until we've done 10 blocks

:nextln ldy rowno
 beq :done
 dey
 jmp :row ;...and 3 rows

* Now draw bottom row of screen above (D-sections only)

:done ldy #2 ;bottom row of scrn above
 sty rowno

 lda #2
 sta Dy
 lda #-1
 sta Ay ;get screen Y-coords

 lda Mult10,y
 sta yindex

 lda #0
 sta PRECED

 lda scrnBelow
 pha
 lda scrnBelowL
 pha ;save current values on stack

 lda SCRNUM
 sta scrnBelow
 lda scrnLeft
 sta scrnBelowL ;& pretend we're on screen above

* Draw 10 blocks, L-R

 jsr getbelow

 lda scrnAbove
 jsr calcblue

 lda #0
 sta colno
:dloop
 asl
 asl
 sta XCO
 sta blockxco

 lda scrnAbove
 bne :1
 lda #floor ;If screen above is null screen,
 bne :2 ;draw a row of solid floorpieces

:1 ldy yindex
 jsr getobjid1
:2 sta objid

 jsr RedDSure ;Draw D-section

 lda objid
 sta PRECED
 lda state
 sta spreced

 inc yindex
 inc colno

 lda colno
 cmp #10
 bcc :dloop

 pla ;Restore original screen values
 sta scrnBelowL
 pla
 sta scrnBelow
]rts rts

*-------------------------------
*
*  Fast screen redraw
*
*  Same general structure as SURE, but redraws only those
*  blocks specified by redraw buffers.
*
*-------------------------------
FAST
 jsr getprev

 lda SCRNUM
 jsr calcblue

 lda #0
 ldy #20
 jsr metbufs3 ;If strength meter is in danger of
 sta redkidmeter ;being overwritten, mark it for redraw

 lda #0
 ldy #28
 jsr metbufs2
 sta redoppmeter ;opponent meter too

 lda #30
 sta yindex
 jsr drawobjs ;Draw o.s. characters first

*  Draw 3 rows of 10 blocks (L-R, T-B)

 ldy #2
:row sty rowno

 lda BlockBot+1,y
 sta Dy
 sec
 sbc #3
 sta Ay

 lda Mult10,y
 sta yindex

 lda PREV,y
 sta PRECED
 lda sprev,y
 sta spreced

 jsr getbelow

 lda #0
 sta colno

:loop asl
 asl
 sta XCO
 sta blockxco

 ldy yindex
 jsr getobjid
 sta objid

 jsr RedBlockFast

 lda objid
 sta PRECED
 lda state
 sta spreced

 inc yindex
 inc colno

 lda colno
 cmp #10
 bcs :nextln
 jmp :loop

:nextln ldy rowno
 beq :cont
 dey
 jmp :row

* Now draw bottom row of screen above (D-sections only)

:cont jsr setback

 ldy #2
 sty rowno

 lda #2
 sta Dy
 lda #-1
 sta Ay

 lda Mult10,y
 sta yindex

 lda #0
 sta PRECED

 lda scrnBelow
 pha
 lda scrnBelowL
 pha

 lda SCRNUM
 sta scrnBelow
 lda scrnLeft
 sta scrnBelowL

 jsr getbelow

 lda scrnAbove
 beq :done
 jsr calcblue

 lda #0
 sta colno
:dloop
 asl
 asl
 sta blockxco
 sta XCO

 ldy yindex
 jsr getobjid1
 sta objid

 jsr RedDFast

 lda objid
 sta PRECED
 lda state
 sta spreced

 inc yindex
 inc colno

 lda colno
 cmp #10
 bcc :dloop

:done
 pla
 sta scrnBelowL
 pla
 sta scrnBelow

* Now draw comix (impact stars) & strength meters

 lda #$ff
 sta yindex
 jsr drawobjs ;draw comix (index = -1)

 do EditorDisk
 lda inbuilder
 bne ]rts
 fin

 jmp updatemeters

*-------------------------------
*
*  Redraw entire block
*
*-------------------------------
RedBlockSure
 jsr drawc ;C-section of piece below & to left
 jsr drawmc

 jsr drawb ;B-section of piece to left
 jsr drawmb

 jsr drawd ;D-section
 jsr drawmd

 jsr drawa ;A-section
 jsr drawma

 jmp drawfrnt ;A-section frontpiece
;(Note: This is necessary in case we do a
;layersave before we get to f.g. plane)

*-------------------------------
*
* Redraw entire D-section
*
*-------------------------------
RedDSure
 jsr drawc
 jsr drawmc
 jsr drawb
 jsr drawd
 jsr drawmd
 jmp drawfrnt

*-------------------------------
*
*  Partial block redraw (as specified by redraw buffers)
*
*-------------------------------
RedBlockFast
 lda wipebuf,y ;is wipebuf marked?
 beq :skipwipe ;no--skip it
 sec
 sbc #1
 sta wipebuf,y ;decrement wipebuf

 jsr wipesq ;& wipe this block!

 ldy yindex

:skipwipe
 lda redbuf,y
 beq :skipred
 sec
 sbc #1
 sta redbuf,y

 jsr setback
 jsr RedBlockSure

 ldy yindex
 bpl :skipmove

:skipred
 lda movebuf,y
 beq :skipmove
 sec
 sbc #1
 sta movebuf,y

 jsr setback
 jsr drawmc
 jsr drawmb
 jsr drawma

 ldy yindex

:skipmove
 lda floorbuf,y
 beq :skipfloor
 sec
 sbc #1
 sta floorbuf,y

 jsr setmid
 jsr drawfloor

 ldy yindex
 bpl :skiphalf

:skipfloor
 lda halfbuf,y
 beq :skiphalf
 sec
 sbc #1
 sta halfbuf,y

 jsr setmid
 jsr drawhalf

 ldy yindex

:skiphalf
 lda objbuf,y
 beq :skipobj

 lda #0
 sta objbuf,y

 jsr drawobjs ;draw all objects in this block

 lda blockxco
 sta XCO

 ldy yindex

:skipobj
 lda fredbuf,y
 beq :skipfred
 sec
 sbc #1
 sta fredbuf,y

 jsr drawfrnt

 ldy yindex

:skipfred
]rts rts

*-------------------------------
*
*  Partial D-section redraw
*
*-------------------------------
RedDFast
 ldy colno
 lda topbuf,y ;is topbuf marked?
 beq :skip ;no--skip it
 sec
 sbc #1
 sta topbuf,y

 jsr wiped
 jsr drawc
 jsr drawmc
 jsr drawb
 jsr redrawd ;(both bg and fg)
 jsr drawmd
 jsr drawfrnt
:skip
]rts rts

*-------------------------------
*
*  Draw objects
*
*  Draw object/s with index # = yindex
*  (Add appropriate images to mid list)
*
*-------------------------------
drawobjs

* Go through obj list looking for objINDX = yindex

 lda objX
 beq :rts

 ldy #0 ;y = sort list index
 ldx #1 ;x = object list index

:loop lda objINDX,x
 cmp yindex
 bne :next
;Found a match--add object to sort list
 txa
 iny
 sta sortX,y

:next inx
 cpx objX
 bcc :loop
 beq :loop

 cpy #0
 beq :rts
 sty sortX ;# of objects in sort list

* Sort them into back-to-front order

 jsr sortlist

* Transfer sorted objects from obj list to mid list

 ldx #1
:loop2
 stx xsave

 lda sortX,x
 tax ;obj list index

 jsr drawobjx ;draw object #x

 ldx xsave
 inx
 cpx sortX
 bcc :loop2
 beq :loop2
;Done
:rts rts

*-------------------------------
*
*  Get objids & states of 3 rightmost blocks
*  of left-neighboring screen
*
*  Out: PREV/sprev [0-2]
*
*-------------------------------
getprev lda SCRNUM
 beq :null

 lda scrnLeft
 beq :blackscrn

:cont jsr calcblue ;screen to left

 ldy #9
 jsr getobjid1
 sta PREV
 lda state
 sta sprev

 ldy #19
 jsr getobjid1
 sta PREV+1
 lda state
 sta sprev+1

 ldy #29
 jsr getobjid1
 sta PREV+2
 lda state
 sta sprev+2

 rts

:null ;this scrn is null screen
 lda scrnLeft
 bne :cont

:blackscrn ;screen to left is null scrn
 lda #block
 sta PREV
 sta PREV+1
 sta PREV+2
 lda #0
 sta sprev
 sta sprev+1
 sta sprev+2
 rts

*-------------------------------
*
*  Get objids & states of 10 blocks in row below,
*  1 block to left
*
*  In:  rowno
*  Out: BELOW/SBELOW [0-9]
*
*  Use getbelow1 to look at screens other than scrnBelow
*  (In: A = scrn #)
*
*-------------------------------
getbelow
 ldx rowno
 cpx #2
 bcc :onscr

* Looking below bottom row

 lda scrnBelow
 beq :belowblack ;screen below is black
 jsr calcblue

 ldy #8 ;skip rmost
:loop
 jsr getobjid

 sta BELOW+1,y
 lda state
 sta SBELOW+1,y
 dey
 bpl :loop
:cont1
 lda scrnBelowL
 beq :llblack ;screen to l.l. is black
 jsr calcblue

 ldy #9 ;u.r. block
 jsr getobjid
 sta BELOW
 lda state
 sta SBELOW
:done
 lda SCRNUM
 jsr calcblue ;restore SCRNUM
 rts

* "ONSCREEN": Looking below top or middle row

:onscr lda PREV+1,x
 sta BELOW
 lda sprev+1,x
 sta SBELOW

 lda yindex
 clc
 adc #10
 tay

 ldx #1

:loop1 stx xsave
 jsr getobjid
 ldx xsave

 sta BELOW,x

 lda state
 sta SBELOW,x

 iny
 inx
 cpx #10
 bcc :loop1

 rts

* Look below null screen

:belowblack
 lda #1
 tax
:loop2 sta BELOW,x
 inx
 cpx #10
 bcc :loop2
 bcs :cont1

:llblack
 lda level
 cmp #12
 beq :2 ;sorry Lance!
 lda #block
:1 sta BELOW
 bpl :done
:2 lda #space
 bpl :1

*-------------------------------
*
*  L O A D   O B J E C T
*
*  Load vars with object data
*
*  In:  x = object table index
*       X, OFF, Y, IMG, FACE, TYP, CU, CD, CL, CR, TAB
*
*  Out: XCO, OFFSET, YCO, IMAGE, TABLE
*       FCharFace, FCharCU-CD-CL-CR
*       A = objTYP
*
*-------------------------------
loadobj
 lda objX,x
 sta FCharX
 sta XCO

 lda objOFF,x
 sta OFFSET

 lda objY,x
 sta FCharY
 sta YCO

 lda objIMG,x
 sta IMAGE

 lda objTAB,x
 sta TABLE

 lda objFACE,x
 sta FCharFace

 lda objCU,x
 sta FCharCU
 lda objCD,x
 sta FCharCD
 lda objCL,x
 sta FCharCL
 lda objCR,x
 sta FCharCR

 lda objTYP,x
]rts rts

*-------------------------------
*
*  D R A W   F R O N T
*
*-------------------------------
drawfrnt
 ldx PRECED
 cpx #gate
 bne :a
 jsr DrawGateBF? ;special case

:a ldx objid
 cpx #slicer
 bne :11
 jmp drawslicerf
:11 cpx #flask
 bne :1
 lda state
 and #%11100000
 cmp #%10100000 ;5
 beq :1
 cmp #%01000000 ;2
 bcc :1
 lda #specialflask
 bne :12

:1 ldx objid
 lda fronti,x
 beq ]rts
:12 sta IMAGE

 lda Ay
 clc
 adc fronty,x
 sta YCO

 lda blockxco
 clc
 adc frontx,x
 sta XCO

 cpx #archtop2
 bcs :sta

 do EditorDisk
 lda #EditorDisk
 cmp #2
 beq :ndunj
 fin

 lda BGset1
 cmp #1 ;pal
 beq :ndunj

 cpx #posts
 beq :sta ;for dungeon bg set
:ndunj cpx #block
 beq :block

 jmp maddfore

* Special handling for block

:block ldy state
 cpy #numblox
 bcc :2
 ldy #0
:2 lda blockfr,y
 sta IMAGE

* Pieces that go to byte boundaries can be STA'd w/o masking

:sta ldx #sta
 stx OPACITY
 jmp addfore

*-------------------------------
* Draw Gate B Front?
* (only if kid is to the left of bars)
*-------------------------------
DrawGateBF?
 lda rowno
 cmp KidBlockY
 bne ]rts

 ldx colno
 dex
 cpx KidBlockX ;is kid in gate block?
 bne ]rts
 lda scrnRight
 cmp KidScrn
 beq ]rts

 jmp drawgatebf ;draw gate bars over char

*-------------------------------
*
*  D R A W   M O V A B L E   ' B '
*
*-------------------------------
drawmb
 lda PRECED

 cmp #gate ;check for special cases
 bne :1
 jmp drawgateb ;draw B-section of moving gate

:1 cmp #spikes
 bne :2
 jmp drawspikeb

:2 cmp #loose
 bne :3
 jmp drawlooseb

:3 cmp #torch
 bne :4
 jmp drawtorchb
:4
:5 cmp #exit
 bne :6
 jmp drawexitb

:6
]rts rts

*-------------------------------
*
*  D R A W  M O V A B L E  ' C '
*
*-------------------------------
drawmc
 lda objid ;is there a piece here?
 cmp #space
 beq :ok
 cmp #panelwof
 beq :ok
 cmp #pillartop
 beq :ok

 bne ]rts ;if yes, its A-section will cover up
;the C-section of the piece below
:ok
 ldx colno
 lda BELOW,x ;objid of piece below & to left

 cmp #gate
 bne ]rts

 ;That piece is a gate--
 jmp drawgatec ;special case (movable c)

*-------------------------------
*
*  Draw C-section (if visible)
*
*-------------------------------
drawc
 jsr checkc
 bcc ]rts
 jsr dodrawc ;OR C-section of piece below & to left
 jmp domaskb ;Mask B-section of piece to left

*-------------------------------
*
*  Return cs if C-section is visible, cc if hidden
*
*-------------------------------
checkc
 lda objid ;Does this space contain solid floorpiece?
 beq :vis
 cmp #pillartop
 beq :vis
 cmp #panelwof
 beq :vis
 cmp #archtop1
 bcs :vis
 bcc ]rts ;C-section is hidden
:vis sec ;C-section is visible
]rts rts

*-------------------------------
*
*  Draw C-section of piece below & to left
*
*-------------------------------
dodrawc
 ldx colno
 lda BELOW,x ;objid of piece below & to left
 tax
 cpx #block
 beq :block
 lda piecec,x
 beq ]rts ;piece has no c-section
 cmp #panelc0
 beq :panel ;special panel handling
:cont sta IMAGE
 lda blockxco
 sta XCO
 lda Dy
 sta YCO
 lda #ora
 sta OPACITY
 jmp add

* Special panel handling

:panel ldx colno
 lda SBELOW,x
 tay
 cpy #numpans ;# of different panels
 bcs ]rts
 lda panelc,y
 bne :cont
 rts

:block ldx colno
 lda SBELOW,x
 tay
 cpy #numblox
 bcc :1
 ldy #0
:1 lda blockc,y
 bne :cont
]rts rts

*-------------------------------
*
*  Mask B-section of piece to left
*
*-------------------------------
domaskb
 ldx PRECED
 lda maskb,x
 beq ]rts
 sta IMAGE

 lda Dy
 sta YCO
 lda #and
 sta OPACITY
 jmp add

*-------------------------------
*
*  Draw B-section of piece to left
*
*-------------------------------
drawb
 lda objid
 cmp #block
 beq ]rts ;B-section hidden by solid block

 ldx PRECED
 cpx #space
 beq :space
 cpx #floor
 beq :floor
 cpx #block
 beq :block
 lda pieceb,x
 beq :stripe
 cmp #panelb0
 beq :panel ;special panel handling

* draw regular B-section

 jsr :cont1

* Add stripe (palace bg set only)

:stripe do EditorDisk
 lda #EditorDisk
 cmp #2
 beq :stripe
 fin

 lda BGset1
 cmp #1 ;pal
 bne ]rts

:str1 ldx PRECED
 lda bstripe,x
 beq ]rts
 sta IMAGE
 lda Ay
 sec
 sbc #32
 jmp :cont2

* Special panel handling

:panel ldy spreced
 cpy #numpans
 bcs ]rts
 lda panelb,y
 bne :cont1
]rts rts

:block ldy spreced
 cpy #numblox
 bcc :1
 ldy #0
:1 lda blockb,y
 bne :cont1

:floor ldy spreced
 cpy #numbpans+1
 bcc :3
 ldy #0
:3 lda floorb,y
 beq ]rts
 sta IMAGE
 lda floorby,y
 jmp :cont

:space ldy spreced
 cpy #numbpans+1
 bcs ]rts
 lda spaceb,y
 beq ]rts
 sta IMAGE
 lda spaceby,y
 jmp :cont

* Draw regular B-section

:cont1 sta IMAGE
 lda pieceby,x
:cont clc
 adc Ay
:cont2 sta YCO
 lda blockxco
 sta XCO
 lda #ora
 sta OPACITY
 jmp add

*-------------------------------
*
*  Draw D-section
*
*-------------------------------
redrawd jsr drawd
 beq ]rts
 jmp addfore

drawd lda #sta
 sta OPACITY
 ldx objid
 cpx #block
 beq :block
 cpx #panelwof ;Do we need to mask this D-section?
 bne :cont ;no
:mask lda #ora
 sta OPACITY
:cont lda pieced,x
 beq ]rts
:cont1 sta IMAGE
 lda blockxco
 sta XCO
 lda Dy
 sta YCO
 jsr add
 lda #$ff
]rts rts

* Block handling

:block ldy state
 cpy #numblox
 bcc :1
 ldy #0
:1 lda blockd,y
 bne :cont1

*-------------------------------
*
*  D R A W   ' A '
*
*  (1) If piece to left has intrusive B-section (e.g., panel):
*      MASK A-section
*  (2) OR A-section
*
*-------------------------------
drawa
 lda PRECED
 cmp #archtop1
 beq :special
 cmp #panelwif
 beq :needmask
 cmp #panelwof
 beq :needmask
 cmp #pillartop
 beq :needmask
 cmp #block
 bne :nomask

:needmask jsr addamask

:nomask jmp adda

:special ldx objid
 cpx #panelwof
 bne :nomask
 lda #archpanel ;arch ends to L of panel
 jmp adda1

*-------------------------------
addmidezfast
 lda #UseFastlay
 jmp addmidez
add
]add jmp addback ;self-mod

setback lda #addback
 sta ]add+1
 lda #>addback
 sta ]add+2
 rts

setmid lda #addmidezfast
 sta ]add+1
 lda #>addmidezfast
 sta ]add+2
]rts rts

maddfore ldx #mask
 stx OPACITY
 jsr addfore
 ldx #ora
 stx OPACITY
 jmp addfore

addamask ldx objid
 lda maska,x
 beq ]rts
 sta IMAGE
 lda blockxco
 sta XCO
 lda Ay
 sta YCO
 lda #and
 sta OPACITY
 jmp add

adda ldx objid
 jsr getpiecea
 beq ]rts ;nothing here
adda1 sta IMAGE
 lda blockxco
 sta XCO
 lda Ay
 clc
 adc pieceay,x
 sta YCO
 lda #ora
 sta OPACITY
 jmp add

*-------------------------------
*
*  D R A W   M O V A B L E   ' A '
*
*-------------------------------
drawma
 lda objid
 cmp #spikes
 bne :2
 jmp drawspikea

:2 cmp #slicer
 bne :3
 jmp drawslicera

:3 cmp #flask
 bne :4
 jmp drawflaska

:4 cmp #sword
 bne :5
 jmp drawsworda
:5
]rts rts

*-------------------------------
*
* D R A W   M O V A B L E  ' D '
*
*-------------------------------
drawmd
 lda objid
 cmp #loose
 bne :1
 jmp drawloosed

:1
]rts rts
*-------------------------------
*
*  D R A W   F L O O R
*
*-------------------------------
drawfloor
 lda PRECED ;empty space to left?
 bne ]rts
]drawflr
 jsr addamask
 jsr adda
 jsr drawma
 jmp drawd

*-------------------------------
*
*  D R A W   H A L F
*
*  Special version of "drawfloor" for climbup
*
*-------------------------------
drawhalf
 lda PRECED
 bne ]rts

* empty space to left -- mask & draw "A" section

 ldx objid
 cpx #floor
 beq :flr
 cpx #torch
 beq :flr
 cpx #dpressplate
 beq :flr
 cpx #exit
 beq :flr

 lda BGset1
 cmp #1 ;pal?
 bne ]drawflr ;if there's no halfpiece for this objid,
;redraw full floorpiece
 cpx #posts
 beq :post
 cpx #archbot
 bne ]drawflr

:post jsr :sub
 lda #CUpost
 bne :cont

:flr jsr :sub
 lda #CUpiece
:cont sta IMAGE
 lda #ora
 sta OPACITY
 jsr add
 jmp drawd

:sub lda #CUmask
 sta IMAGE
 lda blockxco
 sta XCO
 lda Ay
 sta YCO
 ldx objid
 cpx #dpressplate
 bne :1
 inc YCO ;quick trick for dpressplate
:1 lda #and
 sta OPACITY
 jmp add

*-------------------------------
*
*  S H O R T   W I P E
*
*  In: Y = buffer index
*
*-------------------------------
wipesq
 lda whitebuf,y
]wipe sta height

 lda #4
 sta width

 lda blockxco
 sta XCO

 lda Dy
 sta YCO

 lda #$80
 jmp addwipe
]rts rts

*-------------------------------
*
* Wipe D-section
*
*-------------------------------
wiped
 lda objid
 cmp #pillartop
 beq ]rts
 cmp #panelwif
 beq ]rts
 cmp #panelwof
 beq ]rts
 cmp #block
 beq ]rts

 lda #3
 jmp ]wipe

*-------------------------------
*  D R A W  L O O S E  F L O O R  " D "
*-------------------------------
drawloosed
 lda state
 jsr getloosey

 lda loosed,y
 beq :rts
 sta IMAGE

 lda blockxco
 sta XCO
 lda Dy
 sta YCO

 lda #sta
 sta OPACITY

 jmp add
]rts
:rts rts

*-------------------------------
*  D R A W  L O O S E  F L O O R  " B "
*-------------------------------
drawlooseb
 lda spreced
 jsr getloosey

 lda #looseb
 sta IMAGE

 lda Ay
 clc
 adc looseby,y
 sta YCO

 lda #ora
 sta OPACITY

 jmp add

*-------------------------------
*
* Get piece "A"
*
* In: state; X = objid
* Out: A = A-section image #
*
*-------------------------------
getpiecea
 cpx #loose
 beq :loose

 lda piecea,x
]rts rts

:loose lda state
 jsr getloosey
 lda loosea,y
 rts

*-------------------------------
*
* Get loose floor index
*
* In: A = state
* Out: Y = index
*
*-------------------------------
getloosey
 do EditorDisk
 ldy inbuilder
 beq :1
 ldy #1
 rts
 fin

:1 tay ;state
 bpl ]rts
 and #$7f
 cmp #Ffalling+1
 bcc :ok
 lda #1
:ok tay
]rts rts

*-------------------------------
*  Draw spikes A
*-------------------------------
drawspikea
 ldx state
 bpl :1 ;hibit clear --> frame #
 ldx #spikeExt ;hibit set --> spikes extended
:1 lda spikea,x
 beq ]rts
 sta IMAGE
 lda blockxco
 sta XCO
 lda Ay
 sec
 sbc #1
 sta YCO
 lda #ora
 sta OPACITY
 jmp add

*-------------------------------
*  Draw spikes B
*-------------------------------
drawspikeb
 ldx spreced
 bpl :1 ;hibit clear --> frame #
 ldx #spikeExt ;hibit set --> spikes extended
:1 lda spikeb,x
 beq ]rts
 sta IMAGE
 lda blockxco
 sta XCO
 lda Ay
 sec
 sbc #1
 sta YCO
 lda #ora
 sta OPACITY
 jmp add

*-------------------------------
*  Draw torch B (flame)
*-------------------------------
drawtorchb
 do EditorDisk
 lda inbuilder
 bne ]rts
 fin

 lda blockxco
 beq ]rts ;no flame on leftmost torch
 sta XCO
 lda Ay
 sta YCO
 ldx spreced
 jsr setupflame ;in gamebg
 jmp addback
]rts rts

*-------------------------------
*  Draw flask A (bubbles)
*-------------------------------
drawflaska
 do EditorDisk
 lda inbuilder
 bne ]rts
 fin

 lda blockxco
 sta XCO
 lda Ay
 sta YCO
 ldx state
 jsr setupflask
 lda #UseLay
 jmp addmidezo

*-------------------------------
*  Draw sword A
*-------------------------------
drawsworda
 lda #swordgleam0
 ldx state
 cpx #1
 bne :0
 lda #swordgleam1
:0 sta IMAGE
 lda blockxco
 sta XCO
 lda Ay
 sta YCO
 lda #sta
 sta OPACITY
 jmp add

*-------------------------------
*  Draw slicer A
*-------------------------------
drawslicera
 lda state
 and #$7f
 tax
 cpx #slicerRet
 bcc :1
 ldx #slicerRet ;fully retracted
:1 lda slicerseq,x
 tax
 dex
 stx xsave

 lda blockxco
 sta XCO
 lda Ay
 sta YCO
 lda state ;hibit set = smeared
 bpl :clean
 lda slicerbot2,x
 bne :3
:clean lda slicerbot,x
 beq :2
:3 sta IMAGE
 lda #ora
 sta OPACITY
 jsr add
 ldx xsave

:2 lda slicertop,x
 beq ]rts
 sta IMAGE
 lda Ay
 sec
 sbc slicergap,x
 sta YCO
 lda #ora
 sta OPACITY
 jmp add

*-------------------------------
* Draw slicer front
*-------------------------------
drawslicerf
 lda state
 and #$7f
 tax
 cpx #slicerRet
 bcc :1
 ldx #slicerRet ;fully retracted
:1 lda slicerseq,x
 tax
 dex
 stx xsave

 lda blockxco
 sta XCO
 lda Ay
 sta YCO
 lda slicerfrnt,x
 beq :2
 sta IMAGE
 jmp maddfore
:2
]rts rts

*-------------------------------
* Draw exit "b" (stairs)
*-------------------------------
drawexitb
 lda #stairs
 sta IMAGE

 lda Ay
 sec
 sbc #12
 sta YCO

 lda blockxco
 cmp #36
 bcs ]rts ;can't protrude off R
 clc
 adc #1
 sta XCO

 lda #sta
 sta OPACITY

 lda SCRNUM
 cmp KidStartScrn
 beq :nostairs ;assume it's an entrance
 jsr add
:nostairs

* draw door, bottom to top

 lda Dy
 sec
 sbc #67
 cmp #192
 bcs ]rts
 sta blockthr ;topmost usable line

 lda spreced
 lsr
 lsr
 sta gateposn ;gateposn := spreced/4

 lda Ay
 sec
 sbc #14
 sbc gateposn
 sta doortop ;for CROPCHAR
:loop sta YCO

 lda #doormask
 sta IMAGE
 lda #and
 sta OPACITY
 jsr add

 lda #door
 sta IMAGE
 lda #ora
 sta OPACITY
 jsr add

 lda YCO
 sec
 sbc #4
 cmp blockthr
 bcs :loop

* repair top

 lda Ay
 sec
 sbc #64 ;Technically part of C-section
 cmp #192 ;but who cares
 bcs ]rts

 sta YCO

 lda #toprepair
 sta IMAGE
 lda #sta
 sta OPACITY
 jmp add

]rts rts

*-------------------------------
*  D R A W   G A T E   " C "
*-------------------------------
drawgatec
 lda Dy
 sta YCO
 lda #gatecmask
 sta IMAGE
 lda #and
 sta OPACITY
 jsr add ;mask out triangular area

 ldx colno
 lda SBELOW,x ;gate state
 cmp #gmaxval
 bcc :1
 lda #gmaxval
:1 lsr
 lsr
 sta gateposn
 and #$f8
 eor #$ff
 clc
 adc #1
 clc
 adc gateposn
 tay ;Y:= (state/4) mod 8
 lda gate8c,y
 sta IMAGE

 lda #ora
 sta OPACITY
 jmp add

*-------------------------------
*
*  D R A W   G A T E   " B "
*
*  Lay down (STA) the gate in sections, bottom
*  to top.  The bottom piece has two blank lines that
*  erase its trail as the gate rises.
*  Topmost section has 8 separate shapes, 1-8 pixels high.
*
*-------------------------------
setupdgb
 lda Dy
 sec
 sbc #62
 sta blockthr ;topmost line of B-section

 lda spreced
 cmp #gmaxval
 bcc :1
 lda #gmaxval
:1 lsr
 lsr
 clc
 adc #1
 sta gateposn ;gateposn:= state/4 + 1
;(gatebottom height off floor)
 lda Ay
 sec
 sbc gateposn
 sta gatebot ;gatebottom YCO
]rts rts

*-------------------------------
drawgatebf
 jsr setupdgb

* Gate bottom

 lda #ora
 sta OPACITY

 lda gatebot
 sec
 sbc #2
 sta YCO ;no 2 blank lines at bottom

 lda #gatebotORA
 sta IMAGE

 jsr addfore

* Middle pieces

:cont
 lda #gateB1
 sta IMAGE

 lda gatebot
 sec
 sbc #12

:loop sta YCO
 cmp #192
 bcs ]rts

 sec
 sbc #7 ;grill mid piece is 8 lines high--
 bcc :done ;will it stick up out of block area?
 cmp blockthr
 bcc :done
;no, we're still safe--keep going
 jsr addfore

 lda YCO
 sec
 sbc #8
 bne :loop
:done
 ;Skip top piece to save a little time
]rts rts

*-------------------------------
drawgateb
 jsr setupdgb

*  First, draw bottom piece

 clc
 adc #12
 cmp Ay ;over floor/wall boundary?
 bcc :storit

* Bottom piece is partly below floor line -- STA won't work.
* We need to redraw b.g., then OR gate bottom on top.

:orit
 jsr restorebot

 lda gatebot
 sec
 sbc #2
 sta YCO ;no 2 blank lines at bottom

 lda #gatebotORA
 sta IMAGE

 lda #ora
 sta OPACITY

 jsr addback

 jmp :cont

*  Gate is above floor line -- STA it

:storit lda gatebot
 sta YCO

 lda #gatebotSTA
 sta IMAGE

 lda #sta
 sta OPACITY

 jsr addback

*  Next, draw as many middle pieces as we need to make
*  up rest of grill

:cont
 lda #sta
 sta OPACITY

 lda #gateB1
 sta IMAGE

 lda gatebot
 sec
 sbc #12

:loop sta YCO
 cmp #192
 bcs :rts

 sec
 sbc #7 ;grill mid piece is 8 lines high--
 bcc :done ;will it stick up out of block area?
 cmp blockthr
 bcc :done
;no, we're still safe--keep going
 jsr addback

 lda YCO
 sec
 sbc #8
 bne :loop

* now add final piece at top

:done lda YCO
 sec
 sbc blockthr
 clc
 adc #1 ;desired height (0-8 pixels)

 beq :rts
 cmp #9
 bcs :rts

 tay
 lda gate8b-1,y
 sta IMAGE

 jsr addback

:rts rts

*-------------------------------
restorebot
 ldx #gate
 lda pieceb,x
 sta IMAGE
 lda pieceby,x
 clc
 adc Ay
 sta YCO
 lda blockxco
 sta XCO
 lda #sta
 sta OPACITY
 jsr add

 jsr checkc
 bcc :1
 jsr dodrawc
:1 jmp drawa

*-------------------------------
*
*  Draw object #x
*  (Add appropriate images to mid table)
*
*  In: x = object table index
*
*-------------------------------
drawobjx
 jsr loadobj ;Load vars with object data
;A = object type
 cmp #TypeKid
 beq :kid
 cmp #TypeReflect
 bne :1
:kid jmp DrawKid

:1 cmp #TypeShad
 bne :2
 jmp DrawShad

:2 cmp #TypeFF
 bne :3
 jmp DrawFF

:3 cmp #TypeSword
 beq :5
 cmp #TypeComix
 bne :4
:5 jmp DrawSword

:4 cmp #TypeGd
 bne :6
 jmp DrawGuard
:6
]rts rts

*-------------------------------
* Draw Falling Floor
*-------------------------------
DrawFF
 lda #-1 ;normal
 sta FCharFace

 lda IMAGE ;mobframe #
 sta FCharImage ;use as temp store

* A-section

 lda FCharY
 sec
 sbc #3
 sta YCO
 ldx #floor
 lda maska,x
 sta IMAGE
 lda #and
 sta OPACITY
 lda #UseLayrsave
 jsr addmid

 ldx FCharImage
 lda loosea,x
 sta IMAGE
 lda #ora
 sta OPACITY
 lda #UseLay
 jsr addmid

* D-section

 ldx FCharImage
 lda loosed,x
 sta IMAGE
 lda FCharY
 sta YCO
 lda #sta
 sta OPACITY
 lda #UseLayrsave
 jsr addmid

* B-section

 lda FCharX
 clc
 adc #4
 sta XCO

 lda FCharY
 sec
 sbc #4
 sta YCO

 lda #looseb
 sta IMAGE
 lda #ora
 sta OPACITY
 lda #UseLayrsave
 jmp addmid

*-------------------------------
*
*  Get objid & state
*
*  In: BlueType/Spec,Y
*
*  Out: A = objid
*       state = state
*
*  Preserves X & Y
*
*-------------------------------
getobjid
 lda SCRNUM
 beq GOnull ;null scrn has no blueprint

* Use getobjid1 for screen #s other than SCRNUM

getobjid1
 do EditorDisk
 lda inbuilder
 bne getobjbldr
 fin

 lda (BlueSpec),y
 sta state

 lda (BlueType),y
 and #idmask

 cmp #pressplate
 beq :plate

 cmp #upressplate
 beq :upp

 rts

* Handle depressed pressplate

:plate lda state ;LINKLOC index
 tax
 lda LINKMAP,x

 and #%00011111 ;bits 0-4
 cmp #2
 bcc :up

 lda #dpressplate ;plate depressed
 rts

:up lda #pressplate ;plate up
 rts

* Handle depressed upressplate

:upp lda state
 tax
 lda LINKMAP,x
 and #%00011111
 cmp #2
 bcc :up1

 lda #0
 sta state
 lda #floor ;depressed upp looks just like floor
 rts

:up1 lda #upressplate
 rts

* Null screen is black

GOnull
 do EditorDisk
 lda inmenu
 bne getobjbldr
 fin

 lda #space
 rts

*-------------------------------
*
* In builder: BlueSpec contains initial gadget settings
*
*-------------------------------
 do EditorDisk
getobjbldr
 lda (BlueType),y
 and #idmask
 pha
 jsr getinitobj1
 bcs :ok
 lda (BlueSpec),y
:ok sta state
 pla
 rts
 fin

*-------------------------------
*
*  Sort objects in sort list into back-to-front order
*  (Foremost object should be at bottom of list)
*
*-------------------------------
sortlist

:newpass
 lda #0
 sta switches ;no switches yet this pass

 ldx sortX ;start at bottom of list

:loop cpx #1 ;at top of list?
 beq :attop ;yes--pass complated

 stx xsave

 jsr compare ;Is obj[X] in front of obj[X-1]?

 ldx xsave

 bcc :ok ;Yes--continue
;No--switch objects
 lda sortX,x
 pha
 lda sortX-1,x
 sta sortX,x
 pla
 sta sortX-1,x ;switch [X] with [X-1]

:ok dex
 bne :loop ;move up in list

* At top of list--pass completed

:attop
 lda switches ;Any switches this pass?
 bne :newpass ;Yes--do it again

* No switches made--objects are in order

:rts rts

*-------------------------------
*
*  Compare object [xsave] with object [xsave-1]
*
*  If X is IN FRONT OF X-1, or if it doesn't matter, return cc;
*  If X is BEHIND X-1, return cs (switch 'em).
*
*-------------------------------
compare
 lda sortX,x
 sta obj1 ;obj index [X]
 lda sortX-1,x
 sta obj2 ;obj index [X-1]

 ldx obj1
 ldy obj2

 lda objTYP,x
 cmp #TypeShad
 beq :xinfront ;enemy is always in front

 lda objY,x
 cmp objY,y
 beq :same
 bcc :xinfront
 bcs :yinfront

:same
:xinfront clc
 rts

:yinfront sec
 rts

*-------------------------------
*
*  Get initial state of object
*
*  In: BlueType, BlueSpec, Y
*
*  Return cs if it matters, else cc
*
*-------------------------------
GETINITOBJ
 lda (BlueType),y
 and #idmask ;get objid

getinitobj1
 cmp #gate
 beq :okgate
 cmp #loose
 beq :okloose
 cmp #flask
 beq :okflask
 bne :skip ;if it isn't a gadget, leave it alone

:okgate lda (BlueSpec),y ;1=gate up, 2=gate down, etc.
 tax
 lda initsettings-1,x
 sec
 rts

:okloose lda #0 ;loose floor
 rts

:okflask lda (BlueSpec),y
 asl
 asl
 asl
 asl
 asl ;5x
 sec
 rts

:skip clc
]rts rts

*-------------------------------
metbufs3 jsr mbsub
 iny
metbufs2 jsr mbsub
 iny
mbsub ora redbuf,y
 ora floorbuf,y
 ora halfbuf,y
 ora fredbuf,y
 ora wipebuf,y
 rts

*-------------------------------
 lst
 ds 1
 usr $a9,3,$490,*-org
 lst off


================================================
FILE: 01 POP Source/Source/FRAMEDEF.S
================================================
* framedef
bof = $2800
 tr on ;TABS 15,20,40
 lst off
 lstdo off

*-------------------------------
 dum bof

org ds 1200
altset1 ds 200
altset2 ds 450
swordtab ds 192

 dend

*-------------------------------
 org org
Fdef

*  Fimage, Fsword, Fdx, Fdy, Fcheck

:1 db $01,0,1,0,$c0+4 ;run-4
:2 db $02,0,1,0,$40+4 ;run-5
:3 db $03,0,3,0,$40+7 ;run-6
:4 db $04,0,4,0,$40+8 ;run-7
:5 db $05,0,0,0,$c0+$20+6 ;run-8
:6 db $06,0,0,0,$40+9 ;run-9
:7 db $07,0,0,0,$40+10 ;run-10
:8 db $08,0,0,0,$c0+5 ;run-11
:9 db $09,0,0,0,$40+4 ;run-12
:10 db $0a,0,0,0,$40+7 ;run-13
:11 db $0b,0,0,0,$40+11 ;run-14
:12 db $0c,0,0,0,$40+3 ;run-15
:13 db $0d,0,0,0,$c0+3 ;run-16
:14 db $0e,0,0,0,$40+7 ;run-17
:15 db $0f,9,0,0,$40+3 ;stand
:16 db $10,0,0,0,$c0+3 ;standjump-9
:17 db $11,0,0,0,$40+4 ;standjump-10
:18 db $12,0,0,0,$40+6 ;standjump-11
:19 db $13,0,0,0,$40+8 ;standjump-12
:20 db $14,0,0,0,$80+9 ;standjump-13
:21 db $15,0,0,0,$00+11 ;standjump-14
:22 db $16,0,0,0,$80+11 ;standjump-15
:23 db $17,0,0,0,$00+17 ;standjump-16
:24 db $18,0,0,0,$00+7 ;standjump-17
:25 db $19,0,0,0,$00+5 ;standjump-18
:26 db $1a,0,0,0,$c0+1 ;standjump-19
:27 db $1b,0,0,0,$c0+6 ;standjump-20
:28 db $1c,0,0,0,$40+3 ;standjump-21
:29 db $1d,0,0,0,$40+8 ;standjump-22
:30 db $1e,0,0,0,$40+2 ;standjump-23
:31 db $1f,0,0,0,$40+2 ;standjump-24
:32 db $20,0,0,0,$c0+2 ;standjump-25
:33 db $21,0,0,0,$c0+2 ;standjump-26
:34 db $22,0,0,0,$40+3 ;runjump-1
:35 db $23,0,0,0,$40+8 ;runjump-2
:36 db $24,0,0,0,$c0+14 ;runjump-3
:37 db $25,0,0,0,$c0+1 ;runjump-4
:38 db $26,0,0,0,$40+5 ;runjump-5
:39 db $27,0,0,0,$80+14 ;runjump-6
:40 db $28,0,0,0,$00+11 ;runjump-7
:41 db $29,0,0,0,$80+11 ;runjump-8
:42 db $2a,0,0,0,$80+10 ;runjump-9
:43 db $2b,0,0,0,$00+1 ;runjump-10
:44 db $2c,0,0,0,$c0+4 ;runjump-11
:45 db $2d,0,0,0,$c0+3 ;turn-2
:46 db $2e,0,0,0,$c0+3 ;turn-3
:47 db $2f,0,0,0,$80+$20+5 ;turn-4
:48 db $30,0,0,0,$80+$20+4 ;turn-5
:49 db $31,0,0,0,$40+$20+6 ;turn-6
:50 db $32,0,4,0,$40+$20+7 ;turn-7
:51 db $33,0,3,0,$40+$20+6 ;turn-8
:52 db $34,0,1,0,$40+4 ;turn-10
:53 db $01,$40,0,0,$c0+2 ;runturn-8
:54 db $02,$40,0,0,$40+1 ;runturn-9
:55 db $03,$40,0,0,$40+2 ;runturn-10
:56 db $04,$40,0,0,$00 ;runturn-11
:57 db $05,$40,0,0,$00 ;runturn-12
:58 db $06,$40,0,0,$80 ;runturn-13
:59 db $07,$40,0,0,$00 ;runturn-14
:60 db $08,$40,0,0,$80 ;runturn-15
:61 db $09,$40,0,0,$00 ;runturn-16
:62 db $0a,$40,0,0,$80 ;runturn-17
:63 db $0b,$40,0,0,$00 ;runturn-18
:64 db $0c,$40,0,0,$00 ;runturn-19
:65 db $0d,$40,0,0,$80 ;runturn-20
:66 db 0,0,0,0,0
:67 db $11,$40,-2,0,$40+1 ;jumphang-2
:68 db $12,$40,-2,0,$40+1 ;jumphang-3
:69 db $13,$40,-1,0,$c0+2 ;jumphang-4
:70 db $14,$40,-2,0,$40+2 ;jumphang-5
:71 db $15,$40,-2,0,$40+1 ;jumphang-6
:72 db $16,$40,-2,0,$40+1 ;jumphang-7
:73 db $17,$40,-2,0,$40+1 ;jumphang-8
:74 db $18,$40,-1,0,$00+7 ;jumphang-9
:75 db $19,$40,-1,0,$00+5 ;jumphang-10
:76 db $1a,$40,2,0,$00+7 ;jumphang-11
:77 db $1b,$40,2,0,$00+7 ;jumphang-12
:78 db $1c,$40,2,-3,$00 ;jumphang-13
:79 db $1d,$40,2,-10,$00 ;jumphang-14
:80 db $1e,$40,2,-11,$80 ;jumphang-15
:81 db $1f,$40,3,-2,$40+3 ;hangdrop-4
:82 db $20,$40,3,0,$c0+3 ;hangdrop-5
:83 db $21,$40,3,0,$c0+3 ;hangdrop-6
:84 db $22,$40,3,0,$40+$20+3 ;hangdrop-7
:85 db $23,$40,4,0,$c0+$20+3 ;hangdrop-8
:86 db $1d,0,0,0,$00  ;test w/foot
:87 db $25,$40,7,-14,$80 ;jumphang-22
:88 db $26,$40,7,-12,$80 ;jumphang-23
:89 db $27,$40,4,-12,$00 ;jumphang-24
:90 db $28,$40,3,-10,$80 ;jumphang-25
:91 db $29,$40,2,-10,$80 ;jumphang-26
:92 db $2a,$40,1,-10,$80 ;jumphang-27
:93 db $2b,$40,0,-11,$00 ;jumphang-28
:94 db $2c,$40,-1,-12,$00 ;jumphang-29
:95 db $2d,$40,-1,-14,$00 ;jumphang-30
:96 db $2e,$40,-1,-14,$00 ;jumphang-31
:97 db $2f,$40,-1,-15,$80 ;jumphang-32
:98 db $30,$40,-1,-15,$80 ;jumphang-33
:99 db $31,$40,0,-15,$00 ;jumphang-34
:100 db 0,0,0,0,0
:101 db 0,0,0,0,0
:102 db $32,$40,0,0,$c0+6 ;jumpfall-2
:103 db $33,$40,0,0,$40+6 ;jumpfall-3
:104 db $34,$40,0,0,$c0+5 ;jumpfall-4
:105 db $35,$40,0,0,$40+5 ;jumpfall-5
:106 db $36,$40,0,0,$c0+2 ;jumpfall-6
:107 db $37,$40,0,0,$c0+4 ;jumpfall-7
:108 db $38,$40,0,0,$c0+5 ;jumpfall-8
:109 db $39,$40,0,0,$40+6 ;jumpfall-9
:110 db $3a,$40,0,0,$40+7 ;jumpfall-10
:111 db $3b,$40,0,0,$40+7 ;jumpfall-11
:112 db $3c,$40,0,0,$40+9 ;jumpfall-12
:113 db $3d,$40,0,0,$c0+8 ;jumpfall-13
:114 db $3e,$40,0,0,$c0+9 ;jumpfall-14
:115 db $3f,$40,0,0,$40+9 ;jumpfall-15
:116 db $40,$40,0,0,$40+5 ;jumpfall-16
:117 db $41,$40,2,0,$40+5 ;jumpfall-17
:118 db $42,$40,2,0,$c0+5 ;jumpfall-18
:119 db $43,$40,0,0,$c0+3 ;jumpfall-19
:120 db 0,0,0,0,0
:121 db $01,$80,0,0,$40+3 ;stepfwd-1
:122 db $02,$80,0,0,$c0+4 ;stepfwd-2
:123 db $03,$80,0,0,$c0+5 ;stepfwd-3
:124 db $04,$80,0,0,$40+8 ;stepfwd-4
:125 db $05,$80,0,0,$40+$20+12 ;stepfwd-5
:126 db $06,$80,0,0,$c0+$20+15 ;stepfwd-6
:127 db $07,$80,0,0,$40+$20+3 ;stepfwd-7
:128 db $08,$80,0,0,$c0+3 ;stepfwd-8
:129 db $09,$80,0,0,$40+3 ;stepfwd-9
:130 db $0a,$80,0,0,$40+3 ;stepfwd-10
:131 db $0b,$80,0,0,$40+4 ;stepfwd-11
:132 db $0c,$80,0,0,$40+4 ;stepfwd-12
:133 db $3e,$80,00,1,$c0+1 ;sheathe34
:134 db $3f,$80,00,1,$c0+7 ;sheathe37
:135 db $0d,$80,-5+5,51-63,$00+1 ;climbup-int1
:136 db $0e,$80,-5+5,42-63,$00 ;climbup-int2
:137 db $0f,$80,-4+5,37-63,$80 ;climbup-8
:138 db $10,$80,-1+5,31-63,$80 ;climbup-10
:139 db $11,$80,1+5,27-63,$80+1 ;climbup-14
:140 db $12,$80,2+5,22-63,$80+2 ;climbup-16
:141 db $13,$80,2,17,$40+2 ;climbup-22
:142 db $14,$80,4,9,$c0+4 ;climbup-28
:143 db $15,$80,4,5,$c0+9 ;climbup-30
:144 db $16,$80,4,4,$c0+8 ;climbup-32
:145 db $17,$80,5,0,$40+$20+9 ;climbup-34
:146 db $18,$80,5,0,$c0+$20+9 ;climbup-35
:147 db $19,$80,5,0,$c0+$20+8 ;climbup-36
:148 db $1a,$80,5,0,$40+$20+9 ;climbup-37
:149 db $1b,$80,5,0,$40+$20+9 ;climbup-38
:150 db $8b,16,0,2,$80 ;missed block
:151 db $81,26,0,2,$80
:152 db $82,18,3,2,$00 ;guy4/rob20
:153 db $83,22,7,2,$c0+4
:154 db $84,21,10,2,$00 ;full ext.
:155 db $85,23,7,2,$80 ;guy-7
:156 db $86,25,4,2,$80 ;guy-8
:157 db $87,24,0,2,$c0+14 ;guy-9
:158 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)
:159 db $89,20,3,2,$00 ;guy19/rob22
:160 db $8a,31,3,2,$00 ;guy20/rob23
:161 db $8b,16,0,2,$80 ;guy21/rob18 (blocking)
:162 db $8c,17,0,2,$80 ;guy22/rob19 (block-to-strike)
:163 db $8d,32,0,2,$00 ;guy-31 (advance)
:164 db $8e,33,0,2,$80 ;guy-32
:165 db $8f,34,2,2,$c0+3 ;guy-33
:166 db $0f,0,0,0,$40+3 ;stand
:167 db $91,19,7,2,$80 ;guy18/rob21 (blocked)
:168 db $92,14,1,2,$80 ;pre-strike
:169 db $93,27,0,2,$80 ;rob17 (begin block)
:170 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)
:171 db $88,15,0,2,$c0+13 ;guy10/rob15 (ready)
:172 db $32,$40+43,0,0,$c0+6 ;jumpfall-2
:173 db $33,$40+44,0,0,$40+6 ;jumpfall-3
:174 db $34,$40+45,0,0,$c0+5 ;jumpfall-4
:175 db $35,$40+46,0,0,$40+5 ;jumpfall-5
:176 db $34,$40,0,0,$c0+5
:177 db $0f,$40,0,3,$80+10 ;impaled
:178 db $0e,$40,4,3,$80+7 ;halves
:179 db $a8,0,0,1,$40+4 ;collapse15
:180 db $a9,0,0,1,$40+4 ;collapse16
:181 db $aa,0,0,1,$40+4 ;collapse17
:182 db $ab,0,0,1,$40+7 ;collapse18
:183 db $ac,0,0,7,$40+11 ;collapse19
:184 db 0,0,0,0,0
:185 db $10,$40,4,7,$40+9 ;dead
:186 db $44,$40,0,0,$40+4 ;mouse-1
:187 db $45,$40,0,0,$40+4 ;mouse-2
:188 db $46,$40,0,2,$40+4 ;mouse crouch
:189 db 0,0,0,0,0
:190 db 0,0,0,0,0
:191 db $94,0,0,0,$00 ;drink4
:192 db $95,0,0,1,$00 ;drink5
:193 db $96,0,0,0,$80 ;drink6
:194 db $97,0,0,0,$00 ;drink7
:195 db $98,0,-1,0,$00 ;drink8
:196 db $99,0,-1,0,$00 ;drink9
:197 db $9a,0,-1,0,$00 ;drink10
:198 db $9b,0,-4,0,$00 ;drink11
:199 db $9c,0,-4,0,$80 ;drink12
:200 db $9d,0,-4,0,$00 ;drink13
:201 db $9e,0,-4,0,$00 ;drink14
:202 db $9f,0,-4,0,$00 ;drink15
:203 db $a0,0,-4,0,$00 ;drink16
:204 db $a1,0,-5,0,$00 ;drink17
:205 db $a2,0,-5,0,$00 ;drink18
:206 db $a3,0,0,0,0 ;unused
:207 db $a4,0,0,1,$40+6 ;draw5
:208 db $a5,0,0,1,$c0+6 ;draw6
:209 db $a6,0,0,1,$c0+8 ;draw7
:210 db $a7,0,0,1,$40+10 ;draw8
:211 db 0,0,0,0,$00
:212 db 0,0,0,0,$00
:213 db 0,0,0,0,$00
:214 db 0,0,0,0,$00
:215 db 0,0,0,0,$00
:216 db 0,0,0,0,$00
:217 db $35,0,0,0,$80 ;climbst2
:218 db $36,0,0,0,$00 ;climbst3
:219 db $37,0,0,0,$00 ;climbst4
:220 db $38,0,0,0,$00 ;climbst5
:221 db $39,0,0,0,$80 ;climbst6
:222 db $3a,0,0,0,$00 ;climbst7
:223 db $3b,0,0,0,$00 ;climbst8
:224 db $3c,0,0,0,$00 ;climbst9
:225 db $3d,0,0,0,$80 ;climbst10
:226 db $3e,0,0,0,$00 ;climbst11
:227 db $3f,0,0,0,$80 ;climbst12
:228 db $40,0,0,0,$00 ;climbst13
:229 db $32,$80+35,1,1,$c0+3 ;sheathe22
:230 db $33,$80+36,0,1,$40+9 ;sheathe23
:231 db $34,$80+37,0,1,$c0+3 ;sheathe24
:232 db $35,$80+38,0,1,$40+9 ;sheathe25
:233 db $36,$80+39,0,1,$c0+3 ;sheathe26
:234 db $37,$80+40,1,1,$40+9 ;sheathe27
:235 db $38,$80+41,1,1,$40+3 ;sheathe28
:236 db $39,$80+42,1,1,$c0+9 ;sheathe29
:237 db $3a,$80,4,1,$c0+6 ;sheathe30
:238 db $3b,$80,3,1,$c0+10 ;sheathe31
:239 db $3c,$80,1,1,$40+3 ;sheathe32
:240 db $3d,$80,1,1,$c0+8 ;sheathe33 (-->133)

*-------------------------------
*
*  Alternate character set 1 (chtable4)
*
*  200 bytes allocated -- 40 frames (150-189)
*
*  Frame def list shows kid, sword in RIGHT hand
*  Altset1 shows enemy, sword in LEFT hand (to be mirrored)
*  (Image tables always show character facing LEFT)
*
*-------------------------------
 ds altset1-*

ALTSET1

:150 db $0b,$c0+13,2,1,$00 ;missed block
:151 db $01,$c0+1,3,1,$00 ;guy-3
:152 db $02,$c0+2,4,1,$00 ;guy-4
:153 db $03,$c0+3,7,1,$40+4 ;guy-5
:154 db $04,$c0+4,10,1,$00 ;guy-6 (full ext)
:155 db $05,$c0+5,7,1,$80 ;guy-7
:156 db $06,$c0+6,4,1,$80 ;guy-8
:157 db $07,$c0+7,0,1,$80 ;guy-9
:158 db $08,$c0+8,0,1,$c0+13 ;guy-10 (ready)
:159 db $09,$c0+11,7,1,$80 ;guy-19
:160 db $0a,$c0+12,3,1,$00 ;guy-20
:161 db $0b,$c0+13,2,1,$00 ;guy-21 (blocking)
:162 db $0c,$c0,2,1,$00 ;guy-22
:163 db $0d,$c0+28,0,1,$00 ;guy-31 (advance)
:164 db $0e,$c0+29,0,1,$80 ;guy-32
:165 db $0f,$c0+30,2,1,$c0+3 ;guy-33
:166 db $10,$c0+9,-1,1,$40+8 ;alertstand
:167 db $11,$c0+10,7,1,$80 ;guy-18 (blocked)
:168 db $12,$c0+14,3,1,$80 ;guy-15
:169 db $08,$c0+8,0,1,$80 ;?? (ready-->block)
:170 db $13,$c0+8,0,1,$c0+13 ;guy-11/12 (ready)
:171 db $14,$c0+8,0,1,$c0+13 ;guy-13/14 (ready)
:172 db $15,$c0+47,0,0,$c0+6 ;jumpfall-2 (stabbed)
:173 db $16,$c0+48,0,0,$40+6 ;jumpfall-3
:174 db $17,$c0+49,0,0,$c0+5 ;jumpfall-4
:175 db $17,$c0+49,0,0,$c0+5 ;for jumpfall-5
:176 db $17,$c0+49,0,0,$c0+5 ;for jumpfall-6
:177 db $19,$c0,0,3,$80+10 ;impaled
:178 db $1a,$c0,4,4,$80+7 ;halves
:179 db $1b,$c0,-2,1,$40+4 ;collapse15
:180 db $1c,$c0,-2,1,$40+4 ;collapse16
:181 db $1d,$c0,-2,1,$40+4 ;collapse17
:182 db $1e,$c0,-2,2,$40+7 ;collapse18
:183 db $1f,$c0,-2,2,$40+10 ;collapse19
:184 db 0,0,0,0,0
:185 db $20,$c0,3,4,$c0+9 ;dead
:186 db 0,0,0,0,0
:187 db 0,0,0,0,0
:188 db 0,0,0,0,0
:189 db 0,0,0,0,0

*-------------------------------
*
*  Alternate character set 2 (chtable6)
*
*  (450 bytes allocated -- 90 frames)
*
*-------------------------------
 ds altset2-*

ALTSET2

:1 db $8a,$40,0,0,$00 ;pslump-1
:2 db $9a,$40,0,0,$80 ;pturn-4
:3 db $9b,$40,0,0,$80 ;pturn-5
:4 db $9c,$40,0,0,$80 ;pturn-6
:5 db $9d,$40,-1,0,$00 ;pturn-7
:6 db $9e,$40,2,0,$80 ;pturn-8
:7 db $9f,$40,2,0,$00 ;pturn-9
:8 db $a0,$40,0,0,$80 ;pturn-10
:9 db $a1,$40,1,0,$80 ;pturn-11
:10 db $a2,$40,2,0,$80 ;unused
:11 db $99,$40,0,0,$80 ;pturn-15 (stand)
:12 db $a3,$40,0,0,$80 ;pback-3
:13 db $a4,$40,0,0,$00 ;pback-5
:14 db $a5,$40,0,0,$80 ;pback-7
:15 db $a6,$40,0,0,$80 ;pback-9
:16 db $a7,$40,0,0,$80 ;pback-11
:17 db $a8,$40,0,0,$00 ;pback-13 (stand)
:18 db $8b,$40,0,0,$00 ;pslump-1
:19 db $a9,$40,0,0,$00 ;plie
:20 db $ad,$40,0,0,$00 ;embrace-1
:21 db $ae,$40,0,0,$00 ;embrace-2
:22 db $af,$40,0,0,$80 ;embrace-3
:23 db $b0,$40,0,0,$00 ;embrace-4
:24 db $b1,$40,0,0,$80 ;embrace-5
:25 db $b2,$40,0,0,$80 ;embrace-6
:26 db $b3,$40,0,0,$00 ;embrace-7
:27 db $b4,$40,0,0,$00 ;embrace-8
:28 db $b5,$40,0,0,$00 ;embrace-9
:29 db $b6,$40,0,0,$00 ;embrace-10
:30 db $b7,$40,0,0,$00 ;embrace-11
:31 db $b8,$40,0,0,$00 ;embrace-12
:32 db $b9,$40,0,0,$00 ;embrace-13
:33 db $ba,$40,0,0,$00 ;embrace-14
:34 db $bb,$40,0,0,$00 ;prise-1
:35 db $bc,$40,0,0,$00 ;prise-2
:36 db $bd,$40,0,0,$00 ;prise-3
:37 db $be,$40,0,0,$00 ;prise-4
:38 db $bf,$40,0,0,$80 ;prise-5
:39 db $bf,$40,0,0,$80 ;prise-6
:40 db $c1,$40,1,0,$00 ;prise-7
:41 db $c2,$40,-1,0,$00 ;prise-8
:42 db $c3,$40,2,0,$00 ;prise-9
:43 db $c4,$40,1,0,$80 ;prise-10
:44 db $c5,$40,0,0,$80 ;prise-11
:45 db $c6,$40,0,0,$80 ;prise-12
:46 db $c7,$40,0,0,$80 ;prise-13
:47 db $c8,$40,-1,0,$00 ;prise-14
:48 db $ca,$40,0,0,$80 ;vwalk-8
:49 db $cb,$40,0,0,$80 ;vwalk-9
:50 db $cc,$40,0,0,$80 ;vwalk-10
:51 db $cd,$40,0,0,$00 ;vwalk-11
:52 db $ce,$40,0,0,$00 ;vwalk-12
:53 db $cf,$40,0,0,$80 ;vwalk-13
:54 db $d0,$40,0,0,$80 ;vstand-3
:55 db $d1,$40,0,0,$80 ;vstand-2
:56 db $d2,$40,0,0,$80 ;vstand-1
:57 db $d3,$40,0,0,$80 ;vturn-5
:58 db $d4,$40,0,0,$80 ;vturn-6
:59 db $d5,$40,0,0,$80 ;vturn-7
:60 db $d6,$40,0,0,$80 ;vturn-8
:61 db $d7,$40,0,0,$00 ;vturn-9
:62 db $d8,$40,0,0,$80 ;vturn-10
:63 db $d9,$40,0,0,$00 ;vturn-11
:64 db $da,$40,0,0,$00 ;vturn-12
:65 db $db,$40,0,0,$80 ;vturn-13
:66 db $dc,$40,0,0,$00 ;vturn-14
:67 db $dd,$40,3,0,$00 ;vcast-2
:68 db $de,$40,3,0,$00 ;vcast-3
:69 db $df,$40,3,0,$00 ;vcast-4
:70 db $e0,$40,2,0,$00 ;vcast-5
:71 db $e1,$40,3,0,$80 ;vcast-6
:72 db $e2,$40,5,0,$00 ;vcast-7
:73 db $e3,$40,5,0,$00 ;vcast-8
:74 db $e4,$40,1,0,$80 ;vcast-9
:75 db $e5,$40,2,0,$80 ;vcast-10
:76 db $e6,$40,2,0,$80 ;vcast-11 (held)
:77 db $e7,$40,1,0,$80 ;vcast-13
:78 db $81,$80,1,0,$00 ;vcast-14
:79 db $82,$80,2,0,$00 ;vcast-15
:80 db $83,$80,3,0,$00 ;vcast-16
:81 db $84,$80,3,0,$00 ;vcast-17
:82 db $85,$80,0,0,$80 ;vcast-18
:83 db $86,$80,2,0,$80 ;vcast-10a
:84 db $87,$80,2,0,$80 ;vcast-10b
:85 db $88,$80,1,0,$00 ;vcast-1


*-------------------------------
*
*  S W O R D   T A B L E
*
*  (192 bytes allocated -- 64 swords)
*
*  Sword images are taken from chtable3
*
*-------------------------------
 ds swordtab-*

SWORDTAB

* (Image, DX, DY)

:1 db $1d,0,-9
:2 db $22,-9,-29
:3 db $1e,7,-25
:4 db $1f,17,-26
:5 db $23,7,-14
:6 db $24,0,-5
:7 db $20,17,-16
:8 db $21,16,-19
:9 db $4b,12,-9 ;alertstand
:10 db $26,13,-34
:11 db $27,7,-25
:12 db $28,10,-16
:13 db $29,10,-11
:14 db $2a,22,-21
:15 db $2b,28,-23
:16 db $2c,13,-35
:17 db $2d,0,-38
:18 db $2e,0,-29
:19 db $2f,21,-19
:20 db $30,14,-23
:21 db $31,21,-22
:22 db $31,22,-23
:23 db $2f,7,-13
:24 db $2f,15,-18 ;$20,17,-19 for flash
:25 db $24,0,-8
:26 db $1e,7,-27
:27 db $48,14,-28
:28 db $26,7,-27
:29 db $21,6,-23
:30 db $21,9,-21
:31 db $28,11,-18
:32 db $2b,24,-23
:33 db $2b,19,-23
:34 db $2b,21,-23
;sheathing
:35 db $40,7,-32
:36 db $41,14,-32
:37 db $42,14,-31
:38 db $43,14,-29
:39 db $44,28,-28
:40 db $45,28,-28
:41 db $46,21,-25
:42 db $47,14,-22

:43 db 0,14,-25 ;43-46: kid stabbed
:44 db 0,21,-25
:45 db $4a,0,-16
:46 db $26,8,-37
:47 db $4c,14,-24 ;47-50: enemy stabbed
:48 db $4d,14,-24
:49 db $4e,7,-14
:50 db $26,8,-37

*-------------------------------
 lst
 ds 1
 usr $a9,15,$00,*-org
 lst off


================================================
FILE: 01 POP Source/Source/GAMEBG.S
================================================
* gamebg
ThreeFive = 1
EditorDisk = 0
org = $4c00
 tr on
 lst off
 lstdo off
*-------------------------------
*
*  PRINCE OF PERSIA
*  Copyright 1989 Jordan Mechner
*
*-------------------------------
 org org

 jmp UPDATEMETERS
 jmp DRAWKIDMETER
 jmp DRAWSWORD
 jmp DRAWKID
 jmp DRAWSHAD

 jmp SETUPFLAME
 jmp CONTINUEMSG
 jmp ADDCHAROBJ
 jmp SETOBJINDX
 jmp PRINTLEVEL

 jmp DRAWOPPMETER
 jmp FLIPDISKMSG
 jmp TIMELEFTMSG
 jmp DRAWGUARD
 jmp DRAWGUARD

 jmp SETUPFLASK
 jmp SETUPCOMIX
 jmp PSETUPFLAME
 jmp DRAWPOST
 jmp DRAWGLASS

 jmp INITLAY
 jmp TWINKLE
 jmp FLOW
 jmp PMASK
 jmp YELLOW

 jmp SETRECHECK0
 jmp RECHECKYEL
 ds 3
 ds 3
 ds 3

*-------------------------------
 lst
 put eq
 lst
 put gameeq
 lst off

*-------------------------------
*
* 2nd level copy protection
* signature check routine
*
*-------------------------------
 do ThreeFive
YELLOW lda #$80
 sta yellowflag
 rts

 else
 put ryellow1
 fin

*-------------------------------
 lst
 put movedata
 lst off

*-------------------------------
 dum locals

xsave ds 1
addr ds 2
temp ds 1

 dend

tempsave ds $10

*-------------------------------
* Strength meters

KidStrX db 00,01,02,03,04,05,06,08,09,10,11,12
KidStrOFF db 00,01,02,03,04,05,06,00,01,02,03,04

OppStrX db 39,38,37,36,35,34,32,31,30,29,28,27
OppStrOFF db 05,04,03,02,01,00,06,05,04,03,02,01

bullet = $88 ;in bgtable2
blank = $8c
bline hex 89,8a,8b

*-------------------------------
* Post in Princess's room

postx = 31
posty = 152
postimg = $c ;chtable6

*-------------------------------
* Stars outside Princess's window

starx = 2
stary hex 62,65,6d,72
stari hex 2a,2b,2b,2a ;chtable6

*-------------------------------
* Hourglass

glassx = 19
glassy = 151
glassimg hex 15,0d,0e,0f,10,11,12,13,14 ;chtable6
sandht db 0,1,2,3,4,5,6,7

flowx = glassx+1
flowy = glassy-2
flowimg hex 16,17,18 ;chtable6

*-------------------------------
* Masks for Princess's face & hair

pmaskdx hex 00,00
pmaskdy db -4,-33
pmaski hex 2c,22

*-------------------------------
* Comix

starimage = $41
startable = 0 ;chtable1

*-------------------------------
* Torch animation frames
*               0  1  2  3  4  5  6  7  8  9 10 11
*              12 13 14 15 16 17

torchflame hex 52,53,54,55,56,61,62,63,64,52,54,56
 hex 63,61,55,53,64,62

ptorchflame db 1,2,3,4,5,6,7,8,9,3,5,7,1,4,9,2,8,6

*-------------------------------
* Bubbling flask frames
*               0  1  2  3  4  5  6  7  8  9 10 11

bubble hex b2,af,b0,b1,b0,af,b1,b0,af

*-------------------------------
* Message data: YCO, XCO, OFFSET, IMAGE

my = 90
lowmy = 153
hiconty = 73
lowconty = 168

contbox db hiconty,13,0,$7c ;Press button to continue
msgbox db my,15,0,$7b ;Empty message box
levelmsg db my-5,16,3,$7a ;"Level"
flipbox db my-1,13,0,$7e ;Turn disk over
timeleft db my,11,0,$7d ;Minutes left
seconds db my-5,14,0,$7f ;"Seconds"

*-------------------------------
* Numbers (0-12)

digit1 hex 00,00,00,00,00,00,00,00,00,00
 hex 71,71,71

digit2 hex 70,71,72,73,74,75,76,77,78,79
 hex 70,71,72

*-------------------------------
* Print "XX Minutes Left"
*-------------------------------
]rts rts

TIMELEFTMSG
 lda #timeleft
 ldx #>timeleft
 jsr setupimage

 lda MinLeft
 cmp #2
 bcs :ok
 lda KidAction
 cmp #3
 beq :ok
 cmp #4
 beq :ok ;falling
 lda KidBlockY
 cmp #1
 bne :ok
 lda #lowmy
 sta YCO ;keep msg box out of kid's way
:ok jsr superim1

 lda YCO
 sec
 sbc #5
 sta YCO

 lda XCO
 clc
 adc #1
 sta XCO
 lda #0
 sta OPACITY

 lda #ora
 sta OPACITY

 jsr getminleft

 lda MinLeft ;BCD byte (e.g., $55 = 55 minutes)
 cmp #2
 bcs :1
 lda SecLeft
:1 sta temp
 lsr
 lsr
 lsr
 lsr
 beq :skip1st
 tax
 lda digit2,x ;1st digit
 sta IMAGE

 jsr addmsg

:skip1st lda XCO
 clc
 adc #1
 sta XCO

 lda temp
 and #$f
 tax
 lda digit2,x ;2nd digit
 sta IMAGE

 jsr addmsg

* Minutes or seconds?

 lda MinLeft
 cmp #2
 bcs ]rts

 lda YCO
 pha
 lda #seconds
 ldx #>seconds
 jsr setupimage
 pla
 sta YCO
 lda #sta
 sta OPACITY
 jmp addmsg ;replace "minutes" with "seconds"

*-------------------------------
* Print "Level XX"
*-------------------------------
]rts rts

PRINTLEVEL
 lda #msgbox
 ldx #>msgbox
 jsr superimage

 lda #levelmsg
 ldx #>levelmsg
 jsr setupimage

 jsr getlevelno
 cpx #10
 bcc :1
 lda #0
 sta OFFSET
:1
 lda #ora
 sta OPACITY
 jsr addmsg

 lda XCO
 clc
 adc #6
 sta XCO

 jsr getlevelno ;X = level # (0-12)
 lda digit1,x ;1st digit
 beq :skip1st
 sta IMAGE

 lda #ora
 sta OPACITY
 jsr addmsg

 lda XCO
 clc
 adc #1
 sta XCO

 jsr getlevelno
:skip1st lda digit2,x ;2nd digit
 sta IMAGE

 lda #ora
 sta OPACITY
 jmp addmsg

*-------------------------------
getlevelno
 ldx level
 cpx #13
 bcc :ok
 ldx #12
:ok
]rts rts

*-------------------------------
* Superimpose "Press button to continue" message
*-------------------------------
CONTINUEMSG
 lda #contbox
 ldx #>contbox
 jsr setupimage

 lda KidBlockX
 and #1
 bne :1
 lda #lowconty
 sta YCO
:1 jmp superim1

*-------------------------------
* Superimpose "Turn disk over" message
*-------------------------------
FLIPDISKMSG
 lda #flipbox
 ldx #>flipbox
 jmp superimage

*-------------------------------
* Superimpose image (using layrsave)
*-------------------------------
superimage
 jsr setupimage
superim1
 lda #sta.$40
 sta OPACITY
 jmp addmsg

*-------------------------------
* Set up image
*
* In: A-X = image data addr
* Out: XCO, YCO, IMAGE
*-------------------------------
setupimage
 sta addr
 stx addr+1

 ldy #0
 lda (addr),y
 sta YCO
 iny
 lda (addr),y
 sta XCO
 iny
 lda (addr),y
 sta OFFSET
 iny
 lda (addr),y
 sta IMAGE
]rts
:rts rts

*-------------------------------
* Draw Kid
*-------------------------------
DRAWKID
 lda backtolife
 beq :2
 lda PAGE
 beq ]rts ;flash when coming back to life

:2 lda mergetimer
 bmi :1
 and #1
 beq :1
 jmp DrawEored ;flash between kid & shadowman

:1 jmp DrawNormal

*-------------------------------
* Draw Sword
*-------------------------------
DRAWSWORD
 jmp DrawNormal

*-------------------------------
* Draw Shadowman
*-------------------------------
DRAWSHAD
 jmp DrawEored

*-------------------------------
* Draw Guard
*-------------------------------
DRAWGUARD
 do EditorDisk
 lda #EditorDisk
 cmp #2
 beq DrawNormal
 fin

 lda GuardColor ;set by "ADDGUARD" in AUTO
 beq DrawNormal
 bne DrawShifted

*-------------------------------
DrawNormal
 lda #mask
 sta OPACITY

 lda #UseLayrsave.$80
 jmp addmid

]rts rts

*-------------------------------
DrawShifted
 lda #1
 jsr chgoffset

 lda #mask
 sta OPACITY

 lda #UseLayrsave.$80
 jmp addmid

*-------------------------------
DrawEored
 lda #eor
 sta OPACITY

 lda #UseLayrsave.$80
 jmp addmid

*-------------------------------
chgoffset
 clc
 adc OFFSET
 cmp #7
 bcc :1

 inc XCO
 sec
 sbc #7

:1 sta OFFSET
 rts

*-------------------------------
*
* Update strength meters
*
*-------------------------------
UPDATEMETERS
 lda redkidmeter
 beq :1

 jsr DrawKidMeter

:1 lda redoppmeter
 beq ]rts

 jmp DrawOppMeter
]rts rts

*-------------------------------
*
* Draw kid's strength meter at lower left
*
*-------------------------------
DRAWKIDMETER
 lda inbuilder
 bne ]rts

 lda #191
 sta YCO
 lda #sta
 sta OPACITY

 ldx #0
 stx xsave ;# of bullets drawn so far

:loop lda KidStrength
 sec
 sbc xsave ;# of bullets left to draw
 beq :darkpart
 cmp #4
 bcs :draw3
 cmp #3
 bcs :draw2
 cmp #2
 bcc :drawlast
;Draw 1 bullet
:draw1 ldy #1
 bne :drline
 ;Draw 2 bullets
:draw2 ldy #2
 bne :drline
;Draw 3 bullets
:draw3 ldy #3
 bne :drline

:drawlast lda KidStrength
 cmp #2
 bcs :steady
 lda PAGE
 beq :skip ;flashes when down to 1
:steady lda #bullet
 ldy #1
 jsr :draw
:skip jmp :darkpart

* Draw line of 1-3 bullets

:drline lda bline-1,y ;image #
 jsr :draw
 jmp :loop

:draw sta IMAGE
 ldx xsave
 tya
 clc
 adc xsave
 sta xsave

* In: IMAGE; x = unit # (0 = leftmost)

:drawimg lda KidStrX,x
 sta XCO
 lda KidStrOFF,x
 sta OFFSET
 jmp addmsg

* Draw blanks to limit of MaxKidStr

:darkpart
 lda #and
 sta OPACITY
 lda #blank
 sta IMAGE
:dloop ldx xsave
 cpx MaxKidStr
 bcs ]rts
 jsr :drawimg
 inc xsave
 bne :dloop
]rts rts

*-------------------------------
*
* Draw opp's strength meter at lower right
*
*-------------------------------
DRAWOPPMETER
 lda inbuilder
 bne ]rts

 lda OppStrength
 beq ]rts

 lda ShadID
 cmp #24 ;mouse
 beq ]rts
 cmp #4 ;skel
 beq ]rts
 cmp #1 ;shadow
 bne :1
 lda level
 cmp #12
 bne ]rts ;shad strength shows only on level 12
:1
 lda #191
 sta YCO
 lda #sta.$80 ;mirror
 sta OPACITY

 ldx #0
 stx xsave ;# of bullets drawn so far

:loop lda OppStrength
 sec
 sbc xsave ;# of bullets left to draw
 beq :darkpart
 cmp #4
 bcs :draw3
 cmp #3
 bcs :draw2
 cmp #2
 bcc :drawlast
;Draw 1 bullet
:draw1 ldy #1
 bne :drline
 ;Draw 2 bullets
:draw2 ldy #2
 bne :drline
;Draw 3 bullets
:draw3 ldy #3
 bne :drline

:drawlast lda OppStrength
 cmp #2
 bcs :steady
 lda PAGE
 beq :darkpart ;flashes when down to 1
:steady lda #bullet
 ldy #1
 jmp :draw

* Draw line of 1-3 bullets

:drline lda bline-1,y ;image #
 jsr :draw
 jmp :loop

:draw sta IMAGE
 ldx xsave
 tya
 clc
 adc xsave
 sta xsave

:drawimg lda OppStrX,x
 sta XCO
 lda OppStrOFF,x
 sta OFFSET
 jmp addmsg

:darkpart
 lda #and.$80
 sta OPACITY
 lda #blank
 sta IMAGE
 ldx xsave
 jmp :drawimg

*-------------------------------
*
* Set up to draw bubbling flask
*
* In/out: same as SETUPFLAME
*
*-------------------------------
EmptyPot = 0
RefreshPot = %00100000
BoostPot = %01000000
MystPot = %01100000

boffset = 2

SETUPFLASK
 lda #boffset
 sta OFFSET

 txa
 and #%11100000
 cmp #EmptyPot
 beq :0
 cmp #BoostPot
 beq :tall ;special flask (taller)
 bcc :cont

 inc OFFSET ;mystery potion (blue)

:tall lda YCO
 sec
 sbc #4
 sta YCO

:cont txa
 and #%00011111
 tax
 cpx #bubbLast+1
 bcc :ok
 ldx #0
:ok lda bubble,x
 sta IMAGE

 inc XCO
 inc XCO

 lda YCO
 sec
 sbc #14
 sta YCO

 lda #sta
 sta OPACITY

 lda #bgtable2
 sta TABLE
 lda #>bgtable2
 sta TABLE+1

]rts rts

:0 ldx #0
 beq :ok

*-------------------------------
*
* Setup to draw flame
*
* In: XCO = blockxco
*     YCO = Ay
*     X   = spreced
*
* Out: ready to call ADDBACK (or FASTLAY)
*
*-------------------------------
SETUPFLAME
 cpx #torchLast+1
 bcs ]rts

 lda torchflame,x
 sta IMAGE

 inc XCO

 lda YCO
 sec
 sbc #43
 sta YCO

 lda #sta
 sta OPACITY

 lda #bgtable1
 sta TABLE
 lda #>bgtable1
 sta TABLE+1

]rts rts

*-------------------------------
*
* Setup to draw flame (Princess's room)
*
* In: XCO, YCO; X = frame #
* Out: Ready to call ADDMID or LAY
*
*-------------------------------
PSETUPFLAME
 cpx #torchLast+1
 bcs ]rts

 lda ptorchflame,x
 sta IMAGE

 lda #sta
 sta OPACITY

 jsr initlay

]setch6 lda #chtable6
 sta TABLE
 lda #>chtable6
 sta TABLE+1

]rts rts

*-------------------------------
*
* Twinkle one of the stars outside Princess's window
* (Update it directly on both screens)
*
* In: X = star # (0-3)
*
*-------------------------------
TWINKLE
 lda #starx
 sta XCO
 lda stary,x
 sta YCO
 lda stari,x
 sta IMAGE
 lda #eor
 sta OPACITY
 jsr ]setch6
 jsr fastlay ;<--DIRECT HIRES CALL
 lda PAGE
 eor #$20
 sta PAGE ;& on other page
 jsr fastlay
 lda PAGE
 eor #$20
 sta PAGE
 rts

*-------------------------------
*
* Draw big white post in Princess's room
*
*-------------------------------
DRAWPOST
 lda #postx
 sta XCO
 lda #posty
 sta YCO
 lda #postimg
 sta IMAGE
 lda #ora
 sta OPACITY
 jsr ]setch6
 jmp addfore

*-------------------------------
*
* Draw hourglass in Princess's room
*
* In: X = glass state (0-8, 0 = full)
*
*-------------------------------
DRAWGLASS
 lda #glassx
 sta XCO
 lda #glassy
 sta YCO
 lda glassimg,x
 sta IMAGE
 lda #sta
 sta OPACITY
 jsr ]setch6
 jmp addback

*-------------------------------
*
* Mask princess's face & hair for certain CharPosns
*
* (Called after ADDCHAROBJ)
*
*-------------------------------
PMASK
 ldx CharPosn
 cpx #19 ;plie
 bne :1
 ldx #0
 bpl :mask
:1 cpx #1 ;pslump-1
 beq :m1
 cpx #18 ;pslump-2
 bne :2
:m1 ldx #1
 bpl :mask
:2

]rts rts

:mask
 lda FCharY
 clc
 adc pmaskdy,x
 sta YCO

 lda XCO
 clc
 adc pmaskdx,x
 sta XCO

 lda pmaski,x
 sta IMAGE

 lda #5 ;chtable6
 sta TABLE

 lda #and
 sta OPACITY
 lda #UseLayrsave.$80
 jmp addmid

*-------------------------------
* If failed copy prot check due to disk not in drive, recheck
* In: a = 0 (Call after setrecheck0)
*-------------------------------
RECHECKYEL
 sta tempblockx
 sta tempblocky
 jsr indexblock ;set y = 0
 lda (locals),y ;All of this just to hide "lda recheck0"!
 beq ]rts
 ldx #5
 jsr yellow
 lda #$ff
 rts

*-------------------------------
*
* Draw sand flowing through hourglass
*
* In: X = frame # (0-3)
*     Y = hourglass state (0-8)
*
*-------------------------------
FLOW
 cpy #8
 bcs ]rts ;glass is empty
 jsr initlay
 lda #glassy
 sec
 sbc sandht,y
 sta BOTCUT
 lda flowimg,x
 sta IMAGE
 lda #flowx
 sta XCO
 lda #0
 sta OFFSET
 lda #flowy
 sta YCO
 lda #sta
 sta OPACITY
 jsr ]setch6
 jmp lay ;<---DIRECT HIRES CALL

*-------------------------------
* Save/restore FCharVars

saveFChar
 ldx #$f
:loop lda FCharVars,x
 sta tempsave,x
 dex
 bpl :loop
 rts

restoreFChar
 ldx #$f
:loop lda tempsave,x
 sta FCharVars,x
 dex
 bpl :loop
]rts rts

*-------------------------------
*
* Draw "comix" star
*
* In: Char data
*
*-------------------------------
SETUPCOMIX
 jsr saveFChar
 jsr :sub
 jmp restoreFChar

:sub lda #$ff
 sta FCharIndex

* Get y-coord

 lda CharPosn
 cmp #185 ;dead
 beq :low
 cmp #177 ;impaled
 beq :imp
 cmp #106
 bcc :80
 cmp #111 ;crouching
 bcc :low
:80 cmp #178 ;halved
 beq ]rts

 lda #-15
 ldx CharID
 beq :3
 lda #-11 ;kid strikes lower than opponent
:3 clc
 adc FCharY
 sta FCharY
 jmp :8

:low lda #4
 clc
 adc FCharY
 sta FCharY
 jmp :8

* Get x-coord

:imp lda #-5 impaled
 bne :9
:8 lda #5
:9 jsr addfcharx

* Get color (kid red, opps blue)

 lda CharID
 beq :2 ;kid: 0
 lda #1 ;opponents: 1
:2
 eor FCharX
 eor FCharFace
 and #1 ;look only at low bits
 bne :1
 inc FCharX
 bne :1
 inc FCharX+1
:1
 lda #starimage
 sta FCharImage
 lda #startable
 sta FCharTable

 lda #0
 sta FCharCU
 sta FCharCL
 lda #40
 sta FCharCR
 lda #192
 sta FCharCD

 lda #TypeComix
 jmp addcharobj
]rts rts

*-------------------------------
*
*  A D D   C H A R   O B J
*
*  Add a character to object table
*
*  In: FCharVars
*      A = object type
*
*-------------------------------
ADDCHAROBJ
 ldx objX ;# objects already in list
 inx
 cpx #maxobj
 bcs ]rts ;list full (shouldn't happen)
 stx objX

 sta objTYP,x

 lda FCharX
 sta XCO
 lda FCharX+1
 sta OFFSET

 txa
 pha
 jsr cvtx ;from 280-res to byte/offset
 pla
 tax

 lda XCO
 sta objX,x
 lda OFFSET
 sta objOFF,x

 lda FCharY
 sta objY,x

 lda FCharCU
 sta objCU,x
 lda FCharCL
 sta objCL,x
 lda FCharCR
 sta objCR,x
 lda FCharCD
 sta objCD,x

 lda FCharImage
 sta objIMG,x

 lda FCharTable
 sta objTAB,x

 lda FCharFace
 sta objFACE,x

 jmp SETOBJINDX

*-------------------------------
*
*  S E T  O B J  I N D X
*
*  Set object index
*
*-------------------------------
SETOBJINDX
 lda FCharIndex
 sta objINDX,x

 cmp #30
 bcs :os

 tax

 lda #1
 sta objbuf,x
:os
 rts

*-------------------------------
*
* Text routines
*
* NOTE: These routines bypass normal data structures
* & write directly to hi-res page.
*
* Call at end of DRAWALL to make sure text goes on top
* of everything else.
*
*-------------------------------
*
* Call once before using other text routines
*
*-------------------------------
pretext
 jsr initlay

 lda #bgtable2
 sta TABLE
 lda #>bgtable2
 sta TABLE+1
 rts

*-------------------------------
* Part of "Yellow" copy-protection

SETRECHECK0
 lda #recheck0
 sta locals
 lda #>recheck0
 sta locals+1 ;fall thru (& return A = 0)

*-------------------------------
INITLAY
 lda #3 ;auxmem
 sta BANK

 lda #40
 sta RIGHTCUT
 lda #192
 sta BOTCUT ;use full screen
 lda #0
 sta LEFTCUT
 sta TOPCUT
 rts

*-------------------------------
*
* Print character
*
* In: PAGE, XCO/OFFSET, YCO
*     a = ASCII value of character
* Out: XCO/OFFSET (modified)
*
*-------------------------------
prchar
 sec
 sbc #"/" ;"0" = 1
 sta IMAGE

 lda #ora
 sta OPACITY

 jsr lay

 inc XCO
 rts

*-------------------------------
 lst
 ds 1
 usr $a9,17,$00,*-org
 lst off


================================================
FILE: 01 POP Source/Source/GAMEEQ.S
================================================
 tr on
 lst off
* gameeq
*-------------------------------
*
*  Equates
*
*-------------------------------
chtable1 = $6000
chtable2 = $8400
chtable3 = $0800
chtable4 = $9600
chtable5 = $a800
chtable6 = $6000
chtable7 = $9f00

bgtable1 = $6000
bgtable2 = $8400

topctrl = $2000
seqtable = $2800
seqtab = $3000
ctrl = $3a00
coll = $4500
gamebg = $4c00
auto = $5400

mobtables = $b600
savedgame = $b6f0

msys = $d400
ctrlsubs = $d000
specialk = $d900
textline = $dfd8
subs = $e000
sound = $ea00
mover = $ee00
misc = $f900
debugs = $fc00

*-------------------------------
*
*  Jump tables
*
*-------------------------------
 dum mobtables

trobspace = $20
mobspace = $10
maxsfx = $20

trloc ds trobspace
trscrn ds trobspace
trdirec ds trobspace

mobx ds mobspace
moby ds mobspace
mobscrn ds mobspace
mobvel ds mobspace
mobtype ds mobspace
moblevel ds mobspace

soundtable ds maxsfx

trobcount ds 1

 dum savedgame

SavLevel ds 1
SavStrength ds 1
SavMaxed ds 1
SavTimer ds 2
 ds 1
SavNextMsg ds 1

 dum topctrl

start ds 3
restart ds 3
startresume ds 3
initsystem ds 3
 ds 3

docrosscut ds 3
goattract ds 3

 dum ctrl

PlayerCtrl ds 3
checkfloor ds 3
ShadCtrl ds 3
rereadblocks ds 3
checkpress ds 3

DoImpale ds 3
GenCtrl ds 3
checkimpale ds 3

 dum auto

AutoCtrl ds 3
checkstrike ds 3
checkstab ds 3
AutoPlayback ds 3
cutcheck ds 3

cutguard ds 3
addguard ds 3
cut ds 3

 dum coll

checkbarr ds 3
collisions ds 3
getfwddist ds 3
checkcoll ds 3
animchar ds 3

checkslice ds 3
checkslice2 ds 3
 ds 3
checkgate ds 3
 ds 3

enemycoll ds 3

 dum gamebg

updatemeters ds 3
DrawKidMeter ds 3
DrawSword ds 3
DrawKid ds 3
DrawShad ds 3

setupflame ds 3
continuemsg ds 3
addcharobj ds 3
setobjindx ds 3
printlevel ds 3

DrawOppMeter ds 3
flipdiskmsg ds 3
timeleftmsg ds 3
DrawGuard ds 3
DrawGuard2 ds 3

setupflask ds 3
setupcomix ds 3
psetupflame ds 3
drawpost ds 3
drawglass ds 3

initlay ds 3
twinkle ds 3
flow ds 3
pmask ds 3
yellow ds 3

setrecheck0 ds 3
recheckyel ds 3

 dum specialk

keys ds 3
clrjstk ds 3
zerosound ds 3
addsound ds 3
facejstk ds 3

SaveSelect ds 3
LoadSelect ds 3
SaveDesel ds 3
LoadDesel ds 3
initinput ds 3

demokeys ds 3
listtorches ds 3
burn ds 3
getminleft ds 3
keeptime ds 3

shortentime ds 3
cuesong ds 3
 ds 3
 ds 3
 ds 3

dloop ds 3
strobe ds 3

 dum mover

animtrans ds 3
trigspikes ds 3
pushpp ds 3
breakloose1 ds 3
breakloose ds 3

animmobs ds 3
addmobs ds 3
closeexit ds 3
getspikes ds 3
shakem ds 3

trigslicer ds 3
trigtorch ds 3
getflameframe ds 3
smashmirror ds 3
jamspikes ds 3

trigflask ds 3
getflaskframe ds 3
trigsword ds 3
jampp ds 3

 dum ctrlsubs

getframe ds 3
getseq ds 3
getbasex ds 3
getblockx ds 3
getblockxp ds 3

getblocky ds 3
getblockej ds 3
addcharx ds 3
getdist ds 3
getdist1 ds 3

getabovebeh ds 3
rdblock ds 3
rdblock1 ds 3
setupsword ds 3
getscrns ds 3

addguardobj ds 3
opjumpseq ds 3
getedges ds 3
indexchar ds 3
quickfg ds 3

cropchar ds 3
getleft ds 3
getright ds 3
getup ds 3
getdown ds 3

cmpspace ds 3
cmpbarr ds 3
addkidobj ds 3
addshadobj ds 3
addreflobj ds 3

LoadKid ds 3
LoadShad ds 3
SaveKid ds 3
SaveShad ds 3
setupchar ds 3

GetFrameInfo ds 3
indexblock ds 3
markred ds 3
markfred ds 3
markwipe ds 3

markmove ds 3
markfloor ds 3
unindex ds 3
quickfloor ds 3
unevenfloor ds 3

markhalf ds 3
addswordobj ds 3
getblocky1 ds 3
checkledge ds 3
get2infront ds 3

checkspikes ds 3
rechargemeter ds 3
addfcharx ds 3
facedx ds 3
jumpseq ds 3

GetBaseBlock ds 3
LoadKidwOp ds 3
SaveKidwOp ds 3
getopdist ds 3
LoadShadwOp ds 3

SaveShadwOp ds 3
boostmeter ds 3
getunderft ds 3
getinfront ds 3
getbehind ds 3

getabove ds 3
getaboveinf ds 3
cmpwall ds 3

 dum subs

addtorches ds 3
doflashon ds 3
PageFlip ds 3
demo ds 3
showtime ds 3

doflashoff ds 3
lrclse ds 3
 ds 3
 ds 3
 ds 3

addslicers ds 3
pause ds 3
 ds 3
deadenemy ds 3
playcut ds 3

addlowersound ds 3
RemoveObj ds 3
addfall ds 3
setinitials ds 3
startkid ds 3

startkid1 ds 3
gravity ds 3
initialguards ds 3
mirappear ds 3
crumble ds 3

 dum sound

playback ds 3

 dum msys

_minit ds 3
_mplay ds 3

 dum seqtable

Fdef ds 1200
altset1 ds 200
altset2 ds 450
swordtab ds 192

 dum misc

VanishChar ds 3
movemusic ds 3
moveauxlc ds 3
firstguard ds 3
markmeters ds 3

potioneffect ds 3
mouserescue ds 3
StabChar ds 3
unholy ds 3
reflection ds 3

MarkKidMeter ds 3
MarkOppMeter ds 3
bonesrise ds 3
decstr ds 3
DoSaveGame ds 3

LoadLevelX ds 3
checkalert ds 3
dispversion ds 3

 dum debugs

showpage ds 3
debugkeys ds 3
 ds 3
titlescreen ds 3

*-------------------------------
*
*  Zero page
*
*-------------------------------
locals = $e8

*-------------------------------
*  $40-e7: Game globals
*-------------------------------
 dum $40

Char ds $10
Kid ds $10
Shad ds $10
FCharVars ds 12
yellowflag ds 1
timebomb ds 1
justblocked ds 1
gdtimer ds 1
framepoint ds 2
Fimage ds 1
Fdx ds 1
Fdy ds 1
Fcheck ds 1
exitopen ds 1
collX ds 1
lightning ds 1
lightcolor ds 1
offguard ds 1
blockid ds 1
blockx ds 1
blocky ds 1
infrontx ds 1
behindx ds 1
abovey ds 1
tempblockx ds 1
tempblocky ds 1
tempscrn ds 1
tempid ds 1
numtrans ds 1
tempnt ds 1
redrawflg ds 1
xdiff ds 2
ydiff ds 2
xdir ds 1
ydir ds 1
RNDseed ds 1
invert ds 1
PlayCount ds 1
refract ds 1
backtolife ds 1
cutplan ds 1
lastcmd ds 1
distfallen ds 1
cutscrn ds 1
waitingtojump ds 1
trigppabove ds 1
direcpp ds 1
blockaddr ds 2
delay ds 1
XCOORD ds 2
savekidx ds 1
mirrx ds 1
dmirr ds 1
barrdist ds 1
barrcode ds 1
imwidth ds 1
imheight ds 1
leadedge ds 1
leftej ds 1
rightej ds 1
topej ds 1
leftblock ds 1
rightblock ds 1
topblock ds 1
bottomblock ds 1
CDLeftEj ds 1
CDRightEj ds 1
endrange ds 1
bufindex ds 1
blockedge ds 1
collideL ds 1
collideR ds 1
weightless ds 1
cutorder ds 1
AMtimer ds 1
begrange ds 1
scrn ds 1
keybufptr ds 1
VisScrn ds 1
OppStrength ds 1
jarabove ds 1
KidStrength ds 1
ChgKidStr ds 1
MaxKidStr ds 1
EnemyAlert ds 1
ChgOppStr ds 1
heroic ds 1
clrF ds 1
clrB ds 1
clrU ds 1
clrD ds 1
clrbtn ds 1
Fsword ds 1
purpleflag ds 1 ;$da
msgtimer ds 1
MaxOppStr ds 1
guardprog ds 1
ManCtrl ds 1
mergetimer ds 1
lastpotion ds 1
origstrength ds 1
jmpaddr ds 2
alertguard ds 1
createshad ds 1
stunned ds 1
droppedout ds 1

*-------------------------------
*
*  Page 2-3
*
*-------------------------------
 dum $212

milestone ds 1
GlassState ds 1
redrawglass ds 1
doortop ds 1
GuardColor ds 1
shadowaction ds 1
skipmessage ds 1
savezp ds 32
MSset ds 1
rjumpflag ds 1
redherring ds 1

 dum $300

MinLeft ds 1
NextTimeMsg ds 1
SecLeft ds 1
BGset1 ds 1
BGset2 ds 1
CHset ds 1
FrameCount ds 2
SongCount ds 1
PreRecPtr ds 1
gotsword ds 1
message ds 1
SPEED ds 1
nummob ds 1
clrSEL ds 5
clrDESEL ds 5
vibes ds 1
SongCue ds 1
musicon ds 1
redkidmeter ds 1
NextLevel ds 1
scrncolor ds 1
redoppmeter ds 1
timerequest ds 1

 dum $320

CDthisframe ds $10
CDlastframe ds $10
CDbelow ds $10
CDabove ds $10
SNthisframe ds $10
SNlastframe ds $10
SNbelow ds $10
SNabove ds 10
BlockYthis ds 1
BlockYlast ds 1

Op ds $10

keybuflen = 10
keybuf ds keybuflen

*-------------------------------
*
*  Character data
*
*-------------------------------
 dum Char
CharPosn ds 1
CharX ds 1
CharY ds 1
CharFace ds 1
CharBlockX ds 1
CharBlockY ds 1
CharAction ds 1
CharXVel ds 1
CharYVel ds 1
CharSeq ds 2
CharScrn ds 1
CharRepeat ds 1
CharID ds 1
CharSword ds 1
CharLife ds 1

 dum Op
OpPosn ds 1
OpX ds 1
OpY ds 1
OpFace ds 1
OpBlockX ds 1
OpBlockY ds 1
OpAction ds 1
OpXVel ds 1
OpYVel ds 1
OpSeq ds 2
OpScrn ds 1
OpRepeat ds 1
OpID ds 1
OpSword ds 1
OpLife ds 1

 dum Kid
KidPosn ds 1
KidX ds 1
KidY ds 1
KidFace ds 1
KidBlockX ds 1
KidBlockY ds 1
KidAction ds 1
KidXVel ds 1
KidYVel ds 1
KidSeq ds 2
KidScrn ds 1
KidRepeat ds 1
KidID ds 1
KidSword ds 1
KidLife ds 1

 dum Shad
ShadPosn ds 1
ShadX ds 1
ShadY ds 1
ShadFace ds 1
ShadBlockX ds 1
ShadBlockY ds 1
ShadAction ds 1
ShadXVel ds 1
ShadYVel ds 1
ShadSeq ds 2
ShadScrn ds 1
ShadRepeat ds 1
ShadID ds 1
ShadSword ds 1
ShadLife ds 1

 dum FCharVars
FCharImage ds 1
FCharX ds 2
FCharY ds 1
FCharFace ds 1
FCharIndex ds 1
FCharCU ds 1
FCharCD ds 1
FCharCL ds 1
FCharCR ds 1
FCharTable ds 1

 dend

*-------------------------------
*
*  Misc. data
*
*-------------------------------
Fcheckmark = %01000000
Fthinmark = %00100000
Ffootmark = %00011111

floorheight = 15
angle = 7
VertDist = 11

UseFastlay = 0
UseLay = 1
UseLayrsave = 2

TypeKid = 0
TypeShad = 1
TypeGd = 2
TypeSword = 3
TypeReflect = 4
TypeComix = 5
TypeFF = $80

 lst off


================================================
FILE: 01 POP Source/Source/GRAFIX.S
================================================
* grafix
CopyProtect = 1
EditorDisk = 0
org = $400
 tr on
 lst off
 lstdo off
*-------------------------------
*
*  PRINCE OF PERSIA
*  Copyright 1989 Jordan Mechner
*
*-------------------------------
 org org

 jmp GR
 jmp DRAWALL
 jmp CONTROLLER
 jmp dispversion
 jmp SAVEBLUE

 jmp RELOADBLUE
 jmp MOVEMEM
 jmp BUTTONS ;ed
 jmp GTONE
 jmp SETCENTER

 jmp DIMCHAR
 jmp CVTX
 jmp ZEROPEEL
 jmp ZEROPEELS
 jmp PREAD

 jmp ADDPEEL
 jmp COPYSCRN
 jmp SNGPEEL
 jmp RND
 jmp CLS

 jmp LAY
 jmp FASTLAY
 jmp LAYRSAVE
 jmp LRCLS
 jmp FASTMASK

 jmp FASTBLACK
 jmp PEEL
 jmp GETWIDTH
 jmp COPY2000
 jmp COPY2000MA

 jmp SETFASTAUX
 jmp SETFASTMAIN
 jmp LOADLEVEL
 jmp ATTRACTMODE
 jmp XMINIT

 jmp XMP
Download .txt
gitextract_ss962m30/

├── .gitattributes
├── 01 POP Source/
│   ├── Images/
│   │   ├── IMG.BGTAB1.DUN
│   │   ├── IMG.BGTAB1.PAL
│   │   ├── IMG.BGTAB2.DUN
│   │   ├── IMG.BGTAB2.PAL
│   │   ├── IMG.CHTAB1
│   │   ├── IMG.CHTAB2
│   │   ├── IMG.CHTAB3
│   │   ├── IMG.CHTAB4.FAT
│   │   ├── IMG.CHTAB4.GD
│   │   ├── IMG.CHTAB4.SHAD
│   │   ├── IMG.CHTAB4.SKEL
│   │   ├── IMG.CHTAB4.VIZ
│   │   ├── IMG.CHTAB5
│   │   ├── IMG.CHTAB6.A
│   │   ├── IMG.CHTAB6.B
│   │   └── IMG.CHTAB7
│   ├── Levels/
│   │   ├── LEVEL0
│   │   ├── LEVEL1
│   │   ├── LEVEL10
│   │   ├── LEVEL11
│   │   ├── LEVEL12
│   │   ├── LEVEL13
│   │   ├── LEVEL14
│   │   ├── LEVEL2
│   │   ├── LEVEL3
│   │   ├── LEVEL4
│   │   ├── LEVEL5
│   │   ├── LEVEL6
│   │   ├── LEVEL7
│   │   ├── LEVEL8
│   │   └── LEVEL9
│   └── Source/
│       ├── AUTO.S
│       ├── BGDATA.S
│       ├── BOOT.S
│       ├── COLL.S
│       ├── CTRL.S
│       ├── CTRLSUBS.S
│       ├── EQ.S
│       ├── FRAMEADV.S
│       ├── FRAMEDEF.S
│       ├── GAMEBG.S
│       ├── GAMEEQ.S
│       ├── GRAFIX.S
│       ├── HIRES.S
│       ├── HRPARAMS.S
│       ├── HRTABLES.S
│       ├── MASTER.S
│       ├── MISC.S
│       ├── MOVEDATA.S
│       ├── MOVER.S
│       ├── SEQDATA.S
│       ├── SEQTABLE.S
│       ├── SOUND.S
│       ├── SOUNDNAMES.S
│       ├── SPECIALK.S
│       ├── SUBS.S
│       ├── TABLES.S
│       ├── TOPCTRL.S
│       ├── UNPACK.S
│       └── VERSION.S
├── 02 POP Disk Routines/
│   ├── CP.525/
│   │   ├── CUBE.S
│   │   ├── LOSHOW.S
│   │   ├── POPBOOT0.S
│   │   ├── PURPLE.MAIN.S
│   │   ├── PURPLE.S
│   │   ├── RYELLOW1.S
│   │   ├── UPDATE.LS.S
│   │   └── YELLOW.MAIN.S
│   └── RW1835/
│       ├── DEMOBOOT.S
│       ├── MOVE35.S
│       ├── MOVE53.S
│       ├── POPBOOT35.S
│       ├── RW1835.POP.S
│       └── RW1835.S
├── 03 Disk Protection/
│   ├── CUBE.S
│   ├── LOSHOW.S
│   ├── POPBOOT0.S
│   ├── PURPLE.MAIN.S
│   ├── RYELLOW1.S
│   ├── UPDATE.LS.S
│   └── YELLOW.MAIN.S
├── 04 Support/
│   ├── DRAZ/
│   │   ├── F/
│   │   │   ├── COLLAPSE
│   │   │   ├── DBS
│   │   │   ├── DRAW
│   │   │   ├── DRAW.LG
│   │   │   ├── DRAW.SM
│   │   │   ├── DRINK
│   │   │   ├── IMG.ALPHA
│   │   │   ├── IMG.CHTAB5
│   │   │   ├── IMG.CHTABLE4
│   │   │   ├── IMG.CHTABLE4.W
│   │   │   ├── IMG.TEXTSET
│   │   │   ├── PAC.ADVANCE
│   │   │   ├── PAC.BASIL
│   │   │   ├── PAC.BIGBLOX
│   │   │   ├── PAC.BIGBLOX2
│   │   │   ├── PAC.BLADE
│   │   │   ├── PAC.BLONDGIRL
│   │   │   ├── PAC.BLUELINE
│   │   │   ├── PAC.BONES
│   │   │   ├── PAC.BYZ1
│   │   │   ├── PAC.C5.B
│   │   │   ├── PAC.CLEANCLIMB
│   │   │   ├── PAC.CLIMB.CLEAN
│   │   │   ├── PAC.CLIMBUP
│   │   │   ├── PAC.CLIMBUPA
│   │   │   ├── PAC.CLIMBUPB
│   │   │   ├── PAC.CLIMBUPC
│   │   │   ├── PAC.COLL1
│   │   │   ├── PAC.COLL2
│   │   │   ├── PAC.COLL3
│   │   │   ├── PAC.COLLAPSE
│   │   │   ├── PAC.DBS
│   │   │   ├── PAC.DRAW
│   │   │   ├── PAC.DRAW1
│   │   │   ├── PAC.DRINK
│   │   │   ├── PAC.DRINK1
│   │   │   ├── PAC.EXITARCH
│   │   │   ├── PAC.FALLWSWORD
│   │   │   ├── PAC.FANCYARCH
│   │   │   ├── PAC.FANCYEXIT
│   │   │   ├── PAC.FITING
│   │   │   ├── PAC.FLAME
│   │   │   ├── PAC.GOSTONES
│   │   │   ├── PAC.GRID
│   │   │   ├── PAC.GUARD
│   │   │   ├── PAC.GUARDMOD
│   │   │   ├── PAC.GUARDMOD.BK
│   │   │   ├── PAC.GUARDMOD2
│   │   │   ├── PAC.GUARDMODEL
│   │   │   ├── PAC.GUY1
│   │   │   ├── PAC.GUY1.CLEAN
│   │   │   ├── PAC.GUY1.REV1
│   │   │   ├── PAC.GUY2
│   │   │   ├── PAC.GUY2.CLEAN
│   │   │   ├── PAC.GUY2.REV1
│   │   │   ├── PAC.GUY3.CLEAN
│   │   │   ├── PAC.GUY3.REV1
│   │   │   ├── PAC.GUY4.CLEAN
│   │   │   ├── PAC.GUY4.REV1
│   │   │   ├── PAC.GUYBLOCK
│   │   │   ├── PAC.GUYMODEL
│   │   │   ├── PAC.GUYMODEL.GD
│   │   │   ├── PAC.HALVES
│   │   │   ├── PAC.HIBLOX
│   │   │   ├── PAC.IMPALED
│   │   │   ├── PAC.JUMPFALL
│   │   │   ├── PAC.JUMPHANG
│   │   │   ├── PAC.L1
│   │   │   ├── PAC.L2
│   │   │   ├── PAC.L3
│   │   │   ├── PAC.LITEBRIX
│   │   │   ├── PAC.MAGICFIRE
│   │   │   ├── PAC.MSG
│   │   │   ├── PAC.PANELS
│   │   │   ├── PAC.PRINCESS
│   │   │   ├── PAC.ROB1
│   │   │   ├── PAC.ROB1.REV
│   │   │   ├── PAC.ROB1.REV0
│   │   │   ├── PAC.ROB1.REV1
│   │   │   ├── PAC.ROB1MID
│   │   │   ├── PAC.ROB1SM
│   │   │   ├── PAC.ROB2
│   │   │   ├── PAC.ROB2.REV
│   │   │   ├── PAC.ROB2MID
│   │   │   ├── PAC.ROB2SM
│   │   │   ├── PAC.ROB3
│   │   │   ├── PAC.ROB3.REV
│   │   │   ├── PAC.ROB3MID
│   │   │   ├── PAC.ROB4
│   │   │   ├── PAC.ROB4MID
│   │   │   ├── PAC.ROB4SM
│   │   │   ├── PAC.ROBGUYSTR
│   │   │   ├── PAC.ROBMODEL
│   │   │   ├── PAC.ROBSTANCES
│   │   │   ├── PAC.RUN
│   │   │   ├── PAC.RUNJUMP
│   │   │   ├── PAC.RUNWSWORD
│   │   │   ├── PAC.SLICE
│   │   │   ├── PAC.STANDJUMP
│   │   │   ├── PAC.STEPFWD
│   │   │   ├── PAC.STEPFWD.T
│   │   │   ├── PAC.STRIKE
│   │   │   ├── PAC.STRIKEBLOCK
│   │   │   ├── PAC.STRIKESCRN
│   │   │   ├── PAC.STRTSLICE
│   │   │   ├── PAC.TORCHONWALL
│   │   │   ├── PAC.TUNNEL
│   │   │   ├── PAC.TURNROUND
│   │   │   └── ROB3SM
│   │   ├── I/
│   │   │   ├── C1.A
│   │   │   ├── C1.B
│   │   │   ├── C1.C
│   │   │   ├── C2.A
│   │   │   ├── C2.B
│   │   │   ├── C2.C
│   │   │   ├── C3.A
│   │   │   ├── C3.C
│   │   │   ├── C4.GD.A
│   │   │   ├── C4.GD.B
│   │   │   ├── C4.SH.A
│   │   │   ├── C4.SH.B
│   │   │   ├── C4.SKEL.A
│   │   │   ├── C4.SKEL.B
│   │   │   ├── C4.VIZ.A
│   │   │   ├── C4.VIZ.B
│   │   │   ├── C5.A
│   │   │   ├── C5.B
│   │   │   ├── C6.A
│   │   │   ├── C6.B
│   │   │   ├── C6.C
│   │   │   ├── C6.D
│   │   │   ├── C6.E
│   │   │   ├── IMG.BGTAB1.DUN
│   │   │   ├── IMG.BGTAB1.PAL
│   │   │   ├── IMG.BGTAB1.PALB
│   │   │   ├── IMG.BGTAB2.DUN
│   │   │   ├── IMG.BGTAB2.DUNN
│   │   │   ├── IMG.BGTAB2.PAL
│   │   │   ├── IMG.BGTAB2.PALB
│   │   │   ├── IMG.BGTAB2.PALN
│   │   │   ├── IMG.CHTAB1
│   │   │   ├── IMG.CHTAB2
│   │   │   ├── IMG.CHTAB3
│   │   │   ├── IMG.CHTAB4.FAT
│   │   │   ├── IMG.CHTAB4.GD
│   │   │   ├── IMG.CHTAB4.SHAD
│   │   │   ├── IMG.CHTAB4.SKEL
│   │   │   ├── IMG.CHTAB4.VIZ
│   │   │   ├── IMG.CHTAB5
│   │   │   ├── IMG.CHTAB6.A
│   │   │   ├── IMG.CHTAB6.A.BK
│   │   │   ├── IMG.CHTAB6.B
│   │   │   ├── IMG.CHTAB7
│   │   │   ├── IMG.EDTABLE
│   │   │   ├── PAC.C1.A
│   │   │   ├── PAC.C1.B
│   │   │   ├── PAC.C1.C
│   │   │   ├── PAC.C2.A
│   │   │   ├── PAC.C2.B
│   │   │   ├── PAC.C2.C
│   │   │   ├── PAC.C3.A
│   │   │   ├── PAC.C3.B
│   │   │   ├── PAC.C3.C
│   │   │   ├── PAC.C4.B
│   │   │   ├── PAC.C4.C
│   │   │   ├── PAC.C4.FAT.A
│   │   │   ├── PAC.C4.FAT.B
│   │   │   ├── PAC.C4.GD.A
│   │   │   ├── PAC.C4.GD.B
│   │   │   ├── PAC.C4.SH.A
│   │   │   ├── PAC.C4.SH.B
│   │   │   ├── PAC.C4.SKEL.A
│   │   │   ├── PAC.C4.SKEL.B
│   │   │   ├── PAC.C4.VIZ.A
│   │   │   ├── PAC.C4.VIZ.B
│   │   │   ├── PAC.C5.A
│   │   │   ├── PAC.C5.B
│   │   │   ├── PAC.C6.A
│   │   │   ├── PAC.C6.B
│   │   │   ├── PAC.C6.C
│   │   │   ├── PAC.C6.D
│   │   │   ├── PAC.C6.E
│   │   │   ├── PAC.GRID
│   │   │   ├── PAC.MOUSE
│   │   │   ├── PAC.PMODEL
│   │   │   ├── PAC.PWALK1
│   │   │   ├── PAC.SHEATHE
│   │   │   ├── PAC.VCAST
│   │   │   ├── PAC.VCAST1
│   │   │   ├── PAC.VCAST2
│   │   │   ├── PAC.VTURN
│   │   │   ├── PAC.VTURN1
│   │   │   ├── PAC.VWALK
│   │   │   ├── PAC.VWALK1
│   │   │   └── PAC.VWALK2
│   │   ├── IP/
│   │   │   ├── IMG.BG2.HARL
│   │   │   ├── IMG.BGPAL2.BK
│   │   │   ├── IMG.BGTAB.DUN1
│   │   │   ├── IMG.BGTAB.DUN2
│   │   │   ├── IMG.BGTAB.PAL1
│   │   │   ├── IMG.BGTAB.PAL2
│   │   │   ├── IMG.BGTAB.RED1
│   │   │   ├── IMG.BGTAB.RED2
│   │   │   ├── IMG.BGTAB.TWR1
│   │   │   ├── IMG.BGTAB.TWR2
│   │   │   ├── IMG.BGTAB1.PAL
│   │   │   ├── IMG.BGTAB2.PAL
│   │   │   ├── IMG.BGTABLE1
│   │   │   ├── IMG.BGTABLE1.B
│   │   │   ├── IMG.BGTABLE1.BK
│   │   │   ├── IMG.BGTABLE2
│   │   │   ├── IMG.BGTABLE2.B
│   │   │   ├── IMG.BKUP
│   │   │   ├── IMG.BYZ4
│   │   │   ├── IMG.CHTAB4.FAT
│   │   │   ├── IMG.CHTAB4.GD
│   │   │   ├── IMG.CHTAB4.SKEL
│   │   │   ├── IMG.CHTAB4.VIZ
│   │   │   ├── IMG.CHTAB5.BK
│   │   │   ├── IMG.CHTABLE1
│   │   │   ├── IMG.CHTABLE2
│   │   │   ├── IMG.CHTABLE3
│   │   │   ├── IMG.CHTABLE4
│   │   │   ├── IMG.CHTABLE4.GD
│   │   │   ├── IMG.CHTABLE4.SH
│   │   │   ├── IMG.CHTABLE5
│   │   │   ├── IMG.CHTABLE5.B
│   │   │   ├── IMG.EDTABLE
│   │   │   ├── IMG.PAL2.BK
│   │   │   ├── IMG.PANELS
│   │   │   ├── IMG.TEXTSET
│   │   │   ├── MIR
│   │   │   ├── PAC.ARCH
│   │   │   ├── PAC.ARCHES
│   │   │   ├── PAC.ARCHMOD
│   │   │   ├── PAC.ARRS
│   │   │   ├── PAC.BACKBRICKS
│   │   │   ├── PAC.BALC
│   │   │   ├── PAC.BG1
│   │   │   ├── PAC.BG1.B
│   │   │   ├── PAC.BG1.GR
│   │   │   ├── PAC.BG2
│   │   │   ├── PAC.BG2.B
│   │   │   ├── PAC.BG3
│   │   │   ├── PAC.BG3.B
│   │   │   ├── PAC.BGTAB.PAL2
│   │   │   ├── PAC.BGTAB2.PAL
│   │   │   ├── PAC.BOOKS
│   │   │   ├── PAC.BORDERS
│   │   │   ├── PAC.BYZ3
│   │   │   ├── PAC.BYZ4
│   │   │   ├── PAC.BYZ5
│   │   │   ├── PAC.BYZ6
│   │   │   ├── PAC.BYZ7
│   │   │   ├── PAC.CHTABLE4.SH
│   │   │   ├── PAC.DAR1
│   │   │   ├── PAC.DAR2
│   │   │   ├── PAC.DAR3
│   │   │   ├── PAC.DAR4
│   │   │   ├── PAC.DAR5
│   │   │   ├── PAC.DAR6
│   │   │   ├── PAC.DAR7
│   │   │   ├── PAC.DAYTIME
│   │   │   ├── PAC.DEAD
│   │   │   ├── PAC.DIE
│   │   │   ├── PAC.DOC
│   │   │   ├── PAC.DUNJBLOX
│   │   │   ├── PAC.DUNJBRIX
│   │   │   ├── PAC.EXIT
│   │   │   ├── PAC.FATMODEL
│   │   │   ├── PAC.FIVE
│   │   │   ├── PAC.FIVE1
│   │   │   ├── PAC.FIVE2
│   │   │   ├── PAC.FLASKS
│   │   │   ├── PAC.G
│   │   │   ├── PAC.G1.PAL
│   │   │   ├── PAC.G2.PAL
│   │   │   ├── PAC.G3
│   │   │   ├── PAC.G3.PAL
│   │   │   ├── PAC.G4.PAL
│   │   │   ├── PAC.G5
│   │   │   ├── PAC.G5.PAL
│   │   │   ├── PAC.G6.PAL
│   │   │   ├── PAC.GRAYFRONT
│   │   │   ├── PAC.GREEN
│   │   │   ├── PAC.GUARDMODEL
│   │   │   ├── PAC.GUYMODEL
│   │   │   ├── PAC.HALLOWEEN
│   │   │   ├── PAC.HASSANMOD
│   │   │   ├── PAC.IMPALED
│   │   │   ├── PAC.JOIN
│   │   │   ├── PAC.JOIN2
│   │   │   ├── PAC.LWIND
│   │   │   ├── PAC.MASKMODEL
│   │   │   ├── PAC.MEDWIND
│   │   │   ├── PAC.MIR
│   │   │   ├── PAC.MIR1
│   │   │   ├── PAC.MIR2
│   │   │   ├── PAC.MIR3
│   │   │   ├── PAC.MUSTARD
│   │   │   ├── PAC.NAR
│   │   │   ├── PAC.NEWDOR
│   │   │   ├── PAC.NITETIME
│   │   │   ├── PAC.NOSTRIPE
│   │   │   ├── PAC.PAL1
│   │   │   ├── PAC.PAL2
│   │   │   ├── PAC.PARCH
│   │   │   ├── PAC.PAT
│   │   │   ├── PAC.PNB
│   │   │   ├── PAC.PR2
│   │   │   ├── PAC.PRINC2
│   │   │   ├── PAC.PRINC4
│   │   │   ├── PAC.PRINC5
│   │   │   ├── PAC.PRINC6
│   │   │   ├── PAC.PROOM
│   │   │   ├── PAC.PSKETCHES
│   │   │   ├── PAC.Q
│   │   │   ├── PAC.RIM
│   │   │   ├── PAC.ROBMODEL
│   │   │   ├── PAC.ROW
│   │   │   ├── PAC.ROW10
│   │   │   ├── PAC.ROW11
│   │   │   ├── PAC.ROW12
│   │   │   ├── PAC.ROW13
│   │   │   ├── PAC.ROW14
│   │   │   ├── PAC.ROW15
│   │   │   ├── PAC.ROW16
│   │   │   ├── PAC.ROW17
│   │   │   ├── PAC.ROW18
│   │   │   ├── PAC.ROW2
│   │   │   ├── PAC.ROW20
│   │   │   ├── PAC.ROW21
│   │   │   ├── PAC.ROW22
│   │   │   ├── PAC.ROW24
│   │   │   ├── PAC.ROW25
│   │   │   ├── PAC.ROW26
│   │   │   ├── PAC.ROW3
│   │   │   ├── PAC.ROW30
│   │   │   ├── PAC.ROW31
│   │   │   ├── PAC.ROW33
│   │   │   ├── PAC.ROW34
│   │   │   ├── PAC.ROW35
│   │   │   ├── PAC.ROW36
│   │   │   ├── PAC.ROW37
│   │   │   ├── PAC.ROW4
│   │   │   ├── PAC.ROW40
│   │   │   ├── PAC.ROW41
│   │   │   ├── PAC.ROW6
│   │   │   ├── PAC.ROW8
│   │   │   ├── PAC.ROW9
│   │   │   ├── PAC.SHADMODEL
│   │   │   ├── PAC.SKELMOD
│   │   │   ├── PAC.SKELMOD2
│   │   │   ├── PAC.SKELMODBK
│   │   │   ├── PAC.SKELMODEL
│   │   │   ├── PAC.SKELPILE
│   │   │   ├── PAC.SMEAR
│   │   │   ├── PAC.SMEAWR
│   │   │   ├── PAC.SS
│   │   │   ├── PAC.SS1
│   │   │   ├── PAC.SS2
│   │   │   ├── PAC.SS3
│   │   │   ├── PAC.SS4
│   │   │   ├── PAC.SS5
│   │   │   ├── PAC.SS6
│   │   │   ├── PAC.SS7
│   │   │   ├── PAC.SSEX
│   │   │   ├── PAC.TEMPLATE
│   │   │   ├── PAC.TEMPO
│   │   │   ├── PAC.TEST
│   │   │   ├── PAC.TEST2
│   │   │   ├── PAC.TEXT
│   │   │   ├── PAC.TIN
│   │   │   ├── PAC.TORCHSETS
│   │   │   ├── PAC.VIZMODEL
│   │   │   ├── PAC.WITE
│   │   │   ├── PAL1
│   │   │   ├── PRINC2
│   │   │   ├── PRINCESS2
│   │   │   ├── PROOM
│   │   │   ├── TEST
│   │   │   └── TEST2
│   │   ├── SS/
│   │   │   ├── PAC.HG
│   │   │   ├── PAC.HG1
│   │   │   ├── PAC.HG3
│   │   │   ├── PAC.ROOM
│   │   │   ├── PAC.ROOM2
│   │   │   ├── PAC.SS0
│   │   │   ├── PAC.SS1
│   │   │   ├── PAC.SS11
│   │   │   ├── PAC.SS4
│   │   │   ├── PAC.SS6
│   │   │   ├── PAC.SS7
│   │   │   ├── PAC.SS8
│   │   │   ├── PAC.SS9
│   │   │   ├── PAC.SS98
│   │   │   ├── PAC.SS99
│   │   │   ├── PAC.WINDZ
│   │   │   ├── SLIDE
│   │   │   ├── SS0
│   │   │   ├── SS0.OLD
│   │   │   ├── SS1
│   │   │   ├── SS10
│   │   │   ├── SS11
│   │   │   ├── SS12
│   │   │   ├── SS13
│   │   │   ├── SS14
│   │   │   ├── SS4
│   │   │   ├── SS5
│   │   │   ├── SS6
│   │   │   ├── SS7
│   │   │   ├── SS8
│   │   │   ├── SS9
│   │   │   ├── TEST
│   │   │   └── VILL
│   │   └── Z
│   ├── Levels/
│   │   ├── Finder.Data
│   │   ├── LEVEL0
│   │   ├── LEVEL1
│   │   ├── LEVEL10
│   │   ├── LEVEL11
│   │   ├── LEVEL12
│   │   ├── LEVEL13
│   │   ├── LEVEL14
│   │   ├── LEVEL2
│   │   ├── LEVEL3
│   │   ├── LEVEL4
│   │   ├── LEVEL5
│   │   ├── LEVEL6
│   │   ├── LEVEL7
│   │   ├── LEVEL8
│   │   └── LEVEL9
│   └── MakeDisk/
│       ├── DRAZ/
│       │   ├── BLAST18.S
│       │   ├── DRAZ.S
│       │   ├── DRAZMOVER.S
│       │   ├── GBLAST.S
│       │   ├── GBLAST2.S
│       │   ├── GRAB.S
│       │   ├── HIRES.S
│       │   ├── HRPARAMS.S
│       │   ├── HRTABLEQ.S
│       │   ├── HRTABLES.S
│       │   └── MBLAST.S
│       ├── EDSORC/
│       │   ├── BSUBS.S
│       │   ├── BUILDER.S
│       │   ├── BUILDEREQ.S
│       │   ├── DBLHIRES.S
│       │   ├── DBLIMAGE.S
│       │   ├── DEBUGS.S
│       │   ├── DIALOGER.S
│       │   ├── EDDATA.S
│       │   ├── EDDEBUGS.S
│       │   ├── EDITOR.S
│       │   ├── EDMASTER.S
│       │   ├── MENUDATA.S
│       │   └── TEXTSET.S
│       ├── FORMAT18.S
│       ├── INSTALL18.S
│       ├── S/
│       │   ├── AUTO.S
│       │   ├── BGDATA.S
│       │   ├── BOOT.S
│       │   ├── CHARCOMMENTS.S
│       │   ├── COLL.S
│       │   ├── COMMENTS.S
│       │   ├── CTRL.S
│       │   ├── CTRLSUBS.S
│       │   ├── DEBUGS.S
│       │   ├── EQ.S
│       │   ├── FRAMEADV.S
│       │   ├── FRAMEDEF.S
│       │   ├── GAMEBG.S
│       │   ├── GAMEEQ.S
│       │   ├── GRAFIX.S
│       │   ├── GRAFIX525.S
│       │   ├── HIRES.S
│       │   ├── HRPARAMS.S
│       │   ├── HRTABLES.S
│       │   ├── MASTER.S
│       │   ├── MASTER525.S
│       │   ├── MISC.S
│       │   ├── MOVEDATA.S
│       │   ├── MOVER.S
│       │   ├── MSYS.S
│       │   ├── PURPLE.S
│       │   ├── RYELLOW1.S
│       │   ├── SEQDATA.S
│       │   ├── SEQTABLE.S
│       │   ├── SHSTUFF.S
│       │   ├── SOUND.S
│       │   ├── SOUNDNAMES.S
│       │   ├── SPECIALK.S
│       │   ├── SUBS.S
│       │   ├── TABLES.S
│       │   ├── TOPCTRL.S
│       │   ├── UNPACK.S
│       │   ├── UNPACK525.S
│       │   └── VERSION.S
│       └── USR18.S
├── LICENSE
└── README.md
Condensed preview — 582 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,843K chars).
[
  {
    "path": ".gitattributes",
    "chars": 62,
    "preview": "* binary\n*.S crlf diff\nLICENSE crlf diff\nREADME.mkd crlf diff\n"
  },
  {
    "path": "01 POP Source/Images/IMG.BGTAB1.PAL",
    "chars": 1224,
    "preview": "\u0001a3aa\u0003bAbsbbcyddde\u001bfAf_fwff\u000bg)gOgAhOh]hkhyhhyii\u001fj3jejjjj$k<kkk\u001elTlll\\mmmmmmm\u0018n8nXnxnnnnnn\u000eo\u001co'o/o4o7o:o=o@ofooo:pXp\u000bqqr"
  },
  {
    "path": "01 POP Source/Images/IMG.BGTAB2.PAL",
    "chars": 695,
    "preview": "2g`iaabcccccccc\u0004d\u0007ddeefg\u001bhihhhhhhiiiijjjkk5ll1m\u0003n}nnoYpkppoqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB1",
    "chars": 588,
    "preview": "A``VaaGbb{c\u0019ddeKffgyhhDiiiajjekkil7mQn3oo[pp\u001eqqqkrr}s\u0013ttu<v\u0015w6x(yyzG{{{a||R}}7~~~'1\u0004o΁3q'\u0002)࿀ЏЏЏЎԎЀԀԁԃ\u0003)Ѐ࿀࿀迀聀ꀀꁀ\u0003(Џ䟀ׁׁ׀ീ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB2",
    "chars": 621,
    "preview": "F`^aab[ccdfeefDggh&i|i jrjj\u001aklkk8llPmm2nn\u0011oo8pp\u0018qzqq\u001crnrqr\fssNtt2uuFvvwxPy\u001azz{'||O}}\u0016~]~~~\u001a|\\ր\\ǁ;\u0005)ßϟ𕀀𗀀𗀀׀߀߀߀߀߀߀🀀🀀\u0003'เเ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB3",
    "chars": 492,
    "preview": "N``Aaa\bbbbccd,eeeIff\u000fgiggh\u0016iii^jj2kk\u0006ll\u000emvmmmmmmmmm\u000bn=nunnnnnn\u0001o\u000bo\u0019o)o1oo\u001fpp\u0010qqqrrrs\u001att%uu\rv!vGvovvvvvvvv\u000ew.wEwOwaw\u0002(菨\u0002'"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB4.GD",
    "chars": 614,
    "preview": " C``abc|dFeefZg\u001ahhiUj;k'llmfn\u0004ooXppqq'rrrVsss]tt\u0005$񯅀񯁀῁῀ៀ՟՟՟՟ԟП菀𿀀ꃀ\u0006%߀翀վվտԿԿ🀀🀀ПЏ叀叀\u0006$࿀𿀀􇀨ꟀꏀՀ🁀𿁀ꁀ\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀О܂ӔՅ׀\u0006%߿߿߿տԾԀԂԪЪЪ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB4.SKEL",
    "chars": 293,
    "preview": " C``abYc'ddxe\nff}g)hhidj>kkl@mmdn\u0015oo9p<pp@qCqFqIqLqOqq\u0005\"ǘ뇀\u0006\"𿂀࿀࿀臀\u0006!΁Ã߀퀀瀀\u0007\u001eǀ࿀ 󂟀\u0006\"㠀Àρ݁ɀฎ⁀رÁ􃀀\u0005% 섀΃끀܀ЁρЏ🀀\u0004%̇぀΃܁̀࿀\u0004$ೀ࿀솀\u0006 🀀ව"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB4.VIZ",
    "chars": 472,
    "preview": " C``abcvd;eesfAg\u0001hhri2j\u0012kkl^m\u0019nnMoop!q$qq:rrrnss\u0013tbt\u0005$񯅀񯁀េៀៀ՟՟՟՟ԟПППпп俀🀀\u0006%Ç柀翀վԿԿԟ֟֟ППՏ叀叀샀蟀\u0006$࿀𿀀􇀨Ꟁꏀ࿁𿀀\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀ח쇀蟀\u0006$ϟ߿߿߿"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB5",
    "chars": 479,
    "preview": "-]``a{bVc$ddue\u0007ffng\bhh\\i6j\u0010k\u0013kkol\u0005mWmm+nn\u001boo\u0012plppOqqUrrUsssOtt]u\u000bvYvvv=www\u0004\"ß🀀🀀𕀀׀׀ꕀꅀꁀ\u0005&ÿծծՀ׀ꃀ\u0006#㟀ժݟ׏ՏՂՂ\u0007\u001f🀀뀀🀀պЪ݂ݪݪ\u0006\"뀾🀀׊ׂ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB6.A",
    "chars": 975,
    "preview": "g````\ra\u001ca+a:aIaXaa[bb:ccc!dndd\beUeeeeeFffLggLhhi'jjj2kk8llm\u0017n\u001an\u001dn n#n&n)n,n/n2n5n8n;n>nAnDnGnJnMnPnSnVnYn\\n_nbnenhnknnnq"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB6.B",
    "chars": 1089,
    "preview": "I````````\ra\u001caajbbLccc3ddd\u001aegeeeeeXff^gg^h\bii9jj?kkEllvm$nnAoDoGogoo\tpppq rrhsttu>vvZwwIxx\u001cyzyy[zzM{{|\u0019}}M~~t\u0001\r\u0001\rЀ\u0001\rԔ\u0001\rԔ"
  },
  {
    "path": "01 POP Source/Images/IMG.CHTAB7",
    "chars": 103,
    "preview": "\b\u0013`y`\u000baa/bbAccd\u00022ккккккккккоооооОППԏԇԿԿԿԟ䀊\u00030ꏀꏀꏀꏀꏀꏀꇀꇀ\u00030迀迀迀迀⏀ԃԏ\u00030迀迀迀迀迀迀迂迚꿀꿀蟀⏀ԃԏ\u00020ԃԏ\u0003:Ԁԃԇ՟՟ՏՏ\u0003:ԀԃԇՇ\u00030臀臀臀臀ꇀ"
  },
  {
    "path": "01 POP Source/Source/AUTO.S",
    "chars": 27571,
    "preview": "* auto\nDemoDisk = 0\norg = $5400\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989"
  },
  {
    "path": "01 POP Source/Source/BGDATA.S",
    "chars": 4256,
    "preview": "* bgdata\n tr on\n*-------------------------------\n* Indexed by PIECE ID#:\n\nspace = 0\nfloor = 1\nspikes = 2\nposts = 3\ngate "
  },
  {
    "path": "01 POP Source/Source/BOOT.S",
    "chars": 2877,
    "preview": "*  boot\norg = $800\n lst off\n*-------------------------------\n* $800 TS (0,0) boot sector\n\nSLOT = $2b\nsector = $50\n\ntext "
  },
  {
    "path": "01 POP Source/Source/COLL.S",
    "chars": 21157,
    "preview": "* coll\norg = $4500\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mechn"
  },
  {
    "path": "01 POP Source/Source/CTRL.S",
    "chars": 29542,
    "preview": "* ctrl\norg = $3a00\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp PLAYERCTRL\n jmp CHECKFLOOR\n jmp SHADC"
  },
  {
    "path": "01 POP Source/Source/CTRLSUBS.S",
    "chars": 28089,
    "preview": "* ctrlsubs\norg = $d000\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan M"
  },
  {
    "path": "01 POP Source/Source/EQ.S",
    "chars": 6123,
    "preview": " tr on\n lst off\n* eq\n*-------------------------------\n*\n*  Equates\n*\n*-------------------------------\n*  Main l.c.\n\nrw18"
  },
  {
    "path": "01 POP Source/Source/FRAMEADV.S",
    "chars": 29360,
    "preview": "* frameadv\nEditorDisk = 0 ;1 = dunj, 2 = palace\norg = $1290\n lst off\n tr on\n*-------------------------------\n org org\n\n "
  },
  {
    "path": "01 POP Source/Source/FRAMEDEF.S",
    "chars": 14797,
    "preview": "* framedef\nbof = $2800\n tr on ;TABS 15,20,40\n lst off\n lstdo off\n\n*-------------------------------\n dum bof\n\norg ds 1200"
  },
  {
    "path": "01 POP Source/Source/GAMEBG.S",
    "chars": 16050,
    "preview": "* gamebg\nThreeFive = 1\nEditorDisk = 0\norg = $4c00\n tr on\n lst off\n lstdo off\n*-------------------------------\n*\n*  PRINC"
  },
  {
    "path": "01 POP Source/Source/GAMEEQ.S",
    "chars": 8352,
    "preview": " tr on\n lst off\n* gameeq\n*-------------------------------\n*\n*  Equates\n*\n*-------------------------------\nchtable1 = $60"
  },
  {
    "path": "01 POP Source/Source/GRAFIX.S",
    "chars": 28760,
    "preview": "* grafix\nCopyProtect = 1\nEditorDisk = 0\norg = $400\n tr on\n lst off\n lstdo off\n*-------------------------------\n*\n*  PRIN"
  },
  {
    "path": "01 POP Source/Source/HIRES.S",
    "chars": 26169,
    "preview": "* hires\norg = $ee00\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mech"
  },
  {
    "path": "01 POP Source/Source/HRPARAMS.S",
    "chars": 753,
    "preview": " tr on\n* hrparams\n\nhrtables = $e000\nhrparams = $00\n*-------------------------------\n dum hrtables\n\nYLO ds $c0\nYHI ds $c0"
  },
  {
    "path": "01 POP Source/Source/HRTABLES.S",
    "chars": 8289,
    "preview": "* hires tables\norg = $e000\n tr on\n lst off\n*-------------------------------\n org org\n*-------------------------------\n*\n"
  },
  {
    "path": "01 POP Source/Source/MASTER.S",
    "chars": 20002,
    "preview": "* master 3.5\nDemoDisk = 0\nFinalDisk = 1\n\norg = $f880\n lst off\n*-------------------------------\n*\n*  M  A  S  T  E  R\n*\n*"
  },
  {
    "path": "01 POP Source/Source/MISC.S",
    "chars": 13377,
    "preview": "* misc\norg = $f900\nDemoDisk = 0\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp VANISHCHAR\n jmp MOVEMUSI"
  },
  {
    "path": "01 POP Source/Source/MOVEDATA.S",
    "chars": 743,
    "preview": " tr on\n lst off\n\n* movedata\n*-------------------------------\n* objnames\n\nspace = 0\nfloor = 1\nspikes = 2\nposts = 3\ngate ="
  },
  {
    "path": "01 POP Source/Source/MOVER.S",
    "chars": 28963,
    "preview": "* mover\norg = $ee00\nPalaceEditor = 0\n tr on\n lst off\n*-------------------------------\n org org\n\n jmp ANIMTRANS\n jmp TRIG"
  },
  {
    "path": "01 POP Source/Source/SEQDATA.S",
    "chars": 1777,
    "preview": " tr on\n lst off\n\n* seqdata\n\nfcheckmark = %01000000\nfcentermark = %00011111\n\n*  Sequence table entry points\n\nstartrun = 1"
  },
  {
    "path": "01 POP Source/Source/SEQTABLE.S",
    "chars": 25271,
    "preview": "* seqtable\norg = $3000\n tr on ;TABS 15,20,40\n lst off\n lstdo off\n\n*-------------------------------\n* Seq table instructi"
  },
  {
    "path": "01 POP Source/Source/SOUND.S",
    "chars": 4425,
    "preview": "* sound\norg = $ea00\n lst off\n*-------------------------------\n*\n*   S  O  U  N  D\n*\n*-------------------------------\n or"
  },
  {
    "path": "01 POP Source/Source/SOUNDNAMES.S",
    "chars": 701,
    "preview": " tr on\n lst off\n\n* sound names\n\nPlateDown = 0\nPlateUp = 1\nGateDown = 2\nSpecialKey1 = 3\nSpecialKey2 = 4\nSplat = 5\nMirrorC"
  },
  {
    "path": "01 POP Source/Source/SPECIALK.S",
    "chars": 17559,
    "preview": "* specialk\nEditorDisk = 0\nFinalDisk = 0 ;removes all cheat keys\nDebugKeys = 0\n tr on\n lst off\norg = $d900\n*-------------"
  },
  {
    "path": "01 POP Source/Source/SUBS.S",
    "chars": 22871,
    "preview": "* subs\nDemoDisk = 0\nEditorDisk = 0\nCheckTimer = 0\norg = $e000\n tr on\n lst off\n*-------------------------------\n*\n*   S  "
  },
  {
    "path": "01 POP Source/Source/TABLES.S",
    "chars": 3131,
    "preview": "* tables\norg = $e00\n tr on\n lst off\n*-------------------------------\n*\n*  PRINCE OF PERSIA\n*  Copyright 1989 Jordan Mech"
  },
  {
    "path": "01 POP Source/Source/TOPCTRL.S",
    "chars": 25772,
    "preview": "* topctrl\norg = $2000\nEditorDisk = 0\nFinalDisk = 1\nDemoDisk = 0\nThreeFive = 1 ;3.5\" disk?\n tr on\n lst off\n*-------------"
  },
  {
    "path": "01 POP Source/Source/UNPACK.S",
    "chars": 10522,
    "preview": "* unpack 3.5\nThreeFive = 1\norg = $ea00\n lst off\n*-------------------------------\n*\n*  Sits in main l.c. bank 2\n*\n*------"
  },
  {
    "path": "01 POP Source/Source/VERSION.S",
    "chars": 200,
    "preview": "* version\norg = $dfd8\n lst off\n\n org org\n\n*-------------------------------\n\nTextLine asc \"Prince of Persia 1.0  9/7/89\"\n"
  },
  {
    "path": "02 POP Disk Routines/CP.525/CUBE.S",
    "chars": 2179,
    "preview": " lst off\n\n*------------------------------------------------- rotcube\n\nmainYoffset = 46 ;(192-60)/2\nbotYoffset = 72\nmainX"
  },
  {
    "path": "02 POP Disk Routines/CP.525/LOSHOW.S",
    "chars": 4471,
    "preview": " lst off\n\n org $c00\n\n*-------------------------------------------------\n\n dum 0\ncurpage ds 1\nxsave ds 1\nysave ds 1\nasave"
  },
  {
    "path": "02 POP Disk Routines/CP.525/POPBOOT0.S",
    "chars": 11353,
    "preview": "* boot\norg = $800\n lst off\n xc off\n\nREDFLAG79 = $23B ; in aux mem!\n\n*-------------------------------\n* $800 TS (0,0) boo"
  },
  {
    "path": "02 POP Disk Routines/CP.525/PURPLE.MAIN.S",
    "chars": 2764,
    "preview": "* purple.main\n\n lst off\n\n* The job of this routine is to set $DA to $01\n*                                ( in aux-zpage!"
  },
  {
    "path": "02 POP Disk Routines/CP.525/PURPLE.S",
    "chars": 1183,
    "preview": "* purple (put this file!!!)\n\n* This code sets $DA in aux mem to 1\n* if signature is found on track zero.\n\nPURPrun = $632"
  },
  {
    "path": "02 POP Disk Routines/CP.525/RYELLOW1.S",
    "chars": 1782,
    "preview": "* Ryellow1 (put this file!!!)\n\n* This code sets the high bit of $7C in aux mem\n* if signature is found on track zero.\n\n*"
  },
  {
    "path": "02 POP Disk Routines/CP.525/UPDATE.LS.S",
    "chars": 1589,
    "preview": " lst off\n\n org $300\n\n*\n* loresshow:0C00.0FFF ($400)\n* framedata:1000.6BFF ($5C00)\n*\n* buffer18 :6C00.7DFF ($1200 one tra"
  },
  {
    "path": "02 POP Disk Routines/CP.525/YELLOW.MAIN.S",
    "chars": 3811,
    "preview": "* yellow.main\n lst off\n\n* The job of this routine is to\n* set the high-bit of $7C in aux zpage.\n* (It does it by rotatin"
  },
  {
    "path": "02 POP Disk Routines/RW1835/DEMOBOOT.S",
    "chars": 2285,
    "preview": " lst off\n\norg = $1000\n org org\n\n*-------------------------------------------------\n*\n* 08/01/85\n* 07/02/87 mod for 3.5\n*"
  },
  {
    "path": "02 POP Disk Routines/RW1835/MOVE35.S",
    "chars": 3720,
    "preview": " lst off\n\n org $E00\n\nerrcode = 0\nget8bit = $E74C\n\nbuffer = $1000 ;7 tracks long\nbufferend = buffer+$7E00\n\nrw18 = $D000 ;"
  },
  {
    "path": "02 POP Disk Routines/RW1835/MOVE53.S",
    "chars": 3676,
    "preview": " lst off\n\n org $E00\n\nerrcode = 0\nget8bit = $E74C\n\nbuffer = $1000 ;7 tracks long\nbufferend = buffer+$7E00\n\nrw18 = $D000 ;"
  },
  {
    "path": "02 POP Disk Routines/RW1835/POPBOOT35.S",
    "chars": 2669,
    "preview": " lst off\n\n org $2000\n\n*-------------------------------------------------\n*\n* 06/28/89 Prince of Persia boot code\n* for r"
  },
  {
    "path": "02 POP Disk Routines/RW1835/RW1835.POP.S",
    "chars": 7529,
    "preview": " lst off\n tr on\n org $D000\n xc off\n\n*-------------------------------------------------\n*\n* 07/02/87\n*\n* Unidisk 3.5 inte"
  },
  {
    "path": "02 POP Disk Routines/RW1835/RW1835.S",
    "chars": 5267,
    "preview": " lst off\n tr on\n org $D000\n xc off\n\n*-------------------------------------------------\n*\n* 07/02/87\n*\n* Unidisk 3.5 inte"
  },
  {
    "path": "03 Disk Protection/CUBE.S",
    "chars": 2179,
    "preview": " lst off\n\n*------------------------------------------------- rotcube\n\nmainYoffset = 46 ;(192-60)/2\nbotYoffset = 72\nmainX"
  },
  {
    "path": "03 Disk Protection/LOSHOW.S",
    "chars": 4471,
    "preview": " lst off\n\n org $c00\n\n*-------------------------------------------------\n\n dum 0\ncurpage ds 1\nxsave ds 1\nysave ds 1\nasave"
  },
  {
    "path": "03 Disk Protection/POPBOOT0.S",
    "chars": 11353,
    "preview": "* boot\norg = $800\n lst off\n xc off\n\nREDFLAG79 = $23B ; in aux mem!\n\n*-------------------------------\n* $800 TS (0,0) boo"
  },
  {
    "path": "03 Disk Protection/PURPLE.MAIN.S",
    "chars": 2764,
    "preview": "* purple.main\n\n lst off\n\n* The job of this routine is to set $DA to $01\n*                                ( in aux-zpage!"
  },
  {
    "path": "03 Disk Protection/RYELLOW1.S",
    "chars": 1782,
    "preview": "* Ryellow1 (put this file!!!)\n\n* This code sets the high bit of $7C in aux mem\n* if signature is found on track zero.\n\n*"
  },
  {
    "path": "03 Disk Protection/UPDATE.LS.S",
    "chars": 1589,
    "preview": " lst off\n\n org $300\n\n*\n* loresshow:0C00.0FFF ($400)\n* framedata:1000.6BFF ($5C00)\n*\n* buffer18 :6C00.7DFF ($1200 one tra"
  },
  {
    "path": "03 Disk Protection/YELLOW.MAIN.S",
    "chars": 3811,
    "preview": "* yellow.main\n lst off\n\n* The job of this routine is to\n* set the high-bit of $7C in aux zpage.\n* (It does it by rotatin"
  },
  {
    "path": "04 Support/DRAZ/F/DBS",
    "chars": 348,
    "preview": " @@AABBCCȑDZȑDD珎였ߟر였رEEǟǟ였FF㟞였珳揀ϟ̟߱ǟGGǏ珀ϏጀߟDZϱ瘀𰆀ƍHH䀀은Ɓ́ㆀرƁ́ᆀ은䀀䀀س挀II䀀ͱ́䀀은JJ䀀은옳㰘ƌر윃΁Ι䀀ƍ昛KK̙Á옳「ؙ̍ƙ㌀ƀ́ᆀƍ̱ƍÁسر쌀رƍϱLL쟀ƁƟر쟀ƁƱƁ㰌ط"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.ALPHA",
    "chars": 164,
    "preview": "+Y`b`k`t`}````````````````````\ba\u0011a\u001aa#a,a5aEaNaWa`aiara{aaaaaaaa\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007྆\u0001\u0007澆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b椼\u0001\u0007\u0001\u0007憆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.CHTAB5",
    "chars": 476,
    "preview": "-]``a{bVc$ddue\u0007ffng\bhh\\i6j\u0010k\u0013kkol\u0005mWmm+nn\u001boo\u0012plppOqqUrrUsssOtt]u\u0003vQvvv5www\u0004\"ß🀀🀀𕀀׀׀ꕀꅀꁀ\u0005&ÿծծՀ׀ꃀ\u0006#㟀ժݟ׏ՏՂՂ\u0007\u001f🀀뀀🀀պЪ݂ݪݪ\u0006\"뀾🀀׊ׂ"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.CHTABLE4",
    "chars": 302,
    "preview": "\u0013)``awbRc&dde\u0016ffgEhhijkkDl\u0018mmm\u0005\"ß🀠߀߀߀ꇀꃀꁀ\u0006#࿀瀀🀀🀀🀀ԪԪ\u0006\"࿀𿀀󏀀߀߀ꟀꟀꏀ\u0007\u001f🀀ρժ߀\u0006#𿀀վԞԎԯկի\u0005&🀟Ǐׇއ܆܂߂߂߀߀🀀🀀\u0004&ꏀꏀ뇀녀녀࿀࿀\u0004%𿾀݀݀߀ꀀꁀ\u0006!🀀𿀀烀տտկЂկ\u0005$蠀ßǟ"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.CHTABLE4.W",
    "chars": 101,
    "preview": "\u0014+``aa/b\nccd$eeDffg\u0016hhxi3j\u0007kkl$nn\u0004\"ß🀀\u0005\"\u0006\"࿀𿀀󏀀\u0007\u001f\u0006\"ߏ\u0005$🀟LJ🀀\u0004%ϟ🀀\u0004$\u0004#𿀀\u0005$\u0004#\u0004#\u0005\"\u0005$\u0005%࿀ߟ񇀀\u0006#\u0005#\u0007,࿀࿀࿀🀀񇀀ເ࿀ྀ\u0007,🀀𸀀𼀀\u0006$ϟߏ"
  },
  {
    "path": "04 Support/DRAZ/F/IMG.TEXTSET",
    "chars": 164,
    "preview": "+Y`b`k`t`}````````````````````\u0007a\u0010a\u0019a\"a+a4aDaMaVa_ahaqazaaaaaaaa\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007྆\u0001\u0007澆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0007椼\u0001\u0007\u0001\u0007憆\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ADVANCE",
    "chars": 226,
    "preview": "(\r1c&\u0001\u001fe\u0006%\u0001\u0006\u0015d\u000b\u0001\u0004\u0017\u0006\u0005\u0004\u0004d\u000e\u0007\u0002\u0001\u0011\u0004\u0005\u0002Ϗǜ\u00054.\u0011\u0004\n\u000b\u000b3/\t\u0005\u001d%6\u0001,\n0\u0004\rc4\r\t6,4\u0005\u0001\n\u0006c?\u0005\u00065-;\b\u0001\u0003\u000bd5\u001dd4\u0001 3-\u0007\u0001*\u0001\u0004\u0004\f6-\u000b\u0001\b\u001f\u0004\u0001\u0001\u0007\u0004\u00065˃,\u000e\u0004\u0004\b\u0004\u0001\u0006\rc\u0011\u0004\u0002\b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BASIL",
    "chars": 326,
    "preview": "$\u00047G4@H6\u000f\b\u000f\u001406\u0001%'\u0004\u00116Հ)\u0005Օ\u0004\u0015\u0005\bՕ՝\u0004\b6#\u0004\u0001ꪫ\u0004\r\u0004ࠠ\u0002\b6\u0006\u0007\u000f\u0006\u0004\f\u0001\u0006\u0007\u00106\u0006\u0004\u0007\u0004\nՕ\u0012\u0013\u00146ՀŠ\u000f\u0007\u0015\u0014\u0014\u0001\u00146\u0001$.\u0015\u00136ՀX\u0016\u00126F\u0015(6-\u0018\u0014Հ\"6-.!\t\u000b+Հ#Հ&Հ\u0001\u000e\u00136\u0006\u0004ח\u000f\u0005ꊂ\b\u0016\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BIGBLOX",
    "chars": 379,
    "preview": ";0đđđđđ7đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ040đđđđđđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ00đđđđđ0đđđđđ0#\u00010đđđĐ!đđđđđđ0ݮ00߿ʎʟߊ!"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BIGBLOX2",
    "chars": 390,
    "preview": ";0đđđđđ7đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ040đđđđđđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ00đđđđđ0đđđđđ0#\u00010đđđĐ!đđđđđđ0ݮ00߿ʎʟߊ!"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BLADE",
    "chars": 829,
    "preview": "\u0013;z8vđđđđ5ĐĐĐĐ\bժժժժժժժժժժժժժժժժժժժժA/\tժժժժժժժժժժժժժժժժժժժժAđđđŜ.đđđŕ\u000bժժժժժժժժժժժժժժժժժժժժA袈/\u000eժժժժժժժժժժժժժժժժժժժժAǗđđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BLONDGIRL",
    "chars": 142,
    "preview": " đđđđđđđđđđđđđđđđđđđđđđ\u0012\tđđľߟߟߟ\n\u0006\u0003\u0015\u0004đđđđđđđđđđđđđđđđđSEđđđƙSEȢSBǙőőőőSES\u0019Eđđđđđđđđđđđđđđđđđđđđđđđđđđđđđđ\u000e\u0004\u000e\u0007\b׿đđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BLUELINE",
    "chars": 160,
    "preview": "111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BONES",
    "chars": 417,
    "preview": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ000đđđđđ0đđđđđ0đđđđđ0##0đđđĐ!đđđĐ!đđđđđđ0ݮ000߿ʎʟߊ!߿ʎʟߊ!đđđĐ2ˆȢ$\u0006ˆȢ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.BYZ1",
    "chars": 336,
    "preview": "\u0007\u0007\u0007\n0đđđđđ\u0007\u0007\u0007\u0007đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ0∢0đđđđđđđđđőđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ\u0001\u000fđđđđđł\u000f\u0001\u000fđđđĐ\u000fݮ\u000f߿ʎʟ߂\u000fˆȢ\u0001\u000fđđđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.C5.B",
    "chars": 357,
    "preview": " 111)11#\u0004\n)11\u0004ו\u0005)11Հ\b\u0004\u0004\u0002\b\u0004)111)11վ\b)11\n\u0001\u0003\u0004А\u0005)111)11\u0004\u0004ח\u0006)11Հ\b\u0004\u0004𠨨ߟ\u0005)111)11վ\u0005\u0005\b)11\u0005\u0007\b)11%\t)111)\u001c\r1՞\u0004\u0005\u000b)\u0004\n\u0006\u00111\u0005\u0004\t)\t\u0005\u0007\t\u000b1\u001f\u0002\r)\b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLEANCLIMB",
    "chars": 282,
    "preview": "\fGƂР\u0006\u000fÏ\b\u0007\u0010\f\u0003\u0007\u0004\u0001\u0002\u0004Ώ\f\u0005ڀ\u0004\f\u0004\u0006\n\f\u0004\n\u0005\f\u0004PԀ\u001f\u001d\t\u0006\f\u0004PA\u0002\u0002\u000e\fPA\u000e\r\u0007P\n\u0007\t\u0018\u0005\u000e\r\u0004Z\u0005\u0005\u0007\u0001\u0013\u0005\u000e\r\u0007wρ\u0011\u0006\u000e\r\u0007P#\u0004\u0004\u000f\u0001\u0004\u000e\r\u0004P\u001a\u0004\u0017\u000e\r\u0004P\u000b\u0012\u0005\u0010\u0004\u0004\u000e\r\u0006P&\u000f\b\u000e\r\u0006P&\r\b\u000e\r\u0006P="
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMB.CLEAN",
    "chars": 444,
    "preview": "\f\b\u0007\f\u0003\u0007v\u0004#\f\u0005ڀy\u0002\u0004\u0015\f\u0004x\r\u0004\u0015\f\u0004c#\u0004\u0001\u0015\f\u0004\u0018\u0006\u00043\u001e\t\u0003\u0017\f\u0004\u0015\u0002\u000fw\f\u0015\r\bE\u0004\r\u0004\u0019\r\u0007\u0015\u0017\u0001\u0001:\u0004\u0005\u0002\u0002\u0017\r\u0004p\u0016А\u0017\r\u0007\u0017o\u0004\u0002\u0018\r\u0007\u0019\u0004\u0007\u0005x\r\u0004\u0016\u0004\u0005\u0002\u0007\u0006<\u0007\t\u001c\r\u0004\u0016\t\u0006:\u0005\u0005\u0007\u0001\u0016\r\u0006\u0015\u0018\u0001Tρ\u0014\r\u0006\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMBUP",
    "chars": 219,
    "preview": "C>z>\u0004l>\u0005\u0002l>Հ\u0004l>\rm>>\u0004x>\u0002\u0004j>\n\u0006j>\u0006\u0001j>\u000fk>\u0006\u0004%\u0004\r\u0004`ո\u0002\u000f\"ռ\u0005\u0002\u0002^\f\b\u001c\u0011Аd\u001b訪\u0001\u001c\u0010\u0004\u0002e\u0004\u0007\u0005$\u0004\u0005\u0002\u0007\u0006#Ձ\u0007\tg\t\u0006\"\u0005\u0007\u0001a\u0017\u001f\u0016ρ_>\u0016\u0005\u0004_Հ\u0005#\u000f\u0004e\u0004\u0007\u0006#\u0012\u0005]\u0005\u0004‚\u0004#\u001bZ\u0016\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMBUPB",
    "chars": 337,
    "preview": "\u0006N\u0018\t\u0003\u0006\u0007\u0005\u0004\u0005\u0003\u0006\u0003\r\n\r\u000b\t\u0017\u001a5\u0006\u0001\u0004\u0001U\u001a\u001e\u0004!\u0005D\f\u001a\u001d\u0004\u0011W\u001a%\u0005\rW\u001a%Ƈ\u000e\u0007W\u0019!\t\u000f\u0006U\u0019\u0004,\u0013\u0006U\u0019\u0004\u0018\u0004\n\u0013W\u0019\u0004\u001f\u0001\u0005\u0011d\u00046\u0001\u0011\u0006O\t\u0004\u0005(\u0004\r\u0006K\t\u0002\u0004+\u0004\u000f\nj\u0017\u0005\t\u0010\n\u0004\u0005\u0002\u0004\rW\u0019\u0005\u0001*\u0001\rW\u0018\u0007*\u000b\b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.CLIMBUPC",
    "chars": 439,
    "preview": "j\u0015\u0003\t\u000e߿߿\u000bj\u0016\b\bࠀ :0\u0005\u0016\u0006Ą\u0007\u0004\b\u0004\f\u0019\r\u0004\u0006\u00075\n\u0006.\u000b\u0019\f\f\u0019\u0006\u0006\u0005\u0007@\u000b\u0019\u0019\b\u0011\r\b\u0004'\u0016\u0005\u0019\u0019)\u0001\b\f\u000b\b\u0004\u0019\u0019-\u0004\u0001\u0019\u0001\n\b\u0004\u0004\u0019\u00120\u0006\u0007\u0016ᡁ\b\t\u0004\u0018\u0005\b,\t\n\u0004\u0014\f\u0001\u000b\n\u0005\u0018\tA\u0002B\n\u0005\u0018\u00176&\u0006\u0016\t\u0005\u0018\u0014\u0011\n\u0004\u0010\u0005"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLL1",
    "chars": 231,
    "preview": "111)111)111)111)111)111)111)11Հ()11\t )11վ\r\")11\u0005\u0007#)111)11Ã+)11՞\u0007$)11\u0001\u0004\u0001\u0002')11Հ\u0004,)111)11\u0004+)11\u0006!)11\u0005\u0002\u0004\u001b)11\n\u0004\u001b)11\u0005,)111)11Հ\u0004\u0016"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLL2",
    "chars": 245,
    "preview": " 111)111)111)111)111)111)111)111)111)111)111)111)11\u0004 )11Ճﯯ )11\u0004\u0001\u0002\")111)111)11Ձ\u0005&)11$)11\u0004')111)111)111)11Ճ\")11\u0001\u0004\u001b)11հ\b\u001b)1"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLL3",
    "chars": 213,
    "preview": " 111)111)111)11Մ\u0007\u0015\u000b)111)111)111)11Հ*)11\u0004!)11Տ\u0001Î\")11\u0002%)11Հ*)11\u0004*)11Հ\")11׷!)11\u0001￟\")11Ŕ%)11Հ-)111)11\n\u0004 )11Ã\")11տ\u0001\u0003!)11%)11Հ."
  },
  {
    "path": "04 Support/DRAZ/F/PAC.COLLAPSE",
    "chars": 175,
    "preview": "ᅲ\u0004\b0\f\r\u0001\t\u0005\u0005\u0004\u0004\u0004\u0004Ϗ\b\u0007\b\u0006\f\u000b>\u0005\u0004D\u0004e\u0018\n\n3}\u0001\u000f\u0007\u0005\u0007\u001d\u0006\u000b\u001c\u0007\u0004\u001c\u0007\u0004$8\u0006B\u0007\t 8\tG\u0007\u0005\u001c3\bG\b\n\u0004\u0014,\u0004߿P\b\u0005\u0004\u0014\u0002\b\u0001\u0006\u0002\u001b\f&\t\u0005\b\r\b\u0007\u0004\n\u0001\u0003\u000f\t\u0004\u0016\u000e\u0018\t\t\u0004\t\u0005\u0004\u0001\t\r\b\u0002\u0001\u0010\u0011\u0013\u0007\t\u0003\f\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DBS",
    "chars": 262,
    "preview": "\t㣱\t\u0005\tBR\u0005\u0006\u0001\u0001\t\u0001BQ\u00118\u0005Q౛\b\t8\u0006ـ\u0006Q𘍍𜎇\t8؀\u0005Q\t8\u0006ۀ㶶1\u001c࿃ᱱǀ\t8\u0005.񑘘\u001c\u0005񛛙\t\u00078 \u0007\u0001\u001cƆdž\t8񛘘񀀀ُ٘ \u0007\u0001\u0006\u000b\u0005\n\u0006漀\t\u00018\u0005 \u0007\u000b\u0011\u0001\u0001\t㳟8\u0005 \u0007\u000b惃\u0011\u0005\t8\u0005π 񛘘\u0007\u000b\u0011\u0005ؘ\u0007\t\u0005>\u0007 𙍌\u0007\u000b\u0006\u0011\u0006\t"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DRAW",
    "chars": 193,
    "preview": "\u0002\u0018*!\u0006-h\u001a\u001e\u0015h\b\u0006\u0004\n\u0005\r\u0013/\u0006\u0013\u0005\u0012\b\u0001\u0007\u0006\u0002\b\u0002\u0001\u0004\u0004\u0007\u0002-:\u0005\u000b\u0017\u0005\u0007\u0001\u0005\u0006,S%\u0011\u0001,Y𸸜\u0004\u0004\u0004\b\u0007\u0006,m\u0004\u0007\u0001\u0006\u0007,:\u0007\u0013\u001f\u0011,\u0007\u0007%\u0005\u0001\u0004\u0007\u0004\u0007\u0004\u000f\u0004\u0006\u0004-\u0004\u000f%\u0005\u0002\u0005\u0004\u0001\u0004\n\u0004\u0001\u0005.\u0004\u0001\u000e$\u0004\u000f0.\u0007\u0004F\u000b\t\u0005\u0005/V\u000e"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DRAW1",
    "chars": 248,
    "preview": "111)111)111)111)111)111)111)11\u0004\u0004\u0017)11\u0005\u0004\u0005\u0004Օ\u0012)11Հ\u0004\u0001\u0001ʺ\r)11\u0004\u0005\t\u000e)111)11\u001c\r)11ո\u0004\n\u0006\u0011)11\t\u0005\u0007\t\u000b)11Հ\b\u0006\u000b)11\u0018\u0001\u0011)111)11\u0005\n\t\u0005\f)11\u0004\u0005\u0007\u0006\u000b)11\u0005"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.DRINK1",
    "chars": 284,
    "preview": "1,1.1,1#\u0004\u00071,1\u0004ו1,1Հ\b\u0004\u0004\u0002\b1,1.1,1վ\u00051,1\n\u0001\u0003\u0004А1,1.1,1\u0004\u0004ח1,1Հ\b\u0004\u0004𠨨ߟ1,1.1,1վ\u0005\u0005\u00051,1\u0005\u0007\u00051,1%\u00061,1.1,1՞\u0004\u0005\b1,1\u0005\u0004\u00061,1\u001f\u0002\n1,\u0006\t.1,\f\u0003\u0005\u000bՏ\u0004\u0004\u0003"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.EXITARCH",
    "chars": 358,
    "preview": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0\u001dSđđđđđđ0đđđđđ\u001dSݮ0\u001d 2đđđđđ0đđđđđā\u0017\t\u0005\r20#𸞇\r2đđđđđđ0đđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FALLWSWORD",
    "chars": 87,
    "preview": "m\u0005\u0007\u0004\u0004\u0006\u0001\u000b\u0001\u0005\u0006\u0004\u0005\u0011\u0005\u0004\u0006\u0002\u0004\u0002뿟\u0007\u000f$స\u0012\u0007\u0010ఘ\u0005\u0002\u0002\u0004\u0004\u0004\n\u0002\u001f!𸎇\u0004\u000b\u0004\u0010𘎇\u0005\u0001\b\u0006\u0004ꪪ\u001a\u0001\u0005\u000b\u0003\u0004\u0005\u0007\u0001\u0019\u0005\u0001\u0004\u0006\u0001\u0004\u0004\u0004\u0019Ԕ݀\u0004Հ\u0004\u0001տ\u0004\tЀ\u0005\u0006\u0004\u0004\u0004\u000eE"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FANCYARCH",
    "chars": 361,
    "preview": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0qđđđđđđ0đ3ݮ0\u0001ֺֺֺֺֺֺջ3đđđđđ0đđđđ\u0018\u0001\u0007\u0004݈ݪ30%𾏀ջ3đđđđđđ0đđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FANCYEXIT",
    "chars": 499,
    "preview": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ00đđđđđ0đđđđđז׶ֶֶַ֖֖֗ז׶֖п݈ݪ00ճճճճճճճճ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FITING",
    "chars": 133,
    "preview": "m\u0005\u0007\u0004\u0004\u0006\u0001\u000b\u0001\u0005\u0006\u0004\u0005\u0011\u0005\u0004\u0006\u0002\u0004\u0002뿟\u0007\u000f$స\u0012\u0007\u0010ఘ\u0005\u0002\u0002\u0004\u0004\u0004\n\u0002\u001f!𸎇\u0004\u000b\u0004\u0010𘎇\u0005\u0001\b\u0006\u0004ꪪ\u001a\u0001\u0005\u000b\u0003\u0004\u0004\u0005\u0007\u0001\u0004\u0019\u000e&\u0001\u0004\u0005t\u0004\u0004\u0004\u0006\u0004\u0004\u0001\u0001q\u0007Ͽ\u0004\u0006\u0001\u0004\u0001\u0005\u0003\u0007l\u0004\u0004\u0002\u0006\u0007\u0005\u0011x\u0018Д\"w݀\u001c𜇁 u ฎ\u001fs\u0004Հ#\u0004\u0001տ\u0004\t\u001bs"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.FLAME",
    "chars": 558,
    "preview": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0R\u0004\u0011đđđđđđ0đđđđđđF\u0005\u0006\u0004\rݮ0ođđđđđ0đđđđđ\u0014\u0005\u0006A0ođđđđđđ0đđđđđđoݮ00đđđđđ0đđđđđז׶ֶֶַ֖֖֗ז׶֖п݈ݪ00"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GOSTONES",
    "chars": 414,
    "preview": "7\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ000đđđđđ0đđđđđ0đđđđđ0##0đđđĐ!đđđĐ!đđđđđđ0ݮ000߿ʎ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GRID",
    "chars": 162,
    "preview": " 111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111)111"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARD",
    "chars": 436,
    "preview": "$\u0016\u0011E\u0005\f0\u0006\u0004q6\u0004\u0006Օ\u0006\u0007B\u0005\f2\u0004\u0004\u000f\u0003\u0001\u0004\u0006\u000e\r\u0013\u00112\u0006Հ\u0001\u0006\r\u0004Օ\u0004\u0003\f\u0005ꪪ\u000e2\u0004(\u0004\u0005Ӄ\u0013\u0007\u0004\u0001Ъ\u00076\u0018\r\u0005\u0005\u0005ʊ\u0016\u0006\u0004\u0005\u0004\u00076\u0013\u0013%\u001d6\u0006\u0004\t\bՀ\u0005'Հ&6\u0004\u0004\u0007ח\u0007\u0002(\u0004*6Հ\u0001\u0004\u0001\u0006\u0004b\u00046\u0004@56Ѐ&\u001a=6\u0004\u0001몪\u0006\f\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMOD",
    "chars": 425,
    "preview": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u000b\u0004\u0005\u000bꊂ\u001f1Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u00051\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u00051Հ\u0005\u0018\t#ՀՕ\u000e1\u0004\u0004\u000b1\u0001\u0004!1Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u0019)1\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f)11\u0006\u0005ّ\fՀ 1\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\f\u0005)Հ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMOD.BK",
    "chars": 407,
    "preview": "(\b(\b1\u0012\u0005\u00121\u0004+Վ\u0004\u000e\rտ\u0007\u0004ԕ\f1\u0002\t ࠠ\u0004ʪן\u000b㡡\u0004\u00071\u0007\u0004\u0005Յ\u0007\u000f\u0007\u0003\u0004\u0012\u0005\t\u0001\u0005\b1\u0005\u0004ן\r&!1\u0004\u0001\u0014՟\n\u001dՀ'1)ڊ\f&1Ճ.\u0006\u0004\u0004\u0001\u0004\rռ\u0005\u0004\u000b\f1\u0002\t\u0005\u001b\u0006\u0018\u0007\u0005Ã\u00061\u0006Օ\fՃ\u0014\u0017\u0005\u0001\u0003\u0004\u00061\u0005\u0007\u0004\u0001Ԗ\u0001\u0004\f\u0001ޖ\u0006\u000b\u0017"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMOD2",
    "chars": 432,
    "preview": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u0004\r\u0004\u0005\u0004\rꊂ\u001f1Ճ\u0005֖\u0003\u0001\f\u0005\u0004\u0001\u0002\u0001\f\u0005ח\u0007\u000b1\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u00041Հ\u0005\u0018\t#ՀՕ\u000e1\u0004\u0004\u0004\r1\u0001\u0004!1Ճ\u0006ŕ֖\u0003\u0001\fՀ\u0001\f\u0019)1\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\u000e)11\u0006\u0005ّՔ\rՀ 1\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUARDMODEL",
    "chars": 429,
    "preview": "111)1Հ\u0005\u0004\u0018Հ*)1\u0006\b\u000b\u0004\u0005\u000bꊂ\u001f1Ճ\u0005֖\u0003\u0001\n\u0005\u0004\u0001\u0002\u0001\n\u0005ח\u0007\u00051\u0001ࠠ\u0006\u001c\u0005ʪ\u0005\u0015\u0005׮\u0002\u0004\u00051Հ\u0005\u0018\t#ՀՕ\u000e1\u0004\u0004\u000b1\u0001\u0004!1Ճ\u0006ŕ֖\u0003\u0001\nՀ\u0001\f\u0019)1\u0001ࠠ\u0006\u001c\u0004\u0006\u0004\f)11\u0006\u0005ّ\fՀ 1\u0004\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\u0010\u0001߿\f\u0005)Հ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY1",
    "chars": 373,
    "preview": "(\n\u0004\t\u0005\u0007A\u001c)!\b\u001e\t5\u0006\u0001%'\f\r5\n\u0001\u0004\u0006\u0016\u0001\u001c\u0001\f\r5\u000e\u0006\u0001\u0004\u0002\u0004\u0014\f\u0004\r\b\u0004\u0004\u0004\t5\u0007\u0002\r\u0005\u0010\u0001\u0005\u0001\f\u0005\u0001\u00115\u0004\u0001&\u0004\t\"\u0001\f\b4\u0007\u001d\n\u0015!\u000b\u000b4##\u0014\u000b\u000b\u000e4\u0005\u0005\u0012\u000e\t\u0010#\u0001\b\u00064\u0004\u0005\u0004぀\u0005\u0005\u0004\u0001\u0005\u0010\u0007\u0007\u00065\u0010\u0003\u000b\u0001\u0005\u000e\u0005\u0004\u000b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY1.CLEAN",
    "chars": 300,
    "preview": "(\n\u0004\t\u0005\u0007A\u001c@`&\u001d\b\u001d\t5\u0001#%\f\r5\u0006\u0001\u0004\u0006\u0010\u0005\u0001\u0015\u0006\u0001\f\r5\n\u0006\u0001\u0004\u0002\u0004\t\n\f\u0004\f\b\u0004\u0004\u0004\t5Հ\u0002\r\u0005\t\u0006\u0001\u0005\u0001\u000b\u0005\u0001\u00115\u0001%\u0004\t\u0011\u0010\u0001\u00174\u0004Հ)\u0015\u0012\u000e\u001a42\u0018 \u001c4\u000434-.+4-.+3πՀ\"Հ&վ\u0001\"4\u0006\u0002\t\u000f\u0005\u0016\u0004\u0001\u0005\u0005\r4"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY1.REV1",
    "chars": 346,
    "preview": "&\u00044\u0002\u0003(^6\u0001\u001d\u0004^6\u0006\u0001m4\nǟ\u0002\u0004c4Հ\u0002\u000e\u0007%\u000106\u0001%&\u0005\u0004\u00106Հ)\u0005\u0001\u0004\u0017\u0005\u0002\t\u0004\u0004\b6\u0001#\n\tߟ\u0004\r\u0004\u0005\u0001\u0002\b6\u0006\u0001\u0004\u0011\u0006\u0001\f\u0001\u0006\b\u00126\n\u0001\u0002\u0004\u0007\u0004\n\u0012\u0013\u00146Հܸ\u000e\u0007\u0015\u0014\u0014\u0001\u00146\u0001\u0007\u001c.\u0015\u00136Հ\u0005L\u0016\u00145F\u0015+5-\u0018\u0014Հ#5"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY2",
    "chars": 368,
    "preview": "*\u0012\u001ax\"\u0004\"\u0005 \u000b5\u0007\u001b\u0005\n\f,5\u000b\u0001\u0006\u0011\u000e\u000e\n\u0004\r6\u0011\u0005\u0001\u0007\u0004\t\u0007\u0001\u0005\u0003\u0010\u0007\u0005\f5\u0007\t߼\n\u0007\u0016\u0006\u0005\u0001\u0005\u0004\u00075\u0007\u0004\u000e#\u0010\n\u0004\u00145J\u0001\u000b\u001a\u0001\u00125\"'(\u0001\u000f5\u0005\b\nـ\u0004\u0006\u0018-\u0004\u0004\u00065\u0006\u0006\u0005\u0001\u0004\u0004\u0002\u0005\u0001\u0004\u0004\u0006\u0005!\r5\u0010\f\u0002\u0018\u0005\t\u0001\u0014𘌌\n5\u0004\u000e\t"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY2.CLEAN",
    "chars": 263,
    "preview": "*\u0012\u001ax\"\u0004\"\u0005 \u000b5\u0007\u001b\u0005\n\f,5\u000b\u0001\u0006\u0011\u000e\u000e\n\u0004\r6\u0011\u0005\u0001\u0007\u0004\t\u0007\u0001\u0005\u0003\u0010\u0007\u0005\f5\u0007\t߼\n\u0007\u0016\u0006\u0005\u0001\u0005\u0004\u00075\u0007\u0004\u000e#\u0004\u0010\n\u0004\u00145J\u0001\r\u001a\u0001\u00121P)\u0001\u000f1\u0004\u0004\u00061\r1r𘌌\n1\\*5\u0005\u001c\u0005\t\u0001\u00194\u000b\u0005\u0005\u001a\u0010\u0013\u0001\u0004\r4\u000e\u000f\u0005\f\u0005\u0005\u0001\u0001\u0013\u0004\u0004\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY2.REV1",
    "chars": 434,
    "preview": "\u000b\u0013\t2\u0001\u001d7\u001f?\u0004\u0001\u0004\u0006\u000b7\u0001\u0006\n?\b\f\b,\b\u0005\u0001%\t\t\u0005\u0005\u0004Ԅ\b+\u0005\u0001\u0004 \b\b\u0004\u0005\r\u0007\u001e\u0005\u0004\" \b\b\u0007\u001b\u0007\r( \b\b\u000b\u0001\u0006\n\u0006\t\u0004\bՀ\n\u0013!\t\t\u0011\u0005\u0001\u0007\u0004\b\u0007\u0001\u0004\u0002\b\u0005\u0007ݝ\u0004\u0005 \b\b\u0004\u0005\u0004\t߼\t\u0007\u0015Ձ\u0006\u0005\u0001\u0004ਨ\u0005 \b\b\u0005\u0017\r\u0015\u0015\n\u0005\u0014\u001c"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY3.CLEAN",
    "chars": 404,
    "preview": ")\u0007\u0006\u0006\u0005\u0006\t\u0004\u0006\u0004\n\u0004\u0005\u0017\u0004\u0017\u0007\u0005\u000e\u0007\u00065&'&6\u0001\u0005\u001c\u0004\u0004\u001a\u0006\u0001\u001d\b,\u000b\u0002\u0007\u0015\u0001\n\u0004\u0010\u0007\f5\u000e\u0001\u0005\u0001\u0001\u0017\u0001\b\u0015\u0001\u0004\u0001\u0007\b,\u0005\u0004\b\u0001\u0014\u0004\u000e\u0001\u000e\u0001\u0004\u00135\u0005\u0013\u0016+\f\u00154\u0001\u001a\u0011\u001b\u0007\u000f\u00154\u001d\u000f\t\u000f\u0004\u0006\t4\u0007\u0007\t\u0004\u000e\u0001\u0004\u0016\u0001\u0004\u00054\u0007\b\u0001\n\u0010\u0011\u0004\u0013\t"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY3.REV1",
    "chars": 479,
    "preview": "\u001a\u000e(ߟ\t\u0011\b\u0005\u0004\u0005\n\tس߾\u0001\u0004\u0004\u0005\u0007\u0001\u0004\u0004\u0002\u0005(\u0004\u0006\u0006\u0004\u0001\u0004\u0005\u000e\u0006\u0004\u0017ۀ\u0001\u001e+\u0006\u0005\u000b\u0011\b\"'+\u0001\u0006\u0004\u0004\u0004\u000b\u001b\u0006\u0001\"+\u0004\u0007\b\n\u0016\u0001\u0004\u0017\u0004\u0004\u0006+\u0004\u0007\u0016\u001cϿ\u0001ﮮ\u0004\u0012Ͽ\u0001\u0004\u0005\u0005+\u0004\u0007\n\u000f\f\u0001\u0007\u0005\u000b\u0001\u0004\u0013+\u0004\u0007\u0004\u0001\u0004\u000f\t$\f\u0015*\u0001\u0004\u0006\u0010\u0001\u0004\u0005\u000b\u001b\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY4.CLEAN",
    "chars": 323,
    "preview": ",\u001d\b\u0004:\u0016\nb\u0001\t\u0017\u0005\u0007\u0005\u0018a,\u0006\u001c`\u0007\u001c\n\u0001\u0006\u0004\u0004\u0004\ta\u000b\u0001\u0004\u0004\u001d\u0005\u0001\u0005\u0001\u0001\u0004a\u000e\u0010\u0010\u0001\u0007\u0007`\u0013\u0004\u0001\u0001\b\u001e`\n\u0005\u0004\u0012\u0006\u0006\u001c`\u0007\u001a\u0001\u000e𸸜\u0005\f\u00011.\b\u0005\f\f\u0007\n\t2\u0001.\u0014\u0001\u0004\u0004\f\u0006\u00062.\u0013\u0010\u0012\u0004\u0004\u0006\u0004\u00062.\u000f\u0001\u0001\u0003\u0007\f\b\u000b1.,*1/5\u001da"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUY4.REV1",
    "chars": 375,
    "preview": "(\r1c&\u0001\u001fe\u0006%\u0001\u0006\u0015d\u000b\u0001\t\u0017\u0006\u0005\u0004\u0004d\u000e\u0007\u0005ꊺ\u0012\u0004\u0005\u0002Ϗǜ\u00054.\u0011\u0004\u0004ԔԔ\u0007\u000b\u000b3/\t\u0005\u0011\u0005%6\u0001,\u0007၁\u0015\u0010\u0004\rc\b\u0004\t\f\r\t6,\u0014\u0004\u0004\u0004\u0004\u0007\u0005\u0001\n\u0006c\u0010\u0003\u0001\u0004\u0001\u0005\u0014\u0005\u00065-;\b\u0001\u0003\u000bd5\u001dd4\u0001 3-\u0007\u0001*\u0001\u0004\u0004\f6-\u000b\u0001\b\u001e\u0004\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUYBLOCK",
    "chars": 477,
    "preview": "\u001a\u000e1\u001b\u001e\t\u0005<\u0004\u0019\u0004\u001f\u0001(\u0004\u0006\u0006\u0004\u0001\u0004\u0005\u0010\u0001\u0016\u0001\u0001\u0006\u0007+\u0006\u0005\u000b\u0011\u0010\u0001\u0001\u0001\u0014\u000f\u0001\u0006+\u0001\u0006\u0004\u0004\u0004\u0015\u0004\u0011\u0001\t\u0004\u0005\u0001\u0006𜾾\u0002\u0006+\u0004\u0007\b\n5\t\u001c+\u0004\u0007\u0016,1+\u0004\u0007\n\u000f\b\u0005\u000f\u0001\u0011(+\u0004\u0007\u0004\u0001\u0004\u000f\t\u0005\u0004\f\u0001\u0007\f\t*\u0001\u0004\u0006\u0010\u0001\u0004\u0005\u0016\u0004\b\u0018\u0001Օ\u0007*\u0005\u0006\n\u0003\u0006"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUYMODEL",
    "chars": 411,
    "preview": "1(\b1)11Հ))11\u0005\u0001\u0004\u0006\u0004\r\u0001\u001f11\t\u0006\u0003\u0001\f\u0006\u0001\r11\u0004ԅ\u0013\nǟ\u0002\u000411\u0005\u0004\u000e𰸜\fՀ\u0002\u000e111\u0001!11Հ\u0001\b\u001e)11\u0005\u0005߿\u000e)11\f\u0004\u0003\u000eՀ 1\u0005\u0004\u0016\u0005\u0002\t\u000f\u0006\u00121\u0006\u0002\t\u0004\u0004\u000e0\u0007\u0005\u000e1\u0005\u0005\u0001\u0002\u000e1\u000b\u0004\u0004\u00061\u0001\u0006\b\u0018Հ\u0001\t\u001eՃ\u0003\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.GUYMODEL.GD",
    "chars": 408,
    "preview": "(\b(\b1)11Հ*)11\u0004\u0005\u0004\r\u0001\u001f11\u0005\u0004\u0001\u0002\u0001\f\u0005ח\u0007\u000b11ʪ\u0005\u0015\u0005׮\u0002\u000411\u0004\b#ՀՕ\u000e111\u0001\u0004!11Հ\u0001\f\u0019)11\u0004\u0006\u0004\u000e)11\u0006\u0005ّՔ\rՀ 1\u0005\u0018\b\nа\u000f\u0004\u0004\u00131\u0005\r\u0001߿\u0004\u000f\u0005)\u0004\u0005Ǘ\u000e1\u0005ʊ\u0004\u0001\u000e1߿\u0005ꪯ\u0005\u0004\u00061\u0001\u0006\u0007\u0017Հ\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.HALVES",
    "chars": 434,
    "preview": "0ođđđđđ0đđđđđ;008+đđđđđđ0đđđđđđ4đǕ̹-ݮ00袨0đđđđđ0đđđđđ0ѓ/##0đđđĐ!đĐĐĐ!Đ9ݮ0u߿ʎʟߊ!\b\u0014\u0012\f\r\u001fˆȢ$\u0006\t\u0005\u0006\u0017\u0006\n\u0006\u001eđđđđđđ4\u0001\u0006ȸ)đƒÅȸ\b\u0005\u001a"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.HIBLOX",
    "chars": 360,
    "preview": "0\u0002\u0004\u0004\u0004\u0005\b\u0007\u0004\u000f\u0001\r\u0004\u000b\u0005\u0012\u00067\r\u0001\u0016\u000e\u0011\r\b\u0005\u0001\u0004\u0002\u00048\u0006\u0004\u0004\u0001ޟ\u0005\u0004߁\u001a\u0005\u0004\b\u00048\u0005\u001d\u0005\u00056\r9\u0005\u0001/\u0001\u0004\u0004\u001f\n8\u0005\u0001\u000b ߿\u0004\u0005\u0001\u0001\u0012\u000b8\u0004\u0007Ϗ\u0004\u0012\u0001\u000b\u000e\u00137\u0010\u0006\u0002\u0004\n\u0015\b\u0004\b7\u0005\t\u0012Ѐ\u0004\u0013\u0004\t\b7\u0001\u0005\b\"\r\u0001\f\u0001\r\u000e7\u0010\u0004\u000e\u0005\u0005\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.IMPALED",
    "chars": 248,
    "preview": "a>>J)\b/FǓǗǗ\n\"\u0004Ǖĕđđ/B,/Bф\u0006\u0005\b đēА0B񱐘+5BĐ\u0007\u0004ࠠ\u0005$Đ6>L-\u000b.J\u0006\u001f\u0006.FǓǗ뫋Ã\u001c\u0006đ/B\u0007\u0019.Bф\u0006\u0005\u0016ݷń0B񱑘\u0001\u0007\u0005\u0017໮2BĐ\b\u0004࣯\u0005#܀Đ3T)>\f.J)\t.FǗ×Ǘ\n \u0005đđđđ."
  },
  {
    "path": "04 Support/DRAZ/F/PAC.JUMPFALL",
    "chars": 449,
    "preview": "011\u0005\u0018011\u0007\u0012\u0005\u0001\u0004\u0004\u0016\u0012\u0005\u0014\u0005\b\u001c\u0004\u0004\u0006\u0001\u0012\u0007\u0001\u0005\u0011\u0004\u0006\u0004\u0002\r\u0003\u0015*\u0017\u0004\u0001\u000e\u0007\f\u0001\f\u0004\u0004\u000f\u000b\u0015\u0005\b\u001b\u0012\u0007\u0015\u0019\u000f\u0001\u0005\u0006\f\u0006\u0014\u0005\u0002\u0002\u0004\r1\u0004\u0005\f\u0004\u0001\u0004\u0010\u0004\u0004\n\u000b1*\u0019\u000f\u001f\u0001\u000f\u0005\u0004\u0005\u001b\u0011\u0005\u000b\u0005\b\u001a\u0004\u000b\u0004\u001b\u0001\u0005\u0017\u0004\u0006\u0002\u0004\u0002뿟\u0005\u0005\u000b\u0016\u0005\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.JUMPHANG",
    "chars": 213,
    "preview": "瀂\u0001\u0001\u0005\u0004\u0001\nՇ\u0004\u00048\u0007\u0005Օ\u0004\u0004\u0004\u0005ܬq\n\u0004Օ\b\u0007k\u0004\u0005חM\u0004\u0006\u0004!\u0002\u0006\u0007N\u0005\u0002\u0004\u0001\u0006\u0003\n\u0005\u0004\u0001\u0004\u0005\u0005\u0004\u0018\u0004\u0004חY\u000e\u0004\u0004\u0005\u0018\u0001\u0006\u0006\u0010\u0004\u0005\u0007\n\u0004\u0005\tܘ\u0004ꪨ\u001c\u0005\f\bN\u0005\u0002\u0002\b\u0001'\u0006\u0006\b\u0004j\u0004%\u0001\u0005\u0004쬬\u0004\r\u0004\u0004\u0003\u0001)\u0005\u0005\u0005\u0004`4\u0003\u0004쬼\u0001\u0002\u0002\b\u0001'"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.L1",
    "chars": 338,
    "preview": "\u001e\u0006\u0004'\u0005@G0\u0005@G0\u0005\u0019n0\u0005\u0017_\u0005\u0006\u00060\u0005\u0015\u0001\u0017ՁB\u0005\f0\u0005,\u0001\u0004\u0007\f\u0004\u0005\t\u00110\b,\b\u0004\f\u0005\u0004\u0004\b0\u0005,\b\u0005\u0013\n\u0007\u0005׿\u00070\u0005՟\u0006\u0005\u001d\u0006\u0018\u0004\u0001\u0004\u0004\r0\u0005\u0007Օ\u0006&\"0\u0005\u0006\u0004\u0004Հ\u0005\"\u0004Հ%0\u0005\u0001\u0005\u0007\r,\u0004(0\u0005ՀF<0\u0005\u00116<0\u0005\u000f\u001a\u001a=0"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.L2",
    "chars": 520,
    "preview": "\u000b\u0012\t\u0012\u0012\u0007\u0013p\u0007\u0004)#7,\u0007,\u0007!\t\bx\u000f \b\tX\u0019\u0001\u000e!\b\b0\u0018\u0016\u0013!\b\u0007.\u0004\u0004\u000b#\u000b\u0007!\t\u0006\u0004\b\u001f\u0004Օ\u001bו׿\u0006 \b\u0007\u0004Հ\u0005\u0001\n\u0007\n\u0001\u0004\u001b\u0005\u0004\r \b\u0007\u0004\n\r\n\u0005\t\"\u0004\u0012\u001c\u0004\u0004\u0004\u0006\u0004Հ\u0001\u0006\u000fՀ\u0001\n?\u001c\u0007\u0004\u0006\u0006\u0005&\u0004M\u001c\u0007\u0004\u0006\u0006,#\r\u000b\u001c\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.L3",
    "chars": 499,
    "preview": "\u000e\u0015-\u00027\u0006\u0002\u0004\u0002\u0017\u0002\u0010\u0015(\u0004\u0004\u0006\u0004\n\u0004\u0005\u000f\u0001\u0001\b\u0001\n\u0003\u0007А\u0007\u0015+\u0004\u0006\u0004 \t\u0001\u0004\u0001\u0005\u0010\u0001ᨪ\u0004\u0006+\u0006\u0005D\u0002\u0010\u0005\u0005\u0001\u0006,\u0006\u000b\u00072\b\u0004\u0004\u0004\u0010,\u0006\f\u0001\u0005\u0002$\t$,\u0006\u0005\t\u0001\u0013\u0005\u0004\u000b\u000f\t\u001c,\u0006\u0005\u0013\u0015\u0004\u0004\u0004\u000b\b\u001c+\u0005\u001a\u001a\u0005\t\u0001\fՀ\u0005\u0001\u0007+\u0004\u0005\u001e\u0012\u0007\u0012\n\r"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.LITEBRIX",
    "chars": 484,
    "preview": "0ođđđđđ0đđđđđ;\u0018ݐ\u000b\b08\u0007\u0007\u0007\u000fđđđđđđ0đđđđđđ4đǕ̹\u0005\u0007\u0007\u0007\u0005\nݮ00袨0đđđđđ0đđđđđ0ѓ/##0đđđĐ!đđđĐ!Đ9ݮ0o߿ʎʟߊ!߿ʎʟߊ!\fĐ\u0017ݐ\u000b\bˆȢ$\u0006ˆȢ$\u0006\n\u0007\u0007\u0007\u000f"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.MAGICFIRE",
    "chars": 428,
    "preview": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ000đđđđđ0đđđđđ0đđĒ’ʘȮ###ҀА%đđđĐ!đđđĐ!đđđđđđ0ݮ000߿ʎʟߊ!߿ʎʟߊ!đđđĐ2ˆȢ$\u0006"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.MSG",
    "chars": 258,
    "preview": "R\u0004\u0006\u0004(N񘌌\u0004\"\u0004\u00171\u0004Z\t\r\u0001 \t\u0001\u0001\u0005~\u0005漀\u000bՀ\u0006怀\u0006\u001a\u0005\u0004\u0004\u0006\u0001\u0007\u000b\u0001 \u0006~䶷\u0006\u0001\u000bՀ\u0006\u0006\u001a\u0004\u0004\u0005\u0006怀\u0001\u000b쀀\u001aΌ̌Ό\u0004̀\u0004̎̌̀̌̌Ό̌Ό\u0004\u0004Ό\u0006\u0001澀\u0001椼\u0005\u0004Հ\u0005\u0004\u0004t\t\u0001 \tǀt\u0005漀񀀀\tՀ\u0005J)憆漀󀀀\t\u00056\u0012)𘙘\u0005\u000bՀ\u00066\u000e\b\r"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.PANELS",
    "chars": 339,
    "preview": "/=\u0013=+<\u0010<);\u0001\u0011;\u0001)<\u0010<+>\u0013>/đđđĐ2\u0010đđđĐ2,6\u00106,Đ9\u0010Đ98\u0012=+⣦ͽͽͽͽͽβ⣦\u0010<)񑓙*񑓙\u0010;\u0001)ȉ϶̸ȉ϶\u0010<+\bꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007\u0007\u0012>/đđđĐ2\u0010đđđĐ2,6\u00106,Đ9\u0010Đ98\u0013\u0007\n\n\n"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.PRINCESS",
    "chars": 150,
    "preview": " đđđđđđđđđđđđđđđđđđđđđđ\u0016\u0006\u0004đđľ\u0006\fˋ\u000e\u0004đđđđđđđđđđđđđđđđđ\u000b\b\b\u001c\u0016Eđđđƙ\r+EȢ\u0014\t\t*BǙőőőő4\u001fE4\u001f\u0019Eđđđđđđđđđđđđđđđđđđđđđđđđđđđđđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1.REV",
    "chars": 447,
    "preview": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\"\u001b(\u000b\u001a\t\u000f\u001b\f\u000b%\u0001\u0004\f\u0019\u0006\u0001\u000e\u0001\u0006\b\u0013\u0001\u001f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\f\u0001\u0004Օ\f\u0006\u0002ߟ\u0004\u0006\u0004\u0005\b\u0019ƒۛ뛫\u000f\u0007\u0001\u0001ʺ\b\u0007\u0002ꪨ\u000f\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1.REV0",
    "chars": 427,
    "preview": "6/\f\u0004\u0005\u0013`\u0004\u0005\r\u0006\u0005\u0004\n\u0005\n\u0013+u\u0001\u0001\u0002\u0018\t)\u0011\u0001\u0015\u0004\f\u0001\u0005\u0001\u000e\u0001\u0002\u0007\u0005:\u000b\u0001\u0004\u0001\u0004\u0001\u0005\u0011\t\u0007\u0005\u0002\u0004%\u0012\u0005\u0004\u0004\n\u000f*\u0016\u000e!\u0012\u0005\u0017\u001c6\u0001\u000b\u0017\u0004\u0002\u0003\u0011\u001f\u000f\n8𼏇\u0007\u0017֓۟ۻ\u0013\u0019\u0010\u0004\u0004\u0004#\u0006\u0017\u0001\u001c\u0017 \u0001\u0006\u0007&\u0007\u0007\u0018\u001f\u0005\t\t\u0011\u0002\u0001<\u0015\u0001\u0004\u0011\u0005\u0007\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1.REV1",
    "chars": 431,
    "preview": "6/\f\u0004\u0005\u0013`\u0004\u0005\r\u0006\u0005\u0004\n\u0005\n\u0013+u\u0001\u0001\u0002\u0018\t)\u0011\u0001\u0015\u0004\f\u0001\u0005\u0001\u000e\u0001\u0002\u0007\u0005:\u000b\u0001\u0004\u0001\u0004\u0001\u0005\u0011\t\u0007\u0005\u0002\u0004%\u0012\u0005\u0004\u0004\n\u000f*\u0016\u000e!\u0012\u0005\u0017\u001c6\u0001\u000b\u0017\u0004\u0002\u0003\u0011\u001f\u000f\n8𼏇\u0007\u0017֓۟ۻ\u0013\u0019\u0010\u0004\u0004\u0004\u000f\u0005\b\u0006\u0017\u0001\u001c\u0017 \u0001\u0006\u0007\u0014\u0004\u0007\u0018\u001f\u0005\t\t\u0011\u0002\u0001\u001b\u000e\u0001\u0004\b\u0015"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1MID",
    "chars": 387,
    "preview": "(\n\u0004\t\u0005\u0007?\t\u001d\u000b\n\u0002\u001c\u000f\u0019\t3\f\u0001\u0016\u0006\u0004\u0002\t\u0001\u0006\u0005\u0001\b\u00053\u0006\u0004\u0004\u0001\u0004\u0004\u0005\u0005\u0001\u0015\n\u0001\u0005\u0005\u0006\u0004\u00053\u0006\u0005\f\u0010D\u000e3\u0005\u0018\u001e9\u0001\t4\u001d\u0010\u0007!\u0019\u00074\u001a\u0010\u0003\u0004\u0005\u000e\u0005\u0007\u00065\u0017 \u0010\u0015\u0001\u0004\b5\u0004\u0005\u0005\n\u0012\u0006\u0001\u0001\u001c\u0010\u0001\u0004\b5\u0005\u000b\u0001\u0007\u0004\u0004\u0001\u000f\u0001\u0004\u001b\u0001\u0006\u0005\u00114\n\r"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB1SM",
    "chars": 374,
    "preview": "(\u000f\t\u0004\u000ep\u0001\u0004\u0004\u001d\n\u0001\u0002\u0018\u00077\u000b\u0001\u0017\u0004\f\u0002\t\u0004\u0007\u0004\u0004\u0004\b\u00057\u000b\u0001\u0004\u0001\u0001\u0004\u0001\u0005\u0013\t\u000b\u0006\u00057\u0006\u0004\n\u000fB\r7\u0005\u0017\u001c7\u0001\b8\u001f\u0010\t\u001f\u0018\u00068\u0019\u0001\u000f\u0004\u0001\u0004\u000f\u0001\u0006\u0007\u00069\u0017\u0001 \u000e\u0001\u0016\u0004\b9\u0005\u0005\u0004\t\u0011\u0004\u0002\u0001\u001b\u0005\u0006\u0002\u0004\b9\u0005\u0006\u0001\u0004\u0005\u0003\u000e\u0006\u001a\u0006\u00188\t\u0005\u0002\u0004\u0001\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2",
    "chars": 433,
    "preview": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\"\u001b(\u000b\u001a\t\u000f\u0004\u0013\u0015\u0007$\u0001\u0004\f\u0019\u0006\u0001\u000e\u0001\u0005\u0006\u0005\u0018\u000f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\u000f\u0004\u0006\u000b\u0004\u0007\u000f\u0004\u0005\b\u0019ƒۛ뛫\u000f\u000b\u0003\u0006\u001b\u0004\u0005\u0014\u0004\u0007\u0001\b\u0019"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2.REV",
    "chars": 527,
    "preview": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\u0004\u001d\u001b(\u000b\u0004\u0007\u0005\u0005\t\u000f\u0004\b\u0004\u0006\n\u000b%\u0001\u0004\f\u0004\u0007\u0007\u0004\u0006\u0001\u000e\u0001\u0005\u0005\u0004\u0001\u0004\fՀ\u0001\u001f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\u0005坟\u0007\u0006\u0002ߟ\u0004\u0006\u0004\u0005\b\u0004߿߿"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2MID",
    "chars": 379,
    "preview": "*\u0012\u001aw\u0005\u0006\u0001\u0005\u0004\u0004\u0007\u0007\b\f\u0004\u0016\u0005\u0001\u0001\u000b4\b\u0007\u0006\u0003\u0001\u0001\u0004\u0007\b\u0005\u0001\u0001\t\b\u0005\u0001\u0005\u00046\u0004\u0001\u0004\u0006\u0004\u0005\u0007\u0004\b\u0004\u0017\u0001\r6\r\u0018\u0018*\f6\u001f\u000e\f(\n5\u0001\u0004\u0004\u0010\u0001\u0016\u0002\u0004\u0004%\u000b3\u0001\u0005\u0004\u0001\u0006\u0006\u000b\r\u0001\u0010\u000e\u00133\u0010\u0005\u0007\u0004\f\u0002\u0005\u0002\u0006\u000f\u0007\u0004\u0001\u0004\b4\u000b\t\u001b\u0004\u0004\t\u0014\u0010\u0001\t4\u0006\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB2SM",
    "chars": 357,
    "preview": "0\u0002\u0004\u0004\u0004\u0005\b\u0007\u0004\u000f\u0001\r\u0004\u000b\u0005\u0012\u00067\r\u0001\u0016\u0012\u0011\b\b\u0005\u0001\u0004\u0002\u00048\u0006\u0004\u0004\u0001ޟ\u0005\u0004\u0004\u0004\u0001\u0005\u0001\u0004\b\u00048\u0004\u0001\u0012\u0005\b\u000b\u000e\u0018\r9'\u001b(\n8\u0004\u0016\u0012\t%\u000b8\u0004\u0004\u0007\u001c\u0011\u0011\u00137\f\u0005\u0004\u0001\f\b\u0006\u0010\t\u0004\b7\u000b\b\u0001\u0001\u0012\t\u0001\u0004\u0013\u0004\t\b7\u0001\t\b \r\u0001\f\u0001\r\u000e7\u0007\u0001\u001d\u0004\u000b\u000b\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB3MID",
    "chars": 397,
    "preview": ")\u0007\u0006\u0006\u0005\u0006\t\u0006\u0004\u0001\t\u0005\u0013\u0004\u0016\u0007\u0001\u0004\u000e\u0005\u00065\u000f\u000f\u000f\u0005\u0001\u0003\f\u0002\t\u0004\u0001\b5\u0005\u0004\u0004\u0001\u0001\b\u0012\u0004\f\u0001\u0014\u0005\u0001\fჁ\t5\u0001\b\u0002\b\u0004+\t\u0001\u0002\u0001\u0006\u00076\u0004\u0015\u00013\u0002\t\u0005\u0001\u00126\u0013,\u001f\r6\n\u000f\b\u0005\u0004\t-\f6\u0004\u0001\u0004\u000f\n\u0001\u0005\u0004\f\t\f\u0005\t5\u0010\u0001\u0004\u0005\u0014\u000e\u0001\u0011\u0004\u0005\u0001\u0006\u00065\n\u0003\u0006"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB4",
    "chars": 419,
    "preview": "\u0010񀀠\u0005ࠀȐނĠ0+\u0005\u000e\u0004\u0005၀\u0004\u0004秣﷿\u0006/-ߟ\u001dϟϏ0\u0005\u0004\u001b\u0012\n\u0004\u0006+\u0004\u0004-\u000b\u0005\u000e\b\u0001\u0006\u0005#-\u0012\u0010\b\f\u0005&\u000e.\u0005\u0004\u0001\u0006(\u0006#-\u0004\u0004\f$#\u0001,\u0010\u0005\u0004\u0004\u0007\u0006#̀Ȍ܀-\u000b\u0001\u0005\u0001\u0006\u0002\t\u0005\u0004LJ\u0004\u0006\u001f\u0001,\u0006\t\u0017\u0004\u0004\u0003\u0007\u0001\u0004\u0006\u001f,2\u000b\u000e\u001f⤠㢢,(\u0007\u001f\u001f\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROB4SM",
    "chars": 291,
    "preview": "60\u0005\u000b\u0014\t\n\u0002\u0011\u0004\u0005c\n\u0006\u001b\u0004\u0001\u0002\u0005\u0005e\u000f\u0007\b\b\u0001\u0001\t\u0001\u0006e\u0005\u0005\u0001\u0007\u0001\b\n\u0012\u0006e\u0004\t\r\u0001(40\u0005\t\u0001\u0007\u0001\u0005\u0004\n31\f\u0001\f\u0004\u0001\u0006\u0004\u0001\u00056\u0001.\u0005\u0001\u0006\u0002\u0013\u0010\u0001\u0004\u0005e\u0006,\u0001\u0004\u0006\u0005\u000b6.3!e)(\u00045.\u0005\u0004\u001d\u0010\b\u0005\u0004d\u0007\u0001\u0005\u0005\u0018\u0004\u0007\u0001\u0005d\u000f\u0004\u000f\u0005\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROBGUYSTR",
    "chars": 402,
    "preview": "111)11՘냁))11\u0004\u0001\f\u0014)11\u0007\u0001\u0006\u0016)11\u000b\u0004݃\u0013)11Հ\u0001\u0005\u0006𺪪\u0012)11\u0014Ѐ\u0013)11\u0016\u0019)111)11ռ與\u0016\u0010)11\u0005\u0001\u0005\u0005\u0007\u0010!11\u000b\b\u000e\u0005\u0001\u0004\u001211\u0005\u0001\u0001\u0001\u000e\n\tߟ\u0004\b1Վ蠏'Հ\u0001蠀\u0005\n\u0004\f\u0004\u0006\u0001\u00071\u0005\u0002\t\u0014\u0017\u0017\u0004\n\r1Հ\u0005"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROBMODEL",
    "chars": 442,
    "preview": "111)111)111)111)111 11՟\u0001*\u0005\u0001\u0004\u0004\u000e11\u0001\u0004\u0006\u0015\t\u0002\u0004\u00041ռ\n\u0016\b\u0003\u0001\rՀ\u0002\u0004\b\u00041\u0007\u0004\u0005߿\u0004\f\u0005\u0004\rހ\"1Հ\u0001\fՀ$հ!1\u0005\fՁ\u0013$\n\u0005\u0004\u00131ྟ\u0004\u0015՜\u0004\u000b\u0010\u0006\u0001\u0005\u000f1\u0006\u0005\u0004\u0004\u000e\u0006\u0003\u0005\u0001\u000b\nן\u0004\u00071Հ\u0005\u0001\u000eՀ\u0001𠠨నʂ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.ROBSTANCES",
    "chars": 438,
    "preview": "5\u0012\u0004\u0004\u000e\u0004\u0013L\u0005\u0005\u0007\u0004\u0006\u0004\u0005\u000b\u0002\n\u0004\n\u0004\u0004\u0004\u0010\b\u001b\u001a\u000e\u0011\u0013\u0004\u0001\t\u0006\u0004\u0004\u0001\u0005\u0001\u0004&\u0015\u0005\u0001\u0005\u0003\u0005\u0002\u0002\n\n\r<\u0005\u0006\u001a\u0016)\r<\"\u001b(\u000b\u001a\t\u000f\u0004\u0013\u0015\u0007$\u0001\u0004\f\u0019\u0006\u0001\u000e\u0001\u0005\u0006\u0005\u0018\u000f\u0011\u0013\u0019\u0005\u0001\u0003߈\u000e\u000f\u0004\u0006\u000b\u0006\b\u000f\u0004 \fƒۛ뛫\u000f\u000b\u0003\u0006'\u0005\u0016\u0004\u0002 \fں\u0007\u000e"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.RUN",
    "chars": 349,
    "preview": ",//////////////////////////////////////////////////'///Հ𠜿\u0015///\u0007\b\u0002Օ\u0004\t///\u0011\u0007\u0004\t///////՟'///\u0001\b\u0004\u0016///Հ࠾\u0001믯뺚\u0004\t//%\u0007\u0005\u0002\t/Հ\u0004\u0005\u0017՟\u0017//\u0001\u0004\u0001\u0005"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.RUNJUMP",
    "chars": 167,
    "preview": "r\b\bՕ\u0004\u0005\u0001\u0011\u0004\u0004\u0004h\u000b\u0010\u0001\u0007\u0001\u0005\u0002d6\n\u0005.\u0004$\u0004\u0001\u0004\b\u0004Օ\"\u0001\u0005\u0001\"\u0004z\u0004\u0006\u0002!᯿\u0004ח\u0004j-\u0001\u0004\u0005訨\u0001h+\u0001\u000bq,\u0014o\u0006(\u0012q\u0001\n\u001c\u0001\u0005\u0005Ձv\u0001\u0004ꪮ\u0019\u0004\u0004\u0004s\u0004\u0002\u0018\u0005\u0005\bԅq\u0001)\u0005\n\u0001UP\u0001\u0006\u0002\u0004\u0001\u0006ח\u0004P\u00135\u0004\u0005@\u0007\u0005Օ\u0011\u0001\u0004\u0004\u0004\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.RUNWSWORD",
    "chars": 285,
    "preview": "n//////'///Հ𠜿\u0015///\u0007\b\u0002Օ\u0004\t///\u0011\u0007\u0004\t///////՟'///\u0001\b\u0004\u0016///Հ࠾\u0001믯뺚\u0004\t//%\u0007\u0005\u0002\t/Հ\u0004\u0005\u0017՟\u0017//\u0001\u0004\u0001\u0005Օ\u0004\t\u0002\u0004\u0005Օ\u0004\b//\b\u0004𰰰\b\u0013\u0005\bտ\u0005\u0007\u0004\u0018/\u0004\u0005$/\u0006\u0004\t/\u0007$Հ%Հ\u0004\u0005ꪠ𸸸\b/\u0007"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.SLICE",
    "chars": 488,
    "preview": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ00\"\rđđđđđ0đđđđđ0đđđĐ\u001d\u000e##\u001a\u0015đđđĐ!đđđĐ!Đ\u0016\u001cݮ00\f#߿ʎʟߊ!߿ʎʟߊ!đđđđđ0ˆȢ$\u0006ˆȢ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STANDJUMP",
    "chars": 215,
    "preview": "ۀ\u0002\"\u0006\u0007s\u0001&\u0001\u0007\u0002\u0004o\u0007&\u0005|(\u0004\b\u0002k/\u0002\u0004v\u0001\u0004#\u0004\u0005\u0001v\u00054\u0004n\u0002\u00064D\u0004\u0004\u0005\u0005\u0010x\u0001𰠠\u0004蠠\b>\b\u0005T\u0019\u00012\u0006qE?\u000b\b\u0004\u0004\f\u0001?\u0002<𱳛\u0001\u0005\u000e\u0007|\u0005 \u0003\u001f\u0004\n\u0004p\u0001\b\u001c\u0007\u0003\u0001j\u0001\u0011\u001c\u0016<\u0004\u0005)7;\u0006\u0006\u0001\t\u0004蠠\u000f\u000f.\u0006s%\u0002\u0005\u0001\u0006\u0001"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STEPFWD",
    "chars": 518,
    "preview": "^//_//_//_//_//_//_/\b\u0005\u0006\u0004\u0004_/\u0005\u0005\u0001\u0002\u0004_/\u0004\u0001\u0004\u0016_/%_/)_/Հ\u0006\u0001\t_/\u0006ǟ\u0001\u0007\t_/Հ\u0003\"_\u0004\u0005\t\u0004\u0006*_\u0007𰰰\u0004\u0004\u0004ࠨ\u0006/_/\u0004\u0006\u0004\t_/\u0004߿\u0005\u0002訨\u0002\t_\u0004\u0004\u0006\u0001\u001f_\u0004\u0005\u0004ࠠ\u0004\u0005Հ(_//_/Հ\u0004\u0004\b_\u0004"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STEPFWD.T",
    "chars": 236,
    "preview": "^//_//_//_//_//_//_/\b\u0005\u0006\u0004_/\u0005\u0005\u0001\u0004_/\u0004\u0001\u0004\u0016_/%_/)_/Հ\u0006\u0001\t_/\u0006ǟ\u0001\t\n_/Հ\u0003\"_\u0004\u0005\t\u0004\u0006*_\u0007𰰰\u0004\u0004\u0004ࠨ\u0006/_/\u0004\u0006\t_/\u0004߿\u0005\u0002訨\t_\u0004\u0004\u0006\u0001\u001f_\u0004\u0005\u0004ࠠ\u0004\u0005Հ(_//_/Հ\u0004\b_\u0004\u0001\u0007Ͽ\u0004\u0002"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRIKE",
    "chars": 310,
    "preview": "&\u0004'\u0005\u0004H9\u0002\u0003*\r\u0001\u000f\u000f);\u0001\u001d\u0006\u0006\u0001\u0010\nǟ\u0002\u0004\u0006\u001f\u0007\u0004*6Հ\u0002\u000e\u0007%\u0001\u001d\t6\u0001%%\f\r6Հ)\u0005\u0001\u0004\u0016\u0006\u0001\f\r6\u0001#\n\tߟ\u0004\f\b\u0004\u0004\u0004\t6\u0006\u0001\u0004\u0011\u0006\u0001\u000b\u0005\u0001\u00116\n\u0001\u0002\u0004\u0007\u0004\n\u0011\u0010\u0001\u00176Հܸ\u000e\u0007\u0015\u0013\u000e\u001a6\u0001\u0007\u001c:\u001c6Հ\u0005x5FA5-\u0018\u0014+"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRIKEBLOCK",
    "chars": 104,
    "preview": "ǀ\u0001\t\u0002\u0007\u0007\u0001蠀\fvꏇ\t\u0004\u0004\u0004Ͽ\u0002ꪨ\u0004\u0001،\u000b\u000fp\u000b\t\n\u0004\u0004\u0001\u0004\b\u0015мࠠ\u0001P뿇\n[\u0001\u0004\u0006B\u0001\bX\f<\b\u0007H\u0005\u0004Ԅ9\u0004\u0001\u0004H\u0004\u0005\r9\u0005\u000e\u001bԕఘ&b\u0001\b\u001c𠠼\u0006\u0005߿\u0011\u0002\u0004\u0006\u0004{\u0004\u0003\u0015\u0004\u0001\u0004𪪪o\u0005\u0002\t\f\u0001\u0005\u0004\u0004u.9\u0012"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRIKESCRN",
    "chars": 297,
    "preview": "\u001d\u0005[\u0006$/\u0004=G/\u0004=G/\u00046v\u0005\u0006\u0006\u0005-\u0004,Շ(&2\u0006+\u0003\u0004\f\u0004\u0005\u0007\u00102\u0004,\u000b\u0004\u0001\u0004\f\u0005\u0001\u0004\u00076,\u0006\u0001\u0001\u0014\u0007\u000b\u00076\u0006\u0005\u000f\u0007\u0005\u0005\u0019Ԁ\u0001\u0004\u0004\u00116\u0007\u0004Օ׿\u0006\u0002&\u0002#6\u0005\u0002\u0003\r((6\u0001}6'#<6\u000f\u001a\u001b<6\u0012\u0001\u001a\u001a\u001c\u001e6\u0010\u001b\u0019\u001fర\u0018\u00042\u0011\u001bտ\u0013"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.STRTSLICE",
    "chars": 506,
    "preview": "000đđđđđ0đđđđđ0đđđđđ0000đđđđđđ0đđđđđđ0đđđđđđ0ݮ00(đđđđđ0đđđđđ0đđēϿ.##Ȣ-đđđĐ!đđđĐ!đđđđ(\u0004ݮ00+߿ʎʟߊ!߿ʎʟߊ!đđĐđ0ˆȢ$\u0006ˆȢ$"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.TORCHONWALL",
    "chars": 367,
    "preview": "\u000e눈눈אאאאאא눈눈눈눈눈눈눈|đđđĄאאאאאאאx눈눈눈눈눈눈uđđđđđאאאאאאu눈눈눈눈눈눈uđđđđđאאӗǟ҂אאuݮ눈눈ˈ눈눈uđđđđđאאאאאאאu눈눈눈눈눈눈uđđđđđĐאאאאאאsݮ\u0015\u0007\u0001sđđđđđ"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.TUNNEL",
    "chars": 367,
    "preview": "8:đđđđđ4фđđ>00đđđđđđ0đđđĐ2ݮ06đđđđđ;ф7#\b:đđđĐ!\u0004фđđ>ݮ00߿ʎʟߊ!đđđĐ2ˆȢ$\u00066đđđđđđ09Đ9ݮđđđđđ;ф78:đđđđđđ4фđđ>ݮ00đđđđđ0\b"
  },
  {
    "path": "04 Support/DRAZ/F/PAC.TURNROUND",
    "chars": 84,
    "preview": "\u0001\u0004\u0004\u0004\u0004\u0006\u0004\u0004ꨠ\u0007ਨZ\u0006\u0004\u0001\u0007\u0003\u0005\u0001\u0001\r\\\u0005\u0004\u0004\u0003\u0005\u0002k\u0006\u0006\u0004\u0004\u000f\u0001\u0005\u0001\b\u0007\n\t\u0007\u0007\u0006\u0005\u0004`\u000bߟ\u0004\u0004\n\u0001\u0004\u0005\u0004\u0004\u0005\u0004\u0005\u0004\u000b\u0002\u0004\u0007ظ\u0004X\u0004\u000b\u0002\u0004\u0007ظ\u0004\u0006\u0007\u0004\u0005\u0002\u0005\u0005\u0007Ԁ"
  },
  {
    "path": "04 Support/DRAZ/I/C1.A",
    "chars": 340,
    "preview": "ύ؀ԃീ׋઀𗀀ՀߊԀꁀԇ🀀̀׀뀀׀׀ϟ𿀀ӠàЏ ǟЎɍЏժժժժժժժժժժժժժժժժժժժժԃԀꀀ𿀀ɁދુՀ߂ת睬ĀЀꀀԃП🀀🀀އŲɅЀׁ뀀߂ǀϿ׾Џ߁ПϾǿ쟌ԁІɄ݀ԁꁀԀꀀ𿀀ЀՀՁކ׀Ԯ🀀聠ԁ􇀰ПƁׁ끀π􍆼࿀釅󀀀ߞ忪Ȁ࿀ǻĠ˥ԆМ"
  },
  {
    "path": "04 Support/DRAZ/I/C1.B",
    "chars": 282,
    "preview": "ύ؀ԃޮׂׂ࿀ꁀ࿀🠀̀胀߀Ӡà􇀀տ激󿀀𗏀Џ蟀ɍЏժժժժժժժժժժժժժժժժժժժժԁꝀՀ߂Ɂ׊׀睬Āꀀꁀ࿠ŲɅЀ臀߀׾􇀀ПϾ㿀Ӏ🀀🀀쟌ՀɄ݀ꃀԀ׀Ѐǂ޾🀀ꀀ𿀀࿀􃀀臀ނ􍆼󀀀􏀀🀀釅р𿀀忪Ȁ🀀ǻĠ˥Ղ׀🀀߂ɾ鄘߂ޮ🀀଀🀀ꇀޱȥ࿀􇀀ꇀ؆ȹÀ𿀀"
  },
  {
    "path": "04 Support/DRAZ/I/C1.C",
    "chars": 273,
    "preview": "ύ؀Կԫ🀀߂藀􁀚ԫ̀܆πցÏӠàПÇɍЏժժժժժժժժժժժժժժժժժժժժɁ俁܀睬Ā􁀜ЊŲɅЀ܆πց𿀀׾🀀🀀ПϾ쟌Ʉ݀Ѐ必߀܀ԃ࿈􁀜Ђ܆ԟ߀փ𿀀􍆼🀀🀀釅忪ȀǻĠ˥ɾ鄘߀߀࿁଀􀀀ԁ࿀🀀׀􁀜ޱȥ܆Կ׀փȹقȩժժժժժժժժժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/I/C2.A",
    "chars": 362,
    "preview": "샀Џ聀ꁀύ؀냀߀ԟ߃𿀀࿀ǀ̀߀𿅀߀𿁀܂ϿӠà򃊀เ샬ЎՀժ耀ɍЏժժժժժժժժժժժժժժժժժժժժ🀀냀߂𿀀🀀ׁɁՃ睬ĀπŲɅЀ߀🅀߀𿁀ގÿǟ矀׾ӂПϾ쟌샬؎ׂǪՂ􀀄Ʉ݀🀀쏀𿀀𿀀ׁЀ࿀߀𚀀׀Ԁ߀ß珀Ï􍆼Հ釅ß忪Ȁ🀀ꃀǻĠ˥𕀎؎׊܇ժ"
  },
  {
    "path": "04 Support/DRAZ/I/C2.B",
    "chars": 256,
    "preview": "ύ؀ІЀЁ܇ЎІׁӠà𿀀🀀Ё􀀀􀀀􃀀􃀀ɍЏ򀀀𿀀𿀀ɁܞփЃ睬Ĉ܇ІЂダŲɅ׾🀀ПϾЃԀ􀀀􃀀Ѓ쟌Ʉ݀𿀀࿀𿀀࿀Ѐꃀ菀ܞփԃ𿀀އЂ烀󃀀􍆼🀀🀀釅聀􀀀忪ȀԃԁЀ􁀀ЁǻĠ˥𿀀𿀀ɾ鄘ꏀОЃԃ܇Ⴠ぀ޱȥȹ࿀胀􃀀قȩժժժժժժժժժժժժժժժժժժժժևցЁ"
  },
  {
    "path": "04 Support/DRAZ/I/C2.C",
    "chars": 164,
    "preview": "臀ꇀ𚀀֏؏վ🀀燀񏀀ժժժժժժժժժժժժժժժժժժժժ𚀀܏؏Ԫ࿀῀ о󟀀ເп؎ЏЪЎ񟀀χ㿀􃀀ເ􃀀Ն뀀܆ꀀ􃀀І񿀀࿀ժժժժժժժժժժժժժժժժժժժժԁԿ뀀臀ԁ՞ꀀ􃀀п󇀀ៀُ𿀀臀𿀀Пԃ􀀀ן끀Џ࿀𾀀𻀀񟁀㇀🀀ժժժժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/I/C3.A",
    "chars": 268,
    "preview": "ύ࿀Ꟁ֮ܺ叀רЏԟ࿀🀀🀀埀߁󀀁࿁𿎀𿁀ӠàɍЏ胀𿀀ʿ֮ɁՏ睬İЏԟ𿀀🀀ŏŲɅρ߁χρ聀׾ЀПϾ耀쟌ɄݨЇ􃀀Џ𿀀ԃЬЀԏ𿀀ş灀🇀Ǐ􍆼󀟀釅胀忪Ȁ胊ǻĠ˥냀ЂԀЂ臀臀ԃԁ蟀ɾ鄘࿀꿀菀ޱȥ񁀀Ǐවȹ臀قȩ胀󩭙뇀ӾЂЀԁԀߏʩЪԂ࿀߮־臀Ӿ㇀邍"
  },
  {
    "path": "04 Support/DRAZ/I/C3.C",
    "chars": 268,
    "preview": "֪Я𿄀ύ؀ׂ񇀾Ǐ㏀ՠЊІ̀Ӡàǟ󇀀ܪ֪ОЎῈςПоתՀ𿀀ɍЏ򀀀׃р񏀾ǟßɁ֪Ղ聀ժժժժժժժժժժժժժժժժժժՂ睬ĀЪŲɅЀ׾ᏀПϾժժժժժժժժժժժժժԪ腀݀怀Ю🀀㿈П྅쟌Ʉ݀߃рßЀՆԪժ݇ުվ𚀀􍆼󀀀Ꮐ釅ހӾЯ忪Ȁ🀀㿈ຄ"
  },
  {
    "path": "04 Support/DRAZ/I/C4.GD.A",
    "chars": 347,
    "preview": "Ԁԇύ؀ڀªДДԪЪДʀ􏀀Ԁ̀叀埀𿀀ӠàԿО׏ԾꟀԪԀ׀ЇӞԁɍЏժժժժժժժժժժժժժժժժժժժժԏʀԔԔɁٿԪԪ睬Āʀ􏀀࿵ŲɅЀЏЪៀ󿀀׾ПԿ🀀ԿПϾԘԾՂ𿀀🀿쟌Ʉ݀՟럀ЀԂԊԀЀ񏴠𚀪П׀Ъ࿀󟀀􍆼ԟտ釅῀՘࿀Ԃ忪Ȁ࿀ǻĠ˥՟ꁀɾ"
  },
  {
    "path": "04 Support/DRAZ/I/C4.GD.B",
    "chars": 300,
    "preview": "ύ؀ԏ🀀ʏ̀🀀оŃՀӠàкƒ퇀뀟ʇԪՀԂЪž׃ꫥꏀɍЏժժժժժժժժժժժժժժժժժժժժɁꃀ睬ĀԏԅŲɅЀ꿀оꀀ􇀀Ԁ׾ޞкԊЪЮ꿾ժПϾ򟀀ՆԊЪ߂Њ쟌Ʉ݀ЀꀀԞԅ𚀰忀࿀şоꀀ􍆼՞ԊЪԮ׿釅򿀀՞ԪԪ⫅忪ȀԪǻĠ˥ɾ鄘଀ԞԝЀޱȥОʀк՞"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SH.A",
    "chars": 311,
    "preview": "ԀЊԃύ؀࿀Կ࿁Ԫ߀߀녀Ъꏀ̀ꇀꟀ߀߂ǟӠà🀀ׇЇцԁɍЏժժժժժժժժժժժժժժժժժժժժ࿀՟࿁ԀɁ녀Ԫꗀ𿾀𿾀睬Ā࿀ŲɅЀꟀժ烀ß׾耀ПϾ𿀀𿀀🀀쟌ՏɄ݀ꃀЀ뇀ꗀχ𚀕🀀߀ի􍆼耠釅忪Ȁ࿀ǻĠ˥؎տԿ𿀀ɾ鄘Ђկꗀ񏀀଀ޱȥ🀀߀կ胀ȹ🀀قȩ"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SH.B",
    "chars": 187,
    "preview": "ύ؀̀վӠà񏀀ɍЏժժժժժժժժժժժժժժժժժժժժɁ睬ĀŲɅЀԪ꿀׾ПϾ󟀀쟌Ʉ݀ЀЪ¿􍆼釅㿀忪ȀǻĠ˥ɾ鄘଀􃀀Նޱȥ࿀ȹقȩժժժժժժժժժժժժժժժժժժժժ󩭙Ӿʩ־ʀ臀ԁ՞Ӿ邍퀀𿀀̹Ԁ𿀀˾꾮˾ʐת׀ҾظپЏꏀ࿀̿Ԡ膺🀀ʾ瀀̹"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SKEL.A",
    "chars": 262,
    "preview": "΁ύ؀߁぀󀀀̀뇀ÁЁӠàɀ܀ 臀ɍЏժժժժժժժժժժժժժժժժժժժժ࿀Ɂ̀睬ĀЏ񿀀ŲɅЀ׾࿀΁࿀݁끀ПϾ쟌Ʉ݀샀Ѐ܁×࿀퀀􍆼࿀̇釅忪ȀǻĠ˥􀀀񿀀ɾ鄘􁀀΃Ѓ଀ೀޙޱȥ𝀀߀رρȹقȩժժժժժժժժժժժժժժժժժժժժ󩭙ƍӾೆ࿀࿀"
  },
  {
    "path": "04 Support/DRAZ/I/C4.SKEL.B",
    "chars": 204,
    "preview": "ύ؀🀀̀ㅛӠàী獃󀀀ɍЏժժժժժժժժժժժժժժժժժժժժɁ睬ĀŲɅЀÌੀ׾΀ПϾÁ𹀀쟌Ʉ݀ЀЏ􃀀·𚀘􍆼󀀆釅ǁう忪ȀǻĠ˥ɾ鄘଀臀̧ޱȥ㏀ȹ𸀀قȩժժժժժժժժժժժժժժժժժժժժ󩭙Ӿʩ־ʀӾ쀀񀀀􇀀邍퀀ダΛ̹Ԁ˾꾮˾ʐת׀Ҿظ"
  },
  {
    "path": "04 Support/DRAZ/I/C4.VIZ.A",
    "chars": 403,
    "preview": "пύ؀꿀ԏ􏀀ևўԪЪ꿀ןߞԟԟ􏀀԰̀叀쇀埀𿀀ӠàПԿޏԾꟀԪԀ׀ϟԃ燀؇󃀀ɍЏժժժժժժժժժժժժժժժժժժժժԏ􇀀꿀ɁՏԟԏѾ􏀀ԪԪ꿀睬Ā՟ПԟԟŲɅЀՏЪ῀󿀀׾ПԿ🀀񃼀ԿПϾԘԾՂ𿀀🀿쟌Ʉ݀՟諽꿀ЀտԾԞ՟Ӿ埀ԂԊ꿀ԟԟԟ՟ﯠ𚀪🀀"
  },
  {
    "path": "04 Support/DRAZ/I/C4.VIZ.B",
    "chars": 290,
    "preview": "ύ؀ԏ🀀̀оԂӠàкƒ퇀ժԏՀԂЪž׃ꫥꏀɍЏժժժժժժժժժժժժժժժժժժժժ񇀀Ɂ菀睬ĀԟԟʟŲɅЀоꀀ򁀀׾ޞкԊЪЮժԏПϾ򟀀ՆԊЪ߂Њ쟌Ʉ݀Ѐ쁀Ԟԟ𚀰忀оꀀ􍆼՞ԊЪԮժ釅򿀀՞ЪԪ⫅忪ȀԪǻĠ˥ɾ鄘଀Ԟԟ򟀀ޱȥОʀՏ՞ЪԪȹߪʯ"
  },
  {
    "path": "04 Support/DRAZ/I/C5.A",
    "chars": 305,
    "preview": "ԁ߀ύ؀Ъ땀ի߂׀຅ǟ🀀ׁ࿀̀ꕀ׏ݪ׀߂ǟ󏀀߿Ӡà🀀݆耀耀ៀԏ׀ɍЏժժժժժժժժժժժժժժժժժժժժ࿀𯁀ɁՀׂՁ຅睬Āꃀׁ࿀ŲɅЀݟݪׂ߂߿🀀׾߆ПϾ🀀쟌ЋՋպ׀Ʉ݀࿀࿀ԀீЀ׀׀ׂՂ܇׀ժЪ݂׊􍆼釅🀀🀀忪ȀǻĠ˥֫Տպ׀࿀Ђீ"
  },
  {
    "path": "04 Support/DRAZ/I/C5.B",
    "chars": 395,
    "preview": "ύ؀ՇԁЀЀ࿀蟀菀׀׀߂׀׀пԆÀԿગꏠ̀ી߀׀࿀󃀀Ӡàիԏꇀ؎ǁ𿀀聀ɍЏժժժժժժժժժժժժժժժժժժժժՇԚЀ࿀蟀蟀臀Ɂߟ߂׀߂׀׀𿀀睬ĀՁЏӀǂꏠŲɅЀ𺀀ீÀ࿀󃀀׾􏀀пПϾ🀀쟌胀ꁀɄ݀ՇԞԆԂ迀蟀Ѐ߀߂׀߀𿀀迀􇀀ՏП🀀ǀʏ𚀀끎ீ"
  },
  {
    "path": "04 Support/DRAZ/I/C6.A",
    "chars": 484,
    "preview": "чуύ؀ЁЁЇ臀聀Ѓꏀꏀ􁀀пЃՂԪՀԪՀ̀ԂԎ􏀀ՌՀЪՁʃժӠàԪՂՊՊժЪՀԪՂՊ՚ఀ҇҇ɍЏժժժժժժժժժժժժժժժժժժժժЃЃɁ瀀Ѓ胀耀Ёʏʏ睬Ā€􃀀ԿԃՂԪՀԪՀŲɅЀ򗀀ՀՂՂЪՀժժ׾𿀀࿃灀ΌПϾՂՊՊժԪՀԪՀՂՊ՚฀쟌"
  },
  {
    "path": "04 Support/DRAZ/I/C6.B",
    "chars": 377,
    "preview": "ύ؀ܾ⏀⇀🀀ރꇀ਀𿀀߿̸菀􃀀Ղ࿀ЪꟀӠà׀Ã쏀܏̪ՂЪիժЪժЪ၀ɍЏժժժժժժժժժժժժժժժժժժժժԁƾҟҿɁꇀՃ睬ĈߟŲɅи𗀐菀􃀀ՂЪЪꟀꏀ׾߀؀Ã܇܃ПϾԪܪՂЪժժԪժԪ񁀀쟌Ʉ݀ԁҺҺЀꏀ𚪀𕀐􁀀׀ՀЪ꿀ЪꟀꏀ􍆼߀އ΃惀釅Ԫ"
  },
  {
    "path": "04 Support/DRAZ/I/C6.C",
    "chars": 391,
    "preview": "ύ؀࿀̀؎ЪӠàЪՊժժՂժժժՂ֪֪֪֪Հ𿥀ՊՊՊՊժժЪՊɍЏժժժժժժժժժժժժժժժժժժժժÁрɁ􁀀睬ĀӀ𿀀ŲɅЀܪ߂埁ժժЪՀ׾ԪՊժժՀՊժПϾךךЂڐڄ߀ԪՀԪՀԪՀԪՀվՂԪՀ쟌Ʉ݀ȁЀЀЀ􀀀À𿀀𚀀ࠀժժժЪՀՀ􍆼󀀀Ԫ"
  },
  {
    "path": "04 Support/DRAZ/I/C6.D",
    "chars": 290,
    "preview": "߀ύ؀𿁀Հ𿊀ЂԪ̀ժӠà՟Ъ🀀珀߀ɍЏժժժժժժժժժժժժժժժժժժժժ࿕ɁоооՀ睬Ā࿀ߊЂԪŲɅЀժ׾̟ꟀПϾ՟쟌𿀀߀Ʉ݀𿀀𿕀ЀооЎЎЎԀ࿀׊оը𚀠􍆼釅տ忪ȀǻĠ˥оо߀߀𿀀ɾ鄘ЎЎ؏؏؏Ԁê଀࿀תޱȥ꿀ȹտقȩժժժժժժժ"
  },
  {
    "path": "04 Support/DRAZ/I/C6.E",
    "chars": 325,
    "preview": "ύ؀Ԁꃀ䇀࿀оڀꃀԏ⏀⏀⏀оꏀꟀ蟀蟀ꇀк迀迀Ӡà蟀菀ԟՏ迀кՇտ􀀀ԀԀ􀀀ɍЏ򀀀돀ԟɁоЎ؀ꁀП睬кꏀ迀꿀ŲɅ菀蟀臀Շк迀俀׾蟀ԟՏ迀ПϾкՇտ՟쟌Ʉ݀𕀀Կ𕀀𕀀𕀀ЀЎ؏ЀП🀀🀀🀀кꏀ迀꿀迀菀Տк迀俀􍆼ԟ՟Տ釅кՇՏ忪ǻĠ˥Կɾ鄘쟀؏ЂО🀀🀀ꏀ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB1.PAL",
    "chars": 1224,
    "preview": "\u0001a3aa\u0003bAbsbbcyddde\u001bfAf_fwff\u000bg)gOgAhOh]hkhyhhyii\u001fj3jejjjj$k<kkk\u001elTlll\\mmmmmmm\u0018n8nXnxnnnnnn\u000eo\u001co'o/o4o7o:o=o@ofooo:pXp\u000bqqr"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB2.PAL",
    "chars": 695,
    "preview": "2g`iaabcccccccc\u0004d\u0007ddeefg\u001bhihhhhhhiiiijjjkk5ll1m\u0003n}nnoYpkppoqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB2.PALB",
    "chars": 694,
    "preview": "2g`iaabcccccccc\u0004d\u0007ddeefg\u001bhihhhhhhiiiijjjkk5ll-mmynnoUpgppkqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.BGTAB2.PALN",
    "chars": 702,
    "preview": "2g`iaabccccccc\nd\rd\u0010d\u0002eeefg$hrhhhhhhiiiijjjkk>ll:m\fnnnobptppxqqqqqq\u0004@쀀ȍفϑ󙲃̷؞계̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ̪۪Ϫ֪͇݅Ӫ̪تȪɪ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB1",
    "chars": 588,
    "preview": "A``VaaGbb{c\u0019ddeKffgyhhDiiiajjekkil7mQn3oo[pp\u001eqqqkrr}s\u0013ttu<v\u0015w6x(yyzG{{{a||R}}7~~~'1\u0004o΁3q'\u0002)࿀ЏЏЏЎԎЀԀԁԃ\u0003)Ѐ࿀࿀迀聀ꀀꁀ\u0003(Џ䟀ׁׁ׀ീ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB2",
    "chars": 621,
    "preview": "F`^aab[ccdfeefDggh&i|i jrjj\u001aklkk8llPmm2nn\u0011oo8pp\u0018qzqq\u001crnrqr\fssNtt2uuFvvwxPy\u001azz{'||O}}\u0016~]~~~\u001a|\\ր\\ǁ;\u0005)ßϟ𕀀𗀀𗀀׀߀߀߀߀߀߀🀀🀀\u0003'เเ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB3",
    "chars": 492,
    "preview": "N``Aaa\bbbbccd,eeeIff\u000fgiggh\u0016iii^jj2kk\u0006ll\u000emvmmmmmmmmm\u000bn=nunnnnnn\u0001o\u000bo\u0019o)o1oo\u001fpp\u0010qqqrrrs\u001att%uu\rv!vGvovvvvvvvv\u000ew.wEwOwaw\u0002(菨\u0002'"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB4.GD",
    "chars": 614,
    "preview": " C``abc|dFeefZg\u001ahhiUj;k'llmfn\u0004ooXppqq'rrrVsss]tt\u0005$񯅀񯁀῁῀ៀ՟՟՟՟ԟП菀𿀀ꃀ\u0006%߀翀վվտԿԿ🀀🀀ПЏ叀叀\u0006$࿀𿀀􇀨ꟀꏀՀ🁀𿁀ꁀ\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀О܂ӔՅ׀\u0006%߿߿߿տԾԀԂԪЪЪ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB4.SKEL",
    "chars": 293,
    "preview": " C``abYc'ddxe\nff}g)hhidj>kkl@mmdn\u0015oo9p<pp@qCqFqIqLqOqq\u0005\"ǘ뇀\u0006\"𿂀࿀࿀臀\u0006!΁Ã߀퀀瀀\u0007\u001eǀ࿀ 󂟀\u0006\"㠀Àρ݁ɀฎ⁀رÁ􃀀\u0005% 섀΃끀܀ЁρЏ🀀\u0004%̇぀΃܁̀࿀\u0004$ೀ࿀솀\u0006 🀀ව"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB4.VIZ",
    "chars": 472,
    "preview": " C``abcvd;eesfAg\u0001hhri2j\u0012kkl^m\u0019nnMoop!q$qq:rrrnss\u0013tbt\u0005$񯅀񯁀េៀៀ՟՟՟՟ԟПППпп俀🀀\u0006%Ç柀翀վԿԿԟ֟֟ППՏ叀叀샀蟀\u0006$࿀𿀀􇀨Ꟁꏀ࿁𿀀\u0007!🀿՘࿀ԘԪԪԪЪЪ🀀ח쇀蟀\u0006$ϟ߿߿߿"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB5",
    "chars": 479,
    "preview": "-]``a{bVc$ddue\u0007ffng\bhh\\i6j\u0010k\u0013kkol\u0005mWmm+nn\u001boo\u0012plppOqqUrrUsssOtt]u\u000bvYvvv=www\u0004\"ß🀀🀀𕀀׀׀ꕀꅀꁀ\u0005&ÿծծՀ׀ꃀ\u0006#㟀ժݟ׏ՏՂՂ\u0007\u001f🀀뀀🀀պЪ݂ݪݪ\u0006\"뀾🀀׊ׂ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB6.A",
    "chars": 975,
    "preview": "g````\ra\u001ca+a:aIaXaa[bb:ccc!dndd\beUeeeeeFffLggLhhi'jjj2kk8llm\u0017n\u001an\u001dn n#n&n)n,n/n2n5n8n;n>nAnDnGnJnMnPnSnVnYn\\n_nbnenhnknnnq"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB6.A.BK",
    "chars": 976,
    "preview": "g````\ra\u001ca+a:aIaXaa[bb7ccc\u001edkdd\u0005eReeeeeCffIggIhhi$jjj-kk3llm\u0012n\u0015n\u0018n\u001bn\u001en!n$n'n*n-n0n3n6n9n<n?nBnEnHnKnNnQnTnWnZn]n`ncnfninl"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB6.B",
    "chars": 1089,
    "preview": "I````````\ra\u001caajbbLccc3ddd\u001aegeeeeeXff^gg^h\bii9jj?kkEllvm$nnAoDoGogoo\tpppq rrhsttu>vvZwwIxx\u001cyzyy[zzM{{|\u0019}}M~~t\u0001\r\u0001\rЀ\u0001\rԔ\u0001\rԔ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.CHTAB7",
    "chars": 103,
    "preview": "\b\u0013`y`\u000baa/bbAccd\u00022ккккккккккоооооОППԏԇԿԿԿԟ䀊\u00030ꏀꏀꏀꏀꏀꏀꇀꇀ\u00030迀迀迀迀⏀ԃԏ\u00030迀迀迀迀迀迀迂迚꿀꿀蟀⏀ԃԏ\u00020ԃԏ\u0003:Ԁԃԇ՟՟ՏՏ\u0003:ԀԃԇՇ\u00030臀臀臀臀ꇀ"
  },
  {
    "path": "04 Support/DRAZ/I/IMG.EDTABLE",
    "chars": 279,
    "preview": "-]`b\u0001eSgVg_ghgqgzggggggggggg(hZhlh~hhhhhhhh\u000ei i2iDiVihi|iiiiiiiiij\bJÁఀကρ怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀瀀́ρ\bJ怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀怀"
  },
  {
    "path": "04 Support/DRAZ/I/PAC.C1.A",
    "chars": 433,
    "preview": " 1\u0004\n\u0004\u00161)1տ\u0001\u0004\u0001\u0006\u0003\u0001\u00131)\u0001+\u0016\u00101)\u0004(\u001a\u0010Հ')\u0005\u0001 1\u0007%)\b\u0007\u001aՃ\u0006\u0006\u0015Ձ\u0006\u0003\u0014)\t\u0003\u0017\u0001\u0004\u0003\u0006\u0001՝\u000bؼ\u0001\u0001ח\u0004\t)Հ\u0001\b\u0015\u001b\n\b\u0004\u000b\u0004ࠠ\t)\u0001\u0011\u00151()\u0019\u00161\u0006\u0001\u001d)+\u0005\nՕ\u0011)\u0005&\u0006\u0006\u0004\tՀ\u0001\u0002\u0002\u0003\u0001\t)\u0007\u001e1\u0019Ԕ\u0005"
  }
]

// ... and 382 more files (download for full content)

About this extraction

This page contains the full source code of the jmechner/Prince-of-Persia-Apple-II GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 582 files (1.4 MB), approximately 775.2k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!