diff --git a/zscript/spraycan.zs b/zscript/spraycan.zs index e4f6366..950f2d3 100644 --- a/zscript/spraycan.zs +++ b/zscript/spraycan.zs @@ -174,8 +174,12 @@ class SnekTechSprayer : HDWeapon } goto waiting; + unload: + KSPR A 2 { invoker.CycleSprayPattern(-1); } + goto waiting; + firemode: - KSPR A 2 { invoker.CycleSprayPattern(); } + KSPR A 2 { invoker.CycleSprayPattern(1); } goto waiting; waiting: @@ -299,7 +303,7 @@ class SnekTechSprayer : HDWeapon } } - void CycleSprayPattern() + void CycleSprayPattern(int increment) { // Find the current entry in the list of patterns. String currentPattern = CVar.GetCVar("snektech_spraypattern", owner.player).GetString(); @@ -313,8 +317,11 @@ class SnekTechSprayer : HDWeapon currentIndex = -1; } - // Increment the index. - int newIndex = (currentIndex + 1) % patternList.size(); + // Increment/decrement the index. + int newIndex = (currentIndex + increment) % patternList.size(); + if(newIndex < 0) { + newIndex = patternList.size() - 1; + } // Set the new CVar. currentPattern = patternList[newIndex]; @@ -323,7 +330,14 @@ class SnekTechSprayer : HDWeapon CVar.FindCVar("snektech_spraypattern").SetString(currentPattern); // then update the per-player copy so the help text is correct CVar.GetCVar("snektech_spraypattern", owner.player).SetString(currentPattern); - owner.A_Log("Selected spray pattern: "..currentPattern, true); + + // Print it. + owner.A_Log( + String.format( + "Selected spray pattern: (%d/%d) %s", + newIndex + 1, patternList.size(), + currentPattern), + true); // Current pattern is referenced in the help text, so reset // it. @@ -352,6 +366,7 @@ class SnekTechSprayer : HDWeapon return WEPHELP_FIREMODE .. " Cycle pattern (current: "..currentPattern..").\n".. + WEPHELP_UNLOAD .. " Cycle pattern (backwards).\n".. WEPHELP_ALTFIRE .. " Shake the can.\n".. WEPHELP_FIRE .. " "..messages[messageIndex % messages.Size()].."\n"; }