@@ -9,10 +9,10 @@ import (
99// AnimFrame holds frame data, used in animation tables.
1010type AnimFrame struct {
1111 Time int32
12- Group uint16
13- Number uint16
14- Xoffset int16
15- Yoffset int16
12+ Group int32
13+ Number int32
14+ Xoffset int32
15+ Yoffset int32
1616 TransType TransType
1717 SrcAlpha byte
1818 DstAlpha byte
@@ -28,7 +28,7 @@ type AnimFrame struct {
2828func newAnimFrame () * AnimFrame {
2929 return & AnimFrame {
3030 Time : - 1 ,
31- Group : 0xFFFF ,
31+ Group : - 1 ,
3232 TransType : TT_none ,
3333 SrcAlpha : 255 ,
3434 DstAlpha : 0 ,
@@ -51,10 +51,10 @@ func ReadAnimFrame(line string) *AnimFrame {
5151
5252 // Read required parameters
5353 af := newAnimFrame ()
54- af .Group = uint16 (Atoi (ary [0 ]))
55- af .Number = uint16 (Atoi (ary [1 ]))
56- af .Xoffset = int16 (Atoi (ary [2 ]))
57- af .Yoffset = int16 (Atoi (ary [3 ]))
54+ af .Group = int32 (Atoi (ary [0 ]))
55+ af .Number = int32 (Atoi (ary [1 ]))
56+ af .Xoffset = int32 (Atoi (ary [2 ]))
57+ af .Yoffset = int32 (Atoi (ary [3 ]))
5858 af .Time = Atoi (ary [4 ])
5959
6060 // Read H and V flags
@@ -551,7 +551,11 @@ func (a *Animation) UpdateSprite() {
551551 group , number = mn [0 ], mn [1 ]
552552 }
553553 }
554- a .spr = a .sff .GetSprite (group , number )
554+ if group >= 0 && number >= 0 {
555+ a .spr = a .sff .GetSprite (uint16 (group ), uint16 (number ))
556+ } else {
557+ a .spr = nil
558+ }
555559 }
556560 a .newframe , a .drawidx = false , a .curelem
557561
@@ -1725,7 +1729,10 @@ func CopyAnim(a *Anim) *Anim {
17251729 newAnim .anim .interpolate_scale = a .anim .interpolate_scale
17261730 // Copy all valid sprites safely
17271731 for _ , c := range a .anim .frames {
1728- key := [... ]uint16 {c .Group , c .Number }
1732+ if c .Group < 0 || c .Number < 0 {
1733+ continue // skip empty frames
1734+ }
1735+ key := [... ]uint16 {uint16 (c .Group ), uint16 (c .Number )}
17291736 src , ok := srcSff .sprites [key ]
17301737 if ! ok || src == nil {
17311738 continue
@@ -1804,24 +1811,24 @@ func (a *Anim) ResetFrames() {
18041811 a .anim .Reset ()
18051812}
18061813
1807- type PreloadedAnims map [[2 ]uint16 ]* Animation
1814+ type PreloadedAnims map [[2 ]int32 ]* Animation
18081815
18091816func NewPreloadedAnims () PreloadedAnims {
1810- return PreloadedAnims (make (map [[2 ]uint16 ]* Animation ))
1817+ return PreloadedAnims (make (map [[2 ]int32 ]* Animation ))
18111818}
18121819
1813- func (pa PreloadedAnims ) get (grp , idx uint16 ) * Animation {
1814- a := pa [[... ]uint16 {grp , idx }]
1820+ func (pa PreloadedAnims ) get (grp , idx int32 ) * Animation {
1821+ a := pa [[... ]int32 {grp , idx }]
18151822 if a == nil {
1816- return a
1823+ return nil
18171824 }
18181825 ret := & Animation {}
18191826 * ret = * a
18201827 return ret
18211828}
18221829
18231830func (pa PreloadedAnims ) addAnim (anim * Animation , no int32 ) {
1824- pa [[... ]uint16 { uint16 ( no ), 0xFFFF }] = anim
1831+ pa [[... ]int32 { no , - 1 }] = anim
18251832}
18261833
18271834func (pa PreloadedAnims ) addSprite (sff * Sff , grp , idx uint16 ) {
@@ -1831,9 +1838,9 @@ func (pa PreloadedAnims) addSprite(sff *Sff, grp, idx uint16) {
18311838 anim := newAnimation (sff , & sff .palList )
18321839 anim .mask = 0
18331840 af := newAnimFrame ()
1834- af .Group , af .Number = grp , idx
1841+ af .Group , af .Number = int32 ( grp ), int32 ( idx )
18351842 anim .frames = append (anim .frames , * af )
1836- pa [[... ]uint16 { grp , idx }] = anim
1843+ pa [[... ]int32 { int32 ( grp ), int32 ( idx ) }] = anim
18371844}
18381845
18391846func (pa PreloadedAnims ) updateSff (sff * Sff ) {
0 commit comments