Making a Heroes of the Storm Battleground in the Starcraft II Galaxy Editor(and a good helping from some other programs, for good measure)


The Heroes of the Storm community has created a good number of custom maps that, while not as widely known as Blizzard’s official ones, are very popular in their own right. One such map is “The Kaldir” which allowed players to fight through a group of Protoss-themed planets and prove themselves worthy foes for Artanis himself.

The “starcraft 2 galaxy editor” is a program that allows you to create and edit maps for the game Heroes of the Storm. The map that I created, was a battleground for the game Starcraft II.

So, you’ve undoubtedly seen some of my previous writings, and this is one that I’ve been wanting to write about but haven’t gotten around to — what goes into creating a custom Heroes Battleground. Due to the length of this article, it will be split into many comments. I’d probably do a video lesson if loading the editor wasn’t so sluggish, but since it is, I’d have to perform video editing (which I hate to do), so you get this massive wall of text instead of a 30-60 minute film. If you have any problems, you may join a discord server I’ve set up, which you can find here: VMCC6GA - Making a Heroes of the Storm Battleground in the Starcraft II Galaxy Editor(and a good helping from some other programs, for good measure)

https://discord.gg/VMCC6GA. If you’d like this entire post & comment in text format(and without some stuff that I adjusted as I was making the post), then it’s in this google drive folder

  1. Have the Heroes game files downloaded wherever you can use them – extract the whole contents of the mods folder, but core.stormmod, heroesdata.stormmod, heroes.stormod, and heroesmapmods.stormmod are the only ones we actually need.
  2. Download Starcraft II in its entirety using the Battle.net client.
  3. Open the Starcraft II Editor, and click File-> New, and then select Dependant Mod.
  4. Select Custom from the Choose Dependencies option that appears, and then leave it blank.
  5. Click Mod-> Mod Info, and set the Mod name to StormCore
  6. Click File-> Save, and in that menu change the file type to SC2Components. This will make this mod save as a folder, it’ll still be named %filename%.SC2Mod, it’ll just be saving it as a folder which you can easily change later, instead of as a file which can be a bit more troublesome to mess around with, and then if it’s not saving the file a Mods folder in your Starcraft II install folder, navigate to that directory, and save the file there, naming it StormCore
  7. Click File-> Close, and then File-> New, and select Depenant Mod once again
  8. Select Custom from the Choose Dependencies menu, then Modify, then Add Other. You should find StormCore.SC2Map, which you saved previously, and select it.
  9. Click Mod-> Mod Info, and set the Mod name to StormHeroesData
  10. Click File-> Save, again, changing it to SC2Components, again making sure it’s saving to the correct directory, and we’ll name this one StormHeroesData
  11. Steps 7-10 are repeated, this time calling it StormHeroes and choosing StormHeroesData as the dependent, which also adds StormCore as a dependency.
  12. Choose which Battleground you want to copy the tileset from; in my case, I’m making something based on the Alterac Tileset, so we’ll do the same thing we did before, but this time call it StormWarcraftData and use StormHeroes as the dependency file.
  13. Now do it again, but this time call it StormAlteracPass and use the StormWarcraftData file you just made as the dependency file.
  14. Now we have to do this because we’re going to make this an ARAM map, which means we’ll have to make another mod, this time called StormIGHS (In Game Hero Select)
  15. Optional Step: Don’t shit where you eat, when making the changes to the Heroes files below, use a “backup” of the extract files, this way if something goes wrong, you can still quickly & easily refer back to the original files
  16. Optional Step: This will be either less or more useful, but in some instances you’ll need to delete files, and for this I use a search program called www.voidtools - Making a Heroes of the Storm Battleground in the Starcraft II Galaxy Editor(and a good helping from some other programs, for good measure)Everything

It’s so beneficial that I’ve almost stopped using Windows File Explorer because of it.

  • The Starcraft II Editor should now be closed. It’s time to get this thing up and running.
  • Go to the folder where you extracted the Heroes game files and look for a core.stormmod file; this is what we’ll put in the StormCore.SC2Mod folder. You’ll notice that the contents of core.stormmod are titled differently from the StormCore.SC2Mod, where instead of enUS.SC2Data, it’s enus.stormdata. We’re going to eliminate a few items to conserve space and for stuff we won’t need.

    1. StormCore.SC2Mod is the new name for the folder.
    2. Remove any folders that aren’t titled base.stormassets, base.stormdata, enus.stormassets, enus.stormdata from the newly renamed folder. Those four directories, as well as a preload.xml file, should be left.
    3. Remove the DepotCache, Versions, TriggerLibs, UI, Cutscenes, and TextureReduction folders from the base.stormdata folder, as well as the ShadeCache dx11.bin, ShaderCache mtl.bin, and heroes regions.xml files.
    4. You can probably erase more than this without problems, but for the time being, that’s all we’re going to do.
    5. Rename the folders formerly named base.stormassets, base.stormdata, enus.stormassets, and enus.stormdata to Base.SC2Assets, Base.SC2Data, enUS.SC2Assets, and enUS.SC2Data.
  • Now go back to the location where you extracted the Heroes game files, and meddle with heroesdata.stormmod this time.

    1. StormHeroesData.SC2Mod is the new name for the folder.
    2. Open the newly renamed folder and remove all folders and files that aren’t labeled base.stormdata or enus.stormdata.
    3. Delete the ConversationStrings.txt and GameHotkeys.txt files from enus.stormdataLocalizedData.
    4. Delete the AI, Cutscenes, TriggerLibs, and UI files from base.stormdata.
    5. This is a little more technical (and can probably be omitted), but it’s something you’ll have to get accustomed to if you’re going to construct a battleground: Open the base.stormdata folder’s GameData.xml file and remove everything from line 35 to 3212, which should start with AdjuntantVOData.xml, and replace it with Classic21SamurosprayData.xml. For handling XML files, I personally use Visual Studio Code.
    6. Now add another item pointing to GameData/LootBox/LootBoxData.xml, which is required for merc camps to operate (yes, merc camps)
    7. Remove all folders that aren’t labeled Common from base.stormdataGameDataHeroes.
    8. Delete the Mounts folder from the base.stormdataGameData folder.
    9. Delete the BundleData.xml, RewardData.xml, EmoticonData.xml, and EmoticonPackData.xml files from base.stormdataGameData.
    10. You can certainly erase more than this, but for now, this will enough. In terms of files, you simply require UnitData.xml, ActorData.xml, and ModelData.xml.
    11. Base.SC2Data and enUS.StormData should now be used instead of base.stormdata and enus.stormdata.
  • Now, with heroesdata.stormmod, we’re doing it all over again. There are a lot of assets we won’t be utilizing here, therefore there’s a lot to get rid of.

    1. StormHeroes.SC2Mod is the new name for the folder.
    2. Delete all folders that aren’t called base from the newly renamed folder. enus.stormdata, enus.stormdata, stormassets
    3. Delete the localizeddata folder from the enus.stormassets directory.
    4. To remove the localizeddata folder, go to base.stormassets and delete it.
    5. Delete the attachments, mounts, music, overlay, portraits, audio, and ui files from base.stormassetsassets. Open the loot folder and remove everything except the storm lootbanner sconce folder if you want to be extra thorough.
    6. I propose utilizing Everything, as described above, to speed things up. Right-click the base.stormassetsassetstextures folder and choose “Search Everything…”, then search for “storm hero,” without the quotation marks, in the top bar (this will limit the search to that folder): “F:Heroes stuffsc2 convertheroes.stormmodbase.stormassetsassetstextures” storm hero “F:Heroes stuffsc2 convertheroes.stormmodbase.stormassetsassetstextures”
    7. Similar as before, except this time look for “storm morph.”
    8. Similar like before, however this time look for “storm pet.”
    9. The same as before, except this time look for “mount storm “
    10. Search for “storm fx” instead of “storm fx” as in the previous example.
    11. Search for “storm ui” instead of “storm ui” as in the previous example.
    12. Similar as before, except this time look for “storm loot.”
    13. Search for “storm temp” instead of “storm temp” as in the previous example.
    14. Similar as before, however this time look for “editoricon.”
    15. Delete the heroes, mounts, and pets files from base.stormassetsassetsunits.
    16. Rename the files base.stormdata, enus.stormassets, and enus.stormdata to Base.SC2Data, enUS.SC2Assets, and enUS.StormData, respectively.
  • Now, paste each of these over the top of the previously produced modifications, overriding everything that currently exists (which should be restricted to GameStrings.txt files).

  • Reopen the Starcraft II Editor and double-click the StormHeroesData.SC2Mod file you just pasted. Buckle up because this will take some time to open. It may seem that the editor has crashed, but give it time.

    1. I’ve actually got an export of the libraries as I’ve got them built to assist make this set of instructions skippable, since it’s very extensive and extremely simple to goof up. If you do this, you may need to make some minor adjustments to the right IDs and things, but it’s not that difficult. Here’s the URL to these Libraries on Google Drive: to bring them in , in the Trigger Editor (Shortcut: F6), right-click on the left part of the Trigger Editor window, and at the bottom of the menu that appears, there will be a Library pullout menu, with an Import Library button. You’ll also need to alter the library IDs, which I’ve put a remark in each of the Libraries what to change it to, and to do so, right-click on the imported library, and then go to the Library pullout menu, where there’s a Change Library ID option where you can do exactly that. Note that certain steps lower down the tutorial will assume you’ve called things as they are in this tutorial, but I’ve altered some of the variables for simplicity of usage on my end, such as Team Order Index C is simply Order Team, and COMPUTER TeamChaos is just Chaos Player.
    2. There will be a huge number of problems in the editor console; you may attempt to fix each one, but I prefer to ignore it since what you’ve previously erased helps considerably.
    3. Activate the trigger editor. (default shortcut: F6), right-click, hover over the Library button, and then choose “New Library,” giving the library the name “Heroes.”
    4. Right-click the newly established library, hover over the Library icon, and choose “Change Library ID.” Change the ID to four characters, and set those four characters to Core.
    5. Right-click on the library you just created, and then choose “Modify Library” from the Library menu.
    6. Create a new variable (Shortcut: Control+B) with this Library selected, change its type to boolean, and call it SYS Towns.
    7. Rep, generating SYS Jungle Creep Camps, SYS Jungle Watch Towers, SYS Tower AI, and SYS Minion AI each time.
    8. Make a new variable of the type String this time, and call it MAP Map String ID.
    9. Repeat the process to create a MAP Map Image. (This may or may not be required, although some current maps do, others do not, and I did not include it in my map.)
    10. There are even more new variables! We’ll use a few numbers this time, MAP Map Soundtrack, COMPUTER TeamOrder, and COMPUTER TeamChaos, and transform MAP Map Soundtrack to a one-dimensional array with a capacity of 3 bytes.
    11. Make COMPUTER TeamOrder a constant with the value 11, and COMPUTER TeamChaos a constant with the value 12.
    12. A pair of new area variables, MAP Order Base Region and MAP Chaos Base Region, have been added.
    13. BAL Max Teams is a constant integer with a value of 2, while BAL Max Players is a constant integer with a value of 10.
    14. Next, we’ll require an action definition in this library called Data Announcer VO Set Default Announcer For Player Group (shortcut: Control+Alt+R).
    15. And for that, we’ll need two parameters: the first is a Player Group titled Player Group, and the second is a String named Announcer Pack Link (shortcut: Control+M).
    16. Last but not least, in this library, construct a trigger called InitializeStormMod (shortcut: Control+T).
    17. Next, create a new library, this time naming it “Game” and giving it the ID of Game.
    18. The first step is to create two integer constants: Team Order Index C with a value of 1 and Team Chaos Index C with a value of 2.
    19. Then we’ll make a new record called Team (shortcut: Control+U).
    20. Within that record, we’ll create a new variable, give it the name Core, and set its type to Unit.
    21. Now we want to create a variable in the Game library from that record we just created, which you’ll find the – Record entry at the top of the dropdown when choosing what type of variable you want, name that variable Teams, make it an array with one dimension, and a size of 2 by selecting the – Record entry at the top of the dropdown when selecting what type of variable you want.
    22. Another new variable, this time an integer termed Lane Count, has been added to the Game Library.
    23. Another new record has been added to the Game Library, this time with the name Lane Data.
    24. Inside that freshly formed record, add a new pont variable called Waypoints, and set it to be an array with one dimension and a size of 60.
    25. Create an integer variable called Waypoint Count in that record now.
    26. Another new integer variable in that record, named Structure Count this time.
    27. There’s one more integer variable in that record, and it’s named Lane Name Preset this time.
    28. Another new variable in that record is Lane Name, which is a text variable.
    29. Still working on this record, we’ve added a pair of additional variables, this time two unit variables named Order Structures and Chaos Structures, each of which should contain a one-dimensional array with a size of ten.
    30. As previously stated, we now wish to construct a new variable based on the Lane Data record, name it Lane Data, and storing it in an array with one dimension and a size of ten.
    31. Following that is yet another new record, this time dubbed Town Data.
    32. We want to construct four variables in this record: two numbers, one region, and one boolean. The two numbers Lane and Owner, the location Town Region, and the boolean Makes Core Vulnerable When Killed are all names for the same thing.
    33. Finally, in this record, add a new trigger and give it a name. Game should be included
    34. Create a variable from that record called Town Town Data, which should be an array with one dimension and a size of 30.
    35. Now, in that Library, we require an integer variable called Town Town Count, making it the final library we add to this collection.
    36. Before moving on to the next Library, we need to create a new function named Players On Team Heroes, set the return type of this boolean to Player Group, and add two parameters, the first of which is an integer named Team, and the second of which is a boolean named NPC Option. Finally, we need to add a return action to the parameter, and set it to the All players function.
    37. Next, we’ll create a new Library, this time naming it “Maps” and giving it the ID MapM.
    38. Create a trigger and name it within this new library. Map Mechanics should be included.
    39. Create a new constant integer called Jungle Max Camps with a value of 15 in this library.
    40. Another constant integer with a value of 10 in this library is Data Jungle Max Number Of Defenders Per Camp.
    41. Next, in that library, create three predefined variables called Jungle Camp Types, Jungle Camp Defender Types, and Jungle Camp Merc Types. Ctrl+P is the shortcut for making presets.
    42. Create 8 preset values for Merc Camp, Doubloon Camp, Doubloon Small Camp, Ashenvale Forest Guardians, Try Me Camp, Custom 1, Custom 2, and Custom 3 within the Jungle Camp Types preset. You’ll probably only use the first, but the others are available, and good practice dictates that you reproduce each of them.
    43. Create 14 preset values in the Jungle Camp Defender Types, including Custom, Siege Giants, Knights, Grave Golem, Doubloons, and more. Bruiser Camp 1, Bruiser Camp 2, Bruiser Camp 3, Boss Camp 1, Boss Camp 2, and Boss Camp 3 are the different camps.
    44. Create 14 preset settings for the Jungle Camp Merc Types: Custom, Siege Giants, Ogres, Grave Golem, Ashenvale Ancients, and more. Bruiser Camp 1, Bruiser Camp 2, Bruiser Camp 3, Boss Camp 1, Boss Camp 2, and Boss Camp 3 are the different camps.
    45. Now, create a new record called Jungle Camp Path Data, and inside it, we’ll need one point variable called waypoint. Because this record will be inserted within the following one in the editor, it is critical that it be declared first.
    46. Jungle Creep Camps is the title of a new album.
    47. We’ll need 11 variables in that record.
    48. We need Map Data Camp Type, Map Data Camp Defender Type, and Map Data Merc Spawn Type for numbers.
    49. We want Map Data Camp Captain Spawn Points and Map Data Defender Spawn Points for points, with the latter being a one-dimensional array with the size set to the constant Data Jungle Max Number Of Defenders Per Camp you created before.
    50. We want Map Data Defender Leash Region for regions.
    51. We want Defender Defenders Cower on Death for booleans and Merc Merc Camp Has Single Waypoint for booleans.
    52. We also want the Merc Merc Camp Has Single Waypoint to be an array with 1 dimension and size set to the constant Data Jungle Max Number Of Defenders Per Camp, and we also want the Defender Unit Types to be an array with 1 dimension and size set to the constant Data Jungle Max Number Of Defenders Per Camp.
    53. We’ll utilize the Jungle Camp Path Data data twice, designating them Merc Order Merc Camp Pathing and Merc Chaos Merc Camp Pathing, as an array with a dimension of 1 and a size of 6 for the latter two variables.
    54. Create a new record variable named Jungle Creep Camps as an array with a dimension of 1 and a size of 15 from the “Jungle Creep Camps” record in the Maps library.
    55. Now we’ll make a new action definition and call it Map Set Repulse Region.
    56. You’ll notice a parameters setting in this definition; click on it and add six new parameters.
    57. The first parameter should be an integer called Team, followed by an area entitled Pulse Region, and then four points named Punch Target Location 1, Punch Target Location 2, Punch Target Location 3, and Punch Target Location 4.
    58. Another new action definition, dubbed Map Set Safe Region this time.
    59. We just need two arguments for this one: an integer called Team and an area named Safe Region, as well as a Return Type of (None) or void.
    60. Finally, a new integer variable entitled ‘Jungle Number Of Creep Camps’ has been added to the Maps library.
    61. That was a lot of fun, wasn’t it? All that’s left are a few more trigger libraries, but they only require one trigger apiece, so it shouldn’t take long.
    62. Library 4: Includes a trigger called IncludeGameDataHelper and a library named “Game Data Helper” with the ID GDHL.
    63. IncludeAI is a trigger in Library 5 that is titled “AI” and has the ID AIAI.
    64. The sixth library is called “Sound,” and it has the ID Sond, as well as a trigger entitled IncludeSound.
    65. Library 7: Includes a trigger called IncludeSupport and a library named “Support” with the ID of Sprt.
    66. Library 8 has the term “UI” and the ID UIUI, as well as a trigger entitled IncludeUI.
    67. Library 9 has a trigger called IncludeStartingExperience and a library named “Starting Experience” with the ID of StEx.
  • Optional Step: If you want to make handling placement of Walls, Gates and Healing Fountains easier, I’ll recommend one further set of changes – Open up the Data editor(Shortcut: F7), if the units tab is not already visible, click the little green plus icon, and then Edit Game Data-> Units, and then Search for “Wall”, and you’ll see a bunch of walls named identically. Simply double click on each one individually, and copy the ID into the Name section, and then OK. Now repeat this again, searching for Gate, and then again, searching for Fountain.

  • Now that we’ve set up everything for constructing a battlefield using the “core” battleground tilesets, let’s move on to making an ARAM using the Alterac Pass tileset, which we’ll do next.

    1. We’ll need to look at the document metadata file from Alterac Pass to figure out which files we’re supposed to steal from. To identify that map, we’ll need to find an Alterac Pass replay and open it in an MPQ Editor.
    2. Once you’ve done that, you’ll find a few different files; the one we’re looking for is replay.server.battlelobby. Open it up, and you’ll see the first line contains a lot of filepathtomapfilebiglongsetofcharacters.s2ma, and the file for Alterac Pass’s map file is the last one mentioned.
    3. Remember where those files are – a942a942b04d89c5e8128d3f3ceca55dd07157abd5688a748b4feb7ead18731d5757.s2ma For the version of the game this guide is for, it’s a942a942b04d89c5e8128d3f3ceca55dd07157abd5688a748b4 You may obtain it from your ProgramData folder (note that it won’t be exactly where it says it is; it’ll be in C:ProgramDataBlizzard EntertainmentBattle.netCache), or you can get it from the game files that you extracted to get everything started (and would have removed, per prior stages). It can be found in the game files in modscore.stormmodbase.stormdataDepotCache (remember, we said to maintain a backup! ), and it can be obtained from the game files in modscore.stormmodbase.stormdataDepotCache (remember, we said to keep a backup!).
    4. So grab that map, open it up with an MPQ editor, and you’ll see a bunch of different files & folders, and the file we’re going to open is DocumentInfo, which you can open with your preferred text editor. We can see that it’s got a Dependancy in Modsheroesmapmods/battlegroundmapmods/alteracpass.stormmod, so that’s where we’re going to get the Alterac Pass info from. It’s also relying on HeroesData and Modsheroesmapmods/battlegroundmapmods/warcraftdata.stormmod, which we’re going to use as the basis of that StormWarcraftData mod
    5. Navigate to where you extracted the Heroes game files, and you’ll notice a “heroesmapmods” folder. Open that, and there’ll be a “battlegroundmapmods” folder. Open that, and there’ll be the alteracpass.stormmod and warcraftdata.stormmod that we’re searching for. To ensure that everything goes well, we’ll have to eliminate a few items.
    6. To begin, rename the Warcraft folder to StormWarcraftData.SC2Mod.
    7. Delete all of the files in the newly renamed folder.
    8. Delete the Lib7EB401DE.galaxy and Lib7EB401DE h.galaxy files from the base.stormdata folder.
    9. Rename the folders base.stormdata and enus.stormdata to Base.SC2Data and enUS.SC2Data, respectively.
    10. Change the name of AlteracPass to StormAlteracPass. SC2Mod
    11. Delete all of the files in the newly renamed folder.
    12. Remove the AI and UI folders from the base.stormdata folder, and save the LibMMAP.galaxy.galaxy and LibMMAP h.galaxy files (we’ll need these at the conclusion of this tutorial, so save them someplace you’ll remember).
    13. Rename the folders base.stormdata and enus.stormdata to Base.SC2Data and enUS.SC2Data, respectively.
    14. Paste those over the top of the mods you made earlier, and now we need to make some fixes because of how Heroes interprets data vs how SC2 does: Open up StormAlteracPass.SC2Mod, open up the Data editor, and then you want to edit model data(Edit Art and Sound Data-> Models), and find Storm_Doodad_WCAV_JungleOuter_A, change it’s variation count to 5, Storm_Doodad_WCAV_JungleOuter_F variation count to 5, Storm_Doodad_WCAV_JungleOuter_G to 3, Storm_Doodad_WCAV_JungleOuter_I to 3, Storm_Doodad_WCAV_JungleOuter_AA to 5, Storm_Doodad_WCAV_JungleOuter_AF to 2, Storm_Doodad_WCAV_JungleOuter_AG to 2, and Storm_Doodad_WCAV_JungleOuter_AJ to 3
    15. We just need an action definition we can refer to in triggers now that we’ve done the IGHS stuff. We don’t need anything from the IGHS files itself (at least not right now, but we will later, so keep that in mind), we only need an action definition we can refer to in triggers.
    16. Open the StormIGHS Mod that you previously created.
    17. Activate the trigger editor.
    18. Create a new library with the name InGameHeroSelect and the ID IGHS.
    19. In that library, create a new action definition and give it a name. Initialize Shuffle Pick is now available.
    20. Set the type to Action and the return type to (None) or void.
    21. Shuffle Screen Title is a text parameter that should be included.
    22. Add two booleans arguments, one for Randomize Mounts And Skins and the other for Show Hero Class Icons.
    23. Add a new integer parameter named “Time Allowed To Pick” to the equation.
    24. Add a Crazy Mode Chance parameter, which is a real (or, as it’s frequently termed, a fixed value) parameter. (For the curious, when everyone is compelled to select the same hero, it’s known as crazy mode.)
    25. Finally, another boolean parameter for this library and mod, this time named Use Pick Suggestions.
    26. Now open up your StormAlteracPass mod, go to the trigger editor, and create a new Library called Alterac Pass with the ID MMAP.
    27. In that library, create a new action definition and give it a name. Set up Map Data and give it nine parameters to work with.
    28. The first argument should be a number called Team.
    29. The second and third parameters, Boss Aggro Region and Boss Leash Region, must both be regions.
    30. Keep Top, Keep Mid, and Keep Bot are the fourth, fifth, and sixth paramers, respectively.
    31. The final three parameters, Cavalry Spawn Point Top, Cavalry Spawn Point Mid, and Cavalry Spawn Point Bot, must all be points.

We’ll go on to the comments now since this is a good cutoff point.

Original source: link


  • Heroes

    Using Blizzard’s client/software to create Sc2 campaigns https://www.reddit.com/r/RealTimeStrategy/comments/p9ondq/best single player missioncampaign design/ https://www.reddit.com/r/starcraft/comments/p936ei/since nobody had mentioned why any other games/ I was debating whether to use an old account or a new one; I couldn’t remember what the previous account was called, but it didn’t really matter. Dynamic gameplay was one of the things that set Heroes apart from every other game and every other moba game: Random occurrences throughout the game that affect…

  • How may Heroes of the Storm be of assistance?

    I’ll tell you the truth. It’s incredible to think that it’s been over a year since December of last year, and I’m still not over what Activision Blizzard has done to this game, particularly to its professional players, commentators, and content creators. On the eve of the Heatstone saga, there’s a lot of chatter about how a player’s…

  • Spanish version of Heroes of the Storm

    TL;TR I simply wanted to let you know that everyone in Latin America is asking the same questions as you about what will happen with the game. Why are developers so reticent? However, we are all really interested in each and every move that the game takes. (Before we begin, I’d like to apologize for poor English, however…

For the game Heroes of the Storm, write “Making a Heroes of the Storm Battleground with the Starcraft II Galaxy Editor(with a little assistance from a few other applications for good measure)”.

OP 10 BEST NEW Upcoming Games 2022 & 2023 (4K 60FPS)

The greatest collection of games set to be published in 2022 and 2023 for PC, PS5, PS4, Xbox Series X/S, Xbox One, and Switch – all of which you can watch in stunning 4K ULTRA HD and 60FPS with the most up-to-date information available!

 

The Most Important Games in 2022

With the new year quickly approaching and a slew of new game releases on the horizon, it’s time to take a peek ahead at some of the year’s most anticipated titles. There are some fantastic games coming out in the next year for PC, Xbox, PS5, and all of your other favorite gaming platforms.