Downloads containing ezswitcheroo.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Switcheroo! PurpleJazz Test N/A Download file

File preview

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;
		}
	}