Author Topic: when a goof goes trippy!  (Read 2388 times)

0 Members and 1 Guest are viewing this topic.

Offline Cobalt

  • QB64 Developer
  • Forum Resident
  • Posts: 878
  • At 60 I become highly radioactive!
    • View Profile
when a goof goes trippy!
« on: April 13, 2019, 02:24:32 pm »
Rearranging some code in my Kings Bounty project and found this little effect popped up. Looks really trippy, not that I have found what I did to create the effect, could see lots of interesting uses for it. Kind of like a Pixar movie outtake. Just hit ESC when it stops scrolling.

Code: QB64: [Select]
  1. 'Kings Bounty 64, Logo Screen Intro
  2. '2019, Feb 25, 18:10 EST
  3. '2019, Feb 26, 00:32 EST Ver 1.1a
  4. '2019, Apr 12, 10:35 EDT Final Tweaking logo intro-finished
  5. 'UniKorn ProDucKions- Cobalt
  6. 'YouTube Preview-  [youtube]https://youtu.be/NJ6gJVpzGN8[/youtube]
  7.  
  8. SCREEN _NEWIMAGE(640, 480, 32)
  9. CONST TRUE = -1, FALSE = NOT TRUE, LARGE = 1, SMALL = 2
  10. DIM SHARED Layer(24) AS LONG, Trigger(10) AS _BYTE
  11. DIM SHARED Title(3, 3) AS STRING, Names(3) AS STRING
  12. '------------------Layer constants------------------
  13. CONST MIX = 1, WINDOWS = 2, TILES = 3, BACKGROUNDS = 4, UNITS = 5, START_SCREENS = 6
  14. CONST BGCOLOR = 8, VICTORY = 9, TEMP_1 = 21, TEMP_2 = 22, TEMP_3 = 23
  15. CONST SPELLCHART = 19, VILLAINCHART = 20
  16.  
  17. Layer(0) = _DISPLAY
  18. Layer(MIX) = _NEWIMAGE(640, 480, 32) 'mix layer
  19. Layer(START_SCREENS) = _LOADIMAGE("startscreens.png", 32) 'sheet layer
  20. Layer(TEMP_2) = _NEWIMAGE(640, 480, 32) 'fade in\out layer
  21. Layer(TEMP_3) = _NEWIMAGE(640, 480, 32) 'NWC screen fade
  22. _CLEARCOLOR _RGB32(0, 0, 0), Layer(START_SCREENS)
  23. BGM& = _SNDOPEN("LogoScreen002a.ogg")
  24. FOR i%% = 0 TO 10
  25.  Trigger(i%%) = FALSE
  26. NEXT i%%
  27. _TITLE "Kings Bounty 64- Logo Intro"
  28. 'IF BGM& THEN _SNDPLAY BGM&
  29. 'Start_Logos
  30. Fade_In_Character_Screen
  31. Character_Selection_Screen
  32.  
  33. Names:
  34. DATA "Sir Crimsaun","Lord Palmer","Tynnestra","Mad Moham"
  35. Titles:
  36. DATA "Knight","General","Marshal","Lord"
  37. DATA "Paladin","Crusader","Avenger","Champion"
  38. DATA "Sorceress","Magcian","Mage","Archmage"
  39. DATA "Barbarian","Chieftain","Warlord","Overlord"
  40.  
  41. RESTORE Names
  42. FOR i%% = 0 TO 3
  43.  READ Names(i%%)
  44. NEXT i%%
  45. RESTORE Titles
  46. FOR i%% = 0 TO 3
  47.  FOR j%% = 0 TO 3
  48.   READ Title(i%%, j%%)
  49.  NEXT j%%
  50. NEXT i%%
  51.  
  52.  
  53. SUB Character_Selection_Screen
  54.  'place 'zoomed' image onto temp layer to save speed later
  55.  _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(TEMP_3), (0, 448)-STEP(319, 223)
  56.  _DEST Layer(TEMP_3)
  57.  LINE (0, 0)-STEP(639, 15), _RGB32(1, 1, 1), BF
  58.  LINE (0, 464)-STEP(639, 15), _RGB32(1, 1, 1), BF
  59.  _DEST Layer(0)
  60.  _CLEARCOLOR _RGB32(32, 160, 224), Layer(TEMP_3)
  61.  
  62.  FOR i%% = 0 TO 10: Trigger(i%%) = FALSE: NEXT i%%
  63.  DO
  64.   KBD& = _KEYHIT
  65.  
  66.   IF Trigger(0) THEN
  67.    SELECT CASE KBD&
  68.     CASE Control.Start_Button
  69.      IF Trigger(1) THEN Difficulty%% = Selection%%: ExitFlag%% = TRUE
  70.      IF NOT Trigger(1) AND Selection%% <> 4 THEN Trigger(1) = TRUE: Character%% = Selection%%: Selection%% = 1: _PUTIMAGE , Layer(0), Layer(TEMP_1)
  71.      _KEYCLEAR
  72.     CASE Control.Up_Key
  73.      Selection%% = Selection%% - 1
  74.      IF NOT Trigger(1) THEN
  75.       IF Selection%% = -1 THEN Selection%% = 4
  76.      ELSE
  77.       IF Selection%% = -1 THEN Selection%% = 3
  78.      END IF
  79.     CASE Control.Down_Key
  80.      Selection%% = Selection%% + 1
  81.      IF NOT Trigger(1) THEN
  82.       IF Selection%% = 5 THEN Selection%% = 0
  83.      ELSE
  84.       IF Selection%% = 4 THEN Selection%% = 0
  85.      END IF
  86.     CASE MASTERESC
  87.      ExitFlag%% = TRUE
  88.    END SELECT
  89.   END IF
  90.  
  91.   IF NOT Trigger(0) THEN Scroll_Credits
  92.   IF NOT Trigger(0) AND KBD& THEN Trigger(0) = TRUE: Selection%% = 0 'stop credits and pick character
  93.   IF Trigger(0) AND NOT Trigger(1) THEN Draw_Character_Selection Selection%%
  94.   IF Trigger(1) THEN Draw_Difficulty_Selection Selection%%
  95.  
  96.   _PUTIMAGE , Layer(MIX), Layer(0)
  97.   _DELAY .030
  98.   IF INKEY$ = CHR$(27) THEN ExitFlag%% = TRUE
  99.  LOOP UNTIL ExitFlag%%
  100.  
  101.  
  102. SUB Scroll_Credits
  103.  STATIC ScrollY%, StartFlag%%
  104.  IF NOT StartFlag%% THEN ScrollY% = 320: StartFlag%% = TRUE
  105.  _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  106.  _PUTIMAGE (0, ScrollY%), Layer(TEMP_1), Layer(MIX)
  107.  _PUTIMAGE , Layer(TEMP_3), Layer(MIX)
  108.  ScrollY% = ScrollY% - 1
  109.  IF ScrollY% <= -500 THEN ScrollY% = 220
  110.  
  111. SUB Draw_Character_Selection (who%%)
  112.  _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (0, 448)-STEP(319, 223)
  113.  _PUTIMAGE (16, 400)-STEP(605, 47), Layer(START_SCREENS), Layer(MIX), (320, 448)-STEP(303, 23)
  114.  _PUTIMAGE (112, 32)-STEP(431, 47), Layer(START_SCREENS), Layer(MIX), (320, 472)-STEP(215, 23)
  115.  KB_Print 304, 416, "Select Character and Press Start", 0, CENTER
  116.  IF who%% < 4 THEN a$ = RTRIM$(Names(who%%)) + " the " + RTRIM$(Title(who%%, 0)) ELSE a$ = "Load Saved Game"
  117.  KB_Print 312, 48, a$, 0, CENTER
  118.  
  119. SUB Draw_Difficulty_Selection (What%%)
  120.  _PUTIMAGE , Layer(TEMP_1), Layer(MIX)
  121.  _PUTIMAGE (112, 176)-STEP(431, 127), Layer(START_SCREENS), Layer(MIX), (320, 496)-STEP(215, 63)
  122.  KB_Print 128, 192, "Difficulty   Days  Score", 0, LEFT
  123.  KB_Print 128, 224, " Easy         900   x.5", 0, LEFT
  124.  KB_Print 128, 240, " Normal       600    x1", 0, LEFT
  125.  KB_Print 128, 256, " Hard         400    x2", 0, LEFT
  126.  KB_Print 128, 272, " Impossible?  200    x4", 0, LEFT
  127.  Display_Selection_Arrow 128, 222 + (16 * What%%)
  128.  
  129. SUB Make_Credit_Scroll
  130.  '-------------Setup Credit scroll----------------
  131.  KB_Print 72, 16, "King's Bounty Designed By:", 0, LEFT
  132.  KB_Print 72, 32, " Jon Van Caneghem", 0, LEFT
  133.  KB_Print 72, 64, "Programed By:", 0, LEFT
  134.  KB_Print 72, 80, " Andrew Caldwell", 0, LEFT
  135.  KB_Print 72, 112, "Programed By:", 0, LEFT
  136.  KB_Print 72, 128, " Mark Caldwell (no relation)", 0, LEFT
  137.  KB_Print 72, 144, " Douglas Grounds", 0, LEFT
  138.  KB_Print 72, 160, " Jill Bagley", 0, LEFT
  139.  KB_Print 72, 192, "Graphics By:", 0, LEFT
  140.  KB_Print 72, 208, " Bonita Long-Hemsath", 0, LEFT
  141.  KB_Print 72, 224, " Kenneth L. Mayfield", 0, LEFT
  142.  KB_Print 296, 256, "Copyright 1990,1991", 0, CENTER
  143.  KB_Print 296, 272, "New World Computing, Inc", 0, CENTER
  144.  KB_Print 296, 288, "All Rights Reserved", 0, CENTER
  145.  KB_Print 72, 320, "QB64 Clone Programed By:", 0, LEFT
  146.  KB_Print 72, 336, " Cobalt (aka David)", 0, LEFT
  147.  KB_Print 72, 368, "Music By:", 0, LEFT
  148.  KB_Print 72, 384, " Atom Music Audio-'Dark Star'", 0, LEFT
  149.  KB_Print 296, 416, "QB64 Source Copyright 2019", 0, CENTER
  150.  KB_Print 296, 432, "UniKorn ProDucKions", 0, CENTER
  151.  KB_Print 296, 448, "All Rights Reserved", 0, CENTER
  152.  
  153.  '------------------------------------------------
  154.  'place credit text on temp layer for scroll
  155.  _PUTIMAGE , Layer(MIX), Layer(TEMP_1)
  156.  _CLEARCOLOR _RGB32(0, 0, 0), Layer(TEMP_1)
  157.  
  158. SUB Selection_Background_Setup
  159.  'setup background color for character selection screen
  160.  _DEST Layer(TEMP_2)
  161.  LINE (0, 16)-STEP(639, 447), _RGB32(32, 160, 224), BF
  162.  _DEST Layer(0)
  163.  '-----------------------------------------------------
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171. SUB Start_Logos
  172.  DO
  173.   Tick! = INT(_SNDGETPOS(BGM&) * 1000) / 1000
  174.   IF Tick! >= .22 AND Trigger(0) = FALSE THEN Fade_In_UKP_Logo: Trigger(0) = TRUE
  175.   IF Tick! >= 6.14 AND Trigger(1) = FALSE THEN Fade_Out_UKP_Logo: Trigger(1) = TRUE
  176.   IF Tick! >= 10.65 AND Trigger(2) = FALSE THEN Fade_In_EA_Logo: Trigger(2) = TRUE
  177.   IF Tick! >= 16.46 AND Trigger(3) = FALSE THEN Fade_Out_EA_Logo: Trigger(3) = TRUE
  178.   IF Tick! >= 20.88 AND Trigger(4) = FALSE THEN Fade_In_NWC_Planet: Trigger(4) = TRUE
  179.   IF Tick! >= 26.81 AND Trigger(5) = FALSE THEN Drop_NWC_Sword: _PUTIMAGE , Layer(0), Layer(TEMP_2): Trigger(5) = TRUE
  180.   IF Tick! >= 28.83 AND Trigger(6) = FALSE THEN Raise_NWC_Logo: _PUTIMAGE , Layer(0), Layer(TEMP_2): Trigger(6) = TRUE
  181.   IF Tick! >= 32.1 AND Trigger(7) = FALSE THEN
  182.    IF NOT In_Sparkle%% THEN
  183.     IF INT(RND * 100) + 1 >= 91 THEN
  184.      x% = INT(RND * 560) + 28
  185.      y% = INT(RND * 48) + 208
  186.      IF INT(RND * 100) + 1 >= 51 THEN s% = LARGE ELSE s% = SMALL
  187.      In_Sparkle%% = 5
  188.     END IF
  189.    END IF
  190.    _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  191.    IF In_Sparkle%% THEN
  192.     Sparkle x%, y%, s%
  193.     In_Sparkle%% = In_Sparkle%% - 1
  194.    END IF
  195.    _PUTIMAGE , Layer(MIX), Layer(0)
  196.    IF In_Sparkle%% THEN _DELAY .1 ELSE _DELAY .025
  197.   END IF
  198.  
  199.   IF Tick! > 40.1 AND Trigger(8) = FALSE THEN
  200.    Trigger(7) = TRUE: Trigger(8) = TRUE
  201.    _PUTIMAGE , Layer(0), Layer(TEMP_3): ClearLayer 23
  202.    Fade_Out_NWC_Logo
  203.   END IF
  204.  
  205.   IF Tick! > 41.0 AND Trigger(9) = FALSE THEN Fade_In_KB_Title: Trigger(9) = TRUE
  206.   IF Tick! > 64.5 AND Trigger(10) = FALSE THEN Fade_Out_KB_Title: Trigger(10) = TRUE
  207.   _DELAY .001
  208.   LOCATE 1, 1: PRINT Tick!
  209.   IF INKEY$ = CHR$(27) THEN _SNDSTOP BGM&
  210.  
  211. SUB Fade_In_Character_Screen
  212.  FOR i%% = 0 TO 63 STEP 2
  213.   _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (0, 448)-STEP(319, 223)
  214.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  215.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  216.   _PUTIMAGE , Layer(MIX), Layer(0)
  217.   _DELAY .025
  218.  NEXT i%%
  219.  
  220. SUB Sparkle (X%, Y%, S%)
  221.  STATIC Sparkle_Frame%%, Count_up%%
  222.  'large sparkle
  223.  IF S% = LARGE THEN
  224.   _PUTIMAGE (X%, Y%), Layer(START_SCREENS), Layer(MIX), (136 - Sparkle_Frame%% * 26, 420)-STEP(26, 26)
  225.  ELSEIF S% = SMALL THEN
  226.   _PUTIMAGE (X%, Y%), Layer(START_SCREENS), Layer(MIX), (194 - Sparkle_Frame%% * 15, 433)-STEP(14, 14)
  227.  IF NOT Count_up%% THEN Sparkle_Frame%% = Sparkle_Frame%% + 1 ELSE Sparkle_Frame%% = Sparkle_Frame%% - 1
  228.  IF Sparkle_Frame%% = 2 THEN Count_up%% = TRUE
  229.  IF Sparkle_Frame%% = 0 THEN Count_up%% = FALSE
  230.  
  231. SUB Fade_In_UKP_Logo
  232.  FOR i%% = 0 TO 63 STEP 2
  233.   _PUTIMAGE (0, 0), Layer(START_SCREENS), Layer(MIX), (0, 672)-STEP(639, 479)
  234.   _SETALPHA 255 - i%% * 4, , Layer(3)
  235.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  236.   _PUTIMAGE , Layer(MIX), Layer(0)
  237.   _DELAY .025
  238.  NEXT i%%
  239.  
  240. SUB Fade_Out_UKP_Logo
  241.  FOR i%% = 63 TO 0 STEP -3
  242.   _PUTIMAGE (0, 0), Layer(START_SCREENS), Layer(MIX), (0, 672)-STEP(639, 479)
  243.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  244.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  245.   _PUTIMAGE , Layer(MIX), Layer(0)
  246.   _DELAY .05
  247.  NEXT i%%
  248.  
  249. SUB Fade_In_EA_Logo
  250.  FOR i%% = 0 TO 63 STEP 1
  251.   _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (0, 0)-STEP(319, 223)
  252.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  253.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  254.   _PUTIMAGE , Layer(MIX), Layer(0)
  255.   _DELAY .015
  256.  NEXT i%%
  257.  
  258. SUB Fade_Out_EA_Logo
  259.  FOR i%% = 63 TO 0 STEP -3
  260.   _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (0, 0)-STEP(319, 223)
  261.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  262.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  263.   _PUTIMAGE , Layer(MIX), Layer(0)
  264.   _DELAY .05
  265.  NEXT i%%
  266.  
  267. SUB Fade_In_NWC_Planet
  268.  FOR i%% = 0 TO 63 STEP 1
  269.   _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (320, 0)-STEP(319, 223)
  270.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  271.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  272.   _PUTIMAGE , Layer(MIX), Layer(0)
  273.   _DELAY .025
  274.  NEXT i%%
  275.  
  276. SUB Drop_NWC_Sword
  277.  _SETALPHA 255, , Layer(TEMP_2)
  278.  FOR i%% = 0 TO 54 STEP 1
  279.   _PUTIMAGE (376 - Xo%, -400 + Yo%)-STEP(141, 395), Layer(START_SCREENS), Layer(MIX), (0, 250)-STEP(70, 197)
  280.   _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (320, 0)-STEP(319, 223)
  281.   _PUTIMAGE , Layer(MIX), Layer(0)
  282.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  283.   _DELAY .004
  284.   Xo% = Xo% + 2
  285.   Yo% = Yo% + 8
  286.  NEXT i%%
  287.  
  288. SUB Raise_NWC_Logo
  289.  FOR i%% = 0 TO 66 STEP 1
  290.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  291.   _PUTIMAGE (31, 580 - Yo%)-STEP(260, 102), Layer(START_SCREENS), Layer(MIX), (104, 250)-STEP(130, 51)
  292.   _PUTIMAGE (294, 614 - Yo%)-STEP(321, 53), Layer(START_SCREENS), Layer(MIX), (104, 302)-STEP(161, 27)
  293.   _PUTIMAGE , Layer(MIX), Layer(0)
  294.   Yo% = Yo% + 6
  295.   _DELAY .04
  296.  NEXT i%%
  297.  
  298. SUB Fade_Out_NWC_Logo
  299.  FOR i%% = 63 TO 0 STEP -3
  300.   _PUTIMAGE , Layer(TEMP_3), Layer(MIX)
  301.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  302.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  303.   _PUTIMAGE , Layer(MIX), Layer(0)
  304.   _DELAY .001
  305.  NEXT i%%
  306.  
  307. SUB Fade_In_KB_Title
  308.  FOR i%% = 0 TO 63 STEP 1
  309.   _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (320, 224)-STEP(319, 223)
  310.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  311.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  312.   _PUTIMAGE , Layer(MIX), Layer(0)
  313.   _DELAY .06
  314.  NEXT i%%
  315.  
  316. SUB Fade_Out_KB_Title
  317.  FOR i%% = 63 TO 0 STEP -1
  318.   _PUTIMAGE (0, 16)-STEP(639, 447), Layer(START_SCREENS), Layer(MIX), (320, 224)-STEP(319, 223)
  319.   _SETALPHA 255 - i%% * 4, , Layer(TEMP_2)
  320.   _PUTIMAGE , Layer(TEMP_2), Layer(MIX)
  321.   _PUTIMAGE , Layer(MIX), Layer(0)
  322.   _DELAY .05
  323.  NEXT i%%
  324.  
  325. SUB KB_Print (x%, y%, Txt$, Null%%, Aline%%)
  326.  Xo% = 0: Yo% = 672 'sheet offsets
  327.  Mx%% = LEN(Txt$)
  328.  IF Aline%% = RIGHT THEN Ax% = LEN(Txt$) * 16: x% = x% - Ax%
  329.  IF Aline%% = CENTER THEN Ax% = LEN(Txt$) * 8: x% = x% - Ax%
  330.  FOR i~%% = 1 TO Mx%%
  331.   IF ASC(MID$(Txt$, i~%%, 1)) > 127 THEN Yo% = 680: So% = (ASC(MID$(Txt$, i~%%, 1)) - 158) * 8 ELSE Yo% = 672: So% = (ASC(MID$(Txt$, i~%%, 1)) - 31) * 8
  332.   _PUTIMAGE (x% + (i~%% * 16), y%)-STEP(15, 15), Layer(START_SCREENS), Layer(MIX), (Xo% + So%, Yo%)-STEP(7, 7)
  333.  NEXT i~%%
  334.  
  335. SUB KB_Print_Wrap (X%, Y%, txt$, MaxX%)
  336.  DIM Lines(10) AS STRING
  337.  'max number of characters with Wrap max of MaxX%%
  338.  IF MaxX% THEN SMx%% = INT(MaxX% / 16) ELSE SMx%% = LEN(txt$)
  339.  
  340.  Finished%% = FALSE
  341.  DO
  342.   Mx%% = SMx%% 'restore Mx to Starting Mx(Mx= Max X length in pixels)
  343.   IF MID$(txt$, Mx%%, 1) = " " THEN
  344.    ' text is nice enough to land on a space
  345.    j%% = j%% + 1
  346.    Lines(j%%) = LEFT$(txt$, Mx%%)
  347.    txt$ = MID$(txt$, Mx%% + 1)
  348.   ELSE
  349.    ' back track to find first space
  350.    Found%% = FALSE
  351.    DO
  352.     IF MID$(txt$, Mx%%, 1) = " " THEN Found%% = TRUE ELSE Mx%% = Mx%% - 1
  353.    LOOP UNTIL Found%%
  354.    j%% = j%% + 1 'set to next line
  355.    Lines(j%%) = MID$(txt$, 1, Mx%%)
  356.    txt$ = MID$(txt$, Mx%% + 1) 'reduce string length
  357.   END IF
  358.   IF RTRIM$(txt$) = "" THEN Finished%% = TRUE
  359.  LOOP UNTIL Finished%%
  360.  
  361.  'print wraped lines
  362.  FOR I%% = 1 TO j%%
  363.   KB_Print X%, Y%, Lines(I%%), 0, LEFT
  364.   Y% = Y% + 16
  365.  NEXT I%%
  366.  
  367. FUNCTION Special_K_Value$ (Value~%)
  368.  IF Value~% > 1000 THEN
  369.   Result$ = LTRIM$(STR$(INT(Value~% \ 1000)))
  370.   Result$ = Result$ + "K"
  371.   Result$ = LTRIM$(STR$(Value~%))
  372.  Special_K_Value = Result$
  373.  
  374. SUB ClearLayer (id%%)
  375.  old& = _DEST
  376.  _DEST Layer(id%%)
  377.  CLS
  378.  _DEST old&
  379.  
  380. SUB Display_Selection_Arrow (X%, Y%)
  381.  _PUTIMAGE (X%, Y%)-STEP(23, 15), Layer(START_SCREENS), Layer(MIX), (388 + G.Window_Animation * 12, 216)-STEP(11, 7)
  382.  
Granted after becoming radioactive I only have a half-life!