Downloads containing eznokstella.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Nokstella, Eternal City ThunDerDraGon Capture the flag N/A Download file

File preview

const bool MLLESetupSuccessful = MLLE::Setup(); ///@MLLE-Generated
#include "MLLE-Include-1.8.asc" ///@MLLE-Generated
#pragma require "eznokstella-MLLE-Data-1.j2l" ///@MLLE-Generated
#pragma require "eznokstella.j2l" ///@MLLE-Generated
#pragma require "fog.png"
#pragma require "moonglow.png"
#pragma require "aura.png"

void onLevelReload() {
	MLLE::SpawnOffgridsLocal();
	MLLE::ReapplyPalette();
}

void loadAssets(string filename, uint index) {
	jjCOLORMAP asset(filename);
	jjAnimSets[ANIM::CUSTOM[index]].load(
			asset,
			frameWidth: asset.width,
			frameHeight: asset.height
	);
}
void loadAssets16(string filename, uint index, const jjPAL &in palette = jjPalette) {
	jjPIXELMAP asset(filename, palette);
	jjAnimSets[ANIM::CUSTOM[index]].load(
			asset,
			frameWidth: asset.width,
			frameHeight: asset.height
	);
}

void onLevelLoad() {
	loadAssets16("moonglow.png", 0);
	loadAssets("fog.png", 1);
	loadAssets("aura.png", 2);
	jjPAL pal = jjPalette;
	pal.color[166].setHSL(0, 0, 0);
	pal.apply();
	jjAnimSets[ANIM::RAPIER].load();
	jjObjectPresets[OBJECT::ELECTROBULLETPU].eventID = OBJECT::ELECTROBULLET;
	jjObjectPresets[OBJECT::CTFBASE].behavior = BossCTFBase();
	jjObjectPresets[OBJECT::REDSPRING].behavior = RecolouredSpring();
	jjObjectPresets[OBJECT::GREENSPRING].behavior = RecolouredSpring();
	jjObjectPresets[OBJECT::BLUESPRING].behavior = RecolouredSpring();
	for (int i = 1; i < 255; i++) {
		jjOBJ@ preset = jjObjectPresets[i];
		if (preset.playerHandling == HANDLING::PICKUP && preset.eventID != OBJECT::FULLENERGY) {
			preset.behavior = CannotBeShotDown(preset.behavior);
		}
	}
}

class BossCTFBase : jjBEHAVIORINTERFACE {
	void onBehave(jjOBJ@ obj) {
		obj.behave(BEHAVIOR::FLAG, false);
	}
	void onDraw(jjOBJ@ obj) {
		jjDrawSprite(obj.xOrg, obj.yOrg+17, ANIM::FLAG, 1, (obj.var[1] == 0) ? 0 : 1, (obj.xOrg < (jjLayerWidth[4]/2)*32) ? -1 : 1); //Base
		jjDrawSprite((obj.xOrg < (jjLayerWidth[4]/2)*32) ? obj.xOrg + 60 : obj.xOrg - 60, //Character
			obj.yOrg - 10 + 10*jjSin(jjGameTicks*3), 
			ANIM::RAPIER, 2, 
			int((jjGameTicks%(8*9))/9), 
			(obj.xOrg < (jjLayerWidth[4]/2)*32) ? 1 : -1, SPRITE::TRANSLUCENTMAPPING
			,(obj.var[1] == 0) ? 0 : 2);
		if (obj.var[0] == 0)
			jjDrawSprite(obj.xOrg, obj.yOrg+17, ANIM::FLAG, (obj.var[1] == 0) ? 3 : 7, int((jjGameTicks%(8*7))/7), (obj.xOrg < (jjLayerWidth[4]/2)*32) ? -1 : 1); //Flag
	}
}

class RecolouredSpring : jjBEHAVIORINTERFACE {
	void onBehave(jjOBJ@ obj) {
		obj.behave(BEHAVIOR::SPRING, false);
	}
	void onDraw(jjOBJ@ obj) {
		jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::MAPPING, 3);
	}
}

class CannotBeShotDown : jjBEHAVIORINTERFACE {
	CannotBeShotDown(const jjBEHAVIOR &in behavior) {
		originalBehavior = behavior;
	}
	void onBehave(jjOBJ@ obj) {
		obj.behave(originalBehavior);
		if (obj.state == STATE::FLOATFALL)
			obj.state = STATE::FLOAT;
	}
	bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ player, int force) {
		if (bullet is null) {
			obj.behavior = originalBehavior;
			if (player.objectHit(obj, force, obj.playerHandling))
				return true;
			obj.behavior = this;
		}
		return false;
	}
	private jjBEHAVIOR originalBehavior;
}

void onDrawLayer8(jjPLAYER@ player, jjCANVAS@ canvas) {
	canvas.drawResizedSprite(200, 100, ANIM::CUSTOM[0], 0, 0, 2, 2, SPRITE::NEONGLOW, 100);
	
}

void onDrawLayer4(jjPLAYER@ player, jjCANVAS@ canvas) {
	canvas.drawRotatedSprite(6*32 + 16, 29*32 + 16, ANIM::CUSTOM[2], 0, 0, jjGameTicks*4 ,1, 1, SPRITE::NEONGLOW, 55);
	canvas.drawRotatedSprite(32*183 + 16, 29*32 + 16, ANIM::CUSTOM[2], 0, 0, jjGameTicks*4 ,1, 1, SPRITE::NEONGLOW, 55);
}

void onDrawLayer2(jjPLAYER@ player, jjCANVAS@ canvas) {
	if (player.cameraY > 32*39)
	for (int i = 0; i < 16; i++)
	canvas.drawResizedSprite(-200 + 400*i+(jjGameTicks%800)/2, 62*32, ANIM::CUSTOM[1], 0, 1, 1, 1.5, SPRITE::NEONGLOW, 55);
}

void onLevelBegin() {
	MLLE::SpawnOffgrids();
}