From 6d0b8391ee0b524f9ade20c254fd2e10022e3ca5 Mon Sep 17 00:00:00 2001 From: K4thos Date: Sun, 28 Aug 2022 18:18:57 +0200 Subject: [PATCH] Fix sound panning localcoord calc --- src/bytecode.go | 7 +++++-- src/char.go | 16 ++++++++-------- src/script.go | 5 +++-- src/sound.go | 14 ++------------ 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/bytecode.go b/src/bytecode.go index d6272d87a..ff2366e8a 100644 --- a/src/bytecode.go +++ b/src/bytecode.go @@ -2375,6 +2375,7 @@ func (sc playSnd) Run(c *Char, _ []int32) bool { var g, n, ch, vo int32 = -1, 0, -1, 100 var p, fr float32 = 0, 1 x := &c.pos[0] + ls := c.localscl StateControllerBase(sc).run(c, func(id byte, exp []BytecodeExp) bool { switch id { case playSnd_value: @@ -2391,6 +2392,7 @@ func (sc playSnd) Run(c *Char, _ []int32) bool { p = exp[0].evalF(c) case playSnd_abspan: x = nil + ls = 1 p = exp[0].evalF(c) case playSnd_volume: vo = vo + int32(float64(exp[0].evalI(c))*(25.0/64.0)) @@ -2404,13 +2406,14 @@ func (sc playSnd) Run(c *Char, _ []int32) bool { if rid := sys.playerID(exp[0].evalI(c)); rid != nil { crun = rid x = &crun.pos[0] + ls = crun.localscl } else { return false } } return true }) - crun.playSound(f, lw, lp, g, n, ch, vo, p, fr, x, true) + crun.playSound(f, lw, lp, g, n, ch, vo, p, fr, ls, x, true) return false } @@ -5428,7 +5431,7 @@ func (sc superPause) Run(c *Char, _ []int32) bool { } vo := int32(100) crun.playSound(exp[0].evalB(c), false, false, exp[1].evalI(c), n, -1, - vo, 0, 1, nil, false) + vo, 0, 1, 1, nil, false) case superPause_redirectid: if rid := sys.playerID(exp[0].evalI(c)); rid != nil { crun = rid diff --git a/src/char.go b/src/char.go index 9ace67801..7b21ad23e 100644 --- a/src/char.go +++ b/src/char.go @@ -2058,7 +2058,7 @@ func (c *Char) load(def string) error { gi.remapPreset = make(map[string]RemapPreset) data, size, velocity, movement, quotes, constants := true, true, true, true, true, true - + if len(cns) > 0 { if err := LoadFile(&cns, []string{def, "", sys.motifDir, "data/"}, func(filename string) error { str, err := LoadText(filename) @@ -2067,8 +2067,8 @@ func (c *Char) load(def string) error { } lines, i = SplitAndTrim(str, "\n"), 0 for i < len(lines) { - is, name, subname := ReadIniSection(lines, &i) - switch name { + is, name, subname := ReadIniSection(lines, &i) + switch name { case "data": if data { data = false @@ -3082,7 +3082,7 @@ func (c *Char) winType(wt WinType) bool { return c.win() && sys.winTrigger[c.playerNo&1] == wt } func (c *Char) playSound(f, lowpriority, loop bool, g, n, chNo, vol int32, - p, freqmul float32, x *float32, log bool) { + p, freqmul, ls float32, x *float32, log bool) { if g < 0 { return } @@ -3131,7 +3131,7 @@ func (c *Char) playSound(f, lowpriority, loop bool, g, n, chNo, vol int32, // ch.SetVolume(float32(c.gi().data.volume + vol)) // } //} - ch.SetPan(p*c.facing, c.localscl, x) + ch.SetPan(p*c.facing, ls, x) } } @@ -5810,7 +5810,7 @@ func (c *Char) tick() { if c.life <= 0 && !sys.sf(GSF_noko) { if !sys.sf(GSF_nokosnd) && c.alive() { vo := int32(100) - c.playSound(false, false, false, 11, 0, -1, vo, 0, 1, &c.pos[0], false) + c.playSound(false, false, false, 11, 0, -1, vo, 0, 1, c.localscl, &c.pos[0], false) } c.setSCF(SCF_ko) } @@ -6468,7 +6468,7 @@ func (cl *CharList) clsn(getter *Char, proj bool) { } vo := int32(100) c.playSound(f, false, false, sg, hd.hitsound[1], - -1, vo, 0, 1, &getter.pos[0], true) + -1, vo, 0, 1, getter.localscl, &getter.pos[0], true) } if hitType > 0 { c.powerAdd(hd.hitgetpower) @@ -6514,7 +6514,7 @@ func (cl *CharList) clsn(getter *Char, proj bool) { } vo := int32(100) c.playSound(f, false, false, sg, hd.guardsound[1], - -1, vo, 0, 1, &getter.pos[0], true) + -1, vo, 0, 1, getter.localscl, &getter.pos[0], true) } if hitType > 0 { c.powerAdd(hd.guardgetpower) diff --git a/src/script.go b/src/script.go index faf9d5508..770c62193 100644 --- a/src/script.go +++ b/src/script.go @@ -443,6 +443,7 @@ func systemScriptInit(l *lua.LState) { var g, n, ch, vo int32 = -1, 0, -1, 100 var p, fr float32 = 0, 1 x := &sys.chars[pn-1][0].pos[0] + ls := sys.chars[pn-1][0].localscl if l.GetTop() >= 2 { g = int32(numArg(l, 2)) } @@ -470,7 +471,7 @@ func systemScriptInit(l *lua.LState) { if l.GetTop() >= 10 { p = float32(numArg(l, 10)) } - sys.chars[pn-1][0].playSound(f, lw, lp, g, n, ch, vo, p, fr, x, false) + sys.chars[pn-1][0].playSound(f, lw, lp, g, n, ch, vo, p, fr, ls, x, false) return 0 }) luaRegister(l, "charSndStop", func(l *lua.LState) int { @@ -1300,7 +1301,7 @@ func systemScriptInit(l *lua.LState) { var s string var joy, min, max int = 0, 0, len(joystick) if l.GetTop() >= 1 { - min = int(Clamp(int32(numArg(l, 1)), 0, int32(len(joystick) - 1))) + min = int(Clamp(int32(numArg(l, 1)), 0, int32(len(joystick)-1))) max = min + 1 } for joy = min; joy < max; joy++ { diff --git a/src/sound.go b/src/sound.go index 8bf30bd56..ded1ed184 100644 --- a/src/sound.go +++ b/src/sound.go @@ -350,18 +350,8 @@ func (s *SoundEffect) Stream(samples [][2]float64) (n int, ok bool) { } sc := sys.panningRange / 100 of := (100 - sys.panningRange) / 200 - lv = s.volume * 2 * (r*sc + of) - rv = s.volume * 2 * ((1-r)*sc + of) - if lv > 512 { - lv = 512 - } else if lv < 0 { - lv = 0 - } - if rv > 512 { - rv = 512 - } else if rv < 0 { - rv = 0 - } + lv = ClampF(s.volume*2*(r*sc+of), 0, 512) + rv = ClampF(s.volume*2*((1-r)*sc+of), 0, 512) } n, ok = s.streamer.Stream(samples)