IMarvinTPA

Doom Saved Game Editor

Jan 5th, 2015
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 20.41 KB | None | 0 0
  1. DECLARE FUNCTION MouseDoubleClick% (Delay%, Button%, m3%, m4%)
  2. DECLARE FUNCTION MouseInit% ()
  3. TYPE Register              'for CALL INTERRUPT
  4.      ax    AS INTEGER
  5.      bx    AS INTEGER
  6.      cx    AS INTEGER
  7.      dx    AS INTEGER
  8.      bp    AS INTEGER
  9.      si    AS INTEGER
  10.      di    AS INTEGER
  11.      flags AS INTEGER
  12. END TYPE
  13. DECLARE SUB Interrupt (intnum AS INTEGER, inreg AS Register, outreg AS Register)
  14. DECLARE SUB MouseDriver (m0%, m1%, m2%, m3%)
  15. DECLARE FUNCTION MouseInit% ()
  16. DECLARE SUB MouseOn ()
  17. DECLARE SUB MouseOff ()
  18. DECLARE FUNCTION GETT$ (P%)
  19. DEFINT A-I, K-W
  20. DEFSTR J
  21. DEFCUR X-Z
  22. CONST Y = 1
  23. Mouse = MouseInit
  24. CO$ = COMMAND$
  25. DEFINT A-U
  26. DEFCUR V-Z
  27. DEFSTR J
  28. CONST PI = 3.141593
  29. RANDOMIZE TIMER
  30. BLACK = 0: BLUE = 1: GREEN = 2: CYAN = 3: RED = 4: PINK = 5
  31. BROWN = 6: WHITE = 7: GREY = 8: LBLUE = 9: LGREEN = 10: LCYAN = 11
  32. LRED = 12: LPINK = 13: YELLOW = 14: BWHITE = 15
  33. Ts = 34
  34. DIM SHARED Place(Ts + 3)
  35. DIM SHARED PLlst(Ts + 3)
  36. DIM SHARED Datan(Ts + 3) AS STRING
  37. DIM SHARED JNames(Ts + 3), Tipe(Ts + 3)
  38. DIM SHARED JLNames(10, 32) AS STRING
  39. DIM SHARED Pln
  40. DIM SHARED J1 AS STRING * 1
  41. DIM SHARED T4 AS STRING * 4
  42. DIM SHARED T24 AS STRING * 24
  43. DIM SHARED CHANGE
  44. IF MID$(UCASE$(CO$), 1, 1) = "Y" THEN Jn = MID$(UCASE$(CO$), 2, 1): Pln = VAL(MID$(UCASE$(CO$), 3, 1)): CO$ = "Y"
  45. IF MID$(UCASE$(CO$), 1, 1) = "G" THEN Jn = MID$(UCASE$(CO$), 2, 1): Pln = VAL(MID$(UCASE$(CO$), 3, 1)): God = 1: CO$ = "Y"
  46. ML = CSRLIN
  47. IF UCASE$(CO$) <> "Y" THEN WIDTH 80, 43: CLS : ML = 43
  48. N = 0
  49. L = -1
  50. R = 1
  51. U = -1
  52. D = 1
  53. M = 0
  54. 'tipe is type to be edited
  55. '0 is fill stuff
  56. '1 is flip flop
  57. '2 is flip flop but fill leaves this alone
  58. '3 is number from 0 to 2 billion somthing.
  59. '4 is same as 3 but fill sends it to 199
  60. '5 is same as 3 bus fill sends it to 35536
  61. '6 is same as 3 but fill sends it to 2000200600
  62. '7 is same as 3 but fill leves this alone
  63. '8 is uneditable
  64. '9 is level
  65. '10 is special 4 way flip flopper
  66. '11 is string
  67. Tipe(0) = 11
  68. Tipe(1) = 4
  69. Tipe(2) = 5
  70. Tipe(3) = 2
  71. Tipe(4) = 2
  72. Tipe(5) = 2
  73. Tipe(6) = 2
  74. Tipe(7) = 2
  75. Tipe(8) = 2
  76. Tipe(9) = 1
  77. Tipe(10) = 1
  78. Tipe(11) = 1
  79. Tipe(12) = 1
  80. Tipe(13) = 1
  81. Tipe(14) = 1
  82. Tipe(15) = 1
  83. Tipe(16) = 1
  84. Tipe(17) = 3
  85. Tipe(18) = 3
  86. Tipe(19) = 3
  87. Tipe(20) = 3
  88. Tipe(21) = 6
  89. Tipe(22) = 6
  90. Tipe(23) = 6
  91. Tipe(24) = 6
  92. Tipe(25) = 10
  93. Tipe(26) = 8
  94. Tipe(27) = 8
  95. Tipe(28) = 9
  96. Tipe(29) = 7
  97. Tipe(30) = 7
  98. Tipe(31) = 7
  99. Tipe(32) = 7
  100. Tipe(33) = 7
  101. Tipe(34) = 1
  102. Place(0) = 1
  103. Place(1) = 83
  104. Place(2) = 87
  105. Place(3) = 119
  106. Place(4) = 123
  107. Place(5) = 127
  108. Place(6) = 131
  109. Place(7) = 135
  110. Place(8) = 139
  111. Place(9) = 144
  112. Place(10) = 175
  113. Place(11) = 179
  114. Place(12) = 183
  115. Place(13) = 187
  116. Place(14) = 191
  117. Place(15) = 195
  118. Place(16) = 199
  119. Place(17) = 203
  120. Place(18) = 207
  121. Place(19) = 211
  122. Place(20) = 215
  123. Place(21) = 219
  124. Place(22) = 223
  125. Place(23) = 227
  126. Place(24) = 231
  127. Place(25) = 243
  128. Place(26) = 42
  129. Place(27) = 43
  130. Place(28) = 41
  131. Place(29) = 98
  132. Place(30) = 114
  133. Place(31) = 102
  134. Place(32) = 106
  135. Place(33) = 110
  136. Place(34) = 205
  137. PLlst(0) = 23
  138. PLlst(1) = 3
  139. PLlst(2) = 3
  140. PLlst(3) = 0
  141. PLlst(4) = 0
  142. PLlst(5) = 0
  143. PLlst(6) = 0
  144. PLlst(7) = 0
  145. PLlst(8) = 0
  146. PLlst(9) = 0
  147. PLlst(10) = 0
  148. PLlst(11) = 0
  149. PLlst(12) = 0
  150. PLlst(13) = 0
  151. PLlst(14) = 0
  152. PLlst(15) = 0
  153. PLlst(16) = 0
  154. PLlst(17) = 3
  155. PLlst(18) = 3
  156. PLlst(19) = 3
  157. PLlst(20) = 3
  158. PLlst(21) = 3
  159. PLlst(22) = 3
  160. PLlst(23) = 3
  161. PLlst(24) = 3
  162. PLlst(25) = 0
  163. PLlst(26) = 0
  164. PLlst(27) = 0
  165. PLlst(28) = 0
  166. PLlst(29) = 3
  167. PLlst(30) = 3
  168. PLlst(31) = 3
  169. PLlst(32) = 3
  170. PLlst(33) = 3
  171. PLlst(34) = 0
  172. JNames(0) = "Name of the game"
  173. JNames(1) = "Health"
  174. JNames(2) = "Armor"
  175. JNames(3) = "a Blue Key Card"
  176. JNames(4) = "a Yellow Key Card"
  177. JNames(5) = "a Red Key Card"
  178. JNames(6) = "a Blue Skull Key"
  179. JNames(7) = "a Yellow Skull Key"
  180. JNames(8) = "a Red Skull Key"
  181. JNames(9) = "a Backpack"
  182. JNames(10) = "the Pistol"
  183. JNames(11) = "the Shotgun"
  184. JNames(12) = "the Chain Gun"
  185. JNames(13) = "the Rocket Launcher"
  186. JNames(14) = "the Plasma Rifle"
  187. JNames(15) = "the BFG-9000"
  188. JNames(16) = "the Chainsaw"
  189. JNames(17) = "Current Bullets"
  190. JNames(18) = "Current Shells"
  191. JNames(19) = "Current Cells"
  192. JNames(20) = "Current Rockets"
  193. JNames(21) = "Max Bullets"
  194. JNames(22) = "Max Shells"
  195. JNames(23) = "Max Cells"
  196. JNames(24) = "Max Rockets"
  197. JNames(25) = "Specials"
  198. JNames(26) = "Episode"
  199. JNames(27) = "Level"
  200. JNames(28) = "Skill"
  201. JNames(29) = "Bezerk Level"
  202. JNames(30) = "Lite Amp Level"
  203. JNames(31) = "Partial Invisibility Value"
  204. JNames(32) = "Radiation Protection Value"
  205. JNames(33) = "Invulnerability Value"
  206. JNames(34) = "the Super Shotgun"
  207. JENAMES(1) = "Knee Deep in the Dead"
  208. JENAMES(2) = "Shores of Hell"
  209. JENAMES(3) = "Inferno"
  210. JLNames(1, 1) = "Hangar\Entryway"
  211. JLNames(1, 2) = "Nuclear Plant\Underhalls"
  212. JLNames(1, 3) = "Toxin Refinery\The Gantlet"
  213. JLNames(1, 4) = "Command Control\The Focus"
  214. JLNames(1, 5) = "Phobos Lab\The Waste Tunnels"
  215. JLNames(1, 6) = "Central Processing\The Crusher"
  216. JLNames(1, 7) = "Computer Station\Dead Simple"
  217. JLNames(1, 8) = "Phobos Anomaly\Tricks and Traps"
  218. JLNames(1, 9) = "Military Base\The Pit"
  219. JLNames(1, 10) = "Refueling Base"
  220. JLNames(1, 11) = "`O` of Destruction!"
  221. JLNames(1, 12) = "The Factory"
  222. JLNames(1, 13) = "Downtown"
  223. JLNames(1, 14) = "The Inmost Dens"
  224. JLNames(1, 15) = "Industrial Zone"
  225. JLNames(1, 16) = "Suburbs"
  226. JLNames(1, 17) = "Tenements"
  227. JLNames(1, 18) = "The Courtyard"
  228. JLNames(1, 19) = "The Citadel"
  229. JLNames(1, 20) = "Gotcha!"
  230. JLNames(1, 21) = "Nirvana"
  231. JLNames(1, 22) = "The Catacombs"
  232. JLNames(1, 23) = "Barrels o` Fun"
  233. JLNames(1, 24) = "The Chasm"
  234. JLNames(1, 25) = "Bloodfalls"
  235. JLNames(1, 26) = "The Abandoned Mines"
  236. JLNames(1, 27) = "Monster Condo"
  237. JLNames(1, 28) = "The Spirit World"
  238. JLNames(1, 29) = "The Living End"
  239. JLNames(1, 30) = "Icon of Sin"
  240. JLNames(1, 31) = "Wolfenstein"
  241. JLNames(1, 32) = "Grosse"
  242. JLNames(2, 1) = "Deimos Anamaly"
  243. JLNames(2, 2) = "Containment Area"
  244. JLNames(2, 3) = "Definery"
  245. JLNames(2, 4) = "Deimos Lab"
  246. JLNames(2, 5) = "Command Center"
  247. JLNames(2, 6) = "Halls of the Damned"
  248. JLNames(2, 7) = "Spawning Vats"
  249. JLNames(2, 8) = "Tower of Babel"
  250. JLNames(2, 9) = "Fortress of Mystery"
  251. JLNames(3, 1) = "Hell Keep"
  252. JLNames(3, 2) = "Pandamonium"
  253. JLNames(3, 3) = "Slough of Despair"
  254. JLNames(3, 4) = "House of Pain"
  255. JLNames(3, 5) = "Unholy Cathedral"
  256. JLNames(3, 6) = "Mt. Erebus"
  257. JLNames(3, 7) = "Gate to Limbo"
  258. JLNames(3, 8) = "Dis"
  259. JLNames(3, 9) = "Warrnes"
  260. JSNAMES(0) = "I'm Too Young to Die"
  261. JSNAMES(1) = "Hey, Not Too Rough"
  262. JSNAMES(2) = "Hurt Me Plenty"
  263. JSNAMES(3) = "Ultra-Violence"
  264. JSNAMES(4) = "Nightmare!"
  265. JSNAMES(5) = "Pray To God!"
  266. JDO(0) = "don't have"
  267. JDO(1) = "have"
  268. JSPE(0) = "You don't have God Mode or No Clipping."
  269. JSPE(1) = "You have No Clipping but not God Mode. "
  270. JSPE(2) = "You have God Mode but not No Clipping. "
  271. JSPE(3) = "You have both God Mode and No Clipping."
  272. CHANGE = 276
  273. NOTHER:
  274. CLOSE
  275. H = 1
  276. IF UCASE$(CO$) <> "Y" THEN
  277.     IF Mouse = Y THEN MouseOn
  278.     PRINT "DoomSave 1.9 By Andy Bay"
  279.     FOR GAME = 0 TO 5
  280.         'NAME
  281.         Jn = MID$(STR$(GAME), 2, 1)
  282.         JNM = "DOOMSAV" + Jn + ".DSG"
  283.         OPEN JNM FOR RANDOM AS #1 LEN = H'24
  284.         IF LOF(1) <> 0 THEN
  285.             P = 0
  286.             FOR P2 = 1 TO PLlst(P)
  287.                 GET #1, P2, J1
  288.                 'PRINT "K"; J1; "K";
  289.                 Datan(P) = Datan(P) + J1
  290.                 IF J1 = CHR$(0) THEN EXIT FOR
  291.             NEXT
  292.             PRINT GAME; Datan(P)
  293.         END IF
  294.         Datan(P) = ""
  295.     CLOSE
  296.     NEXT
  297.     Jn = ""
  298. END IF
  299. IF Mouse = N THEN INPUT "Which saved game do you want to edit (0-5)"; Jn
  300. IF Mouse = Y THEN
  301.     IF Jn = "" THEN
  302.         PRINT "Which saved game do you want to edit (0-5)? ";
  303.         DO
  304.             Jn = INKEY$
  305.             IF (Jn >= "0" AND Jn < "6") THEN PRINT Jn: EXIT DO
  306.             IF Jn = CHR$(13) THEN PRINT "": EXIT DO
  307.             m1 = 3: MouseDriver m1, m2, m3, m4
  308.             IF m2 = 1 OR m2 = 3 THEN
  309.                 IF m4 \ 8 > 0 AND m4 \ 8 < 7 THEN Jn = MID$(STR$((m4 \ 8) - 1), 2, 1): PRINT Jn: EXIT DO
  310.             END IF
  311.         LOOP
  312.     END IF
  313. END IF
  314. IF Jn < "0" OR Jn > "5" THEN Jn = "0"
  315. JNM = "DOOMSAV" + Jn + ".DSG"
  316. 'PRINT JNM
  317. IF Pln = 0 THEN
  318. IF Mouse = N THEN INPUT "Witch player (1-4)"; Pln
  319. IF Mouse = Y THEN
  320.     PRINT "Witch player (1,2,3,4)? ";
  321.         DO
  322.             Jn = INKEY$
  323.             Pln = VAL(Jn)
  324.             IF (Pln > 0 AND Pln < 5) THEN PRINT Pln: EXIT DO
  325.             IF Jn = CHR$(13) THEN Pln = 1: PRINT " ": EXIT DO
  326.             m1 = 3: MouseDriver m1, m2, m3, m4
  327.             IF m2 = 1 OR m2 = 3 THEN
  328.                 m3 = m3 \ 8
  329.                 m4 = m4 \ 8
  330.                 Pln = VAL(CHR$(SCREEN(m4 + 1, m3 + 1, 0)))
  331.                 IF Pln > 0 AND Pln < 5 THEN PRINT Pln: EXIT DO
  332.             END IF
  333.         LOOP
  334.     END IF
  335. END IF
  336. MouseOff
  337. IF Pln < 1 OR Pln > 4 THEN Pln = 1
  338.  
  339. IF UCASE$(CO$) <> "Y" THEN CLS
  340. H = 1
  341. OPEN JNM FOR RANDOM AS #1 LEN = H'24
  342. 'GET VERSION NUMBER
  343. GET #1, 33, J1
  344. JVER = J1
  345. GET #1, 34, J1
  346. JVER = JVER + J1
  347. GET #1, 35, J1
  348. JVER = JVER + J1
  349. Ver = VAL(JVER)
  350. IF VAL(JVER) <= 101 THEN
  351. LOCATE ML, 1
  352. PRINT "USING version 1.1 OR LESS, UNKOWN FOR LESS";
  353. FOR Place = 1 TO 33
  354.     Place(Place) = Place(Place) - 4
  355. NEXT
  356. END IF
  357. IF VAL(JVER) = 102 THEN
  358. LOCATE ML, 1
  359. PRINT "USING version 1.2";
  360. END IF
  361. IF VAL(JVER) = 103 THEN
  362. LOCATE ML, 1
  363. PRINT "USING version 1.3: Never used it assuming same as 1.2";
  364. END IF
  365. IF VAL(JVER) = 104 THEN
  366. LOCATE ML, 1
  367. PRINT "USING version 1.4";
  368. 'same as 1.2
  369. END IF
  370. IF VAL(JVER) = 105 THEN
  371. LOCATE ML, 1
  372. PRINT "USING version 1.5";
  373. FOR Place = 17 TO 25
  374.     Place(Place) = Place(Place) + 4
  375. NEXT
  376. Ts = Ts + 1
  377. END IF
  378. IF VAL(JVER) >= 106 THEN
  379. LOCATE ML, 1
  380. IF Ver = 106 THEN PRINT "USING version 1.666";
  381. IF Ver = 107 THEN PRINT "USING version 1.7(a)";
  382. IF Ver = 108 THEN PRINT "USING version 1.8";
  383. IF Ver = 109 THEN PRINT "USING version 1.9";
  384. IF Ver > 109 THEN PRINT "USING version 1.666 to 1.9 format";
  385.  
  386. FOR Place = 1 TO 25
  387.     Place(Place) = Place(Place) + 2
  388. NEXT
  389. Place(9) = Place(9) - 1
  390. FOR Place = 30 TO 33
  391.     Place(Place) = Place(Place) + 2
  392. NEXT
  393. FOR Place = 17 TO 25
  394.     Place(Place) = Place(Place) + 4
  395. NEXT
  396. CHANGE = CHANGE + 4
  397. Ts = Ts + 1
  398. END IF
  399. ' read data
  400. FOR P = 0 TO Ts
  401.     SELECT CASE Tipe(P)
  402.         CASE 1 TO 2  'Flip Flop
  403.             Datan(P) = GETT$(P)
  404.             IF UCASE$(CO$) <> "Y" THEN LOCATE P + 1, 1
  405.             IF VAL(Datan(P)) > 1 OR VAL(Datan(P)) < 0 THEN WIDTH 80, 25: PRINT "NO PLAYER"; Pln; P; Tipe(P): END
  406.             IF UCASE$(CO$) <> "Y" THEN PRINT P; "You "; JDO(VAL(Datan(P))); " "; JNames(P);
  407.         CASE 3 TO 7  'Ammo and Stats
  408.             Datan(P) = GETT$(P)
  409.             IF CO$ <> "Y" THEN
  410.                 LOCATE P + 1, 1
  411.                 IF P < 25 THEN PRINT P; JNames(P); " has"; Datan(P)
  412.                 IF P > 25 THEN PRINT P; JNames(P); " is"; Datan(P)
  413.             END IF
  414.         CASE IS = 8'UnEditable
  415.             'EPISODE
  416.                 Datan(P) = GETT$(P)
  417.                 IF UCASE$(CO$) <> "Y" AND P = 26 THEN LOCATE P + 1, 1: PRINT P; Datan(P); " "; JENAMES(VAL(Datan(P)));
  418.             'LEVEL
  419.                 IF P = 27 AND UCASE$(CO$) <> "Y" THEN LOCATE P + 1, 1: PRINT P; Datan(27); " "; JLNames(VAL(Datan(26)), VAL(Datan(27)));
  420.             CASE IS = 9'Skill
  421.             Datan(P) = GETT$(P)
  422.             IF UCASE$(CO$) <> "Y" THEN LOCATE P + 1, 1: PRINT P; Datan(P); " "; JSNAMES(VAL(Datan(P)));
  423.         CASE IS = 10'Four way Flip Flop
  424.             Datan(P) = GETT$(P)
  425.             IF UCASE$(CO$) <> "Y" THEN LOCATE P + 1, 1: PRINT P; JSPE(VAL(Datan(P)));
  426.         CASE IS = 11 'Strings(name of game)
  427.             FOR P2 = 1 TO PLlst(P)
  428.                 GET #1, P2, J1
  429.                 Datan(P) = Datan(P) + J1
  430.                 IF J1 = CHR$(0) THEN EXIT FOR
  431.             NEXT
  432.             IF UCASE$(CO$) <> "Y" THEN LOCATE P + 1, 1: PRINT P; JNames(P); "="; Datan(P),
  433.     END SELECT
  434. NEXT
  435.  
  436. IF UCASE$(CO$) = "Y" THEN GOSUB QUICKY
  437. LOCATE Ts + 1, 1
  438. PRINT Ts; "Give Max of Everything Except Keys and Bonuses"
  439. LOCATE Ts + 2, 1
  440. PRINT "-1 to Save and End"
  441. LOCATE Ts + 3, 1
  442. PRINT "-2 To End Without Saving"
  443. IF Mouse = Y THEN DO: m1 = 3: MouseDriver m1, m2, m3, m4: LOOP UNTIL m2 = 0
  444. DO
  445. LOCATE Ts + 4
  446. PRINT SPACE$(80);
  447. LOCATE Ts + 5, 1
  448. PRINT SPACE$(80);
  449. LOCATE Ts + 4, 1
  450. IF Mouse = N THEN INPUT "Edit Which One"; Ed
  451. IF Mouse = Y THEN
  452. PRINT "Edit Which One? ";
  453.     MouseOn
  454.     J = ""
  455.     DO
  456.         Jn = INKEY$
  457.         IF Jn = CHR$(8) AND LEN(J) > 0 THEN J = MID$(J, 1, LEN(J) - 1): LOCATE Ts + 4, 1: PRINT "Edit Which One? "; J; " ": LOCATE Ts + 4, 1: PRINT "Edit Which One? "; J;
  458.         IF (Jn >= "0" AND Jn <= "9") OR Jn = "-" THEN J = J + Jn: PRINT Jn;
  459.         IF Jn = CHR$(13) THEN Ed = VAL(J): PRINT Jn; Ed: EXIT DO
  460.             m1 = 3: MouseDriver m1, m2, m3, m4
  461.             IF m2 = 1 OR m2 = 3 THEN
  462.                 Ed = m4 \ 8
  463.                 IF Ed > Ts THEN Ed = -(Ed - Ts)
  464.                 PRINT Ed: EXIT DO
  465.             END IF
  466.        
  467.     LOOP
  468.     MouseOff
  469. END IF
  470. IF Ed = -1 THEN EXIT DO
  471. IF Ed = -2 THEN GOTO ENDER
  472. P = Ed
  473. IF Tipe(Ed) = 11 THEN
  474.     INPUT "New name"; Datan(Ed)
  475.     LOCATE P + 1, 1
  476.     PRINT SPACE$(80)
  477.     LOCATE P + 1, 1
  478.     PRINT P; JNames(P); "="; Datan(P),
  479. END IF
  480. IF Tipe(Ed) = 1 OR Tipe(Ed) = 2 THEN
  481.     Datan(P) = STR$(1 - VAL(Datan(P)))
  482.     IF VAL(Datan(P)) < 0 THEN Datan(P) = STR$(0)
  483.     LOCATE P + 1, 1
  484.     PRINT SPACE$(80);
  485.     LOCATE P + 1, 1
  486.     PRINT P; "You "; JDO(VAL(Datan(P))); " "; JNames(P);
  487.     IF P = 11 AND Ver = 105 THEN Datan(Ed) = "2": LOCATE 34, 1: PRINT 34; JNames(P); " is "; Datan(P)
  488.     IF Mouse = Y THEN DO: m1 = 3: MouseDriver m1, m2, m3, m4: LOOP UNTIL m2 = 0
  489. END IF
  490. IF Tipe(Ed) >= 3 AND Tipe(Ed) <= 7 THEN
  491.     DAT$ = Datan(P)
  492.     LOCATE Ts + 4, 20
  493.     PRINT "                           OTHTTHMTHBTH"
  494.     PRINT "                                             "; Datan(Ed)
  495.     INPUT "(-1 gives max, -2 gives max + 200k)New value"; Datan(Ed)
  496.     IF Datan(Ed) <> "" THEN Datan(Ed) = " " + Datan(Ed)
  497.     LOCATE Ts + 4
  498.     PRINT SPACE$(80);
  499.     PRINT SPACE$(80);
  500.     PRINT SPACE$(80);
  501.     IF Datan(P) = " -1" THEN Datan(P) = " 2000000600"
  502.     IF Datan(P) = " -2" THEN Datan(P) = " 2000200600"
  503.     IF MID$(Datan(P), 1, 1) = "-" THEN Datan(P) = "0"
  504.     IF Datan(P) = "" THEN Datan(P) = DAT$
  505.     LOCATE P + 1, 1
  506.     PRINT SPACE$(80);
  507.     LOCATE P + 1, 1
  508.     IF Ed < 25 THEN PRINT P; JNames(P); " has"; Datan(P)
  509.     IF Ed > 25 THEN PRINT P; JNames(P); " is"; Datan(P)
  510. END IF
  511. IF Tipe(Ed) = 10 THEN
  512.     'INPUT "(0=NONE, 1=NOCLIP, 2=GOD, 3=BOTH) New value";
  513.     D = VAL(Datan(P)) + 1
  514.     IF D = 4 THEN D = 0
  515.     Datan(P) = STR$(D)
  516.     LOCATE P + 1, 1
  517.     PRINT SPACE$(80);
  518.     LOCATE P + 1, 1
  519.     PRINT P; JSPE(VAL(Datan(P)));
  520.     IF Mouse = Y THEN DO: m1 = 3: MouseDriver m1, m2, m3, m4: LOOP UNTIL m2 = 0
  521. END IF
  522. IF Tipe(Ed) = 9 THEN
  523.     INPUT "What skill level"; Datan(Ed)
  524.     P = Ed
  525.     LOCATE P + 1, 1
  526.     PRINT SPACE$(80);
  527.     LOCATE P + 1, 1
  528.     PRINT P; VAL(Datan(Ed)); JSNAMES(VAL(Datan(Ed)))
  529. END IF
  530. IF Ed = Ts THEN
  531.     INPUT "Want God Mode"; A$
  532.     IF UCASE$(MID$(A$, 1, 1)) = "Y" THEN God = Y ELSE God = N
  533.     FOR P = 0 TO Ts - 1
  534.         SELECT CASE Tipe(P)
  535.             CASE 1
  536.                 Datan(P) = "1"
  537.                 IF P = 11 AND Ver = 105 THEN Datan(P) = "2"
  538.             CASE 3
  539.                 Datan(P) = "2000000600"
  540.             CASE 4
  541.                 Datan(P) = "199"
  542.             CASE 5
  543.                 Datan(P) = "35536"
  544.             CASE 6
  545.                 Datan(P) = "2000200600"
  546.             CASE 10
  547.                 IF God = Y THEN Datan(P) = "2"
  548.         END SELECT
  549.     NEXT
  550.     FOR P = 0 TO Ts
  551.         SELECT CASE Tipe(P)
  552.             CASE IS = 1'Flip Flop
  553.                 LOCATE P + 1, 1
  554.                 PRINT P; "You "; JDO(VAL(Datan(P))); " "; JNames(P)
  555.             CASE 3 TO 6  'Ammo and Stats
  556.                 LOCATE P + 1, 1
  557.                 IF P < 25 THEN PRINT P; JNames(P); " has "; Datan(P)
  558.                 IF P > 25 THEN PRINT P; JNames(P); " is "; Datan(P)
  559.             CASE IS = 10'Four way Flip Flop
  560.                 LOCATE P + 1, 1: PRINT P; JSPE(VAL(Datan(P)));
  561.         END SELECT
  562.     NEXT
  563. END IF
  564. LOOP
  565.  
  566. SAVE:
  567. 'NAME
  568. P = 0
  569. FOR P2 = 1 TO PLlst(P)
  570. J1 = MID$(Datan(P), P2, 1)
  571. IF P2 > LEN(Datan(P)) THEN J1 = CHR$(0)
  572. PUT #1, P2, J1
  573. NEXT
  574. 'EVERYTHING ELSE
  575. FOR P = 1 TO Ts - 1
  576. VALU = VAL(Datan(P))
  577. PL(0) = 0
  578. PL(1) = 0
  579. PL(2) = 0
  580. PL(3) = 0
  581. PL(4) = 0
  582. 'VALU = VALU + 1
  583. FOR P2 = PLlst(P) TO 0 STEP -1
  584. AGAIN: IF VALU >= (256 ^ P2) THEN PL(P2) = PL(P2) + 1: VALU = VALU - (256 ^ P2): GOTO AGAIN
  585. NEXT
  586. FOR P2 = PLlst(P) TO 0 STEP -1
  587. J1 = CHR$(PL(P2))
  588. IF PLlst(P) <> -1 AND (P < 26 OR P > 28) THEN PUT #1, Place(P) + P2 + (CHANGE * (Pln - 1)), J1
  589. NEXT
  590. NEXT
  591.  
  592. FOR P = 26 TO 28
  593. VALU = VAL(Datan(P))
  594. PL(0) = 0
  595. PL(1) = 0
  596. PL(2) = 0
  597. PL(3) = 0
  598. PL(4) = 0
  599. 'VALU = VALU + 1
  600. FOR P2 = PLlst(P) TO 0 STEP -1
  601. AGAIN2: IF VALU >= (256 ^ P2) THEN PL(P2) = PL(P2) + 1: VALU = VALU - (256 ^ P2): GOTO AGAIN2
  602. NEXT
  603. FOR P2 = PLlst(P) TO 0 STEP -1
  604. J1 = CHR$(PL(P2))
  605. PUT #1, Place(P) + P2, J1
  606. NEXT
  607. NEXT
  608. ENDER:
  609. WIDTH 80, 25
  610. END
  611. QUICKY:
  612.     FOR P = 0 TO Ts - 1
  613.         SELECT CASE Tipe(P)
  614.         CASE 1
  615.             Datan(P) = "1"
  616.             IF P = 11 AND Ver = 105 THEN Datan(P) = "2"
  617.         CASE 3
  618.             Datan(P) = "2000000600"
  619.         CASE 4
  620.             Datan(P) = "199"
  621.         CASE 5
  622.             Datan(P) = "35536"
  623.         CASE 6
  624.             Datan(P) = "2000200600"
  625.         CASE 10
  626.             IF God = Y THEN Datan(P) = "2"
  627.         END SELECT
  628.     NEXT
  629. GOSUB SAVE
  630.  
  631. FUNCTION GETT$ (P)
  632. IF P = 0 THEN GETT$ = " -1 P=0": EXIT FUNCTION
  633. IF PLlst(P) < 0 THEN GETT$ = " UNKNOWN": EXIT FUNCTION
  634. FOR P2 = 0 TO PLlst(P)
  635. IF P < 26 OR P > 28 THEN GET #1, Place(P) + P2 + (CHANGE * (Pln - 1)), J1
  636. IF P >= 26 AND P <= 28 THEN GET #1, Place(P) + P2, J1
  637. VALU = VALU + ASC(J1) * (256 ^ (P2))
  638. NEXT
  639. GETT$ = STR$(VALU)
  640. END FUNCTION
  641.  
  642. DEFINT J, V-Z
  643. FUNCTION MouseDoubleClick (Delay, Button, m3, m4)
  644. '----------------------------------------------------------------------------
  645. '  function MouseDoubleClick returns a zero if the mouse button specified by
  646. '  Button has not been double clicked within the time specified by Delay, or
  647. '  a one if it has.  Button is either 0 (Left) or 1 (Right).
  648. '
  649. '  RETURNS:
  650. '
  651. '     m1 = button status.  0 = No    buttons pressed
  652. '                          1 = Left  button  pressed
  653. '                          2 = Right button  pressed
  654. '                          3 = Both  buttons pressed
  655. '
  656. '     m2 = Number of button presses on specified button
  657. '     m3 = Horizontal cursor position at last button press.
  658. '     m4 = Vertical   cursor position at last button press.
  659. '
  660. '----------------------------------------------------------------------------
  661.  
  662.    m1 = 5      'Mouse function 5, Get Button Press Information
  663.    m2 = Button 'Button to check
  664.    MouseDriver m1, m2, m3, m4
  665.  
  666.    WaitForClick& = TIMER + Delay
  667.    WHILE TIMER < WaitForClick&: WEND
  668.  
  669.    m1 = 5      'Mouse function 5, Get Button Press Information
  670.    m2 = Button
  671.    MouseDriver m1, m2, m3, m4
  672.  
  673.    IF m2 > 1 THEN MouseDoubleClick = 1 ELSE MouseDoubleClick = 0
  674.  
  675. END FUNCTION
  676.  
  677. SUB MouseDriver (m0, m1, m2, m3) STATIC
  678. '----------------------------------------------------------------------------
  679. '  procedure MouseDriver uses interrupt 51 to invoke mouse functions in the
  680. '  Microsoft Mouse Driver.  NOTE:  ALL parameters to this procedure MUST
  681. '  be of type INTEGER.
  682. '----------------------------------------------------------------------------
  683.  
  684.    DIM regs AS Register
  685.  
  686.    regs.ax = m0
  687.    regs.bx = m1
  688.    regs.cx = m2
  689.    regs.dx = m3
  690.  
  691.    Interrupt 51, regs, regs
  692.  
  693.    m0 = regs.ax
  694.    m1 = regs.bx
  695.    m2 = regs.cx
  696.    m3 = regs.dx
  697.  
  698. END SUB
  699.  
  700. FUNCTION MouseInit
  701. '----------------------------------------------------------------------------
  702. '  procedure MouseInit initializes the mouse and detects wheter or not
  703. '  the Microsoft Mouse Driver is installed.
  704. '----------------------------------------------------------------------------
  705.  
  706.    m1 = 0
  707.    MouseDriver m1, m2, m3, m4
  708.    IF NOT m1 THEN MouseInit = 0 ELSE MouseInit = 1
  709.    
  710. END FUNCTION
  711.  
  712. SUB MouseOff
  713. '----------------------------------------------------------------------------
  714. '  procedure MouseOff turns the mouse cursor off. (Mouse function 2)
  715. '----------------------------------------------------------------------------
  716.  
  717.    m1 = 2
  718.    MouseDriver m1, m2, m3, m4
  719.  
  720. END SUB
  721.  
  722. SUB MouseOn
  723. '----------------------------------------------------------------------------
  724. '  procedure MouseOn turns the mouse cursor on.  (Mouse function 1)
  725. '----------------------------------------------------------------------------
  726.  
  727.    m1 = 1
  728.    MouseDriver m1, m2, m3, m4
  729.  
  730. END SUB
Advertisement
Add Comment
Please, Sign In to add comment