class DukeMoney : DukeActor { default { spriteset "MONEY", "MONEY1"; } override void Initialize(DukeActor spawner) { self.scale = (0.125, 0.125); self.counter = random(0, 2047); self.cstat = self.randomFlip(); self.angle = frandom(0, 360); self.ChangeStat(STAT_MISC); } override void Tick() { let sectp = self.sector; if (self.spriteSetIndex == 1) { double x; [x, self.floorz] = sectp.getSlopes(self.pos.XY); self.vel.Z = self.floorz; return; } self.vel.X = frandom(0, 0.5) + Raze.BobVal(self.counter) * 2; self.counter += random(0, 63); if ((self.counter & 2047) > 512 && (self.counter & 2047) < 1596) { if (sectp.lotag == ST_2_UNDERWATER) { if (self.vel.Z < 0.25) self.vel.Z += gs.gravity / 32. + frandom(0, 1/32.); } else if (self.vel.Z < 0.5625) self.vel.Z += gs.gravity / 32. + frandom(0, 1 / 32.); } self.DoMove(CLIPMASK0); if ( random(0, 3) == 0) self.SetPosition(self.pos); if (self.sector == null) { self.Destroy(); return; } double x, l; [x, l] = sectp.getSlopes(self.pos.XY); if (self.pos.Z > l) { self.pos.Z = l; self.insertspriteq(); self.setSpriteSetImage(1); DukeStatIterator it; for (let aa = it.First(STAT_MISC); aa; aa = it.Next()) { if (aa.bBLOODY) { double dist = (aa.pos.XY - self.pos.XY).Length(); if (dist < 348/16.) { self.pal = 2; break; } } } } } } class DukeMail : DukeMoney { default { spriteset "MAIL", "MAIL1"; } } class DukePaper : DukeMoney { default { spriteset "PAPER", "PAPER1"; } } class RedneckFeather : DukeMoney { default { spriteset "FEATHER", "FEATHER1"; } override void Tick() { Super.Tick(); if (self.sector.lotag == 800) { if ((self.pos.Z >= self.sector.floorz - 8) || self.spritesetindex == 1) self.Destroy(); } } }