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~~~'1o3q')࿀ЏЏЏЎԎЀԀԁԃ)Ѐ࿀࿀迀聀ꀀꁀ(Џ䟀ׁׁ׀ീീ'ğϟ𝀸聀ꀀꁀ&ǿǟϟߟߟ돀돀끀뀀뀀ԃԁԃ&߂׀Հ'𫀀ߊ߂߀🀀🀀(࿀߁׀׀߀߀πǀ׀Հ࿀࿀(Ѐߞооؾ߂ׂ׀'🀀Ճׂ߂߀׀Հ&ρϿϟǿՇ׃׃׃Ձീ臀(࿀՞Ԇކކދׁ׀🀀🀀(🀀ꃀꃀુЇԀԁԃ'〰ԇ߇߃߃߀߀׀Հ聀ꀀꁀ))ППԀԀԃ(ꁪ'߂ՀՀꁀꀀ!ԿԮתߊժժ🀀ꏀꁀ!Ԇԁ"އМІЎ#🀀Ɓ࿀ժЊ㿀Ⱥ㏜ꁀտ࿀࿀ǂÀрӀꏀЏп"蟀$'ꇀꇀ臀臀胀胀胀ꀀꁀ(п࿀&🀀🀀激ԿпПЎ؆ނ߀߀׀ꇀꀀꁀ%ǁÃׂꏀꀀꁀ&Ͽ࿀࿀🀀ժՊꁀ'က🠀🨀ǂ׀臀ꃀ)ֿ֞ގߎ߂ׁ׀Ԁԁԃ+🀀࿀࿀а🀀)࿀ꝀꟀ֮ޮ߂׀Հޮޮ#ՂՀ!🀀߂ׂՀо'܆܆܆܆܆܆܆؆'ܾоԿԟ࿀(׀߀߀(ÇÇÇ࿁Ŀ࿀࿀'ߊނ%ППОЃԀԁԃ&և׃׃փփցցց'꿨''&࿀࿈Ђ%🀀🀀🀀必俁Կп#"߂߀߀߀߀߀߀#ÏÏÏÏ߀߀߀߀πς߀׀藀߀߀܀܀!࿁ЂЊԫիԫԫՋԀՊŊ0
================================================
FILE: 01 POP Source/Images/IMG.CHTAB2
================================================
F`^aab[ccdfeefDggh&i|i jrjjklkk8llPmm2nnoo8ppqzqqrnrqrssNtt2uuFvvwxPyzz{'||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
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\u0004o3q'\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đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ040đđđđđđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ00đđđđđ0đđđđđ0#\u00010đđđĐ!đđđđđđ0ݮ00߿ʎʟߊ!"
},
{
"path": "04 Support/DRAZ/F/PAC.BIGBLOX2",
"chars": 390,
"preview": ";0đđđđđ7đđđđđđđđŔĔĔĔĔĔĔĔĔŔđđđđđđđđđ040đđđđđđ0đđđđđđđđŔđđđđđđđđŕđđđđđđđőđđđđđđ0ݮ00đđđđđ0đđđđđ0#\u00010đđđĐ!đđđđđđ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đđđđđ0000đđđđđđ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đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0\u001dSđđđđđđ0đđđđđ\u001dSݮ0\u001d 2đđđđđ0đđđđđā\u0017\t\u0005\r20#\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đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0qđđđđđđ0đ3ݮ0\u0001ֺֺֺֺֺֺջ3đđđđđ0đđđđ\u0018\u0001\u0007\u0004݈ݪ30%ջ3đđđđđđ0đđđ"
},
{
"path": "04 Support/DRAZ/F/PAC.FANCYEXIT",
"chars": 499,
"preview": "ˀ;z8vđđđđ4đđđđr0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ0ođđđđđ0đđđđđo0ođđđđđđ0đđđđđđoݮ00đđđđđ0đđđđđזֶֶַ֖֖֗ז֖п݈ݪ00ճճճճճճճճ"
},
{
"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đđđđđo0R\u0004\u0011đđđđđđ0đđđđđđF\u0005\u0006\u0004\rݮ0ođđđđđ0đđđđđ\u0014\u0005\u0006A0ođđđđđđ0đđđđđđoݮ00đđđđđ0đđđđđזֶֶַ֖֖֗ז֖п݈ݪ00"
},
{
"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đđđđđ0000đđđđđđ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đđđđđ;008+đđđđđđ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\u00172BĐ\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\b08\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đđđđđ0000đđđđđđ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\u00106,Đ9\u0010Đ98\u0012=+⣦ͽͽͽͽͽβ⣦\u0010<)*\u0010;\u0001)ȉ϶̸ȉ϶\u0010<+\bꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007ꪪ\u0007\u0007\u0012>/đđđĐ2\u0010đđđĐ2,6\u00106,Đ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đđđđđ0000đđđđđđ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đđđđđ0000đđđđđđ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ݮ06đđđđđ;ф7#\b:đđđĐ!\u0004фđđ>ݮ00߿ʎʟߊ!đđđĐ2Ȣ$\u00066đđđđđđ09Đ9ݮđđđđđ;ф78:đđđđđđ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\u0004o3q'\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.