Loading...
  OR  Zero-K Name:    Password:   

Post edit history

Fun Thing With Eggs

To display differences between versions, select one or more edits in the list using checkboxes and click "diff selected"
Post edit history
Date Editor Before After
5/29/2026 5:59:24 AMJPrankQrow before revert after revert
Before After
1 Hi Guys, 1 Hi Guys,
2 \n 2 \n
3 I don't like the egg. 3 I don't like the egg.
4 \n 4 \n
5 Thus, this once, I am going to publish all the ways to break the egg. So hopefully it goes away. 5 Thus, this once, I am going to publish all the ways to break the egg. So hopefully it goes away.
6 \n 6 \n
7 Method 1: using hatchForTeam abuse in order to duplicate coms through teamshare 7 Method 1: using hatchForTeam abuse in order to duplicate coms through teamshare
8 \n 8 \n
9 * Two players share a team (commshare). Player A is on Team 1, Player B is Team 2. 9 * Two players share a team (commshare). Player A is on Team 1, Player B is Team 2.
10 * Team 1 loses their commander. Team 2's commander is still alive. 10 * Team 1 loses their commander. Team 2's commander is still alive.
11 * FindTeamNeedingCommander correctly says "Team 1 needs one" → hatchForTeam = 1. 11 * FindTeamNeedingCommander correctly says "Team 1 needs one" → hatchForTeam = 1.
12 * MorphCompleted's final check counts only units with commander_owner_team == 1. If Team 2's alive commander is tagged as owner_team=2 (different ID), it is invisible to the check. 12 * MorphCompleted's final check counts only units with commander_owner_team == 1. If Team 2's alive commander is tagged as owner_team=2 (different ID), it is invisible to the check.
13 * The egg hatches → Team 1 gets a new commander even though the shared group already has one. 13 * The egg hatches → Team 1 gets a new commander even though the shared group already has one.
14 \n 14 \n
15 Method 2: start_comm_count abuse (not really useful) 15 Method 2: start_comm_count abuse (not really useful)
16 \n 16 \n
17 start_comm_count is only set for teams that got a starting commander via start_unit_setup.lua. However, its default fallback is 1, not 0. This means any team that never had a starting commander is implicitly assumed to deserve one. If a player starts without a commander (e.g., a special game mode), they can hatch one from an egg without any check ever proving they had a commander that died. 17 start_comm_count is only set for teams that got a starting commander via start_unit_setup.lua. However, its default fallback is 1, not 0. This means any team that never had a starting commander is implicitly assumed to deserve one. If a player starts without a commander (e.g., a special game mode), they can hatch one from an egg without any check ever proving they had a commander that died.
18 \n 18 \n
19 Method 3: GG.MorphCompleted nil setstate abuse (making your com invisible to the counter) 19 Method 3: GG.MorphCompleted nil setstate abuse (making your com invisible to the counter)
20 \n 20 \n
21 This code runs for all commander morphs (not just from eggs). When a regular commander upgrades (e.g., dynstrike0 → dynstrike1), hatchForTeam is nil, so the function returns true immediately — but it has already overwritten commander_owner_team on the new commander unit. If ownerTeam resolves to nil (because neither param was set), the new commander has commander_owner_team = nil, making it invisible to CountCommandersByTeam. A commander with no owner-team entry effectively bypasses the egg limit check for all future hatches on the same team. 21 This code runs for all commander morphs (not just from eggs). When a regular commander upgrades (e.g., dynstrike0 → dynstrike1), hatchForTeam is nil, so the function returns true immediately — but it has already overwritten commander_owner_team on the new commander unit. If ownerTeam resolves to nil (because neither param was set), the new commander has commander_owner_team = nil, making it invisible to CountCommandersByTeam. A commander with no owner-team entry effectively bypasses the egg limit check for all future hatches on the same team.
22 \n 22 \n
23 Method 4: Domi/Reef steel counter freeze (make it so your opponent can never egg again!) 23 Method 4: Domi/Reef steel counter freeze (make it so your opponent can never egg again!)
24 \n 24 \n
25 * Team A's commander is dead. Egg starts morphing. egg_morph_owner_team = A. This reserves a slot and blocks other eggs. 25 * Team A's commander is dead. Egg starts morphing. egg_morph_owner_team = A. This reserves a slot and blocks other eggs.
26 * An ally (or an enemy using Dominatrix) captures the egg mid-morph. 26 * An ally (or an enemy using Dominatrix) captures the egg mid-morph.
27 unit_morph.lua:UnitTaken correctly updates morphData.teamID = newTeamID. 27 unit_morph.lua:UnitTaken correctly updates morphData.teamID = newTeamID.
28 * But egg_morph_owner_team is never cleared on the captured egg. 28 * But egg_morph_owner_team is never cleared on the captured egg.
29 MorphCompleted still uses hatchForTeam = A for its final check, while the commander spawns for the new owner — potentially giving the new team a "free" commander on Team A's quota, while also leaving Team A's slot permanently reserved (blocking further hatches for A). 29 MorphCompleted still uses hatchForTeam = A for its final check, while the commander spawns for the new owner — potentially giving the new team a "free" commander on Team A's quota, while also leaving Team A's slot permanently reserved (blocking further hatches for A).
30 \n 30 \n
31 Method 5: GameFrame related breaking (accomplishable with widgets) 31 Method 5: GameFrame related breaking (accomplishable with widgets)
32 \n 32 \n
33 If two eggs reach progress >= 1. 0 in the same game frame, FinishMorph is called for each sequentially within pairs( morphUnits) . The second egg's MorphCompleted does see the first commander already ( it has comm_level set via UnitCreated) , so it should be blocked. However, Lua's pairs( ) traversal order over a table is non-deterministic, and if the iteration order means both eggs are processed before any UnitCreated callback fires ( unusual but engine-dependent) , both could slip through. 33 If two eggs reach progress >= 1. 0 in the same game frame, FinishMorph is called for each sequentially within pairs( morphUnits) . The second egg's MorphCompleted does see the first commander already ( it has comm_level set via UnitCreated) , so it should be blocked. However, Lua's pairs( ) traversal order over a table is non-deterministic, and if the iteration order means both eggs are processed before any UnitCreated callback fires ( unusual but engine-dependent) , both could slip through. This is probably possible with widgets somewhat consistently.
34 \n 34 \n
35 \n 35 \n