Downloads containing HH24_level03.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Holiday Hare 24Featured Download PurpleJazz Single player 10 Download file

File preview

const bool MLLESetupSuccessful = MLLE::Setup(array<MLLEWeaponApply@> = {null, null, null, null, null, null, null, null, ArcaneWeapons::TornadoGun::Weapon()}); ///@MLLE-Generated
#include "MLLE-Include-1.7w.asc" ///@MLLE-Generated
#pragma require "HH24_level03-MLLE-Data-1.j2l" ///@MLLE-Generated
#pragma require "OWMist.j2t" ///@MLLE-Generated
#pragma require "Heaven.j2t" ///@MLLE-Generated
#pragma require "HolidaiusE.j2t" ///@MLLE-Generated
#pragma require "TopSecret.j2t" ///@MLLE-Generated
#pragma require "HH24_level03.j2l" ///@MLLE-Generated
#include "ArcaneWeapon6.asc" ///@MLLE-Generated
#pragma require "ArcaneWeapon6.asc" ///@MLLE-Generated
#pragma require "SExmas.j2a"
#pragma require "cirno.j2a"
#pragma require "cirno.it"
#pragma require "HH17_Null.wav"
#include "HH17Enemies_HH24.asc"
#include "HH24.asc"

class Imitation : jjBEHAVIORINTERFACE {
	private uint8 eventID;
	private jjBEHAVIOR behavior;
	Imitation(uint8 realEventID, uint8 fakeEventID) {
		jjOBJ@ obj = jjObjectPresets[realEventID];
		eventID = obj.eventID;
		behavior = obj.behavior;
		obj.eventID = fakeEventID;
		obj.behavior = this;
	}
	void onBehave(jjOBJ@ obj) override {
		if (obj.state == STATE::DEACTIVATE)
		obj.eventID = eventID;
		obj.behave(behavior);
	}
}

class GiftBox : jjBEHAVIORINTERFACE {
	void destroy(jjOBJ@ obj) {
		jjSample(obj.xPos, obj.yPos, SOUND::COMMON_WOOD1);
		{
			int id = jjAddObject(OBJECT::EXPLOSION, obj.xPos, obj.yPos);
			if (id != 0) {
				jjOBJ@ other = jjObjects[id];
				other.determineCurAnim(ANIM::PICKUPS, 4);
			}
		}
		for (int i = jjRandom() & 7 | 8; i-- != 0;) {
			int id = jjAddObject(OBJECT::SHARD, obj.xPos, obj.yPos);
			if (id != 0) {
				jjOBJ@ other = jjObjects[id];
				other.determineCurAnim(ANIM::PICKUPS, 93 + (jjRandom() & 1));
			}
		}
		obj.yPos -= 8.f;
		for (int i = obj.var[1]; i-- != 0;) {
			int id = jjAddObject(obj.var[0], obj.xPos, obj.yPos);
			if (id != 0) {
				jjOBJ@ other = jjObjects[id];
				if (other.playerHandling == HANDLING::PICKUP) {
					int angle = (jjRandom() & 255) + 128;
					other.xSpeed = jjCos(angle) * 5.f;
					other.ySpeed = jjSin(angle) * -3.f;
				} else if (other.playerHandling == HANDLING::SPECIAL) {
					other.deactivates = false;
				}
			}
		}
		obj.clearPlatform();
		obj.delete();
	}
	void onBehave(jjOBJ@ obj) override {
		switch (obj.state) {
			case STATE::START:
				{
					uint16 x = int(obj.xOrg) >>> 5;
					uint16 y = int(obj.yOrg) >>> 5;
					obj.var[0] = jjParameterGet(x, y, 0, 8);
					obj.var[1] = jjParameterGet(x, y, 8, 4);
					obj.curAnim += jjParameterGet(x, y, 12, 2);
					obj.determineCurFrame();
					obj.bulletHandling = HANDLING::DESTROYBULLET;
					obj.scriptedCollisions = true;
				}
				break;
			case STATE::FALL:
				obj.var[2] = 1;
				break;
			case STATE::FREEZE:
			case STATE::SLEEP:
				if (obj.var[2] != 0) {
					destroy(obj);
					return;
				}
		}
		obj.behave(BEHAVIOR::MONITOR);
	}
	bool onObjectHit(jjOBJ@, jjOBJ@, jjPLAYER@, int) {
		return true;
	}
	bool onIsSolid(jjOBJ@) {
		return true;
	}
}

bool scream = false;
int stronger = 40;

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

jjOBJ@ strong;
class Cirnosuterus : jjBEHAVIORINTERFACE {
	void onBehave(jjOBJ@ obj) {
		obj.behave(BEHAVIOR::UTERUS);
		obj.xSpeed = 60;
		if (obj.state != STATE::START && obj.state != STATE::FREEZE && obj.state != STATE::DONE) {
			if (jjGameTicks % stronger == 0 && obj.curAnim != 522 && obj.curAnim != 525) {
				@strong = jjObjects[jjAddObject(OBJECT::UTERUSSPIKEBALL, obj.xPos, obj.yPos - 10)];
				strong.yAcc = -0.1;
			}
		}
		int playerID = obj.findNearestPlayer(2500000);
		jjPLAYER@ play = jjPlayers[playerID];

		if (obj.state == STATE::EXTRA) {
			if (!scream) {
				jjSample(obj.xPos,obj.yPos,SOUND::LORISOUNDS_TOUCH,64);
				stronger = 20;
				scream = true;
			}
		}
		if (obj.state == STATE::DONE) {
			obj.age++;
			
			if (obj.age == 210) {
				obj.delete();
				obj.particlePixelExplosion(2);
				HH24::endLevel();
			}
		}
	}
}

void Hanabi(jjOBJ@ obj) {
	obj.behave(BEHAVIOR::ELECTROBULLET, false);
	jjDrawSpriteFromCurFrame(obj.xPos, obj.yPos, obj.curFrame, obj.direction, SPRITE::INVISIBLE);
}

void Crabullet(jjOBJ@ obj) {
	obj.behave(BEHAVIOR::UTERUSSPIKEBALL, false);
	obj.playerHandling = HANDLING::ENEMY;
	obj.isTarget = false;
	obj.lightType = LIGHT::BRIGHT;
	obj.light = 6;
	jjDrawSprite(obj.xPos, obj.yPos, ANIM::UTERUS, 7, 1, obj.direction, SPRITE::NORMAL);
}

void onFunction0(jjPLAYER@ player) {
	player.showText( "@@@@#|~Is this one of Yukari's tricks?@I hate rabbits, those lunarians!@Nevermind, I'll freeze them all!", STRING::MEDIUM);
	player.activateBoss();
	player.limitXScroll(481, 25);
	jjMusicLoad("cirno.it", false, true);
}

void onLevelLoad() {
	jjUseLayer8Speeds = true;
	
	jjSampleLoad(SOUND::UTERUS_SCISSORS1, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_SCISSORS2, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_SCISSORS3, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_SCISSORS4, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_SCISSORS5, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_SCISSORS6, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_SCISSORS7, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_SCISSORS8, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_STEP1, "HH17_Null.wav");
	jjSampleLoad(SOUND::UTERUS_STEP2, "HH17_Null.wav");
	
	HH17::setEnemy(OBJECT::BAT);
	HH17::setEnemy(OBJECT::DRAGON);
	HH17::setEnemy(OBJECT::MONKEY);
	
	Imitation(OBJECT::TACO, OBJECT::MILK);
	uint src = jjAnimSets[ANIM::CUSTOM[255]].load(0, "SExmas.j2a");
	uint dest = jjAnimSets[ANIM::PICKUPS];
	for (int i = 0; i < 95; i++) {
		const jjANIMATION@ anim = jjAnimations[src + i];
		if (anim.frameCount != 0)
		jjAnimations[dest + i] = anim;
	}
	jjAnimSets[ANIM::BRIDGE].load(1, "SExmas.j2a");
	jjAnimSets[ANIM::CUSTOM[0]].load(2, "SExmas.j2a");
	jjAnimSets[ANIM::SPIKEPLAT].load(4, "SExmas.j2a");
	jjAnimSets[ANIM::UTERUS].load(0, "cirno.j2a");
	
	jjObjectPresets[OBJECT::TURTLESHELL].behavior = Hanabi;
	jjObjectPresets[OBJECT::LASER].lightType = LIGHT::NONE;
	jjObjectPresets[OBJECT::CRAB].behavior = Crabullet;
	jjObjectPresets[OBJECT::CRAB].playerHandling = HANDLING::ENEMYBULLET;
	jjObjectPresets[OBJECT::CRAB].bulletHandling = HANDLING::IGNOREBULLET;
	jjObjectPresets[OBJECT::UTERUS].behavior = Cirnosuterus();
	jjObjectPresets[OBJECT::UTERUS].energy = 125;
	jjObjectPresets[OBJECT::UTERUSSPIKEBALL].energy = 12;
	jjObjectPresets[OBJECT::BOMBCRATE].behavior = GiftBox();
	jjObjectPresets[OBJECT::BOMBCRATE].determineCurAnim(ANIM::CUSTOM[0], 0);
	jjObjectPresets[OBJECT::SPIKEPLATFORM].killAnim = jjObjectPresets[OBJECT::SPIKEPLATFORM].determineCurAnim(ANIM::SPIKEPLAT, 0) + 1;
	
	jjObjectPresets[OBJECT::STEADYLIGHT].behavior = ParticleEmitter();
	
	jjANIMATION@ anim = jjAnimations[jjAnimSets[ANIM::AMMO] + 75];
	for (uint j = 0; j < anim.frameCount; j++) {
		jjANIMFRAME@ frame = jjAnimFrames[anim + j];
		jjPIXELMAP sprite(frame);
		for (uint x = 0; x < sprite.width; ++x) {
			for (uint y = 0; y < sprite.height; ++y) {
				if (sprite[x,y] >= 80 && sprite[x,y] <= 87) sprite[x,y] -= 8;
			}
		}
		sprite.save(frame);
	}
	
	HH24::levelLoad();
}

class ParticleEmitter : jjBEHAVIORINTERFACE {
	void onBehave(jjOBJ@ obj) {
		obj.behave(BEHAVIOR::STEADYLIGHT);
		obj.determineCurFrame();
		
		obj.counter++;
		
		obj.var[0] = jjRandom()%210;
		
		if (obj.counter % (300 + obj.var[0]) == 0) {
			jjOBJ@ shock = jjObjects[jjAddObject(OBJECT::LIGHTNINGSHIELDBULLET, obj.xPos, obj.yPos, obj.objectID, CREATOR::OBJECT)];     
			jjSample(shock.xPos, shock.yPos, SOUND::BONUS_BONUS1, 0, 0);
			shock.counterEnd = 1;
			shock.freeze = 210;
			shock.state = STATE::FLY;
			shock.playerHandling = HANDLING::PARTICLE;
			shock.lightType = LIGHT::BRIGHT;
			shock.light = 8;
			shock.xSpeed = shock.ySpeed = 0;
		}
		
		int playerID = obj.findNearestPlayer(300);
		jjPLAYER@ player = jjPlayers[playerID];
		
		if (playerID > -1) {
			player.hurt(1, false);
		}
	}
}

void onLevelReload() {
	MLLE::SpawnOffgridsLocal();
	HH17::processEnemyColors();	
	jjEnabledASFunctions[0] = true;
	HH24::levelReload();
}

void onMain() {
	HH17::handleEnemyProjectiles();
	HH24::main();
	
	array<jjLAYER@> layers = jjLayerOrderGet();
	layers[0].xOffset += 0.75;
	layers[7].xOffset += 0.25;
	layers[8].hasTiles = jjColorDepth == 16 && !jjLowDetail? true:false;
	layers[9].textureSurface = jjColorDepth == 16? SURFACE::INNERLAYER : SURFACE::UNTEXTURED;
	
	jjLayers[8].textureSurface = jjColorDepth == 16? SURFACE::LEGACY : SURFACE::UNTEXTURED;
}

void onLevelBegin() {
	MLLE::SpawnOffgrids();
	jjObjectPresets[OBJECT::ELECTROBULLET].animSpeed = 2;
	jjObjectPresets[OBJECT::ELECTROBULLETPU].animSpeed = 3;
}

void onPlayer(jjPLAYER@ player) {
	
	HH24::player(player);
}

bool onDrawScore(jjPLAYER@ player, jjCANVAS@ canvas) {
	HH24::score(player, canvas, true);
	return false;
}