Gem Drop - Source Code

GEMINTRO.ACT

HTML ATASCII Viewer by Bill Kendrick, 2012-2013
Options:
Columns: 38 | 40 | Unlimited
Style: Unicode | Images | Images (2x) | Compute! listings

This is the splash intro that loads first when you boot up the Gem Drop disk.

  ; GEMINTRO.ACT
  
  ; Gem Drop Intro
  ; by Bill Kendrick
  ; kendrick@zippy.sonoma.edu
  ; http://zippy.sonoma.edu/kendrick/
  
  ; Sept. 24, 1997
  
  INCLUDE "GEMRT.ACT"
  
  
  Byte Array Buf(19200)
  Byte TIMER=20
  
  
  PROC CIO=$E456(BYTE areg,xreg)
  
  CARD FUNC Burst(BYTE chan,mode,
                  CARD addr,buflen)
  
    TYPE IOCB=[BYTE id,num,cmd,stat
               CARD badr,padr,blen
               BYTE a1,a2,a3,a4,a5,a6]
  
    IOCB POINTER iptr
  
    chan==&$07
    iptr=$340+(chan LSH 4)
    iptr.cmd=mode
    iptr.blen=buflen
    iptr.badr=addr
    CIO(0,chan LSH 4)
  RETURN(iptr.blen)
  
  CARD FUNC BGet(BYTE chan CARD addr,len
  )
  
    CARD temp
  
    temp=Burst(chan,7,addr,len)
  RETURN (temp)
  
  
  
  Proc Load(Byte Which)
    Char Array File(20)
  
    SCopy(File,"D:x.GR7")
    File(3)=Which+'A
  
    Close(1)
    Open(1,File,4,0)
    BGet(1,Buf+Which*3840,3840)
    Close(1)
  
    TIMER=0
    Do Until TIMER>=20 Od
  Return
  
  Proc Display()
    Card SC=88
    Byte I
  
    Graphics(23)
    Poke(708,4)
    Poke(709,8)
    Poke(710,14)
  
    For I=0 To 4 Do
      MoveBlock(SC,Buf+I*3840,3840)
      TIMER=0
      Do 
      Until TIMER>=10 Od
    Od
  
    For I=0 To 15 Do
      Sound(0,I*5,0,I/2)
    Od
  
  
    For I=0 To 60 Do
      Sound(0,200,0,15-I/4)
      TIMER=0
      Do Until TIMER>=2 Od
    Od
  Return
  
  Proc Setup()
    Graphics(0)
    PokeC(82,9984)
    PokeC(709,0)
    Poke(65,0)
    Poke(752,1)
    Put('↰)
  Return
  
  Proc Write(Char Array Text)
    byte I
  
    For I=0 To 150 Do
      Poke(709,15-I/10)
    Od
    Put('↰)
    Position(20-Text(0)/2,12)
    PrintE(Text)
    For I=0 To 150 Do
      Poke(709,I/10)
    Od
  Return
  
  Proc Main()
    Byte KEY=764
  
    Setup()
  
    Write("New Breed Software")
    Load(0)
  
    Write("proudly presents")
    Load(1)
  
    Write("a challenging new puzzle game
  ")
    Load(2)
  
    Write("")
    Load(3)
  
    Write("Gem Drop")
    Load(4)
  
    Display()
  
    TIMER=0
    KEY=255
    Do
    Until KEY<255 OR TIMER>=250 OD
    KEY=255
  Return

GEMINC.ACT

HTML ATASCII Viewer by Bill Kendrick, 2012-2013
Options:
Columns: 38 | 40 | Unlimited
Style: Unicode | Images | Images (2x) | Compute! listings

The first half of the game code. (Too large to fit in the Action! editor and compile it all!)

  ; GEMINC.ACT
  
  ; Gem Drop
  ; by Bill Kendrick
  ; kendrick@zippy.sonoma.edu
  ; http://zippy.sonoma.edu/kendrick/
  
  ; August 17, 1997 - Sept. 24, 1997
  
  
  DEFINE NO="0"
  DEFINE YES="1"
  DEFINE ATARI="0"
  DEFINE SEGA="1"
  DEFINE BOMB="5"
  DEFINE WILDCARD="6"
  DEFINE CLOCK="7"
  DEFINE SCORE="0"
  DEFINE EXPLOSION="1"
  
  Byte Array Blocks(110),MemBuf(4096),
     KillsX(100),KillsY(100),ExY(4)
  Card Array ScrVals(15)
  Byte KEY=764,CONSOL=53279,
     STICK0=632,STRIG0=644,
     COLPF4=712,PADDL0=624,RTCLOCK=20,
     AUDF0=53760,AUDC0=53761
  Byte Level,Controller,Gameover,Frozen,
     Carrying,HowMany,LevelDone,
     FLIP,CHAddr,CIO_status,NumKills,
     WhichPM,ExAnim0,ExAnim1,ExAnim2,
     ExAnim3,TOGL,KillScore,Lines,
     Max_Level,FirstRound,LinesNeeded,
     Happy,ScrH,HiScrH
  Card SC=88
  Card OLDVEC,CH,PMG,DL,Scr,HiScr
  
  
  Char Func CIO=*(Byte dev, Card addr, s
  ize, Byte cmd, aux1, aux2)
  [$29$F$85$A0$86$A1$A$A$A$A$AA$A5$A5
  $9D$342$A5$A3$9D$348$A5$A4$9D$349
  $A5$A6$F0$8$9D$34A$A5$A7$9D$34B$98
  $9D$345$A5$A1$9D$344$20$E456
  $8C CIO_status $C0$88$D0$6$98$A4$A0
  $99 EOF $A085$60]
  
  Card Func ReadBlock=*(Byte dev, Card a
  ddr, size)
  [$48$A9$7$85$A5$A9$0$85$A6$A5$A3$5$A4
  $D0$6$85$A0$85$A1$68$60$68$20 CIO
  $BD$348$85$A0$BD$349$85$A1$60]
  
  
  Proc Quiet()
   Sound(0,0,0,0)
   Sound(1,0,0,0)
   Sound(2,0,0,0)
   Sound(3,0,0,0)
  Return
  
  
  Proc Setup()
   Int I
   Byte C
  
   CH=(MemBuf/1024)+1 
   CH=CH*1024
   CHAddr=CH/256
  
   Level=1
   Controller=0
   If PADDL0=1 Then
    Controller=1
   Fi
   Poke(53775,3)
   Poke(53768,0)
   Quiet()
  
   Close(1)
  
   Open(1,"D:GEMDROP1.FNT",4,0)
   ReadBlock(1,CH,1024)
   Close(1)
  
   Open(1,"D:GEMDROP2.FNT",4,0)
   ReadBlock(1,CH+1024,1024)
   Close(1)
  
   PMG=CH+2048
   Zero(PMG,1024)
   Poke(53277,3)
   Zero(53248,13)
   Poke(54279,PMG/256) 
   PokeC(704,0)
   PokeC(706,0)
  
   For I=0 To 3 Do
    ExY(I)=0
   Od
  
   TOGL=0
  
   Close(1)
   Open(1,"D:GEMDROP.DAT",4,0)
   Max_Level=InputBD(1)
   HiScr=InputCD(1)
   HiScrH=InputBD(1)
   Close(1)
  
   ScrVals(0)=0
   ScrVals(1)=0
   ScrVals(2)=0 
   ScrVals(3)=1
   ScrVals(4)=2
   ScrVals(5)=5
   ScrVals(6)=10
   ScrVals(7)=15
   ScrVals(8)=20
   ScrVals(9)=25
   ScrVals(10)=30
   ScrVals(11)=50
   ScrVals(12)=100
   ScrVals(13)=100
   ScrVals(14)=100
  Return
  
  
  Proc VBLANKD()
   Byte Pointer Q
   Byte I,CHBAS=756,
      PMCOLR0=704,PMCOLR1=705,
      PMCOLR2=706,PMCOLR3=707,
      PMX0=53248,PMX1=53249,
      PMX2=53250,PMX3=53251
  
   FLIP=4-FLIP
   CHBAS=CHAddr+FLIP 
  
   TOGL=TOGL+1
   If TOGL=4 Then
    TOGL=0
    If ExAnim0>0 Then
     PMCOLR0=ExAnim0
     ExAnim0=ExAnim0-1
    Else
     PMX0=0
    Fi   
  
    If ExAnim1>0 Then
     PMCOLR1=ExAnim1
     ExAnim1=ExAnim1-1
    Else
     PMX1=0
    Fi   
  
    If ExAnim2>0 Then
     PMCOLR2=ExAnim2
     ExAnim2=ExAnim2-1
    Else
     PMX2=0
    Fi   
  
    If ExAnim3>0 Then
     PMCOLR3=ExAnim3
     ExAnim3=ExAnim3-1
    Else
     PMX3=0
    Fi   
   Fi   
  [$6C OLDVEC]
  
  
  Proc SETVBV(Byte Which,Card Addr)
   Card Pointer Temp
   Byte V
  
   Temp=$216+(Which LSH 1)
   V=RTCLOCK+1
   While V<>RTCLOCK Do oD
   Temp^=Addr
  
   FLIP=0
  Return
  
  
  Proc DrawScr(Card Addr, Card Scr, Byte
   ScrH)
   Byte V,I,J
   Card Z,SS
  
   SS=ScrH
   Z=10
  
   For I=0 To 1 Do
    V=SS/Z
    Poke(Addr+I,96+V)
  
    For J=1 To V Do
     SS=SS-Z
    Od
  
    Z=Z/10
   Od
  
   SS=Scr
   Z=1000
  
   For I=0 To 3 Do
    V=SS/Z
    Poke(Addr+I+2,96+V)
  
    For J=1 To V Do
     SS=SS-Z
    Od
  
    Z=Z/10
   Od
  Return
  
  
  Proc Draw2Digits(Card Addr, Byte Num)
   Byte Z,N
   Int I
  
   Z=10 
   N=Num
  
   For I=0 To 1 Do
    Poke(Addr+I,(N/Z)+96)
    N=N-((N/Z)*Z)
    Z=Z/10
   Od
  Return
  
  
  Byte Func RandBlock()
   Byte I
  
   If Level<15 Then
    I=Rand(4)+1
   Else
    I=Rand(4)+1
    If Rand(20)<10 Then
     I=Rand(4)+8
    Fi
   Fi
  
   If Rand(40)<1 Then
    I=4+Rand(4)
   Fi
  Return(I)
  
  
  Proc Pause()
   Int Z
  
   For Z=0 To 5 Do
   Od
  Return
  
  
  Proc DrawGameScreen()
   Byte A,CHBAS=756
   Card VVBLKD=$224
  
   Graphics(0) 
   Poke(559,46)
   DL=PeekC(560)+4
   For A=2 To 24 Do
    Poke(DL+A,4)
   Od
   Poke(DL-1,68)
  
   CHBAS=CHAddr
  
   Poke(708,74)
   Poke(709,206)
   Poke(710,138)
   Poke(711,30)
  
   OLDVEC=VVBLKD
   SETVBV(7,VBLANKD)
  
   MoveBlock(SC+2,"QRSTU"+1,5)
   SetBlock(SC+41,7,'♦)
  
   MoveBlock(SC+31,"VWXVQRSTU"+1,9)
   SetBlock(SC+72,7,'♦)
   DrawScr(SC+72,HiScr,HiScrH)
  
   MoveBlock(SC+122,"YW[UQ"+1,5)
  
   MoveBlock(SC+153,"YUZUY"+1,5)
  Return
  
  
  Proc DrawBlock(Byte X, Y)
   Card Loc,V
   Byte C
  
   Loc=SC+Y*80+10+(X LSH 1)
   C=Blocks(Y*10+X)
  
   If C=0 Then
    PokeC(Loc,0)
    PokeC(Loc+40,0)
   Else
    V=(C LSH 2)-2
    V=V+((C LSH 2)-1)*256
    PokeC(Loc,V)
  
    V=C LSH 2
    V=V+((C LSH 2)+1)*256
    PokeC(Loc+40,V)
   Fi
  Return
  
  
  Byte Func Title()
   Byte Quit,Ok,CHBAS=756,HIGH,LOW
   Card SC=88
  
   Graphics(18)
   CHBAS=ChAddr+6
   MoveBlock(SC+6,"AB┛♥┫EF╲"+1,8)
   MoveBlock(SC+87,"HIJ♥◀▶"+1,6)
   MoveBlock(SC+127,"KLM"+1,3)
   Poke(SC+132,'O-Controller)
   HIGH=Level/10
   LOW=Level-HIGH*10
   MoveBlock(CH+2032,CH+1408+(HIGH LSH 3
  ),8)
   MoveBlock(CH+2040,CH+1408+(LOW LSH 3)
  ,8)
  
  
   Quit=NO
   Ok=NO
  
   KEY=255
   Do Until CONSOL=7 And STRIG0=1 Od
  
   Do
    If KEY=28 Then
     Ok=YES
     Quit=YES
    Fi
    If CONSOL=5 Then 
     Level=Level+1
     If Level>Max_Level Then Level=1 Fi
     HIGH=Level/10
     LOW=Level-HIGH*10
     MoveBlock(CH+2032,CH+1408+(HIGH LSH
   3),8)
     MoveBlock(CH+2040,CH+1408+(LOW LSH 
  3),8)
     RTCLOCK=0
     Do Until CONSOL=7 Or RTCLOCK=20 Od
    ElseIf CONSOL=3 Then 
     Controller=1-Controller
     Poke(SC+132,'O-Controller)
     Do Until CONSOL=7 Or RTCLOCK=20 Od
    ElseIf CONSOL=6 Or STRIG0=0 Then
     Ok=YES
    Fi
   Until Ok=YES Od
  
   KEY=255
   Do Until CONSOL=7 And STRIG0=1 Od
  Return(Quit)
  
  
  Proc InitLevel()
   Byte X,Y,YY
  
   For Y=0 To 10 Do
    For X=0 To 9 Do
     Blocks(Y*10+X)=0
    Od
   Od
  
   YY=Level
   If Level>14 Then
    YY=YY-9
   Fi
   If YY>9 Then YY=9 Fi
   For Y=0 To YY Do
    For X=0 To 9 Do
     Blocks(Y*10+X)=RandBlock()
    Od
   Od
  
   For Y=0 To 10 Do
    For X=0 To 9 Do
     DrawBlock(X,Y)
    Od
   Od
  
   LevelDone=NO
  
   Carrying=0
   HowMany=0
   Frozen=0
   FirstRound=0
   If YY<6 Then
    Happy=YES
   Else
    Happy=NO
   Fi
  
   WhichPM=0
   Zero(53248,4)
  
   Lines=0
   LinesNeeded=(Level*3)+2
  
   Draw2Digits(SC+164,Lines)
   Draw2Digits(SC+204,LinesNeeded)
   Draw2Digits(SC+195,Level)
  Return
  
  
  Proc EraseYou(Byte X)
   Zero(SC+888+(X LSH 1),6)
   Zero(SC+928+(X LSH 1),6)
  Return
  
  
  Proc DrawYou(Byte X)
   Card Loc,V1,V2
  
   Loc=SC+890+(X LSH 1)
  
   If HowMany<3 Then
    If Happy=YES Then
     PokeC(Loc,27498) ; 106,107
     PokeC(Loc+40,28012) ; 108,109
    Else
     PokeC(Loc,30582) ; 118,119
     PokeC(Loc+40,31096) ; 120,121
    Fi
   Fi
  
   If Carrying<>0 Then
    V1=(Carrying LSH 2)-2
    V1=V1+((Carrying LSH 2)-1)*256
  
    V2=Carrying*4
    V2=V2+((Carrying LSH 2)+1)*256
  
    PokeC(Loc+2,V1)
    PokeC(Loc+42,V2)
  
    If HowMany>=2 Then    
     PokeC(Loc-2,V1)
     PokeC(Loc+38,V2)
  
     If HowMany>=3 Then
      PokeC(Loc,V1)
      PokeC(Loc+40,V2)
     Fi
    Fi
   Fi
  Return
  
  
  Proc AddKill(Byte X,Y)
   KillsX(NumKills)=X
   KillsY(NumKills)=Y
  
   NumKills=NumKills+1
   If NumKills>=100 Then
    NumKills=99
   Fi
  
   KillScore=KillScore+1
   If KillScore>13 Then
    KillScore=13
   Fi
  Return
  
  
  Proc ExplodeBlock(Byte X,Y,Typ)
   WhichPM=WhichPM+1
   If WhichPM=4 Then WhichPM=0 Fi
   Zero(PMG+512+WhichPM*128+ExY(WhichPM)
  ,8)
   Poke(53248+WhichPM,48+(X+5) LSH 3)
   If WhichPM=0 Then
    ExAnim0=15
   ElseIf WhichPM=1 Then
    ExAnim1=15
   ElseIf WhichPM=2 Then
    ExAnim2=15
   ElseIf WhichPM=3 Then
    ExAnim3=15
   Fi
   ExY(WhichPM)=16+(Y LSH 3)
  
   If Typ<>EXPLOSION Then
    MoveBlock(PMG+512+WhichPM*128+ExY(Wh
  ichPM),CH+504+(KillScore LSH 3),8)
   Else
    MoveBlock(PMG+512+WhichPM*128+ExY(Wh
  ichPM),CH+616,8)
   Fi
  Return
  
  
  Byte Func Same(Byte A,B)
   Byte Match
  
   Match=NO
   If A=B Or (A>4 And A<8) Or B=WILDCARD
   Then
    Match=YES
   Fi
  Return(Match)
  
  
  Proc KillBlock(Byte X,Y)
   Byte B,C
  
   C=Blocks(Y*10+X)
  
   If C<>0 Then
    Blocks(Y*10+X)=0
    DrawBlock(X,Y)
    ExplodeBlock(X,Y,SCORE)
  
    For B=0 To 100 Do
     Sound(0,KillScore*20,B,10)
    Od
    AUDF0=0
    AUDC0=0
  
    If C=BOMB Then
     If Y>0 Then
      Blocks((Y-1)*10+X)=0
      DrawBlock(X,Y-1)
      ExplodeBlock(X,Y-1,EXPLOSION)
     Fi
  
     If Y<10 Then
      Blocks((Y+1)*10+X)=0
      DrawBlock(X,Y+1)
      ExplodeBlock(X,Y+1,EXPLOSION)
     Fi
  
     If X>0 Then
      Blocks(Y*10+X-1)=0
      DrawBlock(X-1,Y)
      ExplodeBlock(X-1,Y,EXPLOSION)
     Fi
  
     If X<9 Then
      Blocks(Y*10+X+1)=0
      DrawBlock(X+1,Y)
      ExplodeBlock(X+1,Y,EXPLOSION)
     Fi
    ElseIf C=CLOCK Then
     Frozen=255
    Fi
  
    If Y>0 Then
     If Same(Blocks((Y-1)*10+X),C)=YES T
  hen
      AddKill(X,Y-1)
     Fi
    Fi
  
    If Y<10 Then
     If Same(Blocks((Y+1)*10+X),C)=YES T
  hen
      AddKill(X,Y+1)
     Fi
    Fi
  
    If X>0 Then
     If Same(Blocks(Y*10+X-1),C)=YES The
  n
      AddKill(X-1,Y)
     Fi
    Fi
  
    If X<9 Then
     If Same(Blocks(Y*10+X+1),C)=YES The
  n
      AddKill(X+1,Y)
     Fi
    Fi
   Fi
  Return
  
  
  Proc Honk()
   Byte B
  
   Sound(0,50,12,10)
   COLPF4=72 
   For B=0 To 200 Do
    Pause()
   Od
   COLPF4=0
   AUDF0=0
   AUDC0=0
  Return
  
  
  Proc Throw(Byte X)
   Int LastY
   Byte Y,C,Last,NextLast,B,YTop,YBot,
      KX,KY,Ok,DoIt
  
   If Carrying=0 Then
   Else
    Last=0
    NextLast=0
    LastY=-1
    For Y=0 To 10 Do
     C=Blocks(Y*10+X)
     If C<>0 Then
      NextLast=Last
      Last=C
      LastY=Y
     Fi
    Od
  
    Ok=NO
    If Same(Last,Carrying)=YES Then
     If (Same(NextLast,Carrying)=YES Or 
  HowMany>1) Then
      Ok=YES
     Fi
    Fi
  
    DoIt=YES
  
    YBot=LastY+1+HowMany-1
    If YBot>10 Then
     DoIt=NO
     YBot=10
     If Ok=YES Or HowMany>2 Then
      DoIt=YES
     Fi
    Fi
  
    If DoIt=YES Then
     For B=0 To 200 Do
      Sound(0,200-B,10,10)
      Pause()
     Od
     AUDF0=0
     AUDC0=0
  
     For Y=LastY+1 To YBot Do
      Blocks(Y*10+X)=Carrying
      DrawBlock(X,Y)
     Od
  
     Ok=NO
  
     If Same(Last,Carrying)=YES Then
      If (Same(NextLast,Carrying)=YES Or
   HowMany>1) Then
       Ok=YES
      Fi
     Fi
  
     If (HowMany>2) Then
      Ok=YES
     Fi
  
     If Ok=YES Then
      YTop=0
      For Y=0 To YBot Do
       If Blocks(Y*10+X)<>Carrying Then
        YTop=Y+1
       Fi
      Od
  
      NumKills=0
      KillScore=0
      AddKill(X,YBot)
  
      Lines=Lines+1
  
      Draw2Digits(SC+164,Lines)
  
      B=0
      Do
       KX=KillsX(B)
       KY=KillsY(B)
       KillBlock(KX,KY)
  
       B=B+1
      Until B>=NumKills Od
  
      Scr=Scr+ScrVals(KillScore)
      If Scr>=10000 Then
       Scr=Scr-10000
       ScrH=ScrH+1
      Fi
  
      DrawScr(SC+41,Scr,ScrH)
  
      If Scr>=HiScr Or ScrH>HiScrH Then
       HiScr=Scr
       HiScrH=ScrH
       DrawScr(SC+72,Scr,ScrH)
      Fi
     Fi
  
     Carrying=0
     HowMany=0
    Else
     Honk()
    Fi
   Fi
  
   If Lines>=LinesNeeded Then
    LevelDone=YES
   Fi
  Return
  
  
  Proc Grab(Byte X)
   Byte Y,C,Last,LastY,B,Ok
  
   Last=0
   LastY=0
  
   For Y=0 To 10 Do
    C=Blocks(Y*10+X)
    If C<>0 Then
     Last=C
     LastY=Y
    Fi
   Od
  
   If Last=0 Or (Last>4 And Last<8) Then
    Honk()
   Else
    If Last<>Carrying And Carrying<>0 Th
  en
     Honk()
    Else
     Carrying=Last
     Blocks(LastY*10+X)=0
     DrawBlock(X,LastY)
     HowMany=HowMany+1
  
     Do
      Ok=0
      LastY=LastY-1
      If LastY>=0 Then
       If Blocks(LastY*10+X)=Last Then
        Blocks(LastY*10+X)=0
        DrawBlock(X,LastY)
        Ok=1
        HowMany=HowMany+1
       Fi
      Fi
     Until Ok=0 Od
    Fi
  
    For B=0 To 200 Do
     Sound(0,B,10,10)
     Pause()
    Od
    AUDF0=0
    AUDC0=0
   Fi
  Return
  
  
  Proc AddMore()
   Byte X,Y,Y1
  
   For X=0 To 9 Do
    If Blocks(10*10+X)<>0 Then
     GameOver=YES
    Fi 
   Od
   
   If Gameover=NO Then
    For Y=0 To 9 Do ; Stupid Action!
     Y1=10-Y
  
     For X=0 To 9 Do
      Blocks(Y1*10+X)=Blocks((Y1-1)*10+X
  )
      DrawBlock(X,Y1)
     Od
    Od
  
    For X=0 To 9 Do
     Blocks(0*10+X)=RandBlock()
     DrawBlock(X,0)
    Od
   Fi
  Return
  

GEMDROP.ACT

HTML ATASCII Viewer by Bill Kendrick, 2012-2013
Options:
Columns: 38 | 40 | Unlimited
Style: Unicode | Images | Images (2x) | Compute! listings

The latter half of the game code.

  ; GEMDROP.ACT
  
  ; Gem Drop
  ; by Bill Kendrick
  ; kendrick@zippy.sonoma.edu
  ; http://zippy.sonoma.edu/kendrick/
  
  ; August 17, 1997 - Sept. 24, 1997
  
  INCLUDE "GEMRT.ACT"
  INCLUDE "GEMINC.ACT"
  
  Proc CheckHappy()
   Byte X,Y
  
   Happy=YES
   For Y=8 To 10 Do
    For X=0 To 9 Do
     If Blocks(Y*10+X)<>0 Then
      Happy=NO
     Fi
    Od
   Od
  Return
  
  
  Proc LevelEndFX(Byte YourX)
   Byte X,Y,B,Togl
   Card Loc
  
   Loc=SC+890+(YourX LSH 1)
   Togl=0
  
   For Y=0 To 10 Do
    For X=0 To 9 Do
     Blocks(Y*10+X)=0
     DrawBlock(X,Y)
    Od 
    For X=0 To 9 Do
     If Rand(10)<2 Then
      ExplodeBlock(X,Y,EXPLOSION)
     Fi
    Od
    For B=0 To 150 Do
     Pause()
     Pause()
     Pause()
     Sound(0,B,0,15-B/10)
    Od
  
    Togl=1-Togl
    If Togl=0 Then
     PokeC(Loc,28526) ; 110,111
     PokeC(Loc+40,29040) ; 112,113
    Else
     PokeC(Loc,29554) ; 114,115
     PokeC(Loc+40,30068) ; 116,117
    Fi
  
    Pause()
    Pause()
   Od
  Return
  
  
  Proc Level15FX()
   Byte X,I,T
  
   Zero(53248,4)
   Zero(PMG,1024)
   Pause()
   MoveBlock(PMG+512+000+16+40,57344+('U
  -32)*8,8)
   MoveBlock(PMG+512+128+16+40,57344+('H
  -32)*8,8)
   MoveBlock(PMG+512+256+16+40,57344+('O
  -32)*8,8)
   MoveBlock(PMG+512+384+16+40,57344+('H
  -32)*8,8)
  
   T=0
   For X=0 To 230 Do
    Poke(53248,250-X)
    Poke(53249,250-X+8)
    Poke(53250,250-X+24)
    Poke(53251,250-X+32)
    For I=0 To 50 Do
     Pause()
    Od
    SetBlock(704,4,15)
    Sound(0,X,4,T)
    If (X MOD 10)=0 Then
     Poke(712,T)
     T=15-T
    Fi
   Od
   Poke(712,0)
   Sound(0,0,0,0)
   Zero(PMG,1024)
  Return
  
  
  Proc Play()
   Byte X,S,K,OX,A,B,FrozCount,
    HappyTest,Fire,SegaFire,Activity,
    OAct
   Int Clicks
   Card Q,Loc
  
   DrawGameScreen()
   InitLevel()
   Clicks=0
   X=5
   Gameover=NO
   OAct=0 
   FrozCount=0
   Scr=0
   ScrH=0
  
   DrawYou(X)
  
   Do
    S=STICK0
    Fire=STRIG0
    If PADDL0=228 And Controller=SEGA Th
  en SegaFire=0
    Else SegaFire=1
    Fi
  
    If (S<>15 Or Fire=0 Or SegaFire=0) T
  hen
     OAct=1
     If OAct=1 And RTCLOCK<8 Then
      S=15
      Fire=1
      SegaFire=1
     Else
      RTCLOCK=0
     Fi
    Else
     OAct=0
     RTCLOCK=10
    Fi
    
    K=KEY
    KEY=255
  
    If S=7 Then K=7
    ElseIf S=11 Then K=6
    ElseIf S=14 Or SegaFire=0 Then K=14
    ElseIf S=13 Or Fire=0 Then K=15
    Fi
  
    OX=X
  
    If K=28 Or CONSOL<7 Then
     Gameover=YES
    ElseIf K=7 Then
     X=X+1
     If X>9 Then X=0 Fi
    ElseIf K=6 Then
     If X>0 Then
      X=X-1
     Else
      X=9
     Fi
    ElseIf K=14 Then
     Throw(X)
     EraseYou(X)
     DrawYou(X)
    ElseIf K=15 Then
     Grab(X)
     EraseYou(X)
     DrawYou(X)
    ElseIf K=33 Then
     Poke(708,2)
     Poke(709,4)
     Poke(710,6)
     Poke(711,8)
     KEY=255
     Do Until KEY=33 Or KEY=28 Or CONSOL
  <7 Od
     If KEY<>33 Then
      Gameover=YES
     Fi
     KEY=255
     Poke(708,74)
     Poke(709,206)
     Poke(710,138)
     Poke(711,30)
    Fi
  
    If OX<>X Then
     EraseYou(OX)
     DrawYou(X)
    Fi
  
    If Frozen=0 Then
     HappyTest=HappyTest+1
     If HappyTest>=100 Then
      HappyTest=0
      CheckHappy()
      DrawYou(X)
     Fi
  
     Clicks=Clicks+1
  
     If Level<15 Then Q=Level*125
     Else Q=(Level-10)*100
     Fi
   
     If Clicks>4500-Q And FirstRound=1 T
  hen
      Poke(DL-2,96+(16*(Clicks MOD 2)))
      Sound(0,100,0,8*(Clicks MOD 2))
     Fi
  
     If Clicks>4800-Q Then
      If FirstRound=1 Then
       Sound(0,0,0,0)
       Poke(DL-2,112)
       Clicks=0
       AddMore()
      Else
       FirstRound=1
       Clicks=0
      Fi
     Fi
    Else
     Happy=YES
  
     FrozCount=FrozCount+1
  
     If FrozCount=60 Then
      FrozCount=0
      Frozen=Frozen-1
      If (Frozen MOD 10)=0 Then
       For B=0 To 15 Do
        Sound(0,(Frozen MOD 20)*10+50,10
  ,15-B)
       Od
      Fi
     Fi
    Fi
  
    If LevelDone=YES Then
     LevelEndFX(X)
  
     Level=Level+1
     If Level>20 Then
      Level=20
     Fi
     If Level>Max_Level Then
      Max_Level=Level
     Fi
  
     If Level=15 Then
       Level15FX()
     Fi
  
     InitLevel()
     Clicks=0
    Fi
   Until Gameover=YES Od
  
   Zero(53248,13)
  
   Quiet()
  
   Loc=SC+880+10+(X LSH 1)
  
   PokeC(Loc,30582) ; 118,119
   PokeC(Loc+40,31096) ; 120,121
  
   For A=0 To 254 Do
    Sound(0,A,10,15)
    SetBlock(SC+(A/12)*40+10,20,'\)
    Pause()
    Pause()
    Pause()
    Pause()
   Od
  
   MoveBlock(SC+131,"]]]\]]]\]]]]]\]]]\"
  +1,18)
   MoveBlock(SC+171,"]♥♥♥]♥]♥]♥]♥]♥]♥♥♥"
  +1,18)
   MoveBlock(SC+211,"]♥]\]]]♥]♥]♥]♥]]\\"
  +1,18)
   MoveBlock(SC+251,"]♥]♥]♥]♥]♥\♥]♥]♥♥\"
  +1,18)
   MoveBlock(SC+291,"]]]♥]♥]♥]♥\\]♥]]]\"
  +1,18)
   MoveBlock(SC+331,"\♥♥♥\♥\♥\♥\\\♥\♥♥♥"
  +1,18)
  
   MoveBlock(SC+413,"]]]\]\]\]]]\]]]\"+1
  ,16)
   MoveBlock(SC+453,"]♥]♥]♥]♥]♥♥♥]♥]♥"+1
  ,16)
   MoveBlock(SC+493,"]♥]♥]♥]♥]]\\]]\♥"+1
  ,16)
   MoveBlock(SC+533,"]♥]♥\]\♥]♥♥\]♥]\"+1
  ,16)
   MoveBlock(SC+573,"]]]♥\]♥\]]]\]♥]♥"+1
  ,16)
   MoveBlock(SC+613,"\♥♥♥\\♥\\♥♥♥\♥\♥"+1
  ,16)
  
   Quiet()
  
   KEY=255
   Do Until CONSOL=7 And STRIG0=1 Od
  
   Do
   Until KEY<255 Or CONSOL<7 Or STRIG0=0
   Od
  
   KEY=255
   Do Until CONSOL=7 And STRIG0=1 Od
  
   SETVBV(7,OLDVEC)
  
   Quiet()
  Return
  
  
  Proc QuitApp()
   Graphics(0)
   Quiet()
   PutE()
   PrintE("Thanks for playing ◢GEMDrop◣"
  )
   PrintE("Please visit NBS's website!")
   PrintE("http://zippy.sonoma.edu/kendr
  ick/nbs/")
  Return
  
  
  Proc Main()
   Byte Quit
  
   Setup()
   Do
    Quit=Title()
    If Quit=NO Then
     Play()
     Graphics(0)
     Poke(559,0)
     Close(1)
     Open(1,"D:GEMDROP.DAT",8,0)
     PrintBDE(1,Max_Level)
     PrintCDE(1,HiScr)
     PrintBDE(1,HiScrH)
     Close(1)
    Fi
   Until Quit=YES Od
   QuitApp()
  Return

GEMRT.ACT

HTML ATASCII Viewer by Bill Kendrick, 2012-2013
Options:
Columns: 38 | 40 | Unlimited
Style: Unicode | Images | Images (2x) | Compute! listings

These are "runtime" libraries; things that must be compiled into the game to allow it to run without an Action! programming cartridge installed. (It consists of just the parts of a runtime needed for Gem Drop to run — it appears to be Jeff Reister's PD Runtime package for the Action! 8 bit language, which can be found in the "Code" section of Eric Parent ("Joyful Coder")'s Action! website.)

  ; GEMRT.ACT
  ; ACTION! RUNTIME LIBRARY
  ; FOR GEMDROP
  
  PROC _CPYPRM=*()
  SET $4EE = _CPYPRM
  [$85$A0$86$A1$84$A2$18$68$85$84$69$03
  $A8$68$85$85$69$00$48$98$48$A0$01$B1
  $84$85$82$C8$B1$84$85$83$C8$B1$84$A8
  $B9$A0$00$91$82$88$10$F8$60]
  
  PROC _CHGSGN=*()
  [$85$C0$86$C1$38$A9$00$E5$C0$48$A9$00
  $E5$C1$AA$68$60]
  
  PROC _FIXSGN=*()
  [$86$C2$E0$00$10$03$20 _CHGSGN $85$82
  $86$83$A5$85$45$C2$85$C2$A6$85$10$09
  $A5$84$20 _CHGSGN $85$84$86$85$60]
  
  PROC _FIXRES=*()
  [$A5$86$A6$87$A4$C2$10$03$4C _CHGSGN
  $60]
  
  PROC _MUL=*()
  SET $4E8 = _MUL
  [$20 _FIXSGN $A9$00$85$86$85$87$A5$82
  $D0$04$A5$83$F0$22$A5$84$D0$04$A5$85
  $F0$1A$46$85$66$84$90$0D$18$A5$86$65
  $82$85$86$A5$87$65$83$85$87$06$82$26
  $83$38$B0$D6$4C _FIXRES]
  
  PROC _DIV=*()
  SET $4EA = _DIV
  [$20 _FIXSGN $A9$00$85$86$85$87$85$C1
  $A9$01$85$C0$A5$82$D0$04$A5$83$F0$5F
  $A5$84$D0$04$A5$85$F0$57$A5$82$C5$84
  $A5$83$E5$85$90$0F$A5$C1$30$0B$06$84
  $26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0
  $04$A5$C1$F0$36$A5$82$D0$04$A5$83$F0
  $2E$A5$82$C5$84$A5$83$E5$85$90$19$38
  $A5$82$E5$84$85$82$A5$83$E5$85$85$83
  $A5$86$05$C0$85$86$A5$87$05$C1$85$87
  $46$85$66$84$46$C1$66$C0$38$B0$C2$4C
  _FIXRES]
  
  PROC _MODOP=*()
  SET $4EC = _MODOP
  [$20 _DIV $A5$82$A6$83$60]
  
  ;PROC _RSHOP=*()
  ;SET $4E6 = _RSHOP
  ;[$A4$84$F0$0A$86$86$46$86$6A$88$D0$FA
  ;$A6$86$60]
  
  PROC _LSHOP=*()
  SET $4E4 = _LSHOP
  [$A4$84$F0$0A$86$86$0A$26$86$88$D0$FA
  $A6$86$60]
  
  PROC _ERROU=*()
  [$A9$70$AA$A9$0C$9D$42$03$20$56$E4$8A
  $38$E9$10$D0$F1$6C$0A$00]
  
  PROC _ERRVEC=*()
  [_ERROU]
  
  PROC _DEVIC=*()
  [$00]
  
  MODULE
  CARD Error=_ERRVEC
  BYTE device=_DEVIC
  
  PROC _GOCIO=*()
  [$20$56$E4$10$1A$C0$88$F0$06$68$68$98
  $6C _ERRVEC $48$8A$48$4A$4A$4A$4A$AA
  $A9$01$9D$C0$05$68$AA$68$60]
  
  PROC _LODCHN=*()
  [$C9$08$90$07$68$68$A9$86$6C _ERRVEC
  $0A$0A$0A$0A$AA$60]
  
  PROC _STONAM=*()
  [$18$69$01$9D$44$03$98$69$00$9D$45$03
  $60]
  
  PROC _SHFTR=*()
  [$48$8A$A8$68$AA$AD _DEVIC $60]
  
  ;PROC _CLREOL=*()
  ;[$48$A9$00$85$A5$68$60]
  
  PROC _SETEOL=*()
  [$48$A9$01$85$A5$68$60]
  
  PROC _PRECON=*()
  [$8A$48$98$AA$68$A0$03$84$A3$A0$FD$60]
  
  PROC _DOPRNT=*()
  [$86$A3$84$A4$20 _LODCHN $A9$00$9D$49
  $03$A8$B1$A3$F0$1A$9D$48$03$18$A5$A3
  $69$01$9D$44$03$A5$A4$69$00$9D$45$03
  $A9$0B$9D$42$03$20 _GOCIO $A5$A5$F0
  $12$A9$00$9D$48$03$9D$49$03$A9$0B$9D
  $42$03$A9$9B$20 _GOCIO $60]
  
  PROC StrC=*(CARD c, s)
  [$85$D4$86$D5$84$A2$20$AA$D9$20$E6$D8
  $A0$00$B1$F3$30$06$C8$91$A2$38$B0$F6
  $29$7F$C8$91$A2$98$A0$00$91$A2$60]
  
  ;PROC StrB=*(BYTE b CARD s)
  ;[$84$A3$48$8A$A8$A2$00$68$4C StrC]
  
  ;PROC StrI=*(INT i CARD s)
  ;[$E0$00$30$03$4C StrC   $49$FF$85$A2
  ;$8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20
  ;StrC $A0$00$18$B1$A2$69$01$91$A2$A8
  ;$88$B1$A2$C8$91$A2$88$88$D0$F7$C8$A9
  ;$2D$91$A2$60]
  
  PROC _DOPRNC=*()
  [$48$20 _PRECON $20 StrC $68$A2$FD$A0
  $03$4C _DOPRNT]
  
  ;PROC DOPRNI=*()
  ;[$48$20 _PRECON $20 StrI $68$A2$FD$A0
  ;$03$4C _DOPRNT]
  
  ;PROC PrintCD=*(BYTE d CARD c)
  ;[$20 _CLREOL $4C _DOPRNC]
  
  ;PROC PrintC=*(CARD c)
  ;[$20 _SHFTR $4C PrintCD]
  
  PROC PrintCDE=*(BYTE d CARD c)
  [$20 _SETEOL $4C _DOPRNC]
  
  ;PROC PrintCE=*(CARD c)
  ;[$20 _SHFTR $4C PrintCDE]
  
  ;PROC PrintBD=*(BYTE d, b)
  ;[$A0$00$4C PrintCD]
  
  ;PROC PrintB=*(BYTE b)
  ;[$20 _SHFTR $4C PrintBD]
  
  PROC PrintBDE=*(BYTE d, b)
  [$A0$00$4C PrintCDE]
  
  ;PROC PrintBE=*(BYTE b)
  ;[$20 _SHFTR $4C PrintBDE]
  
  ;PROC PrintID=*(BYTE d INT i)
  ;[$20 _CLREOL $4C _DOPRNI]
  
  ;PROC PrintI=*(INT i)
  ;[$20 _SHFTR $4C PrintID]
  
  ;PROC PrintIDE=*(BYTE d INT i)
  ;[$20 _SETEOL $4C _DOPRNI]
  
  ;PROC PrintIE=*(INT i)
  ;[$20 _SHFTR $4C PrintIDE]
  
  ;PROC PrintD=*(BYTE d CARD s)
  ;[$20 _CLREOL $4C _DOPRNT]
  
  ;PROC Print=*(CARD s)
  ;[$20 _SHFTR $4C PrintD]
  
  PROC PrintDE=*(BYTE d CARD s)
  [$20 _SETEOL $4C _DOPRNT]
  
  PROC PrintE=*(CARD s)
  [$20 _SHFTR $4C PrintDE]
  
  ;PROC _HEXSTR=*()
  ;[$85$84$86$85$A9$FD$85$A2$A9$03$85$A3
  ;$A0$00$A9$05$91$A2$C8$A9$24$91$A2$A9
  ;$00$A2$04$06$84$26$85$2A$CA$D0$F8$69
  ;$30$C9$3A$90$02$69$06$C8$91$A2$C0$05
  ;$D0$E5$60]
  
  ;PROC PrintF=*(CARD s,a,b,c,d,e,f,g)
  ;[$85$82$86$83$84$A2$AD _DEVIC $0A$0A
  ;$0A$0A$85$C1$A0$00$84$87$84$C0$B1$82
  ;$F0$4C$85$86$E6$C0$F0$46$A4$C0$C4$86
  ;$F0$02$B0$3E$B1$82$C9$25$D0$3E$E6$C0
  ;$C8$C4$86$F0$02$B0$35$B1$82$C9$25$F0
  ;$2F$C9$45$F0$29$A8$A6$87$E0$0E$B0$D4
  ;$B5$A2$48$B5$A3$E8$E8$86$87$AA$68$C0
  ;$43$F0$15$C0$49$F0$34$C0$48$F0$3C$C0
  ;$53$F0$3F$38$B0$1D$60$38$B0$B2$A9$9B
  ;$A8$A6$C1$A9$00$9D$48$03$9D$49$03$A9
  ;$0B$9D$42$03$98$20 _GOCIO $38$B0$E4
  ;$A0$03$84$A3$A0$FD$20 StrC $38$B0$0F
  ;$A0$03$84$A3$A0$FD$20 StrI $38$B0$03
  ;$20 _HEXSTR $A9$FD$A2$03$85$84$86$85
  ;$A6$C1$A9$00$9D$49$03$A8$B1$84$F0$B5
  ;$9D$48$03$18$A5$84$69$01$9D$44$03$A5
  ;$85$69$00$9D$45$03$A9$0B$9D$42$03$20
  ;_GOCIO $38$B0$98]
  
  PROC PutD=*(BYTE d, c)
  [$86$A0$20 _LODCHN $A9$00$9D$48$03$9D
  $49$03$A9$0B$9D$42$03$A5$A0$20 _GOCIO
  $60]
  
  ;PROC PutDE=*(BYTE d)
  ;[$A2$9B$4C PutD]
  
  PROC Put=*(BYTE c)
  [$AA$AD _DEVIC $4C PutD]
  
  PROC PutE=*()
  [$A9$9B$4C Put]
  
  ;BYTE FUNC ValB=*(CARD a)
  CARD FUNC ValC=*(CARD a)
  ;INT FUNC ValI=*(CARD a)
  [$85$A2$86$A3$A9$00$85$A0$85$A1$85$A5
  $A8$B1$A2$85$A4$C8$B1$A2$C9$20$F0$F9
  $C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$02$B0
  $31$B1$A2$38$E9$30$90$2A$C9$0A$B0$26
  $48$06$A0$26$A1$A5$A0$A6$A1$0A$26$A1
  $0A$26$A1$18$65$A0$85$A0$8A$65$A1$85
  $A1$18$68$65$A0$85$A0$90$CD$E6$A1$38
  $B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85
  $A0$A9$00$E5$A1$85$A1$60]
  
  PROC _DOINPT=*()
  [$86$A4$84$A5$20 _LODCHN $18$A5$A4$69
  $01$9D$44$03$A5$A5$69$00$9D$45$03$A5
  $A3$F0$18$9D$48$03$A9$00$9D$49$03$A9
  $05$9D$42$03$20 _GOCIO $BD$48$03$F0
  $03$38$E9$01$A0$00$91$A4$A5$A6$F0$07
  $A5$A4$A6$A5$4C ValC $60]
  
  BYTE FUNC InputBD=*(BYTE d)
  CARD FUNC InputCD=*(BYTE d)
  ;INT FUNC InputID=*(BYTE d)
  [$48$A9$78$85$A3$A9$01$85$A6$68$A2$FD
  $A0$03$4C _DOINPT]
  
  ;BYTE FUNC InputB=*()
  ;CARD FUNC InputC=*()
  ;INT FUNC InputI=*()
  ;[$AD _DEVIC$4C InputCD]
  
  ;PROC InputMD=*(BYTE d CARD s BYTE l)
  ;[$48$A9$00$85$A6$68$4C _DOINPT]
  
  ;PROC InputSD=*(BYTE d CARD s)
  ;[$48$A9$FF$85$A3$68$4C InputMD]
  
  ;PROC InputS=*(CARD s)
  ;[$20 _SHFTR $4C InputSD]
  
  ;CHAR FUNC GetD=*(BYTE d)
  ;[$20 _LODCHN $A9$00$9D$48$03
  ;$9D$49$03$A9$07$9D$42$03$20 _GOCIO
  ;$85$A0$60]
  
  PROC Open=*(BYTE d CARD s BYTE m, a)
  [$86$A1$20 _LODCHN $A5$A1$20
   _STONAM $A5$A3$9D$4A$03$A5$A4$9D$4B
  $03$A9$03$9D$42$03$20 _GOCIO $8A$4A
  $4A$4A$4A$AA$A9$00$9D$C0$05$60]
  
  PROC Close=*(BYTE d)
  [$20 _LODCHN $A9$0C$9D$42$03$20
  _GOCIO $60]
  
  ;PROC XIO=*(BYTE d,z,c,a1,a2 CARD s)
  ;[$20 _LODCHN $98$9D$42$03$A5$A3$9D$4A
  ;$03$A5$A4$9D$4B$03$A5$A5$A4$A6$20
  ;_STONAM $20 _GOCIO $60]
  
  ;PROC Note=*(BYTE d CARD s, o)
  ;[$86$A1$84$A2$20 _LODCHN $A9$26$9D$42
  ;$03$20 _GOCIO $A0$00$BD$4C$03$91$A1
  ;$BD$4E$03$91$A3$BD$4D$03$C8$91$A1$60]
  
  ;PROC Point=*(BYTE d CARD s BYTE o)
  ;[$86$A1$20 _LODCHN $A5$A1$9D$4C$03$98
  ;$9D$4D$03$A5$A3$9D$4E$03$A9$25$9D$42
  ;$03$20 _GOCIO $60]
  
  PROC Graphics=*(BYTE m)
  [$48$A2$60$A9$0C$9D$42$03$20$56$E4$68
  $9D$4B$03$49$10$09$0C$9D$4A$03$A9$53
  $85$A0$A9$3A$85$A1$A9$A0$9D$44$03$A9
  $00$9D$45$03$A9$03$9D$42$03$20 _GOCIO
  $60]
  
  ;PROC SetColor=*(BYTE r, h, l)
  ;[$C9$05$B0$13$85$A0$8A$0A$0A$0A$0A$85
  ;$A1$98$29$0F$05$A1$A6$A0$9D$C4$02$60]
  
  PROC Position=*(CARD x BYTE y)
  [$85$55$86$56$84$54$60]
  
  ;PROC Plot=*(CARD x BYTE y)
  ;[$20 Position $A9$06$AE$FD$02$4C
  ;PutD]
  
  ;PROC DrawTo=*(CARD x BYTE y)
  ;[$20 Position $A2$60$A9$11
  ;$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO
  ;$60]
  
  ;PROC Fill=*(CARD x BYTE y)
  ;[$20 Position $A2$60$A9$12
  ;$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO
  ;$60]
  
  ;BYTE FUNC Locate=*(CARD x BYTE y)
  ;[$20 Position $A9$06$4C GetD]
  
  PROC Sound=*(BYTE c, p, d, v)
  [$C9$04$B0$25$86$A1$0A$AA$A9$00$8D$08
  $D2$A9$03$8D$0F$D2$A5$A3$29$0F$85$A3
  $98$29$0E$0A$0A$0A$0A$05$A3$9D$01$D2
  $A5$A1$9D$00$D2$60]
  
  ;PROC SndRst=*()
  ;[$A9$00$A2$07$9D$00$D2$CA$10$FA$60]
  
  ;BYTE FUNC Paddle=*(BYTE p)
  ;[$29$07$AA$BD$70$02$85$A0$60]
  
  ;BYTE FUNC PTrig=*(BYTE p)
  ;[$29$07$AA$BD$7C$02$85$A0$60]
  
  ;BYTE FUNC Stick=*(BYTE p)
  ;[$29$03$AA$BD$78$02$85$A0$60]
  
  ;BYTE FUNC STrig=*(BYTE p)
  ;[$29$03$AA$BD$84$02$85$A0$60]
  
  ;INT FUNC SCompare=*(CARD s1, s2)
  ;[$85$A4$86$A5$84$A2$A0$00$84$A0$84$A1
  ;$B1$A4$85$A6$B1$A2$85$A7$C4$A6$F0$15
  ;$C4$A7$F0$11$C8$B1$A4$D1$A2$F0$F1$90
  ;$03$E6$A0$60$C6$A0$C6$A1$60$A5$A6$C5
  ;$A7$F0$F9$B0$F0$90$F1]
  
  PROC SCopy=*(CARD d, s)
  [$85$A0$86$A1$84$A2$A0$00$B1$A2$A8$B1
  $A2$91$A0$C0$00$F0$04$88$38$B0$F4$60]
  
  ;PROC SCopyS=*(CARD d, s BYTE b, e)
  ;[$85$A0$86$A1$84$A2$A0$00$84$A6$B1$A2
  ;$C5$A5$B0$02$85$A5$A5$A4$F0$15$C5$A5
  ;$F0$02$B0$0F$A4$A4$E6$A4$B1$A2$E6$A6
  ;$A4$A6$91$A0$38$B0$E7$A5$A6$A0$00$91
  ;$A0$60]
  
  ;PROC SAssign=*(CARD d, s BYTE b, e)
  ;[$85$A0$86$A1$84$A2$A5$A4$F0$3B$C5$A5
  ;$F0$02$B0$35$85$A7$C6$A7$A0$00$84$A8
  ;$B1$A0$85$A9$B1$A2$85$AA$A5$A7$C5$A5
  ;$B0$15$A5$A8$C5$AA$B0$0F$E6$A8$A4$A8
  ;$B1$A2$E6$A7$A4$A7$91$A0$38$B0$E5$A5
  ;$A7$C5$A9$90$04$A0$00$91$A0$60]
  
  BYTE FUNC Rand=*(BYTE r)
  [$85$A2$C6$A2$A9$01$C5$A2$B0$05$38$2A
  $38$B0$F7$85$A3$AD$0A$D2$25$A3$C5$A2
  $F0$04$90$02$B0$F3$85$A0$60]
  
  PROC Poke=*(CARD a BYTE v)
  [$85$A0$86$A1$98$A0$00$91$A0$60]
  
  PROC PokeC=*(CARD a, v)
  [$20 Poke $C8$A5$A3$91$A0$60]
  
  ;BYTE FUNC Peek=*(CARD a)
  CARD FUNC PeekC=*(CARD a)
  [$85$A2$86$A3$A0$00$B1$A2$85$A0$C8$B1
  $A2$85$A1$60]
  
  PROC SetBlock=*(CARD a, l, v)
  [$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04
  $A5$A3$F0$16$A5$A4$91$A0$C8$D0$02$E6
  $A1$C6$A2$A5$A2$C9$FF$D0$E7$C6$A3$38
  $B0$E2$60]
  
  PROC Zero=*(CARD a, l)
  [$48$A9$00$85$A4$68$4C SetBlock]
  
  PROC MoveBlock=*(CARD d, s, l)
  [133 160 134 161 132 162 160   0 166
   165 240  14 177 162 145 160 200 208
   249 230 163 230 161 202 208 242 166
   164 240   8 177 162 145 160 200 202
   208 248  96]
  
  MODULE

← Back to Gem Drop docs