SCRMaps
/
Sign in

Offsets: the game itself

The addresses that belong to no table: selection groups, game speed, volume, player names, cheat flags.

Explained in: PTR and EPD

Everything that is neither a dat table nor a structure offset. A great deal of what a map actually reaches for is in here: mouse coordinates, current player, screen position.

Player Name0x57EE9C · EPD -11570 · 25B × 1 · SC:R Unsupported — If you are playing as 'asdf' then you will find on that address: 'asdf'
Player 2 Selection Group0x628518 · EPD 161901 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection.
Player 3 Selection Group0x628548 · EPD 161913 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection.
Player 4 Selection Group0x628578 · EPD 161925 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection.
Player 5 Selection Group0x6285A8 · EPD 161937 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection.
Player 6 Selection Group0x6285D8 · EPD 161949 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection.
Player 7 Selection Group0x628608 · EPD 161961 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection.
Player 8 Selection Group0x628638 · EPD 161973 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection.
Unitnode Table0x59CCA8 · EPD 19025 · 336B × 1700 · SC:R Backed By Code — [SCR: See individual entries] See Unitnode Structure in the Reference page or https://github.com/bwapi/bwapi/blob/master/bwapi/BWAPI/Source/BW/CUnit.h Units are loaded to index 0 then 1699, 1698, 1697... (this includes pre-placed map units) Compute the memory location of an index using: 0x0059CCA8 + (0x150 * index) Example: Index 1699 is at 0x00628298 = 0x0059CCA8 + (0x150 * 0x6A3) (player 161,741) where 0x0059CCA8 is the base address, 0x150 = 336 is the size and 0x6A3 = 1699 is the unit index Index 1698 is at 0x00628148 = 0x0059CCA8 + (0x150 * 0x6A2) Index 1697 is at 0x00627FF8 = 0x0059CCA8 + (0x150 * 0x6A1) Index 1696 is at 0x00627EA8 = 0x0059CCA8 + (0x150 * 0x6A0) etc. (difference between each index is the size, 336 = 0x150)
Music Volume0x6CDFE0 · EPD 331551 · 4B × 1 · SC:R Backed By Code — 0-100 for music volume Note: SC:R no longer uses this address. The value is always 0 in SC:R.
Digital Volume0x6CDFE4 · EPD 331552 · 4B × 1 · SC:R Backed By Code — 0-100 for sound volume Note: SC:R no longer uses this address. The value is always 0 in SC:R.
Game Speed0x6CDFD4 · EPD 331548 · 4B × 1 · SC:R Backed By Code — The current game speed. The values are as follows: 0 = Slowest 1 = Slower 2 = Slow 3 = Normal 4 = Fast 5 = Faster 6 = Fastest Note: SC:R no longer uses this address. The value is always 0 in SC:R.
Pylon Auras are Visible0x63FF48 · EPD 0 · 4B × 1 · SC:R Read-Only — (Writing to it apparently does nothing :C .)
Cheat Flags0x6D5A6C · EPD 339394 · 4B × 1 · SC:R Simple Data — Setting cheat flags will work in multiplayer games, but maybe not as expected. 00000001 **Black Sheep Wall 00000002 Operation CWAL 00000004 Power Overwhelming 00000008 *Something For Nothing 00000010 *Show Me The Money 00000040 Game Over Man 00000080 There Is No Cow Level 00000100 Staying Alive 00000200 Ophelia 00000800 The Gathering 00001000 Medieval Man 00002000 Modify The Phase Variance 00004000 **War Aint What It Used To Be 00020000 Food For Thought 00040000 *Whats Mine Is Mine 00080000 *Breathe Deep 20000000 noglues If any of these are enabled and you use any cheat it will instead disable these and do their action (and since you can't use cheats in multiplayer they are useless there.) ** If you enable these in Multiplayer they will be automatically disabled. 28000200 - These flags apparently do not clear at the start of a game. Radio Free Zerg doesn't use these flags.
Music ID0x6D5BB0 · EPD 0 · 4B × 1 · SC:R support level not stated — Change this value and toggle music and it will play a different sound track. 0 = Off 1 = Zerg 1 2 = Zerg 2 3 = Zerg 3 4 = Terran 1 5 = Terran 2 6 = Terran 3 7 = Protoss 1 8 = Protoss 2 9 = Protoss 3 10 = Zerg Briefing Room 11 = Terran Briefing Room 12 = Protoss Briefing Room 13 = Zerg Defeat 14 = Terran Defeat 15 = Protoss Defeat 16 = Zerg Victory 17 = Terran Victory 18 = Protoss Victory 19 = Zerg Victory 20 = Terran Victory 21 = Protoss Victory 22 = Title/Menu Music 23 = Terran 2 (Credits?) 24 = Radio Free Zerg Others crash.
Unit Color Table0x581D76 · EPD -8572 (+2) · 8B × 12 · SC:R Simple Data — Each byte corresponds to a palette index used for each player color. (The low values for the starting address is the selection circle color for players 11 and 12. Usually 0x0101 ... See that address for details.)
Minimap Color Table0x581DD6 · EPD -8548 (+2) · 1B × 12 · SC:R Simple Data — Each byte references a palette index. This table is immediately after the unit color table, so the low value is the last 2 bytes of Player 12's unit color.
Player Selection Circle Colors0x581D6A · EPD -8575 (+2) · 1B × 12 · SC:R Simple Data — Each byte sets the color of the selection circle: 000 - Green 001 - Yellow 002 - Red 017 - Grey Blue* 136 - Light Grey* 138 - Dark Grey* Higher values can give different colors (most give solid black.) Asterisk colors are inconsistent. p1 = -8575 with mask 0x00FF0000 p2 = -8575 with mask 0xFF000000 p3 = -8574 with mask 0x000000FF p4 = -8574 with mask 0x0000FF00 p5 = -8574 with mask 0x00FF0000 p6 = -8574 with mask 0xFF000000 p7 = -8573 with mask 0x000000FF p8 = -8573 with mask 0x0000FF00 p9 = -8573 with mask 0x00FF0000 p10 = -8573 with mask 0xFF000000 p11 = -8572 with mask 0x000000FF p12 = -8572 with mask 0x0000FF00
Pointer to map "STR " section0x5993D4 · EPD 15388 · 4B × 1 · SC:R Backed By Code — Pointer default: first string
SC Technologies Available (0-23)0x58CE24 · EPD 2736 · 24B × 12 · SC:R Simple Data — Table layout is reverse compared to deaths/kills table. 1 row per player, 24 bytes per row, 1 byte per tech. BW techs are elsewhere. Offset: 24 * Player + Offs SC Techs: ID Offs. Name 00 +0 Stim Packs 01 +1 Lockdown 02 +2 EMP Shockwave 03 +3 Spider Mines 04 +4 Scanner Sweep 05 +5 Tank Siege Mode 06 +6 Defensive Matrix 07 +7 Irradiate 08 +8 Yamato Gun 09 +9 Cloaking Field 10 +10 Personnel Cloaking 11 +11 Burrowing 12 +12 Infestation 13 +13 Spawn Broodlings 14 +14 Dark Swarm 15 +15 Plague 16 +16 Consume 17 +17 Ensnare 18 +18 Parasite 19 +19 Psionic Storm 20 +20 Hallucination 21 +21 Recall 22 +22 Stasis Field 23 +23 Archon Warp
SC Technologies Researched (0-23)0x58CF44 · EPD 2808 · 24B × 12 · SC:R Simple Data — [See SC Technologies Available] http://farty1billion.dyndns.org/EUDdb/?pg=entry&id=410
SC Upgrades Available (0-45)0x58D088 · EPD 2889 · 46B × 12 · SC:R Simple Data — Table layout is reverse compared to deaths/kills table. 1 row per player, 46 bytes per row, 1 byte per upgrade. BW upgrades are elsewhere. Offset: 46 * Player + Offs SC Upgrades: ID Offs. Name 00 +0 Terran Infantry Armor 01 +1 Terran Vehicle Plating 02 +2 Terran Ship Plating 03 +3 Zerg Carapace 04 +4 Zerg Flyer Caparace 05 +5 Protoss Armor 06 +6 Protoss Plating 07 +7 Terran Infantry Weapons 08 +8 Terran Vehicle Weapons 09 +9 Terran Ship Weapons 10 +10 Zerg Melee Attacks 11 +11 Zerg Missile Attacks 12 +12 Zerg Flyer Attacks 13 +13 Protoss Ground Weapons 14 +14 Protoss Air Weapons 15 +15 Protoss Plasma Shields 16 +16 U-238 Shells 17 +17 Ion Thrusters 18 +18 Burst Lasers (Unused) 19 +19 Titan Reactor (SV +50) 20 +20 Ocular Implants 21 +21 Moebius Reactor (Ghost +50) 22 +22 Apollo Reactor (Wraith +50) 23 +23 Colossus Reactor (BC +50) 24 +24 Ventral Sacs 25 +25 Antennae 26 +26 Pneumatized Carapace 27 +27 Metabolic Boost 28 +28 Adrenal Glands 29 +29 Muscular Augments 30 +30 Grooved Spines 31 +31 Gamete Meiosis (Queen +50) 32 +32 Metasynaptic Node (Defiler +50) 33 +33 Singularity Charge 34 +34 Leg Enhancements 35 +35 Scarab Damage 36 +36 Reaver Capacity 37 +37 Gravitic Drive 38 +38 Sensor Array 39 +39 Gravitic Boosters 40 +40 Khaydarin Amulet (HT +50) 41 +41 Apial Sensors 42 +42 Gravitic Thrusters 43 +43 Carrier Capacity 44 +44 Khaydarin Core (Arbiter +50) 45 +45 Unknown Upgrade45
SC Upgrades Researched (0-45)0x58D2B0 · EPD 3027 · 46B × 12 · SC:R Simple Data — Table layout is reverse compared to deaths/kills table. 1 row per player, 46 bytes per row, 1 byte per upgrade. BW upgrades are elsewhere. Offset: 46 * Player + Offs SC Upgrades: ID Offs. Name 00 +0 Terran Infantry Armor 01 +1 Terran Vehicle Plating 02 +2 Terran Ship Plating 03 +3 Zerg Carapace 04 +4 Zerg Flyer Caparace 05 +5 Protoss Armor 06 +6 Protoss Plating 07 +7 Terran Infantry Weapons 08 +8 Terran Vehicle Weapons 09 +9 Terran Ship Weapons 10 +10 Zerg Melee Attacks 11 +11 Zerg Missile Attacks 12 +12 Zerg Flyer Attacks 13 +13 Protoss Ground Weapons 14 +14 Protoss Air Weapons 15 +15 Protoss Plasma Shields 16 +16 U-238 Shells 17 +17 Ion Thrusters 18 +18 Burst Lasers (Unused) 19 +19 Titan Reactor (SV +50) 20 +20 Ocular Implants 21 +21 Moebius Reactor (Ghost +50) 22 +22 Apollo Reactor (Wraith +50) 23 +23 Colossus Reactor (BC +50) 24 +24 Ventral Sacs 25 +25 Antennae 26 +26 Pneumatized Carapace 27 +27 Metabolic Boost 28 +28 Adrenal Glands 29 +29 Muscular Augments 30 +30 Grooved Spines 31 +31 Gamete Meiosis (Queen +50) 32 +32 Metasynaptic Node (Defiler +50) 33 +33 Singularity Charge 34 +34 Leg Enhancements 35 +35 Scarab Damage 36 +36 Reaver Capacity 37 +37 Gravitic Drive 38 +38 Sensor Array 39 +39 Gravitic Boosters 40 +40 Khaydarin Amulet (HT +50) 41 +41 Apial Sensors 42 +42 Gravitic Thrusters 43 +43 Carrier Capacity 44 +44 Khaydarin Core (Arbiter +50) 45 +45 Unknown Upgrade45
First Unit Pointer0x628430 · EPD 161843 · 4B × 1 · SC:R Backed By Code — The value is pointer to the first unit in the unitNodeTable.
Unit being Produced0x6CA9F0 · EPD 328099 · 4B × 1 · SC:R Unsupported — Set value to 1 to detect any unit currently being trained on any building. Not fully tested.
Filename for Lastreplay0x4FF900 · EPD -141977 · 12B × 1 · SC:R support level not stated — Contains the string "LastReplay".
Replay Speed Limiters0x4FF90C · EPD 0 · 4B × 7 · SC:R support level not stated — The speed in milliseconds to spend each frame during a replay. The array index is dependant on the game speed.
Replay Command Table0x4FF928 · EPD 0 · 16B × 2 · SC:R support level not stated — Contains the replay commands "show" and "hide" along with function pointers.
Replay show command modifiers0x4FF948 · EPD 0 · 32B × 12 · SC:R support level not stated — Contains sub-commands and leaderboard values to use in the "/replay show" command.
Menu Info Array0x4FFAD0 · EPD 0 · 12B × 27 · SC:R support level not stated — Contains the menu index, background index, and menu path.
Campaign List Info0x4FFC20 · EPD 0 · 8B × 85 · SC:R support level not stated — Contains the campaign listing info. WORD gluHist.tbl index WORD mapdata.dat index WORD cinematic index BYTE race index BYTE bonus flag
cInit Constructor Function Table0x50C000 · EPD 0 · 4B × 310 · SC:R support level not stated — Standard C-Runtime. Generated by Visual C++.
Current Cinematic ID0x5122B8 · EPD 0 · 4B × 1 · SC:R support level not stated — An index for the currently playing cinematic.
Game Speed Refresh Rate0x5124D8 · EPD -122787 · 4B × 7 · SC:R Simple Data — Contains the value in milliseconds required for each frame. Array index dependant on game speed...
Replay Speed Refresh Rate0x5124F4 · EPD 0 · 4B × 7 · SC:R support level not stated — Contains the time in milliseconds spent each frame. Array index dependent on game speed.
Image Update Functions0x512510 · EPD 0 · 8B × 18 · SC:R support level not stated — An array of image functions. The array is officially called sgUpdateFuncs.
Image Drawing Functions0x5125A0 · EPD -122737 · 12B × 18 · SC:R support level not stated — This corresponds to a value in images.dat. The official name for this array is sgDrawFuncs. Structure: +0x0 id +0x4 normal draw function pointer +0x8 mirror draw function
Active Nation ID0x512678 · EPD -122683 · 4B × 1 · SC:R Backed By Code — This is the same as Human ID unless you are playing Team Melee. The official name for this is g_ActiveNationID.
Active Human ID0x51267C · EPD -122682 · 4B × 1 · SC:R Backed By Code — This is your player ID. The official name for this is g_ActiveHumanID.
Active Storm ID0x512680 · EPD -122681 · 4B × 1 · SC:R Unsupported — This is your active storm ID, which is different from your player ID. The official name for this is g_ActiveStormID.
Local Nation ID0x512684 · EPD -122680 · 4B × 1 · SC:R Backed By Code — The official name for this is g_LocalNationID. P1: 00 P2: 01 P3: 02 etc.
Local Human ID0x512688 · EPD 0 · 4B × 1 · SC:R support level not stated — The official name for this is g_LocalHumanID.
Local Storm ID0x51268C · EPD -122678 · 4B × 1 · SC:R Unsupported — The official name for this is g_LocalStormID.
Cinematic File Name Array0x512690 · EPD 0 · 4B × 28 · SC:R support level not stated — Contains string pointers for the file names of all game cinematics.
Race Filename Modifiers0x512700 · EPD 0 · 8B × 1 · SC:R support level not stated — Contains 3 bytes "ztp" used when loading race-specific files, like the user HUD for example.
Cursor Filename Array0x512708 · EPD 0 · 4B × 19 · SC:R support level not stated — Contains pointers to a string for each cursor image.
Cursor Scroll Type Modifiers0x512754 · EPD -122628 · 2B × 10 · SC:R Unsupported — Contains the index for the cursor used for scrolling.
Tileset Color Cycle Pointers0x5127DC · EPD 0 · 4B × 9 · SC:R support level not stated — Contains pointers to the tileset color cycle data. Array index dependant on tileset.
Trigger Action Function Array0x512800 · EPD 0 · 4B × 60 · SC:R support level not stated — Contains function pointers for all trigger actions.
Death Table Start0x58A364 · EPD 0 · 48B × 228 · SC:R Simple Data — Counts per player, per unit First entry in the death table (P1 marine) for 1.16.1. Structured like P1 marine P2 marine ... P12 marine P1 ghost P2 ghost ... P12 ghost ... ... For each unit, 4 bytes per player, for 12 players. offset + (unit*12 + player) * sizeof(u32)
Images Attack Overlay Array0x51F2A8 · EPD -109615 · 4B × 999 · SC:R Read Only — Pointers to GRP handles for all images.
Images Damage Overlay Array0x520244 · EPD -108616 · 4B × 999 · SC:R Read Only — Pointer to LO? handles for all images.dat entries.
Images Special Overlay Array0x5211E0 · EPD -107617 · 4B × 999 · SC:R Read Only — Pointer to LO? handles for all images.dat entries.
Images Landing Dust Overlay Array0x52217C · EPD -106618 · 4B × 999 · SC:R Read Only — Pointer to LO? handles for all images.dat entries.
Images Liftoff Dust Overlay Array0x523118 · EPD -105619 · 4B × 999 · SC:R Read Only — Pointer to LO? handles for all images.dat entries.
Images Shield Overlay Array0x52E5C8 · EPD 0 · 4B × 999 · SC:R support level not stated — Pointer to GRP handles for all images.
Images Array0x52F568 · EPD -93055 · 64B × 5000 · SC:R Read Only — The array of images currently processed in the game.
Player Human IDs0x57EE7C · EPD -11578 · 4B × 8 · SC:R Unsupported — The Human ID for each player.llll
Player Nation IDs0x57EEC0 · EPD -11561 · 4B × 8 · SC:R Unsupported — The Nation ID for each player.
Active Player Structures0x57EEE0 · EPD -11553 · 36B × 12 · SC:R Backed By Code — A structure for each player containing their HumanID, StormID, Type, Race, Team, and Name. +0x00 = HumanID (4 bytes) +0x04 = StormID (4 bytes) +0x08 = Type (1 byte; 0 = inactive, 1 = computer, 2 = human, 3 = rescuable, 7 = neutral) +0x09 = Race (1 byte; 0 = zerg, 1 = terran, 2 = protoss) +0x0A = Team (1 byte) +0x0B = Name (25 bytes)
Last Whisper Player0x57F094 · EPD 0 · 25B × 1 · SC:R support level not stated — The name of the player that last whispered you (in-game only).
Vision Filter0x57F0B0 · EPD 0 · 4B × 1 · SC:R support level not stated — A shared vision filter used for changing the player's vision settings.
Multiplayer Mode0x57F0B4 · EPD -11436 · 4B × 1 · SC:R Read Only — A boolean value that specifies if the game is Single or Multi player. The official name for this field is gbMultiPlayerMode. 0=single 1=Multi
Network Player Status Array0x57F0B8 · EPD -11435 · 4B × 8 · SC:R Unsupported — An array containing flags for each player's network status.
Network Maximum Buffer Size0x57F0D8 · EPD 0 · 4B × 1 · SC:R support level not stated — A value indicating the maximum size for the command buffer that the network provider allows.
Main Menu Dialog Handle0x57F0DC · EPD -11426 · 4B × 1 · SC:R Unsupported — A handle to the main menu BIN dialog.
Player Minerals0x57F0F0 · EPD -11421 · 4B × 12 · SC:R Simple Data — The current amount of minerals the player has.
Player Gas0x57F120 · EPD -11409 · 4B × 12 · SC:R Simple Data — The current amount of gas the player has.
Player Total Gas Harvested0x57F150 · EPD -11397 · 4B × 12 · SC:R Simple Data — The total gas the player has ever harvested
Player Total Minerals Harvested0x57F180 · EPD -11385 · 4B × 12 · SC:R Simple Data — The total minerals the player has ever harvested
Tileset0x57F1DC · EPD -11362 · 2B × 1 · SC:R Simple Data — The current tileset ID being used. Changing to 1 will turn null terrain into Space with stars (Space platform tileset)
Active Player Count0x57F1E1 · EPD -11361 (+1) · 1B × 1 · SC:R Simple Data — The number of active players in the game.
Console Index0x57F1E2 · EPD -11361 (+2) · 1B × 1 · SC:R Simple Data — A value indicating which console GUI should be displayed. 0 = zerg 1 = terran 2 = protoss
Shared Vision0x57F1EC · EPD -11358 · 4B × 12 · SC:R Simple Data — The shared vision values for each player. StarCraft does not draw vision for players 9-12, but they can see players that have visioned with them and players can detect units they have shared vision with..
Player Color Mapping0x57F21C · EPD -11346 · 4B × 8 · SC:R Simple Data — A mapping of the player's colors.
Elapsed Time0x58D6F8 · EPD 3301 · 4B × 1 · SC:R Simple Data — Game Seconds (1 Game Second = 16 Game Ticks = ~1072ms on normal speed = ~672ms on fastest speed) Reportedly can be modified to prevent flag beacons from creating flags.
Campaign Index0x57F244 · EPD -11336 · 2B × 1 · SC:R Simple Data — A value indicating which campaign is being played.
Next Scenario name0x57F246 · EPD -11336 (+2) · 32B × 1 · SC:R Simple Data — The name of the next scenario, set using the Set Next Scenario trigger.
Last Event Position0x57FD34 · EPD -10636 · 4B × 2 · SC:R Simple Data — A POINT structure containing the position of the last event that occured (spacebar). PlayerID + 1 for Y position
Map File Name0x57FD3C · EPD -10634 · 260B × 1 · SC:R Simple Data — The current map's file name.
Map Title0x57FE40 · EPD -10569 · 32B × 1 · SC:R Simple Data — The current map's title.
Score Total Units Produced0x581DE4 · EPD -8544 · 4B × 12 · SC:R Simple Data — Appears to be flipped; units owned, and not produced.
Score Units Produced0x581E14 · EPD -8532 · 4B × 12 · SC:R Simple Data — Appears to be flipped; units owned, and not produced.
Score Units Owned0x581E44 · EPD -8520 · 4B × 12 · SC:R Simple Data — Appears to be flipped; to be units produced, and not owned.
Number of Units Lost0x581E74 · EPD -8508 · 4B × 12 · SC:R Simple Data — Deaths for "Any Unit" stored here.
Number of Units Killed0x581EA4 · EPD -8496 · 4B × 12 · SC:R Simple Data — Kills for "Any Unit" stored here.
Score Unit Total0x581ED4 · EPD -8484 · 4B × 12 · SC:R Simple Data
Score Kill Total0x581F04 · EPD -8472 · 4B × 12 · SC:R Simple Data
Score Structures Constructed Total0x581F34 · EPD -8460 · 4B × 12 · SC:R Simple Data
Number of Buildings Constructed0x581F64 · EPD -8448 · 4B × 12 · SC:R Simple Data
Number of Buildings Lost0x581FC4 · EPD -8424 · 4B × 12 · SC:R Simple Data — Deaths for "Buildings" stored here.
Number of Buildings Razed0x581FF4 · EPD -8412 · 4B × 12 · SC:R Simple Data — Kills for "Buildings" stored here.
Buildings Score0x582024 · EPD -8400 · 4B × 12 · SC:R Simple Data — Score for "Buildings", or buildings produced.
Razings Score0x582054 · EPD -8388 · 4B × 12 · SC:R Simple Data — Score for "Razings", or buildings killed.
Number of Factories Constructed0x582084 · EPD -8376 · 4B × 12 · SC:R Simple Data
Number of Factories Owned0x5820B4 · EPD -8364 · 4B × 12 · SC:R Simple Data
Number of Factories Lost0x5820E4 · EPD -8352 · 4B × 12 · SC:R Simple Data — Deaths for "Factories" stored here.
Zerg Control Available0x582144 · EPD -8328 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Zerg Control Used0x582174 · EPD -8316 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Zerg Control Max0x5821A4 · EPD -8304 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Terran Supply Available0x5821D4 · EPD -8292 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Terran Supply Used0x582204 · EPD -8280 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Terran Supply Max0x582234 · EPD -8268 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Protoss Psi Available0x582264 · EPD -8256 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Protoss Psi Used0x582294 · EPD -8244 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Protoss Psi Max0x5822C4 · EPD -8232 · 4B × 12 · SC:R Simple Data — 4 bytes per player Despite being 4 bytes, the game will only display it as uint16 and will wrap around after 65536.
Score Custom0x5822F4 · EPD -8220 · 4B × 12 · SC:R Simple Data
All Unit Counts Table0x582324 · EPD -8208 · 48B × 228 · SC:R Simple Data — Counts per player, per unit For each unit, 4 bytes per player, for 12 players. offset + (unit*12 + player) * sizeof(u32)
Completed Unit Counts Table0x584DE4 · EPD 0 · 48B × 228 · SC:R Simple Data — Counts per player, per unit For each unit, 4 bytes per player, for 12 players. offset + (unit*12 + player) * sizeof(u32)
Killed Unit Counts Table0x5878A4 · EPD -2736 · 48B × 228 · SC:R Simple Data — Counts per player, per unit. For each unit, 4 bytes per player, for 12 players. offset + (unit*12 + player) * sizeof(u32)
Player's Force0x58D5B0 · EPD 3219 · 1B × 8 · SC:R Simple Data — 8 bytes: 1 byte for each active player, specifying which of the 4 forces (0-based) that the player's on: EPD 3219 Player 1: 0x0058D5B0 Player 2: 0x0058D5B1 force*256 Player 3: 0x0058D5B2 force*65536 Player 4: 0x0058D5B3 force*16777216 EPD 3220 Player 5: 0x0058D5B4 Player 6: 0x0058D5B5 force*256 Player 7: 0x0058D5B6 force*65536 Player 8: 0x0058D5B7 force*16777216 each force have a multipler value to differentiate themselves from one another: Force 1 Force 2 (*2 to Player) Force 3 (*3 to Player) Force 4 (*4 to Player) force flags force names PLAYER'S FORCE
Force Flags0x58D5B8 · EPD 3221 · 1B × 4 · SC:R Simple Data — 4 bytes: 1 byte for each force specifying the flags; force 1: 0x0058D5B8 force 2: 0x0058D5B9 bits*256 force 3: 0x0058D5BA bits*65536 force 4: 0x0058D5BB bits*16777216 7 bits: 1 bit per flag per force; bit 0: randomize location (+1 to byte) bit 1: ally (+2 to byte) bit 2: allied victory (+4 to byte) bit 3: shared vision (+8 to byte) bit 4: unknown/unused (+16 to byte) bit 5: unknown/unused (+32 to byte) bit 6: unknown/unused (+64 to byte) bit 7: unknown/unused (+128 to byte) EPD 3221: read not one byte, but all four bytes and 12 bits FORCE FLAGS force names player's force
Force Names0x58D5BC · EPD 3222 · 30B × 4 · SC:R Simple Data — 4 byte integers: 1 integer for each force, string number of the name per force: force 1: 0x0058D5BC (EPD 3222) force 2: 0x0058D5DC (EPD 3230) force 3: 0x0058D5F8 (EPD 3237) force 4: 0x0058D614 (EPD 3244) untested: even forces strip two characters from the start of the force name advice: use [EUD] Text to Value converter force flags FORCE NAMES player's force
Mission Objectives Index0x58D6C4 · EPD 3288 · 4B × 12 · SC:R Simple Data — EPD 3288 (+0x00): This is the Mission Objective String ID for Player 1. To find the String ID for a Mission Objective: 1) Look at Player 1's Mission Objective text. 2) Go into the String Editor of the Map Editor you're using. 3) Find the exact string used in Player 1's Mission Objective text within the String Editor. 4) Now count all of the string above it, and add 1 to the total number. Note: This does not work if Player 1 does not have any text in his Mission Objective. In fact, the value of the address would be 0. EPD 3289 (+0x04): This is the Mission Objective String ID for Player 2. EPD 3290 (+0x08): This is the Mission Objective String ID for Player 3. EPD 3291 (+0x0C): This is the Mission Objective String ID for Player 4. EPD 3292 (+0x10): This is the Mission Objective String ID for Player 5. etc
Countdown Timer0x58D6F4 · EPD 3300 · 4B × 1 · SC:R Simple Data — Changing the value of this address with EUP or EUD is worthwhile, as the timer will not appear graphically and yet count down till zero without any of the players knowing. In other words, this could be used as another death counter for certain events. [So is this 'Display Countdown Timer' then?]
#'s of Game Pauses0x58D718 · EPD 3309 · 1B × 8 · SC:R Simple Data — The base value of this address is: (P1 + P2 + P3 + P4) * 3 = 50529027 Player 1: *1 Player 2: *256 Player 3: *65536 Player 4: *16777216 Player 1, 2, 3, and 4 all have three remaining game pauses that they can use to stop the game from running temporarily. If Player 2 were to pause the game, and have only two remaining game pauses left as a result, the new value of the address is: 50529027 - 256 = 50528771. The same as EPD 3310, except: Player 5: *1 Player 6: *256 Player 7: *65536 Player 8: *16777216 Challenge (Try it) - Create a easy formula from all of the information given.
Start Locations0x58D720 · EPD 3311 · 4B × 8 · SC:R Simple Data — Point: u16 X u16 Y EPD 3311 +0x00: P1 Start Location (X, Y*65536) +0x01: P2 Start Location (X 16777216, Y 256) *256 +0x02: Unknown (4194352) *65536 +0x03: Unknown (805322752) *16777216 EPD 3312 +0x04: Unknown (3145792) +0x05: P3 Start Location (X 16777216, Y 256) *256 +0x06: Unknown (4194352) *65536 +0x07: Unknown (805322752) *1677216 EPD 3313 +0x08: Unknown (3145792) +0x09: P4 Start Location (X 16777216, Y 256) *256 +0x0A: Unknown (4194352) *65536 +0x0B: Unknown (805322752) *16777216 EPD 3314 0x0C: Unknown (3145792) +0x0D: P5 Start Location (X 16777216, Y 256) *256 +0x0E: Unknown (12582960) *65536 +0x0F: Unknown (805355520) *16777216 EPD 3315 +0x10: Unknown (3145920) +0x11: P6 Start Location (X 16777216, Y 256) *256 +0x12: Unknown (12582960) *65536 +0x13: Unknown (805355520) *16777216 EPD 3316 +0x14: Unknown (3145920) +0x15: P7 Start Location (X 16777216, Y 256) *256 +0x16: Unknown (12582960) *65536 +0x17: Unknown (805355520) *16777216 EPD 3317 +0x18: Unknown (3145920) +0x19: P8 Start Location (X 16777216, Y 256) *256 +0x1A: Unknown (12582960) *65536 +0x1B: Unknown (805355520) *16777216 Base Value (when start locations are placed top-left of the map) Player 1: 3145792 Player 2-8: 1073754112 Already you can tell that all of this is confusing and doesn't make a lot of sense on its own, so here's a tutorial that will hopefully clear up some things: 1.To check if the position of Player 3's Start Location is at the location you placed it at, look at EPD 3312. Look at the X pixel placement of P3 start location in your map editor and write it down. Look at the Y pixel placement of P3 start location in your map editor and write it down. Now plug those numbers into this formula: Memory at Death Table + 3312 is exactly (3145792 + (((Start Location X * 16777216) + (Start Location Y * 256)) * 256) + (4194352 * 65536) + (805322752 * 16777216)) 3145792, 4194352, and 805322752 are "constants," that you need to know and account for in the equation. Because EPD reads 4 bytes at once (this formula does not work for Player 1 and Player 2 Start Location. If you understood everything that was said so far, then coming up with another formula that's specific to those two will be easy). The trigger should work, and if it doesn't, then either you have miscalculated or these "unknowns", are not constant. Challenge - Find out what those unknowns are actually for, and/or create an easier formula than the one I have come up with.
Vanilla Location Table0x58D740 · EPD 3319 · 20B × 64 · SC:R Simple Data — This Location Table is not used in the Expansion (Brood War)!
Switch Table0x58DC40 · EPD 3639 · 32B × 1 · SC:R Simple Data — +0x00 (EPD 3639) Switch 1: *1 Switch 2: *2 Switch 3: *4 Switch 4: *8 Switch 5: *16 Switch 6: *32 Switch 7: *64 Switch 8: *128 ... Switch 32: *2147483648 When none of the switches from 1 to 32 are set, the value of the address is: 0 When only switch 8 is set, the value of the address is: 128. When only switch 2 and switch 8 are set, the value of the address is: 2 + 128 = 130. +0x04 (EPD 3640): Switch 33-64 +0x08 (EPD 3641): Switch 65-96 +0x0C (EPD 3642): Switch 97-128 +0x10 (EPD 3643): Switch 129-160 +0x14 (EPD 3644): Switch 161-192 +0x18 (EPD 3645): Switch 193-224 +0x1C (EPD 3646): Switch 225-256
Time Pause State0x58F04C · EPD 4922 · 4B × 1 · SC:R Simple Data — If FALSE, the value of the address is 0, and the countdown timer is not paused. if TRUE, the value of the address is greater than 0, and the countdown timer is paused.
Is Expansion0x58F440 · EPD 5175 · 1B × 1 · SC:R Simple Data — 1 if your game is using the Expansion set.
Input Procedures0x5968A0 · EPD 0 · 4B × 19 · SC:R support level not stated — A list of functions that determine how user input is handled.
Game Mode0x596904 · EPD 12648 · 2B × 1 · SC:R Unsupported — Determines the game's mode. In-Game, in-menu, battle.net, etc. The official name is gwGameMode.
Virtual Key Array0x596A18 · EPD 12717 · 1B × 256 · SC:R Backed By Code — An array containing the state of all the virtual key codes (VK_).
BW Technologies Available (24-43)0x58F050 · EPD 0 · 20B × 12 · SC:R Simple Data — Table layout is reverse compared to deaths/kills table. 1 row per player, 20 bytes per row, 1 byte per tech.
BW Technologies Researched (24-43)0x58F140 · EPD 0 · 20B × 12 · SC:R Simple Data — Table layout is reverse compared to deaths/kills table. 1 row per player, 20 bytes per row, 1 byte per tech.
BW Upgrades Available (46-60)0x58F278 · EPD 0 · 15B × 12 · SC:R Simple Data — Table layout is reverse compared to deaths/kills table. 1 row per player, 15 bytes per row, 1 byte per upgrade.
BW Upgrades Researched (46-60)0x58F32C · EPD 5106 · 15B × 12 · SC:R Simple Data — Table layout is reverse compared to deaths/kills table. 1 row per player, 46 bytes per row, 1 byte per upgrade. ALL BW upgrades addresses generated automatically in Eud Editor 2 0.17.9.7 are wrong Please follow contents below Offset: 15 * Player + Offs BW Upgrades: ID Offs. Name 00 +0 unknown upgrade46 01 +1 argus jewel (corsair +50) 02 +2 unknown upgrade48 03 +3 arugs talisman (DA +50) 04 +4 unknown upgrade50 05 +5 caduceus reactor (medic +50) 06 +6 chitinous plating 07 +7 anabolic synthesis 08 +8 charon booster 09 +9 unknown upgrade55 10 +10 unknown upgrade56 11 +11 unknown upgrade57 12 +12 unknown upgrade58 13 +13 unknown upgrade59 14 +14 unknown upgrade60
Number of Buildings Owned0x581F94 · EPD -8436 · 4B × 12 · SC:R Simple Data
Campaign list pointers0x5122A0 · EPD 0 · 4B × 6 · SC:R support level not stated — Pointer to memory location of details of first mission in SC zerg, SC terran, SC protoss, BW zerg, BW terran and BW protoss campaigns Data pointed to: http://farty1billion.dyndns.org/EUDDB/?pg=entry&id=423
Establishing shot pointers0x4FFF60 · EPD 0 · 8B × 65 · SC:R support level not stated — 64 entries defining campaign mission prologue/establishing shots 1 entry defining campaign mission epilogue (hybrids bonus mission) INT pointer to script filename INT mapdata.dat index
Screen Coordinate Y0x628470 · EPD 161859 · 4B × 1 · SC:R Read Only — The position of the screen on the Y Axis. Note that it's locked on an 8 pixel grid, so 2 would mean 16 pixel.
Screen Coordinate X0x628448 · EPD 161849 · 4B × 1 · SC:R Read Only — The position of the screen on the X Axis. Note that it's locked on an 8 pixel grid, so 2 would mean 16 pixel.
Mouse Coordinate X0x6CDDC4 · EPD 331416 · 4B × 1 · SC:R Simple Data — Relative to the screen.
Mouse Coordinate Y0x6CDDC8 · EPD 331417 · 4B × 1 · SC:R Simple Data — Relative to the screen.
Location Table0x58DC60 · EPD 3647 · 20B × 255 · SC:R Simple Data — +0x00 (EPD 3647) This is the LEFT position of the location (X1). +0x04 (EPD 3648) This is the TOP position of the location (Y1). +0x08 (EPD 3649) This is the RIGHT position of the location (X2). +0x0C (EPD 3650) This is the BOTTOM position of the location (Y2). +0x10 (EPD 3651) String ID: Look in the String Editor of the Map Editor you're using Find the name of the location within it Now count all the strings that are above it, and add 1 to the total number. The number you came to is the String ID for that location Flags (Affect Layers): Low Ground: 65536 Med Ground: 131072 High Ground: 262144 Low Air: 524288 Med Air: 1048576 High Air: 2097152 When all flags are enabled, the value of the address is: 4128768 + String ID When all flags are disabled, the value of the address is: String ID NOTE: the 64th (1-based) location is "Anywhere."
Hotkeyed Unit0x57FE60 · EPD -10561 · 864B × 8 · SC:R Simple Data — Purpose To detect the hotkey and then the slot that a unit is stored in and/or the unit that is stored in a slot within a hotkey for any player. Math The total amount of units that can be hotkeyed is 12. There are 18 hotkeys in existence. 12 * 18 = 108 108 is the total amount of EPD values for each player. If we want to check if there's a unit in the seventh slot within the hotkey CTRL+0 for Player 1, -10561 + 7 = -10555. If we want to check if there's a unit in the first slot within the hotkey CTRL+1 for Player 1, -10561 + 12 = -10550. If we want to check if there's a unit in the first slot within the hotkey CTRL+0 for Player 2, -10561 + 109 = -10452. 12 * 9 * 8 = 864 864 is the total combined number of all players' EPD value. We can check any slots within any hotkeys for any player to detect if any unit exist. At least 1 We can check any slots within any hotkeys for any player to detect if no unit exist. At least 3749 but what if we want to detect if a specific unit within the map is hotkeyed in a certain slot? Unit alpha ID (Unit Entity) Index # Alpha ID 0 2049 1 3748 [+1700] 2 3747 [-1] 3 3746 [-1] Confused? Hint: http://www.staredit.net/topic/14226/ (Read Section 6) ^^^^^^^Parts of this seem to be wrong. This is the magic formula: with the variables p = player number (starting at 0 up to 7) h = hotkey number i = index in a hotkey (starting at 0 up to 11) u = unit id then if player p has unit u hotkeyed in index i of hotkey h, we have, for u > 0 memory(-10561+(p 216)+(h 12)+i) == 3749 - u, and for u = 0, memory(-10561+(p 216)+(h 12)+i) == 2049. ============== Edited by PereC, 2021.06.25: Each u32 stores the Alpha ID of a hotkeyed unit: Starting from 0x57FE60: All the hotkeyed unit of P1 0x57FE60: Alpha ID of the 1st unit in P1 hotkey 0 0x57FE64: Alpha ID of the 2nd unit in P1 hotkey 0 0x57FE68: Alpha ID of the 3rd unit in P1 hotkey 0 ... 0x57FE60 + 4 * 11: Alpha ID of the 12th unit in P1 hotkey 0 0x57FE60 + 4 * 12: Alpha ID of the 1st unit in P1 hotkey 1 0x57FE60 + 4 * 13: Alpha ID of the 2nd unit in P1 hotkey 1 ... 0x57FE60 + 4 * 119: Alpha ID of the 12th unit in P1 hotkey 9 From 0x57FE60 + 4 * 120 to 0x57FE60 + 4 * 216: ?????? Starting from 0x57FE60 + 216: All the hotkeyed unit of P2 Starting from 0x57FE60 + 216 * 2: All the hotkeyed unit of P3 ... Starting from 0x57FE60 + 216 * 7: All the hotkeyed unit of P8 Personally I don't know why there are 864 bytes for each player. Intuitively there should be 4 * 12 * 10 = 480 bytes for each player, cuz there are 10 hotkeys and 12 units within a hotkey. ====================================== Further written by AINukeHere. (2021.08.24) The above is very confusing because there are many wrong parts. There are 12 unit slots for each hotkey, and each unit ID (Alpha ID) is 4 bytes. That is, 48 bytes per hotkey. Each player holds 18 hotkeys. The 10 hotkeys (indices 0 to 9) are hotkeys designated by Ctrl+Number. The remaining 8 (indices 10 to 17) hotkeys are units that are automatically saved whenever multiple units are selected. It can be selected with Alt+Left Mouse Click. So the allocated memory per player is 4 12 18 = 864 bytes.
Emp Shockwave Missiles (???)0x59CDE0 · EPD 0 · 4B × 1 · SC:R support level not stated — The total amount of missiles from *all science vessel that you can see on the map. *: Not completely tested and confirmed.
Mouse Left Click0x5968AC · EPD 12626 · 4B × 1 · SC:R support level not stated — Detects the left click of a mouse. Use only actions that won't desync (check the Reference).
Displayed HP0x6CA94D · EPD 0 · 4B × 1 · SC:R support level not stated — The current HP of the selected unit.
Current Button Set0x68C14C · EPD 264058 · 4B × 1 · SC:R Simple Data — The button set ID of the currently selected single unit. There is a 1-to-1 relationship between unit ID and it's button set, eg the buttonset for terran ghost is ID 1. There are also several group buttonsets, for when multiple workers, or burrowable, or cloakable units etc selected: 244 - generic units, shows move/stop/attack/guard/patrol buttons 245 - workers, shows move/stock/attack + gather and return resources buttons 246 - cloakable units, as per 'generic' + cloak/decloak buttons 247 - burrowable units, as per 'generic' + burrow/unburrow buttons Refer to button tabs in Firegraft. Through experimentation, buttons occasionally have a delay of up to 2-3 seconds before changes in game state will update the button status (eg when a new tech is available, a button that relies on that tech may stay greyed out for 2-3 seconds). Setting this address with a different value (eg 244) is a way to force a refresh for the currently displayed button set. Note that SC constantly updates this address to reflect the current unit's actual button set, to prevent units from being able to action commands that they shouldn't have access to (the infamous 1.13 patch series to stop any building from making any unit).
Inverse System Time0x51CE8C · EPD 0 · 4B × 1 · SC:R support level not stated — Value : -GetTickCount() (about 10ms error) Used for input polling. See .text:004D98D8 for more info. Can be used to detect lagging or syncing with game audio.
Trigger Condition Function Array0x515A98 · EPD 0 · 4B × 24 · SC:R support level not stated — Contains function pointers for all trigger conditions.
Mission Briefing Action Function Array0x519E50 · EPD 0 · 4B × 10 · SC:R support level not stated — Contains function pointers for all mission briefing actions.
Trigger Execution Timer (Hyper triggers)0x6509A0 · EPD 203151 · 4B × 1 · SC:R Simple Data — When this value reaches 0, trigger loop executes. Preserve to 0 for single-tick hypers, or 1 for traditional hyper triggers (2 ticks). Wait(n) will make this value 1 after ceil(n / 'ms per tick') + 1, so Wait(0) makes this value to 1, making the trigger loop execute every 2 ticks.
Larva Count0x585474 · EPD -5052 · 12B × 1 · SC:R support level not stated — (Why does this entry exist? Should be within the Completed Unit Counts Table) The amount of larva a hatchery, lair, or hive currently have.
Order Destination Invalid (???)0x59CD3C · EPD 0 · 4B × 1 · SC:R support level not stated — "When this address is frozen and you order a unit to try to walk into water or other invalid terrain, the unit will walk in place when it determines it cannot complete the destination, instead of coming to a full stop." -Roy
CUNIT - Idle Order Timer0x59CCF9 · EPD 19045 (+1) · 4B × 1 · SC:R support level not stated — (*256) While the unit is specifically following the order to move to an area, the value of this address is 0. When it is not moving, the value appears to randomize itself. When the unit is given an order to attack an area, it switches from randomizing itself to being zero repeatedly with a delay. This might explain why units that are attacking are slower at firing the auto-acquired target once it is in range than it is to patrol towards them instead. Note that a building is always zero. 0x0059CCFA (*65536) 0x0059CCFB (*16777216)
Last Time for Drop Window0x59CC78 · EPD 19013 · 4B × 1 · SC:R Simple Data — Last GetTickCount Win32 API Time for Drop Window shown. Whenever a player disconnects, StarCraft will display drop window. If 2 minutes elapsed since last drop window showed, StarCraft will reset the drop timer to 45 seconds.
Accept Commands0x6556E0 · EPD 208095 · 4B × 1 · SC:R Unsupported — If 1, commands are accepted. If 0, all commands are ignored.
s_button Offset0x5187E8 · EPD -116447 · 12B × 250 · SC:R Backed By Code — +0x00 (EPD -116447) Number of available buttons. 0 = Button disabled +0x04 (EPD -116446) s_button Address. +0x08 (EPD -116445) Unknown. 0 ~ 227 = Units buttons 228 ~ 249 = Internal buttons (228 = Blank)
Pointer to "MTXM" map tile data0x5993C4 · EPD 15384 · 4B × 1 · SC:R Backed By Code
GRP Array0x51CED0 · EPD -111909 · 4B × 999 · SC:R Read Only — Pointer to each GRP for each images.dat entry
Player Units available0x57F27C · EPD -11322 · 228B × 12 · SC:R Simple Data — 1 row of 228 bytes, 1 per unit, per player offset + (Cp * 228) + 100
Network Mode Delay0x51CE84 · EPD -111928 · 4B × 1 · SC:R Read Only — 1 in single player, 2 in LAN, 5 on battle.net. Described at http://wiki.teamliquid.net/starcraft/LatencyChanger Editted by PereC, 2021.03.31: In SC:R, the value is always 1000
Network Mode Delay 20x51CE88 · EPD -111927 · 4B × 1 · SC:R support level not stated — Appears to be a duplicate of 0x0051CE84. Not sure which value is the one that is actually used. Editted by PereC, 2021.03.31: In SC:R, the value is always 1000
First Empty Unit0x628438 · EPD 161845 · 4B × 1 · SC:R Backed By Code — The address of the unit structure to be created -added by jehn
Last Unit Pointer0x6283F8 · EPD 0 · 4B × 1 · SC:R support level not stated — The value is pointer to the last unit in the unitNodeTable. -added by jehn
Trigger Wait Timers0x650980 · EPD 0 · 4B × 8 · SC:R support level not stated — Wait action timers for each player
Current Player Selection0x6284B8 · EPD 161877 · 4B × 12 · SC:R Backed By Code — Selection group of the current player Seems to be duplicated at 0x59724C and 0x597208?
MapSize0x57F1D4 · EPD -11364 · 2B × 2 · SC:R Simple Data — 2byte Width 2byte Height width + 65536*height
stat_txt.tbl pointer0x6D1238 · EPD 334773 · 4B × 1 · SC:R Backed By Code
Game Subtype ID0x59BA5C · EPD 0 · 4B × 1 · SC:R support level not stated — Subtype ID specified in GOT template. Top Vs. Bottom: Number is the number of players on top (1 = "1 vs #", 2 = "2 vs #", etc.) Greed: 1=2500, 2=5000, 3=7500, 4=10000 Slaughter: 1=15, 2=30, 3=45, 4=60 Team Melee/FFA/CTF: 1=2 teams, 2=3 teams, 3=4 teams
Images Damage Overlay Frame0x5240D0 · EPD -104613 · 1B × 999 · SC:R Simple Data
First Image Pointer0x57EB68 · EPD -11775 · 4B × 1 · SC:R Read Only — Pointer to the first CImage instance.
Drop Timer0x59CC80 · EPD 19015 · 4B × 1 · SC:R Simple Data — The time remaining before a player is dropped. See the address 0x59CC78 (Last Time of Drop Window) for application.
Last Image Pointer0x57EB70 · EPD -11773 · 4B × 1 · SC:R Read Only — Pointer to the last CImage instance.
Sprite Table0x629D98 · EPD 163469 · 36B × 2500 · SC:R Read Only — [SCR: See individual entries] Difference between each entry: 9 Player ID's Struct: https://github.com/bwapi/bwapi/blob/master/bwapi/BWAPI/Source/BW/CSprite.h Populates like CUnit, with 2nd entry at the rearmost of the table, and the 3rd the 2nd rearmost entry of the table; first entry will be a cursour sprite, having sprite ID of 318.
iscript.bin pointer0x6D1200 · EPD 334759 · 4B × 1 · SC:R Backed By Code
Storm Graphics Palette0x1505E670 · EPD 86724803 · 4B × 256 · SC:R Read Only
Battle.snp Join Channel0x1904613C · EPD 103477110 · 4B × 1 · SC:R Simple Data
Battle.snp Join Channel (2)0x1904613C · EPD 103477110 · 4B × 1 · SC:R Simple Data
Unit Reqs data0x514178 · EPD -120955 · 1090B × 1 · SC:R Simple Data — Packed list of opcodes/parameters for data requiremens. First u16 is the unit ID for the script, followed by the script. 0x##FF is an opcode, 0x##00 is a parameter, FFFF is the end of the script.
Upgrade Reqs data0x5145C0 · EPD -120681 · 838B × 1 · SC:R Simple Data
Research Req Data0x514908 · EPD -120471 · 318B × 1 · SC:R Simple Data
Tech Use Req Data0x514A48 · EPD -120391 · 688B × 1 · SC:R Simple Data
Order Req Data0x514CF8 · EPD -120219 · 1316B × 1 · SC:R Simple Data
Player 1 Trigger List0x51A280 · EPD -114745 · 4B × 3 · SC:R Backed By Code
Player 2 Trigger List0x51A28C · EPD -114742 · 4B × 3 · SC:R Backed By Code
Player 3 Trigger List0x51A298 · EPD -114739 · 4B × 3 · SC:R Backed By Code
Player 4 Trigger List0x51A2A4 · EPD -114736 · 4B × 3 · SC:R Backed By Code
Player 5 Trigger List0x51A2B0 · EPD -114733 · 4B × 3 · SC:R Backed By Code
Player 6 Trigger List0x51A2BC · EPD -114730 · 4B × 3 · SC:R Backed By Code
Player 7 Trigger List0x51A2C8 · EPD -114727 · 4B × 3 · SC:R Backed By Code
Player Alliances0x58D634 · EPD 3252 · 12B × 12 · SC:R Simple Data — EPD 3252 0x00: P1 ally status to P1 0x01: P1 ally status to P2 (*256). 0x02: P1 ally status to P3 (*65536). 0x03: P1 ally status to P4 (*16777216). EPD 3253 0x04: P1 ally status to P5. 0x05: P1 ally status to P6 (*256). 0x06: P1 ally status to P7 (*65536). 0x07: P1 ally status to P8 (*16777216). EPD 3254 P1 ally status to P9-P12. EPD 3255 0x0C: P2 ally status to P1. 0x0D: P2 ally status to P2 (*256). etc 0x00: Enemy, 0x01: Ally, 0x02: Allied Victory Note - A player is always allied OR allied victory to themself. I could not confirm through testing if it was just one of them, but in most cases, it's allied. Otherwise assume allied victory instead.
Player 8 Trigger List0x51A2D4 · EPD -114724 · 4B × 3 · SC:R Backed By Code
Fog of War Update Counter0x51CE98 · EPD -111923 · 4B × 1 · SC:R Simple Data — Set to 0 to update FoW. Toggle between 0 and 1 in separate trigger cycles to fast update FoW. With single frame hypers: (see 0x006509A0) Set to 1 to fast update Fog of War. Set to 0 to never Fog of War revealed areas. (ie. "war ain't what it used to be" cheat)
Number of Factories Razed0x582114 · EPD -8340 · 4B × 12 · SC:R Simple Data — Kills for "Factories" stored here.
Starting Player Local ID0x57F1B0 · EPD -11373 · 4B × 1 · SC:R Simple Data
Player Slot Types0x57F1B4 · EPD -11372 · 1B × 12 · SC:R Simple Data
Player Slot Races0x57F1C0 · EPD -11369 · 1B × 12 · SC:R Simple Data
Team Game Main Player0x57F1CC · EPD -11366 · 1B × 4 · SC:R Simple Data
Screen Tile Position0x57F1D0 · EPD -11365 · 2B × 2 · SC:R Simple Data
Messsage Send To Filter0x57F1D8 · EPD -11363 · 2B × 2 · SC:R Simple Data
Message Player Filter0x57F1DA · EPD -11363 (+2) · 2B × 2 · SC:R Simple Data — Should be within the previous entry
Current Music0x57F1DE · EPD -11362 (+2) · 2B × 2 · SC:R Simple Data
BWGame Unk_f00x57F1E0 · EPD -11361 · 1B × 1 · SC:R Simple Data
Is Custom Single Player0x57F1E3 · EPD -11361 (+3) · 1B × 1 · SC:R Simple Data
BWGame unk_f40x57F1E4 · EPD -11360 · 4B × 1 · SC:R Simple Data
BWGame unk_f80x57F1E8 · EPD -11359 · 4B × 1 · SC:R Simple Data
Saved Elapsed Seconds0x57F240 · EPD -11337 · 4B × 1 · SC:R Simple Data
Single Player Race0x57F266 · EPD -11328 (+2) · 1B × 1 · SC:R Simple Data
Single Player Computer Races0x57F267 · EPD -11328 (+3) · 1B × 8 · SC:R Simple Data
BWGame unk_17F0x57F26F · EPD -11326 (+3) · 1B × 1 · SC:R Simple Data
Saved Screen Positions0x57F270 · EPD -11325 · 4B × 3 · SC:R Simple Data — Pos 1: -11325 X + 65536*Y Pos 2: -11324 X + 65536*Y Pos 3: -11323 X + 65536*Y
BWGame unk_c3c0x57FD2C · EPD -10638 · 1B × 8 · SC:R Simple Data
BWGame unk_28700x581960 · EPD -8833 · 1B × 1024 · SC:R Simple Data
Default Message Filter0x581D60 · EPD -8577 · 1B × 1 · SC:R Simple Data — Controls who you chat with when pressing Enter. (To Allies: hello) 0 = Player0 1 = Player1 2 = Player2 3 = Player3 4 = Player4 5 = Player5 6 = Player6 7 = Player7 8 = All 9 = Allies
Player Lose Type0x581D61 · EPD -8577 (+1) · 1B × 1 · SC:R Simple Data
Player Left0x581D62 · EPD -8577 (+2) · 1B × 8 · SC:R Simple Data
BWGame unk_2cf20x581DE2 · EPD -8545 (+2) · 1B × 2 · SC:R Simple Data
SC Tech Research In Progress0x58D064 · EPD 2880 · 1B × 36 · SC:R Simple Data — Who knows
SC Upgrade in Progress Lvl 1 (Unused?)0x58D4D8 · EPD 3165 · 1B × 72 · SC:R Simple Data — Who knows
SC Upgrade in Progress Lvl 2 (Unused?)0x58D520 · EPD 3183 · 1B × 72 · SC:R Simple Data — Who knows
SC Upgrade in Progress Lvl 3 (???)0x59D568 · EPD 19585 · 1B × 72 · SC:R support level not stated — Who knows
Elapsed Time (2)0x58D6F8 · EPD 3301 · 4B × 1 · SC:R Simple Data — Game Seconds (1 Game Second = 16 Game Ticks = ~1072ms on normal speed = ~672ms on fastest speed) Reportedly can be modified to prevent flag beacons from creating flags.
SC Switch Table (Unused?)0x58D6FC · EPD 3302 · 4B × 1 · SC:R Simple Data — 32 switches, probably pre-1.04 when number of switches was increased to 256.
Player Victory Status0x58D700 · EPD 3303 · 1B × 8 · SC:R Simple Data
Leaderboard Has Computer Players0x58D708 · EPD 3305 · 4B × 1 · SC:R Simple Data
Leader Board Type0x58D70C · EPD 3306 · 1B × 1 · SC:R Simple Data
Leader Board Condition0x58D70D · EPD 3306 (+1) · 1B × 1 · SC:R Simple Data
Leader Board Subtype0x58D70E · EPD 3306 (+2) · 2B × 1 · SC:R Simple Data
Leader Board Goal0x58D710 · EPD 3307 · 4B × 1 · SC:R Simple Data
Leader Board String Index0x58D714 · EPD 3308 · 4B × 1 · SC:R Simple Data
BW Tech Research In Progress0x58F230 · EPD 0 · 1B × 72 · SC:R support level not stated — [SCR: Simple data] Who knows
BW Upgrade In Progress0x58F3E0 · EPD 5151 · 1B × 96 · SC:R Simple Data — Who knows
BWGame unk_103510x58F441 · EPD 5175 (+1) · 1B × 1 · SC:R Simple Data
Unknown Player Color Something0x58F442 · EPD 5175 (+2) · 1B × 8 · SC:R Simple Data
BWGame "Literally Unused"0x58F44A · EPD 5177 (+2) · 1B × 29604 · SC:R Simple Data
Trigger Current Player aka CP Trick0x6509B0 · EPD 203155 · 4B × 1 · SC:R Simple Data — Used to dynamically run EUDs or dereference pointers. Sets "Current Player" in triggers to be a reference to a different base address for the deaths table. e.g. Set Deaths("Int:203155", "Terran Marine", Set to, EPD); Set Deaths("Int:203155", "Terran Marine", Add/Subtract, whatever); Set Deaths("Current Player", "Terran Marine", Set to/Add/Subtract, whatever); Example: Implement Set Minerals for current player // Add -11421 to 0x006509B0 (player ID corresponding to 0x0057F0F0) SetMemory(0x6509B0, Add, 0xFFFFD363); // Add 50 to byte offset for that address -- current player will increase target address by 4 bytes for each player that runs it SetDeaths(CurrentPlayer, Add, 50, "Terran Marine"); // Add +11421 to 0x006509B0 to set it back to what it was SetMemory(0x6509B0, Add, 0x00002C9D); Example: Implement a SetKills action for Current Player // Add -2736 to 0x6509B0 (player ID corresponding to 0x005878A4) SetMemory(0x6509B0, Add, 0xFFFFF550); // Current player combined with unit ID now references the correct target address in the Kills table) // This SetDeaths is now really SetKills to add/subtract/set to for unit of choice SetDeaths(CurrentPlayer, Subtract, 1, "Terran Ghost"); // Add +2736 to 0x006509B0 to set it back to what it was SetMemory(0x6509B0, Add, 0x00000AB0); Note: Set Deaths needs to be for current player, P1/P2/etc. would modify the normal deaths table. Note2: Cannot use Any Unit/Men/Buildings/Factories for the unit, those do have Unit IDs, are not stored in the Kills table, and would overflow into other areas.
TranWire.grp pointer0x68C1F4 · EPD 264100 · 4B × 1 · SC:R Backed By Code — Overwriting a particular unit's frame offset with a different frame offset can change the image used for that unit. GRP header: u16 frameCount u16 width u16 height GRP Frame (* frameCount) u8 x u8 y u8 w u8 h u32 offset
GrpWire.grp Pointer0x68C1FC · EPD 264102 · 4B × 1 · SC:R Backed By Code — Overwriting a particular unit's frame offset with a different frame offset can change the image used for that unit. GRP header: u16 frameCount u16 width u16 height GRP Frame (* frameCount) u8 x u8 y u8 w u8 h u32 offset
Wirefram.grp Pointer0x68C204 · EPD 264104 · 4B × 1 · SC:R Backed By Code — Overwriting a particular unit's frame offset with a different frame offset can change the image used for that unit. GRP header: u16 frameCount u16 width u16 height GRP Frame (* frameCount) u8 x u8 y u8 w u8 h u32 offset
AIScript pointer0x68C104 · EPD 264040 · 4B × 1 · SC:R Backed By Code
BWScript pointer0x68C108 · EPD 264041 · 4B × 1 · SC:R Backed By Code
Damage type/factor multipliers vs unit size0x65678C · EPD 209162 · 20B × 5 · SC:R support level not stated — (What's this?)
Display Text0x640B60 · EPD 186879 · 218B × 13 · SC:R Backed By Code — Line IDs: 0-10: display text lines (first line defined by 0x640B58 - Next Display Text Line) 11: ? 12: status message
Next Display Text Line0x640B58 · EPD 186877 · 4B × 1 · SC:R Simple Data — First line to be drawn on screen or written to. Changing this value to 11 or 12 and then doing a Display Text action will allow displaying a status message.
Send Message Type0x68C144 · EPD 264056 · 4B × 1 · SC:R Simple Data — Can be used to check if send message box is open (At Least 1)
Active Tile Buffer0x6D0E84 · EPD 334536 · 4B × 1 · SC:R Unsupported — Pointer to u16 array of active map tiles.
Last Random Number0x51CA14 · EPD -112212 · 4B × 1 · SC:R Simple Data — Randomization seed for the next random number, mask with 0x7FFF0000 for the last returned number. int getRandomNumber(){ lastRandomNumber = lastRandomNumber * 0x15A4E35 + 1; return (lastRandomNumber >> 16) & 0x7FFF; }
glScrollPixelX0x62848C · EPD 161866 · 4B × 1 · SC:R Read Only — Duplicate of screen coordinates?
glScrollPixelY0x6284A8 · EPD 161873 · 4B × 1 · SC:R Read Only — Duplicate of screen coordinates?
gfpCellMap0x628494 · EPD 161868 · 4B × 1 · SC:R Backed By Code — Pointer to VX4 megatile buffer?
Creep Tile Backup Buffer0x6D0C68 · EPD 334401 · 4B × 1 · SC:R Unsupported — Pointer to the u16 buffer that stores the tile IDs of tiles overwritten by creep in the Active Map Tile buffer. Values are normally 0 until a creep tile replaces them.
Tile Buffer Height0x6D0C6C · EPD 334402 · 4B × 1 · SC:R Unsupported — Copy of Map Height?
Tile Function Pointers0x6D0C70 · EPD 334403 · 4B × 4 · SC:R Unsupported — 0x006D0C70 -> 0x0047E2D0 -- refreshes map tiles for drawing? 0x006D0C74 -> isCreepCovered -- checks if a tile is creep 0x006D0C78 -> isTileVisible -- checks if a player can see the tile 0x006D0C7C -> null pointer? -- I couldn't find what function is actually put here
Tile Buffer Width0x6D0F08 · EPD 334569 · 4B × 1 · SC:R Unsupported — Copy of Map Width
Tile Flags Pointer0x6D1260 · EPD 334783 · 4B × 1 · SC:R Backed By Code — Pointer to (Map Width)x(Map Height) array of u32 flags: 0x000000xx - Visibility Flags -- bits correspond to each player 0x0000xx00 - Explored Flags -- bits correspond to each player 0x00010000 - Walkable 0x00020000 - Unused? 0x00040000 - Unwalkable 0x00080000 - Unused? 0x00100000 - Unused? 0x00200000 - Unused? 0x00400000 - Has Creep 0x00800000 - Unbuildable (i.e., water tiles) 0x01000000 - Low Ground 0x02000000 - Med Ground 0x04000000 - High Ground 0x08000000 - Occupied (i.e. contains a building) 0x10000000 - Creep Receeding 0x20000000 - Cliff Edge 0x40000000 - Temporary Creep 0x80000000 - Unused? Taken from: https://github.com/bwapi/bwapi/blob/master/bwapi/BWAPI/Source/BW/Structures.h#L80
CV5 Pointer0x6D5EC8 · EPD 339673 · 4B × 1 · SC:R Backed By Code
Creep Overlay Buffer0x6D0E80 · EPD 334535 · 4B × 1 · SC:R Unsupported — Pointer to u8 flags relating to the creep overlay for each map tile.
gameTextCounters0x640B24 · EPD 186864 · 4B × 12 · SC:R Unsupported — Contains the tick count for when the message should disappear. Corresponds to the same index of game text.
Cunit - Shield Gain0x59CD52 · EPD 19067 (+2) · 2B × 1 · SC:R Supported — Shield gain on construction (bwapi)
Minimap State0x6D5BBE · EPD 0 · 4B × 1 · SC:R support level not stated — Minimap State - Pressing Tab, Shift+tab changes this 0x00 - default 0x01 - Enemies red, allies yellow 0x02 - Enemies red, allies yellow, ememy units red, ally units yellow, your units teal
Damage type/factor multipliers vs unit size (2)0x65678C · EPD 209162 · 20B × 5 · SC:R support level not stated — (What's this?)
Game Brightness0x657A9C · EPD 210382 · 4B × 1 · SC:R Simple Data — Darkens the screen without affecting UI elements. Appears to be a modifier for Fog of War Masks? Technically a 1 byte value, but the high bytes are padding and not used. Valid values are 0-31, with 0 being black and 31 being maximum brightness. Values >31 appear to just be black. The value appears to be the index in tileset*\dark.pcx remapping palette.
Fog of War Masks0x657AA0 · EPD 210383 · 1B × 4096 · SC:R Backed By Code — Sets the brightness parts of the fog of war masks. Corresponds to dark.pcx indexes, with valid values from 0 (black) to 31 (full brightness). Values >31 in 1.16.1 are glitched colors. 4 bytes at 0x00657AA0 correspond to unexplored fog. 4 bytes at 0x0065825C correspond to explored areas in fog. 4 bytes at 0x00658A9C correspond to visible areas. Other addresses relate to the transitions between these areas. Setting to 0x1F1F1F1F will fully clear the mask, though units and buildings may not be visible or selectable depending on the actual fog state. Additionally, using different values for each byte, e.g. 0x1F001F00, will create vertical stripes (tested in 1.16.1).
Mouse Button State0x6CDDC0 · EPD 331415 · 4B × 1 · SC:R Simple Data — 2: Left button pressed. 8: Right button pressed. 32: Middle button pressed Edited by PereC, 2021.03.29
Network Buffer0x654880 · EPD 207175 · 496B × 1 · SC:R Backed By Code — Game Command Queue. See https://github.com/phu54321/vgce/blob/master/docs/Blizzard/Starcraft/packets2.txt Also https://github.com/bwapi/bwapi/blob/main/bwapi/BWAPI/Source/BW/OrderTypes.cpp Not sure if the size is 496, the value in 0x0057F0D8 Edited by PereC, 2021.04.03
Network Buffer Used0x654AA0 · EPD 207311 · 4B × 1 · SC:R Supported — Command queue (0x00654880) space used. Edited by PereC, 2021.04.03
Mouse and Keyboard Scroll Speed0x513B68 · EPD -121343 · 7B × 7 · SC:R Supported — Edited by PereC, 2021.04.12 For SC:R, In menu - Options - Speed, you can set Key Scroll Speed and Mouse Scroll Speed, each has 7 levels. For each level, the Scroll Speed has 7 different values, each 1 byte. level 1: 0x513B68, 0x513B69, 0x513B6A, ..., 0x513B6E level 2: 0x513B6F, 0x513B70, 0x513B71, ..., 0x513B72 ... level 7: 0x513B92, 0x513B93, 0x513B94, ..., 0x513B98 If you set all the 7 bytes of level2 to 0, then you can't scroll the screen by mouse if you set the Mouse Scroll Speed to level2 in game, but you can still scroll screen by keyboard if Key Scroll Speed is not in level2. If you set all the 49 bytes to 0, then you can't scroll the screen using mouse or keyboard. See: https://cafe.naver.com/edac/39325
Mouse Scroll Speed Array0x513B68 · EPD -121343 · 7B × 7 · SC:R Supported — Amount of Mouse Scroll Speed. Array index dependent on mouse scroll level (0 to 6).
Unit Infomation0x5193A0 · EPD -115697 · 12B × 228 · SC:R support level not stated — See Description Edited by PereC, 2021-06-05 In SC:R, 64-bit starcraft ignores this part. You are suggested to use 32-bit starcraft if this part of memory is modified by EUD triggers. +0x0: Unit ID +0x4: Status Function +0x8: Display Function
Player 1 Selection Group0x6284E8 · EPD 161889 · 4B × 12 · SC:R Backed By Code — List of unit node pointers for Player's current group selection. Points to address 0x0059CCA8