nflags=klass() function nflags:init(o) self.c = o.c or 0 -- custom self.e = o.e or 0 -- effect self.v = o.v or 0 -- volume self.w = o.w or 0 -- waveform self.p = o.p or 0 -- pitch self:validate() end function nflags:validate() local c,e,v,w,p =self.c,self.e,self.v,self.w,self.p assert_range(c,0,2,"custom") assert_range(e,0,8,"effect") assert_range(v,0,8,"volume") assert_range(w,0,8,"waveform") assert_range(p,0,64,"pitch") end function nflags:encode() self:validate() local c,e,v,w,p =self.c,self.e,self.v,self.w,self.p c &= 0xffff e &= 0xffff v &= 0xffff w &= 0xffff p &= 0xffff return ( (c << 15) | (e << 12) | (v << 9) | (w << 6) | (p) ) end