! Dimension arrays & variables
DIM RECT_OLD AS RECT
DIM RECT_NEW AS RECT
DIM PALETTE%(3, 15)
 
!-----------
! Functions
!-----------
 
! Returns the RGB value for a given color.
DEF FN RGB(R%, G%, B%) = R% * $100 + G% * $10 + B%
 
! Define color palettes
! 0) Gray
! 1) Red
! 2) Green
! 3) Blue
FOR ENTRY% = 1 TO 15
  COLOR% = 16 - ENTRY%
  RGB% = FN RGB(COLOR%, COLOR%, COLOR%)
  PALETTE%(0, ENTRY%) = RGB%
  RGB% = FN RGB(COLOR%, 0, 0)
  PALETTE%(1, ENTRY%) = RGB%
  RGB% = FN RGB(0, COLOR%, 0)
  PALETTE%(2, ENTRY%) = RGB%
  RGB% = FN RGB(0, 0, COLOR%)
  PALETTE%(3, ENTRY%) = RGB%
NEXT
 
! Start QuickDraw II
HGR
 
! Draw rain drops until a key is pressed.
KEY% = 0
DO UNTIL KEY% > 127
  ! Select a color palette
  PALETTE_ID% = RND (1) * 4
  IF PALETTE_ID% = 4 THEN PALETTE_ID% = 3
 
  ! Load the color palette
  FOR ENTRY% = 1 TO 15
    COLOR% = PALETTE%(PALETTE_ID%, ENTRY%)
    SETCOLORENTRY (0, ENTRY%, COLOR%)
  NEXT
 
  ! Set the splash location.
  X% = RND (1) * 320
  Y% = RND (1) * 200
 
  ! Draw the doplet.
  FOR DROP_Y% = 0 TO Y%
    HCOLOR= 15
    HPLOT X%, DROP_Y%
    HCOLOR= 0
    HPLOT X%, DROP_Y% - 3
  NEXT
 
  ! Draw the splash.
  RECT_OLD.H1 = X%
  RECT_OLD.H2 = X%
  RECT_OLD.V1 = Y%
  RECT_OLD.V2 = Y%
  FOR RADIUS% = 1 TO 15
    RADIUS_X% = RADIUS% * (1 + Y% / 100)
    RADIUS_Y% = RADIUS_X% / 4
    RECT_NEW.H1 = X% - RADIUS_X%
    RECT_NEW.H2 = X% + RADIUS_X%
    RECT_NEW.V1 = Y% - RADIUS_Y%
    RECT_NEW.V2 = Y% + RADIUS_Y%
    COLOR% = RADIUS%
    SET640COLOR (COLOR%)
    FRAMEOVAL (RECT_NEW)
    SET640COLOR (0)
    FRAMEOVAL (RECT_OLD)
    RECT_OLD = RECT_NEW
  NEXT
  SET640COLOR (0)
  FRAMEOVAL (RECT_OLD)
  KEY% = PEEK ($00C000)
LOOP
 
END
