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

View File

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

View File

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

View File

@ -46,7 +46,7 @@ DSTX = XPAGE+DSTH
!WORD $0000 !WORD $0000
!WORD SEGSTART !WORD SEGSTART
!WORD SEGEND-SEGSTART !WORD SEGEND-SEGSTART
+SOS $40, SEGREQ ; ALLOCATE SEG 1 AND MAP IT +SOS $40, SEGREQ ; ALLOCATE SEG 1 AND MAP IT
BNE PRHEX BNE PRHEX
LDA #$01 LDA #$01
@ -89,7 +89,7 @@ PRHEX PHA
BCC + BCC +
ADC #6 ADC #6
+ STA $880 + STA $880
FAIL RTS FAIL RTS
SEGREQ !BYTE 4 SEGREQ !BYTE 4
!WORD $2001 !WORD $2001
!WORD $9F01 !WORD $9F01
@ -545,7 +545,41 @@ CS DEX
TAY TAY
ADC IPH ADC IPH
STA 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 TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK
EOR #$FF EOR #$FF
CLC CLC
@ -556,13 +590,13 @@ CS DEX
ADC PPH ADC PPH
STA PPH STA PPH
STA ESTKH,X ; COPY STRING FROM AUX MEM BYTECODE TO MAIN MEM POOL 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 STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE
DEY DEY
CPY #$FF CPY #$FF
BNE - BNE _CPYS1
INY INY
LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING _CEXS LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING
TAY TAY
JMP NEXTOP JMP NEXTOP
;* ;*