Downloads containing VDom3battle.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Min* Commotion Violet CLM Battle N/A Download file

File preview

#include "MLLE-Include-1.5w.asc" ///@MLLE-Generated
#pragma require "vdom.j2t" ///@MLLE-Generated
#pragma require "VDom3battle.j2l" ///@MLLE-Generated
#include "ArcaneWeapon7.asc" ///@MLLE-Generated
#pragma require "ArcaneWeapon7.asc" ///@MLLE-Generated
#include "ArcaneWeapon4.asc" ///@MLLE-Generated
#pragma require "ArcaneWeapon4.asc" ///@MLLE-Generated
#include "BubbleGun.asc"
const bool MLLESetupSuccessful = MLLE::Setup(array<MLLEWeaponApply@> = {null, null, null, ArcaneWeapons::MortarLauncher::Weapon(), null, null, ArcaneWeapons::LightningRod::Weapon(), null, null});

///@SaveAndRunArgs -battle -server

bool onDrawAmmo(jjPLAYER@ player, jjCANVAS@ canvas) {
	return MLLE::WeaponHook.drawAmmo(player, canvas);
}

void onLevelReload() { MLLE::Palette.apply(); }
void onLevelLoad() {
	jjObjectPresets[OBJECT::TNTAMMO3].scriptedCollisions = true;
	
	BubbleGun::MyBubble().Apply(WEAPON::BOUNCER, MLLE::WeaponHook);
	
	jjANIMATION@ sparks = jjAnimations[jjAnimSets[ANIM::AMMO] + 75];
	for (uint i = 0; i < sparks.frameCount; ++i) {
		jjANIMFRAME@ frame = jjAnimFrames[sparks + i];
		jjPIXELMAP image(frame);
		for (uint x = 0; x < image.width; ++x)
			for (uint y = 0; y < image.height; ++y)
				if (image[x,y] != 0)
					image[x,y] += 8;
		image.save(frame);
	}
			
	jjObjectPresets[OBJECT::REDSPRING].ySpeed = -40;
	jjANIMATION@ redSpring = jjAnimations[jjObjectPresets[OBJECT::REDSPRING].curAnim];
	for (uint i = 0; i < redSpring.frameCount; ++i) {
		jjANIMFRAME@ frame = jjAnimFrames[redSpring + i];
		jjPIXELMAP image(frame);
		for (uint x = 0; x < image.width; ++x)
			for (uint y = 0; y < image.height; ++y)
				if (image[x,y] & ~7 == 24)
					image[x,y] += 48;
		image.save(frame);
	}
	
	jjObjectPresets[OBJECT::BOUNCERPOWERUP].behavior = BEHAVIOR::FISH;
}

array<int> fastCustomSpringSpeeds(jjLocalPlayerCount, 0);
void onPlayer(jjPLAYER@ player) {
	if (player.ySpeed < -32.f) {
		fastCustomSpringSpeeds[player.localPlayerID] = int(ceil((player.ySpeed + 32.f) / -0.125f));
	} else if (fastCustomSpringSpeeds[player.localPlayerID] != 0) {
		if (player.ySpeed < -31.f) {
				fastCustomSpringSpeeds[player.localPlayerID]--;
				player.ySpeed = -32.f;
		} else {
				fastCustomSpringSpeeds[player.localPlayerID] = 0;
		}
	}
}


namespace BubbleGun {
	class MyBubble : Weapon {
		void onBehave(jjOBJ@ obj) override {
			Weapon::onBehave(obj);
			obj.behavior = NoBounce;
		}
	}
	void NoBounce(jjOBJ@ obj) {
		const bool right = obj.xSpeed >= 0;
		obj.behave(Behavior);
		if (right != (obj.xSpeed >= 0))
			obj.var[7] = -obj.var[7];
	}
}


void onMain() {
	for (int i = jjObjectCount; --i != 0;)
		if (jjObjects[i].isActive && jjObjects[i].yPos < 53)
			jjDeleteObject(i);
}