Advanced Goo Ball Modding

24 replies [Last post]
Joined: 01/19/2009

Hi David and everyone else. Wink
Has anyone an idea how to make a goo ball that isn't gooey?
meaning it should have solid strands, not flexible ones,
and therefor don't wobble or dance around, but just break when too much force is applied.
i played around with a bunch of values for towermass, maxlen1 & 2, springconstmin & max, dampfac, dampening, maxforce and so on, but never got the result i wanted.

i think mostly because it's just trial and error... i have no clue how most of those elements relate to each other or what range of values is considered a good choice on each of them. (hint: "0" on springconstmin and max is not Wink )

edit: strand thickness... (on Bone, and at least one bomb) could that be part of the secret?

| Fly Her to the Moon (with Antigravity Goo) | Infinitive Windows Freezer (unlimited Goo playground) |

Joined: 03/31/2009

You should look at the Bomb goo in editor. Smile

My Gooish profile | Videos on YouTube | My WOG Mods

Joined: 03/22/2009

I think in the end trial and error will be our only option. The strand type setting defines 'spring' and 'rope', this covers all ball types. Bomb & Bone are both 'spring' strand types. Are these the only strand types, I guess so.
I am working on a database that collates the settings for all the ball types. Should help with experiments changing settings. If something interesting occurs will have a useful reference for what and how. Will let you know how I get on.

Joined: 01/19/2009

yeah that database will be useful Smile
i'd say spring and rope are the only strand-types, yep.
could that mean non-flexible strands aren't possible at all?
whatever.^^
more trial and error with more bomb like values for now...

| Fly Her to the Moon (with Antigravity Goo) | Infinitive Windows Freezer (unlimited Goo playground) |

Joined: 03/22/2009

XDBoy
Also think we need to know what balls go with which level, to make sense of the data parameters.
Have made a start on putting together a table of ball types, totals and if sleeper, for each level.
Then the more obscure ones which might have useful properties can be tracked down with ease.
eg Type 'UtilNoAttachUnwalkable' as found in Beauty School.

Joined: 01/19/2009

that's a good advice in general, but your example goos, UtilNoAttachUnwalkable, aren't that special, since they are supported by a couple of Anchors in Beauty School. Or was that your point?

| Fly Her to the Moon (with Antigravity Goo) | Infinitive Windows Freezer (unlimited Goo playground) |

Joined: 03/22/2009

Not special, just interesting variations that may be worth exploring, that was my point.
So far we have 60+ ball types, including GooFan levels. Some of the names may not be so familiar as common or fuse. So this list shows where to see them in action and how changing parameters might effect them. It was doing the database when I realized a global snapshot of the level might be useful.

As an example - level
ImmigrationNaturalizationUnit
AnchorSticky : 1
balloon : 8
common : 5
GooProduct : 52
Ivy : 8
UtilAttachUnwalkable : 27

The type 'UtilAttachUnwalkable' is smaller than a common, has towermass equal to balloon and a parameter setting 'invulnerable' set true.

Joined: 11/04/2008

Spring and rope are indeed the only strand types:

..\wog-extracted\res\balls\balloon\balls.xml: node "strand", type="rope"
..\wog-extracted\res\balls\BombMini\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\BombShaft\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\BombSticky\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\Bone\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\common\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\common_albino\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\common_black\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\Distant\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\Drained\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\DrainedIsh\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\EvilEye\balls.xml: node "strand", type="rope"
..\wog-extracted\res\balls\Fish\balls.xml: node "strand", type="rope"
..\wog-extracted\res\balls\Fuse\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\GooProduct\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\Ivy\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\Pilot\balls.xml: node "strand", type="rope"
..\wog-extracted\res\balls\Pixel\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\PixelProduct\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\Pokey\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\SimCommon\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\UtilAttachUnwalkable\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\UtilAttachWalkable\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\UtilChapter2\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\UtilGooGlobberMom\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\UtilGooGlobberMomQuiet\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\UtilNoAttachUnwalkable\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\UtilNoAttachWalkableSmall\balls.xml: node "strand", type="spring"
..\wog-extracted\res\balls\water\balls.xml: node "strand", type="rope"
29 occurrences found

I look forward to seeing what Jamerz comes up with. I've been meaning to add a section to this site with the various entities (balls especially) decrypted and cross-referenced but haven't had time and don't think I will in the near future.

Joined: 11/04/2008

Here's an image containing renderings of all the ball types I have installed at the moment, to help match them if you don't know their names:

http://goofans.com/sites/default/images/ball-palette.jpg

Joined: 03/22/2009

David - wonderful image, now I am thinking should my list include them? At present have most levels done as a text only list. Just a few fan sites to finish. Can I email you the list (as only text not big). Then you can advise if you think it could be improved. It makes me want to go and have another look at the level when I see the balls available. Will take a week or so to complete the detailed parameter database.
As I have said before great site some really good work being done here. The Goo Tool is a gem.

Joined: 01/19/2009

thanks for that. good to see another image of the level editor. with some very familiar goos... Laughing out loud

| Fly Her to the Moon (with Antigravity Goo) | Infinitive Windows Freezer (unlimited Goo playground) |

Joined: 11/04/2008

Sure, e-mail away. I can also easily get this to output individual PNGs for each ball type.

Joined: 11/04/2008

I've now linked balls to levels, and levels to balls. For the levels, it's on the "Developers" tab.

Example level: http://goofans.com/world-of-goo/levels/chapter-3-cog-machine/burning-man

Example ball: http://goofans.com/world-of-goo/balls/fuse

There's more info we can grok out of the XML files about the balls, and I'm happy to add the decoded XML to the balls pages, but I'm more interested in the actual effects of the various parameters. Please share your knowledge by editing this page! http://goofans.com/developers/game-file-formats/balls

Joined: 01/19/2009

cool. Smile i thought of a wiki-like approach to gather more info, too.
But i can't edit the balls page, just leave comments.

| Fly Her to the Moon (with Antigravity Goo) | Infinitive Windows Freezer (unlimited Goo playground) |

Joined: 11/04/2008

You can now.
Anyone who wants to edit any page needs only to ask. It's just restricted because I want to avoid spam.

Joined: 01/19/2009

thanks. done. Wink
will share more info later.

| Fly Her to the Moon (with Antigravity Goo) | Infinitive Windows Freezer (unlimited Goo playground) |

Joined: 11/04/2008

This document (from wog20061128-rev400) may help documenting some fields, though note that many things changed or were later removed:

documentation for the ball file format
======================================
 
 
<BALL> 
used to define physical and visual properties of a single ball type
 
scope:
	appears in blobal scope only
 
attributes: (all attributes are required)
	name - a unique name used to identify this ball
	size - the diameter of the ball
	mass - the mass of this ball (used by physics simulation)
	strands - the number of strands this ball can create when attached to
		a structure
	attachdist - the distance at which this ball can start creating strands
		to attach to a structure.  this is different from the max strand 
		length, and should be greater than that value.  any ball further
		away from this distance will fall to the ground when dropped.
	speed - the speed at which a ball of this type can move
	speedvariance - the amount actual speed is allowed to vary (on a per
		ball basis) from the speed specified above
	intelligence - the probability of a ball of this type taking the best
		path towards the exit at any intersection point along the way
	shadow - the image ID to use for a shadow for this ball
 
<SHADOW>
used to define a shadow for a given ball
 
scope:
	BALL - there must be one and only one SHADOW within each BALL scope
 
attributes: (all attributes are required)
	image - the resource manifest image id of the image to use for a shadow
	x - the x offset of the shadow from the center of the ball (in world coordinates)
	y - the y offset of the shadow from the center of the ball (in world coordinates)
 
<STRAND> 
used to define the properties and appearance of a strand created by this kind
of ball
 
scope:
	BALL - there must be one and only one STRAND within each BALL scope
 
attributes: (all attributes are required)
	springconst - the spring constant of the strands created by attaching 
		this type of ball to a structure
	dampfac - the dampening factor for the strands created for this ball type
	maxlen1 (optional) - the maximum length of strand this goo ball can create 
		if its attachment results in the creation of only a single strand
		(i.e. directly connecting two other balls).  if neither maxlen1 nor
		maxforce1 are specified the ball will not be allowed to create a
		single strand.  if only one is specified, the value of the other will
		be the same as the value specified for the two+ strand situation.
	maxlen2 - the maximum length of strand this goo ball can create if its
		attachment results in the creation of two strands (i.e. adding
		a node that connects to two existing nodes)
	maxforce1 (optional) - the maximum force a strand made of this material can
		sustain	before breaking when it was added as a single strand. (see 
		maxlen1 for more info)
	maxforce2 - the maximum force a strand made of this material can 
		sustain	before breaking when it was added as a one of two 
		strands (as in the case of maxlen2)
	image - the resource manifest ID for the image to use for strands 
		created by this ball
 
<PART>
represents a single layer of a ball in a given state
 
scope:
	BALL. there must be at least one PART in every BALL scope
 
attributes: (all attributes are required)
	name - a string identifier for this part.  giving parts the same
		name in multiple states will allow the program to access them
		uniformly regarless of the state.
	x - the x offset of this part from the ball's center.  this can either
		be specified as a single number or a comma separated pair.  if a 
		comma separated pair is provided the x offset value for each part
		will be randomly selected in the range provided (e.g. "2,10" means
		the x offset will be in the range [2,10])
	y - same as x, but for the y offset of the part
	image - the resource manifest ID, or a comma separted list of IDs one
		of which will be chosen at random.
 
<SINVARIANCE>
a wrapper for one or more related sinusoidal animations.  this wrapper
allows us to create per-instance variations in the animations while still
keeping each instance of the group synchronized.  for each instance of the
group contained in the SINVARIANCE scope, a random variance will be chosen 
and applied to all animations.
 
scope:
	BALL.  the SINVARIANCE tag is optional.
 
attributes:
	freq - the random amount by which the frequency of a ANIMSIN is
		allowed to vary
	amp - the random amount by which the amplitude of a ANIMSIN is
		allowed to vary
	shift - the random amount by which the phase shift of a ANIMSIN 
		is allowed to vary
 
<SINANIM>
an animation tag representing a sinusoidal animation
 
scope:
	ANIMSINGROUP, BALL
 
attributes: (all attributes are required)
	type - determines the type of sinusoidal animation to use.  values are:
		"scale" - a scaling animation, either along either axis 
		"translate" - a translation animation, either along either axis
	part - the name of the part or parts to which this animation should be
		applied.  if a comma separated list of names is provided, this 
		animation will be applied to all parts listed
	state - the state in which to apply this animation.  if a comma 
		separated list of states is provided the animation will be applied
		in each of the specified states. value are:
		"walking"
		"falling"
		"dragging"
		"attached"
		"detaching"
	axis - determines the orientation of the animation.  values are:
		"x" - animate along the x axis
		"y" - animate along the y axis
	frequency - the frequency of the sin wave
	amp - the amplitude of the sin wave.  for example, an amplitude of 0.2
		in a scaling animation means that the part will have it's size 
		oscillate between 120% and 80% of the original size.  an amplitude of
		5 in a translate animation means a part's position will vary by 5
		pixels in either direction.
	shift - the phase shift for this animation.  this should be in the range
		[0,1] where a shift of 0.5 essentially turns this into a cos function
 
<SWAP>
specifies an alternate image to swap out for this part
 
scope:
	ANIMATIONS
 
attributes: (all attributes are required)
	image - the resource manifest image id for the image to swap out for this
		part.  note that it is expected that the image has the same dimensions
		(both in pixels and in rows/columns) as the image it is replacing.
	freq - how often this swap takes place.  the pair of numbers represents the
		minimum and maximum interval between swaps, in milliseconds.  a random 
		number is chosen in the given range.
	duration - how long the swap lasts before the original image returns.
		again, a min/max range is specified in millisedonds.

Joined: 01/13/2009

about the level editor that is pictured david, how can you access it?

Joined: 11/04/2008

In the WoG development builds? You can't, they never made it. They made their levels in Photoshop and exported them.

Joined: 01/19/2009

@david I think he's talking about your level editor. This one: http://goofans.com/sites/default/images/ball-palette.jpg Wink
@Grant, david hasn't finished the level editor yet, it's release is still TBA.

| Fly Her to the Moon (with Antigravity Goo) | Infinitive Windows Freezer (unlimited Goo playground) |

Joined: 04/10/2009

XDboy if the strand can be solid then levels with solid strands will bee VERY EASY or INCOMPLEETABLE cuz most of the levels [including fan created] you got to build towers and bridges or carry beauty [or ugly] to the gear as you know beauties[or uglies] heavy, and when carry them the whole structure just gona break [the same with pokeys] the same with long bridges, high towers.if you don't need much to build then that level won't be very interesting and it would bee easy.

Crazeh man!

Joined: 01/02/2009

i do not understand waht you are saying. are you saying that if there were goo tpes that never moved it would bereally easy, or that if there was a type of goo that did not flex it would be really easy?

98% of the teen population believes those "98% of ... if you are one of the 2% who don't copy this into your sig" sigs. copy and paste this into your sig if you are one of the 2% who don't believe them.
-madaco

Joined: 04/10/2009

no,i say that structure will break from the weigth of the structure.

Crazeh man!

Joined: 09/01/2009

It would depend on the size of the structure, right? If the proposed solid Goo Balls were misued, the levels created would be a little too easy. I think that if used correctly, this would be a great idea, though.

Joined: 03/31/2009

Joris, I must ask you politely mot to spam old forums. I know you are young and have some ideas... but why would the structure break from its own weight? You can program anything if the code lets you to, own weight-0.01, strands-solid... and maybe the level need only few strands to hold something, not for whole level

My Gooish profile | Videos on YouTube | My WOG Mods