.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