

It's not directly possible. Two approaches to fake it that I can see:
1) have multiple SFX for one sound, each representing a different "loudness", and then pick depending on distance
2) (hacky and more advanced, but more powerful) use direct memory accesses to rewrite SFX on the fly - see https://www.lexaloffle.com/bbs/?tid=2341


Lazzoak, I'm working on it. Halfway there. Should be done by tomorrow evening.
print("volume="..volume) if (btn(0)) volume-=1 if (btn(1)) volume+=1 volume=mid(-8,volume,8) reload(12800,12800,affectfx*68) for i=0,affectfx-1 do |
If you can do it before me though, that's fine. :)


Complete !
Anything higher than 0 increases volume on all the other stuff.


Pretty sure the start of this code can lead to all kinds of interesting things like change pitch, have percussion only, and change tempo. And of course it could be optimized tons. :)
HOPE THIS HELPS !


@dw817 seriously?
bit={} for i=7,0,-1 do if n>=2^i then bit[i]=1 n-=2^i else bit[i]=0 end end a=bit[1]+bit[2]*2+bit[3]*4 |
if you are not confortable with bit math, don't offer "helper" functions to beginners.
@lazzoak as per @krajzeg link, use bit masking to read/write sound volume.
-- chart sfx volume cls() fillp(0x0f0f) rectfill(0,64,32,64-8,0x1) fillp() -- change to chart another sfx bank local sfx_id=0 -- starting address local mem=0x3200+68*sfx_id for i=0,31 do -- read note local s=peek2(mem) -- bits 9-11 rebased to [0,7] range local vol=shr(band(0x0e00,s),9) -- print curve pset(i,64-vol,5+vol) mem+=2 end |


I just wanted to get it done since no-one had ever provided working P8 source-code to date to change volume - and it works. And 3-stars. Woo hoo ! Someone must've liked it !
Wow, freds72. What an attitude. :D
Haven't your parents ever told you if you don't have anything nice to say, don't say anything at all ? Have I ever said something like what you did to you or anyone else ? Ever ? Don't think so.
Despite your dour attitude, you provided optimization which is the correct SHR. And I thank you for that. I knew it was SHL or SHR, I just have trouble with those. I'll sit down with that later and make a bit-function to help me (mostly) and perhaps others in the future.
As for you lazzoak, glad to help ! Writing that code was a learning experience for me too.
Do you understand the SHR command ? It's more complex than simpler exponent. Here is some information on it:


Ah ! Just wrote up a new bit library and quashed (is that a word ?) the massive code for early bit-handling.
New functions are: + bitget() .. get number w string chars 0-7 + bitmod() .. modify number w string chars 0-7 + bitset() .. set bits in number from chars 0-7 + bitclr() .. clear bits in number from chars 0-7 + bittest().. returns true or false on bit set |
Which leaves only this to read and write volume now:
n=peek(12800+i*68+j) p=bitget(n,"123",1) p+=volume p=mid(0,p,7) n=bitmod(n,p,"123",1) poke(12800+i*68+j,n) |
Here is new cart:


[Please log in to post a comment]