EUDs
Aug 30 2010, 7:33 pm
By: StarBlue  

Aug 31 2010, 2:28 am NudeRaider Post #21

We can't explain the universe, just describe it; and we don't know whether our theories are true, we just know they're not wrong. >Harald Lesch

Okay don't confuse 2 things: (Unit) deaths (the way you're probably already using them in your map) and extended unit deaths (EUDs) which is one step further.
1. Deaths. We're using regular unit deaths as variables for various purposes. You modify a value of a unit that doesn't exist in your map and in another trigger you check for deaths of that unit and thus read the variable. Pretty basic stuff, no problems here right?

2. EUDs. Now someone went a step further. He abused the deaths condition to read any memory in StarCraft. (Ironically using deaths as a variable is already an abuse of their intended use.) He realized that StarCraft doesn't have error protection when using invalid player numbers and/or unit IDs in death conditions. Instead, StarCraft will read the memory that would be used to store the number of deaths of that player/unit ID if it wasn't invalid.

Also careful at this point, don't confuse "invalid unit ID" with (death of) a "unit that doesn't" exist in your map. Unit ID is a number that is assigned to each unit Blizzard integrated into StarCraft. UnitID 0 is Marine, UnitID 1 is Ghost, etc. Then there's units like cantina (probably something like UnitID 217) that got created in the engine, but were never implemented as a unit. You use those when using death counters as variables. But that's not an invalid unit ID, because there's an actual place in SC memory where the deaths of that unit are stored. Invalid IDs begin where the unused units end. Like unit ID 1000. There's just no unit that belongs to that ID, thus you can't read an actual death value for it.

Lets start from an example:
  • P1 deaths of Marine. They are always stored at the same location in SC Memory. Lets say it's at bytes 1000-1003. (4 bytes = 32bit long => death values can range from -2 billion to +2 billion)
    Bytes 1004-1041 store other information.
  • Next we look at P2 deaths of Marine which would be stored at bytes 1042-1045. Exactly 42 bytes further than for P1 Marine deaths. (Not sure on the actual increase in bytes between player numbers but it doesn't matter for this example.)
    Bytes 1046-1083 store other information.
  • Then P3 deaths would be at 1084-1087. Exactly 84 bytes further than for P1 Marine deaths.
You see it's always increasing by 42 bytes, so you could calculate where the deaths for P1000's Marine deaths would be, even though this player number is invalid and thus there won't be Marine deaths anymore. There will be completely different data.

So using this method we can make StarCraft think it checks for deaths, but in reality SC returns the data for completely different things. Like unit facing, for example. The trick is to know what information is stored where (Farty hosts a pretty good lookup-table for this), and what combination of player number and unit ID is needed to make SC read that specific part of the memory.
Well and that's where it gets complicated. The above posters have linked you to very good articles on how to calculate the values. If you understood now how EUD triggers are working you might have a chance understanding these articles, but it's still complicated. You can't just ask for a trigger, insert it into your map and it'll work. You need to tailor them for your map and that, requires you to understand the concept, unfortunately.

I hope my elaborate step-by-step overview of EUDs has helped you a little to understand what's going on. If not, try to ask specific questions so we can give you specific answers.




Aug 31 2010, 2:51 am rockz Post #22

ᴄʜᴇᴇsᴇ ɪᴛ!

make an EUD health detection map, and it will become much clearer. Watch the tutorial video and just copy it.



"Parliamentary inquiry, Mr. Chairman - do we have to call the Gentleman a gentleman if he's not one?"

Aug 31 2010, 3:59 am StarBlue Post #23



Nuderaider... my brain is still proccessing this (seriously, i dont know it now, but i could in the morning :O ) so i am just going to speed up the proccess by looking for this... video...
EDIT: where is it?
EDIT 2: found it myself, now all I need is cheat engine (had it before, but got rid of it because I had no use for it, but now I do).
EDIT 3: ok cheat engine opens the file, but doesnt change it, and artmoney wont even open it at all...

Post has been edited 3 time(s), last time on Aug 31 2010, 4:59 am by StarBlue.



None.

Aug 31 2010, 5:17 am Azrael Post #24



The "Player 123121 has suffered X deaths of Marine" or "Player 1 has suffered X deaths of UnitID: 2215" or "Memory at 141241 is 12415535" or whatever are all doing the same thing. None of them are actually measuring deaths.

You put those weird numbers into the Deaths condition, and StarCraft tries to read the deaths, but it sees that something is horribly wrong and goes "O WTF?! O_O" and ends up reading the number from somewhere other than deaths.

All you want to do is trick it into reading information you want it to read (unit HP, unit direction, etc) by putting the right numbers in. The only problem you have is finding what numbers you need to put in.

I'm pretty sure one of Farty's programs converts the weird looking "Deaths" conditions into a "Memory" condition instead. The newest version of StarEdit has an extra condition called "Memory" that lets you use it. The program also converts StarCraft's memory addresses into these, which as was mentioned, you can find with a program like ArtMoney.

I recommend watching the YouTube tutorial video a few times. Get health detection working and you'll be well on your way.

tl;dr: You put in fucked up numbers to break StarCraft and make it read whatever information you want it to.




Aug 31 2010, 5:35 am StarBlue Post #25



thats the thing, i need the pro thing for artmoney, an cheat engine wont let me change anything...



None.

Aug 31 2010, 6:17 am DavidJCobb Post #26



K, StarBlue, if you still don't get EUDs, then here's a basic explanation.

All types of data in a computer are zeroes and ones. Computers read zeroes and ones different ways depending on what they're looking for. If a computer is looking for text, it will read zeroes and ones a certain way; if it's looking for an image, it'll read the zeroes and ones another way.

Usually, a computer will find what it's looking for. We give the computer a set of zeroes and ones that represent text; it looks for text; it reads the zeroes and ones as text. But sometimes, a computer will look for the wrong thing. We might give a computer a set of zeroes and ones that represent text, but it might instead read them as an image. If you've ever done the MISSINGNO. glitch in Pokemon Red (the most popular video game glitch in history, to my knowledge), you've seen an example of this: the game takes non-image data and reads it as an image, and as a result, corrupted pixels are displayed.

A demonstration of the concept:

In that video, I trick Pokemon Red into taking the zeroes and ones that represent my in-game name ("wwwwwww"), and reading that data as a list of Wild Pokemon. Then, when I fight the glitch Pokemon 'M, the game tries to read various non-image zeroes and ones as an image; the "image" that it reads is 'M's corrupted sprite.

EUDs are just another example of this. We are tricking the game into taking data that does not represent unit deaths, and reading it as unit deaths. Then, we can compensate for how it's being read and gain information from that. In Fireball, Roy tricked StarCraft into taking data that did not represent unit deaths (the facing direction of a unit), and reading that as unit deaths (to get a number). He then wrote triggers that translated that number into switches, etc., that allowed him to tell what direction the unit was facing in.



None.

Aug 31 2010, 7:54 am StarBlue Post #27



David, I get it, my problem right now is that cheat enginge o\wont change anything, thus I can not find the numbers in the.... thingy... whatever...



None.

Aug 31 2010, 12:21 pm rockz Post #28

ᴄʜᴇᴇsᴇ ɪᴛ!

To use artmoeny you check the "I agree" box, then press OK, and it will work.



"Parliamentary inquiry, Mr. Chairman - do we have to call the Gentleman a gentleman if he's not one?"

Aug 31 2010, 12:31 pm sraw531 Post #29



I have been using artmoney for years now, never buying the "pro" version :) One thing to "never" try, is to change data while in a game... You get desynched. Funny experience, but ultimately not helpful.

The one thing i find most annoying about editing things using artmoney... is when the thing I'm editing (the specific offset) is only 0 or 1... Takes forever to find which one it is...

Edit: If anyone can tell me how to Set/add a target players upgrade levels (in this case, Zerg Missile attacks), it would be very appreciated.



None.

Aug 31 2010, 1:34 pm Azrael Post #30



Quote from sraw531
One thing to "never" try, is to change data while in a game... You get desynched.
Depends what you're changing.

Post has been edited 2 time(s), last time on Oct 12 2010, 2:21 am by DevliN. Reason: Mineral abuse.




Aug 31 2010, 3:51 pm rockz Post #31

ᴄʜᴇᴇsᴇ ɪᴛ!

@sraw531
0058D298 Upgrades Researched (SC) (12 * 46)
somewhere around there.

I think you can enable binary editing in artmoney, so you can just change the 0 or 1 like you wanted. If not, it's a simple matter of converting the binary into decimal in something like excel. To set via triggers, you'll need an eud action enabler hack with a set deaths action for the zerg missile attack, whatever the offset might be. You can check the oldwiki for scenario.chk format, or the wiki when I'm done moving the page to see the order of all the upgrades (alternatively you can move it).



"Parliamentary inquiry, Mr. Chairman - do we have to call the Gentleman a gentleman if he's not one?"

Aug 31 2010, 11:19 pm Roy Post #32

An artist's depiction of an Extended Unit Death

Quote from StarBlue
EDIT 2: Yeah, I'm going to look at the fireball map and see for myself...
EDIT 3: ok, I can't open the map :(
Here's a copy of the original map before protection. Just make sure it doesn't appear someplace where anyone could just download it.

EDIT:
Forgot to mention the EUDs are under each individual player. They are commented with "EUD Direction" and there's two triggers for "Up."

Attachments:
Fireball Unprotected.scx
Hits: 6 Size: 92.88kb

Post has been edited 1 time(s), last time on Sep 1 2010, 11:19 am by NudeRaider. Reason: merged posts




Options
  Back to forum
Please log in to reply to this topic or to report it.
Members in this topic: None.
[12:52 pm]
Vrael -- if you're gonna link that shit at least link some quality shit: https://www.youtube.com/watch?v=uUV3KvnvT-w
[11:17 am]
Zycorax -- :wob:
[2024-4-27. : 9:38 pm]
NudeRaider -- Ultraviolet
Ultraviolet shouted: NudeRaider sing it brother
trust me, you don't wanna hear that. I defer that to the pros.
[2024-4-27. : 7:56 pm]
Ultraviolet -- NudeRaider
NudeRaider shouted: "War nie wirklich weg" 🎵
sing it brother
[2024-4-27. : 6:24 pm]
NudeRaider -- "War nie wirklich weg" 🎵
[2024-4-27. : 3:33 pm]
O)FaRTy1billion[MM] -- o sen is back
[2024-4-27. : 1:53 am]
Ultraviolet -- :lol:
[2024-4-26. : 6:51 pm]
Vrael -- It is, and I could definitely use a company with a commitment to flexibility, quality, and customer satisfaction to provide effective solutions to dampness and humidity in my urban environment.
[2024-4-26. : 6:50 pm]
NudeRaider -- Vrael
Vrael shouted: Idk, I was looking more for a dehumidifer company which maybe stands out as a beacon of relief amidst damp and unpredictable climates of bustling metropolises. Not sure Amazon qualifies
sounds like moisture control is often a pressing concern in your city
[2024-4-26. : 6:50 pm]
Vrael -- Maybe here on the StarEdit Network I could look through the Forums for some Introductions to people who care about the Topics of Dehumidifiers and Carpet Cleaning?
Please log in to shout.


Members Online: Roy