Fixed latent animation bug introduced by PF - when advancing anim ptr, need to get both bytes of offset before changing ptr.

This commit is contained in:
Martin Haye 2017-08-12 10:25:24 -07:00
parent 8cd36fad17
commit 1ce5b2b0a0
4 changed files with 27 additions and 13 deletions

View File

@ -2787,6 +2787,7 @@ advSingleAnim:
rts
.dbgout +crout
+waitKey
bit $c050
sta setAuxRd
sta setAuxWr
rts
@ -2828,12 +2829,14 @@ applyPatch:
; loop to skip patches until we find the right one
- dec reqLen ; it starts at 1, which means first patch.
beq +
ldy #1
ldy #0
lda (pSrc),y ; low byte of patch len
pha
iny
lda (pSrc),y ; hi byte of patch len
inx ; -> pSrc+1
jsr .ptradd ; skip by # pages in patch
dey
lda (pSrc),y ; low byte of patch len
pla ; get lo byte of len back
jsr .srcadd ; skip pSrc past last partial page in patch
jmp -
+ !if DEBUG = 2 { jsr .dbgC2 }

View File

@ -65,6 +65,7 @@ import gamelib
predef initPlayerXP(player)#0
predef loadFrameImg(img)#0
predef loadMainFrameImg()#0
predef lookupResourcePart(sectionNum, resourceNum)#1
predef makeModifier(name, value)#1
predef max(a, b)#1
predef memcpy(pSrc, pDst, len)#0

View File

@ -82,7 +82,7 @@ byte inScript = FALSE
export word skyNum = 9
export word groundNum = 10
export byte portraitNum = 1
export byte portraitNum = 46
word triggerOriginX, triggerOriginY
word triggerTbl
@ -1361,7 +1361,7 @@ end
///////////////////////////////////////////////////////////////////////////////////////////////////
// Look up the partition for a resource.
// sectioNum: 1=map2d, 2=map3d, 3=portrait
def lookupResourcePart(sectionNum, resourceNum)#1
export def lookupResourcePart(sectionNum, resourceNum)#1
word ptr
byte n
@ -1381,7 +1381,8 @@ def lookupResourcePart(sectionNum, resourceNum)#1
if curMapPartition > 0; return curMapPartition; fin
return 2
fin
if n < 1 or n > 20; fatal("lkupFail2"); fin
printf1("n=%d\n", n)
if n < 0 or n > 20; fatal("lkupFail2"); fin
return n
end
@ -1415,9 +1416,9 @@ def printVersion()#0
crout()
^$24 = 25
puts("V ")
setWindow(183, 192, 168, 254)
setWindow(183, 192, 161, 261)
clearWindow()
setWindow(183, 192, 175, 245)
setWindow(183, 192, 168, 252)
rawDisplayStr("^YV ")
p = pResourceIndex
len = readAuxByte(p)
@ -2237,7 +2238,8 @@ export def setPortrait(portraitNum)#0
// Load the portrait image and display it
part = lookupResourcePart(3, portraitNum)
if part > 1; part = curMapPartition; fin // Look on disk 1 or current disk only
// Commented out below, because it prevents cycling thru all portraits (in god mode)
// NO: if part > 1; part = curMapPartition; fin // Look on disk 1 or current disk only
mmgr(START_LOAD, part)
curPortrait = auxMmgr(QUEUE_LOAD, portraitNum<<8 | RES_TYPE_PORTRAIT)
curPortraitNum = portraitNum

View File

@ -78,16 +78,24 @@ end
///////////////////////////////////////////////////////////////////////////////////////////////////
def nextPortrait()#1
portraitNum = portraitNum + 1
if portraitNum > PO_LAST; portraitNum = 1; fin
while TRUE
portraitNum = portraitNum + 1
if portraitNum > PO_LAST; portraitNum = 1; fin
printf1("portrait %d\n", portraitNum)
if lookupResourcePart(3, portraitNum); break; fin
loop
setPortrait(portraitNum)
return 0
end
///////////////////////////////////////////////////////////////////////////////////////////////////
def prevPortrait()#1
portraitNum = portraitNum - 1
if portraitNum < 1; portraitNum = PO_LAST; fin
while TRUE
portraitNum = portraitNum - 1
if portraitNum < 1; portraitNum = PO_LAST; fin
printf1("portrait %d\n", portraitNum)
if lookupResourcePart(3, portraitNum); break; fin
loop
setPortrait(portraitNum)
return 0
end