Forum

Thema: Kleine Tipps [Mapping]  (Gelesen 22216 mal)

Firefly

  • Gunnery Sergeant
  • **
  • Beiträge: 467
    • Profil anzeigen
Re: Kleine Tipps von Mappern für Mapper
« Antwort #15 am: 15. April 2008 - 16:19:11 »
Einführung SCAR Code anhand angreifender Infanteriewellen

Vorweg: Das Ganze ist nicht wirklich sehr kompliziert. Ein paar wenige, grundlegende Kenntnisse in Skript Sprache sind allerdings sehr von Vorteil. Man sollte zumindest etwas verstehen, was eine Codezeile macht, wenn man sie liest.

Das SCAR Skript selbst muss in eine Datei gepackt werden, die wie folgt benannt werden muss: Mapname.scar. Heißt eure Mapdatei also blup.sgb, müsst ihr eure SCAR Datei blup.scar nennen. Am einfachsten kommt ihr zu einer .scar Datei in dem ihr die zu jeder Map automatisch erstellte Mapname_ID.scar kopiert, umbenennt und den kompletten Inhalt löscht. Ändert aber nie etwas an der Mapname_ID.scar! Diese Datei muss immer so bleiben, wie sie ist! In eure neu erstellte Mapname.scar könnt ihr dann den ganzen SCAR Code eintragen.

Bestimmte „Ereignisse“ werden im SCAR Code praktischerweiße in so genannte Funktionen gepackt. Sprich, man erstellt eine Funktion, in welcher man bestimmte Infanterie Einheiten spawnen lässt. Diese Funktion kann dann an verschiedenen stellen im Skript aufgerufen werden, und das in der Funktion geskriptete wird dann ausgeführt.

Ein zusätzliches Problem, auf welches man stoßen wird: Relic einige Vanilla COH SCAR Commands bei der Einführung von OF geändert. Das ist auch der Grund, warum einige Mods nach dem Release von OF nicht mehr richtig laufen wollten. So musste für einige Commands erst eine „Umgehungs-Funktion“ erstellt werden. Dazu aber im Text mehr.

Beginnen sollte man jedes Skript wie folgend:

import("ScarUtil.scar")

-------------------------------------------------

function OnGameSetup()

  player1 = World_GetPlayerAt(1)
  player2 = World_GetPlayerAt(2)
  player3 = World_GetPlayerAt(3)
  player4 = World_GetPlayerAt(4)

  Rule_AddOneShot(hidehq, 1)

   Rule_AddInterval(squadspawner, 40)

end


Die erste import Zeile ist wichtig, aber nicht nötig. Sie stellt aber eine Große Vereinfachung dar. Dazu aber später mehr.

Darauf folgt die erste Funktion. OnGameSetup. Hier können Dinge geregelt werden, die noch vor Spielstart, also im Mapauswahlbildschirm, eingestellt/geregelt/geprüft werden sollen. Es ist aber auch möglich Funktionen aufzurufen, welche dann später im Spiel ausgeführt werden sollen.

Beginnen sollte man hier wie folgt. Die Zeilen player1 bis player4 werden wieder zur Vereinfachung späterer Funktionen verwendet. Es wird einfach nur dem Slot 1 vom Mapauswahlmenü der String player1 zugeordnet. Will man also später im Skript irgendetwas mit dem Spieler in Slot 1 machen, kann man diesen nun immer player1 nennen.

Rule_AddOneShot (Name der Funktion, Zeitpunkt der Auslösung) ist ein einmaliger Aufruf einer Funktion. Der Name der Funktion wird als erstes in der Klammer dahinter angegeben. Im obigen Beispiel wird also ein Funktion namens „hidehq“ aufgerufen. Die Zahl dahinter gibt an, nach wie vielen Sekunden diese Funktion aufgerufen werden soll. Im Beispiel eben nach einer Sekunde.

Rule_AddInterval(Name der Funktion, Intervall der Auslösung)

Hierbei wird wieder eine Funktion aufgerufen. Der Unterschied zur vorherigen Art des Aufrufens ist, dass die Funktion hierbei nicht nur einmal aufgerufen wird, sondern im gegebenen Intervall immer wieder aufgerufen wird. Im obigen Beispiel wird also die Funktion „squadspawner“ alle 40 Sekunden aufgerufen.

Die bereits erwähnte Funktion squadspawner wird in diesem Beispiel dazu verwendet die gewünschten Einheiten auf das Feld zu bringen. Wie ihr diese Funktion in euren Skripten nennt, bleibt aber wie bei allen Funktionen euch überlassen. Ihr könnt sie auch „Blumenkohl“ nennen. Namen die aber mehr oder weniger wiedergeben, was eine Funktion macht, bieten sich der Übersichtlichkeit halber aber an. Hier nun ein Beispiel:


function squadspawner()

AI_Enable(player3, false)

sg_axis_assault2 = SGroup_CreateIfNotFound("sg_axis_assault2")
Util_CreateSquadsAtMarker(player3, sg_axis_assault2, SBP.AXIS.PIONEER, marker2, 2)
Cmd_InstantUpgrade(sg_axis_assault2, UPG.AXIS.PIONEER_FLAMETHROWER, 1)
Cmd_MoveToMarker(sg_axis_assault2, marker1)

end


Funktionen beginnt man immer mit deren Benennung, das Wort function vorangestellt und abgeschlossen mit den beiden (). In diese werden bei bestimmten Funktionen noch Parameter mit eingetragen. Abgeschlossen wird eine Funktion immer mit einem „end“.

In der ersten Zeile wird die KI auf Slot 3 abgeschaltet. Dies ist notwendig, damit die Einheiten später an den angegebenen Punkt laufen. Lässt man die KI aktiviert gibt es probleme und die Einheiten bewegen sich nicht wie im Skript angegeben! Somit müssen alle KI's, welche einen bestimmten Weg ablaufen oder sich zu einem Punkt begeben sollen dissabled werden.

Die nächste Zeile der Funktion erstellt eine SGroup, also eine Squad Gruppe. Der Name vor dem = stellt dabei den Namen der Gruppe dar. Ebenso der Name am Ende in den Klammern und Anführungszeichen. Diesen Namen könnt ihr auch völlig frei und nach eurem Belieben vergeben.

Die zweite Zeile erzeugt für den Spieler in Slot 3, in die darüber erstellte Sgroup sg_axis_assault2, zwei Achsen Pionier Squads an der Stelle des SCAR Markers mit Namen „marker2“. Die 2 am Ende der Zeile gibt dabei die Anzahl der erstellten Squads an. Hier im beispiel sind es eben zwei Squads.
Der SCAR Marker muss natürlich vorher im Editor platziert und entsprechend benannt werden. Dies passiert über das „Fähnchen Symbol“ in der Tools leiste, zu finden direkt links neben dem Symbol für den Heightmap Editor. Nehmt dazu einfach einen Basic Marker und benennt ihn entsprechend.

Die dritte Zeile gibt den gerade erzeugten Pios noch Flammenwerfer in die Hand, verleiht also eine, Squad oder einer Gruppe ein Upgrade. Hierbei wird in der Klammer zuerst die Gruppe, in der sich die Pios befinden, genannt, gefolgt vom Namen des  Upgrades, welches angewandt wird. Zuletzt steht die Anzahl der ausgeteilten Flammenwerfer, bzw. der Upgrades. So können z.b. auch Rifles mit Bars upgegradet werden. Da hierbei dann mehr als eine Bar möglich ist, wird die Anzahl immer mit angegeben.

Die vierte und letzte Zeile schickt die Gruppe nun zu einem bestimmten Punkt. Im Beispiel zum Marker mit den Namen „marker1“. Dieser muss natürlich wieder im Worldbuilder erzeugt, platziert und benannt werden.
Damit diese Bewegung aber ohne Probleme möglich ist, muss man sich einer kleinen „Umgehungs-Funktion“ bedienen. Diese sieht wie folgt aus:


function Cmd_MoveToMarker(sg_axis_assault2, marker1)
Cmd_Move(sg_axis_assault2, marker1, false)
end


für einheiten, die einfach nur stur zu einem punkt laufen sollen.


function Cmd_MoveToMarker(sg_axis_assault2, marker1)
Cmd_AttackMove(sg_axis_assault2, marker1, false)
end


für einheiten, die auf ihrem weg alles angreifen, was feindlich ist. führt sozusagen eine angriffsbewegung aus.

Hierbei wird praktisch ein alter VCOH Command zu einem OF kompatiblen Command umgebaut. Seit Of gibt es den Cmd_MoveToMarker Command nicht mehr. Um also dennoch Truppen zu einem Bestimmten Marker schicken zu können, wandelt man mittels dieser Funktion den Command  Cmd_Move zum Command  Cmd_MoveToMarker um und schon kann man Truppen wieder zu einem Marker schicken.

Das „sg_axis_assault2, marker1“ in der Klammer der ersten Zeile bezeichnet dabei die Gruppe, auf welche es angewendet werden soll und nach dem Komma steht der Name des Markers, zu welchen sich die Gruppe begeben soll. Selbiges trifft auf Inhalt der Klammer in der zweiten Zeile zu. Das „false“ am Ende bezieht sich auf einen weiteren Schalter, der mit dem Command Cmd_Move gesetzt werden kann.

Setzt diese „Umgehungs-Funktion“ einfach an einer Stelle oberhalb der Bewegungsanweisung in euer Skript. Jedoch nicht in die Funktion mit dem Bewegungs-Command selbst!


Nun wisst ihr, wie man Einheiten erzeugt, sie upgradet und wie man sie zu einer bestimmten Position auf der Karte schickt. Fehlt noch die Quelle der Namen, der einzelnen Einheiten bzw. die Namen deren Upgrades.

Hierzu öffnet ihr Corsix Mod Tools, geht auf „Load single SGA archive“ und ladet euch die Datei „ww2data.sga“, zu finden im Coh Verzeichnis unter WW2\Archives. Dann klickt ihr links auf „Data“ und dann auf „Scar“. Nun findet ihr in der Liste die Datei „luaconsts.scar“. Diese lasst ihr euch per Rechtsklick anzeigen und kopiert am besten den gesamten Inhalt in eine Text oder Doc Datei, die ihr dann zum Guckem beim Basteln verwenden könnt.

Hier als Beispiel mal die Zeile, welche die Syntax für da Spawnen der Pios im obigen Beispiel liefert:

PIONEER   =   BP_GetSquadBlueprint("sbps/races/axis/soldiers/pioneer_squad.lua"),

Angewendet wir das im Skript dann so: SBP.AXIS.PIONEER

Das SBP.AXIS steht allen Achsen Infanterie Einheiten vorne an. Wollt ihr also ein Squad Volksgrenadiere Spawnen würde die Syntax so aussehen:

SBP.AXIS.VOLKSGRENADIER

Wichtig ist nur dabei, dass ihr euer Skript mit der Zeile:

import("ScarUtil.scar")

beginnt. Würdet ihr diese Zeile weglassen, müsstet ihr als Namen, der zu spawnenden Einheit immer den ganzen Blueprint Pfad angeben. Für die Pios also:

sbps/races/axis/soldiers/pioneer_squad.lua

Darum erleichtert euch die erste Zeile „import("ScarUtil.scar")“ das aufrufen von Einheiten.

Zuletzt noch der Link zur SCAR Wiki. Hier findet ihr alle verfügbaren Commands nach Gruppen sortiert. Ihr bekommt eine Auflistung aller Schalter und könnt so sehen, an welcher stelle des Commands, welcher Schalter zu stehen hat, und wie er „aussehen“ muss.

http://208.49.84.50/buggo/cohscardoc/frameset.htm

Ihr werdet beim herumprobieren auf jeden Fall Scar Fehlermeldungen bekommen und das Spiel wird einfrieren. Um genau zu Prüfen, welcher Fehler aufgetreten ist, geht ihr in folgenden Order:

Laufwerk eurer Win Installation\Dokumente und Einstellungen\Euer Profilname\Eigene Dateien\My Games\Company of Heroes\LogFiles\

dort schnappt ihr euch die letzt erstellte scarlog_datum.txt datei und öffnet diese. Dort bekommt ihr mit Zeilenangabe erklärt, wo euer Fehler liegt und worin der Fehler besteht. Wenn ihr also Fragen zu einem Fehler habt, postet immer neben dem SCAR Code auch den Inhalt der txt Datei mit.

Nun viel Spaß beim coden. ;)

[edit]

Fehlender Command um die KI auszuschalten hinzugefügt. -> Ihr müsst diesen Command nicht zwingend in die selbe Funktion packen, in der auch die einheiten gespawnt werden. Ihr könnt auch eine eigene Funktion erstellen, welche nur die KI abschaltet, oder eine "OnInit" Funktion, in der ihr noch weitere Dinge einstellt, die beim Spielstart dann ausgeführt werden sollen.

[/edit]
« Letzte Änderung: 03. Mai 2008 - 15:13:04 von Firefly »

Firefly

  • Gunnery Sergeant
  • **
  • Beiträge: 467
    • Profil anzeigen
Re: Kleine Tipps von Mappern für Mapper
« Antwort #16 am: 19. April 2008 - 17:05:25 »
Hier, wie gewünscht, nochmal ein bisschen was zur Artillerie/Bombardierung mittels SCAR Code.

Credits und Dank für die verwendete Funktion "Util_GetRandomOffset" gehen dabei an Mannerheim, der sie entworfen hat. Um alles erwähnte in diesem Tutorial zu verstehen, ist es sinnvoll, wenn ihr auch das erste SCAR Tutorial „Infanterieangriff in Wellen“ durchgelesen und verstanden habt.

Um das Bombardement zufällig zu gestalten wird wiederum eine andere Funktion benutzt, mittels der man den Radius der zufälligen Platzierung bestimmen kann. Diese sieht wie folgt aus:


function Util_GetRandomOffset(pos, mindist, maxdist)
local newpos = pos
newpos.x = newpos.x + World_GetRand(mindist, maxdist)
newpos.z = newpos.z + World_GetRand(mindist, maxdist)
return newpos
end


An dieser Funktion dürft ihr nichts verändern! Auf sie wird nun immer von der eigentlichen Artilleriefunktion aus zugegriffen. Diese sieht dann wie folgt aus:


function arty()
 local target1 = Util_GetPosition(Marker_FromName("arti1", "green_marker"))
 Cmd_Ability(player3, ABILITY.COMMANDER_TREE.AXIS.FIRESTORM, Util_GetRandomOffset(Util_GetPosition(target1), -1, 1), nil, true)
end


Zuerst wird ein Ziel (target) per Marker bestimmt. Den Marker müsst ihr wieder wie gehabt im WB platzieren. In diesem Beispiel ist es ein grüner Marker mit Namen „arti1“. Würdet ihr einen roten Marker verwenden, müsste die Zeile eben mit , “red_marker“)) enden. Bei einem blauen wäre es dann blue_marker und so weiter....
Der lokalen Variable „target1“ wird also mit dem gesetzten Marker eine Position zugewiesen.

In der Zweiten Zeile nutzt ihr den Command cmd_Ability um einen Feuersturm auszulösen. Das „player3“ in der Klammer gibt an, für welche Slot-Position der Befehl ausgeführt wird. „ ABILITY.COMMANDER_TREE.AXIS.FIRESTORM“ gibt dann an, welche Ability angewendet werden soll. Da wir Bomben wollen, verwenden wir hier eben den Feuersturm der Achsen. Genau so können mit dem Command Cmd_Ability aber auch alle anderen Doktrinenfähigkeiten ausgelöst werden. Zur genauen Syntax der einzelnen Fähigkeiten, sei wieder auf die Datei „luaconsts.scar“ verwiesen.

Mit „Util_GetRandomOffset“ wird dann Mannerheims „Zufallspositionsfunktion“ aufgerufen. Dieser wird dann in Klammern als Ziel, der in der ersten Zeile als Zielvariable (target1) genannten Marker übergeben. Die mit Kommas angehängten -1 und 1 geben dabei den Zufallsradius an, der sich um den Zielmarker als Mittelpunkt ausweitet.. Je höher die Werte auseinander gehen, desto weiter wird der mögliche Einschlag der Artillerie gestreut. -1, 1 legen dabei einen sehr kleinen Radius fest, wohingegen -20, 20 den Radius schon recht eindeutig ausweiten. Wie weit ihr streuen wollt, müsst ihr in euren Maps dann einfach ausprobieren und die Zahlen demnach eintragen.

„, nil und , true“ sind Werte, welche die Funktion bzw. der Command benötigen, um fehlerfrei zu funktionieren. Diese werdet ihr immer beibehalten können bzw. müssen.

Nun wisst ihr, wie ihr um einen bestimmten Punkt einen Radius setzt, innerhalb dessen die Artillerie einschlägt. Um das ganze aber noch zufälliger zu gestalten, könnt ihr natürlich auch mehrere Punkte setzen, innerhalb deren Zufallsradius dann gebombt wird. Dazu müsst ihr einfach eurem Ziel eine Zufallsvariable mitgeben. Dies geschieht mit dem Command „World_GetRand(x, y)“.

Im obigen Beispiel wird mit der Zeile:


 local target1 = Util_GetPosition(Marker_FromName("arti1", "green_marker"))


der grüne Marker mit Namen „arti1“ als Ziel angegeben. Um nun von mehreren Zielpunkten zufallsmässig einen zu bestimmen, müsst ihr erst einmal alle möglichen Punkte im WB setzen und benennen. Damit es funktioniert, dürft ihr für diesen Zweck immer nur grüne Marker setzen und müsst diese nach folgendem Schema benennen: „arti1“, „arti2“, „arti3“ usw. nehmt ihr Marker anderer Farbe, müsst ihr die natürlich im Skript ebenfalls ändern und das „green_marker“ eben gegen „farbe_marker“ austauschen.

dann müsst ihr die obige Zeile wie folgt abändern:


 local target1 = Util_GetPosition(Marker_FromName("arti"..World_GetRand(1, 3), "green_marker"))


Ihr seht, dass als Name der möglichen Zielmarker nun nur noch die Basis „arti“ genannt wird. Das „..World_GetRand(1, 3)“ fügt nun dieser Namensbasis einen Zufallswert an. Diesen Zufallswert legt ihr mit den beiden Zahlen in der Klammer fest. Hier wird also nun zufällig ein Wert zwischen 1 und 3 erstellt und dem Namen „arti“ angefügt. Somit wählt das Skript also zufällig einen der von euch gesetzten Zielpunkte „arti1“ bis „arti3“ aus. Setzt ihr fünf Zielpunkte und benennt diese mit „arti1“ bis „arti5“, müsst ihr beim „World_GetRand“ natürlich auch (1, 5) in die Klammer eintragen, damit ein Wert zwischen 1 und 5 ermittelt und der vorgestellten Namensbasis angehängt wird. Somit könnt ihr beliebig viele Zielpunkte setzen und diese zufallsmässig befeuern lassen.


Um nun auch noch die Auslösung der Artillerie vom Zufall abhängig zu machen, kann man dies noch etwas weiter verschachteln. Hierzu wird wieder der Command GetRand(x, y) verwendet und mit einer If Schleife kombiniert. Da würde dann wie folgt aussehen:


function arty()
if World_GetRand(1, 2) == 1 then

 local target1 = Util_GetPosition(Marker_FromName("arti1", "green_marker"))
 Cmd_Ability(player3, ABILITY.COMMANDER_TREE.AXIS.FIRESTORM, Util_GetRandomOffset(Util_GetPosition(target1), -1, 1), nil, true)
 end

end


Es wird also gesagt, wenn beim zufälligen erstellen mit “World_GetRand“ das Ergebnis eine 1 ist, dann tu' folgendes. Somit könnt ihr also die Wahrscheinlichkeit bestimmen, mit der ein bestimmtes Ereignis ausgelöst werden soll. Würdet ihr dem „ World_GetRand“ z.B. (1, 4) mitgeben und beim Ergebnis 1 etwas auslösen lassen, hättet ihr eine Wahrscheinlichkeit von 25%. Im obigen Beispiel beträgt sie logischerweise 50%. 33% würdet ihr demnach mit (1, 3) bekommen und 20% mit (1, 5) usw. Ist das Ergebnis nicht 1, passiert einfach gar nichts. Genau so könnt ihr aber auch beim Ergebnis 2 auslösen lassen. Das bleibt euch überlassen. An der Wahrscheinlichkeit selbst ändert das ja nichts.

Eine andere Möglichkeit, etwas kleiner und eine etwas andere Art ist noch mit einem Mörser möglich. Wiederum setzt ihr einige Zielpunkte im WB auf eure Map und benennt sie entsprechend. Auch hier ist es wichtig, dass alle Zielmarker die selbe Farbe haben.

Folgende Funktion spawnt einen Achsen Mörsertrupp auf die Karte und weißt ihm direkt drei Zielpunkte zu, die er dann zufallsmässig abwechselnd mit Granaten beschießt sobald er sich in Reichweite begeben hat. Damit der Trupp sich nicht ständig neu positionieren muss, ist es bei dieser Variante sinnvoll, die Zielpunkte nicht so weit auseinander zu setzen, damit alle von einem Standpunkt aus beschossen werden können.


function cf_m_e()

  Cmd_Attack(sg_mortar_e, Util_GetPosition(Marker_FromName("mp_east"..World_GetRand(1, 3), "blue_marker")))

end



function mortar_e()

sg_mortar_e = SGroup_CreateIfNotFound("sg_mortar_e")
Util_CreateSquadsAtMarker(player3, sg_mortar_e, SBP.AXIS.MORTAR, spw_east, 1)
Cmd_Attack(sg_mortar_e, Util_GetPosition(Marker_FromName("mp_east"..World_GetRand(1, 3), "blue_marker")))

Rule_AddInterval(cf_m_e, 30)
end


Auch hierbei werden wieder zwei Funktionen verwendet. Letztere Spawnt den Mörsertrupp und weißt ihm eines der drei möglichen Ziele zu. Damit der Trupp nun nicht ewig nur diesen einen Zielpunkt beschießt, wird im Intervall von 30 Sekunden die obige der beiden Funktionen aufgerufen, welche dem Trupp einfach wieder befiehlt das Feuer auf einen der drei möglichen Zielpunkte zu eröffnen. So besteht alle 30 Sekunden die Möglichkeit, dass der Mörser einen anderen Zielpunkt ins Visier nimmt.

Wenn ihr nun schon gecheckt habt, dass ihr die blauen Zielmarker für obiges Beispiel „mp_east1“ bis „mp_east3“ benennen müsst, herzlichen Glückwunsch. Ihr habt den Grossteil des Tutorials bereits verstanden und könnt mit den SCAR Skripten Bereiche unter Feuer nehmen. ;)

Der Strafing Run und der Bombing Run der Amies funktioniert etwas anders, da neben dem Zielpunkt noch ein Vektor, eine Richtung des Angriffs mit angegeben werden muss. Damit habe ich mich aber noch nicht eingehend befasst. Sobald ich ein funktionierendes Beispiel habe, werde ich dies dem Post hier anfügen. Schaut von Zeit zu Zeit also einfach mal wieder hier rein.

[edit]

fehler in der function cf_m_e() funktion beseitigt.

[/edit]

[edit2]

2 fehlende "end" den jeweiligen funktionen zugefügt.

[/edit2]
« Letzte Änderung: 26. Juli 2008 - 12:08:35 von Firefly »

Firefly

  • Gunnery Sergeant
  • **
  • Beiträge: 467
    • Profil anzeigen
Re: Kleine Tipps von Mappern für Mapper
« Antwort #17 am: 20. Mai 2008 - 13:22:19 »
das problem mit campenden ki einheiten ist gelöst. verurscht wird es von blockierten ressourcen punkten. ich habe es auf botb manhay und badland industries getestet und konnte in beiden fällen durch verschieben von ressourcen punkten die ki dazu bringen, nicht weiter zu campen, sondern wie auf anderen maps auch, immer in bewegung zu sein.

das problem wird auch von kleinen objekten, wie etwa ein paar kisten verursacht. es muss also garnichts grosses sein, dass den punkt blockiert. im falle von botb manhay waren es einfach ein paar kisten, die lediglich auf einer seite zu nahe am ressourcen punkt waren. der punkt war also von nahezu 300 grad frei zugänglich und trotzdem hängte sich die ki daran auf.

scheinbar ist es so, dass die ki nach einem bestimmten muster vorgeht. sie nimmt sich die grössten und am nähsten gelgenen punkte vor. diese bekommen erste priorität. erst wenn diese punkte eingenommen sind, schaut die ki weiter und nimmt sich die nächsten vor. kann die ki die punkte aber aus irgendeinem grund nicht einnehmen, werden auch keine weiteren aktionen geplant, da erstmal die punkte abgefrühstückt werden müssen. darum stehen dann teils 10 units vor oder bei einem punkt rum und tun nichts. oft stehen sie auch bei einem punkt, den sie schon erobert haben. dann ist der fehlerhafte punkt der nächste in ihrer "logischen liste".

achtet also immer darauf, dass alle punkte von wirklich allen seiten aus gut zugänglich sind. selbst kleine objekte können die ki verwirren.

und eure territorien sollten immer sauber gemalt sein. isolierte stückchen sind mit in mehreren maps aufgefallen. ihr könnt doch objekte und splines ausblenden lassen so dass ihr nur die farbigen flächen der sektoren seht. nehmt euch die zeit und schaut euch die nochmal genau aus der nähe an. zoomt man zu weit heraus, verschwinden die farben und man übersieht evtl. isolierte stücke.

chrischn

  • Master Gunnery Sergeant
  • ***
  • Beiträge: 773
    • Profil anzeigen
kreuzende Splines
« Antwort #18 am: 06. Dezember 2009 - 19:22:51 »
mal ein etwas kleinerer und einfacherer tipp  :) :
wenn man zwei Splines baut, hat man oft das problem, dass eine die andere überlappt und das ist meistens die, die eigentlich unter der anderen herlaufen sollte
um das problem zu beheben muss man einfach ein einen spline anklicken und dann STRG+BILD(auf) oder BILd(ab) drücken
jenachdem was man nimmt verläuft die spline nun überall über oder unter den anderen.
Marodeur: "dann spielt schach, da kann man nur bauern spammen"

Mystic-Car

  • Colonel
  • *****
  • Beiträge: 3764
  • [CoH:EF-Dev]
    • Profil anzeigen
Re: Kleine Tipps [Mapping]
« Antwort #19 am: 06. Dezember 2009 - 21:11:25 »
Naja mann kann auch die Splines einfach bewegen (das was man unten haben möchte irgendwo verändern schwups es liegt unten ;))


Grüße

chrischn

  • Master Gunnery Sergeant
  • ***
  • Beiträge: 773
    • Profil anzeigen
Re:Kleine Tipps [Mapping]
« Antwort #20 am: 08. Dezember 2009 - 23:03:12 »
ja, das hab ich vorher auch gedacht aber bei mir hat sich das nachdem ich den wb neu gestartet habe immer wieder zurückgesetzt.
Wenns bei dir und anderen auch so klappt dann auch gut ;)
Marodeur: "dann spielt schach, da kann man nur bauern spammen"

neroleone

  • Supporter
  • Staff Sergeant
  • **
  • Beiträge: 322
  • Ich bin wach, ich bin wach! (Bergetiger PE)
    • ICQ Messenger - 340261268
    • Profil anzeigen
Re:Kleine Tipps [Mapping]
« Antwort #21 am: 18. April 2010 - 16:14:03 »
Moin,
ich hoffe mal, dass das der richtige Threat für mein kleines Tutorial ist.
Wie ein paar hier im Forum vielleicht wissen, sind Conversions (Multiplayer Versionen von den SP/Mission Maps), die ich erstellt habe, in den Mods "Blitzkrieg" und "Westfront" enthalten und zwei Conversions sind auch im Mapping-Bereich downloadbar.
Eigentlich gibt es schon fast alle Mission Maps irgendwo im Netz als Download. Aber nur wenige sind wirklich gut gemacht. Leider sind diese Maps dann nur mit sehr viel Arbeit modifizierbar und ggf. möchte man eine bessere Conversion direkt aus der Original-Mission-Map machen.
Wenn nun jemand mit etwas Mapping-Erfahrung sich auch einmal an einer Conversion versuchen möchte, es vielleicht schon mal versucht hat und an wichtigen "Kleinigkeiten" scheiterte, weil er nicht wußte, wie er die eine oder andere Hürde in den Anfängen der Conversion meistern soll, habe ich hier mal eine Schritt-für-Schritt-Anleitung gemacht und an mein Posting angehängt.
Viel Spaß damit.
Gruß
neroleone

PS: Ich aktualisiere das Tutorial, wenn ich auf Fehler oder "vergessene" Schritte hingewiesen werde... also: ab und an mal reinschauen, ob es eine neue Version gibt ;)

PPS: Hab das Tutorial in meine Tutorialsammlung integriert.
« Letzte Änderung: 13. Februar 2011 - 22:53:50 von neroleone »

Die Bestimmung unseres Lebens ist nicht der Erfolg, sondern heroisches Versagen. (Robert Louis Stevenson)

affenrodeo

  • Private First Class
  • *
  • Beiträge: 34
    • Profil anzeigen
    • E-Mail
Re: Kleine Tipps von Mappern für Mapper
« Antwort #22 am: 06. August 2011 - 00:03:55 »
Brückengeländer

Hab grade eben rausgefunden wie das funktioniert.

Einfach eine "Spline" mit dem gewünschten Gelander Platzieren (wie schon oben geschrieben) aber diesmal bei "Adjustable to Terrain" (direkt unter "WallMode") ein Häckchen setzten. Das Geländer sollte jetzt nicht zu sehen sein da es im Boden versunken ist. Man kann es dann einfach nach oben ziehen indem man "h" + linke Maustaste drückt und die Maus nach oben bewegt (wie bei Objekten auch). Man kann allerdings nur die ganze "Spline" auf eine Höhe anheben.

Bin selber bin zuerst immer daran gescheitert, da die Geländer immer im Boden verschwunden sind.



stimmt nicht ganz du kannst wenn du "leer" drückst, die einzelnen gesichtspunkte der spline in unterschiedlche höhen einstellen , halt auch mit "h". ;D