const PULSELEDBASE = 60000.; const FLAKLEDBASE = 61000.; const MINILEDBASE = 62000.; const ROCKETLEDBASE = 63000.; Class PulseGunLED : Actor { Actor base, digits[3], bar; transient PulseGun mygun; Default { +NOGRAVITY; +NOBLOCKMAP; +NOINTERACTION; +DONTSPLASH; Radius .1; Height 0; } override void PostBeginPlay() { SetOrigin((PULSELEDBASE+128,PULSELEDBASE,0),false); SetZ(floorz); roll = 180; angle = 180; double stretch = level.pixelstretch; double halfstretch = (1.+level.pixelstretch)/2.; if ( !base ) { base = Spawn("AmmoLEDScreen",(PULSELEDBASE,PULSELEDBASE-128.,floorz+64./halfstretch)); base.scale.y /= level.pixelstretch; } for ( int i=0; i<3; i++ ) { if ( !digits[i] ) { digits[i] = Spawn("LEDFont",(PULSELEDBASE+1.,PULSELEDBASE-72.+48.*i,floorz+50./halfstretch)); digits[i].scale.y /= level.pixelstretch; } } if ( !bar ) { bar = Spawn("AmmoCountBar",(PULSELEDBASE+1.,PULSELEDBASE-98.,floorz-26./halfstretch)); bar.scale.y /= level.pixelstretch; } } override void Tick() { if ( !mygun ) return; base.SetState(base.SpawnState); int amo = flak_pulsereload?mygun.ClipCount:mygun.Ammo1.Amount; int mamo = flak_pulsereload?mygun.default.ClipCount:mygun.Ammo1.MaxAmount; digits[0].SetState(digits[0].SpawnState+1+((amo/100)%10)); digits[1].SetState(digits[1].SpawnState+1+((amo/10)%10)); digits[2].SetState(digits[2].SpawnState+1+(amo%10)); if ( amo < 10 ) { digits[0].SetShade(Color(255,0,0)); digits[1].SetShade(Color(255,0,0)); digits[2].SetShade(Color(255,0,0)); } else { digits[0].SetShade(Color(0,0,255)); digits[1].SetShade(Color(0,0,255)); digits[2].SetShade(Color(0,0,255)); } bar.scale.x = amo/double(mamo); } } Class FlakCannonLED : Actor { Actor base, digits[3]; transient FlakCannon mygun; Default { +NOGRAVITY; +NOBLOCKMAP; +NOINTERACTION; +DONTSPLASH; Radius .1; Height 0; } override void PostBeginPlay() { SetOrigin((FLAKLEDBASE+64,FLAKLEDBASE,0),false); SetZ(floorz); roll = 180; angle = 180; double stretch = level.pixelstretch; double halfstretch = (1.+level.pixelstretch)/2.; if ( !base ) { base = Spawn("AmmoLEDScreen",(FLAKLEDBASE,FLAKLEDBASE-64.,floorz+32./halfstretch)); base.scale.y /= level.pixelstretch; } for ( int i=0; i<3; i++ ) { if ( !digits[i] ) { digits[i] = Spawn("LEDFont",(FLAKLEDBASE+1.,FLAKLEDBASE-30.+20.*i,floorz+16./halfstretch)); digits[i].scale.y /= level.pixelstretch; } } } override void Tick() { if ( !mygun ) return; base.SetState(base.SpawnState+1); int amo = mygun.Ammo1.Amount; digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10)); digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10)); digits[2].SetState(digits[2].SpawnState+11+(amo%10)); digits[0].SetShade(Color(255,0,0)); digits[1].SetShade(Color(255,0,0)); digits[2].SetShade(Color(255,0,0)); } } Class MinigunLED : Actor { Actor base, digits[3]; transient Minigun mygun; Default { +NOGRAVITY; +NOBLOCKMAP; +NOINTERACTION; +DONTSPLASH; Radius .1; Height 0; } override void PostBeginPlay() { SetOrigin((MINILEDBASE+32,MINILEDBASE,0),false); SetZ(floorz); roll = 180; angle = 180; double stretch = level.pixelstretch; double halfstretch = (1.+level.pixelstretch)/2.; if ( !base ) { base = Spawn("AmmoLEDScreen",(MINILEDBASE,MINILEDBASE-32.,floorz+32./halfstretch)); base.scale.y /= level.pixelstretch; } for ( int i=0; i<3; i++ ) { if ( !digits[i] ) { digits[i] = Spawn("LEDFont",(MINILEDBASE+1.,MINILEDBASE-30.+20.*i,floorz+16./halfstretch)); digits[i].scale.y /= level.pixelstretch; } } } override void Tick() { if ( !mygun ) return; base.SetState(base.SpawnState+2); int amo = mygun.Ammo1.Amount; digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10)); digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10)); digits[2].SetState(digits[2].SpawnState+11+(amo%10)); digits[0].SetShade(Color(255,0,0)); digits[1].SetShade(Color(255,0,0)); digits[2].SetShade(Color(255,0,0)); } } Class UTRocketLauncherLED : Actor { Actor base, digits[3]; transient UTRocketLauncher mygun; override void PostBeginPlay() { SetOrigin((ROCKETLEDBASE+32,ROCKETLEDBASE,0),false); SetZ(floorz); roll = 180; angle = 180; double stretch = level.pixelstretch; double halfstretch = (1.+level.pixelstretch)/2.; if ( !base ) { base = Spawn("AmmoLEDScreen",(ROCKETLEDBASE,ROCKETLEDBASE-32.,floorz+32./halfstretch)); base.scale.y /= level.pixelstretch; } for ( int i=0; i<3; i++ ) { if ( !digits[i] ) { digits[i] = Spawn("LEDFont",(ROCKETLEDBASE+1.,ROCKETLEDBASE-30.+20.*i,floorz+16./halfstretch)); digits[i].scale.y /= level.pixelstretch; } } } override void Tick() { if ( !mygun ) return; base.SetState(base.SpawnState+3); int amo = mygun.Ammo1.Amount; digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10)); digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10)); digits[2].SetState(digits[2].SpawnState+11+(amo%10)); digits[0].SetShade(Color(255,0,0)); digits[1].SetShade(Color(255,0,0)); digits[2].SetShade(Color(255,0,0)); } } Class LEDFont : Actor { Default { RenderStyle "Shaded"; StencilColor "FF 00 00"; Radius .1; Height 0.; RenderRadius 256; +NOBLOCKMAP; +NOGRAVITY; +NOINTERACTION; +DONTSPLASH; +WALLSPRITE; } States { Spawn: TNT1 A -1; LFN1 ABCDEFGHIJ -1 Bright; LFN2 ABCDEFGHIJ -1 Bright; Stop; } } Class AmmoCountBar : Actor { Default { Radius .1; Height 0.; RenderRadius 256; +NOBLOCKMAP; +NOGRAVITY; +NOINTERACTION; +DONTSPLASH; +WALLSPRITE; } States { Spawn: AMCB A -1 Bright; Stop; } } Class AmmoLEDScreen : Actor { Default { Radius .1; Height 0.; RenderRadius 256; +NOBLOCKMAP; +NOGRAVITY; +NOINTERACTION; +DONTSPLASH; +WALLSPRITE; } States { Spawn: AMLD ABCD -1 Bright; Stop; } }