Seite 1 von 3
Texture variation
Verfasst: Do 26. Jan 2017, 02:07
von SkyNet
Hey,
Ich habe seit einiger Zeit etwas mit den Texturen in Wiggles rumgebastelt und mir ist da etwas ins Auge gestochen: "set_texturevariation"
in der drache.tcl schaut das so aus:
Code: Alles auswählen
if {[get_info Drachenmama] == "true"} {
log "[get_objname this] : Ich bin die Drachenmama..."
set_texturevariation this 1
Das gleiche findet man in der brut.tcl:
Code: Alles auswählen
if {$myclass=="Lavabrut"} {
set is_lava 1
set walk_animset 0
set run_animset 1
set scan_range 25
set_texturevariation this 0 1
set_texturevariation this 1 1
Ich vermute mal, das hier entschieden wird, welche der beiden Brut Texturvariationen zur verwendung kommt - Lava Brut oder Kristall Brut.
Die Frage is: Kann man das auch auf andere Objekte anwenden? Wie z.B Eisen? Da es leider nicht möglich ist neue Modelle zu implementieren, besteht vielleicht die Möglichkeit der umtexturierung. Da hab ich etwas rumgetüftelt, bekam aber schnell einen Tunnelblick. Jetzt bin ich ratlos, weil beim testen im Spiel ist mir aufgefallen, das die Textur des Eisens nicht angezeigt wird. Das Model ist aber da und wirft auch Schatten.
Das ist alles was ich verändert habe:
rohstoffe.tcl
Code: Alles auswählen
def_class Eisen metal material 0 {} {
class_defaultanim eisen.standard
call scripts/misc/animclassinit.tcl
call scripts/classes/items/calls/resources.tcl
method change_owner {new_owner} {
// add_owner_attrib [get_owner this] [get_objclass this] -1
set_owner this $new_owner
// add_owner_attrib [get_owner this] [get_objclass this] 1
}
obj_init {
call scripts/classes/items/calls/resources.tcl
set_anim this eisen.standard 0 0
set_viewinfog this 1
set_storable this 1
set_physic this 1
set_hoverable this 1
set_texturevariation this 1
}
}
txtinit.tcl
Code: Alles auswählen
;# texturname variation#0 variation#1
def_texture Struktur_Rohstoffe_c_256 Struktur_Rohstoffe_c_256.tga brainposter.tga
Texturname - Findet man immer am Kopf der 3db files, wenn man diese mit einem texteditor öffnet.
variation#0 - Ist der Name der tga die die Original Textur beinhaltet.
variation#1 - Ist der Name der tga die ich in diesem fall zum testen benutzt habe.
Hab ich etwas Vergessen? Vielleicht hat da jemand mehr Ahnung als ich. :S
Re: Texture variation
Verfasst: Do 26. Jan 2017, 13:27
von zed2000
Hi
ich hab mal deine Schritte ausprobiert. Ich hab auch noch in
texlevels.txt eine neue Textur mit Namen
hi.tga erstellt. In Blender sieht zurzeit mein gewünschter Effekt so aus:
- Clipboard02.jpg (9.44 KiB) 15777 mal betrachtet
Im Spiel:
- Clipboard03.jpg (17.92 KiB) 15777 mal betrachtet
Einmal klappts
- Clipboard04.jpg (1.81 KiB) 15777 mal betrachtet
Leider ist da wohl ein Zufallsfaktor bei der Texturposition noch dabei, der beim Exportieren nicht bedacht wurde
.
Die Texture für Eisen lautet
enviro_chrome
Ich kann mit
beliebig zwischen den Texturen hin und her wechseln:
Re: Texture variation
Verfasst: Do 26. Jan 2017, 19:33
von SkyNet
Echt cool. Das mit der enviro_chrome Textur funktioniert bei mir auch. Ich kann jetzt beliebig viele Metalle erstellen. Den Zufallsfaktor gibt es glaub ich nur bei den enviro_ Texturen, was meiner Meinung nach auch Sinn macht.
Mal versucht eine Flüssigkeit zu verändern? Würd gerne Rohöl also neuen Rohstoff hinzufügen. Konnte allerdings noch keine passende tcl dafür finden.
Re: Texture variation
Verfasst: Di 31. Jan 2017, 15:06
von SkyNet
Was das ganze so interessant macht, ist das ich damit Modelle neu texturieren kann. Das gibt mir z.B. die Möglichkeit ganz neue Items zu erstellen. In meinem Beispiel habe ich neue Klassen erstellt für Kupfer und Kupfererz, bin da aber auf eine Grenze gestoßen, was die Erzbrocken betrifft. Ich kann scheinbar keine neue Klasse für meinen Kupfererzbrocken implementieren, da dessen Modell dann im Spiel nicht sichtbar ist. Was aber funktioniert hat, ist das umtexturieren des Eisenerzbrockens, wie hier im Bild gezeigt:
Irgendeine Idee wie ich das meistern kann? Bin nicht gerade der beste im tcl script. :/
Re: Texture variation
Verfasst: Mi 1. Feb 2017, 11:24
von zed2000
Wenn man sich
brocken.tcl anschaut, wird in Zeile 58
Code: Alles auswählen
set ani [string tolower [string map {brocken ""} [get_objclass this]]]
set_anim this "$ani\_00.standard" 0 0
ausgeführt. Ein Problem, was ich allein aus dem Quelltext sehe ist, dass wie folgt aufgelöst wird:
- Kupfererzbrocken = [get_objclass this]
- Kupfererz = [string map {brocken ""} Kupfererzbrocken]
- kupfererz = [string tolower Kupfererz ]
- set ani kupfererz
Das Mesh wird u.a. mit set_anim gesetzt:
Aber das Objekt
kupfererz_00.standard existiert in der rohstoffe.3db nicht.
Mein Lösung wäre einfach alle
call in deiner
def_class mit den entsprechenden Dateiinhalten zu ersetzen und dann es mit
es zu probieren. Man muss nur aufpassen, dass der Teil
[in_class_def] unterhalb von
def_class platziert wird und der andere Teil in
obj_init wandert.
Achja zur Übersicht aus Blender:
- Stein_00 sind immer Brocken
- Stein_01 ist eine Variation eines einzelnen Steins
- Stein_02 ist eine Variation eines einzelnen Steins
- Stein_03 ist eine Variation eines einzelnen Steins
Re: Texture variation
Verfasst: Mi 1. Feb 2017, 15:10
von SkyNet
Auf das gleiche Ergebniss bin ich gestern Abend gekommen. :]
Leider darf ich die "call scripts/classes/items/calls/brocken.tcl" nicht ersetzen, da sonst mein Erzbrocken unbrauchbar wird und die Zwerge ihn dann nicht mehr ernten können. Ich hab mir eine kleine Ausnahme in der brocken.tcl geschrieben:
Code: Alles auswählen
set ani [string tolower [string map {brocken ""} [get_objclass this]]]
if {$ani == "kupfererz"} {
set_anim this "eisenerz_00.standard" 0 0
} else {
set_anim this "$ani\_00.standard" 0 0
}
Das gleiche dann noch unten, sonst wird der Brocken nicht kleiner beim ernten...
Code: Alles auswählen
set ani [string tolower [string map {brocken ""} [get_objclass this]]]
if {$ani == "kupfererz"} {
set_anim this eisenerz_00.standard $aniph 0
} else {
set_anim this $ani\_00.standard $aniph 0
}
Getestet und es funktioniert. Nur habe ich noch keine Lösung für das folgende Problem gefunden: Alle Produktionsstätten in Wiggles wissen welche Rohstoffe zur verfügung stehen, selbst wenn diese sich noch in Brockenform befinden. In meinem Fall wird der Kupfererzbrocken allerdings nicht erkannt. Die kleinen Erzklumpen hingegen schon.
PS: Ich frage mich ob man diese Ausnahme nicht besser machen kann, so dass der Script immer erst versucht durch
set_anim this $ani die Modelle zu laden, wenn er aber merkt das es keine Treffer gibt, dann setzt er $ani automatisch auf eisenerz, stein, kohle... usw.
Re: Texture variation
Verfasst: Mi 1. Feb 2017, 17:47
von cech12
Hey SkyNet!
ich finde es super cool, was du und zed2000 herausgefunden habt.
Wenn du/ihr eine Mod mit den neuen Items dafür schreiben willst/wollt , dann würde ich mich sehr freuen, wenn ihr den DigglesModManager dafür benutzt.
Zum Testen und Code-Verändern kann man ihn auch super benutzen
In der Datei \Data\Scripts\classes\zwerg\z_procs.tcl Zeile 891 habe ich die Funktion
mine_rep gefunden. Dort gibt es 2 Positionen, die die Brocken aufzählen. Ab Zeile 900:
Code: Alles auswählen
if {$itemclass=="Eisenerzbrocken"||$itemclass=="Golderzbrocken"} {
set animname mann.buddeln_unten_metall
set attr [hmin [get_attrib this exp_Metall] 0.4]
} else {
set animname mann.buddeln_unten_stein
set attr [hmin [get_attrib this exp_Stein] 0.4]
}
und ab Ziele 911:
Code: Alles auswählen
log [list [get_objname this] found: [obj_query this "-class \{Steinbrocken Kohlebrocken Eisenerzbrocken Golderzbrocken Kristallerzbrocken\} -range 10 -limit 1 -flagneg locked"]]
if {[get_remaining_sparetime this]<0.1&&[set nextbrock [obj_query this "-class \{Steinbrocken Kohlebrocken Eisenerzbrocken Golderzbrocken Kristallerzbrocken\} -range 10 -limit 1 -flagneg locked"]]} {
tasklist_clear this
tasklist_add this "mine $nextbrock [get_attrib $item PilzAge]"
tasklist_add this "set_objworkicons this Spitzhacke [string map {brocken {}} [get_objclass $nextbrock]]"
log "[get_objname this]: [state_get this] [tasklist_list this]"
unlock_item
}
Das könnte vielleicht auch noch interessant sein für diese Thematik
Re: Texture variation
Verfasst: Mi 1. Feb 2017, 19:21
von SkyNet
Ohne den ModManager hätte ich wohl schnell die Lust am modden verlohren und die
set_texturevariation Funktion nie entdeckt.
Ich hatte bereits einen Eintrag in der z_procs.tcl gemacht...
Code: Alles auswählen
if {$itemclass=="Eisenerzbrocken"||$itemclass=="Kupfererzbrocken"||$itemclass=="Golderzbrocken"} {
Und...
Code: Alles auswählen
log [list [get_objname this] found: [obj_query this "-class \{Steinbrocken Kohlebrocken Eisenerzbrocken Kupfererzbrocken Golderzbrocken Kristallerzbrocken\} -range 10 -limit 1 -flagneg locked"]]
Und außerdem... Hab ich Pilzsuppe gekocht. :3
Funktioniert wunderbar
Re: Texture variation
Verfasst: Mi 1. Feb 2017, 21:26
von zed2000
SkyNet hat geschrieben:
Leider darf ich die "call scripts/classes/items/calls/brocken.tcl" nicht ersetzen, da sonst mein Erzbrocken unbrauchbar wird und die Zwerge ihn dann nicht mehr ernten können.
Was meinst du mit kann man nicht ersetzen?
Ich habe einfach eine
Scripts\classes\items\kupfererz.tcl erstellt. Die einzelne Datei wird auch noch automatisch geladen. Es wird jede Datei im Ordner geladen. Vllt leicher fürs Modden.
Code: Alles auswählen
def_class Kupfererzbrocken metall material 0 {} {
call scripts/misc/animclassinit.tcl
call scripts/classes/items/calls/resources.tcl
call scripts/misc/aggr_events.tcl
method mine {obj} {
if {$content > 0} {
incr content -1
add_attrib this PilzAge -1
set pos [get_pos $obj]
set pos [vector_add $pos [vector_random 0.6 0 0.6]]
sel /obj
set ns [new Gold]
set_pos $ns $pos
set_owner $ns [get_owner this]
eval "add_expattrib $obj $expincr"
setanim
}
if {$content == 0} {
del this
}
}
method change_owner {new_owner} {
add_owner_attrib [get_owner this] [get_objclass this] -1
set_owner this $new_owner
add_owner_attrib [get_owner this] [get_objclass this] 1
}
method Editor_Set_Info {ifo} {
global info_string
set info_string $ifo
set ifo [lindex $ifo 0]
set cnt [lindex $ifo 1]
if { [string is integer $cnt] } {
set content $cnt
set_attrib this PilzAge $cnt
setanim
} else {
log "[get_objname this]: Error content is not an integer: '$ifo'"
}
foreach entry $ifo {
switch [lindex $entry 0] {
"aggr" {set player_aggressivity [lindex $entry 1]}
"aggrmax" {set aggr_max [lindex $entry 1]}
}
}
}
obj_init {
call scripts/classes/items/calls/resources.tcl
call scripts/misc/aggr_events.tcl
set content 30
set_attrib this PilzAge 30
set info_string "\{inhalt 30\}"
set ani stein
set_anim this "$ani\_00.standard" 0 0
set_viewinfog this 1
set_storable this 1
set_physic this 1
set_attrib this weight 0.38
set_hoverable this 1
set_collision this 1
proc setanim {} {
global content
//set aniph [hmax [expr 9 - int($content / 3)] 0]
set aniph 0
if {$content <= 2} {
set aniph 9
} elseif {$content <= 3} {
set aniph 8
} elseif {$content <= 4} {
set aniph 7
} elseif {$content <= 5} {
set aniph 6
} elseif {$content <= 7} {
set aniph 5
} elseif {$content <= 10} {
set aniph 4
} elseif {$content <= 13} {
set aniph 3
} elseif {$content <= 16} {
set aniph 2
} elseif {$content <= 20} {
set aniph 1
}
set ani stein
set_anim this $ani\_00.standard $aniph 0
}
set expincr "exp_Metall 0.002"
}
}
SkyNet hat geschrieben:
Alle Produktionsstätten in Wiggles wissen welche Rohstoffe zur verfügung stehen, selbst wenn diese sich noch in Brockenform befinden. In meinem Fall wird der Kupfererzbrocken allerdings nicht erkannt. Die kleinen Erzklumpen hingegen schon.
Ich vermute, dass der Auftrag Brocken-Abbauen built-in der wiggles.exe ist. Es wird ein Event
evt_autoprod_harvest generiert. Die Definition des Events ist wiederum in TCL implementiert.
Re: Texture variation
Verfasst: Do 2. Feb 2017, 13:28
von cech12
Alle Produktionsstätten in Wiggles wissen welche Rohstoffe zur verfügung stehen, selbst wenn diese sich noch in Brockenform befinden. In meinem Fall wird der Kupfererzbrocken allerdings nicht erkannt. Die kleinen Erzklumpen hingegen schon.
Ich habe in der
Datei Data\Scripts\init\lginit.tcl die
Zeile 5 gefunden, in der ebenfalls die Erze aufgelistet werden.
Code: Alles auswählen
lg_addfilterclass { Zwerg Wuker Troll Pilz Kohle Kristallerz Golderz Eisenerz Schatztonne }
Vielleicht hilft das ja, um das Problem zu lösen?