Staredit Network > Forums > SC1 Mapping Tools > Topic: [EUD] EUPCalc
[EUD] EUPCalc
Aug 12 2012, 3:48 am
By: Roy  

Aug 12 2012, 3:48 am Roy Post #1

An artist's depiction of an Extended Unit Death


EUPCalc
A convenience tool for the EUD enthusiast

Description

EUPCalc, or Extended Unit Placement Calculator, is exactly what it sounds like: a calculator for all possible Player/UnitId combinations for writing to a specific address (as discussed in this topic). There are many different combinations of players and unit ids that are possible to write to a specific address, and this program conveniently provides all of them for you.
Screenshots

Collapsable Box
Quick How-To

First, you need to pick the address you want to write to. A great place to look would be in the EUD Database and the Useful EUD Reference topic. If you are unfamiliar with EUDs, it is recommended that you read A Mapmaker's Guide for Creating EUDs and get some practice with them before going into more advanced/unstable EUD work.

After you have your address, simply put it in the text box at the top of the program and click "Go!" to start calculating. Note that the program is expecting a hexadecimal address, and you should prepend "0x" to signify that you are indeed giving it a hexidecimal value (otherwise, it will attempt to convert to hex and prepend "0x" for you).

As for reading the output, you'll note that each row has three columns. The first column is the player number, which will be the owner of the unit to place. The second and third columns are both Unit IDs. The "DeathId" column is the Unit ID that will write to the address when that unit dies, and the "PlaceId1" and "PlaceId2" columns are the Unit ID that will write to the address when that unit is placed (at the very beginning of the map). PlaceId1 is writing the All Unit Count for the unit, and PlaceId2 is writing the Completed Unit Count for the unit (both of which are written for a preplaced unit at map initialization). Keep in mind that all units will write to these addresses when they are placed and when they die (and other addresses as well), so when using an extended unit, you may be unintentionally writing to several different areas, which can cause stability issues and crazy side-effects.

Some extended units will crash when they die, and some will crash when they are being placed (or when the map initializes, which for the purposes of this phenomenon is the same thing). Which ones work? Well, unfortunately, we don't know. Extended units are highly unstable and unpredictable, and we only have a few documented cases of Player/Unit ID combinations that won't crash the game immediately, and even fewer that are safe to kill. Even though there are 21-22 different combinations for a given address, chances are good that none of them will be ideal for use.
Download

This is the second public release of EUPCalc. The current version is Version 3.
This program requires the .NET Framework 4 to run.

Download from Sen's DLDB


Post has been edited 4 time(s), last time on Jan 5 2018, 6:59 pm by Roy.




Aug 12 2012, 3:59 am jjf28 Post #2

Cartography Artisan

your minimum ID's seem to be off a Ceiling (player can't be higher than 256)
Code
Min ID = Ceiling[ ( Address - 5810016 ) / 48 ]


Otherwise, great work! :D



Rs_yes-im4real - Clan Aura - jjf28.net84.net

Reached the top of StarCraft theory crafting 2:12 AM CST, August 2nd, 2014.

Aug 12 2012, 4:05 am Roy Post #3

An artist's depiction of an Extended Unit Death

Does it give an output for P257? I haven't seen an issue there. The player values calculated are the actual player number, which start at 1. The actual value in SC for P256 is 255.

Or am I misunderstanding you?

Edit: I see the error. Fixing it now.

Edit: Fixed.

Post has been edited 2 time(s), last time on Aug 12 2012, 4:13 am by Roy.




Aug 12 2012, 4:07 am staxx Post #4



Awesome, i get to be lazy again! :inlove:



None.

Aug 13 2012, 12:25 pm Roy Post #5

An artist's depiction of an Extended Unit Death

Updated to include Unit IDs for the Completed Unit Count table.

I also changed the name to EUPCalc. It's becoming more and more apparent that this discovery extends beyond unit deaths, and so the name Extended Unit Placement seems more appropriate. From now on, I will be using EUPs when referring to what was formerly known as Neo-EUDs.




Aug 26 2013, 10:03 am RexyRex Post #6



Roy is amazing.

Can we get some examples of what you can do with this in-game?

I remember being able to modify unit HP with EUDs years ago....



None.

Aug 26 2013, 2:12 pm Roy Post #7

An artist's depiction of an Extended Unit Death

People have attached a few examples in this topic: http://www.staredit.net/topic/15356/

Leeroy_Jenkins has also included EUPs in his completed map, http://www.staredit.net/topic/15499/ where you can play as a Ghost with the ability to cast Dark Swarm.

Modifying unit HP using this method is, unfortunately, impractical, because HP doesn't fall on the first byte.




Apr 17 2014, 7:13 am RexyRex Post #8



hi sorry for bumping an old thread but just wanted to say thanks Roy your post was very informative as always :)

just saw it lol

EDIT: A ghost with Dark swarm would be amazing for so many reasons



None.

Options
  Back to forum
Please log in to reply to this topic or to report it.
Members in this topic: None.
[09:10 am]
Suicidal Insanity -- :P
[09:10 am]
Suicidal Insanity -- Not that I think that is a good idea
[09:10 am]
Suicidal Insanity -- then it is a real index
[09:10 am]
Suicidal Insanity -- jjf28
jjf28 shouted: Suicidal Insanity I can't have code saying xIndex for something that's 1-based, to me xIndex is always a 0-based array index specifically, anything else is an identifier ("Id", usually sequential) or key (hash or a fixed-byte abbreviation or something), those are my cues so I don't need to constantly refer to some documentation so I know what to code
I'm just saying have your function 'GetMapTitleStringIndex' return realValue - 1
[01:45 am]
CaptainWill -- If anyone was considering Hypnospace Outlaw, I recommend it
[01:41 am]
jjf28 -- I think the reason I had it so wrong was cause I could treat it as a 0-based index from section start (offsets actually start after first two bytes of numStrings) so I had my access simplified like that :P
[01:08 am]
jjf28 -- Suicidal Insanity
Suicidal Insanity shouted: No you don't. you can just change all the getters that give you a stringID instead
I can't have code saying xIndex for something that's 1-based, to me xIndex is always a 0-based array index specifically, anything else is an identifier ("Id", usually sequential) or key (hash or a fixed-byte abbreviation or something), those are my cues so I don't need to constantly refer to some documentation so I know what to code
[12:52 am]
O)FaRTy1billion[MM] -- 0 usually means no string or default string
[09:58 pm]
Ultraviolet -- :wob:
[09:51 pm]
Corbo -- hi
Please log in to shout.


Members Online: Roy, jjf28, dajana141000, nertysadewera5, Rawflesh0615, Suicidal Insanity