| Name | Author | Game Mode | Rating | |||||
|---|---|---|---|---|---|---|---|---|
| Switcheroo! | PurpleJazz | Test | N/A | |||||
const bool MLLESetupSuccessful = MLLE::Setup(); ///@MLLE-Generated
#include "MLLE-Include-1.8.asc" ///@MLLE-Generated
#pragma require "SwitcherooSpace.j2t" ///@MLLE-Generated
#pragma require "ezswitcheroo.j2l" ///@MLLE-Generated
// Switcheroo!
// Created by PurpleJazz of XLM (2014-2016)
#pragma require "silence.wav"
#pragma require "sevk.asc"
#include "sevk.asc"
const string Filename = "ezswitcheroo.asdat";
array<string> alphabetLower = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
array<string> alphabetUpper = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
///@Event 141=Jazz Uppercut Hint |+|Object|Jazz |Uppercut |Direction:1
///@Event 142=Jazz Copter Hint |+|Object|Jazz |Copter |Direction:1
///@Event 167=Spaz Sidekick Hint |+|Object|Spaz |Kick |Direction:1
///@Event 168=Spaz Jump Hint |+|Object|Spaz |Jump |Direction:1
///@Event 161=Lori Kick Hint |+|Object|Lori |Kick |Direction:1
///@Event 176=Lori Copter Hint |+|Object|Lori |Copter |Direction:1
///@Event 159=Lori Stomp Hint |+|Object|Lori |Stomp |Direction:1
string toLowerCase(string text) {
string returnValue;
for(uint i = 0; i < text.length(); i++) {
int index = alphabetUpper.find(text.substr(i, 1));
if(index == -1) returnValue += text.substr(i, 1);
else returnValue += alphabetLower[index];
}
return returnValue;
}
array<int> morphDelay(4,0);
array<int> keyBinds = {0x31, 0x32, 0x33};
int lastPressed;
array<CHAR::Char> character(jjLocalPlayerCount);
array<bool> pressOnceKeyOne(4, false);
array<bool> pressOnceKeyTwo(4, false);
array<bool> pressOnceKeyThree(4, false);
bool pressOnceF7 = false;
bool showHints = false;
jjPAL sky;
void onLevelLoad() {
jjSTREAM savedStrings(Filename);
while (!savedStrings.isEmpty()) {
for (uint i = 0; i < keyBinds.length(); i++) {
savedStrings.pop(keyBinds[i]);
}
}
jjObjectPresets[OBJECT::APPLE].behavior =
jjObjectPresets[OBJECT::BANANA].behavior =
jjObjectPresets[OBJECT::CAKE].behavior =
jjObjectPresets[OBJECT::DONUT].behavior =
jjObjectPresets[OBJECT::EGGPLANT].behavior =
jjObjectPresets[OBJECT::FRIES].behavior =
jjObjectPresets[OBJECT::GRAPES].behavior = hint();
jjObjectPresets[OBJECT::APPLE].playerHandling =
jjObjectPresets[OBJECT::BANANA].playerHandling =
jjObjectPresets[OBJECT::CAKE].playerHandling =
jjObjectPresets[OBJECT::DONUT].playerHandling =
jjObjectPresets[OBJECT::EGGPLANT].playerHandling =
jjObjectPresets[OBJECT::FRIES].playerHandling =
jjObjectPresets[OBJECT::GRAPES].playerHandling = HANDLING::PARTICLE;
jjObjectPresets[OBJECT::APPLE].determineCurAnim(ANIM::JAZZ, 62); //jazz uppercut
jjObjectPresets[OBJECT::BANANA].determineCurAnim(ANIM::JAZZ, 25); //jazz copter
jjObjectPresets[OBJECT::CAKE].determineCurAnim(ANIM::SPAZ, 62); //spaz sidekick
jjObjectPresets[OBJECT::DONUT].determineCurAnim(ANIM::SPAZ, 39); //spaz double jump
jjObjectPresets[OBJECT::EGGPLANT].determineCurAnim(ANIM::LORI, 64); //lori kick
jjObjectPresets[OBJECT::FRIES].determineCurAnim(ANIM::LORI, 25); //lori copter
jjObjectPresets[OBJECT::GRAPES].determineCurAnim(ANIM::LORI, 12); //lori stomp
}
void onLevelReload() {
MLLE::ReapplyPalette();
}
void onLevelBegin() {
if (!jjIsTSF) {
jjAlert("|Sorry, you can't play this test in 1.23 =(");
jjAlert("|Please rejoin with TSF!");
} else {
if (jjGameConnection != GAME::LOCAL) {
jjAlert("||You can customise your morph key bindings with the following command:");
jjAlert("|||!bind <char num> <key name>");
jjAlert("||Where <char num> is 1 for Jazz, 2 for Spaz and 3 for Lori.");
}
}
}
class hint : jjBEHAVIORINTERFACE {
void onBehave(jjOBJ@ obj) {
if (showHints) {
jjDrawSpriteFromCurFrame(obj.xPos+(obj.eventID != OBJECT::APPLE? 0 : (obj.direction != 0? -8:8)), obj.yPos, obj.curFrame, obj.direction, SPRITE::BLEND_DISSOLVE, 125, 2, 2);
obj.determineCurFrame();
obj.direction = jjParameterGet(int(obj.xPos/32), int(obj.yPos/32), 0, 1) * -1;
if (obj.eventID == OBJECT::EGGPLANT) obj.frameID = 2;
}
}
}
bool onLocalChat(string &in msg, CHAT::Type chatType) {
if (toLowerCase(msg.substr(0, 6)) == "!bind ") {
array<string> args = msg.substr(6).split(" ");
string key;
for (uint i = 1; i < args.length(); i++) {
if (i == 1) key += args[i];
else key += " " + args[i];
}
jjSTREAM stream;
switch(parseInt(args[0])) {
case 1:
keyBinds[0] = getKeyCodeByName(key);
jjAlert("Jazz bound to Key " + getNameByKeyCode(keyBinds[0]));
break;
case 2:
keyBinds[1] = getKeyCodeByName(key);
jjAlert("Spaz bound to Key " + getNameByKeyCode(keyBinds[1]));
break;
case 3:
keyBinds[2] = getKeyCodeByName(key);
jjAlert("Lori bound to Key " + getNameByKeyCode(keyBinds[2]));
break;
default:
break;
}
stream.clear();
for (uint i = 0; i < keyBinds.length(); i++) {
stream.push(keyBinds[i]);
}
stream.save(Filename);
return true;
} else if (toLowerCase(msg) == "!resetbinds") {
for (uint i = 0; i < keyBinds.length(); i++) {
switch(i) {
case 0: keyBinds[i] = 0x31; break;
case 1: keyBinds[i] = 0x32; break;
case 2: keyBinds[i] = 0x33; break;
}
}
jjAlert("Morph keys reset");
jjSTREAM stream;
stream.clear();
for (uint i = 0; i < keyBinds.length(); i++) {
stream.push(keyBinds[i]);
}
stream.save(Filename);
return true;
}
return false;
}
bool onDrawScore(jjPLAYER@ play, jjCANVAS@ canvas) {
return true;
}
bool onDrawHealth(jjPLAYER@ play, jjCANVAS@ canvas) {
if (jjIsTSF) {
canvas.drawSprite(
jjSubscreenWidth - 480,
jjSubscreenHeight - 25,
ANIM::FACES,
3,
play.charCurr == CHAR::JAZZ? jjGameTicks >> 3 : 0,
0,
play.charCurr == CHAR::JAZZ? SPRITE::NORMAL : SPRITE::BRIGHTNESS,
50
);
canvas.drawString(
jjSubscreenWidth - 468,
jjSubscreenHeight - 15,
play.charCurr == CHAR::JAZZ? "||||" + getNameByKeyCode(keyBinds[0]) : ""+getNameByKeyCode(keyBinds[0]),
STRING::SMALL,
play.charCurr == CHAR::JAZZ? STRING::NORMAL : STRING::DARK
);
canvas.drawSprite(
jjSubscreenWidth - 420,
jjSubscreenHeight - 25,
ANIM::FACES,
5,
play.charCurr == CHAR::SPAZ? jjGameTicks >> 3 : 0,
0,
play.charCurr == CHAR::SPAZ? SPRITE::NORMAL : SPRITE::BRIGHTNESS,
50
);
canvas.drawString(
jjSubscreenWidth - 408,
jjSubscreenHeight - 15,
play.charCurr == CHAR::SPAZ? "||||" + getNameByKeyCode(keyBinds[1]) : ""+getNameByKeyCode(keyBinds[1]),
STRING::SMALL,
play.charCurr == CHAR::SPAZ? STRING::NORMAL : STRING::DARK
);
canvas.drawSprite(
jjSubscreenWidth - 360,
jjSubscreenHeight - 25,
ANIM::FACES,
4,
play.charCurr == CHAR::LORI? jjGameTicks >> 3 : 0,
0,
play.charCurr == CHAR::LORI? SPRITE::NORMAL : SPRITE::BRIGHTNESS,
50
);
canvas.drawString(
jjSubscreenWidth - 348,
jjSubscreenHeight - 15,
play.charCurr == CHAR::LORI? "||||" + getNameByKeyCode(keyBinds[2]) : ""+getNameByKeyCode(keyBinds[2]),
STRING::SMALL,
play.charCurr == CHAR::LORI? STRING::NORMAL : STRING::DARK
);
canvas.drawString(
jjSubscreenWidth - 250,
12,
"Press F7 to toggle hints!",
STRING::SMALL,
STRING::DARK
);
}
return true;
}
bool onDrawLives(jjPLAYER@ play, jjCANVAS@ canvas) {
return true;
}
void onPlayer(jjPLAYER@ play) {
if (jjGameTicks == 1) character[play.localPlayerID] = play.charCurr;
play.noFire = true;
if (play.charCurr != character[play.localPlayerID]) {
play.morphTo(character[play.localPlayerID], true);
}
play.lives = 999;
}
void onPlayerInput(jjPLAYER@ play) {
if (jjIsTSF && morphDelay[play.localPlayerID] == 0) {
if (jjKey[keyBinds[0]] && play.charCurr != CHAR::JAZZ && !pressOnceKeyOne[play.localPlayerID]) {
character[play.localPlayerID] = CHAR::JAZZ;
jjSample(play.xPos, play.yPos, SOUND::COMMON_TELPORT2, 40, 18000);
morphDelay[play.localPlayerID] = 7;
pressOnceKeyOne[play.localPlayerID] = true;
}
else if (jjKey[keyBinds[1]] && play.charCurr != CHAR::SPAZ && !pressOnceKeyTwo[play.localPlayerID]) {
character[play.localPlayerID] = CHAR::SPAZ;
jjSample(play.xPos, play.yPos, SOUND::COMMON_TELPORT2, 40, 20000);
morphDelay[play.localPlayerID] = 7;
pressOnceKeyTwo[play.localPlayerID] = true;
}
else if (jjKey[keyBinds[2]] && play.charCurr != CHAR::LORI && !pressOnceKeyThree[play.localPlayerID]) {
character[play.localPlayerID] = CHAR::LORI;
jjSample(play.xPos, play.yPos, SOUND::COMMON_TELPORT2, 40, 22000);
morphDelay[play.localPlayerID] = 7;
pressOnceKeyThree[play.localPlayerID] = true;
}
}
if (morphDelay[play.localPlayerID] > 0) morphDelay[play.localPlayerID]--;
if (!jjKey[keyBinds[0]]) pressOnceKeyOne[play.localPlayerID] = false;
if (!jjKey[keyBinds[1]]) pressOnceKeyTwo[play.localPlayerID] = false;
if (!jjKey[keyBinds[2]]) pressOnceKeyThree[play.localPlayerID] = false;
if (jjKey[0x76] && !pressOnceF7) {
if (showHints == false) {
showHints = true;
} else {
showHints = false;
}
pressOnceF7 = true;
} else if (!jjKey[0x76]) {
pressOnceF7 = false;
}
}
void onFunction0(jjPLAYER@ play, int8 offset) {
if (jjIsTSF) {
play.warpToID(offset);
if (offset > 1 && offset != 100) playVictorySample(play);
}
}
void onFunction25(jjPLAYER@ play) {
play.specialMove = 1;
play.doubleJumpCount = 0;
}
void playVictorySample(jjPLAYER@ play) {
switch (play.charCurr) {
case CHAR::JAZZ: jjSample(play.xPos, play.yPos, SOUND::JAZZSOUNDS_JUMMY, 0, 0); break;
case CHAR::SPAZ: jjSample(play.xPos, play.yPos, SOUND::SPAZSOUNDS_HAPPY, 0, 0); break;
case CHAR::LORI: jjSample(play.xPos, play.yPos, SOUND::LORISOUNDS_WEHOO, 0, 0); break;
}
}
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.