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: |