Pre-stream whatever.
This commit is contained in:
parent
13a99783b3
commit
c830efa728
3
TODO.md
3
TODO.md
@ -14,5 +14,8 @@
|
||||
- ~~Caco plush sprite scaling~~
|
||||
- ~~Frag counter in loadout starts with no battery~~
|
||||
- ~~Organize source_data~~
|
||||
- ~~Spraycan spawn CVars~~
|
||||
- ~~Spraycan bulk~~
|
||||
|
||||
- More spray patterns
|
||||
- Loadout code descriptions (hdweapon.loadoutcodes)
|
||||
|
@ -1,2 +1,2 @@
|
||||
server int snektech_spawnflags = 3;
|
||||
server int snektech_spawnflags = 11;
|
||||
user string snektech_spraypattern = "SnekSpray_TransPride";
|
||||
|
@ -10,5 +10,6 @@ OptionMenu "SnekTechMenu"
|
||||
FlagOption "Gretchen Counter", "snektech_spawnflags", "YesNo", 0
|
||||
FlagOption "Wiring Bypass Kit", "snektech_spawnflags", "YesNo", 1
|
||||
FlagOption "Cacodemon Plushie", "snektech_spawnflags", "YesNo", 2
|
||||
FlagOption "Spraypaint Can", "snektech_spawnflags", "YesNo", 3
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
sprites/spraycan/kspra0.png
Normal file
BIN
sprites/spraycan/kspra0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.3 KiB |
BIN
sprites/spraycan/ksprb0.png
Normal file
BIN
sprites/spraycan/ksprb0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
BIN
sprites/spraycan/kspya0.png
Normal file
BIN
sprites/spraycan/kspya0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 KiB |
BIN
sprites/spraycan/kspyb0.png
Normal file
BIN
sprites/spraycan/kspyb0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.8 KiB |
@ -81,6 +81,11 @@ class SnekTechEventHandler : EventHandler
|
||||
e.Thing,
|
||||
SNEKTECH_CACOPLUSHIE,
|
||||
"KiriCacodemonPlushie");
|
||||
|
||||
DoSnekTechBackpackSpawnCheck(
|
||||
e.Thing,
|
||||
SNEKTECH_SPRAYCAN,
|
||||
"Sprayer");
|
||||
}
|
||||
|
||||
override void CheckReplacement(ReplaceEvent e)
|
||||
@ -107,6 +112,8 @@ class SnekTechEventHandler : EventHandler
|
||||
SNEKTECH_CACOPLUSHIE,
|
||||
"BlurSphere", "KiriCacodemonPlushie",
|
||||
6, e);
|
||||
|
||||
// Note: No replacements for spray cans.
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
|
||||
// FIXME: Make consts and enums consistent formatting.
|
||||
// FIXME: Add bulk.
|
||||
|
||||
const KIRI_SPRAY_DISTANCE = 96;
|
||||
const KIRI_SPRAY_SHAKEANIM_MAXANGLE = 20.0;
|
||||
@ -7,6 +8,7 @@ const KIRI_SPRAY_MAXPAINT = 50;
|
||||
const KIRI_SPRAY_MAXPRESSURE = 100;
|
||||
const KIRI_SPRAY_PRESSUREBUILDSCALE = 20;
|
||||
const KIRI_SPRAY_PRESSURE_PER_USE = (KIRI_SPRAY_MAXPRESSURE / 2);
|
||||
const KIRI_SPRAY_PRESSURE_DECAY_RATE = 0.1;
|
||||
|
||||
const HDLD_KIRI_SPRAYCAN = "ksp";
|
||||
|
||||
@ -34,10 +36,13 @@ class Sprayer : HDWeapon
|
||||
// inventory.icon "KSPRB0";
|
||||
inventory.pickupsound "kiri/spraycan_rattle";
|
||||
inventory.pickupmessage "Picked up some spraypaint cans.";
|
||||
// inventory.amount 1;
|
||||
// inventory.maxamount 100;
|
||||
|
||||
inventory.amount 1;
|
||||
inventory.maxamount 100;
|
||||
|
||||
hdweapon.refid HDLD_KIRI_SPRAYCAN;
|
||||
|
||||
tag "Spraypaint Can";
|
||||
}
|
||||
|
||||
states
|
||||
@ -67,22 +72,25 @@ class Sprayer : HDWeapon
|
||||
// Taper off pressure increase amount based on how much
|
||||
// pressure is in there already.
|
||||
float pressureIncreaseScale = 1.0 - (
|
||||
float(invoker.weaponstatus[KIRI_SPRAY_WS_PRESSURE]) /
|
||||
float(invoker.GetPressure()) /
|
||||
float(KIRI_SPRAY_MAXPRESSURE));
|
||||
pressureIncreaseScale *= pressureIncreaseScale;
|
||||
|
||||
// Add pressure.
|
||||
invoker.weaponstatus[KIRI_SPRAY_WS_PRESSURE] +=
|
||||
int pressure = invoker.GetPressure();
|
||||
pressure +=
|
||||
random(0,
|
||||
KIRI_SPRAY_PRESSUREBUILDSCALE
|
||||
* invoker.weaponstatus[KIRI_SPRAY_WS_PAINT]
|
||||
/ KIRI_SPRAY_MAXPAINT);
|
||||
|
||||
// Cap pressure amount.
|
||||
if(invoker.weaponstatus[KIRI_SPRAY_WS_PRESSURE] > KIRI_SPRAY_MAXPRESSURE) {
|
||||
invoker.weaponstatus[KIRI_SPRAY_WS_PRESSURE] = KIRI_SPRAY_MAXPRESSURE;
|
||||
if(pressure > KIRI_SPRAY_MAXPRESSURE) {
|
||||
pressure = KIRI_SPRAY_MAXPRESSURE;
|
||||
}
|
||||
|
||||
invoker.SetPressure(pressure);
|
||||
|
||||
}
|
||||
KSPR A 1 offset(0, 60) { A_OverlayRotate(0, sin(level.time * 5.0) * KIRI_SPRAY_SHAKEANIM_MAXANGLE * 2.0/3.0); }
|
||||
KSPR A 1 offset(0, 40) { A_OverlayRotate(0, sin(level.time * 5.0) * KIRI_SPRAY_SHAKEANIM_MAXANGLE * 1.0/3.0); }
|
||||
@ -92,7 +100,7 @@ class Sprayer : HDWeapon
|
||||
fire:
|
||||
KSPR A 2 {
|
||||
|
||||
if(invoker.weaponstatus[KIRI_SPRAY_WS_PRESSURE] < KIRI_SPRAY_PRESSURE_PER_USE) {
|
||||
if(invoker.GetPressure() < KIRI_SPRAY_PRESSURE_PER_USE) {
|
||||
|
||||
invoker.owner.A_Log("Not enough pressure to spray.");
|
||||
|
||||
@ -151,7 +159,7 @@ class Sprayer : HDWeapon
|
||||
spawner.actualDecalName = actualDecalName;
|
||||
spawner.master = invoker.owner;
|
||||
|
||||
invoker.weaponstatus[KIRI_SPRAY_WS_PRESSURE] -= KIRI_SPRAY_PRESSURE_PER_USE;
|
||||
invoker.SetPressure(invoker.GetPressure() - KIRI_SPRAY_PRESSURE_PER_USE);
|
||||
invoker.weaponstatus[KIRI_SPRAY_WS_PAINT] -= 1;
|
||||
}
|
||||
|
||||
@ -195,11 +203,66 @@ class Sprayer : HDWeapon
|
||||
return GetSpareWeaponRegular(newowner, reverse, doselect);
|
||||
}
|
||||
|
||||
// Why do we store pressure as this weird equation?
|
||||
//
|
||||
// Pressure is stored as a time since the a hypothetical last
|
||||
// "fully charged" time, based on the level time and pressure
|
||||
// decay rate.
|
||||
//
|
||||
// This way we can decay pressure without ticking, important for
|
||||
// spare weapons and stuff in backpacks.
|
||||
int GetPressure() const
|
||||
{
|
||||
int time = level.TotalTime;
|
||||
int lastChargedTime = weaponstatus[KIRI_SPRAY_WS_PRESSURE];
|
||||
int pressure = int(
|
||||
float(KIRI_SPRAY_MAXPRESSURE) -
|
||||
float(time - lastChargedTime) * KIRI_SPRAY_PRESSURE_DECAY_RATE);
|
||||
|
||||
if(pressure > KIRI_SPRAY_MAXPRESSURE) {
|
||||
pressure = KIRI_SPRAY_MAXPRESSURE;
|
||||
}
|
||||
|
||||
if(pressure < 0) {
|
||||
pressure = 0;
|
||||
}
|
||||
|
||||
return pressure;
|
||||
}
|
||||
|
||||
void SetPressure(int pressure)
|
||||
{
|
||||
if(pressure > KIRI_SPRAY_MAXPRESSURE) {
|
||||
pressure = KIRI_SPRAY_MAXPRESSURE;
|
||||
}
|
||||
|
||||
if(pressure < 0) {
|
||||
pressure = 0;
|
||||
}
|
||||
|
||||
int time = level.TotalTime;
|
||||
int lastChargedTime = round(
|
||||
float(pressure - KIRI_SPRAY_MAXPRESSURE) / float(KIRI_SPRAY_PRESSURE_DECAY_RATE) + time);
|
||||
|
||||
weaponstatus[KIRI_SPRAY_WS_PRESSURE] = lastChargedTime;
|
||||
}
|
||||
|
||||
void ResetPressure()
|
||||
{
|
||||
int resetValue = -int(float(KIRI_SPRAY_MAXPRESSURE) / float(KIRI_SPRAY_PRESSURE_DECAY_RATE));
|
||||
weaponstatus[KIRI_SPRAY_WS_PRESSURE] = resetValue;
|
||||
}
|
||||
|
||||
override void Consolidate()
|
||||
{
|
||||
ResetPressure();
|
||||
}
|
||||
|
||||
override void InitializeWepStats(bool idfa)
|
||||
{
|
||||
super.InitializeWepStats(idfa);
|
||||
|
||||
weaponstatus[KIRI_SPRAY_WS_PRESSURE] = 0;
|
||||
SetPressure(0);
|
||||
|
||||
// Add a little bit of randomness to the amount of paint in
|
||||
// the can.
|
||||
@ -208,26 +271,13 @@ class Sprayer : HDWeapon
|
||||
- random(0, KIRI_SPRAY_MAXPAINT / 10);
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
super.Tick();
|
||||
|
||||
// Gradually decay pressure.
|
||||
if(random(0, 256) < 4) {
|
||||
weaponstatus[KIRI_SPRAY_WS_PRESSURE] -= 1;
|
||||
if(weaponstatus[KIRI_SPRAY_WS_PRESSURE] < 0) {
|
||||
weaponstatus[KIRI_SPRAY_WS_PRESSURE] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override void DrawHUDStuff(
|
||||
HDStatusBar statusBar, HDWeapon weapon,
|
||||
HDPlayerPawn pawn)
|
||||
{
|
||||
// Current pressure (top bar).
|
||||
statusBar.DrawWepNum(
|
||||
weaponstatus[KIRI_SPRAY_WS_PRESSURE],
|
||||
GetPressure(),
|
||||
KIRI_SPRAY_MAXPRESSURE, posy:-10);
|
||||
|
||||
// Total paint remaining (bottom bar).
|
||||
@ -274,11 +324,16 @@ class Sprayer : HDWeapon
|
||||
A_SetHelpText();
|
||||
}
|
||||
|
||||
override double WeaponBulk()
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
|
||||
override String GetHelpText()
|
||||
{
|
||||
super.GetHelpText();
|
||||
|
||||
int messageIndex = level.time; //(level.time / 60);
|
||||
int messageIndex = level.time;
|
||||
Array<String> messages = {
|
||||
"Deface the tyrant's property.",
|
||||
"Engage in civil disobedience.",
|
||||
|
Loading…
Reference in New Issue
Block a user