[ Drugwar //e beta-1 (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 to return to menu.)";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 return to menu.)";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%=in%-((ci%+hi%+ai%+wi%+si%+li%)+(gn%*5)) return £daily {randomizes drug prices, adds a day, calculates interests, checks day number} c%=rnd(1)*12000+16000 h%=rnd(1)*7000+5000 a%=(rnd(1)*34+10)*100 w%=(rnd(1)*42+33)*10 s%=(rnd(1)*15+7)*10 l%=(rnd(1)*4+1)*10 b%=rnd(1)*20 d%=d%+1 ls%=ls%*1.1 sa%=sa%*1.06 £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%=(rnd(1)*1150)+850) gosub @wait goto @menu £heroinbust print "Addicts are buying heroin" print "at outrageous prices!" h%=(rnd(1)*25000)+18000 gosub @wait goto @menu £cokebust print "Pigs made a big coke bust!" print "Prices are outrageous!!!!" c%=rnd(1)*60000)+80000 gosub @wait goto @menu £mugged print "You got mugged!" print chr$(10) ms%=wa%/3 ms%=ms%*2 ml%=wa%-ms% print "You lost $";ml% wa%=ms% gosub @wait gosub @menu £cops we%=C%+H%+W%+A%+S%+L% [ my improved revisions will likely add some additional conditions on how/when we run cops ] if we%<50 then return {no return since last gosub means this should work} 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% = gn%+1 wa% = wa%-400 fs% = fs%-5 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%=in%+10 wa%=wa%-200 goto @menu £dedguy If fs%<8 THEN return dg%=(rnd(1)*7)+1 xg%=rnd(1)*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%=(rnd(1)*550)+250 gosub @wait goto @menu £loan home gosub @titlebar print chr$(10) print "Loan shark not implemented. gosub @wait goto @menu £bank home gosub @titlebar print chr$(10) print "Bank not implemented." 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%=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%=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%=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%=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%=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%=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 COCAINE ":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 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 £instructions home gosub @titlebar print chr$(10) print "Welcome to DRUGWAR//e" print chr$(10) print chr$(10) input "Would you like instructions? (Y/N): ";Q$ £inserrorhandler {I'm hoping this will prevent crashes} If Q$ = "Y" THEN GOTO @inst IF Q$ = "N" THEN GOTO @gamestart input "I don't understand you. Y or N only. ";Q$ goto @inserrorhandler £gamestart {set wallet, debt, location, inventory space, zero out inventory} 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 gosub @daily {the only time we'll call this outside of the subway} goto @menu {the real start of the game} £inst home gosub @titlebar print chr$(10) print "This is a game of buying and selling." print "Your goal is to pay off your debt and" print "make as much money as possible in a one" print "month period. Prices fluctuate every day" print "and interest on your loan is calculated" print "as well. If you deal too heavily, you'll" print "attract the attention of the police. print CHR$(10) print "Commands are usually the first letter" print "of what you want to do. Y = yes and" print "N = No." Input "Press ENTER to continue.";X$ goto @gamestart £weedend home gosub @titlebar inverse : print " SMOKE WEED " : NORMAL print "You hallucinate on the wildest trip" print "of your life, stumble on to the tracks," print "and get creamed by a train!" print chr$(10) print chr$(10) print "Just say NO to drugs!" gosub @wait goto @ironicend £endgame home gosub @titlebar inverse : print " GAME OVER " : NORMAL print chr$(10) print "Thanks for playing." print "At this point I'm supposlisted to calculate" print "your final score and all that. But this" print "is an alpha release. So it's not done." print chr$(10) print "At least you didn't die from smoking" print "that weed in the subway. Good job." end £ironicend home gosub @titlebar inverse : print " GAME OVER " : NORMAL print chr$(10) print "Oh wow man. You died...from smoking pot" print "in a game about drug dealing." print chr$(10) print "Well, thanks for playing." end