2071
Axe / Re: Project Snake X - help
« on: August 12, 2010, 01:25:31 pm »
To draw just the rain, you would execute a loop with only these parts:
As for a more thoroughly commented source:
Code: [Select]
: .ADD RAIN
: DS<(A,5)
: Pt-Change(rand^96,1,Pic2)
: End
:
: Vertical +
: DispGraph
As for a more thoroughly commented source:
Code: [Select]
:.SNAKEX
:
:.<DATA>
:.LOGO
:[07C0000000000000000000001FE0000000000000000000001FF0000000780000000000003FF0000000FC0000000001F87FF7CF0000FC0000000787F87FF7DF87E0FC0000001F87F07BF7FF8FF0FC0000003F87E079E7FF8FF8FC0000003FC7C07F07FF9FFCFC1000001FEF807FE7FF8FFCFC7C00000FFF807FF7FF8FFCFDFE1E0007FF807FF7FF8FFEFDFE3FC003FF001FF7FF9FFEFFFC7FC001FE0001F7FF9FFEFFF8FFC001FF0039F7EF9FFEFFE0FFC000FF8079F7EFDFFEFFC1FBC001FFC0FFF7EFDFFEFFE1FFC003FFF0FFF7C30FFEFFE1FFC003FFFC7FE3C00FDFFFF1FF8007E7FC1F0000000EFDFFFDE00FC3FC00000000007CFEFBE01F83F80000000000187EFFE03F83F80000000000003E7FE03F8040000000000000003FC03F00000000000000000000000E]→Pic1
:
:.MENU RAIN
:[8080808000000000]→Pic2
:
:.MENU ARROW
:[0010181C18100000]→Pic3
:
:.MENU ITEMS
:"PLAY"→Str1
:"HELP"→Str2
:"SCORES"→Str3
:"QUIT"→Str4
:
:
:.<INITIALIZING>
:DiagnosticOff
:ClrDraw
:ClrDraw{^r}
:
:.STORE MENU TO BACK BUFFER
:Fix 1
:Fix 5
:Text(30,28→M→N,Str1)
:Text(30,36,Str2)
:Text(30,44,Str3)
:Text(30,52,Str4)
:DrawInv
:StorePic
:ClrDraw
:
:.INTRO EFFECT
:For(A,0,63)
: Line(0,A,95,63-A)
: DispGraph
:End
:For(A,0,95)
: Line(A,0,95-A,63)
: DispGraph
:End
:
:1→A→Z
:
:
:.<MENU LOOP>
:Repeat getKey→K=9 and (M=N) or (K=15)
:
: .MOVE CURSOR
: .Update the cursor destination and current position, although does not draw cursor
: min(max(K=1-(K=4)*8+M,28),52)→M>N-(M<N)+N→N
:
: .ADD RAIN
: .Add a new rain sprite every 5 iterations of the menu loop
: DS<(A,5)
: Pt-Change(rand^96,1,Pic2)
: End
:
: .DRAW LOGO AND MENU
: .Shift sandstorm
: Z+1→Z
: .Move rain down
: Vertical +
: .Backup rain image
: conj({L6},{L1},708)
: .Draw logo, sandstorm, menu, and cursor
: sub(DM)
: .Update screen
: DispGraph
: .Restore rain image
: conj({L1},{L6},708)
:
:End
:
:
:.<MENU HANDLER>
:Fix 0
:Fix 4
:ClrHome
:
:.If user did not quit
:If K-15 and (M-52)
:
: .If PLAY
: !If M-28
: Disp Str1
: End
:
: .If HELP
: !If M-36
: Disp Str2
: End
:
: .If SCORES
: !If M-44
: Disp Str3
: End
:
:.If QUIT
:Else
: Disp Str4
:End
:Return
:
:
:.<SUBROUTINES>
:.DRAW MENU
:Lbl DM
:
: .DRAW LOGO AND SANDSTORM
: .Loop through the logo, 2 bytes at a time
: For(B,0,148)
: .Logo data - End state: Black logo image on white bg
: .XOR 65535 - Inverts logo data - End state: White logo image on black bg
: .AND Rain image - If either is white (0), output is white, so logo and rain remain white - End state: White logo image and white rain on black bg
: .OR *Must wait for data in parentheses to be parsed* :
: .Sandstorm garbage
: .AND Logo data - This is the original, black on white logo. For the outside of the logo text, which is white (0), all ANDs will result in staying white (no change, so outside of logo text is unaffected) - The black text of the logo is all black (1), so the end state will be determined by the random data of the sandstorm - End state: Random black/white image on white bg
: .OR ^ - The only areas of ^ which can be black are the logo text, so everything outside the logo text will be unaffected, while areas inside (previously white) will take on the random sandstorm image - End state: Sandstorm logo image and white rain on black bg
: .→ Buffer
: {B*2+Pic1}{^r}→D{box}65535{dot}{B*2+{L6}→C}{^r}{cross}({B*2+Z}{^r}{dot}D)→{C}{^r}
: End
:
: .DRAW MENU ITEMS
: .Loop through the menu image, 2 bytes at a time
: For(B,168,353)
: .Menu image - End state: White text on black bg
: .AND Rain image - If either is white (0 - menu text and rain droplets), result will be white (0) - End state: White menu items and rain on black bg
: .→ Buffer
: {B*2+{L3}}{^r}{dot}{B*2+{L6}→C}{^r}→{C}{^r}
: End
:
: .DRAW CURSOR
: .Draw black cursor, turning any rain that might have been there black
: Pt-On(22,N,Pic3)
: .Invert cursor, turning cursor white
: Pt-Change(22,N,Pic3)
:
:Return
:
:
:.<VARIABLES>
:.A=Counter to add rain
:.B=Temp loop variable for Lbl DM
:.C=Temp
:.D=Temp
:.K=getKey
:.M=Menu cursor destination
:.N=Menu cursor current display position
:.Z=Sandstorm offset
:.{L1}=Rain image backup
:.{L3}=Menu items image
:.{L6}=Rain image