1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2024-10-18 07:24:16 +00:00

Check for existing string in pool before copying CS string from aux mem

This commit is contained in:
David Schmenk 2017-03-26 20:36:03 -07:00
parent 37c9f76faf
commit ee8fd77c26
4 changed files with 54 additions and 32 deletions

View File

@ -119,7 +119,6 @@ word ascii_entity = @ascii_thief, @ascii_ogre, @ascii_zombie, @ascii_rogue
//
// Monster types
//
byte thief = "Thief", 5
byte ogre = "Ogre", 20
byte zombie = "Zombie", 40
@ -127,17 +126,6 @@ byte rogue = "Rogue", 80
export word entity = @thief, @ogre, @zombie, @rogue
export word entities = 0
//
// Combat status strings
//
byte skillstr = "Skill :"
byte healthstr = "Health :"
byte energystr = "Energy :"
byte powerstr = "Power :"
byte lifestr = "Life :"
byte fightstr = "F)ight or R)un?"
//
// Combat Return 1 if running away, 0 if end of fight
//
@ -157,24 +145,24 @@ export def fight(player, enemy)
gotoxy(0, 0)
puts(player+name)
gotoxy(1, 2)
puts(@skillstr); puti(player->skill)
puts("Skill :"); puti(player->skill)
gotoxy(1, 3)
puts(@healthstr); puti(player->health)
puts("Health :"); puti(player->health)
gotoxy(1, 4)
puts(@energystr); puti(player->energy)
puts("Energy :"); puti(player->energy)
gotoxy(20, 0)
puts(entity[enemy->kind])
gotoxy(21, 2)
puts(@powerstr); puti(enemy->power)
puts("Power :"); puti(enemy->power)
gotoxy(21, 3)
puts(@lifestr); puti(enemy->life)
puts("Life :"); puti(enemy->life)
for e_atck = 0 to 9
gotoxy(0, 10 + e_atck)
puts(@ascii_warrior + e_atck * 11)
gotoxy(20, 10 + e_atck)
puts(ascii_entity[enemy->kind] + e_atck * 11)
next
gotoxy(12, 8); puts(@fightstr)
gotoxy(12, 8); puts("F)ight or R)un?")
if toupper(getkb()) == 'R'
return 1
else
@ -204,10 +192,10 @@ export def fight(player, enemy)
entities = enemy=>next_other
fin
if enemy=>next_other
enemy=>next_other=>prev_other = enemy=>prev_other
enemy=>next_other=>prev_other = enemy=>prev_other
fin
if enemy=>prev_other
enemy=>prev_other=>next_other = enemy=>next_other
enemy=>prev_other=>next_other = enemy=>next_other
fin
fin
if player->health > e_atck
@ -224,4 +212,4 @@ export def fight(player, enemy)
return 0
end
done
done

View File

@ -90,7 +90,7 @@ word = $0450,$04D0,$0550,$05D0,$0650,$06D0,$0750,$07D0
// Editor variables
//
byte nullstr = ""
byte version = "PLASMA ][ SANDBOX VERSION 00.95"
byte version = "PLASMA ][ SANDBOX VERSION 00.96"
byte errorstr = "ERROR: $"
byte okstr = "OK"
byte outofmem = "OUT OF MEMORY!"

View File

@ -786,11 +786,11 @@ CSX DEX
TAY
ADC IPH
STA IPH
LDA PPH ; SCAN POOL FOR STRING ALREADY THERE
STA TMPH
LDA PPL
LDA PPL ; SCAN POOL FOR STRING ALREADY THERE
STA TMPL
_CMPPSX LDA TMPH ; CHECK FOR END OF POOL
LDA PPH
STA TMPH
_CMPPSX ;LDA TMPH ; CHECK FOR END OF POOL
CMP IFPH
BCC _CMPSX ; CHECK FOR MATCHING STRING
BNE _CPYSX ; BEYOND END OF POOL, COPY STRING OVER

View File

@ -46,7 +46,7 @@ DSTX = XPAGE+DSTH
!WORD $0000
!WORD SEGSTART
!WORD SEGEND-SEGSTART
+SOS $40, SEGREQ ; ALLOCATE SEG 1 AND MAP IT
BNE PRHEX
LDA #$01
@ -89,7 +89,7 @@ PRHEX PHA
BCC +
ADC #6
+ STA $880
FAIL RTS
FAIL RTS
SEGREQ !BYTE 4
!WORD $2001
!WORD $9F01
@ -545,7 +545,41 @@ CS DEX
TAY
ADC IPH
STA IPH
LDA (IP),Y
LDA PPL ; SCAN POOL FOR STRING ALREADY THERE
STA TMPL
LDA PPH
STA TMPH
_CMPPS ;LDA TMPH ; CHECK FOR END OF POOL
CMP IFPH
BCC _CMPS ; CHECK FOR MATCHING STRING
BNE _CPYS ; BEYOND END OF POOL, COPY STRING OVER
LDA TMPL
CMP IFPL
BCS _CPYS ; AT OR BEYOND END OF POOL, COPY STRING OVER
_CMPS LDA (TMP),Y ; COMPARE STRINGS FROM AUX MEM TO STRINGS IN MAIN MEM
CMP (IP),Y ; COMPARE STRING LENGTHS
BNE _CNXTS1
TAY
_CMPCS LDA (TMP),Y ; COMPARE STRING CHARS FROM END
CMP (IP),Y
BNE _CNXTS
DEY
BNE _CMPCS
LDA TMPL ; MATCH - SAVE EXISTING ADDR ON ESTK AND MOVE ON
STA ESTKL,X
LDA TMPH
STA ESTKH,X
BNE _CEXS
_CNXTS LDY #$00
LDA (TMP),Y
_CNXTS1 SEC
ADC TMPL
STA TMPL
LDA #$00
ADC TMPH
STA TMPH
BNE _CMPPS
_CPYS LDA (IP),Y ; COPY STRING FROM AUX TO MAIN MEM POOL
TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK
EOR #$FF
CLC
@ -556,13 +590,13 @@ CS DEX
ADC PPH
STA PPH
STA ESTKH,X ; COPY STRING FROM AUX MEM BYTECODE TO MAIN MEM POOL
- LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE
_CPYS1 LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE
STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE
DEY
CPY #$FF
BNE -
BNE _CPYS1
INY
LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING
_CEXS LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING
TAY
JMP NEXTOP
;*