| Name | Author | Game Mode | Rating | |||||
|---|---|---|---|---|---|---|---|---|
| Falkelope | cooba | Capture the flag | N/A | |||||
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);
}
Jazz2Online © 1999-INFINITY (Site Credits). We have a Privacy Policy. Jazz Jackrabbit, Jazz Jackrabbit 2, Jazz Jackrabbit Advance and all related trademarks and media are ™ and © Epic Games. Lori Jackrabbit is © Dean Dodrill. J2O development powered by Loops of Fury and Chemical Beats.
Eat your lima beans, Johnny.