Jump to content

mindlord

Members
  • Content Count

    89
  • Joined

  • Last visited

Community Reputation

171 Excellent

About mindlord

  • Rank
    Star Raider
  1. https://youtu.be/SJsTqjiJ1Fk I wanted to be finished by the beginning of summer, but work and life keeps me from it. In the meantime. Tease on this. Oh and obviously the music isn't mine it's a placeholder I made out of the World 1 Overland music from SMB3. So... credits to those guys.
  2. There is a slight delay between setting the read address and the VDP actually being ready to be read. Throw an _asm("nop") between setting the vdp read address and the actual read and that might fix it. Sent from my SM-J727V using Tapatalk
  3. Fantastic. It's a challenge writing a game with such limits. Sent from my SM-J727V using Tapatalk
  4. Still not dead yet. I've been working slowly but steadily on this over the past several months. The basic engine is more or less complete. Monster AI, combat, and character progression are all in there. I have a few smaller features, the mini-bosses and final boss to add, but I have plenty of ROM left for those routines. I've written a really small/tight music and sound effect engine which works (mostly) and will be portable to other projects that I'll release separately from the game. I'm pretty proud of how few bytes it needs. I had a lot to learn about sound programming on the TI not to mention music theory to make that happen. I still have to write the actual music for the game as well, which is not my area of expertise either, so I hope I can make some that doesn't sound awful. A really weird VDP overwrite bug that's happening when you pick up and drop items that I haven't been able to pin down. I was really hoping to have it done before Christmas, but these damn bugs and music/SFX engine have had me stumped for awhile now. Here's hoping for a mid-winter or early spring release.
  5. Here's a pretty rough port of the game Quest by Aardvark Software to the TI. There was supposedly an official port, but it appears to have been lost to time. This is based off the MC-10 basic source. I didn't fancy it up too much, but it should be playable, but it's SLOOOOOOW. There are probably bugs since I didn't test it thoroughly. I plan on adding some nice graphics and sound, but don't have time at the moment. I'm throwing it in here so I don't forget about it. 1 CALL CHAR(96,"0042000840002000") 2 CALL CHAR(104,"55084421085104AA") 3 CALL CHAR(112,"1A121A3E585414161C145AB5FFB5FFB500183C3E77E3C3C300048CCAADC7BDD7") 4 CALL CHAR(116,"081C3E141C141C1C0042E7427E7E666660F0406A7F5B7F7F5A7E24BEFFE7C3C3") 5 CALL CHAR(120,"9888BCDA9A28286C58485C774A5D545A9AAA9AFC98BCA4660018083C5A181436") 6 CALL CHAR(124,"000000829254FF00060F0256FED6FEFE") 7 CALL CHAR(128,"01030517193E77DB88CCDC6CB6FA7EBF") 8 DATA 1,15,2,2,15,2,3,15,2,4,15,2,5,15,2,6,15,2,7,15,2,8,15,2 9 DATA 9,4,3,10,6,5,11,2,3,12,2,3,13,7,3,14,2,3 10 FOR C=1 TO 14::READ CS,CF,CB::CALL COLOR(CS,CF,CB)::NEXT C 11 DIM D$(9),O$(17),D(28,4),O(17,6)::CALL CLEAR:: CALL SCREEN(2) 12 GOSUB 13000 15 CALL KEY(0,K,S)::IF S=0 THEN X=(RND*100)::GOTO 15 20 CALL CLEAR:(17,1)=INT(RND*155)+100::SP=INT(RND*6)+1::ST=INT(RND*10)+1::CH=INT(RND*6)+1::M=10::MC=6::BQ=96::S1=BQ::SW1=INT(RND*10)::SW2=INT(RND*20) 30 DO$="WANT TO"::W$="WHICH ITEM?"::E$="DON'T HAVE ANY!"::H$="HOW MANY?"::M$="DON'T HAVE THAT MANY!" 31 Y$="YOU'RE WASTING MY TIME!"::R$="THEY ATTACKED ANYWAY!" 40 DATA 117CASTLE,115RUIN,114CAVE,116TOWER,113CITY,123PILGRIMS,121WIZARDS,122OGRES,120SOLDIERS 50 DATA SIEGE TOWERS,SMALL BOAT,GRAPPLING HOOKS,OIL LAMPS,AXES,SHOVELS,ROPE,LEATHER JERKINS,CHAIN MAIL,PLATE ARMOR,SHIELDS 51 DATA BROAD SWORDS,LONG BOWS,CROSSBOWS,RATIONS,LARGE KEY,GOLD COINS 60 DATA 1500,2500,0,150,255,0,15,30,0,5,20,0,10,30,0,10,20,0,15,25,0,15,40,2,25,60,4,50,100,8,3,20 61 DATA 2,10,50,5,11,50,5,18,40,4,4 62 DATA 15,0,1,5,0,0.25,1,0 70 FOR I=1 TO 9 :: READ D$(I) 71 NEXT I 72 FOR I=1 TO 17 :: READ O$(I) 73 NEXT I 74 FOR I=1 TO 17 75 FOR J=2 TO 4 76 READ O(I,J) 77 NEXT J 78 NEXT I 80 DATA 117,116,114,115,117,116,114,115,117,116,114,115,117,116,114,115,117,116,114,115,123,123,121,122,120,120 83 CALL CLEAR::DISPLAY AT(10,15):"PLEASE WAIT" 85 D(1,1)=113:(2,1)=113:(1,2)=INT(RND*6)+1:(2,2)=INT(RND*6)+9:(1,3)=INT(RND*30)+1:(2,3)=INT(RND*30)+1 86 FOR I=3 TO 28:(I,4)=1::READ D(I,1) 90 D(I,2)=INT(RND*14)+1:(I,3)=INT(RND*30)+1::IF D(I,2)=8 THEN 90 95 FOR J=1 TO I::IF D(I,2)=D(J,2) THEN IF D(I,3)=D(J,3) THEN IF J<>I THEN 90 100 NEXT J 101 NEXT I 102 FOR I=8 TO 14::IF (RND*10)>5 THEN O(I,1)=(RND* 110 NEXT I:(15,1)=INT(RND*25)+15::A=INT(RND*7)+1::B=INT(RND*31)+1::GOSUB 9000 120 F1=1::GOSUB 3030::GOSUB 6100 999 ! ===== MAIN GAME LOOP 1000 GOSUB 5900::EG=EG+1::IF DF THEN 1008 1004 Q=1::F1=1::GOSUB 3030::GOSUB 6100::IF TW<=M*100 THEN 1008 1005 DISPLAY AT(24,1) SIZE(31):"CARRYING TOO MUCH!";::CALL WAIT(1000)::GOSUB 3000::GOSUB 9000::GOTO 1000 1008 DISPLAY AT(24,1) SIZE(31):"WHAT NOW SIRE?";::A$="IUNSEW" 1009 GOSUB 2000::IF Q=0 THEN 1009 1021 IF Q=1 THEN GOSUB 3000 :: GOSUB 9000 1022 IF Q=2 THEN GOSUB 5000 :: GOSUB 9000 1023 OA=A::OB=B 1030 IF Q=3 AND A>1 THEN A=A-1 1040 IF Q=4 AND A<15 THEN A=A+1 1050 IF Q=5 AND B<32 THEN B=B+1 1060 IF Q=6 AND B>1 THEN B=B-1 1065 IF A<>8 OR O(2,1)>0 THEN 1070 1066 DISPLAY AT(24,1) SIZE(31):"YOUR MEN CAN'T SWIM!";::CALL WAIT(1000)::A=A-1::IF Q=3 THEN A=A+2 1067 GOTO 1000 1070 F=F+1:=O(15,1)-INT(M/2)::IF F<10 THEN 1084 1071 F=0 1076 O(15,1)=P::IF P<M THEN DISPLAY AT(24,1) SIZE(31):"FOOD LOW!";::CALL WAIT(1000)::IF O(15,1)<0 THEN O(15,1)=0 1080 IF P<INT(M/2) THEN P=INT((RND*M)+1)/3):: DISPLAY AT(24,1) SIZE(31);"MEN DIED!";::M=M-P::CALL WAIT(1000) 1084 MC=MC+1:: FOR I=1 TO 28::IF A=D(I,2) THEN IF B=D(I,3) THEN 7000 1090 NEXT I:: CALL GCHAR(A,B,TS1):: IF TS1<>112 THEN CALL GCHAR(A,B,S1) 1099 ! ===== SET LOCATION FLAGS 1100 DF=0::SWF=0::MF=0:: DISPLAY AT(24,1) SIZE(31):"YOU ARE IN THE ";::B$="WILDERNESS"::IF A=8 THEN B$="RIVER" 1120 IF B>18 THEN IF A<8 THEN B$="MOUNTAINS"::MF=1::F=F+.5 1130 IF S1=125 THEN B$="SWAMP"::SWF=1 1140 IF S1=220 THEN DISPLAY AT(23,1):"SHADOW OF";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"THE DREADED MORLOCK'S TOWER!";::CALL WAIT(1000)::GOTO 6000 1170 DISPLAY AT(24,16):B$;:: CALL SPRITE(#1,112,2,A*8-7,B*8-7)::GOSUB 9100 1199 ! ===== CHECK FOR ENCOUNTERS 1200 BT=0:: FOR X=1 TO 28::IF ABS(A-D(X,2))>2 THEN 1290 1210 IF ABS(B-D(X,3))>2 THEN 1290 1220 IF D(X,4)=1 THEN D(X,4)=0 1230 FOR Y=1 TO 9::IF VAL(SEG$(D$(Y),1,3))<>D(X,1) THEN 1280 1260 IF Y>5 THEN BT=Y 1270 DISPLAY AT(24,1) SIZE(31):SEG$(D$(Y),4,99);" NEAR";::CALL WAIT(1000) 1275 IF X>2 THEN CALL SPRITE(#X-1,D(X,1),2,D(X,2)*8-7,D(X,3)*8-7) 1280 NEXT Y 1290 NEXT X 1291 IF A>12 THEN IF B>22 THEN DISPLAY AT(24,1) SIZE(31):"CITADEL NEAR";::CALL WAIT(1000) 1299 ! ===== CHECK FOR EVENTS 1300 IF SWF THEN IF (RND*100)<10 THEN DISPLAY AT(24,1) SIZE(31):"2 MEN ARE STUCK IN QUICKSAND!";::M=M-2::DF=1::CALL WAIT(1000)::GOTO 1319 1305 IF MF THEN IF (RND*100)<10 THEN DISPLAY AT(24,1) SIZE(31):"2 MEN FELL INTO A DEEP RAVINE!";::M=M-2::DF=1::CALL WAIT(1000) 1319 IF BT THEN 1000 1320 BC=BC+1::IF BC<3 THEN 1000 1329 ! ==== EVERY 3 DAYS MOVE THE WANDERING ENCOUNTERS 1330 BC=0:: FOR J=23 TO 28::IF D(J,4)=0 THEN D(J,4)=1:: CALL DELSPRITE(#J-1) 1340 X=INT(RND*14)+1::Y=INT(RND*31)+1::IF X=8 THEN 1340 1350 FOR ZZ=1 TO 28::IF X=D(ZZ,2) THEN IF Y=D(ZZ,3) THEN IF J<>ZZ THEN 1340 1359 ! ===== THERES A CHANCE ONE OF THE WANDERING ENCOUNTERS WILL TELEPORT STRAIGHT TO THE PLAYER 1360 NEXT ZZ:(J,2)=X:(J,3)=Y 1361 NEXT J::IF EX>0 THEN IF (RND*100)>80 THEN J=INT(RND*6)+22:(J,2)=A:(J,3)=B::GOTO 1084 1369 ! ===== DRAW PLAYER ICON AND START MAIN LOOP AGAIN 1370 CALL SPRITE(#1,112,2,A*8-7,B*8-7)::GOTO 1000 1999 ! ===== GET ONE KEY 2000 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 2000 ELSE Q=POS(A$,CHR$(K),1) 2001 IF Q=0 THEN 2000 2010 RETURN 2099 ! ===== GET QUANTITY 2100 Q=0 :: ACCEPT AT(24,1) VALIDATE(DIGIT): Q :: RETURN 2999 ! ===== INVENTORY MANAGEMENT 3000 CALL CLEAR::CALL DELSPRITE(ALL):: DISPLAY AT(1,10):"INVENTORY" 3010 DISPLAY AT(2,1): "ITEM QTY WT. TOTAL"::F1=0::ZL=0 3029 ! ========== CALCULATE CARRY WEIGHT 3030 WV=0::TW=0:: FOR I=1 TO 17::IF O(I,1)=0 THEN 3058 3040 J=O(I,1)::K=O(I,2)::TW=INT(TW+J*K)::IF F1=0 THEN GOSUB 3180::ZL=ZL+1::IF ZL=15 THEN GOSUB 8904::ZL=0 3050 X=O(I,4)::IF J>M THEN J=M 3055 WV=WV+J*X 3058 NEXT I::IF F1 THEN RETURN 3070 IF Q=3 THEN RETURN 3080 DISPLAY AT(18,1):"TOTAL WEIGHT";TW;" LBS.":: DISPLAY AT(19,1):"YOUR";M;" MEN CAN CARRY";M*100 3085 IF Z=5 THEN 8700 ! START BARTERING IF IN A CITY OTHERWISE DROP ITEMS 3089 ! ===== INVENTORY MAINTAINENCE 3090 DISPLAY AT(24,1) SIZE(31):DO$;" DROP ANYTHING?"; 3095 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 3095 3100 IF CHR$(K)<>"Y" THEN Q=1::RETURN 3109 ! ===== WHICH ITEM LOOP 3110 DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 3110 3111 ! ===== DONT HAVE ANY 3112 I=Q::QT=O(I,1)::IF QT=0 THEN DISPLAY AT(24,1) SIZE(31):E$;::CALL WAIT(1000)::GOTO 3090 3139 ! ===== HOW MANY LOOP 3140 DISPLAY AT(24,1) SIZE(31):H$;::CALL WAIT(1000)::GOSUB 2100::IF Q>QT THEN DISPLAY AT(24,1) SIZE(31):M$;::CALL WAIT(1000)::GOTO 3090 3159 ! ===== REMOVE THEM FROM INVENTORY AND RECALCULATE 3160 O(I,1)=QT-Q::Q=1::GOTO 3000 3179 ! ===== PRINT THE INVENTORY LIST 3180 IMAGE ## ############### #### ### ### 3181 DISPLAY AT(ZL+3,1) SIZE(31):USING 3180:I,O$(I),J,K,J*K 3185 RETURN 3499 ! ===== LEAVE ENCOUNTER 3500 Z=0::BC=3::BT=0::B=B-1::IF (RND*10)>5 THEN B=B+2 3510 RETURN 4999 ! ===== USE ITEM LOOP 5000 CALL CLEAR::Q=3::GOSUB 3010:: DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 5000 5001 I=Q:=O(I,1)::IF P=0 THEN DISPLAY AT(24,1) SIZE(31):E$;::CALL WAIT(1000)::GOTO 5041 5020 IF(I=16 AND Z=1)OR(I=6 AND Z=2)OR(I=4 AND Z=3)OR(I=3 AND Z=4) THEN 5100 5030 IF I=7 AND DF=1 THEN 5600 5040 DISPLAY AT(24,1) SIZE(31)$(I);" - NO EFFECT";::CALL WAIT(1000) 5041 DISPLAY AT(24,1) SIZE(31):"SOMETHING ELSE?";::CALL WAIT(1000) 5045 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 5045 5050 IF CHR$(K)<>"Y" THEN 5000 5060 GOSUB 9000::RETURN 5099 ! ===== EXPLORE DUNGEON LOOP 5100 GOSUB 9000:: DISPLAY AT(24,1) SIZE(31):"YOU'RE IN A ";SEG$(D$(Z),4,99);::CALL WAIT(1000)::J=0 5110 DISPLAY AT(24,1) SIZE(31):"SEARCH OR LEAVE?"; 5115 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 5115 5120 IF CHR$(K)<>"Y" THEN J=J+10::GOTO 5210 5130 GOSUB 3500::RETURN 5209 ! ===== FIGHT! 5210 SF=0::IF (RND*100)>90 THEN SF=Z::SU=1::Z=9::GOTO 7300 5219 ! ===== NOTHING 5220 IF (RND*100)>J THEN DISPLAY AT(24,1) SIZE(31):"THERE'S NOTHING HERE!";::CALL WAIT(1000)::GOTO 5110 5249 ! ===== FOUND A CHEST WITH GOLD, TRAP, OR POSSIBLY A LARGE KEY 5250 DISPLAY AT(24,1) SIZE(31):"THERE'S A CHEST HERE!";::CALL WAIT(1000)::IF (RND*100)>90 THEN 5390 5255 IF D(AL,4)=-1 THEN DISPLAY AT(24,1) SIZE(31):"IT'S EMPTY!";::CALL WAIT(1000)::GOTO 5350 5260 D(AL,4)=-1:: DISPLAY AT(24,1) SIZE(31):"CONTAINING";::IF O(16,1) OR (RND*100)>20 THEN 5300 5261 DISPLAY AT(24,10):"A ";O$(16);:(16,1)=1::GOTO 5350 5300 J=INT(RND*500)+50:: DISPLAY AT(24,10):J;O$(17);:(17,1)=O(17,1)+J 5349 ! ===== FORCE EXIT OF DUNGEON 5350 CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"BETTER LEAVE NOW!";::CALL WAIT(1000)::Q=0::GOTO 5130 5389 ! ===== ITS A TRAP 5390 J=INT(RND*2)+1::IF M>20 THEN J=INT(RND*5)+1 5400 DISPLAY AT(24,1) SIZE(31):"IT'S A TRAP!";J;"MEN ARE KILLED";::M=M-J::GOTO 5350 5999 ! ===== CHANCE TO SAVE MEN WHO FELL IN RAVINE IF YOU HAVE ROPE IN INVENTORY 5600 IF (RND*100)<80 THEN DISPLAY AT(24,1) SIZE(31):"THE ROPE BROKE-IT'S USELESS NOW";::CALL WAIT(1000):(7,1)=O(7,1)-1::DF=0::GOTO 5610 5601 DISPLAY AT(24,1) SIZE(31):"YOU SAVED THEM"::CALL WAIT(1000)::DF=0::M=M+2 5610 GOSUB 9000::RETURN 5899 ! ===== CHECK FOR TOTAL FAILURE 5900 IF M>0 THEN RETURN 5901 DISPLAY AT(24,1) SIZE(31):"ALL YOUR MEN ARE DEAD!"::END 5999 ! ===== PREPARE FOR CITADEL FIGHT 6000 IF TW<2400 THEN GOSUB 20030 6010 IF O(1,1)=0 THEN GOSUB 20050 6020 DISPLAY AT(24,1) SIZE(31):DO$;::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"ATTACK OR LEAVE?"; 6030 A$="LA"::GOSUB 2000::IF Q=0 THEN 6030 6031 IF Q=2 THEN 6050 6040 IF (RND*100)>70 THEN GOSUB 20010 6045 A=A-1::GOTO 1084 6050 FA=1::BM=INT(RND*40)+160::IW=20::BW=2000::SU=0::GOTO 7470 6099 ! ===== DETERMINE CHANCE TO RUN AWAY 6100 I=INT(TW/M):: FOR TSP=1 TO 9::IF 10*TSP>=I THEN SP=TSP 6101 NEXT TSP 6120 SP=10-SP::RETURN 6999 ! ==== DETERMINE ENCOUNTER TYPE 7000 AL=I:=D(I,1):: FOR Z=1 TO 9 7007 IF P=VAL(SEG$(D$(Z),1,3)) THEN 7010 7008 NEXT Z :: GOTO 1000 7009 ! ==== RUN ENCOUNTER Z<5 IS A CITY/DUNGEON Z>5 WANDERING ENCOUNTER 7010 SU=0::IF Z>5 THEN 7300 7020 DISPLAY AT(24,1) SIZE(31):"YOU'VE COME TO A ";SEG$(D$(Z),4,99);::CALL WAIT(1000)::ON Z GOTO 7040,7060,7080,7090,7100 7040 DISPLAY AT(24,1) SIZE(31):"THE WAY IS BARRED BY A STOUT,";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"DOOR WITH AN IRON LOCK! ";::CALL WAIT(1000)::GOTO 1000 7060 DISPLAY AT(24,1) SIZE(31):"THE ENTRANCE IS FILLED WITH";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"DRIFTED SAND!";::CALL WAIT(1000)::GOTO 1000 7080 DISPLAY AT(24,1) SIZE(31):"IT'S TOO DARK TO SEE!";::CALL WAIT(1000)::GOTO 1000 7090 DISPLAY AT(24,1) SIZE(31):"THERE'S NO VISIBLE ENTRANCE!";::CALL WAIT(1000)::GOTO 1000 7099 ! ==== STOCK THE SHELVES 7100 IF MC<6 THEN 7200 7110 MC=0:: FOR I=1 TO 15:(I,5)=0::IF (RND*100)>50 OR (I=1 AND A> THEN IF I<15 THEN 7190 7120 O(I,5)=INT(RND*20)+1::V=O(I,3)::GOSUB 8990:(I,6)=V::IF I=1 THEN O(I,5)=1 7130 IF I=15 THEN O(I,5)=INT(RND*100)+M 7190 NEXT I 7219 ! ===== CITY ENCOUNTER / BUY SELL LOOP 7200 DISPLAY AT(24,1) SIZE(31):"LEAVE,BUY AT MARKET,INVENTORY?";::A$="LBMI"::GOSUB 2000::IF Q=0 THEN 7200 7220 IF Q=1 THEN GOSUB 3500::GOSUB 9000::GOTO 1000 7221 IF Q=4 THEN GOSUB 3000::GOTO 7200 7222 GOTO 8000 7299 ! ===== WANDERING ENCOUNTER 7300 DISPLAY AT(24,1) SIZE(31):"YOU'VE ENCOUNTERED A BAND OF";::CALL WAIT(1000) 7301 DISPLAY AT(24,1) SIZE(31):SEG$(D$(Z),4,99);::CALL WAIT(1000) 7309 ! ===== DETERMINE NUMBER AND STRENGTH OF OPPONENTS 7310 BM=INT((RND*M)+(M/4))+INT(EG/10)::BS=INT(RND*10)+1::BX=INT(RND*INT(EG/10))+1::SB=INT(RND*10)+1::BI=BM::BX=INT(BX) 7320 IF Z<8 THEN DISPLAY AT(24,1) SIZE(31):"THEY HAVE AN ESCORT!";::CALL WAIT(1000) 7330 IW=INT(RND*-10*(EX>2)::BW=BM*IW:: IF IW<6 THEN B$=" LIGHTLY"::GOTO 7335 7331 IF IW>5 AND IW<15 THEN B$=" WELL"::GOTO 7335 7332 B$=" HEAVILY" 7335 DISPLAY AT(24,1) SIZE(31):"THERE ARE";BM;",";B$;" ARMED";::CALL WAIT(1000) 7340 IF SU THEN 7450 7399 ! ===== ATTACK, RUN, PARLAY 7400 DISPLAY AT(24,1) SIZE(31):DO$;::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"ATTACK, RUN OR BE FRIENDLY?";::CALL WAIT(1000)::A$="ARF"::GOSUB 2000 7401 ON Q GOTO 7440,7800,7900::GOTO 7400 7399 ! ===== PLAYER ATTACKED - CHECK FOR SURPRISE 7440 SU=-1::IF (RND*100)>50 THEN SU=0::GOTO 7470 7449 ! ===== IF SOMEONE WAS SURPRISED DISPLAY A MESSAGE 7450 B$="THEY"::IF SU=1 THEN B$="YOU":: DISPLAY AT(24,1) SIZE(31):B$;" WERE SURPRISED!";::CALL WAIT(1000) 7469 ! ===== DO COMBAT ROUND 7470 F1=1::GOSUB 3030::BW=BM*IW::CALL CLEAR:: CALL DELSPRITE(ALL):: DISPLAY AT(1,1):" ";"YOU THEM":: DISPLAY AT(2,1):"MEN ";M;" ";BM 7471 DISPLAY AT(3,1):"WEAPONS ";WV;" ";BW:: DISPLAY AT(4,1):"EXPERIENCE";EX;" ";BX 7480 I=INT(RND*100)::J=INT(RND*100):: DISPLAY AT(5,1):"LUCK ";I;" ";J::CALL KEY(0,K,S)::IF S=0 THEN 7480 7490 I=I-SU*10::J=J+SU*10::TW=WV+I+ST*5+EX*5::IF FA THEN IF O(1,1)=0 THEN TW=INT(TW/5) 7500 WT=BW+J+SB*2+BX*2::M=INT(M+(WT>TW)*(RND*(M/10))+(TW>WT)*((RND*(M/20))-1)) 7501 BM=INT(BM+(TW>WT)*(RND*(BM/10))+(WT>TW)*((RND*(BM/20))-1))::IF BM<0 THEN BM=0 7504 ! ===== DISPLAY COMBAT RESULTS 7505 GOSUB 5900:: DISPLAY AT(6,1):"SURVIVORS";M,BM::IF BM=0 THEN 7950 7506 IF BM<INT(BI/4) AND (RND*100)>50 AND FA=0 THEN 7901 7509 ! ===== ASK PLAYER WHAT TO DO NEXT 7510 DISPLAY AT(24,1) SIZE(31):"FIGHT, RUN OR TERMS?"::A$="FRT"::GOSUB 2000::IF Q=0 THEN 7510 7511 IF Q=2 THEN 7800 7512 IF Q=3 THEN 7820 7513 GOTO 7470 7799 ! ===== ATTEMPT TO FLEE 7800 IF SP>B OR (RND*100)>90 OR FA=1 THEN DISPLAY AT(24,1) SIZE(31):"YOU GOT AWAY!";::CALL WAIT(1000)::FA=0::GOTO 7930 7810 DISPLAY AT(24,1) SIZE(31):"THEY CAUGHT YOU!";::CALL WAIT(1000)::SU=1::GOTO 7450 7820 I=WT*INT(RND*100)::J=TW*INT(RND*10)*CH::CALL WAIT(1000)::IF J>I AND FA=0 THEN 7830 7821 DISPLAY AT(24,1) SIZE(31):R$;::CALL WAIT(1000)::SU=1::GOTO 7450 7830 BM=INT(RND*BM)+1::GOTO 7901 7899 ! ===== PARLAY 7900 IF INT(RND*10)+1>CH THEN DISPLAY AT(24,1) SIZE(31):R$;::CALL WAIT(1000)::SU=1::GOTO 7450 7901 ! ===== THEY SURRENDER 7902 BM=INT(RND*BM)+1 7903 DISPLAY AT(24,1) SIZE(31):BM;"WILL JOIN YOU!";::CALL WAIT(1000)::M=M+BM:: CALL CLEAR :: DISPLAY AT(1,1): "THEY HAVE:" 7909 ! ===== GET SALVAGE 7910 FOR I=8 TO 15::IF (RND*100)>50 THEN L=L+1::QT=INT(RND*BM)+1:(I,1)=O(I,1)+QT:: DISPLAY AT(L,1): QT;O$(I) 7920 NEXT I ::IF (RND*100)>90 THEN DISPLAY AT(L+1,1):"TOO BAD THEY HAD NO GOLD!"::GOTO 7930 7921 QT=INT(INT(RND*5)*((EG/10)+1)*BM)+1:(17,1)=O(17,1)+QT:: DISPLAY AT(L+1,1): QT;O$(17) 7929 ! ===== END WANDERING ENCOUNTER - RETURN SEARCHING OR KICK OUT TO WORLD MAP 7930 EX=EX+1:: DISPLAY AT(24,1) SIZE(31):"READY TO GO ON?";::A$="Y"::GOSUB 2000::IF SF THEN Z=SF::GOTO 5100 7931 GOSUB 9000::GOTO 1330 7949 ! ===== CHECK FOR TOTAL VICTORY 7950 IF FA THEN 9500 7951 ! ===== ALL OPPONENTS DEAD - COLLECT SPOILS 7952 CALL CLEAR:: DISPLAY AT(2,1):"YOU WON!" 7960 BM=2:: DISPLAY AT(3,1) SIZE(31):"YOU MANAGED TO SALVAGE:"::GOTO 7910 7999 ! ===== SELL INVENTORY LOOP 8000 HC=0::OC=0::ZL=0::CALL CLEAR::VF=1:: DISPLAY AT(2,1): "ITEM VAL WT. QTY":: FOR I=1 TO 15::IF O(I,5)=0 THEN 8090 8002 DISPLAY AT(ZL+3,1) SIZE(31):USING 3180:I,O$(I),O(I,6),O(I,2),O(I,5) 8020 ZL=ZL+1::IF ZL=15 THEN GOSUB 8900::IF ZL=99 THEN I=15 8090 NEXT I 8100 HB=0::F1=1::GOSUB 3030:: DISPLAY AT(18,1):"YOU HAVE";O(17,1);"GOLD COINS":: DISPLAY AT(19,1):"YOUR";M;"MEN ARE CARRYING";TW;"LBS" 8279 ! ===== SELL WHICH ITEM 8280 DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 8280 8281 V=O(Q,6)::OL=3+INT(RND*4)-(5*(V>150))::GOSUB 8990:=Q::IF O(X,5)=0 THEN DISPLAY AT(24,1) SIZE(31):E$;::CALL WAIT(1000)::GOTO 7200 8299 ! ===== ACCEPT OFFER 8300 DISPLAY AT(24,1) SIZE(31):"YOUR OFFER?";::CALL WAIT(1000)::GOSUB 2100::Q=INT(Q)::IF Q>=V THEN V=Q::GOTO 8400 8305 IF INT(RND*30)=15 THEN V=Q::GOTO 8400 8306 IF INT(RND*20)=12 THEN OL=OL+10 8307 IF INT(RND*100)=74 THEN V=V*2 8310 IF Q<INT(V/3) THEN DISPLAY AT(24,1) SIZE(31):"NOT INTERESTED!";::GOTO 8610 8315 IF Q=HB THEN HC=HC+1 8320 IF Q<HB OR (Q=HB AND HC=2) THEN 8600 8330 HB=Q:: DISPLAY AT(24,1) SIZE(31):"TELL YOU WHAT I'M GOING TO DO--";::CALL WAIT(1000)::ZZ=INT(V*((INT(RND*15)+5)*.01))::IF ZZ<1 THEN ZZ=1 8340 V=V-ZZ::IF V<HB THEN V=HB 8345 IF Q>=V THEN V=Q::GOTO 8400 8349 ! ===== MAKE COUNTEROFFER 8350 IF (RND*100)>50 THEN DISPLAY AT(24,1) SIZE(31):"FOR YOU I'LL MAKE IT";V;"OK?";::GOTO 8355 8351 DISPLAY AT(24,1) SIZE(31):"WHAT DO YOU SAY TO";V;"?"; 8355 CALL KEY(0,K,S)::Q=0::IF S=0 THEN 8355 8360 IF CHR$(K)<>"Y" THEN OC=OC+1::IF OC<OL THEN 8300 8361 GOTO 8600 8399 ! ===== HOW MANY LOOP 8400 DISPLAY AT(24,1) SIZE(31):H$;::CALL WAIT(1000)::GOSUB 2100::IF Q>O(X,5) THEN DISPLAY AT(24,1) SIZE(31):M$;::CALL WAIT(1000)::GOTO 8400 8420 IF Q*V>O(17,1) THEN DISPLAY AT(24,1) SIZE(31):"NOT ENOUGH GOLD!";::CALL WAIT(1000)::GOTO 8400 8430 O(X,1)=O(X,1)+Q:(17,1)=O(17,1)-Q*V:(X,5)=O(X,5)-Q::GOTO 7200 8599 ! ===== WASTING MY TIME LOOP 8600 DISPLAY AT(24,1) SIZE(31):Y$; 8610 CALL WAIT(1000):(X,6)=INT(O(X,6)/4)+O(X,6)::GOTO 7200 8699 ! ===== SELL ITEM LOOP 8700 DISPLAY AT(24,1) SIZE(31):DO$;" SELL ANYTHING?";::CALL KEY(0,K,S)::Q=0::IF S=0 THEN 8700 8701 IF CHR$(K)<>"Y" THEN RETURN 8709 ! ===== WHICH ITEM LOOP 8710 DISPLAY AT(24,1) SIZE(31):W$;::CALL WAIT(1000)::GOSUB 2100::IF Q>17 THEN 8710 8711 I=Q::IF O(I,1)=0 THEN DISPLAY AT(24,1) SIZE(31):E$::CALL WAIT(1000)::GOTO 8700 8714 ! ===== MAKE OFFER LOOP 8715 V=INT(O(I,3)/(INT(RND*3)+2))::OL=5+INT(RND*5)-10*(V>80)::HB=O(I,3)+1::HC=0 8720 IF (RND*100)>50 THEN DISPLAY AT(24,1) SIZE(31):"I'LL GIVE YOU";V;"OK?";::GOTO 8725 8721 DISPLAY AT(24,1) SIZE(31):"WILL YOU TAKE";V;"?"; 8725 CALL KEY(0,K,S)::IF S=0 THEN 8725 8726 IF CHR$(K)="Y" THEN 8800 8729 ! ===== ACCEPT OFFER LOOP 8730 DISPLAY AT(24,1) SIZE(31):"HOW MUCH DO YOU WANT?";::CALL WAIT(1000)::GOSUB 2100::J=Q::IF J=HB THEN HC=HC+1::GOTO 8735 8731 HC=0 8735 IF J<=V THEN 8800 8740 IF J>HB OR (J=HB AND HC=2) OR OL=0 THEN DISPLAY AT(24,1) SIZE(31):Y$;::CALL WAIT(1000)::RETURN 8750 HB=J::ZZ=INT(V*(INT(RND*20)+10)*.01)::IF ZZ<1 THEN ZZ=1 8760 V=V+ZZ::IF V<J THEN 8720 8799 ! ===== HOW MANY LOOP 8800 DISPLAY AT(24,1) SIZE(31):H$;::CALL WAIT(1000)::GOSUB 2100::IF Q>O(I,1) THEN DISPLAY AT(24,1) SIZE(31):M$;::CALL WAIT(1000)::GOTO 8800 8810 O(17,1)=O(17,1)+V*Q:(I,1)=O(I,1)-Q::RETURN 8899 ! ===== PRESS ENTER OR SPACE TO BUY 8900 J=0:: DISPLAY(23,1):"PRESS ENTER TO CONTINUE, OR ":: DISPLAY(24,1):"SPACE BAR TO BUY":: GOTO 8910 8904 DISPLAY AT(24,1)::"PRESS ENTER TO CONTINUE" 8910 CALL KEY(0,K,S)::IF S=0 THEN 8910 8920 IF K=32 THEN ZL=99 8930 RETURN 8989 ! ===== INFLATE PRICE 8990 V=V-INT(RND*V/4)::RETURN 8999 ! ===== DRAW WORLD MAP 9000 CALL CLEAR::FOR I=1 to 16::CALL HCHAR(I,1,96,32)::NEXT I:: FOR I=1 TO 11:: FOR J=1 TO 4::IF (RND*10)>5 THEN CALL HCHAR(J+SW1,I+SW2,124) 9001 NEXT J 9002 NEXT I 9010 FOR I=1 TO 32 :: CALL HCHAR(8,I,104) 9015 NEXT I ! RIVER 9020 FOR I=1 TO 14 STEP 2 :: FOR J=1 TO 6 :: IF (RND*10)>6 THEN CALL HCHAR(J,I+18,128) :: CALL HCHAR(J,I+19,129) 9021 NEXT J 9022 NEXT I 9023 CALL HCHAR(D(1,2),D(1,3),D(1,1)):: CALL HCHAR(D(2,2),D(2,3),D(2,1)) 9030 CALL HCHAR(14,25,118):: CALL HCHAR(14,26,119):: CALL HCHAR(14,27,125) ! CITADEL 9100 CALL SPRITE(#1,112,2,A*8-7,B*8-7) ! PLAYER 9110 FOR X=3 TO 28::IF D(X,4)<1 THEN CALL SPRITE(#X-1,D(X,1),2,D(X,2)*8-7,D(X,3)*8-7) ! ENCOUNTER ICONS 9120 NEXT X::RETURN 9499 ! ===== VICTORY 9500 DISPLAY AT(24,1) SIZE(31):"YOU'VE CONQUERED THE FORCES OF"; 9501 CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"EVIL! ALL HAIL THE VICTOR!!!!"::END 13000 DISPLAY AT(10,7):"TITLE GOES HERE"; 14150 DISPLAY AT(10,9):"-PRESS ENTER-"; 14200 RETURN 20010 I=INT(((RND*M)+1)/10)::M=M-I:: DISPLAY AT(24,1) SIZE(31):"A VOLLEY OF ARROWS";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"FROM THE TOWER HAS KILLED";::CALL WAIT(1000) 20020 DISPLAY AT(24,1) SIZE(31):"OF YOUR MEN!";::CALL WAIT(1000)::RETURN 20030 DISPLAY AT(24,1) SIZE(31):"YOUR ARMY IS NOT STRONG ENOUGH";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"TO MAKE SUCCESS LIKELY!"; 20040 CALL WAIT(1000):: RETURN 20050 DISPLAY AT(24,1) SIZE(31):"THE WALLS ARE TOO HIGH";::CALL WAIT(1000):: DISPLAY AT(24,1) SIZE(31):"FOR YOU TO BESIEGE THE TOWER!";::CALL WAIT(1000) 20060 RETURN 20070 SUB WAIT(SC) 20080 FOR WT=0 TO SC 20085 NEXT WT 20090 SUBEND
  6. Thanks Chue, that was the missing puzzle piece. Sent from my SM-J727V using Tapatalk
  7. I try to build GCC with the newest patch and all I get is: [email protected]:~$ ./install.sh TMS9900NEW Using these patches: binutils-2.19.1-tms9900-1.7.patch gcc-4.4.0-tms9900-1.17.patch === Creating output directory === === Getting Binutils sources === === Getting GCC sources === === Make build directory === === Decompressing and patching Binutils sources === === Decompressing and patching GCC sources === === Building Binutils === === Building GCC === === Installation complete === Nothing is in the folder. Not that I expected there to be.
  8. I'd have to fix my 100 first. Sent from my SM-J727V using Tapatalk
  9. Pulse Check! Real life has been nuts, but I have been working here and there when I have time. As a little tease, here's a picture of the overland map from Graxx. This is most likely not final, but it gives a pretty good idea of the scope of the game. There's also an underworld map that is just as big. I feel like I can cram a lot into a 32K cart, and I can't wait to finish this project and share it with you fine people.
  10. Yeah. .WMA is pretty much the worst possible audio format Sent from my SM-J727V using Tapatalk
  11. Might I suggest something a little better than the stuff that ships with Windows? I use personally. https://www.audacityteam.org/
  12. Browser matters too. Chrome seems to handle this stuff better than Firefox, Internet Explorer, or Edge. Sent from my SM-J727V using Tapatalk
  13. I've had some time to work on this in the past couple of weeks, and my schedule should be opening up some in the coming months. It makes me sad that I haven't had more time to put into this game because it's so fun to write!
  14. Brilliant! Sent from my SM-J727V using Tapatalk
  15. After breaking the 8K ROM barrier, there's been some significant improvements to the map features. Stylistically it needs some work, but technologically I'm pretty happy with the direction things are going. The map is now 2K instead of 512K, but it is almost 4 times larger in scale, and have multiple tile types. https://www.youtube.com/watch?v=hsbV9_Sqiq0&feature=youtu.be
×
×
  • Create New...