Tutorial: How to "Easily" Play Past Brawls/Old Maps in Single Player
Without further work that I haven't bothered to figure out yet be warned this means you're alone, no AI on either team. So something like Pull Party is pretty lame since it's literally just you walking around on that map.. at least you can see/explore that old map for now if you want. Escape from Braxis/Dead Man's Stand for example can work for single player (if you're good enough or on the right Hero!)
Anyway, how-to:
-
Have HOTS installed (obviously)
-
Download and install CASCView (Windows only) or else a command like tool e.g. CASCExtractor. CASCView http://www.zezula.net/en/casc/main.html
-
Point it to your "HeroesData" folder inside your "Heroes of the Storm" installation folder.
-
Go to mods/core.stormmod/base.stormdata and right click/extract folder "depotcache" anywhere. The .s2ma files inside here essentially are all the maps the game can hypothetically use (including all the old Brawls and some unfinished/old versions of maps). Some of these might not run at all incidentally.
-
Incidentally you can easily unnest these files (they are separated out and buried within multiple other purely numeric folders) with the normal Windows explorer search run on that extracted depotcache folder. Search for ".s2ma". Just cut and paste all the search results (the actual map files) to some other folder and they'll all be together and easier to navigate.
-
The map files don't have meaningful names, BUT you can use MPQ Editor (also Windows only) to look within and edit these maps. Sort by file size, for the most part the larger files are more promising (at least >1 MB). Some old simple Brawls are much smaller, but at that size you also have a ton of junk like incomplete maps that probably won't work at all. If you look for a .galaxy file somewhere in the directory it should have the map name as a comment/header near the very top (most but not all of the map files have this). Incidentally I've renamed ALL of the files according to what they actually represent.. I'll post this at some point, it's probably going to have to be pictures of my folder layout or something (showing each map name and its filesize which should help you organize yours I guess/save you some trouble if you're looking for a specific few). http://www.zezula.net/en/mpq/download.html
-
(Finally) when you have a map you want to play, go to your Heroes of the Storm installation folder, make a new folder "maps", inside there create a new folder called "Heroes", inside there create a folder "singleplayermaps", inside there a new folder "startingexperience", then paste in the map you want to play but rename it "tutorialmapmechanics.stormmap" or "tutorial01.stormmap" or "tutorialveteran.stormmap"
-
This will work whether it is a file (just the .s2ma file you had but renamed/extension changed) or a folder (e.g. if you extracted all the contents of the .s2ma using MPQ editor). Making it a folder lets you modify a ton of stuff yourself, e.g. the Zerg stats in Escape from Braxis (a ton of stuff is just in plain text .xml files with hardcoded stats).
-
To play, just according to what you named the file load up the appropriate tutorial or the Veteran Challenge. You can even add the above folder/swap out maps with the game still open e.g. in the main menu. It should look for and read this folder when you actually launch the appropriate single player map.
Sauce/inspiration: https://www.reddit.com/r/heroesofthestorm/comments/a60l4w/loading_custom_singleplayer_maps_into_heroes_of/
The above just doesn't talk about where the full map files are located in the game data/how to extract them, although /u/SpazzoHOTS very helpfully pointed me to where the actual .s2ma files are located in the game directory.
Also note some relics of the tutorial you're replacing may remain, such as Uther's voiceovers.. personally I think this is hilarious and well worth keeping but I'm pretty sure you could get rid of it by just finding the file in the actual tutorial which is the source of the voiceovers or whatever other artifacts and creating a blank file with the same name.
tl;dr:
-
Get these 2 programs (Windows only): CASCView: http://www.zezula.net/en/casc/main.html MPQ Editor: http://www.zezula.net/en/mpq/download.html
-
With CASCView open HeroesData (in your HOTS install location) and extract mods/core.stormmod/base.stormdata/depotcache (these are the map files including old Brawls)
-
Organize the extracted files directory so that all the files are within the same directory instead of each in their own subfolder. To do this in Windows just search your extracted directory for .s2ma and cut or copy all the files (all the search results) into 1 new folder you make anywhere
-
Open this new folder in MPQ Editor
-
Sort by file size, look for files around but just under 1.5MB for the most part. MPQ Editor lets you see the actual files that make up the map file, look inside the GALAXY files (just in Notepad or any text editor) as they should say the map name at the top.
C:UserscluDownloadscascview_enx64Work ew mod375b3f1312af5fa747285737c5aea50926fc506d63e4fd4d0eb71119382f5c6c.s2ma
File: 375b3f1312af5fa747285737c5aea50926fc506d63e4fd4d0eb71119382f5c6c.s2ma
CRC-32: 7d0c90a9
SHA-1: c4bf78b8da62a23565286e34d6342f21bffd64ec
SHA-256: 375b3f1312af5fa747285737c5aea50926fc506d63e4fd4d0eb71119382f5c6c
SHA-512: 1986040645e81460af2f45e1321cd104d139e62416088a1d514b3472697338a5ed52d1a4b02ebccc5d2220950cf14191da65f44f72420316dc8ab9f2d81f624d
-
Once you found the right file (e.g. the Escape from Braxis map file), you don't need CASCView or MPQ Edit just in Windows make a new directory in your HOTS install folder maps/Heroes/singleplayermaps/startingexperience (so that's 4 folders you made, each nested inside the previous) and inside that startingexperience folder copy the .s2ma file for the Brawl you want to play and rename it tutorialveteran.stormmap (ignore any warnings you get). Then just launch the veteran challenge挑战任务 in game from the bottom right options and it should launch the Brawl instead of the Veteran Tutorial.
评论1
The best way to get rid of Uther's helpfulness is to change the game mode. I generally use the sandbox mode, but you've also got to note that this might screw with some brawl stuff.
This can be done by adding the following to the trigger in the map initialisation bit
libCore_gv_sYSGameMode = libCore_ge_GameModes_Sandbox;
To get AI, the way I do it is by editing the mapinfo file to change players 2-10 to being AI, which here's a gif of me doing that
gif失效,这个人提供视频https://streamable.com/1l7g3h 看起来是在直接修改地图文件的二进制信息
Nice I got it to work but it seems the AI just sits in fountain喷泉 on the couple maps I tried? For old Brawls. Deadman's Stand and Garden Arena. On both teams, and even if you ping "follow" it doesn't matter.
Maybe to do with the new "improved" AI? I wonder if it's fixable by messing with an AI trigger library or too difficult.
评论2
Trying to follow along but I'm new at CASC and not quite sure how to extract the files now that I found them so I can browse through the .s2ma files. Can you make a video tutorial and walk me through the rest because it's starting to get monkaS from here
For the time being perhaps this video someone else made on using CASCView to extract general Blizz game assets would suffice for that step at least? https://www.youtube.com/watch?v=2DotwPLgc6k
IIRC the tl;dw is you just right click the "depotcache" folder on the directory display on the left of CASCView and clicking extract or something. It should put them in a folder called "work" within the CASCView folder (which should be within your Downloads folder if you didn't move it).
I fried my processor (unrelated to this, crazy power surge from a transformer blowing up while I was running some other crazy program with no UPS and it was 9 years old anyway..) on my desktop.
Once I install the new processor (should be coming tomorrow) I'm planning to finally do what I suggested in the original version of the post, just make a mod folder with Escape from Braxis (Heroic), Deadman's Stand, and maybe Pull Party or something already named/overwriting the 3 in-game tutorials so people don't have to use any external programs like CASC for at least the main Brawls, it'll just be download and put in your install directory it'll just be 1/2 steps.
评论3
Album of the ones I got "working" for now.
Escape from Braxis also works (and the Heroic version), Spazzo had a post a couple months ago with a video showing the full Brawl being completed solo as Deathwing.
操作:
CascView
http://www.zezula.net/en/casc/main.html
A tool for browsing files and extracting data, called CascView is available, supporting all Blizzard games. CascView features browsing of local and online storages, searching files, extracting files, viewing BLP images and more. Note that CascView is not an editor - there is no support for modifying CASC storages and there are no plans for adding it. Due to the ever-changing nature of the storages, it would be extremely difficult and also a violation of Blizzard terms of use.
Download CascView for Windows (32+64 bit) v 2.3.
History
- 2.3.0.243: Improved browsing of files in a folder
- 2.3.0.217: Added viewer for Hearthstone 2D textures
- 2.3.0.215: Added viewer for .TEX textures (Diablo III)
- 2.3.0.212: Improved BLP image viewer and possibility of exporting the viewed image.
- 2.3.0.209: Small updates after release of Warcraft III: Reforged
- 2.3.0.204: Support for storages downloaded by the Blizzget tool
- 2.3.0.198: New release: Bugfixes and improvements
How do I open CASC storage with CascView?
When opening a game storage directory, you can either enter the storage at the command line or select "FileOpen Storage" in the application UI. To open the storage, you either select a game directory or one of the storage subdirectories (no matter how deep). Examples:
CascView.exe "c:GamesDiablo III" CascView.exe "C:GamesHeroes of the StormHeroesData" CascView.exe "C:GamesWorld of WarcraftData" CascView.exe "C:GamesOverwatchdatacascconfig6677"
MPQ Editor
http://www.zezula.net/en/mpq/download.html
MPQ Editor v 3.6.0.858 (English, 32+64-bit)
MPQ Editor v 3.6.0.858 (Chinese, 32+64-bit)
逃离布莱克西斯禁区普通模式
C:UserscluDownloadscascview_enx64Work ew modf46cb87ab29097dcf0d111c37f97e96882f030f29975db6e83d981e52a13353e.s2ma
逃离布雷克西斯禁区,英雄难度
C:UserscluDownloadscascview_enx64Work ew mod375b3f1312af5fa747285737c5aea50926fc506d63e4fd4d0eb71119382f5c6c.s2ma
但是纳兹波的特质任务做不了,而且ai队友,不知道跟随
地图数据修改
01 01 00 00 00 02 00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00
02 02 00 00 00 02 00 00 00 00 00 00 00 00 5E 00 00 00 00 00 00 00 00
03 02 00 00 00 02 00 00 00 00 00 00 00 00 5F 00 00 00 00 00 00 00 00
04 02 00 00 00 02 00 00 00 00 00 00 00 00 60 00 00 00 00 00 00 00 00
05 02 00 00 00 02 00 00 00 00 00 00 00 00 61 00 00 00 00 00 00 00 00
06 02 00 00 00 01 00 00 00 00 00 00 00 00 0D 8A F4 1B 00 00 00 00 00
07 02 00 00 00 01 00 00 00 00 00 00 00 00 0D 8A F4 1B 00 00 00 00 00
08 02 00 00 00 01 00 00 00 00 00 00 00 00 0D 8A F4 1B 00 00 00 00 00
09 02 00 00 00 01 00 00 00 00 00 00 00 00 0D 8A F4 1B 00 00 00 00 00
0A 02 00 00 00 01 00 00 00 00 00 00 00 00 0D 8A F4 1B 00 00 00 00 00
0B 04 00 00 00 02 00 00 00 00 00 00 00 00 3C 9A A7 79 00 00 00 00 00
0C 04 00 00 00 01 00 00 00 00 00 00 00 00 0D 8A F4 1B 00 00 00 00 00
0D 04 00 00 00 02 00 00 00 00 00 00 00 00 3C 9A A7 79 00 00 00 00 00
0F 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00
libCore_gv_sYSHeroStartLevel = 10;
libPVEB_gv_pB_GameDifficulty = libPVEB_ge_PVEGameDifficulty_Normal;
libCore_gv_sYSGameMode = libCore_ge_GameModes_ModeC; 修改
libCore_gv_sYSGameMode = libCore_ge_GameModes_Sandbox;
bool gt_Init_Func (bool testConds, bool runActions) { // Automatic Variable Declarations playergroup autoB161FA55_g; int autoB161FA55_var; // Actions if (!runActions) { return true; } TriggerExecute(libAIAI_gt_IncludeAI, true, false); TriggerExecute(libGame_gt_IncludeGame, true, false); TriggerExecute(libGDHL_gt_IncludeGameDataHelper, true, false); TriggerExecute(libMapM_gt_IncludeMapMechanics, true, false); TriggerExecute(libSond_gt_IncludeSound, true, false); TriggerExecute(libSprt_gt_IncludeSupport, true, false); TriggerExecute(libUIUI_gt_IncludeUI, true, false); TriggerExecute(libPVEB_gt_IncludeMMPvEBrawlMod, true, false); TriggerExecute(libPESC_gt_IncludeMMPvEBrawlModStarcraft, true, false); TriggerExecute(libPBUI_gt_IncludeMMPvEBrawlModUI, true, false); TriggerExecute(libPEB1_gt_IncludeMMZergEscape, true, false); libCore_gv_sYSIsBrawlGame = true; libCore_gv_sYSTowerAI = false; libCore_gv_sYSGameMode = libCore_ge_GameModes_Sandbox; libGame_gv_heroSpawnBlockGame = true; libGame_gv_heroDeath_RespawnMounted = false; libCore_gv_sYSMinionAI = true; libCore_gv_sYSMinionSpawningOn = false; libGame_gv_xPTrickleEnabled = false; libGame_gv_talents_PlayChooseATalentSound = false; libGame_gv_heroDeathRespawnSetting = libGame_ge_HeroDeathRespawnOptions_NoRespawn; libUIUI_gv_teamHasAlreadyAnnouncedHeroics[libGame_gv_teamOrderIndex_C] = true; libUIUI_gv_teamHasAlreadyAnnouncedHeroics[libGame_gv_teamChaosIndex_C] = true; libCore_gv_sYSXPOn = false; libCore_gv_sYSHeroStartLevel = 10; libPVEB_gv_pB_GameDifficulty = libPVEB_ge_PVEGameDifficulty_Normal; libGame_gv_announceCountdownCallback = libPEB1_gt_EscapefromBraxisStartingSequence; libGame_gv_startingAnimationsCallback = gt_StartingAnimationsCallback; libGame_gv_initializeVisibilityCallback = gt_InitializeVisibilityCallback; libPVEB_gv_pvEPickupPreplacedPickupCallback = gt_CreatePreplacedItems; libPBUI_gv_curateHeroSelectionUIHeroListInitCallback = libPEB1_gt_PZECurateHeroListCallback; libGame_gv_pickingHeroesCallback = gt_CurateHeroSelectionCallback; TriggerExecute(libCore_gt_InitializeStormMod, true, true); TriggerExecute(gt_InitAltarRegion, true, false); TriggerExecute(libPVEB_gt_InitPVEBrawlMod, true, false); TriggerEnable(libGame_gt_CoreDiesGameOver, false); autoB161FA55_g = PlayerGroupAll(); autoB161FA55_var = -1; while (true) { autoB161FA55_var = PlayerGroupNextPlayer(autoB161FA55_g, autoB161FA55_var); if (autoB161FA55_var<0) { break; } libCore_gf_DataLootContentLoadAnnouncerPackDataIntoIndex("Adjutant", autoB161FA55_var, false); } TriggerExecute(gt_InitCheckpoints, true, false); TriggerExecute(gt_InitEventPoints, true, false); TriggerExecute(gt_MarineEvent2Init, true, false); TriggerExecute(gt_InitHardMode, true, false); TriggerExecute(gt_InitZergAIDummies, true, false); TriggerExecute(libPEB1_gt_PZEInit, true, false); return true; }
libCore_gv_sYSIsBrawlGame = true;
libCore_gv_sYSTowerAI = true;
libCore_gv_sYSGameMode = libCore_ge_GameModes_ModeC;
libGame_gv_heroSpawnBlockGame = false;
libGame_gv_heroDeath_RespawnMounted = true;
libCore_gv_sYSMinionAI = true;
libCore_gv_sYSMinionSpawningOn = false;
libGame_gv_xPTrickleEnabled = true;
libGame_gv_talents_PlayChooseATalentSound = false;
libGame_gv_heroDeathRespawnSetting = libGame_ge_HeroDeathRespawnOptions_Respawn;
libUIUI_gv_teamHasAlreadyAnnouncedHeroics[libGame_gv_teamOrderIndex_C] = true;
libUIUI_gv_teamHasAlreadyAnnouncedHeroics[libGame_gv_teamChaosIndex_C] = true;
libCore_gv_sYSXPOn = true;
libCore_gv_sYSHeroStartLevel = 10;
libPVEB_gv_pB_GameDifficulty = libPVEB_ge_PVEGameDifficulty_Normal;
44e859b07d9714fe1ef96b23b792a77c049785787da3e6acd80c8a3f2368ed94.s2ma 没用的
053e0739fa8c3a161cb232b0588fe22693c9026d48c55be3f4b8cb2c2285bd26.s2ma
Name: Hanamura Temple 花村
e04b3a1acaba5bee304f7f1f78bdfa95d9b486e351cfbef05d16c3819a45db5b.s2ma
Name: Sandbox (Cursed Hollow)
36e407d23664eec5c88cebe5065013d8ec8f827f78b3c5edf2da8c8efaf57fdd.s2ma
Name: Towers of Doom 末日塔
fbe679ca460b94af8953b736b304d31d503d7888086fba3f45305f39466ce9f3.s2ma
Name: Warhead Junction 弹头枢纽
367e530733c274a3d6fc82c1573e64cff94390a637a7cde69d59ef79e1cbabd4.s2ma
Name: Braxis Outpost 布雷克西斯前哨
b90c6e781aa409694ab6392497061e1cd4465b5d33eb164414e9294ef8997663.s2ma
Name: Cursed Hollow 诅咒谷
e572513b944a0b3d6f0243700fe21faea7f90ae9f730011240302c334066d544.s2ma
Name: Deadman's Stand (Heroic) 亡者卫城
7608b266406e0dac4442b040792174dbbb6f1ac320b424cb39cf45cb4925d435.s2ma
Name: Haunted Mines 鬼灵矿
e039a1fc9e483f665dab8937e473f956da15d53cf92a47fd69b5dffd2db83de3.s2ma
Name: Deadman's Stand
e51de1d7186dae6d7be1a24c21ee1761484ef335bea8d17da104d1a039cd9afd.s2ma
Name: Blackheart's Bay 黑心湾
da9519fda108d864b264abec5f0876d05f16d648ed4d133903d65f01de80a310.s2ma
Name: Garden Arena
9cad0d20591e09bd7d6e25ccb9021aef3056f1b95561d6a5a467915115b7dedd.s2ma
Name: Sky Temple 天空殿