• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 14:28
CEST 20:28
KST 03:28
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
Serral wins Maestros of the Game 226ByuL, and the Limitations of Standard Play3Team Liquid Map Contest #22: Results and Winners7Code S Season 2 (2026): RO4 and Finals Preview12TL.net Map Contest #22 - Voting & Ladder Map Selection7
Community News
Weekly Cups (June 29-July 5): Solar Doubles0MC vs IdrA, Boxer vs Nal_rA to be Legacy Matches @ BlizzCon415.0.16 Hotfix (June 30) - Balance + Bug Fixes40Weekly Cups (June 22-28): Zergs thrive in new patch5[TLMC] Summer 2026 Ladder Map Rotation0
StarCraft 2
General
Is the larve respawn broken? 5.0.16 patch for SC2 goes live (8 worker start) 5.0.16 Hotfix (June 30) - Balance + Bug Fixes Weekly Cups (June 29-July 5): Solar Doubles MC vs IdrA, Boxer vs Nal_rA to be Legacy Matches @ BlizzCon
Tourneys
HomeStory Cup 29 GSL CK #5 Race War RSL Revival: Season 6 - Qualifiers and Main Event Vespene Cup #1 — $300+ USD, July 10 Douyu Cup 2026: $20,000 Legends Event (June 26-28)
Strategy
[G] Having the right mentality to improve
Custom Maps
New Map Maker - Looking for Advice - Love or Hate Work In Progress Melee Maps [D]RTS in all its shapes and glory <3
External Content
Mutation # 533 Die Together The PondCast: SC2 News & Results Mutation # 532 Nuclear Family Mutation # 531 Experimental Artillery
Brood War
General
BW General Discussion BGH Auto Balance -> http://bghmmr.eu/ Starcraft vs Retro Category on Twitch Data needed Snow On New ASL S22 Map, Zerg Nerf
Tourneys
CSLAN 4 is Coming! Escore Tournament StarCraft Season 2 The Casual Games of the Week Thread [Megathread] Daily Proleagues
Strategy
Simple Questions, Simple Answers Creating a full chart of Zerg builds Relatively freeroll strategies Why doesn't anyone use restoration?
Other Games
General Games
Dawn of War IV Summer Games Done Quick 2026! Nintendo Switch Thread Stormgate/Frost Giant Megathread ZeroSpace at Steam NextFest - Last free demo
Dota 2
Looking for a Dota Mentor Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
NeO.D_StephenKing vs This Guy From 1 Million Dance TL Mafia Community Thread TL Mafia Power Rank Vanilla Mini Mafia
Community
General
US Politics Mega-thread Russo-Ukrainian War Thread UK Politics Mega-thread YouTube Thread Canadian Politics Mega-thread
Fan Clubs
The HerO Fan Club!
Media & Entertainment
Anime Discussion Thread Movie Discussion! Series you have seen recently... [Req][Books] Good Fantasy/SciFi books [TV/BOOK] *SPOILERS* Game of Thrones Discussion
Sports
2024 - 2026 Football Thread Tennis[sport] Formula 1 Discussion McBoner: A hockey love story TeamLiquid Health and Fitness Initiative For 2023
World Cup 2022
Tech Support
FPS when play League Of Legend on laptop How to clean a TTe Thermaltake keyboard? Computer Build, Upgrade & Buying Resource Thread
TL Community
The Automated Ban List
Blogs
Major Shifts in the Gaming I…
TrAiDoS
An Exploration of th…
waywardstrategy
I'm an arrogant trash talke…
FlaShFTW
Gauntlet SC2: A Retrospectiv…
Ctone23
ramps on octagon
StaticNine
Funny Nicknames
LUCKY_NOOB
Customize Sidebar...

Website Feedback

Closed Threads



Active: 7292 users

[DISCOVERY] 2x high templar feedback - older dies - Page 8

Forum Index > SC2 General
Post a Reply
Prev 1 6 7 8 9 10 Next All
The Touch
Profile Joined September 2010
United Kingdom667 Posts
July 26 2012 09:24 GMT
#141
1, 2, 3, 4, 5, 6, and 7.

7 High Templar, a-ha-ha
You Got The Touch
AcrosstheSky
Profile Joined January 2011
United States237 Posts
Last Edited: 2012-07-26 09:47:42
July 26 2012 09:43 GMT
#142
Is it which one is produced first or which one has less energy on it?

Very nice job!
Thylacine
Profile Joined August 2011
Sweden882 Posts
July 26 2012 09:56 GMT
#143
Mysterious..
What you're looking at could be the end of a particularly terrifying nightmare. It isn't. It's the beginning. Introducing Mr. John Valentine, air traveler. His destination: the Twilight Zone...
ThePlayer33
Profile Joined October 2011
Australia2378 Posts
July 26 2012 09:59 GMT
#144
On July 26 2012 18:11 Roxor9999 wrote:
Show nested quote +
On July 26 2012 18:04 ThePlayer33 wrote:
so does this work with melee units or not

If you would have read the thread you would've known the answer, no.

the op says yes, i read the thread tyvm
| Idra | YuGiOh | Leenock | Coca |
pms
Profile Joined April 2008
Poland611 Posts
July 26 2012 10:02 GMT
#145
It's quite obvious from programming perspective: there is a loop in the code which checks damage dealt and units deaths. Apparently this loops iterates over units in the sequence of their creation (which is just a normal way of doing it, but maybe in sc2 some other solution should be applied, since it makes a difference in the game...).
scsnow
Profile Joined April 2010
Slovenia515 Posts
July 26 2012 10:11 GMT
#146
The older one is more experienced, of course he wins!
Pandemona *
Profile Blog Joined March 2011
Charlie Sheens House51493 Posts
July 26 2012 10:13 GMT
#147
Polish SC2 Mythbusters, well i'll be XD good job keep it up
ModeratorTeam Liquid Football Thread Guru! - Chelsea FC ♥
Yegwen
Profile Joined September 2011
Poland80 Posts
July 26 2012 10:25 GMT
#148
Well answering the questions regarding who we are and what we do - I run a regular polish starcraft 2 television on twitch.tv with a schedule we keep and all. Mythbusters is our new show - and we didn't expect the first episode to end with this interesting discovery.

Polish scene is quite alive and active, great place to be. As of myself - I am torn between the awesomness of english and polish scene. For now majority of shows are in polish, but we did for example provide an english commentary to an ESL tournament, and apparently did good enough to do more of it in near future.
We don't grow old, we get old by not growing
dani`
Profile Joined January 2011
Netherlands2402 Posts
July 26 2012 10:33 GMT
#149
On July 26 2012 19:11 scsnow wrote:
The older one is more experienced, of course he wins!

Sound reasonable, but the older one loses
urashimakt
Profile Joined October 2009
United States1591 Posts
Last Edited: 2012-07-26 10:42:36
July 26 2012 10:38 GMT
#150
On July 26 2012 17:06 AlanSmithee wrote:
This finding is very wierd to me.

It's fundamental in game programmnig that all agents are handled with the same priorety each loop.
for example:

agent a cast spell
agent b cast spell

agent a collision detection
agent b collision detection

agent a loose hp
agent b loose hp

By your results the loop would look like

agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp

and that would be a very fundamental flaw in the code design.

I doubt it is actually a bug, it must be an active desicion of blizzards part to have it work this way.
I wonder why though, it makes very little sense to me.

And why would they sort their priority-queue baed on how it was added.. Like they are using a stack or something... Efficient but not very dynamic for this kind of a game.. Would love to see their code.

Nice find!

Stacks are pretty good and efficiency is super important in a game where you might have over 1000 actionable entities in a single 1v1 match. Blizzard already has the solution to this issue and it's not reworking the foundation, choosing another abritrary insertion index (or worse yet, randomizing insertion or remixing at intervals).

The solution is to add the same random delay fields to abilities that attacks already have.
Who dat ninja?
Bagi
Profile Joined August 2010
Germany6799 Posts
July 26 2012 10:48 GMT
#151
On July 26 2012 19:11 scsnow wrote:
The older one is more experienced, of course he wins!

Nope he's tired from all the fighting, so he loses.
AlanSmithee
Profile Joined May 2012
39 Posts
Last Edited: 2012-07-26 11:36:50
July 26 2012 11:21 GMT
#152
On July 26 2012 19:38 urashimakt wrote:
Show nested quote +
On July 26 2012 17:06 AlanSmithee wrote:
This finding is very wierd to me.

It's fundamental in game programmnig that all agents are handled with the same priorety each loop.
for example:

agent a cast spell
agent b cast spell

agent a collision detection
agent b collision detection

agent a loose hp
agent b loose hp

By your results the loop would look like

agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp

and that would be a very fundamental flaw in the code design.

I doubt it is actually a bug, it must be an active desicion of blizzards part to have it work this way.
I wonder why though, it makes very little sense to me.

And why would they sort their priority-queue baed on how it was added.. Like they are using a stack or something... Efficient but not very dynamic for this kind of a game.. Would love to see their code.

Nice find!

Stacks are pretty good and efficiency is super important in a game where you might have over 1000 actionable entities in a single 1v1 match. Blizzard already has the solution to this issue and it's not reworking the foundation, choosing another abritrary insertion index (or worse yet, randomizing insertion or remixing at intervals).

The solution is to add the same random delay fields to abilities that attacks already have.


Uhm.. randomizing insertion? mixing at intervals? Why on earth would you do that? Anyone with the slightest knowledge of databasemanagement or register handling would know that is a bad idea for many reasons.

However, would you profile this game I am 99% sure there would be no bottleneck or any risk of a bottleneck in this part of the logic. Potential risk in the logics department might be pathfnding but they've managed that nicely and other then that the heavy workload is on the graphics-side and network side of things.

About "choosing another abritrary insertion index", there is no need for that, using any template-based container that support binary search trees, finding agents is done with very few iterations, no mather the method of insertion. Again tehre is no heavy workload in this.

*EDIT* Ok, im tired, the method of insertion does matter since the agents would have to be ordered to be able to do a binary search, hoever this is easily and efficiently done using recursion, so my claims are still valid.

And also i just pulled the word stack out of my *** since it was the first that popped to mind, there is ofcourse no way they would even consider use a stack for this as they need to be able to access elements from within the container and not only the last inserted. They are probably using and normal dynamic array (read vector) or container with mapped values (read map) I wouldnt know if i cant see the code first.

Again, they must have an active reason for having it this way, which i can't think of. I dont think your sTatements are accurate though.

*EDIT 2* Delay fields are a solution if that is the behaviour you want. I do not think it is vise to ompare auto-cast abilitys (like bullets) to active ability's like feedback. Adding a random delay could have a negative effect as it would take away from the skill of the player. Again if the delay is very small this might not matter, would have to be tested to know.
InPlainSight
Profile Joined January 2009
New Zealand40 Posts
July 26 2012 11:42 GMT
#153
On July 26 2012 20:21 AlanSmithee wrote:
Show nested quote +
On July 26 2012 19:38 urashimakt wrote:
On July 26 2012 17:06 AlanSmithee wrote:
This finding is very wierd to me.

It's fundamental in game programmnig that all agents are handled with the same priorety each loop.
for example:

agent a cast spell
agent b cast spell

agent a collision detection
agent b collision detection

agent a loose hp
agent b loose hp

By your results the loop would look like

agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp

and that would be a very fundamental flaw in the code design.

I doubt it is actually a bug, it must be an active desicion of blizzards part to have it work this way.
I wonder why though, it makes very little sense to me.

And why would they sort their priority-queue baed on how it was added.. Like they are using a stack or something... Efficient but not very dynamic for this kind of a game.. Would love to see their code.

Nice find!

Stacks are pretty good and efficiency is super important in a game where you might have over 1000 actionable entities in a single 1v1 match. Blizzard already has the solution to this issue and it's not reworking the foundation, choosing another abritrary insertion index (or worse yet, randomizing insertion or remixing at intervals).

The solution is to add the same random delay fields to abilities that attacks already have.


Uhm.. randomizing insertion? mixing at intervals? Why on earth would you do that? Anyone with the slightest knowledge of databasemanagement or register handling would know that is a bad idea for many reasons.

However, would you profile this game I am 99% sure there would be no bottleneck or any risk of a bottleneck in this part of the logic. Potential risk in the logics department might be pathfnding but they've managed that nicely and other then that the heavy workload is on the graphics-side and network side of things.

About "choosing another abritrary insertion index", there is no need for that, using any template-based container that support binary search trees, finding agents is done with very few iterations, no mather the method of insertion. Again tehre is no heavy workload in this.

*EDIT* Ok, im tired, the method of insertion does matter since the agents would have to be ordered to be able to do a binary search, hoever this is easily and efficiently done using recursion, so my claims are still valid.

And also i just pulled the word stack out of my *** since it was the first that popped to mind, there is ofcourse no way they would even consider use a stack for this as they need to be able to access elements from within the container and not only the last inserted. They are probably using and normal dynamic array (read vector) or container with mapped values (read map) I wouldnt know if i cant see the code first.

Again, they must have an active reason for having it this way, which i can't think of. I dont think your sTatements are accurate though.


From the fact that the last unit created is iterated first I assumed that the data structure was a linked list. Addressing why this progression would be used
agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp


instead of the other would likely be due to caching as putting the same unit in the cache 3 times is much slower than once and performing many operations on it. Additionally the game engine doesn't like simultaneous attacks which in spite of the random variation in attack speed would still occur if every unit had it's attack processed in a separate loop to deaths being processed.
AlanSmithee
Profile Joined May 2012
39 Posts
July 26 2012 11:52 GMT
#154
On July 26 2012 20:42 InPlainSight wrote:
Show nested quote +
On July 26 2012 20:21 AlanSmithee wrote:
On July 26 2012 19:38 urashimakt wrote:
On July 26 2012 17:06 AlanSmithee wrote:
This finding is very wierd to me.

It's fundamental in game programmnig that all agents are handled with the same priorety each loop.
for example:

agent a cast spell
agent b cast spell

agent a collision detection
agent b collision detection

agent a loose hp
agent b loose hp

By your results the loop would look like

agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp

and that would be a very fundamental flaw in the code design.

I doubt it is actually a bug, it must be an active desicion of blizzards part to have it work this way.
I wonder why though, it makes very little sense to me.

And why would they sort their priority-queue baed on how it was added.. Like they are using a stack or something... Efficient but not very dynamic for this kind of a game.. Would love to see their code.

Nice find!

Stacks are pretty good and efficiency is super important in a game where you might have over 1000 actionable entities in a single 1v1 match. Blizzard already has the solution to this issue and it's not reworking the foundation, choosing another abritrary insertion index (or worse yet, randomizing insertion or remixing at intervals).

The solution is to add the same random delay fields to abilities that attacks already have.


Uhm.. randomizing insertion? mixing at intervals? Why on earth would you do that? Anyone with the slightest knowledge of databasemanagement or register handling would know that is a bad idea for many reasons.

However, would you profile this game I am 99% sure there would be no bottleneck or any risk of a bottleneck in this part of the logic. Potential risk in the logics department might be pathfnding but they've managed that nicely and other then that the heavy workload is on the graphics-side and network side of things.

About "choosing another abritrary insertion index", there is no need for that, using any template-based container that support binary search trees, finding agents is done with very few iterations, no mather the method of insertion. Again tehre is no heavy workload in this.

*EDIT* Ok, im tired, the method of insertion does matter since the agents would have to be ordered to be able to do a binary search, hoever this is easily and efficiently done using recursion, so my claims are still valid.

And also i just pulled the word stack out of my *** since it was the first that popped to mind, there is ofcourse no way they would even consider use a stack for this as they need to be able to access elements from within the container and not only the last inserted. They are probably using and normal dynamic array (read vector) or container with mapped values (read map) I wouldnt know if i cant see the code first.

Again, they must have an active reason for having it this way, which i can't think of. I dont think your sTatements are accurate though.


From the fact that the last unit created is iterated first I assumed that the data structure was a linked list. Addressing why this progression would be used
Show nested quote +
agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp


instead of the other would likely be due to caching as putting the same unit in the cache 3 times is much slower than once and performing many operations on it. Additionally the game engine doesn't like simultaneous attacks which in spite of the random variation in attack speed would still occur if every unit had it's attack processed in a separate loop to deaths being processed.


Might be a linked list, might not, I am fairly sure it is not a stak though.
I don't see why they would use a linked list though since it doesn't support random access.

Hmm you really think they would cache that during the loops? using good OO design, they should be able to access these agents in any point of the execution/loop, why would they cache it?

Also, what about the game engine does not "like" simultaneous attacks? I have no knowledge of the engine blizzard built for this game, please enlgihten me.

Just to avoid any confusion i am not talking about multi-threaded loops, just standard game-loop logic as in
ab
ab
ab
as oposed to
aaa
bbb

Thanks in advance.
InPlainSight
Profile Joined January 2009
New Zealand40 Posts
July 26 2012 12:03 GMT
#155
On July 26 2012 20:52 AlanSmithee wrote:
Show nested quote +
On July 26 2012 20:42 InPlainSight wrote:
On July 26 2012 20:21 AlanSmithee wrote:
On July 26 2012 19:38 urashimakt wrote:
On July 26 2012 17:06 AlanSmithee wrote:
This finding is very wierd to me.

It's fundamental in game programmnig that all agents are handled with the same priorety each loop.
for example:

agent a cast spell
agent b cast spell

agent a collision detection
agent b collision detection

agent a loose hp
agent b loose hp

By your results the loop would look like

agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp

and that would be a very fundamental flaw in the code design.

I doubt it is actually a bug, it must be an active desicion of blizzards part to have it work this way.
I wonder why though, it makes very little sense to me.

And why would they sort their priority-queue baed on how it was added.. Like they are using a stack or something... Efficient but not very dynamic for this kind of a game.. Would love to see their code.

Nice find!

Stacks are pretty good and efficiency is super important in a game where you might have over 1000 actionable entities in a single 1v1 match. Blizzard already has the solution to this issue and it's not reworking the foundation, choosing another abritrary insertion index (or worse yet, randomizing insertion or remixing at intervals).

The solution is to add the same random delay fields to abilities that attacks already have.


Uhm.. randomizing insertion? mixing at intervals? Why on earth would you do that? Anyone with the slightest knowledge of databasemanagement or register handling would know that is a bad idea for many reasons.

However, would you profile this game I am 99% sure there would be no bottleneck or any risk of a bottleneck in this part of the logic. Potential risk in the logics department might be pathfnding but they've managed that nicely and other then that the heavy workload is on the graphics-side and network side of things.

About "choosing another abritrary insertion index", there is no need for that, using any template-based container that support binary search trees, finding agents is done with very few iterations, no mather the method of insertion. Again tehre is no heavy workload in this.

*EDIT* Ok, im tired, the method of insertion does matter since the agents would have to be ordered to be able to do a binary search, hoever this is easily and efficiently done using recursion, so my claims are still valid.

And also i just pulled the word stack out of my *** since it was the first that popped to mind, there is ofcourse no way they would even consider use a stack for this as they need to be able to access elements from within the container and not only the last inserted. They are probably using and normal dynamic array (read vector) or container with mapped values (read map) I wouldnt know if i cant see the code first.

Again, they must have an active reason for having it this way, which i can't think of. I dont think your sTatements are accurate though.


From the fact that the last unit created is iterated first I assumed that the data structure was a linked list. Addressing why this progression would be used
agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp


instead of the other would likely be due to caching as putting the same unit in the cache 3 times is much slower than once and performing many operations on it. Additionally the game engine doesn't like simultaneous attacks which in spite of the random variation in attack speed would still occur if every unit had it's attack processed in a separate loop to deaths being processed.


Might be a linked list, might not, I am fairly sure it is not a stak though.
I don't see why they would use a linked list though since it doesn't support random access.

Hmm you really think they would cache that during the loops? using good OO design, they should be able to access these agents in any point of the execution/loop, why would they cache it?

Also, what about the game engine does not "like" simultaneous attacks? I have no knowledge of the engine blizzard built for this game, please enlgihten me.

Just to avoid any confusion i am not talking about multi-threaded loops, just standard game-loop logic as in
ab
ab
ab
as oposed to
aaa
bbb

Thanks in advance.


Th reason I thought it would be linked list is that out of the different structures which would be iterated from newest element to oldest a linked list with insertation at the head makes the most sense. I always assumed that a basic array would do as that allows random access and can easily remove units however in blizzards engine where units seem to die part way through a game state and not at the end as is shown by units not being overkilled by instantaneos attacks a linked list actually makes sense as removing an element from a linked list is easy to do even mid iteration whereas removing units from an array whilst being iterated ends up being messy.

I assume units are held in several datastructures but the linked list is the one iterated each turn. They will probably be in some kind of geohash as well as maybe some tree structures for help with target finding and collision detection.

In terms of the caching what I mean is processor level caching, the processor caching a unit to L1 and performing many operations is much faster than caching the thing once, caching another item and then coming back to that one after iterating all other units in the game. I'm no expert on caching so I could be very wrong here but that's an explaination I came up with.

In terms of not liking simutaneos attacks I simply mean that instant attacking units seem unable to kill one another. Any melee unit, marine or seige tank (and there are probably others) are incapable of killing each other. If units all have there attacks processed they would often kill each other even accounting for the random variation. I don't know why blizzard decided this was for the best but since they decided to do it this was processing all of a units actions at a time seems logical and would also remove some redundant processes for units which just end up dying at the end of the loop anyways.

AlanSmithee
Profile Joined May 2012
39 Posts
Last Edited: 2012-07-26 12:09:03
July 26 2012 12:08 GMT
#156
On July 26 2012 21:03 InPlainSight wrote:
Show nested quote +
On July 26 2012 20:52 AlanSmithee wrote:
On July 26 2012 20:42 InPlainSight wrote:
On July 26 2012 20:21 AlanSmithee wrote:
On July 26 2012 19:38 urashimakt wrote:
On July 26 2012 17:06 AlanSmithee wrote:
This finding is very wierd to me.

It's fundamental in game programmnig that all agents are handled with the same priorety each loop.
for example:

agent a cast spell
agent b cast spell

agent a collision detection
agent b collision detection

agent a loose hp
agent b loose hp

By your results the loop would look like

agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp

and that would be a very fundamental flaw in the code design.

I doubt it is actually a bug, it must be an active desicion of blizzards part to have it work this way.
I wonder why though, it makes very little sense to me.

And why would they sort their priority-queue baed on how it was added.. Like they are using a stack or something... Efficient but not very dynamic for this kind of a game.. Would love to see their code.

Nice find!

Stacks are pretty good and efficiency is super important in a game where you might have over 1000 actionable entities in a single 1v1 match. Blizzard already has the solution to this issue and it's not reworking the foundation, choosing another abritrary insertion index (or worse yet, randomizing insertion or remixing at intervals).

The solution is to add the same random delay fields to abilities that attacks already have.


Uhm.. randomizing insertion? mixing at intervals? Why on earth would you do that? Anyone with the slightest knowledge of databasemanagement or register handling would know that is a bad idea for many reasons.

However, would you profile this game I am 99% sure there would be no bottleneck or any risk of a bottleneck in this part of the logic. Potential risk in the logics department might be pathfnding but they've managed that nicely and other then that the heavy workload is on the graphics-side and network side of things.

About "choosing another abritrary insertion index", there is no need for that, using any template-based container that support binary search trees, finding agents is done with very few iterations, no mather the method of insertion. Again tehre is no heavy workload in this.

*EDIT* Ok, im tired, the method of insertion does matter since the agents would have to be ordered to be able to do a binary search, hoever this is easily and efficiently done using recursion, so my claims are still valid.

And also i just pulled the word stack out of my *** since it was the first that popped to mind, there is ofcourse no way they would even consider use a stack for this as they need to be able to access elements from within the container and not only the last inserted. They are probably using and normal dynamic array (read vector) or container with mapped values (read map) I wouldnt know if i cant see the code first.

Again, they must have an active reason for having it this way, which i can't think of. I dont think your sTatements are accurate though.


From the fact that the last unit created is iterated first I assumed that the data structure was a linked list. Addressing why this progression would be used
agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp


instead of the other would likely be due to caching as putting the same unit in the cache 3 times is much slower than once and performing many operations on it. Additionally the game engine doesn't like simultaneous attacks which in spite of the random variation in attack speed would still occur if every unit had it's attack processed in a separate loop to deaths being processed.


Might be a linked list, might not, I am fairly sure it is not a stak though.
I don't see why they would use a linked list though since it doesn't support random access.

Hmm you really think they would cache that during the loops? using good OO design, they should be able to access these agents in any point of the execution/loop, why would they cache it?

Also, what about the game engine does not "like" simultaneous attacks? I have no knowledge of the engine blizzard built for this game, please enlgihten me.

Just to avoid any confusion i am not talking about multi-threaded loops, just standard game-loop logic as in
ab
ab
ab
as oposed to
aaa
bbb

Thanks in advance.


Th reason I thought it would be linked list is that out of the different structures which would be iterated from newest element to oldest a linked list with insertation at the head makes the most sense. I always assumed that a basic array would do as that allows random access and can easily remove units however in blizzards engine where units seem to die part way through a game state and not at the end as is shown by units not being overkilled by instantaneos attacks a linked list actually makes sense as removing an element from a linked list is easy to do even mid iteration whereas removing units from an array whilst being iterated ends up being messy.

I assume units are held in several datastructures but the linked list is the one iterated each turn. They will probably be in some kind of geohash as well as maybe some tree structures for help with target finding and collision detection.

In terms of the caching what I mean is processor level caching, the processor caching a unit to L1 and performing many operations is much faster than caching the thing once, caching another item and then coming back to that one after iterating all other units in the game. I'm no expert on caching so I could be very wrong here but that's an explaination I came up with.

In terms of not liking simutaneos attacks I simply mean that instant attacking units seem unable to kill one another. Any melee unit, marine or seige tank (and there are probably others) are incapable of killing each other. If units all have there attacks processed they would often kill each other even accounting for the random variation. I don't know why blizzard decided this was for the best but since they decided to do it this was processing all of a units actions at a time seems logical and would also remove some redundant processes for units which just end up dying at the end of the loop anyways.




All your points makes sense, except maybe the processor level caching (just seems to me it would caus a lot of overhead, but I am in no way good at low level optimization so dont take my word for it)

Thanks for your answers.
InPlainSight
Profile Joined January 2009
New Zealand40 Posts
July 26 2012 12:17 GMT
#157
On July 26 2012 21:08 AlanSmithee wrote:
Show nested quote +
On July 26 2012 21:03 InPlainSight wrote:
On July 26 2012 20:52 AlanSmithee wrote:
On July 26 2012 20:42 InPlainSight wrote:
On July 26 2012 20:21 AlanSmithee wrote:
On July 26 2012 19:38 urashimakt wrote:
On July 26 2012 17:06 AlanSmithee wrote:
This finding is very wierd to me.

It's fundamental in game programmnig that all agents are handled with the same priorety each loop.
for example:

agent a cast spell
agent b cast spell

agent a collision detection
agent b collision detection

agent a loose hp
agent b loose hp

By your results the loop would look like

agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp

and that would be a very fundamental flaw in the code design.

I doubt it is actually a bug, it must be an active desicion of blizzards part to have it work this way.
I wonder why though, it makes very little sense to me.

And why would they sort their priority-queue baed on how it was added.. Like they are using a stack or something... Efficient but not very dynamic for this kind of a game.. Would love to see their code.

Nice find!

Stacks are pretty good and efficiency is super important in a game where you might have over 1000 actionable entities in a single 1v1 match. Blizzard already has the solution to this issue and it's not reworking the foundation, choosing another abritrary insertion index (or worse yet, randomizing insertion or remixing at intervals).

The solution is to add the same random delay fields to abilities that attacks already have.


Uhm.. randomizing insertion? mixing at intervals? Why on earth would you do that? Anyone with the slightest knowledge of databasemanagement or register handling would know that is a bad idea for many reasons.

However, would you profile this game I am 99% sure there would be no bottleneck or any risk of a bottleneck in this part of the logic. Potential risk in the logics department might be pathfnding but they've managed that nicely and other then that the heavy workload is on the graphics-side and network side of things.

About "choosing another abritrary insertion index", there is no need for that, using any template-based container that support binary search trees, finding agents is done with very few iterations, no mather the method of insertion. Again tehre is no heavy workload in this.

*EDIT* Ok, im tired, the method of insertion does matter since the agents would have to be ordered to be able to do a binary search, hoever this is easily and efficiently done using recursion, so my claims are still valid.

And also i just pulled the word stack out of my *** since it was the first that popped to mind, there is ofcourse no way they would even consider use a stack for this as they need to be able to access elements from within the container and not only the last inserted. They are probably using and normal dynamic array (read vector) or container with mapped values (read map) I wouldnt know if i cant see the code first.

Again, they must have an active reason for having it this way, which i can't think of. I dont think your sTatements are accurate though.


From the fact that the last unit created is iterated first I assumed that the data structure was a linked list. Addressing why this progression would be used
agent a cast spell
agent a collision detection
agent a loose hp

agent b cast spell
agent b collision detection
agent b loose hp


instead of the other would likely be due to caching as putting the same unit in the cache 3 times is much slower than once and performing many operations on it. Additionally the game engine doesn't like simultaneous attacks which in spite of the random variation in attack speed would still occur if every unit had it's attack processed in a separate loop to deaths being processed.


Might be a linked list, might not, I am fairly sure it is not a stak though.
I don't see why they would use a linked list though since it doesn't support random access.

Hmm you really think they would cache that during the loops? using good OO design, they should be able to access these agents in any point of the execution/loop, why would they cache it?

Also, what about the game engine does not "like" simultaneous attacks? I have no knowledge of the engine blizzard built for this game, please enlgihten me.

Just to avoid any confusion i am not talking about multi-threaded loops, just standard game-loop logic as in
ab
ab
ab
as oposed to
aaa
bbb

Thanks in advance.


Th reason I thought it would be linked list is that out of the different structures which would be iterated from newest element to oldest a linked list with insertation at the head makes the most sense. I always assumed that a basic array would do as that allows random access and can easily remove units however in blizzards engine where units seem to die part way through a game state and not at the end as is shown by units not being overkilled by instantaneos attacks a linked list actually makes sense as removing an element from a linked list is easy to do even mid iteration whereas removing units from an array whilst being iterated ends up being messy.

I assume units are held in several datastructures but the linked list is the one iterated each turn. They will probably be in some kind of geohash as well as maybe some tree structures for help with target finding and collision detection.

In terms of the caching what I mean is processor level caching, the processor caching a unit to L1 and performing many operations is much faster than caching the thing once, caching another item and then coming back to that one after iterating all other units in the game. I'm no expert on caching so I could be very wrong here but that's an explaination I came up with.

In terms of not liking simutaneos attacks I simply mean that instant attacking units seem unable to kill one another. Any melee unit, marine or seige tank (and there are probably others) are incapable of killing each other. If units all have there attacks processed they would often kill each other even accounting for the random variation. I don't know why blizzard decided this was for the best but since they decided to do it this was processing all of a units actions at a time seems logical and would also remove some redundant processes for units which just end up dying at the end of the loop anyways.




All your points makes sense, except maybe the processor level caching (just seems to me it would caus a lot of overhead, but I am in no way good at low level optimization so dont take my word for it)

Thanks for your answers.


This type of caching happens automatically. Basically when the cpu makes a call to ram the L1, L2 caches etc may choose to emulate part of the ram dramatically increasing access times for subsequent calls to the same block of memory. Bascially if we are using the same bits of data sequentially we are likely to get a performance boost rather than loading fresh memory every time for multiple uses.
Novalisk
Profile Blog Joined February 2011
Israel1818 Posts
July 26 2012 12:23 GMT
#158
On July 26 2012 05:41 urashimakt wrote:
Show nested quote +
On July 26 2012 05:39 herbie wrote:
It does make me wonder, if you created a newer army of 10 marines and an older army of 10 marines, would the newer army win slightly more often because it is updated first?

Over a long period of testing, sure. A LONG period. Super long. This advantage is infinitesimal when the random min/max delay appended to attacks is considered.



This needs to be tested.

If one marine survives a marine duel, it'll be firing on other marines for a while which can end up causing the other marines to survive and so on, leading to a landslide victory.

If two armies of marines a-move into each other in a perfect line, then the younger army should in theory always win due to the landslide effect. Even if the formations aren't perfect, I wouldn't be surprised if the younger army wins a majority of the fights.
/commercial
CamoPillbox
Profile Joined April 2012
Czech Republic229 Posts
Last Edited: 2012-07-26 13:00:28
July 26 2012 12:55 GMT
#159
i only wonder if it working on SC1 too..... i tested on zealot ling and marine works 100% same as with feedback ht.
Czech Terran(Hots) player
HeavOnEarth
Profile Blog Joined March 2008
United States7087 Posts
July 26 2012 13:01 GMT
#160
applies to larva selection iirc
"come korea next time... FXO house... 10 korean, 10 korean"
Prev 1 6 7 8 9 10 Next All
Please log in or register to reply.
Live Events Refresh
Next event in 14h 32m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
BRAT_OK 55
elazer 43
Railgan 38
FoxeR 35
MindelVK 15
StarCraft: Brood War
Calm 3355
Mini 358
BeSt 149
Dewaltoss 147
Soulkey 142
ggaemo 121
Rush 105
Free 47
scan(afreeca) 37
Rock 25
[ Show more ]
HiyA 10
Dota 2
Gorgc8583
Counter-Strike
fl0m1696
x6flipin566
Super Smash Bros
Mew2King131
Other Games
Grubby2170
FrodaN1460
B2W.Neo330
C9.Mang0248
Organizations
Other Games
gamesdonequick35453
BasetradeTV174
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
[ Show 15 non-featured ]
StarCraft 2
• StrangeGG 23
• Reevou 5
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• 80smullet 13
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• WagamamaTV427
Other Games
• imaqtpie763
Upcoming Events
Replay Cast
14h 32m
CrankTV Team League
16h 32m
OSC
22h 32m
Replay Cast
1d 5h
Replay Cast
1d 14h
CrankTV Team League
1d 16h
OSC
1d 18h
Replay Cast
2 days
RSL Revival
2 days
Serral vs Bunny
ByuN vs GgMaChine
CranKy Ducklings
2 days
[ Show More ]
Afreeca Starleague
2 days
Snow vs Jaedong
YSC vs hero
RSL Revival
3 days
Solar vs Rogue
Maru vs NightMare
Sparkling Tuna Cup
3 days
GSL
4 days
Replay Cast
5 days
WardiTV Weekly
5 days
The PondCast
6 days
Liquipedia Results

Completed

CSL Season 21: Qualifier 2
HSC XXIX
Eternal Conflict S2 E1

Ongoing

IPSL Spring 2026
Acropolis #4
YSL S3
CSL 2026 Summer (S21)
SCTL 2026 Spring
XSE Pro League 2026
IEM Cologne Major 2026
Stake Ranked Episode 2
CS Asia Championships 2026
Asian Champions League 2026
IEM Atlanta 2026
PGL Astana 2026
BLAST Rivals Spring 2026

Upcoming

Escore Tournament S3: W2
ASL Season 22: Wild Card Qualifier
CSLAN 4
Blizzard Classic Cup 2026
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
RSL Revival: Season 6
CranK Gathers Season 4: BW vs SC2 Team League
Light Tournament 2026
Eternal Conflict S2 Finale
Eternal Conflict S2 E3
Eternal Conflict S2 E2
Heroes Pulsing #3
Logitech G Connect 2026
StarSeries Fall 2026
FISSURE Playground #5
BLAST Open Fall 2026
Esports World Cup 2026
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.