예제 #1
0
        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");
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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();
        }
예제 #5
0
        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();
        }
예제 #6
0
        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;
        }
예제 #7
0
        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;
        }
예제 #8
0
        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;
                }
            }
        }
예제 #9
0
        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);
        }
예제 #10
0
파일: BirdCage.cs 프로젝트: iidioter/jazz2
        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;
        }
예제 #11
0
파일: Bilsy.cs 프로젝트: ozgun-kara/jazz2
        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;
        }
예제 #12
0
        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]);
            }
        }
예제 #13
0
        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;
        }
예제 #14
0
파일: AmmoRF.cs 프로젝트: iidioter/jazz2
        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;
        }
예제 #15
0
파일: SpikeBall.cs 프로젝트: iidioter/jazz2
        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]);
            }
        }
예제 #16
0
        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;
        }
예제 #17
0
        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;
            }
        }
예제 #18
0
        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();
            }
        }
예제 #19
0
            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;
            }
예제 #20
0
        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;
        }
예제 #21
0
파일: GemRing.cs 프로젝트: iidioter/jazz2
        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;
            }
        }
예제 #22
0
        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;
        }
예제 #23
0
파일: Bolly.cs 프로젝트: ozgun-kara/jazz2
            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);
            }
예제 #24
0
        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();
        }
예제 #25
0
        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;
        }
예제 #26
0
        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;
            }
        }
예제 #27
0
        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();
        }
예제 #28
0
        protected override async Task OnActivatedAsync(ActorActivationDetails details)
        {
            speed = details.Params[0];

            CollisionFlags = CollisionFlags.ForceDisableCollisions;

            await RequestMetadataAsync("Common/AmbientBubbles");
        }
예제 #29
0
파일: AmmoTNT.cs 프로젝트: TheWlr9/jazz2
        protected override async Task OnActivatedAsync(ActorActivationDetails details)
        {
            collisionFlags = CollisionFlags.None;

            await RequestMetadataAsync("Weapon/TNT");

            SetAnimation(AnimState.Idle);
        }
예제 #30
0
파일: Eva.cs 프로젝트: ozgun-kara/jazz2
        protected override async Task OnActivatedAsync(ActorActivationDetails details)
        {
            await RequestMetadataAsync("Object/Eva");

            SetAnimation(AnimState.Idle);

            collisionFlags &= ~CollisionFlags.ApplyGravitation;
        }