[ Drugwar //e beta-7 (c) 2018 Jay Moore Licensed under GPLv3 ] goto @instructions {because we're sticking subroutines up here} £titlebar {this literally just draws the game title at the top of the screen} print " DRUGWAR//e " return £wait print chr$(10) input "Press enter to continue.";x$ return £howmuchbuy {some common purchase code} print "You can afford ";j print "You can carry ";fs print chr$(10) input "How many? (Enter 0 cancel): ";k gosub @nobuysell return £howmuchsell {common sell code} print "You can sell: ";j print chr$(10) [ I'm using this to test how some of the logic might work for buying in a subroutine. In theory it should only loop if you put in more than you can afford; check for 0 with the subroutine; and if that condition isn't met...return to the subroutine which carries on with the buy/sell. I just have to watch out for cases where you do something invalid and it runs the purchase/sell anyway. Checking valid freespace for buying can be put here too. But lines that reference a specific drug are still in normal code. ] £howmanysell input "How many? (Enter 0 to cancel.): ";k If k>j then print "You don't have that many!" : goto @howmanysell {this should work according to my testing} gosub @nobuysell return £nobuysell {I'll be reusing this a lot, so let's subroutine it.} if K=0 goto @menu return £statusbar inverse:print "DAY: ";D,P$:normal print chr$(10) return £freespace {I'll probably call this from more than the menu} fs=int(in-(ci+hi+ai+wi+si+li)+(gn*5)) return £daily {randomizes drug prices, adds a day, calculates interests, checks day number} c=int(rnd(1)*12000+16000.5) h=int(rnd(1)*7000+5000.5) a=int((rnd(1)*34+10)*100+.5) w=int((rnd(1)*42+33)*10+.5) s=int((rnd(1)*15+7)*10+.5) l=int((rnd(1)*4+1)*10+.5) b=int(rnd(1)*20+.5) d=d+1 gosub @interest £interest if d = 1 then return ls=int(ls*1.1+.5) sa=int(sa*1.06+.5) return £checkday {so I can check the day by itself} if D >= 31 GOTO @endgame return £subwayevents if b=1 then goto @cheapludes if b=2 then goto @cheepweed if b=3 then goto @pigheroin if b=4 then goto @heroinbust if b=5 then goto @heroinbust if b=6 then goto @cokebust if b=7 then goto @cokebust if b=8 then goto @mugged if b=9 then goto @cops if b=10 then goto @cops if b=11 then goto @cops if b=12 then goto @gunbuy if b=13 then goto @gunbuy if b=14 then goto @dedweed if b=15 then goto @newcoat if b=16 then goto @dedguy if b=17 then goto @homeacid return £cheapludes print "Rival dealers are selling cheap ludes!" l=2 gosub @wait goto @menu £cheepweed print "Weed prices have bottomed-out!" w=122 gosub @wait goto @menu £pigheroin print "Pigs are selling cheap heroin" print "from last week's raid!" h=int((rnd(1)*1150)+850.5) gosub @wait goto @menu £heroinbust print "Addicts are buying heroin" print "at outrageous prices!" h=int((rnd(1)*25000)+18000.5) gosub @wait goto @menu £cokebust print "Pigs made a big coke bust!" print "Prices are outrageous!!!!" c=int((rnd(1)*60000)+80000.5) {the infamous line 930} gosub @wait goto @menu £mugged print "You got mugged!" print chr$(10) ms=int(wa/3) ms=int(ms*2) ml=int(wa-ms) print "You lost $";ml wa=ms gosub @wait gosub @menu £cops we=CI+HI+WI+AI+SI+LI [ my improved revisions will likely add some additional conditions on how/when we run cops ] if we<50 then return print "It's the cops!" print chr$(10) print "Just kidding!" print "Cops haven't been coded yet." gosub @wait goto @menu {goto @police} £gunbuy if wa < 500 THEN return gosub @freespace if fs < 5 THEN return gx=int(rnd(1)*2) if gx = 0 then ax$ = "Baretta" if gx = 1 then ax$ = "Saturday Night Special" if gx = 2 then ax$ = ".44 Magnum" print "Will you buy a ";ax$ input "for $400? (Y/N)";re$ if re$ <> "Y" then goto @menu gn = int(gn+1) wa = int(wa-400) goto @menu £dedweed print "There's some weed here that smells" print "like good stuff!!" print chr$(10) input "Will you smoke it? (Y/N)";X$ If X$ = "Y" THEN GOTO @weedend return £newcoat if wa<300 then return print "Will you buy a new trenchcoat" input "with more pockets for $200? (Y/N)";X$ if X$ <> "Y" then goto @menu in=int(in+10) wa=int(wa-200) goto @menu £dedguy If fs<8 THEN return dg=int((rnd(1)*7)+1.5) xg=int(rnd(1)*5+.5) if xg=0 THEN li=li+dg : ss$ = "Ludes" if xg=1 THEN si=si+dg : ss$ = "Speed" if xg=2 THEN wi=wi+dg : ss$ = "Weed" if xg=3 THEN ai=ai+dg : ss$ = "Acid" if xg=4 THEN hi=hi+dg : ss$ = "Heroin" if xg=5 THEN ci=ci+dg : ss$ = "Cocaine" print "You found ";dg;" units of" print " ";ss$ print "on a dead dude in the subway!" print chr$(10) gosub @wait goto @menu £homeacid print "The market has been flooded" print "with cheap home-made acid!" a=int((rnd(1)*550)+250.5) gosub @wait goto @menu £menu home gosub @titlebar gosub @freespace {it might be more efficient to calculate freespace now} inverse : print " Day:";D;" ";ph$ : normal print "(C)heck Prices" print "(I)nventory" print "(B)uy" print "(S)ell" print "(J)et" print "See (L)oan shark" print "(V)isit Bank" input "Please make your selection: ";T$ if t$ = "C" goto @prices if t$ = "I" goto @inventory if t$ = "B" goto @buy if t$ = "S" goto @sell if t$ = "J" goto @jet if t$ = "L" goto @loan if t$ = "V" goto @bank print "Invalid Selection" {This should be enough to catch errors. I should have a loop timer on this.} goto @menu £prices home gosub @titlebar {this is literally recycled from the price and gosub demo} inverse:print" PRICES ":normal print chr$(10) print"cocaine:","$"c print"heroin:","$"h print"acid:","$"a print"weed:","$"w print"speed:","$"s print"ludes:","$"l print"wallet:","$"wa gosub @wait goto @menu £inventory home gosub @titlebar inverse:print" INVENTORY ":normal print chr$(10) print"cocaine:",ci print"heroin:",hi print"acid:",ai print"weed:",wi print"speed:",si print"ludes:",li print"free space:",fs gosub @wait goto @menu £buy home gosub @titlebar inverse:print" BUY ":normal print chr$(10) print"What do you want to buy?" print chr$(10) print "(C)ocaine" print "(H)eroin" print "(A)cid" print "(W)eed" print "(S)peed" print "(L)udes" input "Enter Selection: ";db$ if db$="c" goto @cokebuy if db$="h" goto @herbuy if db$="a" goto @acidbuy if db$="w" goto @weedbuy if db$="s" goto @spdbuy if db$="l" goto @ludbuy goto @menu [ To "save space" the calculation for how much you can afford and carry as well as looking for 0 to return to menu are a subroutine. I want to subroutine some of the logic...but I'll have to try and organize the code to allow that due to the gotos in the IF statements. Otherwise it'll screw up. I'll work on that in a revision after the game mostly works. ] £cokebuy home gosub @titlebar inverse:print" BUY COCAINE ":normal print chr$(10) j=int(wa/c) gosub @howmuchbuy if k>fs THEN inverse : print "You can't carry that much!" : normal : goto @cokebuy if k<=j then ci=ci+k : wa=wa-(c*k) if k>j THEN inverse : print "You can't afford that much!" : normal : goto @cokebuy goto @menu £herbuy home gosub @titlebar inverse:print" BUY HEROIN ":normal print chr$(10) j=int(wa/h) gosub @howmuchbuy if k>fs THEN inverse : print "You can't carry that much!" : normal : goto @herbuy if k<=j then hi=hi+k : wa=wa-(h*k) if k>j THEN inverse : print "You can't afford that much!" : normal : goto @herbuy goto @menu £acidbuy home gosub @titlebar inverse:print" BUY ACID ":normal print chr$(10) j=int(wa/a) gosub @howmuchbuy if k>fs THEN inverse : print "You can't carry that much!" : normal : goto @acidbuy if k<=j THEN ai=ai+k : wa=wa-(a*k) if k>j THEN inverse : print "You can't afford that much!" : normal : goto @acidbuy goto @menu £weedbuy home gosub @titlebar inverse:print" BUY WEED ":normal print chr$(10) j=int(wa/w) gosub @howmuchbuy if k>fs THEN inverse : print "You can't carry that much!" : normal : goto @weedbuy if k<=j THEN wi=wi+k : wa=wa-(w*k) if k>j THEN inverse : print "You can't afford that much!" : normal : goto @weedbuy goto @menu £spdbuy home gosub @titlebar inverse:print" BUY SPEED ":normal print chr$(10) j=int(wa/s) gosub @howmuchbuy if k>fs THEN inverse : print "You can't carry that much!" : normal : goto @spdbuy if k<=j THEN si=si+k : wa=wa-(s*k) if k>j THEN inverse : print "You can't afford that much!" : normal : goto @spdbuy goto @menu £ludbuy home gosub @titlebar inverse:print" BUY LUDES ":normal print chr$(10) j=int(wa/l) gosub @howmuchbuy if k>fs THEN inverse : print "You can't carry that much!" : normal : goto @ludbuy if k<=j THEN li=li+k : wa=wa-(l*k) if k>j THEN inverse : print "You can't afford that much!" : normal : goto @ludbuy goto @menu £sell home gosub @titlebar inverse:print" SELL ":normal print chr$(10) print "What would you like to sell?" print chr$(10) print "(C)ocaine" print "(H)eroin" print "(A)cid" print "(W)eed" print "(S)peed" print "(L)udes" £sellsel input "Enter Selection: (0 to cancel)";db$ if db$="c" goto @cokesell if db$="h" goto @hersell if db$="a" goto @acidsell if db$="w" goto @weedsell if db$="s" goto @spdsell if db$="l" goto @ludsell if db$="0" goto @menu print "Invalid Selection!" goto @sellsel £cokesell home gosub @titlebar inverse:print" SELL COCAINE ":normal print chr$(10) j=ci gosub @howmuchsell ci=ci-k wa=wa+(c*k) goto @menu £hersell home gosub @titlebar inverse:print" SELL HEROIN ":normal print chr$(10) j=hi gosub @howmuchsell hi=hi-k wa=wa+(h*k) goto @menu £acidsell home gosub @titlebar inverse:print" SELL ACID ":normal print chr$(10) j=ai gosub @howmuchsell ai=ai-k wa=wa+(a*k) goto @menu £weedsell home gosub @titlebar inverse:print" SELL WEED ":normal print chr$(10) j=wi gosub @howmuchsell wi=wi-k wa=wa+(w*k) goto @menu £spdsell home gosub @titlebar inverse:print" SELL SPEED ":normal print chr$(10) j=si gosub @howmuchsell si=si-k wa=wa+(s*k) goto @menu £ludsell home gosub @titlebar inverse:print" SELL LUDES ":normal print chr$(10) j=li gosub @howmuchsell li=li-k wa=wa+(l*k) goto @menu £jet home gosub @titlebar inverse:print" JET ":normal print chr$(10) print "(B)ronx" print "(G)hetto" print "(C)entral Park print "(M)anhatten" print "Coney (I)sland" print "Broo(K)lyn" print "(O)ops...stay!" input "Where to dude? ";jt$ if jt$="B" then pq$ = "The Bronx" : GOTO @jetb if jt$="G" then pq$ = "The Ghetto" : GOTO @jetb if jt$="C" then pq$ = "Central Park" : GOTO @jetb if jt$="M" then pq$ = "Manhatten" : goto @jetb if jt$="I" then pq$ = "Coney Island" : goto @jetb if jt$="K" then pq$ = "Brooklyn" : goto @jetb if jt$="O" then goto @menu goto @jet £jetb if pq$=ph$ then goto @alreadythere ph$ = pq$ goto @subway £alreadythere home gosub @titlebar inverse:print" JET ":normal print chr$(10) print "You're already in:" print " ";ph$ gosub @wait goto @jet £subway home gosub @daily gosub @titlebar inverse:print" SUBWAY ":normal print chr$(10) gosub @subwayevents print chr$(10) {the only way you should wind up here is if nothing happens} print "Welcome to ";ph$ {i hope} print chr$(10) input "Press ENTER to continue. ";X$ goto @menu £notbronx print "you need to head to the bronx" print "to take care of this business." gosub @wait goto @menu £loan home gosub @titlebar inverse : print " LOAN SHARK " :NORMAL print chr$(10) if ph$ <> "THE BRONX" then goto @notbronx print "Your debt is: $";ls print "You have: $";wa print chr$(10) input "(R)epay, (B)orrow, (L)eave: ";X$ If X$ = "R" THEN goto @payme If X$ = "B" Then goto @borrow If X$ = "L" then goto @Menu goto @loan £payme INPUT "Repay how much? ";PL IF WALS THEN PRINT "YOU DON'T OWE THAT MUCH!" : INPUT"PRESS ENTER TO CONTINE. ";X$ : GOTO @LOAN WA=WA-PL LS=LS-PL PRINT "THANK YOU." GOSUB @WAIT GOTO @MENU £borrow Input "How much do you want? ";BL if bl>5000 then print "He's not that stupid!" : goto @borrow ls=ls+bl wa=wa+bl print "Here's your money." : PRINT CHR$(10) : PRINT "Remember, I break thumbs." gosub @wait goto @menu £bank home gosub @titlebar inverse : print " BANK O'MURICA ":NORMAL print chr$(10) if ph$ <> "THE BRONX" then goto @notbronx print "Your balance: $";sa print "Your wallet: $";wa print chr$(10) INPUT "(D)EPOSIT, (W)ITHDRAW, (L)EAVE: ";X$ if x$ = "d" then goto @deposit if x$ = "w" then goto @mymoney if x$ = "l" then goto @menu goto @bank £deposit INPUT "How much? ";dl If wa
100 then sc=100 return £endgame home gosub @titlebar gosub @scorecalculate inverse : print " GAME OVER " : NORMAL print chr$(10) print "Your score on a scale of 1 to 100: ";sc print chr$(10) input "Would you like to play again? (Y/N)";pa$ if pa$ = "Y" then goto @gamestart print "Thanks for playing." print "Remember...watch your back." print "Have a nice day!" gosub @anticheat end £ironicend home gosub @titlebar gosub @scorecalculate inverse : print " GAME OVER " : NORMAL print chr$(10) print "Your final score is: ";sc print chr$(10) print "But you died from smoking weed? In a" print "game about dealing drugs? Buddy, no" print "score can redeem that stupidity." print chr$(10) input "Would you like to play again? ";pa$ if pa$= "Y" THEN GOTO @GAMESTART if pa$= "N" THEN PRINT "I don't blame you." : end print "What? If you're that dumb, I'm leaving." gosub @anticheat end £anticheat {clears out all variables at endgame to force a start-over} wa=2000 sa=0 ls=5000 d=0 {daily subroutine adds a day} ph$="The Bronx" gn=0 dp=0 in=100 ci=0 hi=0 ai=0 wi=0 si=0 li=0 return