• 0

    posted a message on Difficult Terrain Objects

    Open the map with an MPQ viewer and edit the 'Objects' file. Delete all terrain objects there.

    Posted in: Galaxy Editor Bugs and Feedback
  • 0

    posted a message on CatalogFieldValueSet Program

    There are some pretty severe limitations to CatalogFieldValueSet unfortunately. There hasn't been any documentation listing what those are yet, but for example things like changing Command Cards on the fly doesn't seem to be possible in most circumstances. I need to get around to updating the tutorial with that info.

    If you are talking about adding a user-friendly wrapper to the function, best way to go about that is just making a Trigger Library. Many of the existing Blizzard trigger actions related to data actually use CatalogFieldValueGet/Set internally.

    Posted in: Third Party Tools
  • 0

    posted a message on M3 Exporter

    @IskatuMesk: Go

    You can modify the height map of the terrain by creating Terrain Objects with your model, effectively allowing units to walk on stairs/bridges/etc. You'd still need to create pathing blockers for the walls and such, and multi-level terrain is not supported AFAIK (although you might be able to fake it with triggers).

    Posted in: Third Party Tools
  • 0

    posted a message on [Library] STARCODE v1.4

    Now just need to implement some kind of compression for strings (Huffman would do, as per vjeux).

    Posted in: Trigger Libraries & Scripts
  • 0

    posted a message on [Data,Terrain] Bridges - A Terrain Objects and Footprints Guide

    @MrZ3r0: Go Never mind, i fix it, but the bridge can't connect between 2 cliffs, it lie on the ground.

    You have to change the object's height manually inside the map file (unless blizzard fixed it in a recent patch) as it says at the end of the guide.

    @MrZ3r0: Go same with me, mine doesn't place at all or show up actually.

    If your ground height in the Terrain Editor is higher than 0 you won't see the Terrain Object (since it'll be under ground). Drop the ground down below that. Also your object will need a footprint to "destroy" the terrain above it - use THIS as a rough guide on doing that.

    If the object doesn't appear at all in Editor, make sure you inherited from Terrain Object in the object, and try restarting GE as someone mentioned.

    Posted in: Tutorials
  • 0

    posted a message on MilkyWay Editor info

    @templar4522: Go

    It's coded in .NET.

    We've been working on it on and off since the beta came out. Initially sanktanglia started the project as a map editor before GE came out and it grew from there.

    Posted in: Third Party Tools
  • 0

    posted a message on MilkyWay Editor info

    @Windexglow: Go

    The data is still fundamentally separated into different XML nodes, but we do hope to offer better ways to navigate links between them.

    For example we'll probably offer a visual graph that shows how any given data relates to other nodes. We will also let you search through all the files simultaneously instead of one at a time, and eventually hope to offer wizards to accomplish repetitive tasks.

    Posted in: Third Party Tools
  • 0

    posted a message on MilkyWay Editor info
    Milky Way Editor

    As some of you know, Nicoli_s and I have been working on a 3rd party editor since before GE came out. We want the initial version of this editor to be a complement to GE and offer features GE does not. This is our progress so far:

    Script Editor

    • Ability to edit Galaxy scripts directly. Easily import multiple scripts into a map. *
    • Autocomplete for Galaxy, including custom function names and galaxy calls. Intellisense-style hints for function definitions (coming soon). *
    • Real-time syntax checking and error detection(courtesy of Zoxc and his Legion compiler) * Script Editor

    Terrain Editor

    • Export/Import the Heightmap of a map into a image file. *
    • Export/Import the individual texture masks for each terrain texture. * The combination of of the two features above can let map makers create terrain that is virtually impossible in GE. You will be able to take 2D images and turn them into awesome 3D maps with any image editor and a few clicks of a button.
    • 3D preview of terrain after import *
    • Future support for custom cliffs, importing pathing map from an image, etc * 3D Terrain Texture Masks Height Map

    Data Editor

    • XML-based data editor. XML is intelligently merged from different data sources. *
    • Edit data as XML text and in a modern property grid simultaneously. *
    • Open and view multiple data objects at the same time. Easily navigate between them. *
    • Real time XML syntax checking. * Data Editor 1 Data Editor 2
    Posted in: Third Party Tools
  • 0

    posted a message on Bridges Bridges Bridges

    @Ardnived: Go

    Bridge guide here

    After you complete that, simply add a footprint to the bridge of the shape thats the same as the model (I'll add a detailed explanation later, but there are already guides on footprints out there I think).

    And yes, as far as anyone can tell 2-level terrain is impossible.

    Posted in: Miscellaneous Development
  • 0

    posted a message on [Contest] Clock (2/2) - Vote now!

    I'm surprised how close some of the other entries are. DarkRevenantX should win this by a mile I think

    Posted in: Project Workplace
  • 0

    posted a message on Terrain manipulation. Ramps.

    You should be able to create a destructible with a custom pathable footprint. Set the model to the destructible to be a bridge (or some other flat surface) and tilt it forward like a ramp.

    That should let you simulate a ramp I think.

    Posted in: Miscellaneous Development
  • 0

    posted a message on [Data, Trigger] Fix enGB/enUS localization errors

    It is also possible to change the editor's localization by going to the console (Window -> Console) and using the localization command.

    Posted in: Tutorials
  • 0

    posted a message on [Triggers] CatalogFieldValueGet / Set

    I haven't seen any documentation of this very important trigger, so I figured I'd post some info. Much of this is taken from Renee's helpful tutorial at http:bbs.islga.org/read-htm-tid-38662.html .

    Function definition:
    native string CatalogFieldValueGet (int catalog, string entry, string fieldPath, int player);
    native bool CatalogFieldValueSet (int catalog, string entry, string fieldPath, int player, string value);
    

    These functions are available as GUI actions in the Catalog category. They allow you to change the "templates" of Units, Abilities and any other object that can be edited in the data editor via triggers.

    Parameters:
    int catalog

    References one of the following constants which refer to the 51 GameData files in SC2:

    / / EGameCatalog
    const int c_gameCatalogAbil = 0;
    const int c_gameCatalogAchievement = 1;
    const int c_gameCatalogAchievementTerm = 2;
    const int c_gameCatalogActor = 3;
    const int c_gameCatalogAlert = 4;
    const int c_gameCatalogAttachMethod = 5;
    const int c_gameCatalogBeam = 6;
    const int c_gameCatalogBehavior = 7;
    const int c_gameCatalogButton = 8;
    const int c_gameCatalogCamera = 9;
    const int c_gameCatalogCliff = 10;
    const int c_gameCatalogCliffMesh = 11;
    const int c_gameCatalogConversation = 12;
    const int c_gameCatalogConversationState = 13;
    const int c_gameCatalogCursor = 14;
    const int c_gameCatalogDSP = 15;
    const int c_gameCatalogEffect = 16;
    const int c_gameCatalogError = 17;
    const int c_gameCatalogFootprint = 18;
    const int c_gameCatalogFoW = 19;
    const int c_gameCatalogGame = 20;
    const int c_gameCatalogGameUI = 21;
    const int c_gameCatalogItem = 22;
    const int c_gameCatalogItemClass = 23;
    const int c_gameCatalogItemContainer = 24;
    const int c_gameCatalogLight = 25;
    const int c_gameCatalogLoot = 26;
    const int c_gameCatalogModel = 27;
    const int c_gameCatalogMover = 28;
    const int c_gameCatalogRace = 29;
    const int c_gameCatalogRequirement = 30;
    const int c_gameCatalogRequirementNode = 31;
    const int c_gameCatalogReverb = 32;
    const int c_gameCatalogScoreResult = 33;
    const int c_gameCatalogScoreValue = 34;
    const int c_gameCatalogSound = 35;
    const int c_gameCatalogSoundtrack = 36;
    const int c_gameCatalogTactical = 37;
    const int c_gameCatalogTargetFind = 38;
    const int c_gameCatalogTargetSort = 39;
    const int c_gameCatalogTerrain = 40;
    const int c_gameCatalogTerrainObject = 41;
    const int c_gameCatalogTerrainTex = 42;
    const int c_gameCatalogTexture = 43;
    const int c_gameCatalogTile = 44;
    const int c_gameCatalogTurret = 45;
    const int c_gameCatalogUnit = 46;
    const int c_gameCatalogUpgrade = 47;
    const int c_gameCatalogValidator = 48;
    const int c_gameCatalogWater = 49;
    const int c_gameCatalogWeapon = 50;
    
    string entry

    Refers to the ID of the data object you are trying to modify. This ID can be viewed in the data editor by using View Raw Data and using the Name of the object in the left panel (or using the 'id' Token of the object).

    string fieldpath

    Refers to the data field that you are trying to modify. If the data field is a a simple value (not an array and not a structure), you can simply put the name here. For example for for Unit Speed, put "Speed". Again use View Raw Data for find the name of the field.

    If the field is a complex structure (field with multiple internal values inside it), use the "." operator to access those fields. For example to access a Unit's Figet values, use "Fidget.TurnAngle", "Fidget.TurningRate", etc.

    If the field is part of an array (for example AbilityArray of a unit), you can use indexes to access elements of the array. For example to access the first element of CUnit_AbilArray_Link (full name of the ability array), I would use "AbilArray[0].Link". Here's an example:

    A Zealot has the following abilities: Field Zealot (Zealot) CUnit_AbilArray_Link {stop|attack|move|Warpable|Rally|Charge}

    In order to change the Zealot's ability from Charge to Blink, I would call: CatalogFieldValueSet (c_gameCatalogUnit, "Zealot", "AbilArray[5].Link, 1, "Blink");

    There are some arrays that are indexed with IDs. For example the 'Build' ability's InfoArray is indexed by "BuildXX". You can check if an array is indexed if when modifying this array via Raw Data, you can see an ID-Value pair in the array viewer, like this: Build Info Array In this case, each entry of the array is indexed by a constant 'e_abilCmdBuild'. However these constants are part of the editor and are not accessible via triggers. Additionally many Data Editor fields have custom GUIs (Command Card for example) that make it very difficult to figure out how to modify them. In these cases it is better to open up the XML file from GameData and read how it references these values. Here's an example:

        <CAbilBuild default="1" id="TerranAddOns">
            <EditorCategories value="Race:Terran,AbilityorEffectType:Units"/>
            <Alert value="AddOnComplete"/>
            <Type value="AddOn"/>
            <FlagArray index="InstantPlacement" value="1"/>
            <FlagArray index="PeonDisableAbils" value="1"/>
            <FlagArray index="ShowProgress" value="1"/>
            <InfoArray index="Build1" Unit="TechLab" Time="30">
                <Resource index="Minerals" value="50"/>
                <Resource index="Vespene" value="50"/>
                <Button DefaultButtonFace="TechLabBarracks" State="Suppressed"/>
            </InfoArray>
            <InfoArray index="Build2" Unit="NuclearReactor" Time="40">
                <Resource index="Minerals" value="50"/>
                <Resource index="Vespene" value="50"/>
                <Button DefaultButtonFace="NuclearReactor" State="Restricted"/>
            </InfoArray>
        </CAbilBuild>
    

    Here we see the InfoArray is indexed by "Build1", "Build2", etc. Similarily the Resource array inside it is indexed by "Minerals" or "Vespene". Note that any tag that appears twice inside 1 XML node is effectively an array. Therefore to access the first element of the array, and get the unit, one would use "InfoArray[Build1].Unit". To get the cost of that unit, one would use "InfoArray[Build1].Resource[Minerals].

    Example 1: Lets say we want to set the cost NuclearReactors build from a barracks to 100 gas, we would use: CatalogFieldValueSet(c_gameCatalogAbil, "BarracksAddOns", "InfoArray[Build2].Resource[Vespene]", 1, "100");

    Example 2: Lets say I want to move the position of the Stimpack button on the Marine 1 to the right. The command card of a Marine looks like:

            <CardLayouts>
                <LayoutButtons Face="Move" Type="AbilCmd" AbilCmd="move,Move" Row="0" Column="0"/>
                <LayoutButtons Face="Stop" Type="AbilCmd" AbilCmd="stop,Stop" Row="0" Column="1"/>
                <LayoutButtons Face="MoveHoldPosition" Type="AbilCmd" AbilCmd="move,HoldPos" Row="0" Column="2"/>
                <LayoutButtons Face="Attack" Type="AbilCmd" AbilCmd="attack,Execute" Row="0" Column="4"/>
                <LayoutButtons Face="MovePatrol" Type="AbilCmd" AbilCmd="move,Patrol" Row="0" Column="3"/>
                <LayoutButtons Face="Stim" Type="AbilCmd" AbilCmd="StimPack,Execute" Row="2" Column="0"/>
            </CardLayouts>
    

    To change the Column of Stim, I would use: CatalogFieldValueSet (c_gameCatalogUnit, "Marine", "CardLayouts[0].LayoutButtons[5].Column",1,"1");

    As you can see, you can use this to change almost anything editiable with GE in realtime. Dynamic tooltips? Trigger-based global upgrades? There are tons of possibilities. More testing has to be done on whether this would work for modifying things like Actors or Tilesets.

    int player

    As you've noticed, these functions all take in a player argument. It turns out that the game stores Catalog data on a per-player basis. That is each player has a unique copy of all data and it can be modified independently of other players. When a player trains an upgrade, it actually modifies the Catalog data to apply the changes listed in that upgrade. The functions above work in the same way.

    Posted in: Tutorials
  • 0

    posted a message on [Contest] Clock

    A sun clock.

    I didn't actually change the color of the lights, as that should be tileset-dependent. Shows how to easily simulate the movement of a sun.

    Edit: IV should be VI :D

    Posted in: Project Workplace
  • 0

    posted a message on Level skip requirement?

    Make a Requirement + Validator for each level for the unit to be = level of ability *2.

    So level 2 of an ability would require unit lvl 4, lvl 3 would require 6, etc. Look up one of the hero tutorials to see how to make the requirement. They usually have a lvl 6 requirement for the "ultimate" ability.

    Posted in: Miscellaneous Development
  • To post a comment, please or register a new account.