Opry99er
Novice
- Joined
- Jun 28, 2010
- Messages
- 23
okay--- here's the skeleton for the battle engine... You can play it on Classic99 emulator, but it's not done. This is the Extended BASIC dialect... i use this language for quick and dirty mockups. Since it's BASIC, anyone can understand what is going on here. I start by initializing the variables I'll be using. Then I draw the screen and wait for user input. The lines of code I want to discuss here are lines 1000 and 2000 specifically. This is the determination of how much damage you do to your enemy, for ATTACK (line 1000) and MAGIC (line 2000). The "chance" of hitting the enemy is not in this sample code--- for the time being, I'm concerned with the ATTACK action. Here are the variables I'm tracking for each character:
LEV---Level
MHP--Max HP (Health points)
HP----HP
MMP--Max MP (Magic points)
MP---MP
A----Attack
D----Defend
MA--Magic Attack
MD--Magic Defend
I will probably track a few more variables as I get deeper into the code. For the time being, I need some help developing a good algorithm for the amount of damage done to the enemy. Lines 1000 (attack) and 2000 (magic) are the ones I'm concerned with now. Please take a look and lend me your brilliance. =)
LEV---Level
MHP--Max HP (Health points)
HP----HP
MMP--Max MP (Magic points)
MP---MP
A----Attack
D----Defend
MA--Magic Attack
MD--Magic Defend
I will probably track a few more variables as I get deeper into the code. For the time being, I need some help developing a good algorithm for the amount of damage done to the enemy. Lines 1000 (attack) and 2000 (magic) are the ones I'm concerned with now. Please take a look and lend me your brilliance. =)
Code:
REM **THESE ARE THE STATISTICAL VARIABLES FOR THE PC'S
REM **MAX HP, HP, MAX MP, MP, ATTACK, DEFEND, MACIC ATTACK ,MAGIC DEFEND, DAMAGE INFLICTED ON TURN
REM ** B=BERYL, R=REPTOSLICER, M=MARKUS, S=SKYLAR
REM ** SK=SKELETON (THE ENEMY)
1 BLEV=10 :: BMHP=100 :: BHP=100 :: BMMP=50 :: BMP=50 :: BA=7 :: BD=7 :: BMA=4 :: BMD=6 :: BDAM=0
2 RLEV=11 :: RMHP=100 :: RHP=100 :: RMMP=100 :: RMP=100 :: RA=5 :: RD=5 :: RMA= 8:: RMD=10 :: RDAM=0
3 MLEV=7 :: MMHP=100 :: MHP=100 :: MMMP=40 :: MMP=40 :: MA=5 :: MD=5 :: MMA=3 :: MMD=5 :: MDAM=0
4 SLEV=5 :: SMHP=100 :: SHP=100 :: SMMP=50 :: SMP=50 :: SA=4 :: SD=4 :: SMA=3 :: SMD=6 :: SDAM=0
5 CHAR$="BERYL" :: BMOV=0 :: RMOV=0 :: MMOV=0 :: SMOV=0 :: COUNT=1 :: PDAM=0
6 BMOV$="" :: RMOV$="" :: MMOV$="" :: SMOV$=""
REM **THESE ARE THE STATISTICAL VARIABLES FOR SKELETON
7 SKMHP=500 :: SKHP=500 :: SKMP=100 ::SKMMP=100 :: SKMP=100 :: SKA=5 :: SKD=5 :: SKMA=5 :: SKMD=5 :: SKDAM=0
REM **DISPLAY HP ONSCREEN
100 CALL CLEAR :: CALL SCREEN(13)
110 DISPLAY AT(2,8):"BATTLE TEST";
120 DISPLAY AT(3,1):"BERYL HP";
130 DISPLAY AT(3,18):BHP
140 DISPLAY AT(4,1):"REPTOSLICER HP";
150 DISPLAY AT(4,18):RHP
160 DISPLAY AT(5,1):"MARKUS HP";
170 DISPLAY AT(5,18):MHP
180 DISPLAY AT(6,1):"SKYLAR HP";
190 DISPLAY AT(6,18):SHP
191 DISPLAY AT(12,1):"SKELETON HP";
192 DISPLAY AT(12,18):SKHP
200 DISPLAY AT(19,1):"YOUR TURN:"
210 DISPLAY AT(21,1):"A=ATTACK M=MAGIC D=DEFEND"
REM **START BATTLE SEQUENCE
300 IF COUNT>4 THEN GOSUB 5000
305 IF COUNT=1 THEN CHAR$="BERYL"
306 IF COUNT=2 THEN CHAR$="REPTOSLICER"
307 IF COUNT=3 THEN CHAR$="MARKUS"
308 IF COUNT=4 THEN CHAR$="SKYLAR"
309 DISPLAY AT(20,1):CHAR$
REM ** TIGHT LOOP
310 CALL KEY(0,K,S)
315 IF S=0 THEN 300
320 IF K=65 THEN GOSUB 1000
321 IF K=77 THEN GOSUB 2000
322 IF K=68 THEN GOSUB 3000
330 GOTO 300
REM ** ATTACK IS SELECTED, THIS DETERMINES WHAT DAMAGE YOU INFLICT
1000 IF COUNT=1 THEN BMOV=(BA+BLEV)*2
1001 IF COUNT=2 THEN RMOV=(RA+RLEV)*2
1002 IF COUNT=3 THEN MMOV=(MA+MLEV)*2
1004 IF COUNT=4 THEN SMOV=(SA+SLEV)*2
1005 IF COUNT=1 THEN BMOV$="ATTACK"
1006 IF COUNT=2 THEN RMOV$="ATTACK"
1007 IF COUNT=3 THEN MMOV$="ATTACK"
1008 IF COUNT=4 THEN SMOV$="ATTACK"
1009 COUNT=COUNT+1
1020 RETURN
REM **MAGIC IS SELECTED, THIS DETERMINES WHAT DAMAGE YOU INFLICT
2000 IF COUNT=1 THEN BMOV=(BMA+BLEV)*2
2001 IF COUNT=2 THEN RMOV=(RMA+RLEV)*2
2002 IF COUNT=3 THEN MMOV=(MMA+MLEV)*2
2004 IF COUNT=4 THEN SMOV=(SMA+SLEV)*2
2005 IF COUNT=1 THEN BMOV$="MAGIC"
2006 IF COUNT=2 THEN RMOV$="MAGIC"
2007 IF COUNT=3 THEN MMOV$="MAGIC"
2008 IF COUNT=4 THEN SMOV$="MAGIC"
2009 COUNT=COUNT+1
2020 RETURN
REM **DEFEND IS SELECTED, THIS DETERMINES YOUR "DEFEND" VARIABLE VALUE
3000 IF COUNT=1 THEN BMOV=(BD+BLEV)*-2
3001 IF COUNT=2 THEN RMOV=(RD+RLEV)*-2
3002 IF COUNT=3 THEN MMOV=(MD+MLEV)*-2
3004 IF COUNT=4 THEN SMOV=(SD+SLEV)*-2
3005 IF COUNT=1 THEN BMOV$="DEFEND"
3006 IF COUNT=2 THEN RMOV$="DEFEND"
3007 IF COUNT=3 THEN MMOV$="DEFEND"
3008 IF COUNT=4 THEN SMOV$="DEFEND"
3009 COUNT=COUNT+1
3020 RETURN
REM **ALL PLAYERS HAVE SELECTED THEIR MOVE---THIS SHOWS RESULTS OF YOUR TURN
REM **THEN CHECKS FOR SKELETON'S "ALIVE OR DEAD", THEN GOES TO THE BEGINNING FOR THE NEXT TURN
5000 DISPLAY AT(15,1):"BERYL"
5010 DISPLAY AT(15,14):BMOV$;
5020 FOR I=1 TO 800 :: NEXT I
5030 DISPLAY AT(15,1):"REPTOSLICER"
5040 DISPLAY AT(15,14):RMOV$;
5050 FOR I=1 TO 800 :: NEXT I
5060 DISPLAY AT(15,1):"MARKUS"
5070 DISPLAY AT(15,14):MMOV$;
5080 FOR I=1 TO 800 :: NEXT I
5090 DISPLAY AT(15,1):"SKYLAR"
6000 DISPLAY AT(15,14):SMOV$;
6009 FOR I=1 TO 800 :: NEXT I
6010 PDAM=BMOV+RMOV+MMOV+SMOV
6012 DISPLAY AT(14,5):"TOTAL DAMAGE"
6013 DISPLAY AT(14,20):PDAM
6015 FOR I=1 TO 800 :: NEXT I
6016 SKHP=SKHP-PDAM
6017 IF SKHP<0 THEN GOSUB 10000
6020 COUNT=1 :: GOTO 100
REM **SKELETON IS DEAD, END THE SIMULATION
10000 CALL CLEAR :: PRINT "SKELETON DEAD" :: FOR I=1 TO 800 :: NEXT I :: END