protected override async Task OnActivatedAsync(ActorActivationDetails details) { ushort theme = details.Params[0]; switch (theme) { case 0: default: // Normal await RequestMetadataAsync("Enemy/TurtleShell"); break; case 1: // Xmas await RequestMetadataAsync("Enemy/TurtleShellXmas"); break; case 2: // Tough (Boss) await RequestMetadataAsync("Boss/TurtleShellTough"); break; } SetAnimation(AnimState.Idle); canHurtPlayer = false; friction = api.Gravity * 0.05f; elasticity = 0.5f; health = 8; PlaySound("Fly"); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { // ToDo: Implement Fade:1|Sine:1 CollisionFlags = CollisionFlags.ForceDisableCollisions; await RequestMetadataAsync("Common/AmbientSound"); string name; switch (details.Params[0]) { case 0: name = "AmbientWind"; break; case 1: name = "AmbientFire"; break; case 2: name = "AmbientScienceNoise"; break; default: return; } float gain = (details.Params[1] / 255f); sound = PlaySound(name, gain); if (sound != null) { sound.Flags |= SoundInstanceFlags.Looped; sound.BeginFadeIn(1f); } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { LastHitDirection parentLastHitDir = (LastHitDirection)details.Params[0]; SetHealthByDifficulty(1); scoreValue = 100; await RequestMetadataAsync("Enemy/Sucker"); maxHealth = 4; SetAnimation(AnimState.Walk); if (parentLastHitDir != LastHitDirection.None) { IsFacingLeft = (parentLastHitDir == LastHitDirection.Left); health = 1; CollisionFlags &= ~CollisionFlags.ApplyGravitation; SetTransition((AnimState)1073741824, false, delegate { speedX = 0; SetAnimation(AnimState.Walk); CollisionFlags |= CollisionFlags.ApplyGravitation; }); if (parentLastHitDir == LastHitDirection.Left || parentLastHitDir == LastHitDirection.Right) { speedX = 3 * (parentLastHitDir == LastHitDirection.Left ? -1 : 1); } PlaySound("Deflate"); } else { health = 4; } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); gemType = (ushort)(details.Params[0] & 0x3); await RequestMetadataAsync("Collectible/Gems"); switch (gemType) { default: case 0: // Red (+1) scoreValue = 100; SetAnimation("GemRed"); break; case 1: // Green (+5) scoreValue = 500; SetAnimation("GemGreen"); break; case 2: // Blue (+10) scoreValue = 1000; SetAnimation("GemBlue"); break; case 3: // Purple scoreValue = 100; SetAnimation("GemPurple"); break; } SetFacingDirection(); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); scoreValue = 50; await RequestMetadataAsync("Collectible/Food" + ((FoodType)details.Params[0]).ToString("G")); SetAnimation("Food"); switch ((FoodType)details.Params[0]) { case FoodType.Pepsi: case FoodType.Coke: case FoodType.Milk: isDrinkable = true; break; default: isDrinkable = false; break; } SetFacingDirection(); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { Vector3 pos = Transform.Pos; pos.Z += 20f; Transform.Pos = pos; ushort theme = details.Params[0]; await RequestMetadataAsync("Object/Moth"); switch (theme) { default: case 0: SetAnimation("Pink"); break; case 1: SetAnimation("Gray"); break; case 2: SetAnimation("Green"); break; case 3: SetAnimation("Purple"); break; } renderer.AnimPaused = true; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); base.upgrades = (byte)details.Params[0]; strength = 1; collisionFlags &= ~CollisionFlags.ApplyGravitation; collisionFlags |= CollisionFlags.SkipPerPixelCollisions; await RequestMetadataAsync("Weapon/Pepper"); AnimState state = AnimState.Idle; if ((upgrades & 0x1) != 0) { timeLeft = MathF.Rnd.NextFloat(32, 40); state |= (AnimState)1; LightEmitter light = AddComponent <LightEmitter>(); light.Intensity = 1f; light.Brightness = 1f; light.RadiusNear = 4f; light.RadiusFar = 16f; } else { timeLeft = MathF.Rnd.NextFloat(26, 36); } SetAnimation(state); PlaySound("Fire"); renderer.Active = false; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { morphType = (MorphType)details.Params[0]; Movable = true; CollisionFlags |= CollisionFlags.SkipPerPixelCollisions; await RequestMetadataAsync("Object/PowerUpMonitor"); switch (morphType) { case MorphType.Swap2: SetAnimation("Swap2"); break; case MorphType.Swap3: SetAnimation("Swap3"); break; case MorphType.ToBird: SetAnimation("Bird"); break; } for (int i = 0; i < levelHandler.Players.Count; i++) { PlayerType?playerType = GetTargetType(levelHandler.Players[i].PlayerType); switch (playerType) { case PlayerType.Jazz: PreloadMetadata("Interactive/PlayerJazz"); break; case PlayerType.Spaz: PreloadMetadata("Interactive/PlayerSpaz"); break; case PlayerType.Lori: PreloadMetadata("Interactive/PlayerLori"); break; } } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { endText = details.Params[1]; canHurtPlayer = false; isInvulnerable = true; canBeFrozen = false; health = int.MaxValue; maxHealth = int.MaxValue; scoreValue = 0; lastHealth = health; CollisionFlags |= CollisionFlags.IsSolidObject | CollisionFlags.SkipPerPixelCollisions; stepSize = 0.3f; switch (levelHandler.Difficulty) { case GameDifficulty.Easy: stepSize *= 1.3f; break; case GameDifficulty.Hard: stepSize *= 0.7f; break; } await RequestMetadataAsync("Boss/Queen"); SetAnimation(AnimState.Idle); // Invisible block above the queen block = new InvisibleBlock(); block.OnActivated(new ActorActivationDetails { LevelHandler = levelHandler }); levelHandler.AddActor(block); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { Vector3 pos = Transform.Pos; pos.Z -= 50f; Transform.Pos = pos; type = details.Params[0]; activated = (details.Params[1] != 0); switch (type) { case 0: // Chuck (red) await RequestMetadataAsync("Object/BirdCageChuck"); PreloadMetadata("Object/BirdChuck"); break; case 1: // Birdy (yellow) await RequestMetadataAsync("Object/BirdCageBirdy"); PreloadMetadata("Object/BirdBirdy"); break; } SetAnimation(activated ? AnimState.Activated : AnimState.Idle); CollisionFlags |= CollisionFlags.CollideWithSolidObjects; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { theme = details.Params[0]; endText = details.Params[1]; SetHealthByDifficulty(120); scoreValue = 3000; collisionFlags = CollisionFlags.CollideWithTileset | CollisionFlags.CollideWithOtherActors; originPos = details.Pos; switch (theme) { case 0: default: await RequestMetadataAsync("Boss/Bilsy"); break; case 1: // Xmas await RequestMetadataAsync("Boss/BilsyXmas"); break; } SetAnimation(AnimState.Idle); renderer.Active = false; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { originPos = Transform.Pos; lastPos = originPos; type = (PlatformType)details.Params[0]; length = details.Params[3]; speed = (details.Params[2] > short.MaxValue ? -(ushort.MaxValue - details.Params[2]) : details.Params[2]) * 0.78f; ushort sync = details.Params[1]; isSwing = details.Params[4] != 0; phase = (BaseCycleFrames - (float)(Time.GameTimer.TotalMilliseconds % BaseCycleFrames - sync * 175) * speed) % BaseCycleFrames; CollisionFlags = CollisionFlags.CollideWithOtherActors | CollisionFlags.IsSolidObject; IsOneWay = true; canBeFrozen = false; await RequestMetadataAsync("MovingPlatform/" + type.ToString("G")); SetAnimation("Platform"); pieces = new ChainPiece[length]; for (int i = 0; i < length; i++) { pieces[i] = new ChainPiece(levelHandler, originPos + new Vector3(0f, 0f, 4f), type); levelHandler.AddActor(pieces[i]); } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { Vector3 pos = Transform.Pos; pos.Y -= 6f; Transform.Pos = pos; SetHealthByDifficulty(3); scoreValue = 200; ushort theme = details.Params[0]; switch (theme) { case 0: default: await RequestMetadataAsync("Enemy/Doggy"); attackSpeed = 3.2f; break; case 1: // TSF Cat await RequestMetadataAsync("Enemy/Cat"); attackSpeed = 3.8f; break; } SetAnimation(AnimState.Walk); IsFacingLeft = MathF.Rnd.NextBool(); speedX = (IsFacingLeft ? -1 : 1) * 1f; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); base.upgrades = (byte)details.Params[0]; strength = 2; CollisionFlags &= ~CollisionFlags.ApplyGravitation; await RequestMetadataAsync("Weapon/RF"); AnimState state = AnimState.Idle; if ((upgrades & 0x1) != 0) { timeLeft = 35; state |= (AnimState)1; } else { timeLeft = 30; } SetAnimation(state); PlaySound("Fire", 0.4f); renderer.Active = false; LightEmitter light = AddComponent <LightEmitter>(); light.Intensity = 0.8f; light.Brightness = 0.8f; light.RadiusNear = 3f; light.RadiusFar = 12f; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { originPos = Transform.Pos; length = details.Params[2]; speed = (details.Params[1] > short.MaxValue ? -(ushort.MaxValue - details.Params[2]) : details.Params[2]) * 0.78f; ushort sync = details.Params[0]; isSwing = details.Params[3] != 0; shade = details.Params[4] != 0; phase = (BaseCycleFrames - (float)(Time.GameTimer.TotalMilliseconds % BaseCycleFrames - sync * 175) * speed) % BaseCycleFrames; base.canBeFrozen = false; base.isInvulnerable = true; base.CollisionFlags = CollisionFlags.CollideWithOtherActors; await RequestMetadataAsync("MovingPlatform/SpikeBall"); SetAnimation("Platform"); pieces = new ChainPiece[length]; for (int i = 0; i < length; i++) { pieces[i] = new ChainPiece(levelHandler, originPos + new Vector3(0f, 0f, 4f), i); levelHandler.AddActor(pieces[i]); } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { PlayerType playerType = (PlayerType)details.Params[0]; IsFacingLeft = (details.Params[1] != 0); switch (playerType) { default: case PlayerType.Jazz: await RequestMetadataAsync("Interactive/PlayerJazz"); break; case PlayerType.Spaz: await RequestMetadataAsync("Interactive/PlayerSpaz"); break; case PlayerType.Lori: await RequestMetadataAsync("Interactive/PlayerLori"); break; } SetAnimation("Corpse"); collisionFlags = CollisionFlags.ForceDisableCollisions; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { SetHealthByDifficulty(2); scoreValue = 200; await RequestMetadataAsync("Enemy/TurtleTube"); SetAnimation(AnimState.Idle); Vector3 pos = Transform.Pos; if (api.WaterLevel + WaterDifference <= pos.Y) { // Water is above the enemy, it's floating on the water pos.Y = api.WaterLevel + WaterDifference; Transform.Pos = pos; collisionFlags &= ~CollisionFlags.ApplyGravitation; onWater = true; } else { // Water is below the enemy, apply gravitation and pause the animation renderer.AnimPaused = true; } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { elasticity = 0.6f; collisionFlags |= CollisionFlags.SkipPerPixelCollisions; Vector3 pos = Transform.Pos; phase = ((pos.X / 32) + (pos.Y / 32)) * 2f; if ((flags & (ActorInstantiationFlags.IsCreatedFromEventMap | ActorInstantiationFlags.IsFromGenerator)) != 0) { untouched = true; collisionFlags &= ~CollisionFlags.ApplyGravitation; startingY = pos.Y; } else { untouched = false; collisionFlags |= CollisionFlags.ApplyGravitation; timeLeft = 90f * Time.FramesPerSecond; } if ((details.Flags & ActorInstantiationFlags.Illuminated) != 0) { Illuminate(); } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { IsFacingLeft = (details.Params[0] != 0); base.canBeFrozen = false; base.isInvulnerable = true; base.CollisionFlags &= ~CollisionFlags.ApplyGravitation; await RequestMetadataAsync("Weapon/Toaster"); SetAnimation("Fire"); const float baseSpeed = 1.2f; if (IsFacingLeft) { speedX = -1f * (baseSpeed + MathF.Rnd.NextFloat(0f, 0.2f)); } else { speedX = +1f * (baseSpeed + MathF.Rnd.NextFloat(0f, 0.2f)); } speedY += MathF.Rnd.NextFloat(-0.5f, 0.5f); timeLeft = 60; LightEmitter light = AddComponent <LightEmitter>(); light.Intensity = 0.85f; light.Brightness = 0.4f; light.RadiusNear = 0f; light.RadiusFar = 30f; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { SetHealthByDifficulty(1); scoreValue = 100; theme = details.Params[0]; switch (theme) { case 0: default: await RequestMetadataAsync("Enemy/Turtle"); break; case 1: // Xmas await RequestMetadataAsync("Enemy/TurtleXmas"); break; } SetAnimation(AnimState.Walk); IsFacingLeft = MathF.Rnd.NextBool(); speedX = (IsFacingLeft ? -1 : 1) * DefaultSpeed; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); int length = (details.Params[0] > 0 ? details.Params[0] : 8); speed = (details.Params[1] > 0 ? details.Params[1] : 8) * 0.00625f; // "Event" parameter will not be implemented CollisionFlags = CollisionFlags.CollideWithOtherActors | CollisionFlags.SkipPerPixelCollisions; untouched = false; await RequestMetadataAsync("Collectible/Gems"); parts = new GemPart[length]; for (int i = 0; i < parts.Length; i++) { GemPart part = new GemPart(); part.OnActivated(details); part.Parent = this; part.Transform.Scale = 0.8f; parts[i] = part; } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); base.upgrades = (byte)details.Params[0]; CollisionFlags = (CollisionFlags & ~CollisionFlags.ApplyGravitation) | CollisionFlags.SkipPerPixelCollisions; await RequestMetadataAsync("Weapon/Blaster"); AnimState state = AnimState.Idle; if ((upgrades & 0x1) != 0) { timeLeft = 28; state |= (AnimState)1; strength = 2; } else { timeLeft = 25; strength = 1; } SetAnimation(state); LightEmitter light = AddComponent <LightEmitter>(); light.Intensity = 0.8f; light.Brightness = 0.6f; light.RadiusNear = 5f; light.RadiusFar = 20f; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { base.canBeFrozen = false; base.canCollideWithAmmo = false; base.isInvulnerable = true; base.collisionFlags = CollisionFlags.CollideWithOtherActors; health = int.MaxValue; await RequestMetadataAsync("Boss/Bolly"); AnimState animState; if (details.Params[0] == 0) { animState = (AnimState)3; Size = 14; ZOffset = 15; } else { animState = (AnimState)4; Size = 7; ZOffset = 20; } SetAnimation(animState); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); scoreValue = 200; PlayerType player = (api.Players.Count == 0 ? PlayerType.Jazz : api.Players[0].PlayerType); if (player == PlayerType.Spaz) { await RequestMetadataAsync("Collectible/FastFireSpaz"); } else if (player == PlayerType.Lori) { await RequestMetadataAsync("Collectible/FastFireLori"); } else { await RequestMetadataAsync("Collectible/FastFireJazz"); } SetAnimation("FastFire"); SetFacingDirection(); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { theme = details.Params[0]; switch (theme) { case 0: default: await RequestMetadataAsync("Enemy/LizardFloat"); break; case 1: // Xmas await RequestMetadataAsync("Enemy/LizardFloatXmas"); break; } CollisionFlags &= ~CollisionFlags.ApplyGravitation; SetHealthByDifficulty(1); scoreValue = 200; SetAnimation(AnimState.Idle); // Spawn copter CopterDecor copter = new CopterDecor(); copter.OnActivated(new ActorActivationDetails { LevelHandler = levelHandler, Params = details.Params }); copter.Parent = this; }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { weaponType = (WeaponType)details.Params[0]; Movable = true; collisionFlags |= CollisionFlags.SkipPerPixelCollisions; await RequestMetadataAsync("Object/PowerUpMonitor"); switch (weaponType) { case WeaponType.Blaster: PlayerType player = (api.Players.Count == 0 ? PlayerType.Jazz : api.Players[0].PlayerType); if (player == PlayerType.Spaz) { SetAnimation("BlasterSpaz"); } else if (player == PlayerType.Lori) { SetAnimation("BlasterLori"); } else { SetAnimation("BlasterJazz"); } break; default: SetAnimation(weaponType.ToString("G")); break; } }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await base.OnActivatedAsync(details); ushort coinType = details.Params[0]; await RequestMetadataAsync("Collectible/Coins"); switch (coinType) { default: case 0: // Silver coinValue = 1; scoreValue = 500; SetAnimation("CoinSilver"); break; case 1: // Gold coinValue = 5; scoreValue = 1000; SetAnimation("CoinGold"); break; } SetFacingDirection(); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { speed = details.Params[0]; CollisionFlags = CollisionFlags.ForceDisableCollisions; await RequestMetadataAsync("Common/AmbientBubbles"); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { collisionFlags = CollisionFlags.None; await RequestMetadataAsync("Weapon/TNT"); SetAnimation(AnimState.Idle); }
protected override async Task OnActivatedAsync(ActorActivationDetails details) { await RequestMetadataAsync("Object/Eva"); SetAnimation(AnimState.Idle); collisionFlags &= ~CollisionFlags.ApplyGravitation; }