Jump to content

Opry99er

Members
  • Posts

    11,064
  • Joined

  • Last visited

  • Days Won

    39

Everything posted by Opry99er

  1. Thanks for watching these. 😊 Some keyboards would have been much better, but I use one of those Fellowes Microban split keyboards with the really spongy keys... and you have push the key down like 3/4 of an inch before it registers a key press. But I got to the Satellites, and that's what matters. Appreciate you, friend.
  2. About to start a live stream of Parsec. My goal is to reach the Killer Satellites. On keyboard... so it may be tough. https://www.youtube.com/watch?v=cS2nKmeR9-g
  3. Thanks for posting, James! This is an hour walkthrough of my first playable Beryl Reichardt demonstration. If you like nerding out on stats, world exploration, and code-- come check out this video.
  4. Just streamed my Beryl Reichardt demo. Please take a look!
  5. I answered this thread in 2017. But back then, Realms of Antiquity was not on the market. That's now my favorite TI game. If you haven't played it, please do. It's sooooooo good.
  6. Wow! That's so cool! I have gotten so far behind, Harry. I will absolutely look into it! It would be so cool to be able to pick this project back up with the compiler in mind. That said, I have another project that I want to use the compiler for. A very special one that I want to get done in the next few months. I have started pulling together my old code and I may have some questions for you... but first, I'll download the most up to date version of the programmer's package and RTFM. Appreciate you, friend.
  7. Oh sweet! Yeah man, I'd be happy to do that. I'm off weekends nowadays, so that would work perfectly.
  8. 😻 Excited!!!!! I think I'll be able to make it this year. Been a few years since I've had weekends off. Looking forward to seeing everyone.
  9. So I haven't posted my most updated code here in probably a decade. I figure it's a good place to put it, as having it just stashed on a hard drive somewhere, etc isn't good for anyone. Going to try to use spoiler tags... don't know if I remember how. [spoiler] REM Beryl Reichardt TIdBiT transfer workstation: REM 3/18/15 // first thing to do is call the link up to load the map data into memory InitLoad-MapData: CALL LDAT PlayerStartup: // Give player a "place to start" // MX and MY are which map in the world are going to be drawn. In this case, it's 1,1 // PX&PY are the players' X location and Y location on the screen // SPX and SPY are the location of the SPRITE corresponding to the character position SPX=(PX-1)*8+1 :: SPY=(PY-1)*8+17 // These are repeated strings. Currently there are only three, but there may be more to come EX$="PRESS ENTER TO EXIT" BS$="BROADSWORD" EXU$="^^^^^^^^^^^^^^^^^^^" // These are Individual statistics for Beryl, Skylar, Reptoslicer, and Markus. // They are now in arrays... For each array, the order is 1) Beryl, 2) Repto, 3) Markus, 4) Skylar // HP is the array for health. HP(1,1) is the max health of Beryl. HP(1,2) is the current health of Beryl // The same goes for MP. NDIS is name display... Starting position and length for each player // ATK,DEFN,MATK,MDEF are used in battle. ARM$,WEP$,STAT$,and CL$ are string variables for armor, weapons, // status, and class. MN is "magic number" or "the number of magics the player can cast" //*****CURRENTLY "FINDING AND REPLACING" ALL OLD VARIABLES WITH NEW ARRAY INFO //*****SO FAR COMPLETE: HP (all), MP (all), XP(all), LEV (all), CL$, NDIS **NEEDS TO BE LOOKED AT //*****ARM$ (all), WEP$ (all), STAT$ (all), MN, CN$ **NEEDS TO BE LOOKED AT LoadPlayers: DIM HP(4,2),MP(4,2),XP(4),LEV(4),CL$(4),NDIS(4,2),ATK(4),DEFN(4),MATK(4),MDEF(4) DIM ARM$(4),WEP$(4),STAT$(4),MN(4),CN$(4),STAT(4) ////////////////////////////////////////// //this is where the user will select the// //game file and it will load based on // //the selection by the player... need to// //implement this ASAP!!!!!!!!!!!!!!!!!! // ////////////////////////////////////////// PullSlot: OPEN #2: "DSK1.TMPLOD",VARIABLE INPUT #2:SLOT CLOSE #2 CheckSlot: ON SLOT GOTO GSL1,GSL2,GSL3 GameSaveLoad: GSL1: OPEN #1:"DSK1.GSL1",VARIABLE GOTO GameSaveLoad2 GSL2: OPEN #1:"DSK1.GSL2",VARIABLE GOTO GameSaveLoad2 GSL3: OPEN #1:"DSK1.GSL3",VARIABLE GOTO GameSaveLoad2 GameSaveLoad2: FOR X=1 TO 4 FOR Y=1 TO 2 INPUT #1:HP(X,Y),MP(X,Y),NDIS(X,Y) NEXT Y NEXT X FOR X=1 TO 4 INPUT #1:XP(X),LEV(X),CL$(X),ATK(X),DEFN(X),MATK(X),MDEF(X),ARM$(X),WEP$(X),STAT$(X),MN(X),CN$(X),STAT(X) NEXT X INPUT #1:GLD,HPO,MPO,ELI,SCR,QSTAT,MX,MY,PX,PY CLOSE #1 Setscreen: // set up screen and border for exploration routines CALL CLEAR CALL SCREEN(2) !black screen SPX=(PX-1)*8+1 :: SPY=(PY-1)*8+17 //Draw Exploration Screen// DrawScreen: CALL HCHAR(9,1,101,32):: CALL HCHAR(24,1,101,32):: CALL VCHAR(9,1,97,16):: CALL VCHAR(9,32,97,16) !border around viewport CALL HCHAR(9,1,98):: CALL HCHAR(9,32,100):: CALL HCHAR(24,1,99):: CALL HCHAR(24,32,96) !corners CALL CHAR(42,"193DD9FFD91924C3"):: CALL COLOR(2,11,2) !CHAR(42) is the little character representation so far... may change soon GOSUB TopInfo //TO DEBUG!!!! Need to STOP the player character from showing up on the opposite side of screen //After a scroll. //****BEGIN GAME LOOP****// TopGameLoop: // This is the very top of the game loop. CALL SETMAP(MX,MY) CALL SPRITE(#1,42,16,SPX,SPY) MidGameLoop: // midpoint for returns from bottom of loop // displays the character on screen based on player position SPX=(PX-1)*8+1 :: SPY=(PY-1)*8+17 CALL LOCATE(#1,SPX,SPY) MidgameLoop-Keyscan: GOSUB Keyscan //upon keypress, up down, left, right checking for tiles in the direction selected //must be a tile below (lower than)CHR$(104) to allow motion //must add 2 to each column to compensate for the DISPLAY/GCHAR offset IF K=69 THEN CALL GCHAR(PX-1,PY+2,Q):: IF Q>105 THEN GOTO MidgameLoop-Keyscan ELSE PX=PX-1 :: GOTO CheckBoundary IF K=83 THEN CALL GCHAR(PX,PY+1,Q):: IF Q>105 THEN GOTO MidgameLoop-Keyscan ELSE PY=PY-1 :: GOTO CheckBoundary IF K=68 THEN CALL GCHAR(PX,PY+3,Q):: IF Q>105 THEN GOTO MidgameLoop-Keyscan ELSE PY=PY+1 :: GOTO CheckBoundary IF K=88 THEN CALL GCHAR(PX+1,PY+2,Q):: IF Q>105 THEN GOTO MidgameLoop-Keyscan ELSE PX=PX+1 :: GOTO CheckBoundary //If M is pressed, goto menu block, if space bar, goto examine block IF K=32 THEN GOSUB Examine IF K=77 THEN GOTO MainMenu GOTO MidgameLoop-Keyscan CheckBoundary: // this determines the boundaries onscreen and sets the map to be drawn by assembly routine // PX, PY are the current player's position on the screen // MX, MY are the designations for which map will be drawn //Need to debug this... the player character can clearly be //seen off the margins before a new map is drawn IF PX<11 THEN PX=22 :: MY=MY-1 :: GOTO CheckMap IF PX>22 THEN PX=11 :: MY=MY+1 :: GOTO CheckMap IF PY<1 THEN PY=28 :: MX=MX-1 :: GOTO CheckMap IF PY>28 THEN PY=1 :: MX=MX+1 :: GOTO CheckMap GOTO MidGameLoop CheckMap: IF MX<1 THEN MX=1 ELSE IF MX>2 THEN MX=2 IF MY<1 THEN MY=1 ELSE IF MY>6 THEN MY=6 CALL DELSPRITE(ALL) SPX=(PX-1)*8+1 :: SPY=(PY-1)*8+17 // copied this from midgameloop to try to squash scroll bug GOTO TopGameLoop //END GAME LOOP!!!!!!!!!!!!// //***SUBROUTINES BELOW***// //BEGIN EXAMINE LOOP// Examine: DISPLAY AT(1,1):" ":" ":" ":" ":" ":" ":" ":" " DISPLAY AT(1,1):"WHICH DIRECTION?"; ExamineKeyscan: GOSUB Keyscan IF K=69 THEN CALL GCHAR(PX-1,PY+2,Q):: GOSUB ExamineCheck :: RETURN IF K=83 THEN CALL GCHAR(PX,PY+1,Q):: GOSUB ExamineCheck :: RETURN IF K=68 THEN CALL GCHAR(PX,PY+3,Q):: GOSUB ExamineCheck :: RETURN IF K=88 THEN CALL GCHAR(PX+1,PY+2,Q):: GOSUB ExamineCheck :: RETURN GOTO ExamineKeyscan ExamineCheck: //This is the "YES" or "correct tile, IS an item" bit IF Q=111 THEN GOSUB CaveExam IF Q=113 THEN GOSUB CrossExam IF Q=115 THEN GOSUB BroadExam IF Q=118 THEN GOSUB KeyExam IF Q=119 THEN GOSUB ChestExam IF Q=120 THEN GOSUB ObeliskExam IF Q=121 THEN GOSUB ObeliskExam //This is the "NO" or "incorrect tile, is not an item" bit DISPLAY AT(1,1):" " :: GOSUB TopInfo :: RETURN CaveExam: IF MY=2 THEN GOSUB CaveWinds IF MY>2 THEN GOSUB CaveShelter CaveWinds: IF GTIN<1 THEN DISPLAY AT(1,1):"WEAR THEE NOT A GILDED":"RING UPON THY BROW?"; :: GOSUB Keyscan :: RETURN CALL CLEAR :: CALL DELSPRITE(ALL) :: GOSUB CallDrag :: CALL MAGNIFY(3) CALL SPRITE(#1,132,9,161,60,#2,136,3,161,96,#3,124,5,161,132,#4,128,14,161,168) CALL SPRITE(#5,140,16,28,114) DISPLAY AT(7,1):"CAVE OF THE WINDS"; DISPLAY AT(9,1):"THE PARTY HAS OBTAINED";:"THE SCROLL OF THE ANCIENTS"; DISPLAY AT(11,1):"AND HELD COUNCIL WITH";:"ANIFAX THE WHITE DRAGON..." SCRANC=1 :: QSTAT=2 :: GOSUB ReturnString WindsKeyscan: GOSUB Keyscan IF K=13 THEN CALL CLEAR :: CALL DELSPRITE(ALL) :: CALL MAGNIFY(1) :: GOTO DrawScreen GOTO WindsKeyscan RETURN CaveShelter: CALL CLEAR :: CALL DELSPRITE(ALL) :: GOSUB CallKeeper :: CALL MAGNIFY(3) CALL SPRITE(#1,132,9,161,60,#2,136,3,161,96,#3,124,5,161,132,#4,128,14,161,168) DISPLAY AT(4,1):" HIDDEN CAVE SHELTER";:" ":"1) SEEK COUNCIL";:"2) BARTER"; DISPLAY AT(8,1):"3) SAVE GAME"; GOSUB ReturnString ShelterKeyscan: GOSUB Keyscan IF K=13 THEN CALL CLEAR :: CALL DELSPRITE(ALL) :: CALL MAGNIFY(1) :: GOTO DrawScreen ON K-48 GOSUB Council,Barter,SaveGame GOTO CaveShelter RETURN Council: CALL CLEAR :: CALL SPRITE(#5,140,16,28,114) IF QSTAT=0 THEN COUNCIL=0 :: GOTO DiskPrint COUNCIL=QSTAT*10+QSTAT DiskPrint: OPEN #1:"DSK1.FTX",RELATIVE,INTERNAL FOR TXLOC=7 TO 17 INPUT #1,REC COUNCIL:TX$ DISPLAY AT(TXLOC,1):TX$ COUNCIL=COUNCIL+1 NEXT TXLOC CLOSE #1 CouncilEnd: GOSUB Keyscan IF K=13 THEN GOTO CaveShelter GOTO CouncilEnd Barter: CALL CLEAR :: DISPLAY AT(7,:"BARTER" DISPLAY AT(8,:"^^^^^^" GOSUB ReturnString BarterKeyscan: GOSUB Keyscan IF K=13 THEN GOTO CaveShelter GOTO BarterKeyscan RETURN SaveGame: CALL CLEAR GOSUB SaveGame2 RETURN CrossExam: IF MX=1 THEN GOSUB GraveKings :: RETURN IF MX=2 THEN GOSUB ExitWorld :: RETURN GraveKings: IF SCRANC<1 THEN DISPLAY AT(1,1):"AN OLD GRAVE..." :: GOSUB Keyscan :: RETURN CALL CLEAR :: CALL DELSPRITE(ALL) SCRPAS=1 :: HOK=1 DISPLAY AT(4,1):"GRAVE OF THE KINGS...";:"THE PARTY HAS OBTAINED";:"THE SCROLL OF PASSAGE"; DISPLAY AT(8,1):"AND HELD COUNCIL WITH";:"BERYL REICHARDT I"; DISPLAY AT(11,1):"BERYL HAS ALSO BEEN GIVEN";:"THE HALBERD OF KINGS"; :: QSTAT=3 GOSUB ReturnString GraveKeyscan: GOSUB Keyscan IF K=13 THEN CALL CLEAR :: GOTO DrawScreen GOTO GraveKeyscan RETURN ExitWorld: IF WRINGS<1 THEN DISPLAY AT(1,1):"A MOUNTAIN PASS--":"BLOCKED BY EVIL..."; :: GOSUB Keyscan :: RETURN CALL CLEAR :: CALL DELSPRITE(ALL) DISPLAY AT(4,1):"YOU HAVE DONE WELL, BERYL";:"BY DEFEATING THE SOUL REAVER"; DISPLAY AT(6,1):"AND RECOVERING THE RINGS";:"OF WOOLDRIDGE..."; DISPLAY AT(11,1):"THE DEMO IS OVER...";:"PRESS FCTN-4 TO QUIT..." EndDemo: GOTO EndDemo RETURN BroadExam: IF BIT=1 THEN DISPLAY AT(1,1):"AN IMPRESSION OF A SWORD":"ON THE GROUND..." :: GOSUB Keyscan :: RETURN DISPLAY AT(1,1):"YOU FOUND A BROADSWORD":"ADD TO INVENTORY(Y/N)"; MidBroadKeyscan: GOSUB Keyscan IF K=89 THEN BIT=1 :: BIN=1 :: DISPLAY AT(1,1):" ":" " :: RETURN IF K=78 THEN DISPLAY AT(1,1):" ":" " :: RETURN GOTO MidBroadKeyscan RETURN KeyExam: IF KIT=1 THEN DISPLAY AT(1,1):"AN IMPRESSION OF A KEY":"ON THE GROUND..."; :: GOSUB Keyscan :: RETURN DISPLAY AT(1,1):"YOU FOUND A KEY":"ADD TO INVENTORY(Y/N)"; MidKeyKeyscan: GOSUB Keyscan IF K=89 THEN KIT=1 :: KIN=1 :: CSTAT=2 :: DISPLAY AT(1,1):" ":" " :: RETURN IF K=78 THEN DISPLAY AT(1,1):" ":" " :: RETURN GOTO MidKeyKeyscan ChestExam: IF CSTAT<2 THEN DISPLAY AT(1,1):"DO YOU NEED A KEY":"TO OPEN A CHEST?"; :: GOSUB Keyscan :: RETURN IF CSTAT=2 THEN DISPLAY AT(1,1):"CHEST HAS BEEN UNLOCKED!!"; :: CSTAT=3 :: GOSUB Keyscan :: RETURN IF CSTAT=3 THEN DISPLAY AT(1,1):"YOU HAVE FOUND":"THE GOLDEN TIARA!!"; :: CSTAT=4 :: GOSUB TiaraGet :: RETURN IF CSTAT=4 THEN DISPLAY AT(1,1):"YOU HAVE FOUND 100 GOLD!!"; :: CSTAT=5 :: GOSUB Keyscan :: RETURN IF CSTAT=5 THEN DISPLAY AT(1,1):"THE CHEST IS EMPTY..."; :: GOSUB Keyscan :: RETURN ObeliskExam: IF SCRPAS<1 THEN DISPLAY AT(1,1):"THE PASSAGE IS BLOCKED...";:"SEEK THEE A SCROLL..." :: GOSUB Keyscan :: RETURN DISPLAY AT(1,1):"THE OBELISK IS OPEN...";:"DO YOU WISH TO ENTER? (Y/N)"; ObeliskKeyscan: GOSUB Keyscan IF K=89 THEN GOSUB ObeliskEnter IF K=78 THEN DISPLAY AT(1,1):" ":" " :: RETURN GOTO ObeliskKeyscan ObeliskEnter: CALL CLEAR :: CALL DELSPRITE(ALL) :: CALL MAGNIFY(3) CALL SPRITE(#1,132,9,161,60,#2,136,3,161,96,#3,124,5,161,132,#4,128,14,161,168) DISPLAY AT(4,1):"HERE THE PARTY BATTLES";:"THE SOUL REAVER FOR THE"; DISPLAY AT(6,1):"RINGS OF WOOLDRIDGE":" ":" ":"PARTY HAS OBTAINED THE":"RINGS OF WOOLDRIDGE" WRINGS=1 :: QSTAT=4 :: GOSUB ReturnString ObeliskEnterKeyscan: GOSUB Keyscan IF K=13 THEN CALL CLEAR :: CALL DELSPRITE(ALL) :: CALL MAGNIFY(1) :: GOTO DrawScreen GOTO ObeliskEnterKeyscan RETURN TiaraGet: GTIN=1 :: QSTAT=1 :: GOSUB Keyscan :: RETURN //////////////////// //BEGIN MENU BLOCK// //////////////////// MainMenu: REM MENU CALL CLEAR :: CALL SCREEN(2):: CALL DELSPRITE(ALL) CALL HCHAR(5,1,101,32):: CALL HCHAR(22,1,101,32):: CALL VCHAR(5,1,97,17):: CALL VCHAR(5,32,97,17) CALL HCHAR(5,1,98):: CALL HCHAR(5,32,100):: CALL HCHAR(22,1,99):: CALL HCHAR(22,32,96) MainMenu-MiddleReturn: GOSUB ClearMenu :: GOSUB ReturnString DISPLAY AT(1,14):"MENU";:: DISPLAY AT(2,14):"^^^^" DISPLAY AT(8,1):"1) ITEMS":"2) ARMOR":"3) WEAPONS":"4) SPELLS":"5) STATUS"; MidMenu-Keyscan: GOSUB Keyscan IF K=13 THEN CALL CLEAR :: GOTO DrawScreen !**BUG FIXED HERE** Case-sensitive labels IF K>54 THEN GOTO MidMenu-Keyscan ELSE IF K<49 THEN GOTO MidMenu-Keyscan ON K-48 GOTO ItemMenu,ArmorMenu,WeaponsMenu,SpellsMenu,StatusMenu //BEGIN Item Menu// ***NEED TO CONVERT THIS TO ELIMINATE "ACTIVExxx SUBS, USING NEW ARRAYS" ItemMenu: REM ITEM MENU GOSUB ClearMenu DISPLAY AT(1,12):"ITEMS";:: DISPLAY AT(2,12):"^^^^^" :: GOSUB ReturnString DISPLAY AT(8,1):"USE ON WHICH CHARACTER?";:"1) BERYL";:"2) REPTOSLICER";:"3) MARKUS";:"4) SKYLAR"; MidItem-Keyscan: GOSUB Keyscan IF K=13 THEN GOTO MainMenu-MiddleReturn IF K>52 THEN GOTO MidItem-Keyscan ELSE IF K<49 THEN GOTO MidItem-Keyscan P=K-48 :: GOSUB ItemMenu2 GOTO ItemMenu //***MAY NEED TO DEBUG HERE (ITEM MENU)... MAJOR RESTRUCTURE JUST COMPLETED (5/4/15) REM **THIS IS THE MEAT OF THE ITEM MENU CODE** ItemMenu2: //Must get the NDIS variable set put in place here// GOSUB ClearMenu :: DISPLAY AT(1,NDIS(P,1)):CN$(P);:: CALL HCHAR(2,(NDIS(P,1))+2,94,NDIS(P,2)) GOSUB ReturnString ItemDisplay: DISPLAY AT(8,1):"1) POTION";HPO;:"2) ETHER";MPO;:"3) ELIXIR";ELI; DISPLAY AT(3,1):"HP:";HP(P,2);"/";HP(P,1);:: DISPLAY AT(3,16):"MP:";MP(P,2);"/";MP(P,1); MidItem2-Keyscan: GOSUB Keyscan IF K=13 THEN RETURN IF K>51 THEN GOTO MidItem2-Keyscan ELSE IF K<49 THEN GOTO MidItem2-Keyscan ON K-48 GOSUB HealthPotion,MagicPotion,Elixir RETURN //Use HealthPotion// HealthPotion: IF HPO<1 THEN CALL SOUND(30,440,1):: HPO=0 :: GOTO ItemDisplay HPO=HPO-1 :: HP(P,2)=HP(P,2)+10 :: IF HP(P,2)>HP(P,1) THEN HP(P,2)=HP(P,1) GOSUB Flash GOTO ItemDisplay //used to be a "RETURN" here... changed to GOTO to facilitate multicasts RETURN //Use MagicPotion// MagicPotion: IF MPO<1 THEN CALL SOUND(30,440,1):: MPO=0 :: GOTO ItemDisplay MPO=MPO-1 :: MP(P,2)=MP(P,2)+10 :: IF MP(P,2)>MP(P,1) THEN MP(P,2)=MP(P,1) GOSUB Flash GOTO ItemDisplay //used to be a "RETURN" here... changed to GOTO to facilitate multicasts RETURN //Use Elixir// Elixir: IF ELI<1 THEN CALL SOUND(30,440,1):: ELI=0 :: GOTO ItemDisplay ELI=ELI-1 :: HP(P,2)=HP(P,2)+5 :: IF HP(P,2)>HP(P,1) THEN HP(P,2)=HP(P,1) MP(P,2)=MP(P,2)+5 :: IF MP(P,2)>MP(P,1) THEN MP(P,2)=MP(P,1) GOSUB Flash GOTO ItemDisplay //used to be a "RETURN" here... changed to GOTO to facilitate multicasts RETURN //END Item Menu// //////////////////////////////////////////////// // ARMOR AND WEAPONS MENUS NOT YET COMPLETE // //////////////////////////////////////////////// //BEGIN Armor Menu// ArmorMenu: REM ARMOR MENU GOSUB ClearMenu :: DISPLAY AT(1,12):"ARMOR";:: DISPLAY AT(2,12):"^^^^^" :: GOSUB ReturnString MidArmor-Keyscan: GOSUB Keyscan IF K=13 THEN GOTO MainMenu-MiddleReturn ELSE GOTO MidArmor-Keyscan GOSUB ClearMenu //END Armor Menu// //BEGIN Weapons Menu// WeaponsMenu: REM WEAPONS MENU GOSUB ClearMenu :: DISPLAY AT(1,11):"WEAPONS";:: DISPLAY AT(2,11):"^^^^^^^" :: GOSUB ReturnString MidWeapons-Keyscan: GOSUB Keyscan IF K=13 THEN GOTO MainMenu-MiddleReturn ELSE GOTO MidWeapons-Keyscan GOSUB ClearMenu //END Weapons Menu// //BEGIN Spells Menu// //////////////////////////////////////////////////////////////////////////////////////////////////// //SpellsMenu... this is a BIG one.... Need to have the ability to select WHO WILL CAST the magic/// //WHO WILL RECEIVE the magic, then display HP and MHP of receiver, MP and MMP of caster // //then animate the spell, display stat changes on both, then return to top of SpellsMenu. // //////////////////////////////////////////////////////////////////////////////////////////////////// SpellsMenu: REM SPELLS MENU GOSUB ClearMenu DISPLAY AT(1,12):"SPELLS";:: DISPLAY AT(2,12):"^^^^^^" :: GOSUB ReturnString DISPLAY AT(8,1):"WHO WILL CAST?";:"1) BERYL";:"2) REPTOSLICER";:"3) MARKUS";:"4) SKYLAR"; MidSpells-Keyscan: GOSUB Keyscan IF K=13 THEN GOTO MainMenu-MiddleReturn IF K>52 THEN GOTO MidSpells-Keyscan ELSE IF K<49 THEN GOTO MidSpells-Keyscan C=K-48 :: GOSUB SpellsMenu2 GOTO SpellsMenu SpellsMenu2: //Display Caster's info at the top of the screen// GOSUB ClearMenu :: DISPLAY AT(1,NDIS(C,1)):CN$(C);:: CALL HCHAR(2,NDIS(C,1)+2,94,NDIS(C,2)) DISPLAY AT(3,1):"HP:";HP(C,2);"/";HP(C,1);:: DISPLAY AT(3,16):"MP:";MP(C,2);"/";MP(C,1); GOSUB ReturnString IF MN(C)=0 THEN DISPLAY AT(17,1):"THIS MEMBER CANNOT CAST" :: GOSUB Keyscan :: GOTO SpellsMenu DISPLAY AT(8,1):"CAST ON WHICH PARTY MEMBER?";:"1) BERYL";:"2) REPTOSLICER";:"3) MARKUS";:"4) SKYLAR"; MidSpells-Keyscan2: GOSUB Keyscan IF K=13 THEN GOTO SpellsMenu IF K>52 THEN GOTO MidSpells-Keyscan2 ELSE IF K<49 THEN GOTO MidSpells-Keyscan2 R=K-48 :: GOSUB SpellsMenu3 GOTO SpellsMenu SpellsMenu3: //this part loads the "RP" temporary variable set (receiver) with the info from the "A" temporary variable set (active) GOSUB ClearBox //Display Receiver's Name and stats INSIDE the box/ DISPLAY AT(8,NDIS(R,1)):CN$(R);:: CALL HCHAR(9,NDIS(R,1)+2,94,NDIS(R,2)) DISPLAY AT(10,1):"HP:";HP(R,2);"/";HP(R,1);:: DISPLAY AT(10,16):"MP:";MP(R,2);"/";MP(R,1); DISPLAY AT(12,1):"CAST WHICH SPELL?" FinalCast: DISPLAY AT(15,1):" " RESTORE SpellTypes FOR I=16 TO MN(C)+15 READ TX$ DISPLAY AT(I,1):TX$; NEXT I FinalCastKeyscan: GOSUB Keyscan IF K=13 THEN RETURN IF K>MN(C)+48 THEN GOTO FinalCastKeyscan ELSE IF K<49 THEN GOTO FinalCastKeyscan ON K-48 GOSUB HealSpell,CureSpell,LifeSpell GOTO FinalCast ////////////////////////////////////////////////////////////////////// //**Need to add status flag for "Healthy" "Poisoned" and "Fallen" // //**As of now, Cure and Life do not do all that they WILL do once // //**this is implemented fully. Cure will heal "Poisoned" and change// //**status flag to "Healthy," Life will change status from "Fallen" // //**To "Healthy" and will allow "Heal" magic to raise HP. // ////////////////////////////////////////////////////////////////////// HealSpell: IF MP(C,2)<10 THEN GOSUB ClearBox :: DISPLAY AT(15,1):"NOT ENOUGH MP"; :: GOSUB Keyscan :: GOTO SpellsMenu IF HP(R,2)<1 THEN GOSUB ClearBox :: DISPLAY AT(15,1):"MEMBER IS FALLEN"; :: GOSUB Keyscan :: RETURN ///WEIRD BUG HERE.... CLASSIC99 KICKS OUT SYNTAX ERROR IN THE FOLLOWING LINE... TI SEEMS TO ERASE THE SPACE AFTER /// MP(C,2)=MP(C,2)-10 :: HP(R,2)=HP(R,2)+10 :: IF HP(R,2)>HP(R,1) THEN HP(R,2)=HP(R,1) GOSUB SpellResult RETURN //This will also change the status flag to "Healthy" once that part is complete CureSpell: IF MP(C,2)<15 THEN GOSUB ClearBox :: DISPLAY AT(15,1):"NOT ENOUGH MP"; :: GOSUB Keyscan :: GOTO SpellsMenu MP(C,2)=MP(C,2)-15 :: STAT(R)=1 :: STAT$(R)="HEALTHY" GOSUB SpellResult RETURN //Still Need to add status flag for "Healthy" "Poisoned" and "Fallen" LifeSpell: IF MP(C,2)<20 THEN GOSUB ClearBox :: DISPLAY AT(15,1):"NOT ENOUGH MP"; :: GOSUB Keyscan :: GOTO SpellsMenu MP(C,2)=MP(C,2)-20 :: IF HP(R,2)<1 THEN HP(R,2)=1 :: STAT(R)=1 :: STAT$(R)="HEALTHY :: "GOTO LifeSpellEnd HP(R,2)=HP(R,1) LifeSpellEnd: GOSUB SpellResult RETURN SpellResult: ///**bug**////// //////////////// //when casting// //on ones self// //RP is not // //updated when// //spell is cast/ //////////////// ////**bug**///// DISPLAY AT(3,1):" " DISPLAY AT(3,1):"HP:";HP(C,2);"/";HP(C,1);:: DISPLAY AT(3,16):"MP:";MP(C,2);"/";MP(C,1); DISPLAY AT(8,1):" ":" ":" " DISPLAY AT(8,NDIS(R,1)):CN$(R);:: CALL HCHAR(9,NDIS(R,1)+2,94,NDIS(R,2)) DISPLAY AT(10,1):"HP:";HP(R,2);"/";HP(R,1);:: DISPLAY AT(10,16):"MP:";MP(R,2);"/";MP(R,1); GOSUB Flash CALL SOUND(50,330,1) :: CALL SOUND(50,494,1) :: CALL SOUND(100,1319,0,494,10,330,10) RETURN /////////////////// //END Spells Menu// /////////////////// StatusMenu: CALL DELSPRITE(ALL) GOSUB ClearMenu :: DISPLAY AT(1,12):"STATUS";:: DISPLAY AT(2,12):"^^^^^^" :: GOSUB ReturnString DISPLAY AT(8,1):"WHICH CHARACTER?";:"1) BERYL";:"2) REPTOSLICER";:"3) MARKUS";:"4) SKYLAR"; CALL MAGNIFY(1) MidStatus-Keyscan: GOSUB Keyscan IF K=13 THEN GOTO MainMenu-MiddleReturn IF K>52 THEN GOTO MidStatus-Keyscan ELSE IF K<49 THEN GOTO MidStatus-Keyscan GOSUB ClearBox P=K-48 :: ON P GOSUB StatusBeryl,StatusRepto,StatusMarkus,StatusSkylar GOTO StatusMenu /////////////////////////////////////////////////////////////////////////////////// //In the Statusxxx section, the program displays the character's name, underlines// //it, draws the character's likeness onscreen with a SPRITE, then branches to // //StatusDisplay, where the character's data will be displayed onscreen as well // /////////////////////////////////////////////////////////////////////////////////// StatusBeryl: DISPLAY AT(7,7):"BERYL REICHARDT";:: DISPLAY AT(8,7):"^^^^^^^^^^^^^^^" CALL MAGNIFY(3) :: CALL SPRITE(#1,132,9,120,200) GOSUB StatusDisplay RETURN StatusRepto: DISPLAY AT(7,9):"REPTOSLICER";:: DISPLAY AT(8,9):"^^^^^^^^^^^" CALL MAGNIFY(3) :: CALL SPRITE(#1,136,3,120,200) GOSUB StatusDisplay RETURN StatusMarkus: DISPLAY AT(7,5):"MARKUS THE VALIANT";:: DISPLAY AT(8,5):"^^^^^^^^^^^^^^^^^^" CALL MAGNIFY(3) :: CALL SPRITE(#1,124,5,120,200) GOSUB StatusDisplay RETURN StatusSkylar: DISPLAY AT(7,7):"SKYLAR TWILIGHT";:: DISPLAY AT(8,7):"^^^^^^^^^^^^^^^" CALL MAGNIFY(3) :: CALL SPRITE(#1,128,14,120,200) GOSUB StatusDisplay RETURN //***STILL WORKING ON THIS, NEXT IMPLEMENT WEP$ FOR EACH CHARACTER FOR DISPLAY, StatusDisplay: NXLV=(50-XP(P)) DISPLAY AT(9,2):"CLASS:"&CL$(P); :: DISPLAY AT(9,19):"LEVEL:"&STR$(LEV(P)); DISPLAY AT(11,2):"HP:"&STR$(HP(P,2))&"/"&STR$(HP(P,1)); :: DISPLAY AT(11,19):"MP:"&STR$(MP(P,2))&"/"&STR$(MP(P,1)); DISPLAY AT(14,2):"STATUS:"&STAT$(P) :: DISPLAY AT(14,19):"EXP:"&STR$(XP(P)) DISPLAY AT(16,2):"ARMOR:"&ARM$(P) :: DISPLAY AT(18,2):"WEAPON:"&WEP$(P) DISPLAY AT(20,6):"NEXT LEVEL:"&STR$(NXLV);" EXP" MidStatus-Keyscan2: GOSUB Keyscan IF K=13 THEN GOTO StatusMenu ELSE GOTO MidStatus-Keyscan2 RETURN //BELOW// //SaveGame2 needs to allow for a "select slot" feature and the "OPEN" statement to //reflect the choice of the user. Playdata2 will change based on the user's selection} SaveGame2: GOSUB ClearBox DISPLAY AT(10,4):"SAVE TO WHICH SLOT?":" (1-3)" KeySaveCheck: CALL KEY(0,K,S):: IF S=0 THEN GOTO KeySaveCheck: IF K<49 THEN GOTO KeySaveCheck ELSE IF K>51 THEN GOTO KeySaveCheck SLOT=K-48 :: CALL CLEAR :: DISPLAY AT(10,11):"SAVING..."; :: ON SLOT GOTO SAV1,SAV2,SAV3 SAV1: OPEN #1:"DSK1.GSL1",VARIABLE :: GOTO FinSave SAV2: OPEN #1:"DSK1.GSL2",VARIABLE :: GOTO FinSave SAV3: OPEN #1:"DSK1.GSL3",VARIABLE :: GOTO FinSave FinSave: FOR X=1 TO 4 FOR Y=1 TO 2 PRINT #1:HP(X,Y):MP(X,Y):NDIS(X,Y) NEXT Y NEXT X FOR X=1 TO 4 PRINT #1:XP(X):LEV(X):CL$(X):ATK(X):DEFN(X):MATK(X):MDEF(X):ARM$(X):WEP$(X):STAT$(X):MN(X):CN$(X):STAT(X) NEXT X PRINT #1:GLD:HPO:MPO:ELI:SCR:QSTAT:MX:MY:PX:PY CLOSE #1 GOSUB ClearBox DISPLAY AT(10,:"SAVE COMPLETE..." GOSUB ReturnString GOSUB Keyscan RETURN ClearMenu: REM CLEAR MENU INFO DISPLAY AT(1,1):" ":" ":" " :: DISPLAY AT(23,1):" ":" " ClearBox: DISPLAY AT(7,1):" ":" ":" ":" ":" ":" ":" ":" ":" ":" ":" ":" ":" ":" " RETURN //ReturnString// ReturnString: REM MENU RETURN GAME STRING DISPLAY AT(23,5):EX$;:: DISPLAY AT(24,5):EXU$; RETURN TopInfo: //this displays all necessary information at the top of the screen during gameplay DISPLAY AT(1,9):"FORESTIA" DISPLAY AT(2,1):"BERYL":"HP:";HP(1,2):"MP:";MP(1,2) :: DISPLAY AT(2,9):"^^^^^^^^"; DISPLAY AT(2,18):"REPTOSLICER" :: DISPLAY AT(3,18):"HP:";HP(2,2) :: DISPLAY AT(4,18):"MP:";MP(2,2) DISPLAY AT(6,1):"SKYLAR":"HP:";HP(4,2):"MP:";MP(4,2) DISPLAY AT(6,18):"MARKUS" :: DISPLAY AT(7,18):"HP:";HP(3,2) :: DISPLAY AT(8,18):"MP:";MP(3,2) RETURN Keyscan: CALL KEY(0,K,S):: IF S=0 THEN Keyscan RETURN Flash: CALL SCREEN(16):: FOR I=1 TO 20 :: NEXT I :: CALL SCREEN(2) :: RETURN CallDrag: CALL CHAR(140,"72E9B5DCBE46BF7F7C7F3F007FFFC07F4020B8EF787FC0C000F8FC2EDEFC01FE") RETURN CallKeeper: CALL CHAR(140,"0707081030705046304D93A1783E7F42E0E010080C0E0A620CB2C9851E7CFE42") RETURN Delay: FOR I=1 TO 800 :: NEXT I :: RETURN SpellTypes: DATA 1) HEAL (10 MP) DATA 2) CURE (15 MP) DATA 3) LIFE (20 MP) //SUB LDAT// REM **SUB TO CALL THE ASSEMBLY ROUTINE TO LOAD MAP INTO MEMORY** SUB LDAT CALL INIT CALL LOAD("DSK1.NEWFORO") SUBEND //SUB SETMAP// REM **SUB TO DRAW THE MAP ONSCREEN** SUB SETMAP(MX,MY) X=MX :: Y=MY IF ADR<>0 THEN MidSetmap-Check CALL PEEK(16382,P,Q) ADR=P*256+Q+2 CALL LOAD(ADR+6,0,0) MidSetmap-Check: Y=Y-1 :: MAP=Y*2+X IF MAP<1 OR MAP>12 THEN SUBEXIT CALL LOAD(ADR,0,MAP) CALL LINK("DRAW") SUBEND //GAME END// [/spoiler]
  10. Thanks for that. Yeah, I don't think I've ever put a release date on this game. But it'll be somewhere between 2024 and 3024. There are some really cool updates I've made... I played through this game a little bit yesterday to reacquaint myself with the quest. It's funny how much I had forgotten. But it works... you can play through the whole world, start to finish... obtaining necessary quest items to enter blocked areas, etc. The menu is probably my favorite part of this game so far. It sounds like such a simple and frivolous thing to be proud of, but it turned out exactly as I had hoped, and I found myself neglecting the quest and just healing my party members and checking their status, etc. Saturday I'll do a walkthrough stream and post it both to this thread and to the live stream thread. I need to go into the basement and find my big box of Beryl stuff. I have a big thick folder with the novella, maps, old code, SPRITE definitions, etc. I even have the original dot matrix printout from the Asgard TOD editor campaign I made in 2008 or 2009. Thanks for the interest, friend. If I can find that big Beryl folder, I'll do a stream Saturday. I'd love to show all that stuff if I can find it.
  11. Sweet!!! I've watched most of yours so far. Your streams inspired me to start doing it myself!
  12. So I was thinking... I do live streams for the TI, so does @arcadeshopper and I think @pixelpedant does as well. If I'm forgetting some streamers, forgive me. Live streaming is a really fun way to interact with other 99ers and see games and applications you maybe haven't seen or haven't seen in a while. I thought I'd start a thread here to have a place for us to post our live streams... either archived ones or ones that are upcoming. When you set up a live stream on YouTube, it gives you a link so you can share... I intend on posting to this thread whenever I go live, so if anyone here wants to join in and chat with me while I play TI games or do programming stuff live, you'll be able to click and hop on. I encourage others who stream to post here as well. We have a very vibrant community, and I'd love to see some of you all join in a stream! As an example of what some of my Live Streams look like, I'll post a few links here to some of my recent streams.
  13. Hmm... If there's any interest, I'll make a video stream showing all the progress (very little) I've made in the last 5 years on this project. You can now save a game, load a game, go through the entire first world quest (without enemies, of course) and exit the first world--heading to the second. I won't be disappointed if there's little-to-no interest. Vaporware is frustrating and dumb.
  14. Thanks for keeping up with it! Sorry for the lack of development... as Realms of Antiquity has blown my mind beyond belief, I am seeing less and less of a need for Beryl Reichardt to be completed... but they are very different projects, so there may be some value in picking this up again. Appreciate you!
  15. I think I'll make it a crossover. "Beryl Reichardt and the Neverending Story." The southern oracle is 10,000 miles away. And so is the release date of this game.
  16. Al, I just wanted to say thank you for all the years of moderation and facilitation. Having been here on this forum for over a decade, I can honestly say I've never been a part of a more well-run forum. Your care, attention to detail, and level-headedness have been infectious, and our little TI-99 community is stronger for your efforts.
  17. Awesome, man!!! Can't wait to give it a go! I'm so far behind... there are so many programs and hardware pieces and everything that are 'new' since I last logged in. I have hours of reading to catch up on. So glad you're still making games, man. You've got a great eye for game development, and your contributions to the community are invaluable.
  18. LoL. Yeah, I don't know how much I'll be able to contribute, as these days I have so much going on--however I have been playing some TI stuff live on stream. Will continue doing that for sure! It's not much of a contribution, but it feels good playing the silver and black again.
×
×
  • Create New...