5748375 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n sierra.bas
   1: 'FROM:    JOHN DIAMOND(CSGP96D)
   2: 'SUBJECT: QB SIERRA ENGINE #1
   3:  
   4: 'Well this product is from Paradise Software. If you need help with it
   5: 'I suggest you e-mail the author at the address above.
   6: 
   7: 
   8: 
   9: ' Note -1                                          
  10: 'Well, I finally got the QB SIERRA GAME ENGINE to work...
  11: 'well, sort of. I have run into two minor problems:      
  12: '1) The first time you pass up an object verticaly the   
  13: 'object will flash.                                      
  14: '2) When the character is walking west, and he passes in 
  15: 'front of the tree his body turns blue.                  
  16: 'If anyone can fix these problems please contact me!     
  17: '                               ~J.d~                    
  18: DECLARE SUB CONCLUDE ()
  19: DECLARE SUB PERIMETER (X1!, Y1!, X2!, Y2!, RETRN%)
  20: DECLARE SUB EFFECT ()
  21: DECLARE SUB ANIMATE ()
  22: DECLARE SUB background ()
  23: DIM SHARED TREE(6000), ROCK(500)
  24: DIM SHARED TREEMASK(6000), ROCKMASK(500)
  25: DIM SHARED MOVE1(100), MOVE2(100), WALKDOWN1(100), WALKDOWN2(100)
  26: DIM SHARED WALKUP1(100), WALKUP2(100), WALK1.2(100), WALK2.2(100)
  27: DIM SHARED MOVE1MASK(100), MOVE2MASK(100), WALKDOWNMASK1(100), WALKDOWNMASK2(100)
  28: DIM SHARED WALKUPMASK1(100), WALKUPMASK2(100), WALKMASK1.2(100), WALKMASK2.2(100)
  29: DIM SHARED X, y
  30: SCREEN 7, 0, 0, 0
  31: PRINT "This is known as a 3d generation RPG"
  32: PRINT "engine. This program will allow you to"
  33: PRINT "make Sierra type games. This engine uses"
  34: PRINT "3 screen pages to produce the animation,"
  35: PRINT "thus allowing you to use this engine "
  36: PRINT "WITH SCREEN 7, 8, and the VGA "
  37: PRINT "animation library(MODEX)"
  38: PRINT STRING$(40, 196)
  39: PRINT "Please note.. None of the material"
  40: PRINT "in this program has been copied from"
  41: PRINT "Sierra On-line inc. This all came"
  42: PRINT "from my head"
  43: PRINT
  44: PRINT "Sierra is a registered trademark(R)"
  45: PRINT "of Sierra On-line inc."
  46: WHILE INKEY$ = "": WEND
  47: CLS
  48: PRINT "Press enter after each drawing is done."
  49: 'PRODIGY(R) interactive personal service         03/22/95         0:29 AM
  50: 
  51: CIRCLE (5, 20), 5, 1: LINE (5, 25)-(5, 35), 4: LINE (4, 35)-(4, 40), 6: LINE (6, 35)-(6, 38), 6: LINE (5, 30)-(10, 25), 4
  52: CIRCLE (16, 20), 5, 1: LINE (16, 25)-(16, 35), 4: LINE (15, 35)-(15, 38), 6: LINE (17, 35)-(17, 40), 6: LINE (16, 30)-(21, 25), 4
  53: GET (0, 15)-(10, 40), MOVE1: GET (11, 15)-(21, 40), MOVE2
  54: LOCATE 9, 1: PRINT "WALK1": PRINT "WALK2": WHILE INKEY$ = "_": WEND: LINE (0, 10)-(319, 199), 0, BF
  55: CIRCLE (5, 20), 5, 1: LINE (5, 25)-(5, 35), 4: LINE (4, 35)-(4, 40), 6: LINE (6, 35)-(6, 38), 6: PSET (6, 30), 4: PSET (4, 30), 4: PSET (3, 19), 1: PSET (7, 19), 1: LINE (4, 22)-(6, 22), 1
  56: CIRCLE (16, 20), 5, 1: LINE (16, 25)-(16, 35), 4: LINE (15, 35)-(15, 38), 6: LINE (17, 35)-(17, 40), 6: PSET (17, 30), 4: PSET (15, 30), 4: PSET (14, 19), 1: PSET (18, 19), 1:
  57: LINE (15, 22)-(17, 22), 1
  58: GET (0, 15)-(10, 40), WALKDOWN1: GET (11, 15)-(21, 40), WALKDOWN2
  59: '(continued)                                             
  60: 'PRODIGY(R) interactive personal service         03/22/95         0:29 AM
  61: 
  62: '         COMPUTER BB
  63: 'TOPIC:   PROGRAMMING
  64: 'TIME:    03/18 10:42 PM
  65:  
  66: 'TO:      ALL
  67: 'FROM:    JOHN DIAMOND   (CSGP96D)
  68: 'SUBJECT: QB SIERRA ENGINE #2
  69:  
  70: ' Note -2                                                
  71: LOCATE 9, 1: PRINT "WALKDOWN1": PRINT "WALKDOWN2": WHILE INKEY$ = "": WEND: LINE (0, 10)-(320, 200), 0, BF
  72: CIRCLE (5, 20), 5, 1: LINE (5, 25)-(5, 35), 4: LINE (4, 35)-(4, 40), 6: LINE (6, 35)-(6, 38), 6: PSET (6, 30), 4: PSET (4, 30), 4:                                           
  73: CIRCLE (16, 20), 5, 1: LINE (16, 25)-(16, 35), 4: LINE (15, 35)-(15, 38), 6: LINE (17, 35)-(17, 40), 6: PSET (17, 30), 4: PSET (15, 30), 4
  74: GET (0, 15)-(10, 40), WALKUP1: GET (11, 15)-(21, 40), WALKUP2
  75: LOCATE 9, 1: PRINT "WALKUP1": PRINT "WALKUP2": WHILE INKEY$ = "": WEND: LINE (0, 10)-(320, 200), 0, BF
  76: CIRCLE (5, 20), 5, 1: LINE (5, 25)-(5, 35), 4: LINE (4, 35)-(4, 40), 6: LINE (6, 35)-(6, 38), 6: LINE (5, 30)-(0, 25)
  77: 4                                                       
  78: CIRCLE (16, 20), 5, 1: LINE (16, 25)-(16, 35), 4: LINE (15, 35)-(15, 38), 6: LINE (17, 35)-(17, 40), 6: LINE (16, 30)-(11, 25), 4
  79: GET (0, 15)-(10, 40), WALK1.2: GET (11, 15)-(21, 40), WALK2.2
  80: LOCATE 9, 1: PRINT "WALK1.2": PRINT "WALK2.2": WHILE INKEY$ = "": WEND:                                             
  81: COLOR 14
  82: PRINT "The arrays you just saw WALK1,"
  83: PRINT "WALKDOWN1, ect. ARE needed for the "
  84: PRINT "engine. Though there graphic may by"
  85: PRINT "changed, there size & ARRAY name may"
  86: PRINT "not!"
  87: WHILE INKEY$ = "": WEND
  88: CLS
  89: LINE (0, 15)-(10, 40), 15, BF: LINE (10, 15)-(21, 40), 15, BF
  90: CIRCLE (5, 20), 5, 0: LINE (5, 25)-(5, 35), 0: LINE (4, 35)-(4, 40), 0: LINE (6, 35)-(6, 38), 0: LINE (5, 30)-(10, 25)
  91: 0                                                        
  92: CIRCLE (16, 20), 5, 0: LINE (16, 25)-(16, 35), 0: LINE (15, 35)-(15, 38), 0: LINE (17, 35)-(17, 40), 0: LINE (16, 30)-(21, 25), 0
  93: GET (0, 15)-(10, 40), MOVE1MASK: GET (11, 15)-(21, 40), MOVE2MASK
  94: LINE (0, 15)-(10, 40), 15, BF: LINE (10, 15)-(21, 40), 15, BF
  95: CIRCLE (5, 20), 5, 1: LINE (5, 25)-(5, 35), 4: LINE (4, 35)-(4, 40), 6: LINE (6, 35)-(6, 38), 6: PSET (6, 30), 4: PSET (4, 30), 4: PSET (3, 19), 1: PSET (7, 19), 1: LINE (4, 22)-(6, 22), 1
  96: CIRCLE (16, 20), 5, 1: LINE (16, 25)-(16, 35), 4: LINE (15, 35)-(15, 38), 6: LINE (17, 35)-(17, 40), 6: PSET (17, 30), 4: PSET (15, 30), 4: PSET (14, 19), 1: PSET (18, 19), 1:
  97: LINE (15, 22)-(17, 22), 1
  98: GET (0, 15)-(10, 40), WALKDOWNMASK1: GET (11, 15)-(21, 40), WALKDOWNMASK2
  99: LINE (0, 15)-(10, 40), 15, BF: LINE (10, 15)-(21, 40), 15, BF
 100: CIRCLE (5, 20), 5, 1: LINE (5, 25)-(5, 35), 4: LINE (4, 35)-(4, 40), 6: LINE (6, 35)-(6, 38), 6: PSET (6, 30), 4: PSET (4, 30), 4:                                           
 101: CIRCLE (16, 20), 5, 1: LINE (16, 25)-(16, 35), 4: LINE (15, 35)-(15, 38), 6: LINE (17, 35)-(17, 40), 6: PSET (17, 30), 4: PSET (15, 30), 4
 102: GET (0, 15)-(10, 40), WALKUPMASK1: GET (11, 15)-(21, 40), WALKUPMASK2
 103: LINE (0, 15)-(10, 40), 15, BF: LINE (10, 15)-(21, 40), 15, BF
 104: CIRCLE (5, 20), 5, 1: LINE (5, 25)-(5, 35), 4: LINE (4, 35)-(4, 40), 6: LINE (6, 35)-(6, 38), 6: LINE (5, 30)-(0, 25), 4
 105: CIRCLE (16, 20), 5, 1: LINE (16, 25)-(16, 35), 4: LINE (15, 35)-(15, 38), 6: LINE (17, 35)-(17, 40), 6: LINE (16, 30)-(11, 25), 4
 106: '(continued)                                             
 107: 'PRODIGY(R) interactive personal service         03/22/95         0:29 AM
 108: 
 109: '         COMPUTER BB
 110: 'TOPIC:   PROGRAMMING
 111: 'TIME:    03/19 12:32 AM
 112:  
 113: 'TO:      ALL
 114: 'FROM:    JOHN DIAMOND   (CSGP96D)
 115: 'SUBJECT: QB SIERRA ENGINE #3
 116:  
 117: ' Note -3                                                
 118: GET (0, 15)-(10, 40), WALKMASK1.2: GET (11, 15)-(21, 40), WALKMASK2.2
 119:                                                             
 120: CLS : COLOR 15
 121: PRINT "These are the scene layout items, i.e"
 122: PRINT "rocks, tress, bushes, ect."
 123: LINE (20, 40)-(40, 80), 8, BF: CIRCLE (120, 40), 20, 10: PAINT (120, 40), 10
 124: LINE (115, 58)-(125, 100), 6, BF
 125: GET (20, 40)-(40, 80), ROCK
 126: COLOR 15
 127: GET (100, 20)-(140, 100), TREE
 128: LOCATE 15, 5: PRINT "WALL": LOCATE 15, 20: PRINT "TREE"
 129: PRINT : PRINT "  Unlike the characters these": PRINT "arrays do not require to be"
 130: PRINT "the same size & name. "
 131: CIRCLE (10, 10), 10, 15: PAINT (10, 10), 15
 132: WHILE INKEY$ = "": WEND
 133: CLS : PAINT (0, 0), 15
 134: LINE (20, 40)-(40, 80), 0, BF: CIRCLE (120, 40), 20, 0: PAINT (120, 40), 0
 135: GET (20, 40)-(40, 80), ROCKMASK
 136: LINE (115, 58)-(125, 100), 0, BF
 137: GET (100, 20)-(140, 100), TREEMASK
 138: LOCATE 15, 5: PRINT "WallMASK": LOCATE 15, 20: PRINT "TreeM"; ASK; "                                                        "
 139: WHILE INKEY$ = "": WEND: CLS
 140: COLOR 9: PRINT "Now that we have GOT the ARRAYs"
 141: PRINT "We will use them in this simple demo.."
 142: PRINT "To end simply walk off the screen"
 143: COLOR 14
 144: PRINT "Keys:"
 145: PRINT "         " + CHR$(24)
 146: PRINT : PRINT
 147: PRINT "     " + CHR$(17) + "   5   " + CHR$(16)
 148: PRINT : PRINT
 149: PRINT "         " + CHR$(25)
 150: WHILE INKEY$ = "": WEND
 151: background
 152: ANIMATE
 153: CONCLUDE
 154:                                                             
 155: 'PRODIGY(R) interactive personal service         03/22/95         0:31 AM
 156:                                                             
 157: 'End of file                                             
 158: 'IMPORTed by Super Duper PRO, 1994 Gamers' Paradise      
 159: 'Software(tm) Written by: John Diamond, & ThOmAs         
 160: 'Lipschultz                                              
 161: 'sierra.bas was posted by: ~J.d~                         
 162: 'and is avialible for comments at: CSGP96D               
 163: 'MJ is back!!! Die New York, Die!!!!!!!!                
 164: 
 165: SUB ANIMATE
 166: 'PRODIGY(R) interactive personal service         03/22/95         0:29 AM
 167: 
 168: '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 169: 'This variables set the starting coordinates, and character_direction.
 170: a = 2
 171: y = 110
 172: X = 5
 173: FLAG = 1
 174: '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 175: '##########################################################
 176: 'This is the simple key loop. I have found the using GOTO i_n a key loop works                                    
 177: 'faster than DO...LOOP, and WHILE....WEND                
 178: in:                                                      
 179: '(continued)                                             
 180: 'PRODIGY(R) interactive personal service         03/22/95         0:30 AM
 181: 
 182: '         COMPUTER BB
 183: 'TOPIC:   PROGRAMMING
 184: 'TIME:    03/18 10:48 PM
 185:  
 186: 'TO:      ALL
 187: 'FROM:    JOHN DIAMOND   (CSGP96D)
 188: 'SUBJECT: QB SIERRA ENGIN #4
 189:  
 190: ' Note -4                                                
 191: K$ = INKEY$
 192: IF K$ = CHR$(0) + "M" THEN FLAG = 1: FLG = 0
 193: IF K$ = CHR$(0) + "K" THEN FLAG = 2: FLG = 0
 194: IF K$ = CHR$(0) + "H" THEN FLAG = 3: FLG = 0
 195: IF K$ = CHR$(0) + "P" THEN FLAG = 4: FLG = 0
 196: IF K$ = "5" THEN FLG = 5
 197: '##########################################################
 198: PCOPY 1, 2
 199: '/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/
 200: 'This take the FLAGs set in the key loop and decides which _character
 201: 'array to put on the screen.                             
 202: IF FLAG = 1 THEN SCREEN 7, 0, 2, 0: PUT (X, y), MOVE1MASK, AND: PUT (X, y), MOVE1, XOR
 203: IF FLAG = 2 THEN SCREEN 7, 0, 2, 0: PUT (X, y), WALKMASK1.2, AND: PUT (X, y), WALK1.2, XOR
 204: IF FLAG = 3 THEN SCREEN 7, 0, 2, 0: PUT (X, y), WALKUPMASK1, AND: PUT (X, y), WALKUP1, XOR
 205: IF FLAG = 4 THEN SCREEN 7, 0, 2, 0: PUT (X, y), WALKDOWNMASK1, AND: PUT (X, y), WALKDOWN1, XOR
 206: '\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\
 207: EFFECT
 208: PCOPY 2, 0
 209: PCOPY 1, 2
 210: '/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\/
 211: 'This take the FLAGs set in the key loop and decides which _character
 212: 'array to put on the screen.                             
 213: IF FLAG = 1 THEN SCREEN 7, 0, 2, 0: PUT (X, y), MOVE2MASK, AND: PUT (X, y), MOVE2, XOR
 214: IF FLAG = 2 THEN SCREEN 7, 0, 2, 0: PUT (X, y), WALKMASK2.2, AND: PUT (X, y), WALK2.2, XOR
 215: IF FLAG = 3 THEN SCREEN 7, 0, 2, 0: PUT (X, y), WALKUPMASK2, AND: PUT (X, y), WALKUP2, XOR
 216: IF FLAG = 4 THEN SCREEN 7, 0, 2, 0: PUT (X, y), WALKDOWNMASK2, AND: PUT (X, y), WALKDOWN2, XOR
 217: '\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/\
 218: EFFECT
 219: PCOPY 2, 0
 220: '-==--==--==--==--==--==--==--==--==--=                  
 221: 'These IF statements are used to detect the base of an obje_ct. To detect an                                      
 222: 'object we use 2 IF statements. Then first will detect 1 pi_xel in front of                                   
 223: 'an object and stop the character from going forth. The sec_ond IF will detect                                     
 224: '1 pixel behind an object and stop the character from going_forth.
 225: IF X > 90 AND X < 121 AND y = 135 THEN y = y + 1
 226: IF X > 90 AND X < 121 AND y = 134 THEN y = y - 1
 227: IF X > 206 AND X < 226 AND y = 116 THEN y = y + 1
 228: IF X > 206 AND X < 226 AND y = 113 THEN y = y - 1
 229: '-==--==--==--==--==--==--==--==--==--=                  
 230: '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
 231: 'This takes the FLAGs set in the key loop and determines wh_at to do with them.                                   
 232: '(continued)                                             
 233: 'PRODIGY(R) interactive personal service         03/22/95         0:30 AM
 234: 
 235: '         COMPUTER BB
 236: 'TOPIC:   PROGRAMMING
 237: 'TIME:    03/18 10:48 PM
 238: '
 239: 'TO:      ALL
 240: 'FROM:    JOHN DIAMOND   (CSGP96D)
 241: 'SUBJECT: QB SIERRA ENGIN #5RP
 242:  
 243: ' Note -5                                                
 244: 'i.e IF FLAG = 1 THEN X = X + 1 = if last key was the -> ke_y then move the                                       
 245: 'character to the right.                                 
 246: IF FLG = 5 THEN GOTO SKIP 'This flag is for the STOP key, w_hich will halt the                                    
 247: 'characters movement                                     
 248: IF FLAG = 1 THEN X = X + 1
 249: IF FLAG = 2 THEN X = X - 1
 250: IF FLAG = 3 THEN y = y - 1
 251: IF FLAG = 4 THEN y = y + 1
 252: SKIP:                                                    
 253: '<><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
 254: '********************************************            
 255: PERIMETER 0, 40, 309, 175, RETRN%          '*            
 256: 'This sub is uesed to specify the perimeter *            
 257: 'of the current scene. In multi-scene games *            
 258: 'you will need to add an IF before it(i.e:  *            
 259: 'IF SCENE = 1 THEN PERIMETER 0,40,209,175,retrn%)*       
 260: 'Here's how to use the sub:                 *            
 261: 'PERIMETER X1,Y1,X2,Y2, RETRN%              *            
 262: 'RETRN% will return either a 1 or a 0. If   *            
 263: 'it's a 1 then the character passed the     *            
 264: 'scene's perimeter.                         *            
 265: '********************************************            
 266: IF RETRN% <> 1 THEN GOTO in
 267:                                                             
 268: END SUB
 269: 
 270: SUB background
 271: ' Just the background                                    
 272: SCREEN 7, 0, 1, 0: LINE (0, 50)-(319, 50), 9: LINE (0, 51)-(319, 51), 2
 273: PAINT (0, 0), 9: PAINT (0, 52), 2
 274: 'For some strange reason when I put these PRINT statements _in, and                                               
 275: 'your character walks into the horizon his head comes of!!!
 276: COLOR 15, 9: LOCATE 2, 8: PRINT "The QB Sierra Game Engine"
 277: LOCATE 3, 12: PRINT "By: John Diamond"
 278: END SUB
 279: 
 280: SUB CONCLUDE
 281: 'Just my little paragraph at the end                     
 282: SCREEN 0, 0, 0, 0: WIDTH 80
 283: 'PRODIGY(R) interactive personal service         03/22/95         0:31 AM
 284: 
 285: CLS
 286: COLOR 15, 0: PRINT "      Well now that you have seen the d_emo, what do ya think?"
 287: PRINT "To find out how to use the engine just scroll throug_h the SUB routines"
 288: PRINT "and read the " + CHR$(34) + "'" + CHR$(34) + " comme_nts, or you can contact me at CSGP96D! Enjoy!"
 289: PRINT
 290: PRINT "                                 ~J.d~"
 291: END SUB
 292: 
 293: SUB EFFECT
 294: '       This SUB is where the magic takes place. This will
 295: '(continued)                                             
 296: 'PRODIGY(R) interactive personal service         03/22/95         0:31 AM
 297: 
 298: '         COMPUTER BB
 299: 'TOPIC:   PROGRAMMING
 300: 'TIME:    03/18 10:48 PM
 301:  
 302: 'TO:      ALL
 303: 'FROM:    JOHN DIAMOND   (CSGP96D)
 304: 'SUBJECT: QB SIERRA ENGIN #6
 305:  
 306: ' Note -6                                                
 307: 'take the current coordinates of the character a determin w_ether
 308: 'he's to walk in-front-of the object or behind it, then it _will
 309: 'creat the illusion using AND & XOR.                     
 310: '                                                        
 311: '       You don't realy have to know the technical side to _this... To be honest                                  
 312: 'I doubt I can explain it, but here's what you do need to k_
 313: now:                                                     
 314: '                                                        
 315: '      This is the graphic array for the objects MASK-+  
 316: '                                                     |  
 317: '  This is the graphic array for the object-----------|----------------------------+                           
 318: '                                                     |    _
 319: '                        |                              
 320: 'IF Y > 135 THEN SCREEN 7, 0, 1, 0: PUT (100, 120), ROCKMAS_K, AND: PUT (100, 120), ROCK, XOR                     
 321: 'IF Y < 135 THEN SCREEN 7, 0, 2, 0: PUT (100, 120), ROCKMAS_K, AND: PUT (100, 120), ROCK, XOR                      
 322: '       |                                |+----------------_-----+-------------+|                                 
 323: '       +These should be the bottom coordinates of the obje_ct   |                                                
 324: '                                                          _|                                                
 325: 'These are the coordinates for the graphic/mask array------_-----+                                                
 326:                                                             
 327: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 328: 'Here's the actual code:                                 
 329: IF y > 135 THEN SCREEN 7, 0, 1, 0: PUT (100, 120), ROCKMASK, AND: PUT (100, 120), ROCK, XOR
 330: IF y < 135 THEN SCREEN 7, 0, 2, 0: PUT (100, 120), ROCKMASK, AND: PUT (100, 120), ROCK, XOR
 331: IF y > 114 THEN SCREEN 7, 0, 1, 0: PUT (200, 60), TREEMASK, AND: PUT (200, 60), TREE, XOR
 332: IF y < 114 THEN SCREEN 7, 0, 2, 0: PUT (200, 60), TREEMASK, AND: PUT (200, 60), TREE, XOR
 333: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 334: END SUB
 335: 
 336: SUB PERIMETER (X1, Y1, X2, Y2, RETRN%)
 337: RETRN% = 0
 338: IF X = X1 THEN RETRN% = 1
 339: IF y = Y1 THEN RETRN% = 1
 340: IF X = X2 THEN RETRN% = 1
 341: IF y = Y2 THEN RETRN% = 1
 342: END SUB
 343: 
5748376 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:09:35