ZombiesRus5 ZombiesRus5

[Mod Utility] Entity Editor and Validation Tool (Fan made, Supports Rebellion)

[Mod Utility] Entity Editor and Validation Tool (Fan made, Supports Rebellion)

http://code.google.com/p/soaseplugin/

I have a set of eclipse and ant based tools for modding with Sins that others may find useful when validating or building their projects.

Current Downloads (older downloads: Downloads

FAQ

System Requirements 

Syntax Wiki - A syntaxual representation of almost all of the Sins editable files.

 

How To's:
How To Install Eclipse

How To Setup Entity Validation Eclipse Plugin (Updated for new preference with v0.6)

Video: How to setup and configure the Soase Eclipse Plugin


References:

Mod Development with Eclipse (Forum link providing a general overview of Eclipse)

Eclipse download site (http://eclipse.org/downloads)

 


Tools Supported:

Entity Editor (Click me for cool stuff about visual Entity Validations)

Eclipse Editor builder/nature extension that provides visual feedback to the following validations.

Entity Definition View - Displays the syntax rules for the currently opened entity file.

 

Summary of validations currently supported:

Boolean: Validates boolean entries contain TRUE or FALSE only
Brush: Validates a referenced brush entry exists for the value entered
Conditional Validation: Allows conditional structures to follow based on a field value
Key word: Validates all entity file key words are spelled correctly
Quotes: Validates any values requiring qoutes have beginning and ending quotation marks
Integer: Validates integer entries contain digits
Decimal: Validates decimal entries contain ####.#####
Entity References: Validates a referenced entity file exists for the value entered
String Reference: Validates a referenced String entry exists for the value entered
Sound Reference: Validates a referenced Sound entry exists for the value entered
Enumeration Validation: Validates an entry confirms to an allowed set of values (i.e. buffInstantActionType)
Iteration Validation: Validates repeating elements are correct
Structure Validation: Validates entries appear in the correct order in the entity file (configurable to allow unordered structures)
Explosion Validation: Validates a referenced explosion entry exists for the value entered
Texture Validation: Validates a referenced texture exists for the value entered
Particle Validation: Validates a referenced effect exists for the value entered
Sounddata Validation: Validates sounddata files for correctness including referenced sound files
GalaxyScenarioDef Validation: Validates galaxyScenarioDef files for correctness with 2 pass validations
StringInfo Validation: Validates English.str for correctness
Brushes Validation: Validates brushes files for correctness
Gameplay.constants: Validates the Gameplay.constant file for correctness
Explosiondata Validation: Validates sounddata files for correctness including referenced sound files
Galaxy Validation: Validates galaxy files for correctness and performs additional validations on referenced templates and design names.

Content Assistance: [ctrl]+[space bar] on keywords or constants and get suggested completions
Syntax Coloring: change syntax coloring of entity files to suit your preferences (defaults to all black currently)
Hover Help: hover over a keyword and get additional details about the value or structure
Quick link to wiki syntax

1,203,116 views 278 replies | Pinned
Reply #151 Top

Hi all,

So I consider this a fairly significant release for the Eclipse plugin tool. For starters I think it marks the last major release until Rebellion comes out.

However the real reason I feel this way is I've finally shored up some of the remaining validation rules and finally implemented required keywords. This will make validation so much better and I'm really looking forward to the improvement. For example enter "Intrinsic" as a levelSourceType without the minExperienceLevelRequired will display a warning now. This level of validation coupled with the hover help, content assistance and the Entity Definition View (and Wiki) make this a really great tool for modding Sins.

Enjoy or don't, it's up to you!

 

Eclipse Plugin:

10/6/2011 v1.0 (Link to download section)

  1. Enhancement: Now does reference completion for non-entity files
  2. Enhancement: Now does stackingLimit validation for allowFirstSpawnerToStack
  3. Enhancement: Now "correctly" identifies missing required fields
  4. Enhancement: buffInstantActionType rules modified to reflect which require effectInfo and which don't
  5. Enhancement: Gameplay.constants rules updated to better reflect required fields between Vanilla, Entrenchment and Diplomacy
  6. Enhancement: Explosion validation rule updated to reflect required fields for type of explosion
  7. Enhancement: Finish condition rules updated to reflect required keywords depending on finish condition chosen.
  8. Wiki update to reflect changes in validation rules 

 

Reply #152 Top

Wow! Congrats and thanks a lot

Reply #153 Top

How do I ope Eclipse?  I keep getting the error that says it:

failed to load the Main Class attribute from...

Reply #154 Top

Quoting ImperatorPavel, reply 153
How do I ope Eclipse?  I keep getting the error that says it:

failed to load the Main Class attribute from...

 

More information please. What version of Eclipse? Do you have Java installed? What version of Java? 

Reply #155 Top

Of Eclipse, I have the latest version.

Of java, i have it installed, and I have version 2.0.51

Reply #156 Top

Quoting ImperatorPavel, reply 155
Of Eclipse, I have the latest version.

lol, well there are too many different versions of Eclipse to even know what this means. 

Quoting ImperatorPavel, reply 155
Of java, i have it installed, and I have version 2.0.51

I have no idea what this Java version even is...

 

Here's my suggestion: Download from these two sites. You'll want the Java 6 SDK from oracle. The eclipse is a classic version I use so I know it works.

Quoting ZombiesRus5, reply 144
Installing the Java 6 SE JDK versus just the JRE may fix your issues. 

http://www.oracle.com/technetwork/java/javase/downloads/index.html

 

Quoting ZombiesRus5, reply 137
I uploaded the Win7 64bit version I'm using. Hopefully this will be easier.

http://www.mediafire.com/file/b3b5t8sa45rk29r/eclipse-SDK-3.5.2-win32-x86_64.zip

 

 

 

Reply #157 Top

I think it is time to reinstall all this myself.

Installing the Java 6 SE JDK versus just the JRE may fix your issues. 

I guess the Java SE 7 - JDK is OK? 
 http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html

The instructions state
 "Start eclipse by executing eclipse.exe. If it doesn't start make sure you have Java 1.6 installed."

It's like going to Starbuks.
I just want a regular damn coffee and not have to pick from a mile long menu.  :annoyed: :P

Reply #158 Top

Wonderin' if I should make a set of reference files specifically for your tool that fixes all the errors and includes a change log?

Is it possible to bundle eclipse with the reference files?
Maybe some of the setup already done and a new user just has to check for your plugin version update?

To get rid of most of the pirate sound errors I used replace with to change "UI_TECH_ with "EVENTTECH_ and that got rid of around 50 errors there.

I have not even played to much to see the string errors.
Would it be better to remove the string link or add a string to the string file?

Same with missing brushes? I can always make a new brush.

No clue about the buff errors


invalid value! expected: [Invalid, PrioritizeNewBuffs, PrioritizeOldBuffs]: onReapplyDuplicateType "ReplaceWithNewBuff" BuffEvasiveManeuvers.entity /Diplomacy Reference Files/GameInfo line 3 Entity Problem

 Expected keyword missing: buffStackingLimitType. Found:

buffExclusivityForAIType "ExclusiveForAllPlayers"	BuffEvasiveManeuvers.entity	/Diplomacy Reference Files/GameInfo	line 4	Entity Problem

 and the lines from BuffEvasiveManuvers

onReapplyDuplicateType "ReplaceWithNewBuff"
buffExclusivityForAIType "ExclusiveForAllPlayers"

  :S  any help with those?

EDIT: Ya I am a bit of a dumbass when it comes to these development tools, thank god you made that video.

Reply #159 Top

I... wish this existed two years ago. 

Reply #160 Top

Quoting myfist0, reply 157
It's like going to Starbuks.
I just want a regular damn coffee and not have to pick from a mile long menu. 

Haha, no kidding. It still bugs me with all the coffee references. I switched from C++ to Java because of the opportunities it presented, even though I missed C++ development.

Quoting myfist0, reply 158
Wonderin' if I should make a set of reference files specifically for your tool that fixes all the errors and includes a change log?

Is it possible to bundle eclipse with the reference files?
Maybe some of the setup already done and a new user just has to check for your plugin version update?

I don't see any reason why this wouldn't be possible. It would be similar to how projects are shared over a repository. 

A bundle could be made that's all inclusive java+eclipse+plugin+reference files. The workspace and projects for the reference files should be able to be pre-built and ready for startup.

Quoting myfist0, reply 158
I have not even played to much to see the string errors.
Would it be better to remove the string link or add a string to the string file?

Same with missing brushes? I can always make a new brush.

I tend to leave them as warnings so I know what I need to fill in later. I then have a template for strings I personally use that makes string editing simpler. It's really just up to you and what you want.

Quoting myfist0, reply 158
 any help with those?

These are dead files included in the original game but not used anywhere. They have to exist or checksum won't match.

Quoting purdyaw, reply 159
I... wish this existed two years ago. 

Thanks, I started the tool last April. It originally started as a command line validator that I slowly refactored into an Eclipse plugin. 

Reply #161 Top

Found a couple of "things" that weren't generating in the wiki the way I wanted with the latest changes. Also prompted me to cleanup a couple other items I've been meaning to do. As such, I tweaked my Wiki Syntax Generator and cut a new version of the wiki. It should now allow you to properly navigate from fields with similar names such as modifierType to the proper backend definitions.

Basically so you can get from here

http://code.google.com/p/soaseplugin/wiki/ResearchSubject

to here correctly...

http://code.google.com/p/soaseplugin/wiki/modifierTypeBool

http://code.google.com/p/soaseplugin/wiki/modifierTypeFloat

 

Reply #162 Top

Quoting ZombiesRus5, reply 160
These are dead files included in the original game but not used anywhere. They have to exist or checksum won't match.

I don't get why the checksum would have to match? As soon as I start to m0d the checksum will not match.

If the files are not used by the game and produce errors in the validation, why not just not include them in the reference files?

I am down to a few errors left on my new reference files. Bundling a new SoaSE Eclipse with the reference files in the workspace. Fixed a few not used abilities to at least pass the validation and gave the pirate Siege and Flak descriptions the same that TEC use so I didn't have to add strings. Need a counter description for Pirate Medium

missing reference [English.str]: counterDescriptionStringID "IDS_FRIGATE_PIRATEMEDIUM_COUNTERDESC"
ID "IDS_COUNTERDESC_FRIGATE_LONGRANGE"
Value "Strong vs. light frigates."
ID "IDS_COUNTERDESC_FRIGATE_HEAVY"
Value "Strong vs. antifighter frigates, long range frigates, siege frigates, carrier cruisers and utility cruisers, and capital ships."
ID "IDS_COUNTERDESC_FIGHTER_BOMBER"
Value "Strong vs. heavy cruisers, structures, and capital ships."
All sound references fixed for all versions. 
Particles fixed for all versions.
Meshes fixed for all versions. 
The devs fixed the errors TSOP found for Diplomacy only so since I found most of them,
I am back porting the fixes to Ent and Org 
 
 

 

Reply #163 Top

Quoting myfist0, reply 162
I don't get why the checksum would have to match? As soon as I start to m0d the checksum will not match.

You misunderstood me. I meant They're only included because they are in the core game's GameInfo directory to satisfy the checksum for online/lan play. I have my own custom reference set that removes or fixes several issues I don't like to see as well.

 

Reply #164 Top

Ahhh, gotcha  :P .

Finish getting the errors to 0 tonight and if I put all 3 reference file sets in 1 7z file it is very small as 7z is smart enough to know that if the same file is in the archive 3x then compress only 1 version but extract 3. The 3 sets are 719mb but compressed in 7z it is 19.9 mb  o_O

Reply #165 Top

Get the new Reference files for all 3 sets with 0 errors when validating and optimizations.:P

SoaSE Skydrive Public Folder

Note  Anyone can use this link to view the item without signing in to Windows Live.

 

Reply #166 Top

Doing some testing with the new files and I have a validation problem with AbilityNanoHullRepair.entity for Org Sins

If I rework the file to pass validation I get a DEV error

I am fixing the planet bonuses for all 3 versions then adding in the optimized meshes for fighters, mines and planets.

Reply #167 Top

Quoting myfist0, reply 166
Doing some testing with the new files and I have a validation problem with AbilityNanoHullRepair.entity for Org Sins

If I rework the file to pass validation I get a DEV error

I am fixing the planet bonuses for all 3 versions then adding in the optimized meshes for fighters, mines and planets.

Might be something bonky with Vanilla sins support on my tool. I tend to focus on Entrenchment/Diplomacy and don't know if anyone's actually used it for Vanilla.

Whats the validation error?

 

Reply #168 Top

How is your environment setup? Do you have all three projects in one eclipse instance? Are you setting the project specific properties (Hell, I don't know if I ever documented this!).

Reply #169 Top

 All fixed. :waaaa:

Zombies updated the plugin

Reply #170 Top

So... Not really a tool update, but I did finally generate wiki's for all three versions of the game. 

Wiki Syntax

Vanilla

Entrenchment

Diplomacy

Reply #171 Top

Ya know Zombie, when you make this an executable that will install and set itself up...Yay.

Reply #172 Top

Quoting Sinperium, reply 171
Ya know Zombie, when you make this an executable that will install and set itself up...Yay.

Hmm... don't think so. The install process for my tool only requires a jar file to be copied into the dropins director for Eclipse.

I look at it this way... If it's too complicated to download and install a Java SDK, download and extract Eclipse, download and copy the plugin jar into the Eclipse dropins directory... then... This tool is infinitely more complex than what that user should be using and should probably stick with Notepad++.

 

I wrote this tool first and foremost for my own modding which it works exceptionally well for. I released it for others to use because it's useful. It's been improved and enhanced multiple times in some cases based on input/feedback from others who are using the tool. Except for a few minor tweaks I haven't released yet the plugin is basically complete until Rebellion releases. 

I'm hoping to add some new perspectives next year, but will need to play around with whats possible.

Maybe a Sins Browser that can filter files better.

Maybe a Browser tree that allows easy navigation of entity files starting with the Player as the root.

Maybe figuring out how to get the outline to work with entity files.

Just depends on how much free time presents itself.

+1 Loading…
Reply #173 Top

*bump*

And just to be official in what we talked about on TeamSpeak, an ability, when using a buff that targets more then one unit, or target's one self, the needsToFaceTarget line must be set to false to be error free.  It doesn't crash anything if it's set to true, but sloppy coding is still sloppy coding.

Reply #174 Top

Well I know finally have this up and running and found the right thread... just thought you'd like to know I won't be using notepad anymore... 8O

Also a trivial error to report, should you care to correct it. ;)

You're missing some possible values (and thus giving me some false errors) for "LinkedPlanetUpgradeType". While the vanilla files only use "CivilianModules", "Infrastructure", "ArtifactLevel", and "Invalid", you can actually use any of the PlanetUpgradeTypes from the planet entity files, such as Population, Home etc.

Reply #175 Top

 

So... got my rebellion convert data and started my xml modifications.

aiUseTime:

<value version="Rebellion">OnlyIfOwnTitan</value>
<value version="Rebellion">NoEnemyShipsInGravityWell</value>
<value version="Rebellion">OnlyWhenDisabled</value>

<condition>
<value version="Rebellion">OnlyWhenManyTargetsInRangeOfBank</value>
<structure_reference required="true" name="onlyAutoCastWhenTargetCountExceedsAmount" type="GenericLevel"/>
<field name="onlyAutoCastWhenTargetsInBank" validation="Simple" values="FRONT,BACK,LEFT,RIGHT"/>
</condition>

entityBoolModifier:

<value version="Rebellion">IsInvisible</value>
<value version="Rebellion">NextAbilityAmplified</value>
<value version="Rebellion">IsInNonFriendlyGravityWell</value>
<value version="Rebellion">IsFlagship</value>
<value version="Rebellion">Boarded</value>

buffInstantActionTypes:

<condition>
<value version="Rebellion">GainHullEqualToTarget</value>
<value version="Rebellion">GainShieldEqualToTarget</value>
<value version="Rebellion">GainAntimatterEqualToTarget</value>
<field required="true" name="instantActionTriggerType"/>
</condition>
<condition><value version="Rebellion">ApplyBuffToTargetsAtAdjacentOrbitBodies</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="buffType" validation="Entity" />
<structure_reference required="true" name="targetFilter"/>
<structure_reference required="true" name="maxTargetCount" type="GenericLevel"/>
<structure_reference required="true" name="effectInfo"/>
</condition>
<condition><value version="Rebellion">DoDamagePerLastSpawnerPopulation</value>
<field required="true" name="instantActionTriggerType"/>
<structure_reference required="true" name="damagePerPopulationPoint" type="GenericLevel"/>
<field required="true" name="damageAffectType"/>
<field required="true" name="damageType"/>
<field required="true" name="isDamageShared"/>
</condition>
<condition><value version="Rebellion">DoDamagePerEntityInRadius</value>
<field required="true" name="instantActionTriggerType"/>
<structure_reference required="true" name="damagePerEntity" type="GenericLevel"/>
<field required="true" name="damageAffectType"/>
<field required="true" name="damageType"/>
<field required="true" name="isDamageShared"/>
<structure_reference required="true" name="targetFilter"/>
<structure_reference required="true" name="range" type="GenericLevel"/>
<structure_reference required="true" name="maxTargetCount" type="GenericLevel"/>
</condition>
<condition><value version="Rebellion">ConvertFrigateToResources</value>
<field required="true" name="instantActionTriggerType"/>
<structure_reference required="true" name="percentageOfCost" type="GenericLevel" />
</condition>
<condition><value version="Rebellion">ApplyImpulseInSpawnerDirection</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="impulse" validation="Decimal" />
</condition>
<condition><value version="Rebellion">ApplyBuffToLastSpawnerNoFilterNoRange</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="buffType" validation="Entity" />
</condition>
<condition><value version="Rebellion">TeleportTowardsArbitraryTarget</value>
<field required="true" name="instantActionTriggerType"/>
</condition>
<condition version="Rebellion"><value>CreateFrigateAtArbitraryTarget</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="frigateType" validation="Entity" />
<structure_reference required="true" name="numFrigates" type="GenericLevel"/>
<structure_reference required="true" name="expiryTime" type="GenericLevel"/>
<field required="true" name="spawnFrigateSoundID" validation="Sound"/>
<structure_reference required="true" name="range" type="GenericLevel"/>
</condition>
<condition version="Rebellion"><value>RestoreShieldPointsPerc</value>
<field required="true" name="instantActionTriggerType"/>
<structure_reference required="true" name="shieldPerc" type="GenericLevel"/>
</condition>
<condition version="Rebellion"><value>RestoreHullPointsPerc</value>
<field required="true" name="instantActionTriggerType"/>
<structure_reference required="true" name="hullPerc" type="GenericLevel"/>
</condition>
<condition version="Rebellion"><value>IncreaseOwnerAbilityLevel</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="abilityIndex" validation="Decimal" />
<structure_reference required="true" name="abilityLevel" type="GenericLevel"/>
</condition>
<condition version="Rebellion"><value>AddPopulationToPlanet</value>
<field required="true" name="instantActionTriggerType"/>
<structure_reference required="true" name="populationAdded" type="GenericLevel"/>
</condition>
<condition version="Rebellion"><value>ApplyArbitraryTargettedBuffToSelf</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="buffType" validation="Entity" />
<structure_reference required="true" name="range" type="GenericLevel"/>
<structure_reference required="true" name="effectInfo"/>
</condition>
<condition version="Rebellion"><value>ApplyBuffToTargetsInDirectionalCone</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="buffType" validation="Entity" />
<structure_reference required="true" name="targetFilter"/>
<field required="true" name="weaponBank" validation="Simple" values="FRONT,BACK,LEFT,RIGHT"/>
<structure_reference required="true" name="range" type="GenericLevel"/>
<structure_reference required="true" name="coneAngle" type="GenericLevel"/>
<structure_reference required="true" name="maxTargetCount" type="GenericLevel"/>
<structure_reference required="true" name="effectInfo"/>
</condition>

<condition><value>ChangePlayerIndexToFirstSpawner</value>
<field required="true" name="instantActionTriggerType"/>
<field required="true" name="isPermanent" validation="Boolean" version="Rebellion"/>
<field required="true" name="failIfNotEnoughShipSlots" validation="Boolean" version="Rebellion"/>
<field required="true" name="experiencePercentageToAward" validation="Decimal" version="Rebellion"/>
</condition>

weaponEffectsDef:

<field name="burstDelay" validation="Decimal"/>
<field name="fireDelay" validation="Decimal" version="Rebellion"/>
<field name="muzzleEffectName" validation="Particle"/>

researchPrerequisites:

<structure name="researchPrerequisites">
<iterative_field name="NumResearchPrerequisites">
<structure required="false" name="ResearchPrerequisite">
<field name="Subject" validation="Entity"/>
<field name="Level" validation="Integer"/>
</structure>
</iterative_field>
<field name="RequiredFactionNameID" validation="Any" version="Rebellion"/>
<field name="RequiredCompletedResearchSubjects" validation="Integer" version="Rebellion"/>
</structure>

GenericLevel:

<structure name="GenericLevel">
<field name="Level:0" validation="Decimal"/>
<field name="Level:1" validation="Decimal"/>
<field name="Level:2" validation="Decimal"/>
<field name="Level:3" validation="Decimal" version="Rebellion"/>
</structure>

effectInfo:

<structure name="effectInfo">
<structure_reference name="effectAttachInfo" type="AttachInfo"/>
<field name="smallEffectName" validation="Particle"/>
<field name="mediumEffectName" validation="Particle" version="Rebellion"/>
<field name="largeEffectName" validation="Particle"/>
<field name="soundID" validation="Sound"/>
</structure>

frigateRoleType:

<value version="Rebellion">AbilityCreated</value>
<value version="Rebellion">Corvette</value>

statCountType:

<value version="Rebellion">FrigateCorvette</value>

armorType:

<value version="Rebellion">Titan</value>

AttackType:

<value version="Rebellion">TITAN</value>

buffEntityModifierType:

<value version="Rebellion">ShieldPointRestoration</value>
<value version="Rebellion">PhysicalDamageAsDamageTarget</value>
<value version="Rebellion">HullPointRestoration</value>
<value version="Rebellion">AntimatterRestoration</value>
<value version="Rebellion">PlanetTaxRate</value> 

planetModuleRoleType:

<value version="Rebellion">TITANFACTORY</value>

WeaponClassType, weaponClassForWeaponPassive:

<value version="Rebellion">POINTDEFENSELASER</value>
<value version="Rebellion">FLAK</value>
<value version="Rebellion">RAILGUN</value>
<value version="Rebellion">PULSEWAVE</value>
<value version="Rebellion">PHASECANNON</value>

spawnShipsHyperspaceSpawnType:

<value version="Rebellion">PirateRaid</value>

more following...