Downloads containing mlfalke.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Falkelope cooba Capture the flag N/A Download file

File preview

const bool MLLESetupSuccessful = MLLE::Setup(array<MLLEWeaponApply@> = {null, null, se::FireworkMLLEWrapper(), null, null, null, null, null, se::EnergyBlastMLLEWrapper()}); ///@MLLE-Generated
#include "MLLE-Include-1.8w.asc" ///@MLLE-Generated
#pragma require "mlfalke-MLLE-Data-3.j2l" ///@MLLE-Generated
#pragma require "mlfalke-MLLE-Data-2.j2l" ///@MLLE-Generated
#pragma require "mlfalke-MLLE-Data-1.j2l" ///@MLLE-Generated
#pragma require "CastUlt-Night.j2t" ///@MLLE-Generated
#pragma require "IC - Sluggion1.j2t" ///@MLLE-Generated
#pragma require "BattleshipsO.j2t" ///@MLLE-Generated
#pragma require "Lowaa.j2t" ///@MLLE-Generated
#pragma require "Labrat1.j2t" ///@MLLE-Generated
#pragma require "Tube.j2t" ///@MLLE-Generated
#pragma require "mlfalke.j2l" ///@MLLE-Generated
#include "SEenergyblast-mlle.asc" ///@MLLE-Generated
#pragma require "SEenergyblast-mlle.asc" ///@MLLE-Generated
#include "SEfirework-mlle.asc" ///@MLLE-Generated
#pragma require "SEfirework-mlle.asc" ///@MLLE-Generated
///@SaveAndRunArgs -server -capture ///@MLLE-Generated

/*******************************
A 2024 Mystic Legends Release!
http://www.mysticlegends.org
/******************************/

void onLevelLoad() {
	jjObjectPresets[OBJECT::BUTTERFLY].behavior = mdis;
	
	jjObjectPresets[OBJECT::MILK].behavior = Glug();
	jjObjectPresets[OBJECT::MILK].scriptedCollisions = true;
	
	//jjObjectPresets[OBJECT::TNTAMMO3].behavior = invis;	
	jjObjectPresets[OBJECT::GUNBARREL].behavior = steel;
	
	jjWeapons[WEAPON::GUN8].spread = SPREAD::NORMAL;
	jjObjectPresets[OBJECT::FIREBALLBULLETPU].var[6] = 8 + 16;
	jjObjectPresets[OBJECT::FIREBALLBULLETPU].lightType = LIGHT::POINT2;
	
	//thanks Violet
    array<uint8> recolor(256);
    for (uint i = 15; i < 88; ++i) //don't change most sprite colors
        recolor[i] = i;
    for (uint i = 88; i < 96; ++i) //purple to green
        recolor[i] = i - 8;
    for (uint i = 32; i < 40; ++i) //blue to green
        recolor[i] = i + 48;
    for (uint i = 24; i < 30; ++i) //red to orange
        recolor[i] = i + 16;
    for (uint i = 80; i < 88; ++i) //teal to steel
        recolor[i] = i + 32;
    recolorAnimation(recolor, jjAnimations[jjAnimSets[ANIM::AMMO] + 63]); //bullet
    recolorAnimation(recolor, jjAnimations[jjAnimSets[ANIM::AMMO] + 61]); //pickup
    recolorAnimation(recolor, jjAnimations[jjAnimSets[ANIM::PICKUPS] + 66]); //monitor
    
    recolorAnimation(recolor, jjAnimations[jjAnimSets[ANIM::PICKUPS] + 6]); //barrel shards
    recolorAnimation(recolor, jjAnimations[jjAnimSets[ANIM::PICKUPS] + 7]);
    recolorAnimation(recolor, jjAnimations[jjAnimSets[ANIM::PICKUPS] + 8]);
    recolorAnimation(recolor, jjAnimations[jjAnimSets[ANIM::PICKUPS] + 9]);
    
    //plat
	jjOBJ@ o = jjObjects[jjAddObject(OBJECT::FRUITPLATFORM, 66*32, 7*32 + 16)];
	o.var[3] = 1;
	o.var[4] = 1;
	o.state = STATE::ACTION;
	o.var[1] = 2;
	o.var[2] = 13;
	o.frameID = 0;
	o.determineCurFrame();
	o.var[0] = 0;
	o.var[5] = o.var[1];
	o.counter = jjGameTicks;
	o.noHit = 1;
}

void recolorAnimation(const array<uint8>& recolor, jjANIMATION@ anim) {
    for (uint i = 0; i < anim.frameCount; ++i) {
        jjANIMFRAME@ frame = jjAnimFrames[anim + i];
        jjPIXELMAP(frame).recolor(recolor).save(frame);
    }
}

void mdis(jjOBJ@ obj) {
	obj.behave(BEHAVIOR::BUTTERFLY, false);
	obj.deactivates = obj.triggersTNT = obj.isTarget = obj.isBlastable = obj.isFreezable = false;
	obj.bulletHandling = HANDLING::IGNOREBULLET;
	obj.playerHandling = HANDLING::PARTICLE;
	
	jjDrawTile(obj.xPos - 10, obj.yPos, 1227);
	jjDrawTile(obj.xPos - 10, obj.yPos + 32, 1255);
	jjDrawTile(obj.xPos - 10, obj.yPos + 64, 1255);
	jjDrawTile(obj.xPos - 10, obj.yPos + 96, 1255);
	jjDrawTile(obj.xPos - 10, obj.yPos + 128, 1226);
}

void invis(jjOBJ@ obj) {
	obj.behave(BEHAVIOR::PICKUP, false);
}

void steel(jjOBJ@ obj) {
	obj.behave(BEHAVIOR::CRATE, false);
	jjDrawSprite(obj.xPos, obj.yPos, ANIM::PICKUPS, 3, 0, 0, SPRITE::MAPPING, 9);
}

const array<SOUND::Sample> Glugs = { SOUND::COMMON_DRINKSPAZZ1, SOUND::COMMON_DRINKSPAZZ2, SOUND::COMMON_DRINKSPAZZ3, SOUND::COMMON_DRINKSPAZZ4 };
class Glug : jjBEHAVIORINTERFACE {
	void onBehave(jjOBJ@ obj) {
		obj.behave(BEHAVIOR::PICKUP, false);
	}
	void onDraw(jjOBJ@ obj) {			
		int frame = obj.objectID * 8 + jjGameTicks;
		frame = (frame + int(obj.xPos) + int(obj.yPos) * 256)*16;
		jjDrawSprite(obj.xPos, obj.yPos + jjSin(frame)*4, ANIM::PICKUPS, 78, 0, 0, SPRITE::MAPPING, 8); //why 8 and not 10?
	}
	bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ player, int force) {
		jjSample(player.xPos, player.yPos, Glugs[jjRandom()%4]);
		jjAddObject(OBJECT::FASTFIRE, player.xPos, player.yPos);
		player.food = 0; //no sugar rush
		
		//hide the primary explosion anim
		obj.xPos = jjLayerWidth[4]*32;
		obj.yPos = jjLayerHeight[4]*32;
		
		obj.frameID = 0;
		obj.behavior = BEHAVIOR::EXPLOSION2;
		return true;
	}
}

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

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

void WheelSpring(jjOBJ@ obj) {
	if (obj.state == STATE::START) obj.direction = 1;

	float xPos = obj.xPos;
	obj.behave(BEHAVIOR::SPRING, false);
	obj.yPos = obj.yOrg + 8;
	
	if (obj.eventID == OBJECT::BLUESPRING) obj.ySpeed = -48;
	
	if (obj.freeze == 1) obj.unfreeze(0);
	if (obj.freeze == 0) obj.xPos = xPos + 2.25*obj.direction;
	
	if (!jjMaskedPixel(int(obj.xPos), int(obj.yPos) + 32) || jjMaskedPixel(int(obj.xPos)+16*obj.direction, int(obj.yPos-16))) {
		if (obj.direction == 1) obj.direction = -1;
		else obj.direction = 1;
	}
	jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos - 4, obj.curFrame, 0, obj.freeze > 0 ? SPRITE::FROZEN : SPRITE::NORMAL);
	jjDrawTile(obj.xPos - 16, obj.yPos - 8, obj.freeze > 0? 593 + TILE::HFLIPPED : obj.direction < 0? 14 + TILE::ANIMATED : 15 + TILE::ANIMATED);
}

void onLevelBegin() {
	MLLE::SpawnOffgrids();
	jjObjects[jjAddObject(OBJECT::GREENSPRING, 27*32,  49*32 + 6, 0, CREATOR::OBJECT, WheelSpring)].deactivates = false;
	jjObjects[jjAddObject(OBJECT::GREENSPRING, 109*32, 49*32,     0, CREATOR::OBJECT, WheelSpring)].deactivates = false;
}

void onPlayer(jjPLAYER@ play) {
	jjWeapons[WEAPON::GUN8].gradualAim = play.powerup[WEAPON::GUN8];
}
void onPlayerInput(jjPLAYER@ player) {
	MLLE::WeaponHook.processPlayerInput(player);
}