From 216438465f30894158addc6176ff454dc0cfe3f4 Mon Sep 17 00:00:00 2001 From: Jaime Humberto Macias Bustamante Date: Sat, 20 Sep 2025 22:46:57 -0700 Subject: [PATCH 1/2] Improved Tankman Run Script + HScript Warning Updated the tankman run custom class and implemented the hscript warning system --- assets/songs/stress/scripts/tankmenRun.hx | 59 ++++++++++------------ source/funkin/backend/scripting/HScript.hx | 19 +++++++ 2 files changed, 47 insertions(+), 31 deletions(-) diff --git a/assets/songs/stress/scripts/tankmenRun.hx b/assets/songs/stress/scripts/tankmenRun.hx index a7d7a3067..baf9f4381 100644 --- a/assets/songs/stress/scripts/tankmenRun.hx +++ b/assets/songs/stress/scripts/tankmenRun.hx @@ -1,16 +1,18 @@ import flixel.FlxSprite; -var tankmanRun:Array = []; -var grpTankmanRun:FlxTypedGroup = []; +var tankmanGroup:TankmenGroup = { + run: [], + pool: [], + group: new FlxTypedGroup() +} var spawnTimes = []; // [[time, direction]] -var tankmanPool = []; function recycleTankman() { - if(tankmanPool.length == 0) { - return new TankmenBG(); + if(tankmanGroup.pool.length == 0) { + return new TankmenBG(tankmanGroup); } else { - return tankmanPool.shift(); // can be pop but it causes it to be less random + return tankmanGroup.pool.shift(); // can be pop but it causes it to be less random } } @@ -22,9 +24,8 @@ function getTankman(data:Array) { } function postCreate() { - grpTankmanRun = new FlxTypedGroup(); - insert(members.indexOf(gf) - 1, grpTankmanRun); - if(inCutscene) grpTankmanRun.visible = false; + insert(members.indexOf(gf) - 1, tankmanGroup.group); + if(inCutscene) tankmanGroup.group.visible = false; /*var tempTankman:TankmenBG = recycleTankman(); tempTankman.strumTime = 10; @@ -43,7 +44,7 @@ function postCreate() { } function onStartCountdown() { - if(PlayState.instance.seenCutscene) grpTankmanRun.visible = true; + if(PlayState.instance.seenCutscene) tankmanGroup.group.visible = true; } function spawnTankmen() { @@ -54,50 +55,47 @@ function spawnTankmen() { //trace("Spawning Tankman", tankmen.sprite.offset, tankmen.goingRight); - tankmanRun.push(tankmen); - grpTankmanRun.add(tankmen.sprite); + tankmanGroup.run.push(tankmen); + tankmanGroup.group.add(tankmen.sprite); } } function update(elapsed) { spawnTankmen(); - var length = tankmanRun.length; + var length = tankmanGroup.run.length; for(i in 0...length) { var reverseIndex = length - i - 1; - var tankmen = tankmanRun[reverseIndex]; + var tankmen = tankmanGroup.run[reverseIndex]; tankmen.update(elapsed); } } class TankmenBG { + + public var sprite:FlxSprite; + var strumTime = 0; var goingRight = false; var tankSpeed = 0.7; - - var endingOffset = null; - var sprite = null; - + var endingOffset:Float; var killed = false; + var grp:TankmenGroup; // The reference to the current pool - function new() { - this.sprite = new FlxSprite(); - var sprite = this.sprite; + function new(grp:TankmenGroup) { + this.grp = grp; + sprite = new FlxSprite(); sprite.frames = Paths.getSparrowAtlas('stages/tank/tankmanKilled1'); sprite.antialiasing = true; sprite.animation.addByPrefix('run', 'tankman running', 24, true); - sprite.animation.play('run'); - sprite.updateHitbox(); - sprite.setGraphicSize(Std.int(sprite.width * 0.8)); sprite.updateHitbox(); } - function resetShit(x, y, isGoingRight) { - var sprite = this.sprite; + function resetShit(x:Float, y:Float, isGoingRight:Bool) { sprite.revive(); sprite.setPosition(x, y); sprite.offset.set(0, 0); @@ -114,7 +112,6 @@ class TankmenBG { } function update(elapsed) { - var sprite = this.sprite; sprite.visible = !(sprite.x >= FlxG.width * 1.5 || sprite.x <= FlxG.width * -0.5); if (sprite.animation.curAnim.name == 'run') @@ -133,10 +130,10 @@ class TankmenBG { sprite.animation.play('shot'); sprite.animation.finishCallback = function(_) { killed = true; - grpTankmanRun.remove(sprite, true); + grp.group.remove(sprite, true); sprite.kill(); - tankmanPool.push(this); - tankmanRun.remove(this); + grp.pool.push(this); + grp.run.remove(this); } if (goingRight) @@ -146,4 +143,4 @@ class TankmenBG { } } } -} \ No newline at end of file +} diff --git a/source/funkin/backend/scripting/HScript.hx b/source/funkin/backend/scripting/HScript.hx index 1b9238bb3..c3656478c 100644 --- a/source/funkin/backend/scripting/HScript.hx +++ b/source/funkin/backend/scripting/HScript.hx @@ -34,6 +34,7 @@ class HScript extends Script { __importedPaths = [path]; interp.errorHandler = _errorHandler; + interp.warnHandler = _warnHandler; interp.importFailedCallback = importFailedCallback; interp.staticVariables = Script.staticVariables; interp.allowStaticVariables = interp.allowPublicVariables = true; @@ -117,6 +118,24 @@ class HScript extends Script { ], ERROR); } + private function _warnHandler(error:Error) { + var fileName = error.origin; + var oldfn = '$fileName:${error.line}: '; + if(remappedNames.exists(fileName)) + fileName = remappedNames.get(fileName); + var fn = '$fileName:${error.line}: '; + var err = error.toString(); + while(err.startsWith(oldfn) || err.startsWith(fn)) { + if (err.startsWith(oldfn)) err = err.substr(oldfn.length); + if (err.startsWith(fn)) err = err.substr(fn.length); + } + + Logs.traceColored([ + Logs.logText(fn, GREEN), + Logs.logText(err, YELLOW) + ], WARNING); + } + public override function setParent(parent:Dynamic) { interp.scriptObject = parent; } From 7334c7fd6aceedf16429f3f4f19afb9afbfb5ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=8D=9A=7ENex?= <87421482+NexIsDumb@users.noreply.github.com> Date: Sun, 21 Sep 2025 16:56:51 +0200 Subject: [PATCH 2/2] dont mind me --- assets/songs/stress/scripts/tankmenRun.hx | 27 ++++++++--------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/assets/songs/stress/scripts/tankmenRun.hx b/assets/songs/stress/scripts/tankmenRun.hx index baf9f4381..378483db4 100644 --- a/assets/songs/stress/scripts/tankmenRun.hx +++ b/assets/songs/stress/scripts/tankmenRun.hx @@ -1,20 +1,14 @@ import flixel.FlxSprite; +var spawnTimes = []; // [[time, direction]] var tankmanGroup:TankmenGroup = { - run: [], + run: [], pool: [], group: new FlxTypedGroup() } -var spawnTimes = []; // [[time, direction]] - -function recycleTankman() { - if(tankmanGroup.pool.length == 0) { - return new TankmenBG(tankmanGroup); - } else { - return tankmanGroup.pool.shift(); // can be pop but it causes it to be less random - } -} +function recycleTankman() + return tankmanGroup.pool.length == 0 ? new TankmenBG(tankmanGroup) : tankmanGroup.pool.shift(); // can be pop but it causes it to be less random function getTankman(data:Array) { var tankman:TankmenBG = recycleTankman(); @@ -25,7 +19,7 @@ function getTankman(data:Array) { function postCreate() { insert(members.indexOf(gf) - 1, tankmanGroup.group); - if(inCutscene) tankmanGroup.group.visible = false; + if (inCutscene) tankmanGroup.group.visible = false; /*var tempTankman:TankmenBG = recycleTankman(); tempTankman.strumTime = 10; @@ -43,9 +37,8 @@ function postCreate() { //spawnTimes.reverse(); // no need to reverse it since the notes are already reversed } -function onStartCountdown() { - if(PlayState.instance.seenCutscene) tankmanGroup.group.visible = true; -} +function onStartCountdown() + if (PlayState.instance.seenCutscene) tankmanGroup.group.visible = true; function spawnTankmen() { var time = Conductor.songPosition; @@ -64,7 +57,7 @@ function update(elapsed) { spawnTankmen(); var length = tankmanGroup.run.length; - for(i in 0...length) { + for (i in 0...length) { var reverseIndex = length - i - 1; var tankmen = tankmanGroup.run[reverseIndex]; tankmen.update(elapsed); @@ -72,7 +65,6 @@ function update(elapsed) { } class TankmenBG { - public var sprite:FlxSprite; var strumTime = 0; @@ -121,8 +113,7 @@ class TankmenBG { if (goingRight) { endDirection = (FlxG.width * 0.02) - endingOffset; sprite.x = (endDirection + (Conductor.songPosition - strumTime) * tankSpeed); - } - else sprite.x = (endDirection - (Conductor.songPosition - strumTime) * tankSpeed); + } else sprite.x = (endDirection - (Conductor.songPosition - strumTime) * tankSpeed); } if (Conductor.songPosition > strumTime)