Skip to content

Commit be61dcd

Browse files
authored
Merge pull request #2861 from rakieldev/newstuff
refactor: migrate AIR indices to int32
2 parents 64c3f40 + db239cf commit be61dcd

8 files changed

Lines changed: 70 additions & 53 deletions

File tree

src/anim.go

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import (
99
// AnimFrame holds frame data, used in animation tables.
1010
type 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 {
2828
func 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

18091816
func 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

18231830
func (pa PreloadedAnims) addAnim(anim *Animation, no int32) {
1824-
pa[[...]uint16{uint16(no), 0xFFFF}] = anim
1831+
pa[[...]int32{no, -1}] = anim
18251832
}
18261833

18271834
func (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

18391846
func (pa PreloadedAnims) updateSff(sff *Sff) {

src/bytecode.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11258,8 +11258,7 @@ func (sc remapSprite) Run(c *Char, _ []int32) bool {
1125811258
if crun == nil {
1125911259
return false
1126011260
}
11261-
nullSpr := uint16(0xFFFF)
11262-
src := [...]uint16{nullSpr, nullSpr}
11261+
src := [...]int32{-1, -1}
1126311262

1126411263
StateControllerBase(sc).run(c, func(paramID byte, exp []BytecodeExp) bool {
1126511264
switch paramID {
@@ -11270,14 +11269,14 @@ func (sc remapSprite) Run(c *Char, _ []int32) bool {
1127011269
case remapSprite_preset:
1127111270
crun.remapSpritePreset(string(*(*[]byte)(unsafe.Pointer(&exp[0]))))
1127211271
case remapSprite_source:
11273-
src[0] = uint16(exp[0].evalI(c))
11272+
src[0] = int32(exp[0].evalI(c))
1127411273
if len(exp) > 1 {
11275-
src[1] = uint16(exp[1].evalI(c))
11274+
src[1] = int32(exp[1].evalI(c))
1127611275
}
1127711276
case remapSprite_dest:
11278-
dst := [...]uint16{uint16(exp[0].evalI(c)), nullSpr}
11277+
dst := [...]int32{int32(exp[0].evalI(c)), -1}
1127911278
if len(exp) > 1 {
11280-
dst[1] = uint16(exp[1].evalI(c))
11279+
dst[1] = int32(exp[1].evalI(c))
1128111280
}
1128211281
crun.remapSprite(src, dst)
1128311282
}
@@ -13556,8 +13555,8 @@ func (sc modifyStageBG) Run(c *Char, _ []int32) bool {
1355613555
eachBg(func(bg *backGround) {
1355713556
if bg._type == BG_Normal {
1355813557
bg.anim.frames = []AnimFrame{*newAnimFrame()}
13559-
bg.anim.frames[0].Group = I32ToU16(gr)
13560-
bg.anim.frames[0].Number = I32ToU16(im)
13558+
bg.anim.frames[0].Group = gr
13559+
bg.anim.frames[0].Number = im
1356113560
}
1356213561
})
1356313562
case modifyStageBG_start_x:

src/char.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3637,10 +3637,12 @@ func (c *Char) load(def string) error {
36373637
if len(k) == 2 {
36383638
var v [2]int32
36393639
is.ReadI32(key, &v[0], &v[1])
3640-
if _, ok := gi.remapPreset[subname][uint16(Atoi(k[0]))]; !ok {
3641-
gi.remapPreset[subname][uint16(Atoi(k[0]))] = make(RemapTable)
3640+
g0 := int32(Atoi(k[0]))
3641+
n0 := int32(Atoi(k[1]))
3642+
if _, ok := gi.remapPreset[subname][g0]; !ok {
3643+
gi.remapPreset[subname][g0] = make(RemapTable)
36423644
}
3643-
gi.remapPreset[subname][uint16(Atoi(k[0]))][uint16(Atoi(k[1]))] = [...]uint16{uint16(v[0]), uint16(v[1])}
3645+
gi.remapPreset[subname][g0][n0] = v
36443646
}
36453647
}
36463648
}
@@ -8399,25 +8401,24 @@ func (c *Char) drawPal() [2]int32 {
83998401
return c.getDrawPal(palMap[0])
84008402
}
84018403

8402-
type RemapTable map[uint16][2]uint16
8403-
type RemapPreset map[uint16]RemapTable
8404+
type RemapTable map[int32][2]int32
8405+
type RemapPreset map[int32]RemapTable
84048406

8405-
func (c *Char) remapSprite(src [2]uint16, dst [2]uint16) {
8406-
nullSpr := uint16(0xFFFF)
8407-
if src[0] == nullSpr || src[1] == nullSpr || dst[0] == nullSpr || dst[1] == nullSpr {
8407+
func (c *Char) remapSprite(src [2]int32, dst [2]int32) {
8408+
if src[0] == -1 || src[1] == -1 || dst[0] == -1 || dst[1] == -1 {
84088409
return
84098410
}
84108411
if _, ok := c.remapSpr[src[0]]; !ok {
84118412
c.remapSpr[src[0]] = make(RemapTable)
84128413
}
8413-
c.remapSpr[src[0]][src[1]] = [...]uint16{dst[0], dst[1]}
8414+
c.remapSpr[src[0]][src[1]] = [...]int32{dst[0], dst[1]}
84148415
}
84158416

84168417
func (c *Char) remapSpritePreset(preset string) {
84178418
if _, ok := c.gi().remapPreset[preset]; !ok {
84188419
return
84198420
}
8420-
var src, dst [2]uint16
8421+
var src, dst [2]int32
84218422
for src[0] = range c.gi().remapPreset[preset] {
84228423
for src[1], dst = range c.gi().remapPreset[preset][src[0]] {
84238424
c.remapSprite(src, dst)

src/common.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,7 @@ func (al *AnimLayout) Read(pre string, is IniSection, at AnimationTable, ln int1
11181118
var g, n int32
11191119
if is.ReadI32(pre+"spr", &g, &n) {
11201120
al.anim.frames = []AnimFrame{*newAnimFrame()}
1121-
al.anim.frames[0].Group, al.anim.frames[0].Number = I32ToU16(g), I32ToU16(n)
1121+
al.anim.frames[0].Group, al.anim.frames[0].Number = g, n
11221122
al.anim.mask = 0
11231123
al.lay = *newLayout(ln)
11241124
}

src/lifebar.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,18 +1649,18 @@ func readLifeBarFace(pre string, is IniSection, sff *Sff, at AnimationTable) *Li
16491649

16501650
func (fa *LifeBarFace) step(ref int, far *LifeBarFace) {
16511651
refChar := sys.chars[ref][0]
1652-
group, number := uint16(fa.face_spr[0]), uint16(fa.face_spr[1])
1652+
group, number := fa.face_spr[0], fa.face_spr[1]
16531653
if refChar != nil && refChar.anim != nil {
16541654
if mg, ok := refChar.anim.remap[group]; ok {
16551655
if mn, ok := mg[number]; ok {
16561656
group, number = mn[0], mn[1]
16571657
}
16581658
}
16591659
}
1660-
if far.old_spr[0] != int32(group) || far.old_spr[1] != int32(number) ||
1660+
if far.old_spr[0] != group || far.old_spr[1] != number ||
16611661
far.old_pal[0] != sys.cgi[ref].remappedpal[0] || far.old_pal[1] != sys.cgi[ref].remappedpal[1] {
1662-
far.face = sys.cgi[ref].sff.getOwnPalSprite(group, number, &sys.cgi[ref].palettedata.palList)
1663-
far.old_spr = [...]int32{int32(group), int32(number)}
1662+
far.face = sys.cgi[ref].sff.getOwnPalSprite(uint16(group), uint16(number), &sys.cgi[ref].palettedata.palList)
1663+
far.old_spr = [...]int32{group, number}
16641664
far.old_pal = [...]int32{sys.cgi[ref].remappedpal[0], sys.cgi[ref].remappedpal[1]}
16651665
}
16661666
fa.bg.Action()

src/script.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ func systemScriptInit(l *lua.LState) {
288288
return 2
289289
})
290290
luaRegister(l, "animGetPreloadedCharData", func(l *lua.LState) int {
291-
if anim := sys.sel.GetChar(int(numArg(l, 1))).anims.get(uint16(numArg(l, 2)), uint16(numArg(l, 3))); anim != nil {
291+
if anim := sys.sel.GetChar(int(numArg(l, 1))).anims.get(int32(numArg(l, 2)), int32(numArg(l, 3))); anim != nil {
292292
pfx := newPalFX()
293293
pfx.clear()
294294
pfx.time = -1
@@ -303,7 +303,7 @@ func systemScriptInit(l *lua.LState) {
303303
return 0
304304
})
305305
luaRegister(l, "animGetPreloadedStageData", func(l *lua.LState) int {
306-
if anim := sys.sel.GetStage(int(numArg(l, 1))).anims.get(uint16(numArg(l, 2)), uint16(numArg(l, 3))); anim != nil {
306+
if anim := sys.sel.GetStage(int(numArg(l, 1))).anims.get(int32(numArg(l, 2)), int32(numArg(l, 3))); anim != nil {
307307
pfx := newPalFX()
308308
pfx.clear()
309309
pfx.time = -1
@@ -796,7 +796,10 @@ func systemScriptInit(l *lua.LState) {
796796
copyAnim := CopyAnim(a)
797797
char := sys.sel.GetChar(int(numArg(l, 2)))
798798
for _, c := range copyAnim.anim.frames {
799-
spr, ok := copyAnim.anim.sff.sprites[[...]uint16{c.Group, c.Number}]
799+
if c.Group < 0 || c.Number < 0 {
800+
continue
801+
}
802+
spr, ok := copyAnim.anim.sff.sprites[[2]uint16{uint16(c.Group), uint16(c.Number)}]
800803
if !ok || spr == nil {
801804
continue
802805
}

src/stage.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,8 +299,7 @@ func readBackGround(is IniSection, link *backGround,
299299
var g, n int32
300300
if is.readI32ForStage("spriteno", &g, &n) {
301301
bg.anim.frames = []AnimFrame{*newAnimFrame()}
302-
bg.anim.frames[0].Group, bg.anim.frames[0].Number =
303-
I32ToU16(g), I32ToU16(n)
302+
bg.anim.frames[0].Group, bg.anim.frames[0].Number = g, n
304303
}
305304
if is.ReadI32("mask", &tmp) {
306305
if tmp != 0 {
@@ -413,10 +412,13 @@ func readBackGround(is IniSection, link *backGround,
413412
is.ReadI32("tilespacing", &bg.anim.tile.xspacing, &bg.anim.tile.yspacing)
414413
//bg.anim.tile.yspacing = bg.anim.tile.xspacing
415414
if bg.actionno < 0 && len(bg.anim.frames) > 0 {
416-
if spr := sff.GetSprite(
417-
bg.anim.frames[0].Group, bg.anim.frames[0].Number); spr != nil {
418-
bg.anim.tile.xspacing += int32(spr.Size[0])
419-
bg.anim.tile.yspacing += int32(spr.Size[1])
415+
group := bg.anim.frames[0].Group
416+
number := bg.anim.frames[0].Number
417+
if group >= 0 && number >= 0 {
418+
if spr := sff.GetSprite(uint16(group), uint16(number)); spr != nil {
419+
bg.anim.tile.xspacing += int32(spr.Size[0])
420+
bg.anim.tile.yspacing += int32(spr.Size[1])
421+
}
420422
}
421423
} else {
422424
if bg.anim.tile.xspacing == 0 {

src/system.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3608,7 +3608,10 @@ func (s *Select) addChar(defLine string) {
36083608
if animation := at.get(v_anim); animation != nil {
36093609
sc.anims.addAnim(animation, v_anim)
36103610
for _, fr := range animation.frames {
3611-
listSpr[[2]uint16{fr.Group, fr.Number}] = true
3611+
if fr.Group < 0 || fr.Number < 0 {
3612+
continue
3613+
}
3614+
listSpr[[2]uint16{uint16(fr.Group), uint16(fr.Number)}] = true
36123615
}
36133616
}
36143617
}
@@ -3861,7 +3864,9 @@ func (s *Select) AddStage(def string) error {
38613864
if anim := at.get(v); anim != nil {
38623865
ss.anims.addAnim(anim, v)
38633866
for _, fr := range anim.frames {
3864-
listSpr[[...]uint16{fr.Group, fr.Number}] = true
3867+
if fr.Group >= 0 && fr.Number >= 0 {
3868+
listSpr[[2]uint16{uint16(fr.Group), uint16(fr.Number)}] = true
3869+
}
38653870
}
38663871
}
38673872
}

0 commit comments

Comments
 (0)