public override void AfterMove() { Color DestPixel = RetroApplication.Raster[this.x, this.y]; if (DestPixel.ToArgb() != Color.Black.ToArgb()) { if (DestPixel.R == 255 && DestPixel.B == 0) { RetroApplication.FillFlood(this.x, this.y, Color.Black); if (this.playerNr == 1) { BinaryOutput Output = new BinaryOutput(); int Gift = RetroApplication.Random(0, 31); Output.WriteByte(7); Output.WriteInt(Gift); this.GetGift(1, Gift, Output, null); if (Program.NrPlayers > 1) { Program.MPE.SendUdpToAll(Output.GetPacket(), 3); } } } else if (!this.immortal) { this.Die(); return; } } if (!this.invisible || this.playerNr == 2) { RetroApplication.Raster[this.x, this.y] = this.headColor; } if (this.immortal) { int SecondsLeft = 10 - (int)(DateTime.Now - this.immortalStart).TotalSeconds; if (SecondsLeft != this.immortalSecondsLeft) { if (SecondsLeft < 0) { this.immortal = false; Program.PlayerMsg(this.playerNr, string.Empty); } else { this.immortalSecondsLeft = SecondsLeft; Program.PlayerMsg(this.playerNr, "Immortal " + SecondsLeft.ToString()); } } } }
public void GetGift(int PlayerIndex, int GiftIndex, BinaryOutput Output, BinaryInput Input) { switch (GiftIndex) { case 0: this.framesPerPixel = 4; this.stepsPerFrame = 1; Program.PlayerMsg(this.playerNr, "Slow speed"); break; case 1: this.framesPerPixel = 5; this.stepsPerFrame = 1; Program.PlayerMsg(this.playerNr, "Slower speed"); break; case 2: this.framesPerPixel = 6; this.stepsPerFrame = 1; Program.PlayerMsg(this.playerNr, "Slowest speed"); break; case 3: this.framesPerPixel = 2; this.stepsPerFrame = 1; Program.PlayerMsg(this.playerNr, "Fast speed"); break; case 4: this.framesPerPixel = 1; this.stepsPerFrame = 1; Program.PlayerMsg(this.playerNr, "Faster speed"); break; case 5: this.framesPerPixel = 1; this.stepsPerFrame = 2; if (this.shotSpeed < 2) { this.shotSpeed = 2; } Program.PlayerMsg(this.playerNr, "Fastest speed"); break; case 6: this.framesPerPixel = 3; this.stepsPerFrame = 1; Program.PlayerMsg(this.playerNr, "Normal speed"); break; case 7: this.shotPower = 5; Program.PlayerMsg(this.playerNr, "Tiny bullets"); break; case 8: this.shotPower = 10; Program.PlayerMsg(this.playerNr, "Small bullets"); break; case 9: this.shotPower = 15; Program.PlayerMsg(this.playerNr, "Normal bullets"); break; case 10: this.shotPower = 20; Program.PlayerMsg(this.playerNr, "Large bullets"); break; case 11: this.shotPower = 25; Program.PlayerMsg(this.playerNr, "Huge bullets"); break; case 12: this.shotPower = 30; Program.PlayerMsg(this.playerNr, "Humongous bullets"); break; case 13: this.shotPower = 50; Program.PlayerMsg(this.playerNr, "Peace-maker bullets"); break; case 14: this.tail = false; Program.PlayerMsg(this.playerNr, "No tail"); break; case 15: this.tail = true; Program.PlayerMsg(this.playerNr, "Tail"); break; case 16: this.shotSpeed = Math.Max(1, this.stepsPerFrame); Program.PlayerMsg(this.playerNr, "Slow bullets"); break; case 17: this.shotSpeed = Math.Max(2, this.stepsPerFrame); Program.PlayerMsg(this.playerNr, "Fast bullets"); break; case 18: this.shotSpeed = Math.Max(3, this.stepsPerFrame); Program.PlayerMsg(this.playerNr, "Faster bullets"); break; case 19: this.shotSpeed = Math.Max(4, this.stepsPerFrame); Program.PlayerMsg(this.playerNr, "Fastest bullets"); break; case 20: int X, Y; int dx, dy; bool Ok; int TriesLeft = 100; int Black = Color.Black.ToArgb(); if (!(Input is null)) { this.x = 319 - (int)Input.ReadInt(); this.y = 207 - (int)Input.ReadInt(); } else { Ok = false; while (TriesLeft-- > 0 && !Ok) { X = RetroApplication.Random(30, 290); Y = RetroApplication.Random(38, 170); Ok = true; for (dy = -5; dy < 5; dy++) { for (dx = -5; dx < 5; dx++) { if (RetroApplication.Raster[X + dx, Y + dy].ToArgb() != Black) { Ok = false; dy = 5; break; } } } if (Ok) { Output.WriteInt(X); Output.WriteInt(Y); this.x = X; this.y = Y; } } if (!Ok && !(Output is null)) { Output.WriteInt(this.x); Output.WriteInt(this.y); } } Program.PlayerMsg(this.playerNr, "Teleport"); break;