Пример #1
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            SetHealthByDifficulty(1);
            scoreValue = 100;

            theme = details.Params[0];

            switch (theme)
            {
            case 0:
            default:
                RequestMetadata("Enemy/Turtle");
                break;

            case 1:     // Xmas
                RequestMetadata("Enemy/TurtleXmas");
                break;
            }

            SetAnimation(AnimState.Walk);

            IsFacingLeft = MathF.Rnd.NextBool();
            speedX       = (IsFacingLeft ? -1 : 1) * DefaultSpeed;
        }
Пример #2
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            theme = details.Params[0];

            switch (theme)
            {
            case 0:
            default:
                RequestMetadata("Enemy/LizardFloat");
                break;

            case 1:     // Xmas
                RequestMetadata("Enemy/LizardFloatXmas");
                break;
            }

            collisionFlags &= ~CollisionFlags.ApplyGravitation;

            SetHealthByDifficulty(1);
            scoreValue = 200;

            SetAnimation(AnimState.Idle);

            // Spawn copter
            Copter copter = new Copter();

            copter.OnAttach(new ActorInstantiationDetails {
                Api    = api,
                Params = details.Params
            });
            copter.Parent = this;
        }
Пример #3
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(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.ApplyGravitation | CollisionFlags.SkipPerPixelCollisions);

            untouched = false;

            // Workaround: Some animation have to be loaded for collision detection
            RequestMetadata("Object/GemGiant");
            SetAnimation(AnimState.Idle);

            renderer.Active = false;

            parts = new GemPart[length];
            for (int i = 0; i < parts.Length; i++)
            {
                parts[i] = new GemPart();
                parts[i].OnAttach(details);
                parts[i].Parent          = this;
                parts[i].Transform.Scale = 0.8f;
            }
        }
Пример #4
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            // ToDo: Implement Fade:1|Sine:1

            collisionFlags = CollisionFlags.None;

            RequestMetadata("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);
            sound.Looped = true;
            sound.BeginFadeIn(1f);
        }
Пример #5
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            morphType = (MorphType)details.Params[0];

            Movable = true;

            collisionFlags |= CollisionFlags.SkipPerPixelCollisions;

            RequestMetadata("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 < api.Players.Count; i++)
            {
                PlayerType?playerType = GetTargetType(api.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;
                }
            }
        }
Пример #6
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            endText = details.Params[1];

            canHurtPlayer  = false;
            isInvulnerable = true;
            canBeFrozen    = false;
            maxHealth      = health = int.MaxValue;
            scoreValue     = 0;

            lastHealth = health;

            collisionFlags |= CollisionFlags.IsSolidObject;

            stepSize = 0.3f;
            switch (api.Difficulty)
            {
            case GameDifficulty.Easy: stepSize *= 1.3f; break;

            case GameDifficulty.Hard: stepSize *= 0.7f; break;
            }

            RequestMetadata("Boss/Queen");
            SetAnimation(AnimState.Idle);

            // Invisible block above the queen
            block = new InvisibleBlock();
            block.OnAttach(new ActorInstantiationDetails {
                Api = api
            });
            api.AddActor(block);
        }
Пример #7
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            SetHealthByDifficulty(2);
            scoreValue = 200;

            RequestMetadata("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;
            }
        }
Пример #8
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(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:
                RequestMetadata("Enemy/Doggy");
                attackSpeed = 3.2f;
                break;

            case 1:     // TSF Cat
                RequestMetadata("Enemy/Cat");
                attackSpeed = 3.8f;
                break;
            }

            SetAnimation(AnimState.Walk);

            IsFacingLeft = MathF.Rnd.NextBool();
            speedX       = (IsFacingLeft ? -1 : 1) * 1f;
        }
Пример #9
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            Vector3 pos = Transform.Pos;

            pos.Z        += 20f;
            Transform.Pos = pos;

            ushort theme = details.Params[0];

            RequestMetadata("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;
        }
Пример #10
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            gemType = (ushort)(details.Params[0] & 0x3);

            RequestMetadata("Collectible/Gems");

            switch (gemType)
            {
            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();
        }
Пример #11
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            ushort coinType = details.Params[0];

            RequestMetadata("Collectible/Coins");

            switch (coinType)
            {
            case 0:     // Silver
                coinValue  = 1;
                scoreValue = 500;
                SetAnimation("CoinSilver");
                break;

            case 1:     // Gold
                coinValue  = 5;
                scoreValue = 1000;
                SetAnimation("CoinGold");
                break;
            }

            SetFacingDirection();
        }
Пример #12
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            PlayerType playerType = (PlayerType)details.Params[0];

            IsFacingLeft = (details.Params[1] != 0);

            switch (playerType)
            {
            case PlayerType.Jazz:
                RequestMetadata("Interactive/PlayerJazz");
                break;

            case PlayerType.Spaz:
                RequestMetadata("Interactive/PlayerSpaz");
                break;

            case PlayerType.Lori:
                RequestMetadata("Interactive/PlayerLori");
                break;
            }

            SetAnimation("Corpse");

            collisionFlags = CollisionFlags.None;
        }
Пример #13
0
            public override void OnAttach(ActorInstantiationDetails details)
            {
                base.OnAttach(details);

                IsFacingLeft = (details.Params[0] != 0);

                collisionFlags &= ~CollisionFlags.ApplyGravitation;

                RequestMetadata("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;
            }
Пример #14
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            ushort theme = details.Params[0];

            switch (theme)
            {
            case 0:
            default:     // Normal
                RequestMetadata("Enemy/TurtleShell");
                break;

            case 1:     // Xmas
                RequestMetadata("Enemy/TurtleShellXmas");
                break;

            case 2:     // Tough (Boss)
                RequestMetadata("Boss/TurtleShellTough");
                break;
            }

            SetAnimation(AnimState.Idle);

            canHurtPlayer = false;
            friction      = api.Gravity * 0.05f;
            elasticity    = 0.5f;
            health        = 8;

            PlaySound("Fly");
        }
Пример #15
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(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;

            isInvulnerable = true;
            collisionFlags = CollisionFlags.CollideWithOtherActors;
            canBeFrozen    = false;

            RequestMetadata("Object/SpikeBall");
            SetAnimation("SpikeBall");

            pieces = new ChainPiece[length];
            for (int i = 0; i < length; i++)
            {
                pieces[i] = new ChainPiece(api, originPos + new Vector3(0f, 0f, 4f), i);
                api.AddActor(pieces[i]);
            }
        }
Пример #16
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            RequestMetadata("Boss/Tweedle");
            SetAnimation(AnimState.Idle);
        }
Пример #17
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            scoreValue = 200;

            PlayerType player = (api.Players.Count == 0 ? PlayerType.Jazz : api.Players[0].PlayerType);

            if (player == PlayerType.Spaz)
            {
                RequestMetadata("Collectible/FastFireSpaz");
            }
            else if (player == PlayerType.Lori)
            {
                RequestMetadata("Collectible/FastFireLori");
            }
            else
            {
                RequestMetadata("Collectible/FastFireJazz");
            }

            SetAnimation("FastFire");

            SetFacingDirection();
        }
Пример #18
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            shieldType = (Player.ShieldType)details.Params[0];

            Movable = true;

            collisionFlags |= CollisionFlags.SkipPerPixelCollisions;

            RequestMetadata("Object/PowerUpMonitor");

            switch (shieldType)
            {
            case Player.ShieldType.Fire: SetAnimation("ShieldFire"); break;

            case Player.ShieldType.Water: SetAnimation("ShieldWater"); break;

            case Player.ShieldType.Laser: SetAnimation("ShieldLaser"); break;

            case Player.ShieldType.Lightning: SetAnimation("ShieldLightning"); break;

            default: SetAnimation("Empty"); break;
            }
        }
Пример #19
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            originPos = Transform.Pos;

            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;

            RequestMetadata("MovingPlatform/" + type.ToString("G"));
            SetAnimation("Platform");

            pieces = new ChainPiece[length];
            for (int i = 0; i < length; i++)
            {
                pieces[i] = new ChainPiece(api, originPos + new Vector3(0f, 0f, 4f), type, i);
                api.AddActor(pieces[i]);
            }
        }
Пример #20
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            ushort intensity   = details.Params[0];
            ushort brightness  = details.Params[1];
            ushort radiusNear1 = details.Params[2];
            ushort radiusNear2 = details.Params[3];
            ushort radiusFar   = details.Params[4];
            ushort speed       = details.Params[5];
            ushort sync        = details.Params[6];

            collisionFlags = CollisionFlags.None;

            this.radiusNear1 = radiusNear1;
            this.radiusNear2 = radiusNear2;
            this.radiusFar   = radiusFar;
            this.speed       = 0.6f * speed;

            phase = (BaseCycleFrames - ((float)(Time.GameTimer.TotalMilliseconds % BaseCycleFrames) + sync * 175)) % BaseCycleFrames;

            light            = AddComponent <LightEmitter>();
            light.Intensity  = (intensity / 255f);
            light.Brightness = (brightness / 255f);
        }
Пример #21
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            weaponType = (WeaponType)details.Params[0];

            Movable = true;

            collisionFlags |= CollisionFlags.SkipPerPixelCollisions;

            RequestMetadata("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;
            }
        }
Пример #22
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            ushort theme = details.Params[0];
            short  x     = unchecked ((short)(details.Params[1]));
            short  y     = unchecked ((short)(details.Params[2]));

            Vector3 pos = Transform.Pos;

            pos.X        += x;
            pos.Y        += y;
            pos.Z        += 20;
            Transform.Pos = pos;

            canBeFrozen     = false;
            collisionFlags &= ~CollisionFlags.ApplyGravitation;
            //collisionFlags |= CollisionFlags.IsSolidObject;

            switch (theme)
            {
            case 0: RequestMetadata("Pole/Carrotus"); break;

            case 1: RequestMetadata("Pole/Diamondus"); break;

            case 2: RequestMetadata("Pole/DiamondusTree"); break;

            case 3: RequestMetadata("Pole/Jungle"); break;

            case 4: RequestMetadata("Pole/Psych"); break;
            }

            SetAnimation("Pole");
        }
Пример #23
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(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;
            }

            RequestMetadata("Object/Collectible");

            if ((details.Flags & ActorInstantiationFlags.Illuminated) != 0)
            {
                Illuminate();
            }
        }
Пример #24
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            collisionFlags = CollisionFlags.CollideWithTileset | CollisionFlags.CollideWithOtherActors | CollisionFlags.ApplyGravitation;
            canBeFrozen    = false;
        }
Пример #25
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            playerType = (PlayerType)details.Params[0];
            index      = details.Params[1];

            switch (playerType)
            {
            case PlayerType.Jazz:
                RequestMetadata("Interactive/PlayerJazz");
                break;

            case PlayerType.Spaz:
                RequestMetadata("Interactive/PlayerSpaz");
                break;

            case PlayerType.Lori:
                RequestMetadata("Interactive/PlayerLori");
                break;
            }

            SetAnimation(AnimState.Fall);

            //collisionFlags = CollisionFlags.CollideWithTileset | CollisionFlags.CollideWithSolidObjects | CollisionFlags.CollideWithOtherActors | CollisionFlags.ApplyGravitation | CollisionFlags.IsSolidObject;
            collisionFlags = CollisionFlags.CollideWithOtherActors;
        }
Пример #26
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            endText = details.Params[1];

            canBeFrozen = false;
            SetHealthByDifficulty(100);
            scoreValue = 3000;

            collisionFlags = CollisionFlags.CollideWithOtherActors;

            RequestMetadata("Boss/Bolly");
            SetAnimation(AnimState.Idle);

            // Spawn bottom
            bottom = new Bottom();
            bottom.OnAttach(new ActorInstantiationDetails {
                Api = api
            });
            bottom.Parent = this;

            // Spawn turret
            turret = new Turret();
            turret.OnAttach(new ActorInstantiationDetails {
                Api = api
            });
            turret.Parent = this;
        }
Пример #27
0
            public override void OnAttach(ActorInstantiationDetails details)
            {
                base.OnAttach(details);

                IsFacingLeft = (details.Params[0] != 0);

                collisionFlags &= ~CollisionFlags.ApplyGravitation;

                canBeFrozen = false;
                health      = int.MaxValue;

                speedX = (IsFacingLeft ? -5f : 5f);
                speedY = 5f;

                RequestMetadata("Boss/Devan");
                SetAnimation((AnimState)675);

                OnUpdateHitbox();

                LightEmitter light = AddComponent <LightEmitter>();

                light.Intensity  = 0.85f;
                light.Brightness = 0.4f;
                light.RadiusNear = 0f;
                light.RadiusFar  = 30f;
            }
Пример #28
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            LastHitDirection parentLastHitDir = (LastHitDirection)details.Params[0];

            SetHealthByDifficulty(1);
            scoreValue = 100;

            RequestMetadata("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;
            }
        }
Пример #29
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(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:
                RequestMetadata("Boss/Bilsy");
                break;

            case 1:     // Xmas
                RequestMetadata("Boss/BilsyXmas");
                break;
            }

            SetAnimation(AnimState.Idle);

            renderer.Active = false;
        }
Пример #30
0
        public override void OnAttach(ActorInstantiationDetails details)
        {
            base.OnAttach(details);

            SetAnimation("Stopwatch");

            SetFacingDirection();
        }