Opry99er Posted November 13, 2019 Author Share Posted November 13, 2019 This is a test to see if I can still attach pictures here. I am trying to download all 50,000,000,000 pictures I've uploaded to Photobucket over the years so I can cancel my account... All the pictures in this thread over the last 10 years are being held hostage and can't be viewed... I refuse to pay whatever ridiculous amount they're asking just so people can see my pictures. Had I known they were going to change their identity from what the original intent of the service was, I wouldn't have used them for so many years. Anyway, if all goes well, I will start re-uploading the relevant pictures to the thread here so there is some visual context to the information in the posts. 6 Quote Link to comment Share on other sites More sharing options...
GDMike Posted November 15, 2019 Share Posted November 15, 2019 Yup that's a prob..I like to run my own server, my own files, my own email server, etc... Quote Link to comment Share on other sites More sharing options...
jrhodes Posted May 22, 2022 Share Posted May 22, 2022 I didn't feel like reading through 42 pages of this thread, so forgive me for that. I have a TI .dsk file (attached below) named TODBER.dsk which appears to be a TOD quest. @Opry99er Is this TOD quest considered finished, or is this just a work-in-progress that you ditched in favor of a stand-alone rpg? TODBER.DSK 3 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 7, 2023 Author Share Posted September 7, 2023 On 5/22/2022 at 9:20 AM, jrhodes said: I didn't feel like reading through 42 pages of this thread, so forgive me for that. I have a TI .dsk file (attached below) named TODBER.dsk which appears to be a TOD quest. @Opry99er Is this TOD quest considered finished, or is this just a work-in-progress that you ditched in favor of a stand-alone rpg? TODBER.DSK 180 kB · 26 downloads Hey jrhodes. This was the original idea for the game... a TOD adventure with my customized sprites and story. But it was not what I wanted. The scaling in that particular game is terrible... fighting high level monsters on level 1, etc... I ended up just scrapping it and shooting for a standalone game... And here we are 13 years later, with no standalone game and a grossly neglected ToD adventure. 5 Quote Link to comment Share on other sites More sharing options...
Hakogame 箱亀 Posted September 8, 2023 Share Posted September 8, 2023 I've been peeking in every once in a while over the last decade to see if any progress has happened with this game. I hope you continue with development at some point, but I do understand how life happens and interests shift over time. Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted September 8, 2023 Share Posted September 8, 2023 I hear it is getting a rebrand as "Beryl Reichardt Forever." ::runs and hides:: 2 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 9, 2023 Author Share Posted September 9, 2023 4 hours ago, OLD CS1 said: I hear it is getting a rebrand as "Beryl Reichardt Forever." ::runs and hides:: 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. 1 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 9, 2023 Author Share Posted September 9, 2023 4 hours ago, Hakogame 箱亀 said: I've been peeking in every once in a while over the last decade to see if any progress has happened with this game. I hope you continue with development at some point, but I do understand how life happens and interests shift over time. 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! 4 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted September 9, 2023 Share Posted September 9, 2023 19 hours ago, Opry99er said: 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! There is always need for different takes on similar projects--just like most of us on this forum are different takes on the concept of sanity. I'm so far out in the ozone that I have to lunge just to capture the random single molecules in my immediate vicinity to continue breathing. . . Beryl must live! 2 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted September 9, 2023 Share Posted September 9, 2023 46 minutes ago, Ksarul said: Beryl must live! YES! Beryl Forever!! Quote Link to comment Share on other sites More sharing options...
RickyDean Posted September 10, 2023 Share Posted September 10, 2023 https://youtu.be/S85parZ5lII?si=XwvSQZBS8jd8JU_L 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 12, 2023 Author Share Posted September 12, 2023 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. 2 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted September 13, 2023 Share Posted September 13, 2023 1 hour ago, Opry99er said: 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. if you built it, he will come.mp4 1 3 Quote Link to comment Share on other sites More sharing options...
+FarmerPotato Posted September 14, 2023 Share Posted September 14, 2023 On 9/12/2023 at 5:45 PM, Opry99er said: I won't be disappointed if there's little-to-no interest. Vaporware is frustrating and dumb. It's not vaporware unless you promise "releasing soon!" I'd love to see work in progress: graphics, animation, scenery. You can do a walkthrough narrative. 2 Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted September 14, 2023 Share Posted September 14, 2023 (edited) On 9/8/2023 at 9:30 PM, Opry99er said: The southern oracle is 10,000 miles away. And so is the release date of this game. You need a luck dragon, or a fire mare, to cover such distances. fire mares!.mp4 Edited September 14, 2023 by OLD CS1 Did not have my clip handy... 2 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 14, 2023 Author Share Posted September 14, 2023 1 hour ago, FarmerPotato said: It's not vaporware unless you promise "releasing soon!" I'd love to see work in progress: graphics, animation, scenery. You can do a walkthrough narrative. 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. 3 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 14, 2023 Author Share Posted September 14, 2023 (edited) 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] Edited September 14, 2023 by Opry99er 2 Quote Link to comment Share on other sites More sharing options...
+DuaneAL Posted September 14, 2023 Share Posted September 14, 2023 On 9/12/2023 at 6:45 PM, Opry99er said: 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. Color me as interested.🙂 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 14, 2023 Author Share Posted September 14, 2023 39 minutes ago, DuaneAL said: Color me as interested.🙂 Noted! Thank you for the interest! Quote Link to comment Share on other sites More sharing options...
+FarmerPotato Posted September 15, 2023 Share Posted September 15, 2023 It would be awesome if you could demo to the Zoom club on Saturday-1 to 3 PM CST! 1 Quote Link to comment Share on other sites More sharing options...
+arcadeshopper Posted September 15, 2023 Share Posted September 15, 2023 4 minutes ago, FarmerPotato said: It would be awesome if you could demo to the Zoom club on Saturday-1 to 3 PM CST! yes! https://jedimatt42.com/4a/zoom if you need the links/calendar Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 15, 2023 Author Share Posted September 15, 2023 Oh sweet! Yeah man, I'd be happy to do that. I'm off weekends nowadays, so that would work perfectly. 1 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted September 16, 2023 Share Posted September 16, 2023 As I remember, you worked with Matthew180 to develop an assembly scrolling routine that kept the screen map and the scrolling routines all in low memory. For what it's worth, things have changed with the compiler, and you can now use assembly subs, so that custom screen scrolling sub is now a possibility. 2 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted September 16, 2023 Author Share Posted September 16, 2023 44 minutes ago, senior_falcon said: As I remember, you worked with Matthew180 to develop an assembly scrolling routine that kept the screen map and the scrolling routines all in low memory. For what it's worth, things have changed with the compiler, and you can now use assembly subs, so that custom screen scrolling sub is now a possibility. 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. 3 Quote Link to comment Share on other sites More sharing options...
unhuman Posted September 16, 2023 Share Posted September 16, 2023 Consider putting your code on github. Really good way to manage your code and not lose it. 4 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.