[Gelöst] maximale Wachstumsgröße

Ich hab beim Gras mal hinzugefügt, dass es sich so wie die Bäume über "seed" fortpflanzt. Das heißt es soll natürlich auch langsam wachsen.

Dafür steht nun also stretchgrowth= 1 und growth in der Defcore. Aber welchen Wert muss ich bei Growth nehmen? In der Doku steht 1-4 für Bäume… was ist der unterschied?
Außerdem scheint das Gras recht lange weiter zu wachsen (also wird immer größer), sodass bald alles zugewuchert ist und man garnichts mehr sieht :D   wie kann ich die maximale Wachstumsgröße definieren?  Das muss ja iwie gehen, die Bäume wachsen ja auch nicht unendlich weiter… ^^

Naja, bei Bäumen fehlt wahrscheinlich StretchGrowth=1.
Wenn dieser Eintrag fehlt, entspricht SetCon(x); zumindest grafisch einem SetCon(Min(x,100));
Die Zahl wird zwar im Objekt gespeichert, sodass GetCon() wieder den Wert zurückgibt, aber das Objekt selbst wird nie größer als 100%

Danke für deinen Beitrag =)
schau mal ins DefCore von einem Baum rein, da steht auch StretchGrowth drin =/
Dass es größer als 100% wird, sollte ja von Oversize geregelt werden, aber das steht nicht in meinem Gras DefCore drin…

edit, defcore sieht so aus, stretchgrowth nehm ich jetzt mal raus und gucke was passiert.

[DefCore]
id=GRA1
Name=Grass
Version=4,9,5
Category=1
MaxUserSelect=10
Width=40
Height=28
Offset=-20,-18
Value=5
Mass=5
Components=WOOD=1;
Vertices=1
VertexX=0
VertexY=10
ContactIncinerate=5
BlastIncinerate=1
//StretchGrowth=1
Rotate=1
TopFace=80,0,40,30
TimerCall=Seed
Timer=100
Picture=80,0,40,30
Growth=1

Lass StretchGrowth=1 drinnen und schreib dazu noch Oversize=0 rein

danke für die Idee, klappt aber leider nicht =/

ich teste nachher nochmal ein wenig durch, vllt verhält sich das gras ja unterschiedlich…
Das Gras welches von Beginn an platziert wird, wird ja mit Funktion:
private func CreateGrass(x, y)
{
  return(CreateObject(GRA1, x, y, -1));
}
aus dem Enviremten Gras erstellt.  Das Gras welches dann nachwächst, wird genauso wie bei den Bäumen mit PlaceVegetation platziert.  ICh schau nachher mal, ob es da einen unterschied beim maximalen wachstumsstadium gibt (das erstere Gras wächst aufjedenfall etwas weiter, aber ich glaube auch nicht unendlich. Aber es wird größer, als es zu anfang über create object erstellt wird. Die Größe die es nach dem ertellen über createobject hat, soll aber die maximal größe sein)

edit: auch das nachwachsende Gras wird zu groß.

Ach wenn wir schon beim Gras sind:

Wenn man sich die Grafik zum Gras mal anschaut, sieht man ,dass es dort drei verschiedene Grafiken für das Gras gibt.
Standardmäßig wird aber immer nur die erste genutzt.   Nun habe ich das Gras aus dem Remake Ruf der Wipfe, welches sich ab und zu auch im Vordergrund platziert. Dies geschieht über den DefCore Eintrag "TopFace". Dort habe ich die rechte Grafik mit den Blümchen ausgewählt. Daraus folgt nun, dass immer wenn ein Gras im Vordergrund gesetzt wird, dieses die Blümchen hat.
Das ist soweit schonmal ganz schön, aber auch irgendwie doof, wenn nur die Blümchen immer im vordergrund sind und es da keine Abwechslung gibt.
Zusätzlich glaube ich gerade, dass nur Gras mit Blümchen neu geflanzt wird, wenn Seed aufgerufen wird… Zumindest wächst grad nur Blümchengras nach… keine Ahnung warum… Hat "Picture" auch auswirkungen darauf? Dort habe ich ebenfalls die Blümchen ausgewählt.

Also wie kann ich es machen, dass alle drei Grafiken einfach zufällig verwendet werden? Außer Picture und TopFace habe ich nichts gefunden, wie ich den Grafik ausschnitt wechseln kann, wobei ich dachte, dass Picture nur für das Bild im Menü wichtig ist, aber nicht im spiel.

>Standardmäßig wird aber immer nur die erste genutzt.


[Nein, das stimmt nicht.](https://github.com/clonkspot/cr-content/blob/master/Objects.c4d/Vegetation.c4d/Grass.c4d/Script.c#L12-L15)

Ach, ich idiot! Oversize war der Eintrag. Warum hab ich oben StretchGrowth geschrieben?

ah okay, was heißt denn SetPhase, bzw. wo kann ich das einstellen?

Sehe gerade, dass man in der ActMap auch Facet einstellen kann, also welche Grafik für eine action verwendet wird, darüber könnte man es sonst auch regeln… aber normales Gras hat dort nur eine Action… Also wo steht das mit der Phase?

Ein Hauptfeature der Aktionen sind Animationen. Der Eintrag Facet gibt die Koordinaten des ersten Animationsframes an, der Eintrag Length die Anzahl der Frames, die in der Grafikdatei einfach rechts vom ersten Frame sind. Mit SetPhase kann zu einem bestimmten Animationsframe gesprungen werden.

> der Eintrag Length die Anzahl der Frames, die in der Grafikdatei einfach rechts vom ersten Frame sind.


mit "rechts vom Frame" meinst du eine Zeitlinie von links nach rechts und rechts ist in die zukunft gerichtet? Oder wie kann etwas rechts von Zeit sein?

Die actmap vom Standardgras sieht so aus:

[Action]
Name=Grass
Directions=2
FlipDir=1
Length=3
Delay=0
Facet=0,0,40,30
FacetBase=0
NextAction=Grass

Wie genau wirkt sich da nun SetPhase aus? Wo ist in der Actmap nun definiert, welche Grafik in welcher Phase verwendet wird?

Könntest du mir bitte genau auf das Standardgras und seine drei Grafiken bezogen sagen, wie das SetPhase funktioniert und wo hier beim Gras das nun eingestellt wird? Bitte so ausführlich wie du kannst.( halt aufs Gras beschränkt). Wo wird gesagt, welche Grafik Phase 0 welche Grafik Phase 1 und Phase 2 hat (wenn da SetPhase(Random(2)) steht, dann gibt es Phase 0 bis 2, oder? Also insg. 3 stück?

Ach und damit du weißt wovon ich ausgehe: Ich hab beim Standardgras bisher noch nie die Blumen gesehen. Weshalb ich davon ausgehe, dass es nirgends definiert ist. Falls das zutrifft, schreib mir bitte, wie ich es definiere :)

Ich meine rechts in der Grafikdatei. Blumengras ist einfach nur sehr selten (letzte oben verlinkte Zeile). Eine ausführlichere Antwort kann ich dir morgen im Laufe des Tages irgendwann schreiben.

Edit: Hab dir mal was gemalt. Die ActMap gibt mit dem Facet-Eintrag nur die Koordinaten des ersten Animationsframes in der Grafikdatei an. Der Eintrag Length gibt dann an, wie viele weitere Frames rechts davon in der Datei sind. Die Engine nimmt da also immer die Koordinaten aus Facet und addiert Phase * Breite (dritter Eintrag) zum X-Wert (erster Eintrag) hinzu, um die zusaetzlichen Grafikframes zu finden. Phase 0 ist also ganz links, dann kommt Phase 1 und (im Grasbeispiel) als letztes Phase 2.

Um eine Animation zu bekommen, definieren Aktionen auch eine Verzoegerung (Eintrag Delay), sodass die Engine die Phasen dann automatisch abspielt. Das hat es im Grasbeispiel nicht (Delay=0), es kann nur mit SetPhase zwischen den Animationsframes gewechselt werden.

Du musst also konkret um eine andere Grafik auszuwaehlen, nur irgendwo SetPhase mit 0, 1 oder 2 aufrufen - [wie es eben bereits in Initialize() geschieht](https://github.com/clonkspot/cr-content/blob/master/Objects.c4d/Vegetation.c4d/Grass.c4d/Script.c#L14-L15). Dabei musst du beachten, dass Random(2) nur die Werte 0 und 1 zurueckgibt. Damit Phase 2 (Bluemchengras!) ausgewaehlt wird, muss Random(20), also eine Zahl zwischen 0 und 19, 0 ergeben. Das passiert unter Annahme einer Gleichverteilung nur mit der Wahrscheinlichkeit 1/20 und ist deshalb einfach nicht besonder haeufig.

Danke dir für die Erklärung :slight_smile:

Ich hab den Begriff "Frame" erst hier mit Clonk gelernt, dabei erstmal nur in Verbindung mit der Zeit als "Timeframe" und hatte das irgendwie so verknüpft, dass Frame nur eine Abkürzung für Timeframe ist. Deswegen wusste ich nicht, was du du meinst mit "rechts vom Timeframe" :smiley:
Und auch Random sorgt immer wieder für Verwirrung :smiley: ich glaub ich hatte es schonmal "gelernt", dass Random(2) 0 oder 1 ist, aber dadurch dass da eine 2 in der Klammer steht, kam ich dann wohl iwie wieder darauf, dass es 0, 1 oder 2 sein könnte.
Danke. =)

Dann fehlt jetzt nur noch die Wachstumsgröße :D  Wobei dazu ja schon ziemlich viel gesagt wurde und es eigentlich funktionieren muss… . hm… ich probier da die tage nochmal ein wenig rum, vllt find ich die Ursache…

Edit:
es ist doch noch nicht ganz geklärt… Habe eben noch einen Punkt entdeckt, warum ich dir wegen den Blümchen nicht glauben wollte:
Ich verwende das Gras aus Ruf der Wipfe Remake. Dieses hat noch eine zusätzliche Action mit FacetTopFace:
[Action]
Name=GrassTF
Directions=2
FlipDir=1
Length=3
Delay=0
Facet=0,0,40,30
FacetBase=0
FacetTopFace=1
NextAction=GrassTF

es includet GRAS aber hat eine eigene Initialize() in der unter anderem steht:
  // Zufällige Form
  SetAction("Grass");
  if(Random(2)) SetAction("GrassTF");
  SetPhase(1+Random(2));
  if (!Random(20)) SetPhase(3);

Wieso steht hier aufeinmal SetPhase(3) , wenn es doch nur bis 2 geht?  Und wenn es bei 0 anfängt, ergibt das 1+ in der setphase davor doch keinen Sinn?
Wie wird die Phase auf die verschiedenen Actionen aufgeteilt? Also wenn ich da "SetPhase(2)" schreibe, woher weiß das Spiel dann, auf welche Action sich das bezieht?
Ich habe jetzt einfach mal alles weggenommen und nur stehen lassen:
  SetAction("Grass");
  SetPhase(2);

Wenn ich das bei dem normalen Original Gras mache, dann ist tatsächlich alles voller Blümchen. Aber wenn ich das beim RdW Gras mache, dann scheint es garnichts zu bewirken. Keine Blümchen zu sehen. 

Zusätzlich verwundert mich, dass, obwohl ich damit das "SetAction("GrasTF") " entfernt habe, wird immernoch etwas Gras in den Vordergrund gestellt. Das hört erst auf, wenn ich den Eintrag TopFace aus der DefCore entferne. Also entweder heißt das, dass meine Änderungen im RdW-Gras-skript wirkungslos sind, oder es reicht schon im DefCore TopFace definiert zu haben, wodurch dann etwas Gras im Vordergrund steht. Aber das ergibt keinen Sinn… deswegen scheint es wohl eher so zu sein, als seien meine Änderungen wirkungslos…  
Ich hab deswegen auch schon neue Kopienpacks erstellt, wo dann wirklich nur RdW und das Objectpack drin sind. Ich hab das includet weggenommen, ich hab die system datei weggenommen, die GRAS in GRA1 (RdW Gras) mit chengeDef verwandelt.  ICh hab den Editor y mal aktualisiert, es mit SetPhase1 oder 3 versucht, … aber ich konnte nicht rausfinden, warum meine Änderungen scheinbar wirkungslos sind.

Hab mich jetzt mal wieder weiter mit dem Grasproblem beschäftigt und nach knapp ner stunde vom Ausprobieren von allen möglichen Variationen des Scripts und der actmap nun auch mal die DefCore von Standardgras zum RdW Gras verglichen und verändert.
Dabei konnte ich jetzt rausfinden, warum das "SetPhase" beim RdW Gras nicht funktioniert. In der DefCore fehlt der Eintrag
"IncompleteActivity=1"
Sobald ich es hinzufüge, sind bei SetPhase(2) sofort alle Blümchen da, was vorher nicht geklappt hat.
In der Dokumentation zur DefCore steht leider nur:
IncompleteActivity   Integer   0 oder 1. Wert 1 für Lebewesen, die auch im Wachstum aktiv sein können.
Leider lässt sich daraus für mich überhaupt nicht schließen, warum und was das mit der Phase zu tun hat…

Keine Ahnung, warum der Ersteller des Packs den Eintrag entfernt hat und trotzdem SetPhase und sogar SetPhase(3) verwendet, obwohl es nur 3 Teilgrafiken gibt.
Vllt ändert sich die Phase des Grases irgendwie während des Spiels von selbst? Das wäre jetzt meine einzige Erklärung, wonach müsste ich da Ausschau halten, um das herauszufinden, bzw. umzusetzen?
Naja…nicht so wichtig,  ein Rätsel mehr gelöst, nun kommt das Wachstum dran :slight_smile:

edit: hmm ich glaub das mit dem wachstum lass ich jetzt einfach so. Wenn nicht so viel Gras im Vordergrund ist, was ich jetzt ja nun aktiv bestimmen kann, dann ist das große Gras nicht so nervig ;)  Außerdem hab ich nun ne Sense eingebaut, womit man nerviges Gras stutzen kann :smiley:

>wonach müsste ich da Ausschau halten, um das herauszufinden, bzw. umzusetzen?


Sourcecode und Volltextsuche. Soweit ich das sehe, sorgt IncompleteActivity dafür, dass Dinge auch vor ihrer Fertigstellung bestimmte Funktionen haben. Z.B. Collection-Masks (Erz in einen unvollständigen Hochofen zu werfen wäre ja schon komisch), als Container ordentlich zu funktionieren (unvollständige Gebäude schmeißen ja gerne das ganze Inventar raus, wie man aus CoFuT weiß...) oder eben Actions (und wenn keine Action, dann auch keine Phasen). Man kann mit dem Forschungslabor o.ä. ganz gut sehen, was passiert, wenn man IncompleteActivity=1 setzt und mit SetAction z.B. "Research" als Action setzt (wobei ich nicht erwartet hätte, dass es so merkwürdig aussieht).

das Wachstumsproblem habe ich jetzt so gelöst, wie ich es von anfang an hätte machen sollen.
Ich hab einfach die grasgrafik verkleinert.

Denn das Gras wurde nicht wie von mir gedacht "übergroß", sondern die Grasgrafik war einfach so groß. Nur sieht man das im Spiel normalerweise nicht, das das Gras nicht wächst und im Initialize immer auf eine angenehme Größe gestutzt wird. Wächst es nun aber, wächst es bis zur tatsächlichen Größe, was größer als ein Clonk ist.