Do you think I could just leave this part blank and it'd be okay? We're just going to replace the whole thing with a header image anyway, right?
You are not logged in.
The letters O and U have been affected by a great epidemic. In this time, I take advantage, slashing the weakened enemy with a blade. I have faith in a final defeat.
Wait, it was really MartenM, I swear! That arctic bird with a firearm was always sketchy...
Ahaha Mini I didn't expect that. It seems that crafting a reply that isn't rekd by the filter is fairly achievable, with the caveat that the brain cells I sacrificed writing this will never be regained and were glad when they finally died.
I HAVE BEEN SECRETLY TRAINING THE MASSES SINCE 2013, with my archaic relpying game evading a certain letter! J was banned as well after a while, yet immediately I'll restrict a certain different letter instead.
EMERGENCY MEETING! A certain letter pairing has been afflicted with a hysterical, timely change celebrating April's arrival. Easing any writing attempts, I have permitted the letter "J" again, and deprecated the several sentences demand.
Failed assassination attempt? Drat, I missed!
There are just seven more unique worlds starting with PW-1.
Anyone who believes or thinks remake is coming out is oblivious, it's been obvious nothing is happening even 3 years ago.
I don't advise listening to N1KF on this matter, official ee is dead
As I've mentioned countless times, if the game is cancelled, that will be announced as well. Surely we could apply the same logic to the game's cancellation—we don't see it, therefore it isn't happening.
There are countless reasons a game's development can take a long time, that don't involve the developers, including respected community members, keeping up a facade that doesn't benefit their finances, passion for Everybody Edits, or long-term reputation.
Anybody who claims it is "obvious" what is happening behind the scenes is projecting their own outlook.
Somehow I put Week 9 by mistake last time, so I updated it to Week 10.
I don't represent the game outside the wiki, which as far as I can tell has basically no connection to the new EE. I do try to keep track a lot of the stuff that's made public though.
I've compiled a bunch of comments on Discord from 2021 to 2022 on my Hints and leaks of unannounced content topic, starting here. The OP also has an incomplete list details revealed about the game, though not as much about the development.
are the current developers treating this project as a career, or as a hobby?
A bit of both. There are paid employees at GGRiD, who are developing the new EE. IIRC over $10,000 has been spent over the game, though I forgot the exact number. Monetization hasn't been expressed as a priority, and unlike EEU, players have not funded the game's development.
It seems like the new team have had a lot of money to work with. Where they got that is a mystery.
Some not-so-recent comments about monetization from 2022:
I've stated it before, but monetisation isn't our focus right now on it, but more than likely, it won't be far off from what EE itself was like.
No ads though, because those suckI don't like things like battle passes or constant in your face ads
Loot boxes suck
Atm shop is almost identical to EE, save for one difference.
Magic functions completely different
But that's about it
And I'm not gonna add ads!!!!
The wiki might not be up-to-date on this. Atilla published a few versions of the server code as part of EEmulator, and for convenience I'll put them below:
Coin collect code from EverybodyEdits.cs in v89, an early 2012 version:
player.coins = m.GetInt(0U);
this.coinscollected++;
if (player.canWinEnergy && (DateTime.Now - player.lastCoin).TotalMinutes > 20.0 && DateTime.Now > player.coinTimer && this.coinscollected < 4 * this.PlayerCount && this.coinscollected < 40 && (DateTime.Now - this.coinanticheat).TotalMilliseconds > 100.0 && (DateTime.Now - player.lastmove).TotalSeconds < 15.0 && !this.coinbanned)
{
if (this.rd.Next(0, 75) == 1)
{
if (this.rd.Next(0, 50) == 1)
{
if (!player.PayVault.Has("smileywizard"))
{
player.Send("info", new object[]
{
"Congratulations you just found the wizard smiley!",
"You found an extra magical coin! Upon touching the coin you found that you had a wizard hat and beard..."
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just became a wizard!"
});
player.PayVault.Give(new BuyItemInfo[]
{
new BuyItemInfo("smileywizard")
}, delegate ()
{
});
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
base.Broadcast("face", new object[]
{
player.Id,
22
});
player.Send("givewizard", new object[0]);
}
else if (!player.PayVault.Has("smileywizard2"))
{
player.Send("info", new object[]
{
"Congratulations you just found the rare wizard smiley!",
"You found an extra magical coin! Upon touching the coin you found that you had a red wizard hat and beard..."
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just became a fire wizard!"
});
player.PayVault.Give(new BuyItemInfo[]
{
new BuyItemInfo("smileywizard2")
}, delegate ()
{
});
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
base.Broadcast("face", new object[]
{
player.Id,
32
});
player.Send("givewizard2", new object[0]);
}
else if (!player.PayVault.Has("smileywitch"))
{
player.Send("info", new object[]
{
"Congratulations you just found the rare witch smiley!",
"You found an ultra magical coin! Upon touching the coin you found that you had become a witch..."
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just became a witch!"
});
player.PayVault.Give(new BuyItemInfo[]
{
new BuyItemInfo("smileywitch")
}, delegate ()
{
});
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
base.Broadcast("face", new object[]
{
player.Id,
32
});
player.Send("givewitch", new object[0]);
}
}
else if (this.rd.Next(0, 100) == 1)
{
var maxe = player.PlayerObject.GetInt("maxEnergy", 200);
maxe += 15;
player.Send("info", new object[]
{
"Congratulations you just found a rare magical coin!",
"Magical coins are very rare and sought after as they increase your energy!\n\nYour new maximum energy is now " + maxe + "!\nYour energy has also been fully recharged!"
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just found a rare magical coin and was awarded 15 extra total energy and a full energy bar!"
});
player.PlayerObject.Remove("shopDate");
player.PlayerObject.Set("maxEnergy", maxe);
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.Send("refreshshop", new object[0]);
}
else if (this.rd.Next(0, 75) == 1)
{
var maxe = player.PlayerObject.GetInt("maxEnergy", 200);
maxe += 10;
player.Send("info", new object[]
{
"Congratulations you just found an extra magical coin!",
"Magical coins are very rare and sought after as they increase your energy!\n\nYour new maximum energy is now " + maxe + "!\nYour energy has also been fully recharged!"
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just found an extra magical coin and was awarded 10 extra total energy and a full energy bar!"
});
player.PlayerObject.Remove("shopDate");
player.PlayerObject.Set("maxEnergy", maxe);
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.Send("refreshshop", new object[0]);
}
else if (this.rd.Next(0, 2) == 1)
{
var maxe = player.PlayerObject.GetInt("maxEnergy", 200);
maxe += 2;
player.Send("info", new object[]
{
"Congratulations you just found an magical coin!",
"Magical coins are very rare and sought after as they increase your energy!\n\nYour new maximum energy is now " + maxe + "!"
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just found a magical coin and was awarded 2 extra total energy!"
});
player.PlayerObject.Set("maxEnergy", maxe);
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.Send("refreshshop", new object[0]);
}
else
{
var maxe = player.PlayerObject.GetInt("maxEnergy", 200);
maxe++;
player.Send("info", new object[]
{
"Congratulations you just found an minor magical coin!",
"Magical coins are very rare and sought after as they increase your energy!\n\nYour new maximum energy is now " + maxe + "!"
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just found a minor magical coin and was awarded 1 extra total energy!"
});
player.PlayerObject.Set("maxEnergy", maxe);
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.Send("refreshshop", new object[0]);
}
}
else if (this.rd.Next(0, 15) == 1)
{
if (!player.PayVault.Has("smileyxmasgrinch"))
{
player.Send("info", new object[]
{
"Congratulations you just found the grinch smiley!",
"You found an magical Christmas coin! Upon touching the coin you found that you where the feared Grinch who stole Christmas."
});
base.Broadcast("write", new object[]
{
"* MAGIC",
player.name.ToUpper() + " just became the feared Christmas Grinch!"
});
player.PayVault.Give(new BuyItemInfo[]
{
new BuyItemInfo("smileyxmasgrinch")
}, delegate ()
{
});
player.PlayerObject.Set("lastcoin", DateTime.Now);
player.PlayerObject.Save();
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
base.Broadcast("face", new object[]
{
player.Id,
48
});
player.Send("givegrinch", new object[0]);
}
}
player.coinTimer = DateTime.Now.AddMinutes(1.0);
}
this.coinanticheat = DateTime.Now;
base.Broadcast("c", new object[]
{
player.Id,
player.coins
});
return;
Coin collect code from Game.cs in v188, from 2015:
player.coins = m.GetInt(0);
player.bcoins = m.GetInt(1);
this.coinscollected++;
if (m.Count < 4) return;
var cx = m.GetInt(2);
var cy = m.GetInt(3);
//Console.WriteLine("collect coin at " + cx + "/" + cy + ". Already collected? " + player.isCoinCollected(cx, cy));
if (
// There is a coin on the position
(this.baseworld.getBrickType(0, cx, cy) == (uint)ItemTypes.Coin) &&
// Player has not collected all more coins than is possible
player.coins <= this.baseworld.coinCount() &&
// Player is moving
(DateTime.Now - player.lastmove).TotalSeconds < 15 &&
// Some time has passed since last coin pickup
(DateTime.Now - this.coinanticheat).TotalMilliseconds > 100 &&
// world has not been banned for woot coins
!this.baseworld.coinbanned &&
// It is not the players own world
!player.owner &&
// The player is not able to edit
(!player.canEdit || player.ismod) &&
// Player has not already picked up a coin at that position
!player.isCoinCollected(cx, cy)
)
{
// Set the coin as collected by the player
player.setCoinCollected(cx, cy);
// Check against percentage of world that is coins
if ((this.baseworld.coinPercentage() * 2) * 100 < this.rd.Next(0, 100))
{
//var playerlevel = player.level;
player.doCoinCollect(delegate (bool success)
{
if (success)
{
this.magiccollected++;
this.BroadcastMessage(Message.Create("w", player.Id));
//if (player.level > playerlevel)
//{
// this.BroadcastMessage(Message.Create("levelup", player.Id, 1 /* woot level */));
//}
}
});
}
}
if (
player.canWinEnergy &&
(DateTime.Now - player.lastCoin).TotalMinutes > 20 &&
(DateTime.Now > player.coinTimer) &&
this.coinscollected < 4 * this.PlayerCount &&
this.coinscollected < 40 &&
(DateTime.Now - this.coinanticheat).TotalMilliseconds > 100 &&
(DateTime.Now - player.lastmove).TotalSeconds < 15 &&
!this.baseworld.coinbanned
)
{
// 1.3 % chance
if (this.rd.Next(0, 75) == 1)
{
// 4 % chance
if (this.rd.Next(0, 50) <= 2)
{
// 25% chance each
if (this.rd.Next(0, 100) < 25)
{
// Smileys
if (!player.PayVault.Has("smileywizard"))
{
player.SendMessage(Message.Create("info", "Congratulations!",
"You found an extra magical coin! Upon touching the coin you found that you had a wizard hat and beard..."));
this.Broadcast("write", "* MAGIC",
player.name.ToUpper() + " just became a wizard!");
player.PayVault.Give(new[] { new BuyItemInfo("smileywizard") }, delegate { });
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.face = 22;
this.BroadcastPlayerUpdate(player, Message.Create("face", player.Id, 22));
player.SendMessage(Message.Create("givemagicsmiley", "smileywizard"));
}
else if (!player.PayVault.Has("smileywizard2"))
{
// Energy Coins
var rand = rd.Next(0, 100);
if (rand <= 5)
{
player.SendMessage(Message.Create("info", "Congratulations!", "You found a magical coin! Upon touching the coin you were awarded 15 total Energy and a full Energy bar!"));
Broadcast("write", "* MAGIC", player.name.ToUpper() + " just found a magical coin and was awarded 15 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.PlayerObject.Set("maxEnergy", player.PlayerObject.GetInt("maxEnergy") + 15);
var full = new TimeSpan(0, 0, 150 * player.maxEnergy);
player.PlayerObject.Set("shopDate", DateTime.Now + full);
player.PlayerObject.Save();
}
else if (rand <= 35)
{
player.SendMessage(Message.Create("info", "Congratulations!", "You found a magical coin! Upon touching the coin you found 10 total Energy and a full Energy bar!"));
Broadcast("write", "* MAGIC", player.name.ToUpper() + " just found a magical coin and was awarded 10 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.PlayerObject.Set("maxEnergy", player.PlayerObject.GetInt("maxEnergy") + 10);
var full = new TimeSpan(0, 0, 150 * player.maxEnergy);
player.PlayerObject.Set("shopDate", DateTime.Now + full);
player.PlayerObject.Save();
}
else if (rand <= 53)
{
player.SendMessage(Message.Create("info", "Congratulations!", "You found a magical coin! Upon touching the coin you found 5 total Energy!"));
Broadcast("write", "* MAGIC", player.name.ToUpper() + " just found a magical coin and was awarded 5 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.PlayerObject.Set("maxEnergy", player.PlayerObject.GetInt("maxEnergy") + 5);
player.PlayerObject.Save();
}
else if (rand <= 100)
{
player.SendMessage(Message.Create("info", "Congratulations!", "You found a magical coin! Upon touching the coin you found 1 total Energy!"));
Broadcast("write", "* MAGIC", player.name.ToUpper() + " just found a magical coin and was awarded 1 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = true;
player.PlayerObject.Set("maxEnergy", player.PlayerObject.GetInt("maxEnergy") + 1);
player.PlayerObject.Save();
}
}
}
else // 75% Chance
{
// Energy Coins
var rand = this.rd.Next(0, 100);
if (rand <= 5)
{
player.SendMessage(Message.Create("info", "Congratulations!",
"You found a magical coin! Upon touching the coin you were awarded 15 total Energy and a full Energy bar!"));
this.Broadcast("write", "* MAGIC",
player.name.ToUpper() +
" just found a magical coin and was awarded 15 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.PlayerObject.Set("maxEnergy",
player.PlayerObject.GetInt("maxEnergy") + 15);
player.PlayerObject.Set("Energy", player.PlayerObject.GetInt("maxEnergy"));
player.PlayerObject.Save();
}
else if (rand <= 35)
{
player.SendMessage(Message.Create("info", "Congratulations!",
"You found a magical coin! Upon touching the coin you found 10 total Energy and a full Energy bar!"));
this.Broadcast("write", "* MAGIC",
player.name.ToUpper() +
" just found a magical coin and was awarded 10 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.PlayerObject.Set("maxEnergy",
player.PlayerObject.GetInt("maxEnergy") + 10);
player.PlayerObject.Set("Energy", player.PlayerObject.GetInt("maxEnergy"));
player.PlayerObject.Save();
}
else if (rand <= 53)
{
player.SendMessage(Message.Create("info", "Congratulations!",
"You found a magical coin! Upon touching the coin you found 5 total Energy!"));
this.Broadcast("write", "* MAGIC",
player.name.ToUpper() +
" just found a magical coin and was awarded 5 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = false;
player.PlayerObject.Set("maxEnergy", player.PlayerObject.GetInt("maxEnergy") + 5);
player.PlayerObject.Save();
}
else if (rand <= 100)
{
player.SendMessage(Message.Create("info", "Congratulations!",
"You found a magical coin! Upon touching the coin you found 1 total Energy!"));
this.Broadcast("write", "* MAGIC",
player.name.ToUpper() +
" just found a magical coin and was awarded 1 total energy.");
player.lastCoin = DateTime.Now;
player.canWinEnergy = true;
player.PlayerObject.Set("maxEnergy", player.PlayerObject.GetInt("maxEnergy") + 1);
player.PlayerObject.Save();
}
}
}
player.coinTimer = DateTime.Now.AddMinutes(1);
}
}
this.coinanticheat = DateTime.Now;
this.BroadcastPlayerUpdate(player, Message.Create("c", player.Id, player.coins, player.bcoins));
//Broadcast("c", player.Id, player.coins);
break;
Magic.cs from v225, in 2017:
using System;
using PlayerIO.GameLibrary;
namespace EverybodyEdits.Game
{
public class Magic
{
private readonly EverybodyEdits game;
private bool enabled;
public Magic(EverybodyEdits game)
{
this.game = game;
this.game.PlayerIO.BigDB.LoadOrCreate("Config", "magic",
magicSettings => { this.enabled = magicSettings.GetBool("enabled", true); });
}
private double Multiplier
{
get
{
var multiplier = this.game.Random.NextDouble();
if (multiplier < .65)
{
multiplier = .80;
}
return multiplier;
}
}
public void OnCoin(Player player, bool isBlue, int goldCoins, int blueCoins)
{
// Magic is disabled :(
if (!this.enabled)
{
return;
}
// Guests can't get magic
if (player.ConnectUserId == "simpleguest")
{
return;
}
// Bots can't get magic
if (player.IsBot ?? true)
{
return;
}
// Can't get magic twice
if (!player.CanWinEnergy)
{
return;
}
// There can't be more than 400 coins
if (goldCoins + blueCoins > 400)
{
return;
}
// Don't give magic when player didn't move for more than 15 seconds.
if ((DateTime.UtcNow - player.LastMove).TotalSeconds > 15)
{
return;
}
var minSinceLastMagic = (int)(DateTime.UtcNow - player.LastMagic).TotalMinutes;
// Need to wait at least 1 hour after getting magic
if (minSinceLastMagic < 60)
{
return;
}
// There should be at least 15 seconds difference between coins
if (this.CalculateDifference(player).TotalSeconds > 15)
{
return;
}
var chance = this.CalculateChance(minSinceLastMagic, goldCoins, blueCoins, player.MaxEnergy);
var multiplier = this.Multiplier;
if (this.IsLucky(chance, multiplier))
{
this.GivePlayerMagic(player, isBlue);
}
else
{
// Bonus chance to get smileys or blocks
chance = this.CalculateChance(minSinceLastMagic, goldCoins, blueCoins);
if (this.IsLucky(chance, multiplier))
{
this.GivePlayerMagic(player, isBlue, true);
}
}
}
private void GivePlayerMagic(Player player, bool isBlue, bool isBonus = false)
{
var received = false;
var rand = this.game.Random.Next(0, 100);
if (rand < 10 || (isBlue && rand < 55))
{
received = isBlue
? this.GiveBlock(player)
: this.GiveSmiley(player);
}
if (!received && !isBonus)
{
this.GiveEnergy(player);
received = true;
}
if (received)
{
player.SendMessage("magic");
}
}
private void GiveEnergy(Player player)
{
var rand = this.game.Random.Next(0, 100);
if (rand <= 1)
{
this.SendInfo(player,
"You found a magical coin! Upon touching the coin you were awarded 30 total Energy and a full Energy bar!",
player.Name.ToUpper() + " just found a magical coin and was awarded 30 total energy and a full energy bar.");
this.AwardMaxEnergy(player, 30, true);
}
else if (rand <= 7)
{
this.SendInfo(player,
"You found a magical coin! Upon touching the coin you were awarded 15 total Energy and a full Energy bar!",
player.Name.ToUpper() + " just found a magical coin and was awarded 15 total energy and a full energy bar.");
this.AwardMaxEnergy(player, 15, true);
}
else if (rand <= 17)
{
this.SendInfo(player,
"You found a magical coin! Upon touching the coin you found 10 total Energy and a full Energy bar!",
player.Name.ToUpper() + " just found a magical coin and was awarded 10 total energy and a full energy bar.");
this.AwardMaxEnergy(player, 10, true);
}
else if (rand <= 35)
{
this.SendInfo(player,
"You found a magical coin! Upon touching the coin you found 5 total Energy!",
player.Name.ToUpper() + " just found a magical coin and was awarded 5 total energy.");
this.AwardMaxEnergy(player, 5, false);
}
else if (rand <= 58)
{
this.SendInfo(player,
"You found a magical coin! Upon touching the coin you found 2 total Energy!",
player.Name.ToUpper() + " just found a magical coin and was awarded 2 total energy.");
this.AwardMaxEnergy(player, 2, false);
}
else
{
this.SendInfo(player,
"You found a magical coin! Upon touching the coin you found 1 total Energy!",
player.Name.ToUpper() + " just found a magical coin and was awarded 1 total energy.");
this.AwardMaxEnergy(player, 1, false);
}
}
private bool GiveBlock(Player player)
{
for (var i = 1; i <= 6; i++)
{
var id = i == 1 ? "" : i.ToString();
var brickId = "brickmagic" + id;
if (player.PayVault.Has(brickId))
{
continue;
}
player.PayVault.Give(new[] { new BuyItemInfo(brickId) }, () =>
{
this.SendInfo(player,
"You found an extra magical coin! Upon touching the coin you found that you got yourself a neat magic brick...",
player.Name.ToUpper() + " just got a magic brick!");
});
this.DisableRewarding(player);
player.SendMessage("givemagicbrickpackage", "magic");
return true;
}
return false;
}
private bool GiveSmiley(Player player)
{
if (!player.PayVault.Has("smileywizard"))
{
this.AwardSmiley(player, 22, "smileywizard", () =>
{
this.SendInfo(player,
"You found an extra magical coin! Upon touching the coin you found that you had a wizard hat and beard...",
player.Name.ToUpper() + " just became a wizard!");
});
return true;
}
if (!player.PayVault.Has("smileywizard2"))
{
this.AwardSmiley(player, 32, "smileywizard2", () =>
{
this.SendInfo(player,
"You found an extra magical coin! Upon touching the coin you found that you had a red wizard hat and beard...",
player.Name.ToUpper() + " just became a fire wizard!");
});
return true;
}
if (!player.PayVault.Has("smileywitch"))
{
this.AwardSmiley(player, 41, "smileywitch", () =>
{
this.SendInfo(player,
"You found an extra magical coin! Upon touching the coin you found that you became a witch...",
player.Name.ToUpper() + " just became a witch!");
});
return true;
}
if (!player.PayVault.Has("smileydarkwizard"))
{
this.AwardSmiley(player, 94, "smileydarkwizard", () =>
{
this.SendInfo(player,
"You found an extra dark magical coin! Upon touching the coin you found that you became a dark wizard...",
player.Name.ToUpper() + " just became a dark wizard!");
});
return true;
}
if (!player.PayVault.Has("smileylightwizard"))
{
this.AwardSmiley(player, 122, "smileylightwizard", () =>
{
this.SendInfo(player,
"You found an extra light magical coin! Upon touching the coin you found that you had a white wizard hat and a beard...",
player.Name.ToUpper() + " just became a light wizard!");
});
return true;
}
return false;
}
private void AwardMaxEnergy(Player player, int energy, bool refill)
{
this.DisableRewarding(player);
player.RefreshPlayerObject(() =>
{
player.MaxEnergy += energy;
if (refill)
{
player.RefillEnergy();
}
player.PlayerObject.Save();
});
}
private void AwardSmiley(Player player, int smileyId, string smileyPayVaultId, Callback callback)
{
this.DisableRewarding(player);
player.PayVault.Give(new[] { new BuyItemInfo(smileyPayVaultId) }, callback);
this.game.SetPlayerFace(player, smileyId);
player.SendMessage("givemagicsmiley", smileyPayVaultId);
}
private void DisableRewarding(Player player)
{
player.LastMagic = DateTime.UtcNow;
player.CanWinEnergy = false;
}
private void SendInfo(Player player, string text, string broadcastText)
{
player.SendMessage("info2", "Congratulations!", text);
this.game.BroadcastMessage("write", "* MAGIC", broadcastText);
}
private bool IsLucky(int chance, double multiplier)
{
return this.game.Random.Next(0, (int)(chance * multiplier)) <= 5;
}
private int CalculateChance(int minSinceLastMagic, int goldCoins, int blueCoins, int maxEnergy = 0)
{
var chance = 1000;
// The more energy you have the lower is your chance
chance += maxEnergy;
// If there are at least 15 gold or blue coins chance gets much lower
if (goldCoins >= 15 || blueCoins >= 15)
{
chance += goldCoins * 5;
chance += blueCoins * 5;
}
// Time since last magic also has impact on chance
if (minSinceLastMagic < 1000)
{
chance += (1000 - minSinceLastMagic) * 2;
}
if (minSinceLastMagic < 500)
{
chance += (500 - minSinceLastMagic) * 3;
}
return chance;
}
private TimeSpan CalculateDifference(Player player)
{
if (player.CoinTimer < DateTime.UtcNow)
{
player.CoinTimer = DateTime.UtcNow;
}
player.CoinTimer += TimeSpan.FromSeconds(10);
var difference = player.CoinTimer - DateTime.UtcNow;
if (difference.TotalMinutes < 1)
{
player.CoinTimer += difference;
}
else
{
player.CoinTimer -= TimeSpan.FromSeconds(difference.TotalSeconds / 20);
}
return difference;
}
}
}
The magic code was apparently tweaked a lot, so the 2017 code might not be the most recent.
Yes, Zoey is active in PixelWalker at least, under a different username. As for other former Staff, John (formerly Emalton) plays and develops PixelWalker, and LukeM checks the forums once in a blue moon. Some are probably active on Discord, but I don't go there so I wouldn't know.
I don't represent the game's Staff, but you probably won't get a public response from Satanya. Our Silence has more up-to-date info on develoment, and why it is silent. If anybody has desecrated EE, it's the people who harassed the Staff into silence.
Aside from Xeno's accusations against Satanya, I'm not aware of any broken promises. In that post we were warned two years ago that yes, the game could take years to release. Game development takes a long time, and it's easier when you don't have to actively keep players by entertained with new blocks. That's how we lost so many players in the MrShoe era—too much focus on active updates, and ways to extend the game's income at the expense of game design. I'm not really in the position to comment on whether the release is taking too long, but I respect the Staff for trying something different than their predecessors, by developing with a design document, plenty of foresight, and their own money, all done at their own pace.
That's where I got an idea. I'm making a bot in Python. What if needs to do is connect to Legacy worlds, and make a leaderboard on a website. Days ago I figured out how to make it view the lobby and connect. I still need to decipher client messages and do things like timers for each player, but I have a bit of experience with working out data structures, and timers shouldn't be too complex. Hopefully something functional will be done by the end of February. If not then that will be very embarrassing.
Well that was very embarrassing.
In my defense I did sorta let my guard down at John mentioning the possibility of an in-game leaderboard. But I really shouldn't have halted development because of that. I started getting back to it on the last day of February.
Also, I forgot to rate the difficulty of "Medium-Hard MinisWIP". Probably a 4/5 I guess.
Sadly PixelWalker's legacy worlds are down, so I'll have to play them offline.
In a few hours, it'll be fifteen years since Multiplayer Platformworld was uploaded to Newgrounds. Happy birthday!
Ah, my bad. The problem was that the update logged me off, and I had NoScript blocking reCAPTCHA so the login screen couldn't load.
Whenever I try to play now I get this error at the "Authenticating..." stage:
Failed to join world!
Reason: undefined
This happens even when I play at https://pixelwalker.net/, which would normally bring me to the lobby.
Well having this happen not one, but two years in a row is a bad look.
From February 12, 2023:
Essentially, we want to create a gap of silence between now and when we’re ready to advertise the game. We intend that our next update post will be a gameplay trailer for the game. We do not anticipate giving any updates sooner than this for any reason other than the worst-case scenario of cancelling the game.
We have spoken about a timeframe for the game’s release internally; however, we do not have any dates that we wish to commit to publically. Therefore, do not expect any updates from us any time soon. It may be months or even years before we are ready.
If the wait seems long, just know that we've been warned about this, and we're still in the timeframe of "years" set by the development team. This also tells us the cancellation of the game would be announced as well.
Whoops, I messed up. I had a few worlds written for my a post, listed from what I played in PixelWalker. I forgot about that and closed the web browser, so I'll have to write some stuff again.
Impressive, you're doing a good job with the visuals.
OK I apparently did not consider the logistics enough, and assumed I'd have already played some levels this week. But Day 25, the last day I did this was in the previous week. And today I was busy until the last hour., so I was a bit late. With more freedom to play worlds whenever I like, not procrastinating is something I will have to learn from this. Hopefully the Legacy Leaderboards (or whatever I decide to call it) will help.
What if you: wanted to play EE, but God said: your two crummy old laptops aren't gonna charge.
That's what happened. I wasn't prepared, and I lost access to both EEO and the internet. The 25 day streak ended right there—no more technicalities about being three hours late. I'm back to this computer where I can play EE just fine.
Missing a few days seems to have caused a cosmic glitch that created three bizarre meta worlds sharing the same ID, listed below.
I will continue playing worlds as normal, but I will be more flexible to make this more fun for myself. I might allow additional worlds that show up in PixelWalker, and change to weekly worlds if needed.
Also in February, I will hopefully finish a bot that makes it easier to play these legacy worlds in PixelWalker with leaderboards. This means we can ALL be playing random EE worlds until EE! releases!
Just doing two tiny worlds, because I am very busy today and probably won't have time to do more.
Colorful columns of bricks. You can get on the top left right at spawn, but I don't think you can jump to the other side. But maybe it's possible.
A "key boss". Not really a boss, since the players press the keys and all the platforms are key doors. There are no rewards for survival, so I guess it's just for fun.
tags: boss, multiplayer
[ Started around 1745856006.8372 - Generated in 3.268 seconds, 9 queries executed - Memory usage: 2.43 MiB (Peak: 4.46 MiB) ]