I used CascView to extract the assets. Just point it at the HeroesData directory.
You can then make a SC2mod (saved as SC2Components to be able to copy files directly into it) and move the Heroes files into it.
I put thogether a working Heroes mod, but it's buggy as hell. For example: when placed on a map, units have their models duplicated and clipping through each other :S
If anyone managed to make a fully working Heroes mod, it would be cool if you could upload it somewhere with the assets removed (no point in including 8GB of models and textures if we can extract and put them back in ourselves).
I've been able to do it but using 2 mods instead of 1.
The idea is to create an empty mod that only depends on Sc2:Core. Afterwards use casc view to extract all the assets in storm:heroes:assets:base. Now use an MPQ Editor to extract the files from the sc2mod you made on the same folder where you extracted the assets files. All files except (attributes) and (listfile), then use the MPQ Editor to reconstruct an MPQ from that folder and save it over your mod. This will generate the proper mod file. You can also extract enUS files of the mod and insert them into the Sc2 enus folder (they use a different setup)
For data editor same process but when creating the mod, add a dependency to HeroesAssets.
Still, heroes model are way too big in Size. So unless if Blizzard provide offical asset pack, with the current 150M limitation, I'm afriad that they still can't be widely used.
Unless you reduce their quality manually
They can be optimized through different means.
One way is squishing all the floats, the other is reducing very similar keys in animations. It sacrifices quality but the end result will be better.
I managed to import HotS assets (lots of bugs and errors, but most of it works) and I'm like a kid in a candy store. I just found some (never used?) cute pirate ladies! :O
]
Does anyone know where HotS stores map files? I only found the tutorial map (which is a copy of Dragonshire).
Same as Sc2 Arcade maps, they are stored in battle.net cache. You just need to open them.
i just opened my main map with a huge pack of data abilities which i was polishing and redoing as i learned new better methods over the years. And guess what? half of them doesn't work and using some of them causing game to crush with a critical error. I spend so much time learning the data editor, i won't kill any more of my time fighting with this bugs.
I see a lot of cool stuff in there but nothing really mind-blowing. A lot of conveniences like being able to modify a catalog value instead of set it.
New unit flags: Dazed, Silenced.
Can hide charges on button flags.
Can show recharging. I guess this is for when you have a charge of an ability, it will show the cooldown of when the next charge is acquired.
I think what stands out is the mixture of Heroes of the Storm and LotV settings. It's been asked a lot whether SC2 and HotS will share the exact same engine, and hence opening up the opportunity for a shared arcade (albeit with a potentially colossal download).
Well, the trigger editor won't change much.
The key features are in the Data Editor. Specialy something called "Wizards". They are something like premade GUIs for making certain set of data objects through simpler parameters. Wizards can be created and designed on the editor, saved, reused and shared for others to use. I'm still gathering data on them to fill the missing holes.
I think the key feature in the natives is Automation and GenericHandle even though not much has been done on them yet.
Well some texts indicate you can get extra files and open them. However there seems to be no galaxy support for that, except for something called Automation which appears to run Lua. It's still in development.
Another thing is something called "list components" and something about loading galaxy code during game.
Since the amount of data I've datamined is quite big. I'll do it by steps.
The code above, contains only the new natives.
Highlights
Generic Handles
Automation
Pathing Functions
Hotkey Events
Lots of new unit functions
//--------------------------------------------------------------------------------------------------// Contents//--------------------------------------------------------------------------------------------------// - About Types// - Automation// - Effect Historyconstintc_animBracketStartFlagFullMatch=(1<<5);constintc_animBracketStartFlagNoMismatchQueryProps=(1<<6);constintc_animBracketStartFlagDontResetOnUnhide=(1<<7);constintc_animFlagDontResetOnUnhide=(1<<5);constintc_animFlagNoMismatchQueryProps=(1<<6);constintc_animFlagVariationMatch=(1<<7);constintc_animationOffsetStart=0;constintc_animationOffsetEnd=1;nativevoidAnimLengthQueryByName(actora,stringanimName,boolscaledTime);nativevoidAnimLengthQueryByProps(actora,stringanimProps);nativegenerichandleAnimLengthQueryLastCreated();nativevoidAnimLengthQueryWait();nativefixedAnimLengthSync(generichandleh);nativefixedAnimLengthRemainingSync(generichandleh);nativevoidAnimWait(actora,stringanimName,fixedoffset,intoffsetType);//--------------------------------------------------------------------------------------------------// Automation//--------------------------------------------------------------------------------------------------nativestringAutomationLuaGlobalGetAsString(stringname);//--------------------------------------------------------------------------------------------------// Bank//--------------------------------------------------------------------------------------------------nativetextBankSizeAsText(stringname,intplayer);nativetextBankSectionSizeAsText(bankb,stringsection);nativetextBankKeySizeAsText(bankb,stringsection,stringkey);//--------------------------------------------------------------------------------------------------// Camera//--------------------------------------------------------------------------------------------------constintc_cameraValueFalloffStartNear=13;constintc_cameraValueFalloffEndNear=14;nativefixedCameraGetDistance(intplayer);nativeunitgroupCameraFollowUnitGroupGet(intplayer);// Toggle the forced follow state. If off, it will defer to the user option.//nativevoidCameraForceFollowUnitGroup(intplayer,boolforced);//--------------------------------------------------------------------------------------------------// Campaign// // Game initialization and configuration associated with standard campaign games//--------------------------------------------------------------------------------------------------nativevoidCampaignProgressEnableCampaignSaves(playergroupplayers,boolinDisable);// Blizzard maps only//--------------------------------------------------------------------------------------------------// Catalogs////--------------------------------------------------------------------------------------------------nativeintCatalogFieldValueGetFlagsAsInt(intcatalog,stringentry,stringfieldPath,intplayer);nativeboolCatalogFieldValueModify(intcatalog,stringentry,stringfieldPath,intplayer,stringvalue,intoperation);nativeboolCatalogReferenceModify(stringreference,intplayer,stringvalue,intoperation);nativevoidConversationDataLineSetPlayers(stringconvId,stringlineId,playergroupplayers);nativevoidConversationDataLineResetPlayers(stringconvId,stringlineId);nativevoidConversationDataLineHideForObservers(stringconvId,stringlineId,boolhide);// ConversationDataGetSpeaker returns the character id for the speaker of the given line, if any.nativestringConversationDataGetSpeaker(stringconvLine);//--------------------------------------------------------------------------------------------------// Data Table// - Data tables provide named storage for any script type.// Table access may be either global or thread-local.//--------------------------------------------------------------------------------------------------constintc_dataTypeGenericHandle=15;// - c_dataTypeGenericHandlenativevoidDataTableSetGenericHandle(boolglobal,stringname,generichandleval);nativegenerichandleDataTableGetGenericHandle(boolglobal,stringname);//--------------------------------------------------------------------------------------------------// Dialogs//--------------------------------------------------------------------------------------------------nativevoidDialogSetPositionRelativeToUnitWithAnchor(intdialog,unitinUnit,stringinAttachment,intanchor,intoffsetX,intoffsetY);nativevoidDialogSetRenderPriority(intdialog,intrenderPriority);constintc_triggerControlTypeCommandPanel=23;constintc_triggerControlTypeHeroCutscene=24;constintc_triggerControlTypeCountdownLabel=25;constintc_triggerControlTypeUnitStatusLabel=26;constintc_triggerControlTypeScoreValueFrame=27;constintc_triggerControlPropertyAnimIndex=68;// intconstintc_triggerControlPropertyUseAspectUncorrection=69;// boolconstintc_triggerControlPropertyHandle=70;// stringconstintc_triggerControlPropertyBorderColor=71;// colorconstintc_triggerControlPropertyFillColor=72;// colorconstintc_triggerControlPropertySubmenu=73;// stringconstintc_triggerControlPropertyUnitGroup=74;// unitgroupconstintc_triggerControlPropertyPlayerId=75;// intconstintc_triggerControlPropertyScoreValueLink=76;// stringconstintc_triggerControlPropertyStateIndex=77;// intconstintc_triggerImageTypeCircular=6;nativevoidDialogControlSetPropertyAsUnitGroup(intcontrol,intproperty,playergroupplayers,unitgroupvalue);nativeunitgroupDialogControlGetPropertyAsUnitGroup(intcontrol,intproperty,intplayer);nativevoidDialogControlSendAnimationEvent(intcontrol,playergroupplayers,stringeventName);nativevoidDialogControlSetAnimationSpeed(intcontrol,playergroupplayers,stringanimationName,fixedspeed);nativevoidDialogControlSetAnimationTime(intcontrol,playergroupplayers,stringanimationName,fixedspeed);nativevoidDialogControlAdvanceAnimation(intcontrol,playergroupplayers,stringanimationName,fixedspeed);nativevoidDialogControlRequestFocus(intcontrol,playergroupplayers);//--------------------------------------------------------------------------------------------------// Effect History//--------------------------------------------------------------------------------------------------nativeintEffectHistoryCount(effecthistoryinHistory);constintc_effectHistoryEffectRoot=0;constintc_effectHistoryEffectCurrent=1;nativestringEffectHistoryGetAbil(effecthistoryinHistory,intinIndex);nativefixedEffectHistoryGetAmountFixed(effecthistoryinHistory,intinIndex,intinAmount,boolinTotal);nativeintEffectHistoryGetAmountInt(effecthistoryinHistory,intinIndex,intinAmount,boolinTotal);nativestringEffectHistoryGetEffect(effecthistoryinHistory,intinIndex,intinEffect);nativefixedEffectHistoryGetTime(effecthistoryinHistory,intinIndex);nativeintEffectHistoryGetType(effecthistoryinHistory,intinIndex);nativeunitEffectHistoryGetUnitByLocation(effecthistoryinHistory,intinIndex,intinLocation);nativestringEffectHistoryGetWeapon(effecthistoryinHistory,intinIndex);//--------------------------------------------------------------------------------------------------// Environment//--------------------------------------------------------------------------------------------------// ShrubnativeboolInShrub(pointinPos);//--------------------------------------------------------------------------------------------------// Game//--------------------------------------------------------------------------------------------------constintc_cmdNotEnoughFood=12;nativestringGameMapPath();// deprecatednativevoidGameAddChargeRegen(stringinCharge,fixedinVal);nativevoidGameAddChargeRegenRemaining(stringinCharge,fixedinVal);nativevoidGameAddChargeRegenFull(stringinCharge,fixedinVal);nativefixedGameGetChargeRegenFull(stringinCharge,booladjustmentOnly);nativeintGameTestConfigType();nativeboolGameIsMatchmade();nativeboolGameIsRanked();nativeboolGameIsCompetitive();nativeboolGameIsPractice();nativeboolGameIsCooperative();nativeboolGameAreHeroDuplicatesAllowed();nativevoidKickFromGame(playergroupinPlayerGroup);nativevoidGameSetPauseable(boolpauseable);nativevoidMinimapPingPossibleEnemyStartLocations(fixedduration,stringinModelLink,colorc);//--------------------------------------------------------------------------------------------------// Misc//--------------------------------------------------------------------------------------------------nativevoidStartProfileRun(textname);nativevoidStopProfileRun();nativevoidWaitForProfilerLoggingToEnd();//--------------------------------------------------------------------------------------------------// Path//--------------------------------------------------------------------------------------------------nativevoidPathSetSourceUnit(intinPathId,unitinUnit);nativeunitPathGetSourceUnit(intinPathId);nativevoidPathSetStepModel(intinPathId,intinLocation,stringinModel);nativestringPathGetStepModel(intinPathId,intinLocation);nativevoidPathSetStepModelScale(intinPathId,intinLocation,fixedinScale);nativefixedPathGetStepModelScale(intinPathId,intinLocation);nativevoidPathSetStepMidpoint(intinPathId,intinLocation,fixedinMidpoint);nativefixedPathGetStepMidpoint(intinPathId,intinLocation);nativevoidPathClearWayPoints(intinPathId);nativevoidPathAddWayPoint(intinPathId,pointinWayPoint);nativevoidPathSetMinimumLinearDistance(intinPathId,fixedinDistance);// As the crow fliesnativefixedPathGetMinimumLinearDistance(intinPathId);// As the crow fliesnativevoidPathSetMinimumTravelDistance(intinPathId,fixedinDistance);nativefixedPathGetMinimumTravelDistance(intinPathId);nativevoidPathSetMinimumStepCount(intinPathId,intinStepCount);nativeintPathGetMinimumStepCount(intinPathId);nativeintPingCreateWithPlayerId(playergroupplayers,stringmodelLink,pointposition,colorintColor,fixedduration,intplayer);nativeintPingCreateFromData(playergroupplayers,stringpingLink,pointposition);nativevoidPingSetObserver(intp,boolisObserver);nativeintEventPingOption();//--------------------------------------------------------------------------------------------------// Hero Talent Tree//--------------------------------------------------------------------------------------------------nativestringTalentTreeGetHeroTalentLink(intinPlayer,intinIndex);nativeboolTalentTreeCanSelectHeroTalentTree(intinPlayer,intinTalentTreeIndex);nativevoidTalentTreeSetSelectedHeroTalentTree(intinPlayer,intinTalentTreeIndex);nativeintTalentTreeGetSelectedHeroTalentTree(intinPlayer,intinTier);nativeintTalentTreeGetSelectedHeroTalentTreeColumn(intinPlayer,intinTier);nativevoidTalentTreeClearTier(intinPlayer,intinTier);nativeboolTalentTreeAllowed(intinPlayer,intinTalentTreeIndex);nativevoidSetTalentTierEnabled(intinTier,boolinEnabled);nativevoidSetTalentUpgradeRequired(boolinRequired);nativevoidSetTalentTreeHeroLevel(intinPlayer,intinLevel);nativevoidSetTalentsEnabled(boolinRequired);nativevoidSetTalentTreeSelectionPanelDismissAllowed(boolinAllowed);nativevoidSetTalentTreeSelectionPanelAutoShow(boolinAutoShow);nativevoidSetTalentTreePauseGameWhenSelectionPanelShown(boolinPauseGame);nativevoidTriggerAddEventHeroTalentTreeSelected(triggert,intplayer);nativevoidTriggerAddEventHeroTalentTreeSelectionPanelShown(triggert,intplayer);nativevoidTriggerAddEventHeroTalentTreeSelectionPanelHidden(triggert,intplayer);nativevoidHelpPanelAddMessage(playergroupplayers,textspeakerText,textsubtitleText,stringmodelLink,soundlinksoundId);//--------------------------------------------------------------------------------------------------// Hero Leader Panel//--------------------------------------------------------------------------------------------------nativevoidSetHeroLeaderPanelEnabled(boolinRequired);nativestringPlayerHero(intinPlayer);nativestringPlayerSkin(intinPlayer);nativestringPlayerMount(intinPlayer);nativestringPlayerArtifact(intinPlayer,intinArtifactIndex);nativeintPlayerArtifactRank(intinPlayer,intinArtifactIndex);nativestringPlayerCommander(intinPlayer);nativeintPlayerCommanderLevel(intinPlayer);nativevoidPlayerSetToDLighting(intinPlayer,stringinLight);nativeboolPlayerAIControlAllowed(intplayer);nativevoidPlayerSetAllowAIControl(intplayer,boolallow);nativeboolPlayerIsUnderAIControl(intplayer);nativevoidPlayerSetUnderAIControl(intplayer,boolaiControlled);nativeboolPlayerHasReward(intinPlayer,stringinReward);nativevoidPlayerAddTalent(intinPlayer,stringinTalent);nativevoidPlayerRemoveTalent(intinPlayer,stringinTalent);nativeboolPlayerHasTalent(intinPlayer,stringinTalent);// Unlike RegionPlayableMapSet, this does not affect pathing.// Passing a null region will reset to global playable bounds.nativevoidPlayerSetBounds(intinPlayer,regioninRegion);constintc_playerStateCameraFollow=18;// Read-onlynativevoidPlayerSetRace(intinPlayer,stringinRace);nativevoidPlayerSetHero(intinPlayer,stringinHero);nativevoidPlayerSetSkin(intinPlayer,stringinSkin);nativevoidPlayerSetMount(intinPlayer,stringinMount);nativevoidPlayerSetCommander(intinPlayer,stringinCommander);nativevoidPlayerSetCommanderLevel(intinPlayer,intinCommanderLevel);nativevoidPlayerSetDeathTimer(intinPlayer,timerinTimer);// PlayerApplySkin may be used to apply multiple skin replacements simultaneously.// These are not automatically removed when applying new ones like PlayerSetSkin does.nativevoidPlayerApplySkin(intinPlayer,stringinSkin,boolapply);nativestringPlayerGetHotkeyProfile(intinPlayer);nativevoidTriggerAddEventPlayerJoin(triggerinTrigger,intplayer);nativevoidTriggerAddEventPlayerEffectUsedFromScope(triggert,intplayer,stringinScope);nativestringEventPlayerEffectUsedSourceBehavior();nativevoidSetScoreTimer(timerinTimer);//--------------------------------------------------------------------------------------------------// Points//--------------------------------------------------------------------------------------------------nativefixedDistanceSquaredBetweenPoints(pointp1,pointp2);nativepointPointInterpolate(pointsource,pointdest,fixedfraction);nativepointMidPoint(pointsource,pointdest);//--------------------------------------------------------------------------------------------------// Strings//--------------------------------------------------------------------------------------------------nativeintStringCompare(strings1,strings2,boolcaseSens);// - Use c_textExpressionTokenMain as the token code to define the main expression text// dynamically, rather than looking up from externalized text. In this case the string id// is arbitrary.//conststringc_textExpressionTokenMain="(main)";//--------------------------------------------------------------------------------------------------// Text Tags//--------------------------------------------------------------------------------------------------nativevoidTextTagSetGravity(intinTag,fixedinGravity);//--------------------------------------------------------------------------------------------------// Triggers////--------------------------------------------------------------------------------------------------constintc_triggerThreadFlagAI=1;// Thread is an AI thread.nativevoidTriggerCurrentTriggerThreadSetFlags(intf,boolon);// sets/clears flags given on the current thread// - Arbitrary data may be associated with the event via data tables. This works using special// value names for event parameters, which can be determined using TriggerEventParamName.//// 1) To set parameter values, store them in the local data table using DataTableSet*// with names from TriggerEventParamName. This must be done before calling TriggerSendEvent.//// 2) To access values when responding to the event, simply call DataTableGet* on the local// table using the same name from TriggerEventParamName.//nativestringTriggerEventParamName(stringeventName,stringparamName);// Trigger Debuggingconstintc_tdFilterFlagObservers=0;constintc_tdFilterFlagParticipants=1;nativevoidTriggerDebugOutputEnable(boolinEnable);nativevoidTriggerDebugSetTypeFilter(inttype,intfilter,boolenabled);//--------------------------------------------------------------------------------------------------// Units//--------------------------------------------------------------------------------------------------nativetextUnitGetName(unitinUnit);nativepointUnitGetGoalPosition(unitinUnit);constintc_unitStateResistant=33;constintc_unitStateSilenced=34;constintc_unitStateDazed=35;nativevoidUnitModifyCooldown(unitinUnit,stringinCooldown,fixedinVal,intinOperation);nativevoidUnitClearCooldowns(unitinUnit,boolinReset);nativeeffecthistoryUnitEffectHistory(unitinUnit,intinMaxCount);nativevoidUnitAbilitySpendExplicit(unitinUnit,abilcmdinAbilCmd,intinLocation,fixedinVitalsFactor,fixedinResourcesFactor,fixedinChargesFactor,fixedinCooldownFactor);// Ability command statesconstintc_cmdStateRecharging=(1<<8);constintc_cmdStateHideCharges=(1<<18);constintc_cmdStateHighlighted=(1<<19);nativeunitgroupUnitConjoinedGroup(unitinUnit,stringinConjoinedBehavior);nativefixedUnitGetDamageDealtTime(unitinUnit);nativefixedUnitGetDamageTakenTime(unitinUnit);// Behavior categoriesconstintc_unitBehaviorFlagCloak=3;constintc_unitBehaviorFlagInvulnerable=4;constintc_unitBehaviorFlagSlow=5;constintc_unitBehaviorFlagFast=6;constintc_unitBehaviorFlagStun=7;constintc_unitBehaviorFlagReveal=8;constintc_unitBehaviorFlagUser1=9;constintc_unitBehaviorFlagUser2=10;constintc_unitBehaviorFlagUser3=11;constintc_unitBehaviorFlagUser4=12;constintc_unitBehaviorFlagUser5=13;constintc_unitBehaviorFlagUser6=14;constintc_unitBehaviorFlagUser7=15;constintc_unitBehaviorFlagUser8=16;constintc_unitBehaviorFlagUser9=17;constintc_unitBehaviorFlagUser10=18;constintc_unitBehaviorFlagUser11=19;constintc_unitBehaviorFlagUser12=20;constintc_unitBehaviorFlagUser13=21;constintc_unitBehaviorFlagUser14=22;constintc_unitBehaviorFlagUser15=23;nativeboolUnitHasBehavior2(unitinUnit,stringinBehavior);nativefixedUnitBehaviorDamageModifyRemaining(unitinUnit,stringinBehavior);nativefixedUnitBehaviorDamageModifyLimit(unitinUnit,stringinBehavior);nativeboolUnitOrderIsAcquired(unitinUnit,intinIndex);constintc_unitInventorySlotContainer=65;// The value to use for inSlot when calling UnitInventoryMove to move an item to a top-level container provided by CAbilInventory directly.nativevoidUnitWeaponSetPeriodRemaining(unitinUnit,intinIndex,fixedinRemaining);nativeboolUnitInRangeAndAbleToAttackTarget(unitinUnit,unitinTarget);// Unit experiencenativefixedUnitXPGetCurrentXP(unitinUnit,stringinVeterancyBehavior);nativevoidUnitXPAddXP(unitinUnit,stringinVeterancyBehavior,fixedinXP);nativevoidUnitXPSetCurrentXP(unitinUnit,stringinVeterancyBehavior,fixedinXP);nativeintUnitXPGetXPForLevel(unitinUnit,stringinVeterancyBehavior,intinLevel);nativevoidUnitXPSetXPForLevel(unitinUnit,stringinVeterancyBehavior,intinLevel,intinXp);nativeintUnitXPGetCurrentLevel(unitinUnit,stringinVeterancyBehavior);nativevoidUnitXPSetCurrentLevel(unitinUnit,stringinVeterancyBehavior,intinLevel);nativeintUnitXPGetNumLevels(unitinUnit,stringinVeterancyBehavior);nativestringUnitTypeGetGenderCode(stringinUnitType);nativeboolUnitPathableToPoint(unitu,pointinTarget,fixedinRange,fixedinMaxDistance);nativeboolUnitPathableToUnit(unitu,unitinTarget,fixedinRange,fixedinMaxDistance);// Unit Vital// - The EUnitVital constants are in Game.galaxyconstintc_unitVitalAny=-1;nativevoidTriggerAddEventUnitDamageAbsorbed(triggerinTrigger,unitrefinUnit,stringinBehavior);nativevoidTriggerAddEventUnitHealed(triggerinTrigger,unitrefinUnit,intinHealType,stringinEffect);nativefixedEventUnitDamageAttempted();nativefixedEventUnitDamageAttemptedVitals();nativefixedEventUnitDamageBehaviorShield();nativefixedEventUnitDamageVitalsLeeched(intinVital);nativeintEventUnitDamageKillXP();// - c_unitEventHealednativeunitEventUnitHealLaunchUnit();nativeintEventUnitHealLaunchPlayer();nativeintEventUnitHealVital();nativefixedEventUnitHealAmount();nativestringEventUnitHealEffect();nativeunitEventUnitAbilityOtherUnit();nativevoidTriggerAddEventUnitBehaviorChangeFromCategory(triggert,unitrefu,intinCategory,intinChangeType);nativeunitEventUnitVictimUnit();nativeunitEventUnitItemUsed();nativestringEventUnitEffectUsed();// Map TagsnativestringPickedExclusiveMapTag();// UInativevoidUISetHotkeyProfile(playergroupplayers,stringprofileName);nativetextUIHotKeyString(inthotKey,intcount,boolabbreviate,booladdTags);nativevoidUISetGameMenuItemShortcut(playergroupinPlayers,intinMenuItemType,textinShortcut);nativevoidUIShowStandardMenu(playergroupinPlayers);nativevoidUISetHotkeyAllowed(playergroupplayers,inthotkey,boolallow);nativevoidUIMessageLogPanelSetVisible(playergroupinPlayers,boolinVisible);nativevoidUISetTargetingOrder(playergroupinPlayers,unitgroupinUnits,orderinOrder,boolinSticky);nativevoidTriggerAddEventHotkeyPressed(triggert,intplayer,inthotkey,booldown);nativevoidTriggerAddEventResourceRequest(triggert,intplayer);nativevoidTriggerAddEventResourceTrade(triggert,intplayer,intrecipientPlayer);nativevoidTriggerAddEventCommandError(triggert,intplayer,interror,abilcmdinAbilCmd);nativeintEventResourceRequestAmount(intresourceIndex);nativeintEventResourceTradeRecipient();nativeintEventResourceTradeAmount(intresourceIndex);nativeintEventCommandErrorValue();nativeabilcmdEventCommandErrorAbilCmd();//--------------------------------------------------------------------------------------------------// Visibility//--------------------------------------------------------------------------------------------------// these need to match the values in VisionUI.hconstintc_fillTypeFogged=0;constintc_fillTypeMasked=1;constintc_fillTypeHidden=2;constintc_fillTypeUnexplored=3;// Note: Alpha values are in percent (0-100)//nativefixedVisGetFoWAlpha(intplayer);nativevoidVisSetFoWAlpha(intplayer,fixedalpha);nativevoidVisResetFoWAlpha(intplayer);nativevoidVisFillArea(intplayer,regionarea,intfillType,boolcheckCliffLevel);
It's possible but there is no info inside HotS or Sc2:LotV about them. There's a new feature coming in that will probably need them but nothing is certain. I'll talk about it soon once I'm guaranteed that I can disclose the datamine.
0
Hmn pretty much beause Core files can't be modified. I just tried it and couldn't get it to work :(.
Nah I just changed the .StormLayout to .SC2Layout using some basic shell scripting.
The problem I have is overriding the Core Sc2 Layouts.
0
Sure, stay tuned. I got some things fixed but I still struggle to get the UI working correctly and find a way to hook into hero/player selection.
0
I've been able to do it but using 2 mods instead of 1.
The idea is to create an empty mod that only depends on Sc2:Core. Afterwards use casc view to extract all the assets in storm:heroes:assets:base. Now use an MPQ Editor to extract the files from the sc2mod you made on the same folder where you extracted the assets files. All files except (attributes) and (listfile), then use the MPQ Editor to reconstruct an MPQ from that folder and save it over your mod. This will generate the proper mod file. You can also extract enUS files of the mod and insert them into the Sc2 enus folder (they use a different setup)
For data editor same process but when creating the mod, add a dependency to HeroesAssets.
0
Maybe a simple wizard for making trees.
0
If you can make basic wizards to simulate Wc3's object editor, then it would be quite nice.
0
Normaly that is done through libraries, Look at Heroes files, HotS is 100% made with the editor
0
They can be optimized through different means.
One way is squishing all the floats, the other is reducing very similar keys in animations. It sacrifices quality but the end result will be better.
0
Same as Sc2 Arcade maps, they are stored in battle.net cache. You just need to open them.
0
Use wizards bro, it will make things easier.
0
It's impossible right now. HotS uses a lot of new actor messages not present on current version of Sc2.
0
Well, the trigger editor won't change much.
The key features are in the Data Editor. Specialy something called "Wizards". They are something like premade GUIs for making certain set of data objects through simpler parameters. Wizards can be created and designed on the editor, saved, reused and shared for others to use. I'm still gathering data on them to fill the missing holes.
I think the key feature in the natives is Automation and GenericHandle even though not much has been done on them yet.
0
Well some texts indicate you can get extra files and open them. However there seems to be no galaxy support for that, except for something called Automation which appears to run Lua. It's still in development.
Another thing is something called "list components" and something about loading galaxy code during game.
0
Since the amount of data I've datamined is quite big. I'll do it by steps.
The code above, contains only the new natives.
Highlights
More natives found from hacking:
AutomationMapNameGet AutomationComputerNameGet AutomationBuildNumberGet
all the game natives (extracted from the executable):
0
Okey let me gather all the data. I'll try not to be redundant with what people has said already but there's some new stuffs.
0
It's possible but there is no info inside HotS or Sc2:LotV about them. There's a new feature coming in that will probably need them but nothing is certain. I'll talk about it soon once I'm guaranteed that I can disclose the datamine.