journey/combat.zap
historicalsource 689e06b55f Final Revision
2019-04-14 16:35:30 -04:00

311 lines
6.9 KiB
Plaintext

.SEGMENT "0"
.FUNCT STRENGTH:ANY:3:3,CHR,TBL,OFF,?TMP1
GETB TBL,OFF >?TMP1
GETP CHR,P?STATUS
MUL ?TMP1,STACK
DIV STACK,100
RSTACK
.FUNCT END-COMBAT:ANY:0:1,DAMAGE
ASSIGNED? 'DAMAGE /?CND1
SET 'DAMAGE,TRUE-VALUE
?CND1: ZERO? DAMAGE /?CND3
CRLF
CRLF
ICALL1 DAMAGE-REPORT
?CND3: ICALL2 SCENE,FALSE-VALUE
ICALL2 MODE,TRAVEL-MODE
SET 'UPDATE-FLAG,TRUE-VALUE
RETURN UPDATE-FLAG
.FUNCT SURPRISE-COMBAT:ANY:0:0
CALL1 V-COMBAT
RSTACK
.FUNCT V-COMBAT:ANY:0:0,OFF,CMD,CHR,TOS,TDS,OOS,ODS,TBL
INC 'COMBAT-ROUND
GETPT OPPONENT,P?ATTACK >TBL
CALL STRENGTH,OPPONENT,TBL,COMBAT-COS >OOS
CALL STRENGTH,OPPONENT,TBL,COMBAT-CDS >ODS
SET 'OFF,0
?PRG1: IGRTR? 'OFF,PARTY-MAX /?REP2
GET PARTY,OFF >CHR
GETPT CHR,P?ATTACK >TBL
CALL STRENGTH,CHR,TBL,COMBAT-COS
ADD TOS,STACK >TOS
CALL STRENGTH,CHR,TBL,COMBAT-CDS
ADD TDS,STACK >TDS
JUMP ?PRG1
?REP2: PUT COMBAT-STRENGTHS,CS-PARTY-OFFENSE,TOS
PUT COMBAT-STRENGTHS,CS-PARTY-DEFENSE,TDS
PUT COMBAT-STRENGTHS,CS-OPPONENT-OFFENSE,OOS
PUT COMBAT-STRENGTHS,CS-OPPONENT-DEFENSE,ODS
ICALL2 SCENE-ACTION,STRENGTH-COMMAND
ICALL1 DESCRIBE-COMBAT
RTRUE
.FUNCT SCENE-ACTION:ANY:1:1,CMD
SET 'ACTION,CMD
GETP SCENE-OBJECT,P?ACTION
CALL STACK
RSTACK
.FUNCT ADD-PARTY-DEFENSE:ANY:1:1,NUM
GET COMBAT-STRENGTHS,CS-PARTY-DEFENSE
ADD STACK,NUM
PUT COMBAT-STRENGTHS,CS-PARTY-DEFENSE,STACK
RTRUE
.FUNCT ADD-PARTY-OFFENSE:ANY:1:1,NUM
GET COMBAT-STRENGTHS,CS-PARTY-OFFENSE
ADD STACK,NUM
PUT COMBAT-STRENGTHS,CS-PARTY-OFFENSE,STACK
RTRUE
.FUNCT COMBAT-RESULT:ANY:2:2,OS,DS
MUL OS,10
DIV STACK,DS
DIV STACK,4
CALL MIN,STACK,5
RSTACK
.FUNCT MIN:ANY:2:2,M,N
GRTR? N,M \?CCL3
RETURN M
?CCL3: RETURN N
.FUNCT DESCRIBE-COMBAT:ANY:0:0,NOTELL?,TOS,TDS,OOS,ODS,ORES,DRES,TMP
GET COMBAT-STRENGTHS,CS-PARTY-OFFENSE >TOS
GET COMBAT-STRENGTHS,CS-PARTY-DEFENSE >TDS
GET COMBAT-STRENGTHS,CS-OPPONENT-OFFENSE >OOS
GET COMBAT-STRENGTHS,CS-OPPONENT-DEFENSE >ODS
ZERO? DEBUG /?CND1
PRINTI "Off: "
PRINTN TOS
PRINTC 47
PRINTN ODS
PRINTI " Def: "
PRINTN TDS
PRINTC 47
PRINTN OOS
?CND1: CALL COMBAT-RESULT,TOS,ODS >OFFENSIVE-RESULT
CALL COMBAT-RESULT,OOS,TDS >DEFENSIVE-RESULT
CALL2 SCENE-ACTION,COMBAT-RESULT-COMMAND >NOTELL?
ZERO? NOTELL? \?CND3
ZERO? COMBAT-ROUND \?CCL7
PRINTI "Our party initially took an aggressive"
PRINTI " stance against the "
ICALL2 WPRINTD,OPPONENT
PRINTI ", who themselves were in "
MUL OOS,10
DIV STACK,ODS
DIV STACK,4
CALL MIN,STACK,8
GET AGGRESSION-TBL,STACK
PRINT STACK
PRINTI " posture."
JUMP ?CND5
?CCL7: PRINTI "We maintained our stance, as did the "
ICALL2 WPRINTD,OPPONENT
PRINTC 46
?CND5: PRINTI " The fighting was fierce, with "
ADD OFFENSIVE-RESULT,DEFENSIVE-RESULT
ZERO? STACK \?CCL10
PRINTI "neither side hurt in the slightest"
JUMP ?CND8
?CCL10: EQUAL? OFFENSIVE-RESULT,DEFENSIVE-RESULT \?CCL12
PRINTI "both sides suffering "
GET COMBAT-RESULT-TBL,OFFENSIVE-RESULT
PRINT STACK
PRINTI " injuries in what was, at best, a stand-off"
JUMP ?CND8
?CCL12: GRTR? OFFENSIVE-RESULT,DEFENSIVE-RESULT \?CCL14
PRINTI "the "
ICALL2 WPRINTD,OPPONENT
PRINTC 32
GRTR? DEFENSIVE-RESULT,3 \?CCL17
PRINTI "getting the worse beating, though we ourselves were bloodied considerably"
JUMP ?CND8
?CCL17: GRTR? OFFENSIVE-RESULT,3 \?CCL19
PRINTI "taking a beating at our hands, while we escaped with minor injury"
JUMP ?CND8
?CCL19: PRINTI "and ourselves each scoring a few hits, though we clearly had the upper hand"
JUMP ?CND8
?CCL14: PRINTI "our party "
GRTR? OFFENSIVE-RESULT,3 \?CCL22
PRINTI "suffering major injury; I suppose it was some consolation that we did a good deal of damage ourselves"
JUMP ?CND8
?CCL22: GRTR? DEFENSIVE-RESULT,3 \?CCL24
PRINTI "taking some major hits, and giving not as many back"
JUMP ?CND8
?CCL24: PRINTI "faring a bit worse than our opponent, though neither side had clearly gained the upper hand"
?CND8: PRINTC 46
?CND3: GRTR? DEFENSIVE-RESULT,0 \?CND25
ICALL DAMAGE-PARTY,DEFENSIVE-RESULT,NOTELL?
?CND25: GRTR? OFFENSIVE-RESULT,0 \TRUE
ICALL DAMAGE-OPPONENT,OFFENSIVE-RESULT,NOTELL?
RTRUE
.FUNCT DAMAGE-OPPONENT:ANY:2:2,ORES,NOTELL?,NST,TT,?TMP1
GETP OPPONENT,P?STATUS >?TMP1
GET OPPONENT-DAMAGE-TBL,ORES
MUL ?TMP1,STACK
DIV STACK,100 >NST
PUTP OPPONENT,P?STATUS,NST
GETP OPPONENT,P?RETREAT
LESS? NST,STACK \FALSE
CRLF
GETP OPPONENT,P?SPECIAL-ACTION
CALL STACK >?TMP1
ZERO? ?TMP1 /?CCL5
RETURN ?TMP1
?CCL5: CRLF
PRINTI "The "
ICALL2 WPRINTD,OPPONENT
PRINTI ", badly hurt, retreated out of sight. We had won the battle!"
CALL1 END-COMBAT
RSTACK
.FUNCT DAMAGE-PARTY:ANY:2:2,DRES,NOTELL?,OFF,DOFF,DTBL,DMAX,?TMP2
SET 'DOFF,1
ICALL1 DAMAGE-ORDER
GET DAMAGE-TBL,DRES >DTBL
GET DTBL,0 >DMAX
?PRG1: GRTR? DOFF,DMAX /?REP2
GRTR? DOFF,PARTY-MAX /?REP2
GET COMBAT-DAMAGE,OFF >?TMP2
GET DTBL,DOFF
ICALL DAMAGE-CHARACTER,?TMP2,STACK
ADD OFF,2 >OFF
INC 'DOFF
JUMP ?PRG1
?REP2: SET 'DOFF,0
SET 'OFF,100
SET 'DMAX,0
?PRG8: IGRTR? 'DOFF,PARTY-MAX /?REP9
GET PARTY,DOFF
GETP STACK,P?STATUS >DTBL
LESS? DTBL,OFF \?PRG8
SET 'DMAX,DOFF
SET 'OFF,DTBL
JUMP ?PRG8
?REP9: ZERO? NOTELL? \TRUE
CALL1 PARTY-STATUS >DOFF
LESS? DOFF,60 \FALSE
CRLF
CRLF
PRINTI "Our party was badly wounded, though still able to fight. ""Let's get out of here,"" I cried, ""before we're killed!"""
RTRUE
.FUNCT DAMAGE-STATUS:ANY:1:1,CHR
GETP CHR,P?STATUS
DIV STACK,20
GET DAMAGE-STATUS-TBL,STACK
RSTACK
.FUNCT DAMAGE-REPORT:ANY:0:0,OFF,CHR
PRINTI "The battle concluded, we took a moment to check on our condition. It appeared that "
?PRG1: IGRTR? 'OFF,PARTY-MAX \?CCL5
PRINTC 46
RTRUE
?CCL5: GET PARTY,OFF >CHR
EQUAL? CHR,TAG \?CCL8
PRINTC 73
JUMP ?CND6
?CCL8: ICALL2 WPRINTD,CHR
?CND6: PRINTI " was "
CALL2 DAMAGE-STATUS,CHR
PRINT STACK
SUB PARTY-MAX,1
EQUAL? OFF,STACK \?CCL11
PRINTI ", and "
JUMP ?PRG1
?CCL11: EQUAL? OFF,PARTY-MAX /?PRG1
PRINTI ", "
JUMP ?PRG1
.FUNCT DAMAGE-CHARACTER:ANY:2:2,CHR,TYP,NST
GETP CHR,P?STATUS
MUL TYP,STACK
DIV STACK,100 >NST
PUTP CHR,P?STATUS,NST
ZERO? DEBUG /FALSE
CRLF
PRINTI "Damage to "
ICALL2 WPRINTD,CHR
PRINTI ", status:"
PRINTN NST
RTRUE
.FUNCT PARTY-STATUS:ANY:0:0,CNT,SUM
?PRG1: IGRTR? 'CNT,PARTY-MAX /?REP2
GET PARTY,CNT
GETP STACK,P?STATUS
ADD SUM,STACK >SUM
JUMP ?PRG1
?REP2: DIV SUM,PARTY-MAX
RSTACK
.FUNCT DAMAGE-ORDER:ANY:0:0,POFF,DOFF,CHR,TBL,TMP,?TMP2
?PRG1: IGRTR? 'POFF,PARTY-MAX /?REP2
GET PARTY,POFF >CHR
PUT COMBAT-DAMAGE,DOFF,CHR
GETPT CHR,P?ATTACK >TBL
ADD DOFF,1 >?TMP2
CALL STRENGTH,CHR,TBL,COMBAT-CDS
PUT COMBAT-DAMAGE,?TMP2,STACK
ADD DOFF,2 >DOFF
JUMP ?PRG1
?REP2: MUL PARTY-MAX,2
CALL PAIR-SORT,COMBAT-DAMAGE,STACK
RSTACK
.FUNCT PAIR-SORT:ANY:2:2,TBL,MAX,OFF,T1,T2,TT,FLG,?TMP2
?PRG1: ADD OFF,3
GRTR? STACK,MAX \?CND3
ZERO? FLG /TRUE
SET 'OFF,0
SET 'FLG,FALSE-VALUE
?CND3: ADD OFF,1
GET TBL,STACK >?TMP2
ADD OFF,3
GET TBL,STACK
GRTR? ?TMP2,STACK \?CND8
SET 'FLG,TRUE-VALUE
MUL OFF,2
ADD TBL,STACK >TT
GET TT,0 >T1
GET TT,1 >T2
GET TT,2
PUT TT,0,STACK
GET TT,3
PUT TT,1,STACK
PUT TT,2,T1
PUT TT,3,T2
?CND8: ADD OFF,2 >OFF
JUMP ?PRG1
.ENDSEG
.ENDI