PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erkenntnisse über das Genom-Format



lichtwicht
25.06.2007, 11:41
EDIT
Wer sich nicht den ganzen(langen) Thread durchlesen will:
2 Sachen sind bisher daraus "entstanden":
1. MasterEvil's G3 Template Editor (http://forum.worldofplayers.de/forum/showthread.php?t=246384)
2. Urban's Template Skript Urban's v0.22 (http://forum.worldofplayers.de/forum/showpost.php?p=4241378&#post4241378)
Doc/ToolSammlung im Jowood-Forum (inkl. Infos zum Template Format) (http://forum.jowood.de/showthread.php?t=146591)
(3.) ich habe mich einmal an der Weiterentwicklung von Urbans Skript versucht...(v0.27lw) (http://forum.worldofplayers.de/forum/showthread.php?p=5002777&#post5002777)
(4.) neuste / latest Version g3_tple_description_048lw.7z (102,8KB) (http://forum.worldofplayers.de/forum/attachment.php?attachmentid=28839)

/EDIT


nach kurzer Überlegeung meine "Erkenntnisse" nur "ausgewählten" Leuten zugänglich zu machen, habe ich beschlossen, daß das Quatsch wäre...

es geht um die *.tple-Dateien, zuerst um die
E:\G3OUT\Templates\Items\Items\Items_Story\_Weapons_1H_Story_It_1H_FlameSword_01 .tple
http://img469.imageshack.us/img469/6207/flame1zt3.gif (image hidden)
(wir sehen, daß wir nichts sehen ;)) den grob markierten Bereich hier mal als Hex-View
http://img220.imageshack.us/img220/4402/flame2ci2.gif
die 7F-FF-Folgen gibt's am Anfang jeder Datei, die eignen sich gut als Orientierung. Danach kommt noch'n bischen Müll und dann die Folge:
3E 00 00 00
(3E ist >) DANACH kommen die 16 Bytes, die den internen Bezeichner für das betreffende Objekt darstellen.
In diesem Fall ist der Bezeichner für das Flammenschwert:
40bfbcd54decb543ad446c70bee3d84a


jetzt durchsuche man die gesamten G3-Daten und ups! Es gibt nur eine weitere Datei, die diesen Bezeichner verwendet:
E:\G3OUT\Templates\Treasure\Trader\Trade_Generate_TS_Trader_Mid_Smith.tple
http://img243.imageshack.us/img243/7969/flame3cj8.gif (image hidden)
hmm, eine Auflistung von lauter Items...das wird doch nicht etwa...(OT@Ribal: *duck und renn*)

der Rest ist schnell erzählt...der Bezeichner für's Katana ist:
D1B63B6002E3B54CBEFBE5CCE64DC023
kurz getauscht und...(8 Stunden später) festgestellt, daß man mit keinem Händler, der dieses Skript benutzt, gesprochen haben darf! "Irgendwie" kommt das Skript dann wohl ins SaveGame und alle noch so schön geänderten Skripts werden ignoriert...also
"Neues Spiel" und JUHU statt Flammenschwertern gibt's jetzt Katana's zu kaufen!

das Ganze habe ich hier umgesetzt (http://forum.worldofplayers.de/forum/showthread.php?p=3840226&#post3840226)

P.S. sorry wegen der großen Bilder...aber so wars am einfachsten zu "erklären"...

MasterEvil
25.06.2007, 12:26
Interessant :)

Ich glaub ich werd mich jetzt auch mal hinsetzen und irgendwas in diese Richtung basteln. Besten Dank für deine Beschreibung!!

Canis Lupus
25.06.2007, 12:33
Find ich goil.
Ne ich duck mich nicht, sondern nehm den Ball auf.
Wenn ihr so an die Inventare rankommt dann nur zu.
Ändere dann auch die Inventarlisten daraufhin ab.
Aber wie im JW-Forum gelesen stößt der Vorschlag schon auf Ablehnung bezüglich des Katana (soll eine seltene Waffe bleiben, und nicht bei 17 Händlern zu Kaufen sein).
Mein Vorschlag ist, leg doch statt des Katana doch das Ritterschild den Schmieden ins Inventar (gibt es derzeit nur durch Cheat)

Ribal

MasterEvil
25.06.2007, 18:56
Folgendes hab ich mal eben noch rausgefunden:


/**
*
* Byte 10-13 (UINT32) = Beginn der Attribute
*
* Byte 27-30 (UINT32) = Anzahl der folgenden Chars
* Dann werden die Chars aufgelistet und
* danach Abschluß (32 Bits) - kein Plan
*
* danach Begin (64 Bits) - keine Ahnung - immer gleich
* danach Item (128 Bits) - Item-Identifikations-Hash
* dann kommen erst einmal 150 Byte immer dasselbe und
* dann ne Menge (ersteinmal) unnützer Kram (Zeichensatz oder so).
*/

MasterEvil
25.06.2007, 20:42
Irgendwie sind meine Hexwerte anders als deine :/

Mein Flammenschwert hat z.B.:
38,ca,c8,c8,23,15,cc,42,90,cc,38,4a,2a,34,d6,1c

Und mein Katana:
d6,99,ba,90,77,9f,ff,46,a4,e2,67,9a,9f,c4,07,d2

Ich hänge mal meine beiden ran, vieleicht wird der Hashcode bei Spielstart erzeugt ?!?

_Weapons_1H_Story_It_1H_FlameSword_01.tple (http://fooyou.eu/mirror/_Weapons_1H_Story_It_1H_FlameSword_01.tple)

_Weapons_1H_Story_It_1H_Katana_01.tple (http://fooyou.eu/mirror/_Weapons_1H_Story_It_1H_Katana_01.tple)

mdahm
25.06.2007, 21:22
Falls ihr die Stelle findet, an der gekennzeichnet ist, ob das Item im Handelsmenü angezeigt wird oder nicht - das wäre eine gute Hilfe. :)

Beispiele für Items, die der Held weder kaufen noch verkaufen kann (meistens Quest-Items):
It_Enzo_Supply
It_Giores_Supply
It_Jaffar_Weapons

MasterEvil
25.06.2007, 22:15
So, noch nen paar Erkenntnisse aber leider muss ich gleich pennen gehen ;)

Also wie schon geschrieben steht bei Bit 10 - 13 wo die Attribute anfangen.
Dort muss man, jedenfalls jetzt gerade bei meinem Flammenschwert noch 9 Bytes weiter dann fangen die Attribute tatsächlich an.
Als erstes steht dann immer ein Unsigned Int 32, also 2 Byte die die String-Länge des darauf folgenden Attributes angeben. Das ganze zieht sich bis zum Ende hin so durch und die Attribute sind einfach der Reihe nach reingeklatscht.

Erst steht das Attribut dann der Wert, glaub ich bzw. meistens :D
[Edit] Also nix mit Werten in der Template sondern nur Template für die Werte ;)

Hier also mal die Liste für das Flammenschwert:
xC sind vermutlich die Klassennamen
xT Listen/Collections/Arrays oder Enums etc..


_Weapons_1H_Story_It_1H_FlameSword_01.tple
It_1H_FlameSword_01
[eCVisualMeshDynamic_PS]
ResourceFilePath
[bCMeshResourceString]
G3_Weapon_1H_Sword_Flame_01.xcmsh
ResourceFileName
StaticLightingType
[bTPropertyContainer<enum eEStaticLighingType>]
LightmapAmbientOcclusion
[bTPropertyContainer<enum eELightmapAmbientOcclusion>]
LightmapType
[bTPropertyContainer<enum eELightmapType>]
UnitsPerLightmapTexel
float
MaterialSwitch
int
[eCRigidBody_PS]
TotalMass
MassSpaceInertia
[bCVector]
StartVelocity
StartAngularVelocity
StartForce
StartTorque
WakeUpCounter
LinearDamping
AngularDamping
MaxAngularVelocity
CenterOfMass
CCDMotionTreshold
BodyFlag
[bTPropertyContainer<enum eERigidbody_Flag>]
PhysicsEnabled
bool
[eCCollisionShape_PS]
Group
[bTPropertyContainer<enum eECollisionGroup>]
Range
[bTPropertyContainer<enum eEPhysicRangeType>]
DisableCollision
DisableResponse
IgnoredByTraceRay
[eCCollisionShape]
ShapeType
[bTPropertyContainer<enum eECollisionShapeType>]
[bTPropertyContainer<enum eEShapeGroup>]
Material
[bTPropertyContainer<enum eEShapeMaterial>]
ShapeAABBAdaptMode
[bTPropertyContainer<enum eEShapeAABBAdapt>]
EnableCCD
OverrideEntityAABB
TriggersOnTouch
TriggersOnUntouch
TriggersOnIntersect
SkinWidth
IsLazyGenerated
FileVersion
short
[gCItem_PS]
Amount
long
Quality
GoldValue
MissionItem
Permanent
Category
[bTPropertyContainer<enum gEItemCategory>]
Texture
[bCString]
IT_1H_FlameSword_01.tga
Dropped
ItemWorld
[eCTemplateEntityProxy]
ItemInventory
ArmorSet
Spell
Skill
Robe
ReqAttrib1Tag
STR
ReqAttrib1Op
[bTPropertyContainer<enum EAttribReqOperation>]
ReqAttrib1Value
ReqAttrib2Tag

ReqAttrib2Value
ReqAttrib3Tag
ReqAttrib3Value
ReqAttrib4Tag
ReqAttrib4Value
RequiredSkill1
RequiredSkill2
ModAttrib1Tag
ModAttrib1Op
[bTPropertyContainer<enum EAttribModOperation>]
ModAttrib1Value
ModAttrib2Tag
ModAttrib2Op
ModAttrib2Value
ModAttrib3Tag
ModAttrib3Op
ModAttrib3Value
ModAttrib4Tag
ModAttrib4Op
ModAttrib4Value
ModAttrib5Tag
ModAttrib5Op
ModAttrib5Value
ModAttrib6Tag
ModAttrib6Op
ModAttrib6Value
ActivateSkill1
ActivateSkill2
[gCInteraction_PS]
FocusPriority
[bTPropertyContainer<enum gEFocusPriority>]
Owner
[eCEntityProxy]
User
UseType
[bTPropertyContainer<enum gEUseType>]
ScriptUseFunc
AnchorPoint
FocusNameType
[bTPropertyContainer<enum gEFocusNameType>]
FocusNameBone
Head_Head_End
FocusViewOffset
FocusWorldOffset
UsedByPlayer
EnterROIScript
ExitROIScript
[gCTouchDamage_PS]
ScriptTouchFunc
OnTouchDamage
ResetOnUntouch
DamageDisabled
IsEnabled
MaxActivationCount
MaxCountPerEntity
SendUntrigger
ReactToTrigger
ReactToTouch
ReactToDamage
ReactToIntersect
ReactToStart
ReactToLoad
ReactToProcessingRange
ReactToCacheInRange
RecognizesEntityName
RecognizesObjects
RecognizesPlayers
RecognizesNPCs
RecognizesCollisionGroup
RecognizesShapeGroup
RecognizesPSType
[bTPropertyContainer<enum eEPropertySetType>]
RecognizesEvent
FireDelaySec
RetriggerWaitSec
AutoUntriggerAfterSec
DamageTreshold
VelocityTresholdMSec
EntitiesVisited
[bTObjArray<class eCEntityProxy>]
EntitiesVisitedCount
[bTValArray<unsigned short>]
LastEventType
[bTPropertyContainer<enum eEEventType>]
OtherEntity
InflictorEntity
RunningEventType
TouchType
UNKNOWN
TargetEntity
[gCDamage_PS]
DamageType
[bTPropertyContainer<enum gEDamageType>]
DamageAmount
DamageManaMultiplier
DamageHitMultiplier
ManaUsed
[eCIlluminated_PS]
EnableDynamicLighting
EnableAmbient
StaticIlluminated
[bTPropertyContainer<enum eEStaticIlluminated>]
CastShadows
ReciveShadows
DirectionalShadowType
[bTPropertyContainer<enum eEDirectionalShadowType>]
ReciveTreeShadows
CastStaticShadows
ReciveStaticShadows
[eCStrip_PS]
StartColor
[bCFloatColor]
StartAlpha
EndColor
EndAlpha
OffsetLeft
OffsetRight
SegmentsPerSecond
SegmentLifeTime
MaxSegmentCount
SpawnMode
[bTPropertyContainer<enum eEStripSpawning>]
FinalBlend
[bTPropertyContainer<enum eEFinalBlend>]
VFX_Weapontrail_02b.tga
Enabled
[gCEffect_PS]
Effect
eff_magic_weapons_flamesword_01
Offset
Probability
Static


Hier noch zum vergleich:

It_1H_Sword_Rust_01

_Weapons_1H_World_It_1H_Sword_Rust_01.tple
It_1H_Sword_Rust_01
[eCVisualMeshDynamic_PS]
ResourceFilePath
[bCMeshResourceString]
G3_Weapon_1H_Sword_Rusty_01.xcmsh
ResourceFileName
StaticLightingType
[bTPropertyContainer<enum eEStaticLighingType>]
LightmapAmbientOcclusion
[bTPropertyContainer<enum eELightmapAmbientOcclusion>]
LightmapType
[bTPropertyContainer<enum eELightmapType>]
UnitsPerLightmapTexel
float
MaterialSwitch
int
[eCRigidBody_PS]
TotalMass
MassSpaceInertia
[bCVector]
StartVelocity
StartAngularVelocity
StartForce
StartTorque
WakeUpCounter
LinearDamping
AngularDamping
MaxAngularVelocity
CenterOfMass
CCDMotionTreshold
BodyFlag
[bTPropertyContainer<enum eERigidbody_Flag>]
PhysicsEnabled
bool
[eCCollisionShape_PS]
Group
[bTPropertyContainer<enum eECollisionGroup>]
Range
[bTPropertyContainer<enum eEPhysicRangeType>]
DisableCollision
DisableResponse
IgnoredByTraceRay
[eCCollisionShape]
ShapeType
[bTPropertyContainer<enum eECollisionShapeType>]
[bTPropertyContainer<enum eEShapeGroup>]
Material
[bTPropertyContainer<enum eEShapeMaterial>]
ShapeAABBAdaptMode
[bTPropertyContainer<enum eEShapeAABBAdapt>]
EnableCCD
OverrideEntityAABB
TriggersOnTouch
TriggersOnUntouch
TriggersOnIntersect
SkinWidth
IsLazyGenerated
FileVersion
short
[gCItem_PS]
Amount
long
Quality
GoldValue
MissionItem
Permanent
Category
[bTPropertyContainer<enum gEItemCategory>]
Texture
[bCString]
IT_1H_Sword_Rust_01.tga
Dropped
ItemWorld
[eCTemplateEntityProxy]
ItemInventory
ArmorSet
Spell
Skill
Robe
ReqAttrib1Tag
STR
ReqAttrib1Op
[bTPropertyContainer<enum EAttribReqOperation>]
ReqAttrib1Value
ReqAttrib2Tag

ReqAttrib2Value
ReqAttrib3Tag
ReqAttrib3Value
ReqAttrib4Tag
ReqAttrib4Value
RequiredSkill1
RequiredSkill2
ModAttrib1Tag
ModAttrib1Op
[bTPropertyContainer<enum EAttribModOperation>]
ModAttrib1Value
ModAttrib2Tag
ModAttrib2Op
ModAttrib2Value
ModAttrib3Tag
ModAttrib3Op
ModAttrib3Value
ModAttrib4Tag
ModAttrib4Op
ModAttrib4Value
ModAttrib5Tag
ModAttrib5Op
ModAttrib5Value
ModAttrib6Tag
ModAttrib6Op
ModAttrib6Value
ActivateSkill1
ActivateSkill2
[gCInteraction_PS]
FocusPriority
[bTPropertyContainer<enum gEFocusPriority>]
Owner
[eCEntityProxy]
User
UseType
[bTPropertyContainer<enum gEUseType>]
ScriptUseFunc
AnchorPoint
FocusNameType
[bTPropertyContainer<enum gEFocusNameType>]
FocusNameBone
Head_Head_End
FocusViewOffset
FocusWorldOffset
UsedByPlayer
EnterROIScript
ExitROIScript
[gCTouchDamage_PS]
ScriptTouchFunc
OnTouchDamage
ResetOnUntouch
DamageDisabled
IsEnabled
MaxActivationCount
MaxCountPerEntity
SendUntrigger
ReactToTrigger
ReactToTouch
ReactToDamage
ReactToIntersect
ReactToStart
ReactToLoad
ReactToProcessingRange
ReactToCacheInRange
RecognizesEntityName
RecognizesObjects
RecognizesPlayers
RecognizesNPCs
RecognizesCollisionGroup
RecognizesShapeGroup
RecognizesPSType
[bTPropertyContainer<enum eEPropertySetType>]
RecognizesEvent
FireDelaySec
RetriggerWaitSec
AutoUntriggerAfterSec
DamageTreshold
VelocityTresholdMSec
EntitiesVisited
[bTObjArray<class eCEntityProxy>]
EntitiesVisitedCount
[bTValArray<unsigned short>]
LastEventType
[bTPropertyContainer<enum eEEventType>]
OtherEntity
InflictorEntity
RunningEventType
TouchType
UNKNOWN
TargetEntity
[gCDamage_PS]
DamageType
[bTPropertyContainer<enum gEDamageType>]
DamageAmount
DamageManaMultiplier
DamageHitMultiplier
ManaUsed
[eCIlluminated_PS]
EnableDynamicLighting
EnableAmbient
StaticIlluminated
[bTPropertyContainer<enum eEStaticIlluminated>]
CastShadows
ReciveShadows
DirectionalShadowType
[bTPropertyContainer<enum eEDirectionalShadowType>]
ReciveTreeShadows
CastStaticShadows
ReciveStaticShadows
[eCStrip_PS]
StartColor
[bCFloatColor]
StartAlpha
EndColor
EndAlpha
OffsetLeft
OffsetRight
SegmentsPerSecond
SegmentLifeTime
MaxSegmentCount
SpawnMode
[bTPropertyContainer<enum eEStripSpawning>]
FinalBlend
[bTPropertyContainer<enum eEFinalBlend>]
VFX_Weapontrail_02b.tga
Enabled

It_Enzo_Supply

Mission_Items_Story_It_Enzo_Supply.tple
It_Enzo_Supply
[eCVisualMeshDynamic_PS]
ResourceFilePath
[bCMeshResourceString]
G3_Item_Crate_01.xcmsh
ResourceFileName
StaticLightingType
[bTPropertyContainer<enum eEStaticLighingType>]
LightmapAmbientOcclusion
[bTPropertyContainer<enum eELightmapAmbientOcclusion>]
LightmapType
[bTPropertyContainer<enum eELightmapType>]
UnitsPerLightmapTexel
float
MaterialSwitch
int
[eCRigidBody_PS]
TotalMass
MassSpaceInertia
[bCVector]
StartVelocity
StartAngularVelocity
StartForce
StartTorque
WakeUpCounter
LinearDamping
AngularDamping
MaxAngularVelocity
CenterOfMass
CCDMotionTreshold
BodyFlag
[bTPropertyContainer<enum eERigidbody_Flag>]
PhysicsEnabled
bool
[eCCollisionShape_PS]
Group
[bTPropertyContainer<enum eECollisionGroup>]
Range
[bTPropertyContainer<enum eEPhysicRangeType>]
DisableCollision
DisableResponse
IgnoredByTraceRay
[eCCollisionShape]
ShapeType
[bTPropertyContainer<enum eECollisionShapeType>]
[bTPropertyContainer<enum eEShapeGroup>]
Material
[bTPropertyContainer<enum eEShapeMaterial>]
ShapeAABBAdaptMode
[bTPropertyContainer<enum eEShapeAABBAdapt>]
EnableCCD
OverrideEntityAABB
TriggersOnTouch
TriggersOnUntouch
TriggersOnIntersect
SkinWidth
IsLazyGenerated
FileVersion
short
G3_Item_Crate_01_CV.xnvmsh
[gCItem_PS]
Amount
long
Quality
GoldValue
MissionItem
Permanent
Category
[bTPropertyContainer<enum gEItemCategory>]
Texture
[bCString]
IT_Misc_WoodenBox.tga
Dropped
ItemWorld
[eCTemplateEntityProxy]
ItemInventory
ArmorSet
Spell
Skill
Robe
ReqAttrib1Tag

ReqAttrib1Op
[bTPropertyContainer<enum EAttribReqOperation>]
ReqAttrib1Value
ReqAttrib2Tag
ReqAttrib2Value
ReqAttrib3Tag
ReqAttrib3Value
ReqAttrib4Tag
ReqAttrib4Value
RequiredSkill1
RequiredSkill2
ModAttrib1Tag
ModAttrib1Op
[bTPropertyContainer<enum EAttribModOperation>]
ModAttrib1Value
ModAttrib2Tag
ModAttrib2Op
ModAttrib2Value
ModAttrib3Tag
ModAttrib3Op
ModAttrib3Value
ModAttrib4Tag
ModAttrib4Op
ModAttrib4Value
ModAttrib5Tag
ModAttrib5Op
ModAttrib5Value
ModAttrib6Tag
ModAttrib6Op
ModAttrib6Value
ActivateSkill1
ActivateSkill2
[gCInteraction_PS]
FocusPriority
[bTPropertyContainer<enum gEFocusPriority>]
Owner
[eCEntityProxy]
User
UseType
[bTPropertyContainer<enum gEUseType>]
ScriptUseFunc
AnchorPoint
FocusNameType
[bTPropertyContainer<enum gEFocusNameType>]
FocusNameBone
Head_Head_End
FocusViewOffset
FocusWorldOffset
UsedByPlayer
EnterROIScript
ExitROIScript
[eCIlluminated_PS]
EnableDynamicLighting
EnableAmbient
StaticIlluminated
[bTPropertyContainer<enum eEStaticIlluminated>]
CastShadows
ReciveShadows
DirectionalShadowType
[bTPropertyContainer<enum eEDirectionalShadowType>]
ReciveTreeShadows
CastStaticShadows
ReciveStaticShadows

It_Giores_Supply

Mission_Items_Story_It_Giores_Supply.tple
It_Giores_Supply
[eCVisualMeshDynamic_PS]
ResourceFilePath
[bCMeshResourceString]
G3_Item_Crate_02.xcmsh
ResourceFileName
StaticLightingType
[bTPropertyContainer<enum eEStaticLighingType>]
LightmapAmbientOcclusion
[bTPropertyContainer<enum eELightmapAmbientOcclusion>]
LightmapType
[bTPropertyContainer<enum eELightmapType>]
UnitsPerLightmapTexel
float
MaterialSwitch
int
[eCRigidBody_PS]
TotalMass
MassSpaceInertia
[bCVector]
StartVelocity
StartAngularVelocity
StartForce
StartTorque
WakeUpCounter
LinearDamping
AngularDamping
MaxAngularVelocity
CenterOfMass
CCDMotionTreshold
BodyFlag
[bTPropertyContainer<enum eERigidbody_Flag>]
PhysicsEnabled
bool
[eCCollisionShape_PS]
Group
[bTPropertyContainer<enum eECollisionGroup>]
Range
[bTPropertyContainer<enum eEPhysicRangeType>]
DisableCollision
DisableResponse
IgnoredByTraceRay
[eCCollisionShape]
ShapeType
[bTPropertyContainer<enum eECollisionShapeType>]
[bTPropertyContainer<enum eEShapeGroup>]
Material
[bTPropertyContainer<enum eEShapeMaterial>]
ShapeAABBAdaptMode
[bTPropertyContainer<enum eEShapeAABBAdapt>]
EnableCCD
OverrideEntityAABB
TriggersOnTouch
TriggersOnUntouch
TriggersOnIntersect
SkinWidth
IsLazyGenerated
FileVersion
short
G3_Item_Crate_02_CV.xnvmsh
[gCItem_PS]
Amount
long
Quality
GoldValue
MissionItem
Permanent
Category
[bTPropertyContainer<enum gEItemCategory>]
Texture
[bCString]
IT_Misc_WoodenBox.tga
Dropped
ItemWorld
[eCTemplateEntityProxy]
ItemInventory
ArmorSet
Spell
Skill
Robe
ReqAttrib1Tag

ReqAttrib1Op
[bTPropertyContainer<enum EAttribReqOperation>]
ReqAttrib1Value
ReqAttrib2Tag
ReqAttrib2Value
ReqAttrib3Tag
ReqAttrib3Value
ReqAttrib4Tag
ReqAttrib4Value
RequiredSkill1
RequiredSkill2
ModAttrib1Tag
ModAttrib1Op
[bTPropertyContainer<enum EAttribModOperation>]
ModAttrib1Value
ModAttrib2Tag
ModAttrib2Op
ModAttrib2Value
ModAttrib3Tag
ModAttrib3Op
ModAttrib3Value
ModAttrib4Tag
ModAttrib4Op
ModAttrib4Value
ModAttrib5Tag
ModAttrib5Op
ModAttrib5Value
ModAttrib6Tag
ModAttrib6Op
ModAttrib6Value
ActivateSkill1
ActivateSkill2
[gCInteraction_PS]
FocusPriority
[bTPropertyContainer<enum gEFocusPriority>]
Owner
[eCEntityProxy]
User
UseType
[bTPropertyContainer<enum gEUseType>]
ScriptUseFunc
AnchorPoint
FocusNameType
[bTPropertyContainer<enum gEFocusNameType>]
FocusNameBone
Head_Head_End
FocusViewOffset
FocusWorldOffset
UsedByPlayer
EnterROIScript
ExitROIScript
[eCIlluminated_PS]
EnableDynamicLighting
EnableAmbient
StaticIlluminated
[bTPropertyContainer<enum eEStaticIlluminated>]
CastShadows
ReciveShadows
DirectionalShadowType
[bTPropertyContainer<enum eEDirectionalShadowType>]
ReciveTreeShadows
CastStaticShadows
ReciveStaticShadows

It_Jaffar_Weapons

Mission_Items_Story_It_Jaffar_Weapons.tple
It_Jaffar_Weapons
[eCVisualMeshDynamic_PS]
ResourceFilePath
[bCMeshResourceString]
G3_Item_Crate_01.xcmsh
ResourceFileName
G3_Item_Story_WeaponPack_01.xcmsh
StaticLightingType
[bTPropertyContainer<enum eEStaticLighingType>]
LightmapAmbientOcclusion
[bTPropertyContainer<enum eELightmapAmbientOcclusion>]
LightmapType
[bTPropertyContainer<enum eELightmapType>]
UnitsPerLightmapTexel
float
MaterialSwitch
int
[eCRigidBody_PS]
TotalMass
MassSpaceInertia
[bCVector]
StartVelocity
StartAngularVelocity
StartForce
StartTorque
WakeUpCounter
LinearDamping
AngularDamping
MaxAngularVelocity
CenterOfMass
CCDMotionTreshold
BodyFlag
[bTPropertyContainer<enum eERigidbody_Flag>]
PhysicsEnabled
bool
[eCCollisionShape_PS]
Group
[bTPropertyContainer<enum eECollisionGroup>]
Range
[bTPropertyContainer<enum eEPhysicRangeType>]
DisableCollision
DisableResponse
IgnoredByTraceRay
[eCCollisionShape]
ShapeType
[bTPropertyContainer<enum eECollisionShapeType>]
[bTPropertyContainer<enum eEShapeGroup>]
Material
[bTPropertyContainer<enum eEShapeMaterial>]
ShapeAABBAdaptMode
[bTPropertyContainer<enum eEShapeAABBAdapt>]
EnableCCD
OverrideEntityAABB
TriggersOnTouch
TriggersOnUntouch
TriggersOnIntersect
SkinWidth
IsLazyGenerated
FileVersion
short
G3_Item_Story_WeaponPack_01_CV.xnvmsh
[gCItem_PS]
Amount
long
Quality
GoldValue
MissionItem
Permanent
Category
[bTPropertyContainer<enum gEItemCategory>]
Texture
[bCString]
IT_Jaffar_Weapons.tga
Dropped
ItemWorld
[eCTemplateEntityProxy]
ItemInventory
ArmorSet
Spell
Skill
Robe
ReqAttrib1Tag

ReqAttrib1Op
[bTPropertyContainer<enum EAttribReqOperation>]
ReqAttrib1Value
ReqAttrib2Tag
ReqAttrib2Value
ReqAttrib3Tag
ReqAttrib3Value
ReqAttrib4Tag
ReqAttrib4Value
RequiredSkill1
RequiredSkill2
ModAttrib1Tag
ModAttrib1Op
[bTPropertyContainer<enum EAttribModOperation>]
ModAttrib1Value
ModAttrib2Tag
ModAttrib2Op
ModAttrib2Value
ModAttrib3Tag
ModAttrib3Op
ModAttrib3Value
ModAttrib4Tag
ModAttrib4Op
ModAttrib4Value
ModAttrib5Tag
ModAttrib5Op
ModAttrib5Value
ModAttrib6Tag
ModAttrib6Op
ModAttrib6Value
ActivateSkill1
ActivateSkill2
[gCInteraction_PS]
FocusPriority
[bTPropertyContainer<enum gEFocusPriority>]
Owner
[eCEntityProxy]
User
UseType
[bTPropertyContainer<enum gEUseType>]
ScriptUseFunc
AnchorPoint
FocusNameType
[bTPropertyContainer<enum gEFocusNameType>]
FocusNameBone
Head_Head_End
FocusViewOffset
FocusWorldOffset
UsedByPlayer
EnterROIScript
ExitROIScript
[eCIlluminated_PS]
EnableDynamicLighting
EnableAmbient
StaticIlluminated
[bTPropertyContainer<enum eEStaticIlluminated>]
CastShadows
ReciveShadows
DirectionalShadowType
[bTPropertyContainer<enum eEDirectionalShadowType>]
ReciveTreeShadows
CastStaticShadows
ReciveStaticShadows

NicoDE
26.06.2007, 04:48
xC sind vermutlich die Klassennamen
xT Listen/Collections/Arrays oder Enums etc..Die C++-Bezeichner folgen einer strengen Namenskonvention: sTXxx
s -> Subsystem (b = base (Basis), e = Engine (Kern), g = Game (Spiel), ...)
T -> Typ (C = Class (Klasse), E = Enum (Aufzählung), T = Template (C++-Vorlage), ...)

lichtwicht
26.06.2007, 14:03
Folgendes hab ich mal eben noch rausgefunden:

/**
*
* Bit 10-13 (UINT32) = Beginn der Attribute
*
* Bit 27-30 (UINT32) = Anzahl der folgenden Chars
* Dann werden die Chars aufgelistet und
* danach Abschluß (32 Bits) - kein Plan
*
* danach Begin (64 Bits) - keine Ahnung - immer gleich
* danach Item (128 Bits) - Item-Identifikations-Hash
* dann kommen erst einmal 150 Byte immer dasselbe und
* dann ne Menge (ersteinmal) unnützer Kram (Zeichensatz oder so).
*/
Irgendwie sind meine Hexwerte anders als deine :/
Mein Flammenschwert hat z.B.:
38,ca,c8,c8,23,15,cc,42,90,cc,38,4a,2a,34,d6,1c
Und mein Katana:
d6,99,ba,90,77,9f,ff,46,a4,e2,67,9a,9f,c4,07,d2

Irgendwie reden wir von unterschiedlichen Sachen...Ich bin per "brute force" stumpf an die Datei ran...gehe ich nach "meiner Methode" vor finden sich die selben Hex-Werte in deinen Dateien wie in meinen(geht ja auch nicht anders...sind ja dieselben Dateien)
Die von dir genannte Hex-Folge finde ich der Datei überhaupt nicht...

Ich werde das Gefühl nicht los, du öffnest die Datei mit irgendeinem Tool(scheint was mit C++ zu tun zu haben?)...
(Wollte ich NicoDE auch schon mal fragen) Wo habt ihr die "schönen Bezeichner" her? bzw. mit was öffnet/bearbeitet ihr die Dateien?
(Grundkenntnisse Programmieren sind vorhanden...nur mit C habe ich mich noch garnicht befasst...)
Gruß lichtwicht


EDIT: jetzt hab' ich's gesehen, die Bezeichner-Auflistung, ist "der Text-Müll" am Ende der Datei...ich hatte schon mal versucht da etwas zu ändern(anderen, existierenden Text reingeschrieben), dem Spiel war es aber egal...die tatsächlichen Werte müssen irgendwo anders stehen??? (allerdings ist nicht ausgeschlossen, daß ich mich "vertippt" habe, dann holt sich das Spiel offensichtlich eine "ältere" Version der Datei(statt aus .p01, die aus .p00)?)

lichtwicht
26.06.2007, 17:12
ein Hex-Vergleich folgender beider Dateien:
E:\G3OUT\Templates\Items\Items\Items_World\Tools_World_It_Saw.tple
E:\G3OUT\Templates\Items\Items\Items_Story\Tools_Story_Hatlods_Saw.tple

führte zu folgender "Erkenntnis", hier die Datei:
E:\G3OUT\Templates\Items\Items\Items_Story\Adanos_Artefacts_Story_It_Artefact_Ri ng_01.tple
http://img504.imageshack.us/img504/9812/ring01sy0.gif
dort steht das Alphabet(A..B..C....Z) dazwischen "irgendwelche" Werte, DIES müssen die Eigenschaften des Objektes sein!
Der "originale" Ring des Lebens ist KEIN MissionItem und kann daher verkauft werden! Da steht vor dem "C" "00"(false) ich habe das hier schon auf "01"(true) geändert...Ring gespawnt, zum Händler und schwupps: Im Verkaufsmenü taucht er nicht mehr auf!
(@mdahm: daran hast du doch gedacht?)

Ich habe dementsprechend mal die anderen Artefakte geändert, wenn das jemand überprüfen könnte?
Link zur Umsetzung (http://forum.worldofplayers.de/forum/showthread.php?p=3849519&#post3849519)

NicoDE
26.06.2007, 17:37
jetzt hab' ich's gesehen, die Bezeichner-Auflistung, ist "der Text-Müll" am Ende der Datei...Dieser "Text-Müll" ist einer der Schlüssel zum Lesen der Eigenschaften. Wenn man das Format vollständig analysiert hätte, könnte man einen sehr generischen Editor dafür schreiben - mit dem das Bearbeiten von Eigenschaften zum Kinderspiel würde (lang lebe der Konjunktiv).


Gruß Nico

ps: Ich habe in den nächsten Tagen sicher keine Zeit, um die Analyse abzuschließen... jemand hier, der sich bereits daran versucht hat?

MasterEvil
26.06.2007, 18:05
Mir kommt da gerade ne Idee, muss aber erst mal was futtern :D

Ganz am Anfang wird doch ne ganze Zeit hochgezählt, also es fängt bei Byte 0 an und hört irgendwann auf, die Länge steht ja bei Byte 27.
Nach der hochzählung kommt dann bestimmt nochmal genauso oft die eigentlichen Daten, vermutlich in der gleichen Reihenfolge wie später die Klassen/Attribute.

Wegen der verschiedenen Hexwerte, ich glaub das liegt am Editor!
Kann sein das deiner nur mit signed Byte arbeiten kann, die Bytes hier sind aber unsigned!
Ich benutze den XVI32 (http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm), irgendwann mal gefunden und ist ziemlich cool weil man schnell sieht was da für Werte sein könnten.

Mit C mach ich auch nix, hab da kaum Ahnung von. Die Werte lese ich mit Java aus. Solange kein Wert größer ist als signed Long hab ich da auch keine Probleme mit :D

NicoDE
26.06.2007, 18:26
Wenn eine String-Liste keine weiteren Informationen enthielte, jeder String nur einmal vorkäme, man aber davon ausginge, dass einzelne Strings öfter benötigt würden - dann könnte man vermuten, dass es irgendwo in den Datensätzen (jedem?) eine Referenz (Index) auf eben jene String-Liste gäbe...
Wenn man davon ausginge, dass eine allgemeine Lesefunktion (Basisklasse zum Einlesen von persistenten Eigenschaften) nicht die Größe aller Datensätze kennen kann - dann läge die Vermutung nahe, dass die Größe Teil jedes Datensatzes wäre...

MasterEvil
26.06.2007, 20:04
Hmpf, hab heut leider keine Zeit mehr aber hier nochmal alles zusammengefasst:


Bei Byte 10 steht die Position an der die String-Daten anfangen in UINT32
Bei Byte 23 steht wie viele Aufzählungen folgen in UINT32
Dann folgen die Aufzählungen in UINT16
Danach steht in UINT32 wieviele Bytes von jetzt an folgen, man landet dann genau auf den Punkt der schon bei Byte 10 steht


Innerhalb der eigentlichen Daten hab ich nix gefunden an das man sich orientieren könnte, fest steht dass hier nocheinmal hochgezählt wird, auch UINT16. Davor oder danach stehen dann vermutlich die Daten, jedoch ohne mir ersichtlichen Zusammenhang. Oft ungerade Bytefolgen, bei einigen garkeine und es folgt gleich die nächste Aufzählung.
Vieleicht ist doch irgendwo anders vermerkt wieviel Bytes jetzt TotalMass (z.B.) genau einnimmt. Bei int, float und bool etc. dürfte es ja klar sein.

NicoDE
26.06.2007, 20:25
Bei Byte 10 steht die Position an der die String-Daten anfangen in UINT32Sehe ich auch so. Nach dem Ende der Daten (und vor der eigentlichen String-Liste) steht immer die Kennung (UInt32)0xDEADBEEF und ein (UInt8)0x01. Danach folgt die String-Liste, die mit einer UInt16-Anzahl beginnt und direkt von den Strings[Anzahl] gefolgt wird. Ein einzelner String beginnt mit einer UInt16-Länge; gefolgt von UInt8[Länge]-Zeichen (ASCII, ohne terminierendes \0 Zeichen).

ps: die (UInt8)0x01 nach (UInt32)0xDEADBEEF ist vielleicht schon Teil der String-Liste.

MasterEvil
26.06.2007, 20:38
Ich hab noch nie mit Klassen-Templates gearbeitet, kann man davon ausgehen das diese Template einfach nur eine Klasse beschreiben und die Binär-Daten sind dann einfach nur die Initialisierungs-Werte?

Weil wenn ich bei den NPCs reingucke da steht dann was von Wegpunkte und Schlafpunkte etc.
Die müssen dann ja für jeden NPC neu gesetzt werden, also könnte man in diesen Templates doch vermutlich nur die Standard-Werte ändern und hoffen das die nicht von der Engine beim initialisieren überschrieben werden?

mdahm
26.06.2007, 20:46
(@mdahm: daran hast du doch gedacht?)

Jau, ganz genau das meinte ich! Gute Arbeit!


Ich habe dementsprechend mal die anderen Artefakte geändert, wenn das jemand überprüfen könnte?
Link zur Umsetzung (http://forum.worldofplayers.de/forum/showthread.php?p=3849519&#post3849519)

Habe heute leider keine Zeit, das selbst auszuprobieren. Vor allem müsste man mal in Ruhe überlegen, welche negativen Konsequenzen die Änderung noch haben könnte. Kann man die Artefakte noch an Innos übergeben? Haben die Gegenstände noch ihre "magische Kraft"? usw.

Anbei noch die passende Bugmeldung, die du damit vermutlich gefixt hast: 806 (http://www.worldofgothic.de/gothic3/bugtracker/view.php?id=806). :)
Verwandt damit ist auch noch Meldung 1637 (http://www.worldofgothic.de/gothic3/bugtracker/view.php?id=1637).

Ich schätze mal, dass auch die "Item-Gruppe" in den Dateien abgelegt ist. Z.B. ist "Iljas Vase" im Inventar unter "Rüstungen" abgelegt (siehe Meldung 1877 (http://www.worldofgothic.de/gothic3/bugtracker/view.php?id=1877)), und zwei weitere falsch einsortierte Items findet man hier: 1891 (http://www.worldofgothic.de/gothic3/bugtracker/view.php?id=1891).

Weitere Bugs in der Richtung kenne ich derzeit nicht "auswendig", aber wenn ich was finden sollte... ;)

lichtwicht
26.06.2007, 20:56
Dieser "Text-Müll" ist einer der Schlüssel zum Lesen der Eigenschaften.
nicht böse sein! habe aus "Frust-Gründen" etwas überspitzt!
wenn man die "StringTable" jetzt mit meinem "Alphabet" verknüpft bekäme, hätte man wahrscheinlich den EDITOR ... (lang lebe der Konjunktiv) §xlol


Bei Byte 10 steht die Position an der die String-Daten anfangen in UINT32

ahhh Byte 10 (kein Bit mehr) dem kann ich auch beipflichten!

Habe heute leider keine Zeit, das selbst auszuprobieren. Vor allem müsste man mal in Ruhe überlegen, welche negativen Konsequenzen die Änderung noch haben könnte. Kann man die Artefakte noch an Innos übergeben? Haben die Gegenstände noch ihre "magische Kraft"? usw.
§dito genau dafür fehlt mir auch die Zeit! und man müßte es machen!!!
EDIT: ich hab's mal so versucht... (http://forum.jowood.com/showthread.php?t=144683)

MasterEvil
27.06.2007, 22:22
So, nen klein bissle hab ich heute auch noch rausgefunden.
Die binären Daten am Anfang sind wohl baumähnlich aufgebaut. Wie eine Klasse eben, mit den Objekten, die dann wiederum ihre Werte etc.

Als erstes hab ich mir die Flammenschwert Datei vorgenommen und bin dann einfach mal die Aufzählungen runtergegangen, dabei ist mir dann auch erst aufgefallen das die Daten in einander hängen.

Ich hab mir dann die Datei Items\Items\Action_Items.lrtpl vorgenommen weil sie so schön klein ist :)
Der Anfang ist ein wenig anders weil diese Aufzählung nicht vorhanden ist, stattdessen wird (fast) gleich mit den Daten begonnen.
Ich hab die Datei einfach mal abgeschrieben und mir farblich makiert um einen Zusammenhang zu entdecken, das ganze sah danach so aus :cool:
http://fooyou.eu/mirror/aufbau.jpg

Hier kann man schon gut erkennen das Object 01 und Object 02 in Object 00 enthalten sind. Wo Object 03 und 04 nun genau hin gehört weiß ich noch nicht so genau.
Die Bytefolge 30 00 (E1 00) steht immer vor einer UINT32 Angabe zur Länge der darauf folgenden Objecte/Werte/Bytes ?!?

NicoDE
27.06.2007, 22:36
239, 190, 173, 222 (0xDEADBEEF) ist eine Kennung die nach den Daten kommen muss (wenn man nur diesen Wert ändert, dann spuckt die Engine eine entsprechende Fehlermeldung im zSpy aus). Alles danach habe ich oben bereits beschrieben (0x01, Stringanzahl, [Länge, String]).

ps: der erste String in der Liste ist (fast?) immer "" (Länge 0).

MasterEvil
27.06.2007, 22:40
Ja, das mit den Strings am Ende ist ja klar, unbekannt hab ich da nur weil ich ja nich weiß was es ganz genau bedeuten soll.
Aber die Bezeichner sind ja erstmal garnicht so interessant, die eigentlich Daten dazu sind ja das interessante. Jetzt muss ich nur noch rauskriegen wie man die richtig einliest ... §gnah


[EDIT]
Ah OK jetzt hab ichs verstanden, die Anzahl der folgenden Strings ist da auch noch als UINT32 vermerkt ;)


[NOCHMAL EDIT]

Was meint ihr, könnte die Datei Items\Items\Action_Items.lrtpl als Template etwa folgenden Code darstellen?

class gCTemplateLayer {

bTPOSmartPtr<class gCSector> SectorPtr() {
return null;
}

bool IsPersistable() {
return true;
}
}

NicoDE
28.06.2007, 13:47
Um die Funktionsweise der String-Liste zu verdeutlichen, vergleiche ich hier als Beispiel zwei sehr einfache Template-Layer. Eines mit reinen Daten und eines im "Archiv"-Format (wie ich es mal eben nenne).

1) Camera.lrtpl
01 00 01 01 00 01
000F 'gCTemplateLayer'
01 00 00 52 00 52 00 53 00 00 00
001E 00000002
0009 'SectorPtr'
001C 'bTPOSmartPtr<class gCSector>'
001E 00000000
000D 'IsPersistable'
0004 'bool'
001E 00000001
01 01 00
2) Action_Items.lrtpl
'GENOMFLE'
01 00
0000003E // -> EOD (absolute)

01 00 01 01 00 01
0000 // -> String[0]
01 00 00 53 00 53 00 1D 00 00 00
001E 00000002
0001 // -> String[1]
0002 // -> String[2]
001E 00000000
0003 // -> String[3]
0004 // -> String[4]
001E 00000001
01 01 00

DEADBEEF // Magic value
01
00000005 // String count
000F 'gCTemplateLayer' // String[0]
0009 'SectorPtr' // String[1]
001C 'bTPOSmartPtr<class gCSector>' // String[2]
000D 'IsPersistable' // String[3]
0004 'bool' // String[4]Man kann gut erkennen, dass es sich fast um die selben Daten handelt. Nur mit dem Unterschied, das beim 'GENOMFLE'-Format mit Indizes in eine String-Tabelle gearbeitet wird, anstatt die Strings jedes mal an die entprechende Stelle zu schreiben.

mdahm
29.06.2007, 00:23
Ich muss gestehen: Einen Großteil eurer Erkenntnisse verstehe ich leider nicht (teilweise eine fachsprachliche Barriere). Bei der Beschäftigung mit dem Item "Schwarzer Rhobar" habe ich allerdings durch Vergleiche mit anderen Items eine Teil-Erkenntnis gewonnen, die ich gerne zum Besten geben möchte.
Es geht darum, wie bei Pflanzen, Nahrungsmitteln und anderen Items (z.B. besagtem "It-Joint") abgelegt ist, welche Wirkung sie haben. Ob ihr etwas damit anfangen könnt oder das ganze sowieso schon kennt, kann ich nicht beurteilen.
Also: Das Attribut, das von dem Item modifiziert wird, ist in den Item-Templates hinter dem String "ModAttrib1Tag" zu finden. Dort steht in Klartext "HP", "SP", "DEX" o.ä. (wie offenbar üblich mit Längenangabe vorneweg).
Kurz dahinter folgen die Texte "AttribModOperation" und "ModAttrib1Value", bevor es mit dem zweiten Attribut weitergeht, das modifiziert wird ("ModAttrib2Tag") etc.

Der "Value" gibt an, um wieviele Punkte oder Prozent das Attribut verändert werden soll, und "Operation" gibt an, auf welche Weise diese Value mit dem bisherigen Wert des Attributes verrechnet werden soll. Sprich: Sollen soundsoviel Punkte addiert werden oder soundsoviel Prozent, und bei schwankenden Daten wie Lebensenergie (etc.) wird noch angegeben, ob die derzeitige oder die maximale Lebensenergie (etc.) verändert werden soll.
Bei Geschicklichkeit, Intelligenz usw. gibt es da natürlich keinen Unterschied.

Die eigentlichen Werte der Operation und Value stehen etwa im Bereich um Hex(870) herum. Dort findet sich (immer?) die hexadezimale Ziffenfolge 005F 0060. Die Ziffer 0061 hat offenbar eine besondere Bedeutung, da sie in der Datei immer wieder vorkommt. Nach der "0061" ist stets die Operation codiert.
Von der 0061 aus gesehen befindet sich die Operation dort:
0061 001E 0006 0000 0001 0000 0000
Der Wertebereich ist:
00 - Der Value wird absolut zum momentanen Wert des Attributes addiert ("Auffüllen")
01 - Der Value wird absolut zum maximalen Wert des Attributes addiert
02 - Der Value wird in Prozent zum momentanen Wert des Attributes addiert
03 - Der Value wird in Prozent zum maximalen Wert des Attributes addiert
["03" wird im Spiel meines Wissens nirgendwo genutzt, funktioniert aber]
Die nächste Angabe nach der 0061 ist dann der Value. Auch hier ein Beispiel:
0062 0010 001E 0004 0000 0014 0000
In diesem Fall ist der Value also Hex(14) = 20.

Die Hex-Zahl 0062 taucht im Gegensatz zur 0061 nur einmal auf. Der nächste value findet sich nach der nächsten 0061er-Angabe und könnte zum Beispiel mit 0066 eingeleitet werden.

Items, die mehrere Attribute verändern (Ausdauer und Mana o.ä.), sind nach der ersten Value-Angabe ein wenig anders codiert als Items, die nur ein Attribut verändern. Es ist also nicht ganz trivial, einem solchen Gegenstand ein weiteres ModAttrib hinzuzufügen. Es gibt insgesamt noch reichlich zu forschen... :)


P.S.: Dass der "Schwarze Rhobar" bisher einen Großteil der Ausdauer abzieht, statt 5 Einheiten hinzuzufügen, lag an der (offenbar ungültigen?) Operation "04". Im nächsten Fix wird eine korrigierte Fassung veröffentlicht.

NicoDE
29.06.2007, 07:26
Danke für deine Informationen.
Die Ziffer 0061 hat offenbar eine besondere Bedeutung, da sie in der Datei immer wieder vorkommt. Nach der "0061" ist stets die Operation codiert.0x61 ist in dieser Datei der String-Index für bTPropertyContainer<enum EAttribModOperation>. Er taucht öfter auf, weil dieser Typ eben öfter verwendet wird.

Hier die komplette String-Liste dieser Datei:
0000 = Miscellaneous_World_It_Joint.tple
0001 = It_Joint
0002 = eCVisualMeshDynamic_PS
0003 = ResourceFilePath
0004 = bCMeshResourceString
0005 = G3_Item_Smoke_Joint_01.xcmsh
0006 = ResourceFileName
0007 = StaticLightingType
0008 = bTPropertyContainer<enum eEStaticLighingType>
0009 = LightmapAmbientOcclusion
000A = bTPropertyContainer<enum eELightmapAmbientOcclusion>
000B = LightmapType
000C = bTPropertyContainer<enum eELightmapType>
000D = UnitsPerLightmapTexel
000E = float
000F = MaterialSwitch
0010 = int
0011 = eCRigidBody_PS
0012 = TotalMass
0013 = MassSpaceInertia
0014 = bCVector
0015 = StartVelocity
0016 = StartAngularVelocity
0017 = StartForce
0018 = StartTorque
0019 = WakeUpCounter
001A = LinearDamping
001B = AngularDamping
001C = MaxAngularVelocity
001D = CenterOfMass
001E = CCDMotionTreshold
001F = BodyFlag
0020 = bTPropertyContainer<enum eERigidbody_Flag>
0021 = PhysicsEnabled
0022 = bool
0023 = eCCollisionShape_PS
0024 = Group
0025 = bTPropertyContainer<enum eECollisionGroup>
0026 = Range
0027 = bTPropertyContainer<enum eEPhysicRangeType>
0028 = DisableCollision
0029 = DisableResponse
002A = IgnoredByTraceRay
002B = eCCollisionShape
002C = ShapeType
002D = bTPropertyContainer<enum eECollisionShapeType>
002E = bTPropertyContainer<enum eEShapeGroup>
002F = Material
0030 = bTPropertyContainer<enum eEShapeMaterial>
0031 = ShapeAABBAdaptMode
0032 = bTPropertyContainer<enum eEShapeAABBAdapt>
0033 = EnableCCD
0034 = OverrideEntityAABB
0035 = TriggersOnTouch
0036 = TriggersOnUntouch
0037 = TriggersOnIntersect
0038 = SkinWidth
0039 = IsLazyGenerated
003A = FileVersion
003B = short
003C = G3_Item_Smoke_Joint_01_CV.xnvmsh
003D = gCItem_PS
003E = Amount
003F = long
0040 = Quality
0041 = GoldValue
0042 = MissionItem
0043 = Permanent
0044 = Category
0045 = bTPropertyContainer<enum gEItemCategory>
0046 = Texture
0047 = bCString
0048 = IT_Joint.tga
0049 = Dropped
004A = ItemWorld
004B = eCTemplateEntityProxy
004C = ItemInventory
004D = ArmorSet
004E = Spell
004F = Skill
0050 = Robe
0051 = ReqAttrib1Tag
0052 =
0053 = ReqAttrib1Op
0054 = bTPropertyContainer<enum EAttribReqOperation>
0055 = ReqAttrib1Value
0056 = ReqAttrib2Tag
0057 = ReqAttrib2Value
0058 = ReqAttrib3Tag
0059 = ReqAttrib3Value
005A = ReqAttrib4Tag
005B = ReqAttrib4Value
005C = RequiredSkill1
005D = RequiredSkill2
005E = ModAttrib1Tag
005F = SP
0060 = ModAttrib1Op
0061 = bTPropertyContainer<enum EAttribModOperation>
0062 = ModAttrib1Value
0063 = ModAttrib2Tag
0064 = MP
0065 = ModAttrib2Op
0066 = ModAttrib2Value
0067 = ModAttrib3Tag
0068 = ModAttrib3Op
0069 = ModAttrib3Value
006A = ModAttrib4Tag
006B = ModAttrib4Op
006C = ModAttrib4Value
006D = ModAttrib5Tag
006E = ModAttrib5Op
006F = ModAttrib5Value
0070 = ModAttrib6Tag
0071 = ModAttrib6Op
0072 = ModAttrib6Value
0073 = ActivateSkill1
0074 = ActivateSkill2
0075 = gCInteraction_PS
0076 = FocusPriority
0077 = bTPropertyContainer<enum gEFocusPriority>
0078 = Owner
0079 = eCEntityProxy
007A = User
007B = UseType
007C = bTPropertyContainer<enum gEUseType>
007D = ScriptUseFunc
007E = AnchorPoint
007F = FocusNameType
0080 = bTPropertyContainer<enum gEFocusNameType>
0081 = FocusNameBone
0082 = Head_Head_End
0083 = FocusViewOffset
0084 = FocusWorldOffset
0085 = UsedByPlayer
0086 = EnterROIScript
0087 = ExitROIScript
0088 = eCIlluminated_PS
0089 = EnableDynamicLighting
008A = EnableAmbient
008B = StaticIlluminated
008C = bTPropertyContainer<enum eEStaticIlluminated>
008D = CastShadows
008E = ReciveShadows
008F = DirectionalShadowType
0090 = bTPropertyContainer<enum eEDirectionalShadowType>
0091 = ReciveTreeShadows
0092 = CastStaticShadows
0093 = ReciveStaticShadowsDer einzige Unterschied zwischen uns beiden ist, dass du primär versuchst Werte zu finden, während ich in erster Linie nach allgemeinen Strukturen suche (um dann jeden Wert zu finden).

Hier die komplette Aufschlüsselung des entsprechenden Datenblocks:
005E // "ModAttrib1Tag"
0047 // "bCString"
001E 00000002 005F // "SP"

0060 // "ModAttrib1Op"
0061 // "bTPropertyContainer<enum EAttribModOperation>"
001E 00000006 0001 00000004 // EOp_SetVal

0062 // "ModAttrib1Value"
0010 // "int"
001E 00000004 00000005 // 5


0063 // "ModAttrib2Tag"
0047 // "bCString"
001E 00000002 0064 // "MP"

0065 // "ModAttrib2Op"
0061 // "bTPropertyContainer<enum EAttribModOperation>"
001E 00000006 0001 00000002 // EOp_AddPercentageToVal

0066 // "ModAttrib2Value"
0010 // "int"
001E 00000004 00000014 // 20


0067 // "ModAttrib3Tag"
0047 // "bCString"
001E 00000002 0052 // ""

0068 // "ModAttrib3Op"
0061 // "bTPropertyContainer<enum EAttribModOperation>"
001E 00000006 0001 00000000 // EOp_AddToVal

0069 // "ModAttrib3Value"
0010 // "int"
001E 00000004 00000000 // 0Oder im "C++"-Stil geschrieben:
bCString ModAttrib1Tag = "SP";
bTPropertyContainer<enum EAttribModOperation> ModAttrib1Op = EOp_SetVal;
int ModAttrib1Value = 5;

bCString ModAttrib2Tag = "MP"
bTPropertyContainer<enum EAttribModOperation> ModAttrib2Op = EOp_AddPercentageToVal;
int ModAttrib2Value = 20;

bCString ModAttrib3Tag = "";
bTPropertyContainer<enum EAttribModOperation> ModAttrib3Op = EOp_AddToVal;
int ModAttrib3Value = 0;Es wäre also gar nicht so schwer, auch die dritte bis sechste Attribut-Operation zu ändern.

Wenn man also die String-Indizes von "ModAttrib1Op" und "bTPropertyContainer<enum EAttribModOperation>" kennt, kann man dessen Daten mit ziemlich großer Sicherheit finden - auch ohne das gesamte Format zu kennen (Suche nach: <Name-Index>, <Typ-Index>, 0x001E (, <Datenlänge>, <Daten>)).


Gruß Nico

NicoDE
29.06.2007, 11:11
Dass der "Schwarze Rhobar" bisher einen Großteil der Ausdauer abzieht, statt 5 Einheiten hinzuzufügen, lag an der (offenbar ungültigen?) Operation "04".Die Operation ist nicht ungültig, sondern bedeutet "Setze den Wert auf" (EOp_SetVal).

Da sich nun fast alle relevanten Eigenschaften lesen lassen, hier eine Liste der Aufzählungen, die vom Item-PropertySet (gCItem_PS) verwendet werden:


EAttribModOperation {
EOp_AddToVal = 0,
EOp_AddToMax = 1,
EOp_AddPercentageToVal = 2,
EOp_AddPercentageToMax = 3,
EOp_SetVal = 4,
EOp_SetMax = 5,
EOp_SetValToPercentage = 6,
EOp_SetMaxToPercentage = 7,
EOp_SetValToMax = 8
}


EAttribReqOperation {
EOp_ValGreaterEqual = 0,
EOp_MaxGreaterEqual = 1,
}


gEItemCategory {
gEItemCategory_None = 0,
gEItemCategory_Weapon = 1,
gEItemCategory_Armor = 2,
gEItemCategory_Artefact = 3,
gEItemCategory_Alchemy = 4,
gEItemCategory_Empty_A = 5,
gEItemCategory_Misc = 6,
gEItemCategory_Written = 7,
gEItemCategory_Empty_B = 8,
gEItemCategory_Spellbook = 9,
gEItemCategory_Skill = 10
//gEItemCategory_Count = 11
}


gEFocusNameType {
gEFocusNameType_Skeleton = 0,
gEFocusNameType_Entity = 1,
gEFocusNameType_Bone = 2,
gEFocusNameType_Disable = 3
}


gEFocusPriority {
gEFocusPriority_None = 0,
gEFocusPriority_Normal = 1,
gEFocusPriority_High = 2
}


gEUseType {
gEUseType_None = 0,
gEUseType_Action = 1,
gEUseType_1H = 2,
gEUseType_2H = 3,
gEUseType_Arrow = 4,
gEUseType_Bow = 5,
gEUseType_CrossBow = 6,
gEUseType_Bolt = 7,
gEUseType_Fist = 8,
gEUseType_Shield = 9,
gEUseType_Armor = 10,
gEUseType_Helmet = 11,
gEUseType_Staff = 12,
gEUseType_Amulet = 13,
gEUseType_Ring = 14,
gEUseType_Cast = 15,
gEUseType_Potion = 16,
gEUseType_Plant = 17,
gEUseType_Meat = 18,
gEUseType_Fruit = 19,
gEUseType_Bread = 20,
gEUseType_Bottle = 21,
gEUseType_Cup = 22,
gEUseType_Bowl = 23,
gEUseType_Torch = 24,
gEUseType_Alarmhorn = 25,
gEUseType_Broom = 26,
gEUseType_Brush = 27,
gEUseType_Lute = 28,
gEUseType_Rake = 29,
gEUseType_TrophyTeeth = 30,
gEUseType_Valuable = 31,
gEUseType_Smoke = 32,
gEUseType_OrcPipe = 33,
gEUseType_Scoop = 34,
gEUseType_Stick = 35,
gEUseType_Shovel = 36,
gEUseType_Hammer = 37,
gEUseType_Fan = 38,
gEUseType_Pan = 39,
gEUseType_Saw = 40,
gEUseType_TrophySkin = 41,
gEUseType_Map = 42,
gEUseType_Book = 43,
gEUseType_Letter = 44,
gEUseType_Key = 45,
gEUseType_Lockpick = 46,
gEUseType_CarryFront = 47,
gEUseType_CarryShoulder = 48,
gEUseType_Pickaxe = 49,
gEUseType_TrophyFur = 50,
gEUseType_Halberd = 51,
gEUseType_Axe = 52,
gEUseType_ITEM_E = 53,
gEUseType_Modify = 54,
gEUseType_PhysicalFist = 55,
gEUseType_ITEM_H = 56,
gEUseType_Anvil = 57,
gEUseType_Forge = 58,
gEUseType_GrindStone = 59,
gEUseType_Cauldron = 60,
gEUseType_Barbecue = 61,
gEUseType_Alchemy = 62,
gEUseType_Bookshelf = 63,
gEUseType_Bookstand = 64,
gEUseType_TakeStone = 65,
gEUseType_DropStone = 66,
gEUseType_PickOre = 67,
gEUseType_PickGround = 68,
gEUseType_DigGround = 69,
gEUseType_Field = 70,
gEUseType_Repair = 71,
gEUseType_SawLog = 72,
gEUseType_Lumberjack = 73,
gEUseType_Bed = 74,
gEUseType_SleepGround = 75,
gEUseType_CleanFloor = 76,
gEUseType_Dance = 77,
gEUseType_FanBoss = 78,
gEUseType_Boss = 79,
gEUseType_Throne = 80,
gEUseType_Pace = 81,
gEUseType_Bard = 82,
gEUseType_Stool = 83,
gEUseType_Bench = 84,
gEUseType_Waterpipe = 85,
gEUseType_WaterBarrel = 86,
gEUseType_PirateTreasure = 87,
gEUseType_Campfire = 88,
gEUseType_SitCampfire = 89,
gEUseType_SitGround = 90,
gEUseType_Smalltalk = 91,
gEUseType_Preach = 92,
gEUseType_Spectator = 93,
gEUseType_Stand = 94,
gEUseType_Guard = 95,
gEUseType_Trader = 96,
gEUseType_Listener = 97,
gEUseType_OrcDance = 98,
gEUseType_Stoneplate = 99,
gEUseType_OrcDrum = 100,
gEUseType_Door = 101,
gEUseType_OrcBoulder = 102,
gEUseType_EatGround = 103,
gEUseType_DrinkWater = 104,
gEUseType_Pee = 105,
gEUseType_Chest = 106,
gEUseType_Shrine = 107,
gEUseType_AttackPoint = 108,
gEUseType_Roam = 109,
gEUseType_BODY_A = 110,
gEUseType_Beard = 111,
gEUseType_Hair = 112,
gEUseType_Head = 113,
gEUseType_Body = 114,
gEUseType_Flee = 115,
gEUseType_Talk = 116
}

MasterEvil
29.06.2007, 12:35
... Oder im "C++"-Stil geschrieben ...

Ahhh :)
Besten Dank, jetzt hab ich wenigstens ne Vorstellung wie das ganze im Endeffekt auszusehen hat!
Ich hatt die ganze Zeit irgendwie versucht das in einen Baum zu packen :/
Hatte auch teilweise irgendwie funktioniert aber immer wenn nach meiner Meinung eine Klasse zuende war dann kam ein Stück komischer Code/Bytes.
In diesem Code kam so gut wie immer die Bytefolge (Hex) "0 1 0 1 1 0 1" bzw. "53 0 53 0" und 2x der Index für ein String-Element vor.

Zum Glück ist ja in ein paar Stunden endlich Wochenende ;)

NicoDE
29.06.2007, 13:02
Nunja, bisher kann ich nur die nativen Eigenschaften innerhalb eines PS komplett beschreiben (keine Unterklassen/PS). Die entsprechenden Werte (welche ein PS selbst beschreiben) haben sich mir noch nicht erschlossen (habe auch kaum Zeit dafür :)).

Erstmal sind die aktuellen Informationen ausreichend, um ein gCItem_PS komplett auszulesen. Alles mit NAME TYPE 001E SIZE DATA lässt sich jetzt lesen (und ändern). Das dürfte erstmal reichen, um viele Probleme zu beheben.

Es wäre natürlich sehr hilfreich, wenn sich jemand aus der "Taskforce" melden würde, und kurz beschreibt, wie die Daten eingelesen werden :)

Hans Trapp
29.06.2007, 20:23
Nunja, bisher kann ich nur die nativen Eigenschaften innerhalb eines PS komplett beschreiben (keine Unterklassen/PS). Die entsprechenden Werte (welche ein PS selbst beschreiben) haben sich mir noch nicht erschlossen (habe auch kaum Zeit dafür :)).

Erstmal sind die aktuellen Informationen ausreichend, um ein gCItem_PS komplett auszulesen. Alles mit NAME TYPE 001E SIZE DATA lässt sich jetzt lesen (und ändern). Das dürfte erstmal reichen, um viele Probleme zu beheben.

Es wäre natürlich sehr hilfreich, wenn sich jemand aus der "Taskforce" melden würde, und kurz beschreibt, wie die Daten eingelesen werden :)

Ich denke, dass das möglich wäre, sobald man den Sourcecode in den Händen hat. Da dies aber meines Wissens nach noch bei niemanden der Fall ist, wird sich hierzu wohl auch noch niemand äußern können.

Gruß

Hans Trapp

MasterEvil
29.06.2007, 20:37
Ich werde jetzt einfach nen kleinen Editor basteln mit dem man eben nur die Werte der Eigenschaften ändern kann.
Mehr braucht man ja im Moment auch erstmal nicht, so wie Nico schon sagte!

NicoDE
29.06.2007, 21:49
Ich denke, dass das möglich wäre, sobald man den Sourcecode in den Händen hat.Ich möchte gar nicht den Quelltext. Sondern nur die Bestätigung, dass 0053 0053 001D einfach die Versionsnummern der gCTemplateLayer-Klasse (und deren Basisklassen) sind ;)
Wie auch immer. Man kann konstante Werte ja ohne Weiteres ignorieren... Aber das bedeutet, dass man die Analyse automatisiert über alle relevanten Daten laufen lassen muss. Es ginge deutlich schneller, wenn die Information "bereitgestellt" würde; als jedes Mal ein mühsam erstelltes Analyse-Skript durch alle Daten laufen zu lassen (nur um festzustellen, dass es sich um eine "Konstante" handelt, deren Bedeutung nicht klar ist :)).

General_Martok
30.06.2007, 00:18
Ich möchte gar nicht den Quelltext. Sondern nur die Bestätigung, dass 0053 0053 001D einfach die Versionsnummern der gCTemplateLayer-Klasse (und deren Basisklassen) sind ;)
Wie auch immer. Man kann konstante Werte ja ohne Weiteres ignorieren... Aber das bedeutet, dass man die Analyse automatisiert über alle relevanten Daten laufen lassen muss. Es ginge deutlich schneller, wenn die Information "bereitgestellt" würde; als jedes Mal ein mühsam erstelltes Analyse-Skript durch alle Daten laufen zu lassen (nur um festzustellen, dass es sich um eine "Konstante" handelt, deren Bedeutung nicht klar ist :)).

Stimm die voll und ganz zu,
ohne die bestätigte Erkenntnis wie etwas funktioniert bzw. was was macht - ist ein editieren ein unendliches Spiel ;) -

@NicoDE
Vielen Dank das du so hinter der Struktur her bist thx.

Ohne konkrete Erkenntnis ist es fast Sinnlos, sich an eine vernünftige Editorfunktion zu wagen - thx

mdahm
30.06.2007, 11:54
Der einzige Unterschied zwischen uns beiden ist, dass du primär versuchst Werte zu finden, während ich in erster Linie nach allgemeinen Strukturen suche (um dann jeden Wert zu finden).

Das ist sehr nett formuliert, vielen Dank.
Ich sag's aber mal mit meinen Worten: Der Unterschied zwischen uns ist, dass du die Dinge verstehst, während ich nur mehr oder weniger mit try and error rumhacke. :)
Daher: Vielen Dank für deine weiteren Analysen!


Hier die komplette String-Liste dieser Datei:

Kannst du eine Methode (eine Art Viewer-exe) zur Verfügung stellen, die die Dateien so gegliedert ausliest? (meinetwegen in eine .txt-Datei) Das würde bei bestimmten kleinen Bugs schon sehr weiterhelfen - auch ohne Editor.


Es wäre natürlich sehr hilfreich, wenn sich jemand aus der "Taskforce" melden würde, und kurz beschreibt, wie die Daten eingelesen werden

Ich gehe davon aus, dass du mit deinen Erkenntnissen der "Taskforce" bis auf Weiteres weit voraus bist. :)


Edit: Eine Frage zu einem konkreten Bug hätte ich da gerade noch...
Es geht darum, dass die Spruchrolle "Flammenschwert rufen" nie verbraucht wird (die Stückzahl wird nicht reduziert). Ich hatte zunächst vermutet, dass in der Datei _Scrolls_Innos_Story_It_Scroll_Flamesword.tple einfach der Eintrag bei "Permanent" nicht korrekt ist o.ä. Das erwies sich leider als falsch.
Seltsamerweise wurde die Anzahl dann schließlich reduziert, als ich Paramter 4E (Spell) (=ab Byte 7B8) mit einem anderen Eintrag überschrieb (probeweise habe ich dafür die Daten des Feuerballs übernommen).
Dadurch wurde natürlich auch die komplette Funktionsweise der Schriftrolle ausgetauscht - man verschoss nun also mit der Spruchrolle "Flammenschwert rufen" Feuerbälle.
Nun also die Frage: Haben wir es bei dem "Anzahl wird nicht reduziert"-Bug mit einem Engine-Problem zu tun? Wenn nicht: Habt ihr einen Tipp, in welcher anderen Datei festgehalten ist, ob sich die Anzahl reduziert?

Danke! :)

Hans Trapp
30.06.2007, 13:33
@NicoDE
Ich denke, dass man davon ausgehen kann, dass 0053 0053 00 1D die Versionsnummern der gCTemplateLayer-Klasse und deren Basisklassen sind.
Grund der Annahme ist, dass in allen folgenden Dateien diese Hexfolge zu finden ist:

Search criteria:
Binary Data:

Search data:

0000530053001D

Ergebnisse:




F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Scrol ls_Adanos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Scrol ls_Beliar_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Scrol ls_Innos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Spell s_Adanos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Spell s_Beliar_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Spell s_Innos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_1H_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_2H_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Axes_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Bows_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Crossbows_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Shields_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Staffs_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Adanos _Artefacts_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Animal _Trophies_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\ArmorI tems_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Artefa cts_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Druids tones_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Food_S tory.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Helmet s_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Keys_S tory.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Maps_S tory.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Miscel laneous_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Missio n_Items_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Plants _Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Potion s_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Achemy_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Arrows_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Cook_Brew_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Smith_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Telepo rts_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Temple keys_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Tools_ Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Valuea bles_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Writte n_Story.lrtpl
TOTAL: 35 files found




Und wenn man die Suche über den gesamten Template-Item-Folder ausführt, dann kommt das folgende Ergebnis zustande:




F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Action_Items.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\FakeItems.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Skills\Items _Skills_Passive\Items_Skills_ALC.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Skills\Items _Skills_Passive\Items_Skills_DEX.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Skills\Items _Skills_Passive\Items_Skills_INT.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Skills\Items _Skills_Passive\Items_Skills_MISC.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Skills\Items _Skills_Passive\Items_Skills_SMT.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Skills\Items _Skills_Passive\Items_Skills_STR.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Skills\Items _Skills_Passive\Items_Skills_THF.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Scrol ls_Adanos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Scrol ls_Beliar_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Scrol ls_Innos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Spell s_Adanos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Spell s_Beliar_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Spell s_Innos_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_1H_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_2H_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Axes_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Bows_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Crossbows_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Shields_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\_Weapo ns_Staffs_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Adanos _Artefacts_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Animal _Trophies_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\ArmorI tems_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Artefa cts_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Druids tones_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Food_S tory.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Helmet s_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Keys_S tory.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Maps_S tory.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Miscel laneous_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Missio n_Items_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Plants _Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Potion s_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Achemy_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Arrows_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Cook_Brew_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Recipe _Smith_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Telepo rts_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Temple keys_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Tools_ Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Valuea bles_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_Story\Writte n_Story.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\_Weapo ns_1H_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\_Weapo ns_2H_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\_Weapo ns_Axes_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\_Weapo ns_Bows_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\_Weapo ns_Crossbows_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\_Weapo ns_Shields_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\_Weapo ns_Staffs_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\Animal _Trophies_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\Food_W orld.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\Keys_W orld.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\Miscel laneous_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\Plants _World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\Tools_ World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Items_World\Valuea bles_World.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Z_TestItems\HoshiT est_Items.lrtpl
F:\Spiele\Programme\JoWood\Gothic3\Data\Templates\Items\Items\Z_TestItems\MikeTe st.lrtpl
TOTAL: 60 files found (6 other files without matches not listed)



Gruß

Hans Trapp

MasterEvil
30.06.2007, 17:12
@Nico, wie hast du eigentlich die ganzen ENUM's zusammenbekommen?
Die hast du doch nicht per Hand zugeordnet oder?
Die anderen ENUM's wären nämlich auch noch total interessant :)

Ps. nen sehr einfach gehaltenen Editor werd ich heute Abend/Nacht vermutlich schonmal online stellen zum ausprobieren.

Hans Trapp
30.06.2007, 18:29
Für Adanos Krone sollte ein Teil der ENUM's so aussehen:




bCString ModAttrib1Tag = "PROT_BLADE";
bTPropertyContainer<enum EAttribModOperation> ModAttrib1Op = EOp_SetVal;
int ModAttrib1Value = 40;


bCString ModAttrib2Tag = "PROT_IMPACT";
bTPropertyContainer<enum EAttribModOperation> ModAttrib2Op = EOp_SetVal;
int ModAttrib2Value = 40;


bCString ModAttrib3Tag = "PROT_MISILLE";
bTPropertyContainer<enum EAttribModOperation> ModAttrib3Op = EOp_SetVal;
int ModAttrib3Value = 40;


bCString ModAttrib4Tag = "?";
bTPropertyContainer<enum EAttribModOperation> ModAttrib4Op = EOp_SetVal;
int ModAttrib4Value = ?;


bCString ModAttrib5Tag = "?";
bTPropertyContainer<enum EAttribModOperation> ModAttrib5Op = EOp_SetVal;
int ModAttrib5Value = ?;

bCString ModAttrib6Tag = "?";
bTPropertyContainer<enum EAttribModOperation> ModAttrib6Op = EOp_SetVal;
int ModAttrib6Value = ?;



Bei den Fragezeichen bin ich mit nicht sicher, ob es hierfür überhaupt Werte gibt, da die Krone ja nur drei Schutzwerte hat.

Gruß

Hans Trapp

MasterEvil
30.06.2007, 18:46
Ja, wo die Enums zugeordnet werden weiß ich, ich weiß nur nicht woher man weiß dass EOp_SetVal == 4 ist.
Oder noch besser, dass 4 == SetVal ist :D

Hans Trapp
30.06.2007, 19:11
Ja, wo die Enums zugeordnet werden weiß ich, ich weiß nur nicht woher man weiß dass EOp_SetVal == 4 ist.
Oder noch besser, dass 4 == SetVal ist :D

Kennst Du alle Zuordnungen? Falls ja, dann teile es doch bitte mit.
"Geben ist doch seeliger als nehmen" :D . Oder anders herum... wir haben doch ein gemeinsames Ziel, oder nicht?

§wink

Ich habe da eine Vermutung, oder mehr als eine Vermutung, wie man den
"bTPropertyContainer<enum EAttribModOperation>"
eingrenzen kann. Somit sollten die Werte zuordenbar sein.

MasterEvil
30.06.2007, 20:05
Ich fasse mal nochmal die Erkenntnisse zusammen wie ich die tple-Dateien grundsätzlich einlese.
Wenn nicht gerade irgendwelche Versionsbedingten Änderungen oder ähnlich einem dazwischen kreuzen.:D

Die Struktur
=========
An Position 10 steht in UINT32 die Position wo die Struktur beginnt.
Was ab hier die ersten 9 Byte ganz genau angeben weiß ich nicht, diese kann man aber überspringen. Dann 9 Bytes weiter kann man ganz einfach anfangen die Struktur zu lesen, die Struktur zieht sich bis zum Dateiende hin fort.
Es folgen also immer UINT16 die Länge des Strings und danach der String.
Die Strings sind in nummerierter Folge aufgelistet, die Nummerierung beginnt bei 0

Die Daten
=======
An Position 27 steht die Länge der Nummerierungen also die Anzahl der Strings. Jede Nummerierung ist in UINT16.
Von Position 27 aus springt man die Anzahl der Nummerierungen*2 + 12 Bytes weiter. Hier kann man jetzt die Kennung des Items einlesen (16 Bytes).
Danach überspringt man wiederum 520 Bytes und ist jetzt genau an der Stelle wo die UINT16 Nummerierung der ersten Gruppe/Klasse steht.
Danach überspring man wieder 21 Bytes, die nächsten 4 Bytes (UINT32) besagen wieviele Eigenschaften diese Gruppe/Klasse hat.
Danach folgt die String-Kennung (UINT32) der ersten Eigenschaft gleich gefolgt von der String-Kennung (UINT32) des Rückgabetyps.
Dann folgen 2 Bytes die immer 1E 00 sind. Die nächsten 4 Bytes (UINT32) geben die Länge des Rückgabewertes an der gleich drauf folgt.
Das ganze geht jetzt immer so weiter: Eigenschaft / Rückgabetyp / Rückgabewert
So oft wie am Anfang hinter der Klasse in UINT32 stand.

Danach kommt ne Menge Byte-Kram :)
Ich suche jetzt immer weiter bis ich die Bytereihenfolge DE C0 AD finde.
Nach AD überspringt man noch weitere 7 Bytes und ist jetzt bei der String-Kennung der nächsten Gruppe/Klasse. Ab hier geht alles wieder genauso weiter wie oben^

Hans Trapp
30.06.2007, 20:40
@MasterEvil.
Muß mal sehen wie ich Deine Angaben verarbeiten kann.
Hast Du ICQ? Falls ja, würdest Du mir die Nummer per PN zukommen lassen?

Hier, was mir aufgefallen ist.

So wie es ausieht steht der Wert, der hier durch



ModAttrib<x>Op = EOp_SetVal

zugeordnet wird immer auf dem 24. Byte nach dem 0x62 bzw.- 0x61-Wert



00 62 00 1E 00 06 00 00 00 01 00 00 00 00 00 6B 00 11 00 1E 00 04 00 00 00 28



0x61 bzw. 0x62 representieren den String für
"bTPropertyContainer<enum EAttribModOperation>", aber auch für
"bTPropertyContainer<enum EAttribReqOperation>" usw.

Und zwar nach den 4x"00 FF FF FF FF"-Werten und vor den "FF FF FF FF FF FF FF FF EF BE AD DE"-Werten

Wenn man dies in die Struktur reinbekommt, die Du kennst, dann haben wir (fast) alles.

Gruß

Hans Trapp

MasterEvil
30.06.2007, 23:29
ICQ hab ich nicht aber ich könnte mich morgen dazu durchringen mal in den IRC-Channel zu kommen :)

Mein Editor schaff ich heute doch noch nicht ganz fertig, sind zwar nur noch Kleinigkeiten aber ich will ja auch nicht die totale Bug-Schleuder hier präsentieren :D

Nochmal zu den Enums, ausgelsen bekomm ich die ja ohne Probleme. Ich weiß nur nicht welche Bedeutung die Werte haben.
Nico hat die Enums für die Item-Gruppe ja so schön zusammengestellt, das wollt ich eigentlich wissen wie er das hinbekommen hat.
Weil ich jetzt zum Beispiel "ValToPercentage" in keiner Datei finden kann und irgendwie glaub ich nich das Nico die alle per Hand ausgetestet hat.

Hans Trapp
01.07.2007, 00:00
Ach ja, das ist zwar etwas off topic, aber hatte PB vor Knochenbrüche in G3 einzubauen?



..PhysicsControled..
ConstrainRootToWorld..
InterBoneCollision..SkeletonCollisionEnabled..BoneRaycastsEnabled..BonesAreBreak able..
BonesBreakMaxForce..float..
Bones
BreakMaxTorque..BoneShapeGroup&.
bTPropertyContainer<enum eEShape Group>..BoneShapeMaterial)
bTPropertyContainer<enum eEShapeMaterial>..SkeletonShapeGroup*
bTPropertyContainer<enum eECollisionGroup>..
BoneLinearDamping..BoneAngularDamping..BoneTwistSpringEnabled
..BoneTwistSpring..BoneTwistSpringDamping..BoneSwingSpringEnabled
..BoneSwingSpring..BoneSwing SpringDamping
..BoneProjectionDistance..BoneJointSpringEnabled
..BoneJointSpring..BoneJointSpringDamping..CreateSpringMassCloth
..DisablePhysicLodding..SpringParentNodesOnly..SpringParentNodesScale
..ClothEffectorB
.bTPropertyObject<class eCSpringAndDamperEffector,class eCEffector>
..eCSpringAndDamperEffector..SpringDistCompressSaturate..SpringDistRelaxed
. .SpringDistStretchSaturate..SpringMaxCompressForce
..SpringMaxStretchForce..DamperVelCompressSaturate..DamperVelStretchSaturate
..DamperMaxCompressForce..DamperMaxStretchForce
..Entity1..Entity2.
.Pos1..Pos2..MaterialSwitch
..G3_Head_Fat_Myrtana_02.fxa<.Hero_Stand_None_None_P0_Ambient_Loop_N_Fwd_00_%_00_P0_0.xmot¾.......>..
.—.>™·½.AX¸*¶4.

mdahm
01.07.2007, 00:18
Ach ja, das ist zwar etwas off topic, aber hatte PB vor Knochenbrüche in G3 einzubauen?

Monster und NPCs haben wohl so ne Art Skelett. Wenn man einen Ork oder Troll o.ä. tötet, soll der ja mehr oder weniger realistisch umfallen (auch wenn's oft recht übertrieben aussieht). Dieses Zusammenfallen wird immer individuell berechnet - dafür benötigt man gewisse Grunddaten darüber, welche Teile "wabbeln" dürfen und welche nicht.
So stelle ich mir das jedenfalls vor.

Hans Trapp
01.07.2007, 00:28
Monster und NPCs haben wohl so ne Art Skelett. Wenn man einen Ork oder Troll o.ä. tötet, soll der ja mehr oder weniger realistisch umfallen (auch wenn's oft recht übertrieben aussieht). Dieses Zusammenfallen wird immer individuell berechnet - dafür benötigt man gewisse Grunddaten darüber, welche Teile "wabbeln" dürfen und welche nicht.
So stelle ich mir das jedenfalls vor.

Das ist aber eine der Dateien, die ein _deleted_deleted-Status hat ;)

NicoDE
01.07.2007, 12:52
@Nico, wie hast du eigentlich die ganzen ENUM's zusammenbekommen?Einige Aufzählungen (insbesondere die, die persistent sein können und/oder über Modulgrenzen hinweg ausgetauscht werden, sind der Engine per String bekannt. Sie werden irgendwann in der Engine registriert. Die 'Kunst' besteht nur noch darin, die richtige Stelle im Disassemblat zu finden...


Die hast du doch nicht per Hand zugeordnet oder?Ich bin zwar alt, aber nicht verrückt ;)
Ich habe keinen einzigen Wert im Spiel ausprobiert (um genau zu sein, habe ich G3 seit Monaten nicht mehr gestartet). Lediglich die String->Wert-Zuordnungen herausgeschrieben.


Die anderen ENUM's wären nämlich auch noch total interessant :)Es gibt so viele, dass ich das zu meinem Beruf machen könnte ;)
Lassen wir es einfach dabei, dass ich die Sachen poste, die ich so finde :)


Ps. nen sehr einfach gehaltenen Editor werd ich heute Abend/Nacht vermutlich schonmal online stellen zum ausprobieren.Cool B)


@NicoDE
Ich denke, dass man davon ausgehen kann, dass 0053 0053 00 1D die Versionsnummern der gCTemplateLayer-Klasse und deren Basisklassen sind.
Grund der Annahme ist, dass in allen folgenden Dateien diese Hexfolge zu finden ist: [...]Genau das gleiche habe ich auch festgestellt. Nur, dass ich nicht weiß, dass es (Persistenz-)Versionsnummern sind. Ich vermute es nur.


Kennst Du alle Zuordnungen? Falls ja, dann teile es doch bitte mit.
"Geben ist doch seeliger als nehmen" :D . Oder anders herum... wir haben doch ein gemeinsames Ziel, oder nicht?Ich poste hier alles, was ich nebenbei herausfinde. Jedenfalls die Dinge, von denen ich glaube, die Bedeutung halbwegs zu kennen.


Ich habe da eine Vermutung, oder mehr als eine Vermutung, wie man den "bTPropertyContainer<enum EAttribModOperation>"
eingrenzen kann. Somit sollten die Werte zuordenbar sein.Steht bereits alles in diesem Thread (und zwar alle in der Engine registrierten Werte).


es mag frech klingen. Aber ich sage mir, Nico war PBler bis kurz vor dem Release von G3.Mag frech klingen, aber wenn man keine Ahnung hat... :)
http://forum.worldofplayers.de/forum/showpost.php?p=3859706&#post3859706
Lesen und schweigen.


Der weiß schon wo er hinlangen muß ;) . Er hätte auch nicht den G3Pak schreiben können, ohne die Struktur zu kennen, oder?Falsch. Es gibt einen internen Thread im Forum, in dem das Format Stück für Stück entschlüsselt wurde. Ich hätte die Informationen (hätte ich sie denn gehabt) ohnehin nicht verwenden dürfen (alte NDAs mit PB).

Hans Trapp
01.07.2007, 16:54
Cool B)

Genau das gleiche habe ich auch festgestellt. Nur, dass ich nicht weiß, dass es (Persistenz-)Versionsnummern sind. Ich vermute es nur.



Ich weiß es auch nicht! Ich kann es auch nur vermuten.



Mag frech klingen, aber wenn man keine Ahnung hat... :)
http://forum.worldofplayers.de/forum/showpost.php?p=3859706&#post3859706
Lesen und schweigen.


OK. Überflogen und schwamm drüber §prost



Falsch. Es gibt einen internen Thread im Forum, in dem das Format Stück für Stück entschlüsselt wurde.

Intern? Na ja, muß man so hinnehmen.



Ich hätte die Informationen (hätte ich sie denn gehabt) ohnehin nicht verwenden dürfen (alte NDAs mit PB).

Verständlich


Gruß

Hans Trapp

NicoDE
01.07.2007, 20:22
Intern? Na ja, muß man so hinnehmen.Ich wollte damit nur sagen, dass die Möglichkeit bestünde, es nachzuweisen - falls PB oder JoWooD auf die Idee kommen sollten, mich wegen Veröffentlichung interner Informationen (die ich nicht habe) zur Rechenschaft ziehen zu wollen.

Es geschah unter Ausschluss der Öffentlichkeit, da die Analyse anhand der Test-Version (ein paar Tage vor Release) vorgenommen wurde. Nachdem klar war wie die Patch-Volumes funktionieren, veröffentlichte ich G3Pak im Forum... anschließend widmete ich mich wieder ausschließlich meinem Sohn, der gerade auf die Welt gekommen war.

Miguel_Cramer
01.07.2007, 20:41
Ich wollte damit nur sagen, dass die Möglichkeit bestünde, es nachzuweisen - falls PB oder JoWooD auf die Idee kommen sollten, mich wegen Veröffentlichung interner Informationen (die ich nicht habe) zur Rechenschaft ziehen zu wollen.

Das ist völlig verständlich und alles was Du auch in Deiner Freizeit für die Gothic Serie geleistest hast, einen riesigen Dank an Dich.

Ich kannte Gothic bis zum Patchaufruf durch Jowood, das Spiel gar nicht. Bin eigendlich nicht der Spielertyp, doch habe mich mitlerweile alle Teile gekauft und bereue es nicht.

Danke für deinen Link in das Piranha Forum, das sagt vieles aus. NicoDE hilf den Patchern weiter so, Deine Erklärung hat vielen die Vorsicht verständlich gemacht mit der Du das tun mußt. Ich selber und sicher auch einige andere wußten um diese Umstände vieleicht gar nicht.

Für mich bist Du seit dem Link der --=Vater der Gothic Mods=--, habe mir gerade Korana gezogen und kurz reingesehen und bin begeistert was
dieses modden ermöglicht.

Hans Trapp
01.07.2007, 23:50
Ich wollte damit nur sagen, dass die Möglichkeit bestünde, es nachzuweisen - falls PB oder JoWooD auf die Idee kommen sollten, mich wegen Veröffentlichung interner Informationen (die ich nicht habe) zur Rechenschaft ziehen zu wollen.
.

Geht schon in Ordnung. Ich bin nicht der geborene Rhetoriker.
Ich habe über zehn Jahre in Bankrechenzentren gearbeit und weiß daher, wie schnell man wegen angeblicher Herausgabe von Daten belangt werden kann.
Also, nochmals, ich will Dich nicht in Schwierigkeiten bringen und meine eine Aussage war nicht besonders geschickt.

§prost

Gruß

Hans Trapp

NicoDE
02.07.2007, 07:32
Weil ich jetzt zum Beispiel "ValToPercentage" in keiner Datei finden kann und irgendwie glaub ich nich das Nico die alle per Hand ausgetestet hat.Das könnte daran liegen, dass die entsprechende DLL/EXE dank des Kopierschutzes noch "verschlüsselt" ist... dann wirst du den Klartext natürlich nicht finden.

ps: ohne Disassembler ist die Zuordnung ohnehin schwieriger, da es durchaus "Lücken" in den Aufzählungen geben kann.

MasterEvil
02.07.2007, 08:24
Übrigens werden die Float Werte korrekt nach IEEE angegeben, die Ganzzahlen werden ja stets "verkehrt herum" gespeichert.

Beispiel:
UINT32 Wert = 1:
"00 00 00 01" (richtig)
"01 00 00 00" (G3 Dateien)

Bei Float ist es aber korrekt herum also Wert = 1:
"00 00 80 3F"

NicoDE
02.07.2007, 08:54
die Ganzzahlen werden ja stets "verkehrt herum" gespeichert.Der Fachausdruck dafür ist Little Endian (http://de.wikipedia.org/wiki/Little_Endian). Da das Spiel nur für die x86 (http://de.wikipedia.org/wiki/X86)-Architektur verfügbar ist, ist dies auch nicht weiter verwunderlich.
Bei vielen Zeitstempeln wird auch das native Format von Windows NT verwendet (100-Nanosekunden-Einheiten seit dem 1601-01-01).

ps: welche Aufzählungen werden denn am dringendsten gebraucht?

MasterEvil
02.07.2007, 12:45
100-Nanosekunden-Einheiten seit dem 1601-01-01
Ah, THx :)
Als ich mit den Archiven nen bisschen rumprobiert hatte, hatte ich das Problem das ich das mit dem Datum nicht wirklich hinbekommen habe :)


ps: welche Aufzählungen werden denn am dringendsten gebraucht?
Kann ich dir nicht sagen, das müssen die Leute sagen die damit arbeiten :D
Ich denke alle wären interessant, aber besonders interessant währe vieleicht: SpawnMode oder DamageType :)

NicoDE
02.07.2007, 14:37
Ich denke alle wären interessant, aber besonders interessant währe vieleicht: SpawnMode oder DamageType :)Mit "SpawnMode" kann ich gerade nichts anfangen (genauer Name der Enum bekannt?).

Hier ein paar Aufzählungen, welche von NPC-Templates verwendet werden:


gEAction {
gEAction_None = 0,
gEAction_Attack = 1,
gEAction_PowerAttack = 2,
gEAction_QuickAttack = 3,
gEAction_QuickAttackR = 4,
gEAction_QuickAttackL = 5,
gEAction_SimpleWhirl = 6,
gEAction_WhirlAttack = 7,
gEAction_PierceAttack = 8,
gEAction_JumpAttack = 9,
gEAction_RamAttack = 10,
gEAction_HackAttack = 11,
gEAction_FinishingAttack = 12,
gEAction_Parade = 13,
gEAction_ParadeR = 14,
gEAction_ParadeL = 15,
gEAction_ExitParade = 16,
gEAction_QuickParadeStumble = 17,
gEAction_ParadeStumble = 18,
gEAction_ParadeStumbleR = 19,
gEAction_ParadeStumbleL = 20,
gEAction_HeavyParadeStumble = 21,
gEAction_QuickStumble = 22,
gEAction_Stumble = 23,
gEAction_StumbleR = 24,
gEAction_StumbleL = 25,
gEAction_SitKnockDown = 26,
gEAction_GetUpAttack = 27,
gEAction_GetUpParade = 28,
gEAction_LieKnockDown = 29,
gEAction_LieKnockOut = 30,
gEAction_PierceStumble = 31,
gEAction_Die = 32,
gEAction_LieDead = 33,
gEAction_LiePiercedKO = 34,
gEAction_LiePiercedDead = 35,
gEAction_AbortAttack = 36,
gEAction_Aim = 37,
gEAction_Shoot = 38,
gEAction_Reload = 39,
gEAction_Cock = 40,
gEAction_Cast = 41,
gEAction_PowerCast = 42,
gEAction_MagicParade = 43,
gEAction_QuickCast = 44,
gEAction_Summon = 45,
gEAction_Heal = 46,
gEAction_Wait = 47,
gEAction_JumpBack = 48,
gEAction_Fwd = 49,
gEAction_Back = 50,
gEAction_Left = 51,
gEAction_Right = 52,
gEAction_Move = 53,
gEAction_Jump = 54,
gEAction_Evade = 55,
gEAction_Slide = 56,
gEAction_Fall = 57,
gEAction_Dive = 58,
//gEAction_COMBATACTIONS_END = 59,
gEAction_Use = 60,
gEAction_Equip = 61,
gEAction_Reach = 62,
gEAction_Take = 63,
gEAction_Drop = 64,
gEAction_Hold = 65,
gEAction_HoldLeft = 66,
gEAction_HoldRight = 67,
gEAction_Transfer = 68,
gEAction_FlameSword = 69,
gEAction_Fry = 70,
gEAction_Eat = 71,
gEAction_Drink = 72,
gEAction_Stand = 73,
gEAction_Sneak = 74,
gEAction_Kneel = 75,
gEAction_SitGround = 76,
gEAction_SitStool = 77,
gEAction_SitBench = 78,
gEAction_SitThrone = 79,
gEAction_SleepBed = 80,
gEAction_SleepGround = 81,
gEAction_OrcDrum = 82,
gEAction_Waterpipe = 83,
gEAction_Anvil = 84,
gEAction_OrcAnvil = 85,
gEAction_Forge = 86,
gEAction_CoolWeapon = 87,
gEAction_DrinkWaterBarrel = 88,
gEAction_GrindStone = 89,
gEAction_Cauldron = 90,
gEAction_Barbecue = 91,
gEAction_Alchemy = 92,
gEAction_Bookstand = 93,
gEAction_Stoneplate = 94,
gEAction_PickOre = 95,
gEAction_OpenChest = 96,
gEAction_Lockpick = 97,
gEAction_OpenDoor = 98,
gEAction_ExitInteract = 99,
gEAction_PickGround = 100,
gEAction_DigGround = 101,
gEAction_Repair = 102,
gEAction_SawLog = 103,
gEAction_Lumberjack = 104,
gEAction_RakeField = 105,
gEAction_CleanFloor = 106,
gEAction_TiltOrcBoulder = 107,
gEAction_HoldOrcBoulder = 108,
gEAction_LiftOrcBoulder = 109,
gEAction_Fan = 110,
gEAction_Dance = 111,
gEAction_OrcDance = 112,
gEAction_FieldWork = 113,
gEAction_EatGround = 114,
gEAction_DrinkWater = 115,
gEAction_ArmsCrossed = 116,
gEAction_HandsOnHips = 117,
gEAction_Warn = 118,
gEAction_Ambient = 119,
gEAction_Think = 120,
gEAction_Pee = 121,
gEAction_Say = 122,
gEAction_Listen = 123,
gEAction_WatchFight = 124,
gEAction_Cheer = 125,
gEAction_SuperCheer = 126,
gEAction_Applaud = 127,
gEAction_QuickUse0 = 128,
gEAction_QuickUse1 = 129,
gEAction_QuickUse2 = 130,
gEAction_QuickUse3 = 131,
gEAction_QuickUse4 = 132,
gEAction_QuickUse5 = 133,
gEAction_QuickUse6 = 134,
gEAction_QuickUse7 = 135,
gEAction_QuickUse8 = 136,
gEAction_QuickUse9 = 137
//gEAction_Count = 138
}


gEAIMode {
gEAIMode_Routine = 0,
gEAIMode_Reaction = 1,
//gEAIMode_2 = 2,
gEAIMode_Combat = 3,
gEAIMode_Flee = 4,
gEAIMode_Arena = 5,
gEAIMode_Talk = 6,
//gEAIMode_7 = 7,
gEAIMode_Down = 8,
gEAIMode_Dead = 9,
gEAIMode_Abandoned = 10,
gEAIMode_PlayerParty = 11
}


gEAmbientAction {
gEAmbientAction_Ambient = 0,
gEAmbientAction_Listen = 1
//gEAmbientAction_Count = 2
}


gEAniState {
gEAniState_Dummy0 = 0,
gEAniState_Dummy1 = 1,
gEAniState_Stand = 2,
gEAniState_Sneak = 3,
gEAniState_Parade = 4,
gEAniState_Kneel = 5,
gEAniState_SitGround = 6,
gEAniState_SitStool = 7,
gEAniState_SitBench = 8,
gEAniState_SitThrone = 9,
gEAniState_SleepBed = 10,
gEAniState_SleepGround = 11,
gEAniState_TiltOrcBoulder = 12,
gEAniState_HoldOrcBoulder = 13,
gEAniState_LiftOrcBoulder = 14,
gEAniState_SitKnockDown = 15,
gEAniState_LieKnockDown = 16,
gEAniState_LieKnockOut = 17,
gEAniState_LieStraightDead = 18,
gEAniState_LieDead = 19,
gEAniState_LiePiercedKO = 20,
gEAniState_LiePiercedDead = 21,
gEAniState_TalkStand = 22,
gEAniState_TalkSitGround = 23,
gEAniState_TalkSitStool = 24,
gEAniState_TalkSitBench = 25,
gEAniState_TalkSitThrone = 26,
gEAniState_Wade = 27,
gEAniState_Swim = 28,
gEAniState_Dive = 29
//gEAniState_Count = 30
}


gEAttackReason {
gEAttackReason_None = 0,
gEAttackReason_LeaveZone = 1,
gEAttackReason_Livestock = 2,
gEAttackReason_StopThief = 3,
gEAttackReason_Theft = 4,
gEAttackReason_UseInteractObject = 5,
gEAttackReason_ReactToWeapon = 6,
gEAttackReason_Angry = 7,
gEAttackReason_StopFight = 8,
gEAttackReason_ReactToDamage = 9,
gEAttackReason_GateGuard = 10,
gEAttackReason_Intruder = 11,
gEAttackReason_Enemy = 12,
gEAttackReason_Murder = 13,
gEAttackReason_Prey = 14,
gEAttackReason_DriveAway = 15,
gEAttackReason_PlayerCommand = 16,
gEAttackReason_Duel = 17,
gEAttackReason_Arena = 18,
gEAttackReason_Revolution = 19
}


gEAttitude {
gEAttitude_None = 0,
gEAttitude_Friendly = 1,
gEAttitude_Neutral = 2,
gEAttitude_Angry = 3,
gEAttitude_Hostile = 4,
gEAttitude_Predator = 5,
gEAttitude_Panic = 6
}


gEBearing {
gEBearing_None = 0,
gEBearing_Babe = 1,
gEBearing_Zombie = 2
}


gEClass {
gEClass_None = 0,
gEClass_Mage = 1,
gEClass_Paladin = 2,
gEClass_Warrior = 3,
gEClass_Ranger = 4,
gEClass_EMPTY_A = 5,
gEClass_EMPTY_B = 6,
gEClass_EMPTY_C = 7,
gEClass_EMPTY_D = 8,
gEClass_EMPTY_E = 9,
gEClass_EMPTY_F = 10,
gEClass_EMPTY_G = 11
}


gEDamageType {
gEDamageType_None = 0,
gEDamageType_Impact = 1,
gEDamageType_Blade = 2,
gEDamageType_Missile = 3,
gEDamageType_Fire = 4,
gEDamageType_Ice = 5,
gEDamageType_Lightning = 6,
gEDamageType_Physics = 7
}


gEFocus {
gEFocus_None = 0,
gEFocus_Hard = 1,
gEFocus_Soft = 2,
gEFocus_Shape = 3
}


gEFocusLookAt {
gEFocusLookAt_Camera = 0,
gEFocusLookAt_Entity = 1,
gEFocusLookAt_Keys = 2
}


gEFocusLookAtKeysFOR {
gEFocusLookAtKeysFOR_Camera = 0,
gEFocusLookAtKeysFOR_Entity = 1
}

gEFocusNameType (http://forum.worldofplayers.de/forum/showthread.php?p=3866169&#post3866169)

gEFocusPriority (http://forum.worldofplayers.de/forum/showthread.php?p=3866169&#post3866169)


gEGender {
gEGender_Male = 0,
gEGender_Female = 1,
}


gEGuardStatus {
gEGuardStatus_Active = 0,
gEGuardStatus_FirstWarnGiven = 1,
gEGuardStatus_SecondWarnGiven = 2,
gEGuardStatus_Inactive = 3,
gEGuardStatus_Behind = 4
}


gEHitDirection {
gEHitDirection_Left = 0,
gEHitDirection_Right = 1
}


gELastFightAgainstPlayer {
gELastFightAgainstPlayer_None = 0,
gELastFightAgainstPlayer_Lost = 1,
gELastFightAgainstPlayer_Won = 2,
gELastFightAgainstPlayer_Cancel = 3,
gELastFightAgainstPlayer_Running = 4,
gELastFightAgainstPlayer_Friendly = 5
}


gENPCType {
gENPCType_Personal = 0,
gENPCType_Enclave = 1,
gENPCType_Political = 2,
gENPCType_Friend = 3
}


gEPartyMemberType {
gEPartyMemberType_None = 0,
gEPartyMemberType_Party = 1,
gEPartyMemberType_Mob = 2,
gEPartyMemberType_Slave = 3,
gEPartyMemberType_Controlled = 4,
gEPartyMemberType_Summoned = 5
}


gEPlayerCrime {
gEPlayerCrime_None = 0,
gEPlayerCrime_Livestock = 1,
gEPlayerCrime_Attack = 2,
gEPlayerCrime_Theft = 3,
gEPlayerCrime_Murder = 4
//gEPlayerCrime_Count = 5
}


gEPoliticalAlignment {
gEPoliticalAlignment_None = 0,
gEPoliticalAlignment_Orc = 1,
gEPoliticalAlignment_Nrd = 2,
gEPoliticalAlignment_Reb = 3,
gEPoliticalAlignment_Mid = 4,
gEPoliticalAlignment_Ass = 5,
gEPoliticalAlignment_Nom = 6,
gEPoliticalAlignment_Out = 7,
gEPoliticalAlignment_Slave = 8
}


gESlot {
gESlot_None = 0,
gESlot_RightHand = 1,
gESlot_LeftHand = 2,
gESlot_EquipLeftHand = 3,
gESlot_Beard = 4,
gESlot_BackLeft = 5,
gESlot_BackRight = 6,
gESlot_Bow = 7,
gESlot_Crossbow = 8,
gESlot_Armor = 9,
gESlot_Belt = 10,
gESlot_Amulet = 11,
gESlot_Ring1 = 12,
gESlot_Ring2 = 13,
gESlot_Ammo = 14,
gESlot_Hair = 15,
gESlot_Head = 16,
gESlot_Body = 17,
gESlot_Helmet = 18
}


gESpecies {
gESpecies_Human = 0,
gESpecies_Skeleton = 1,
gESpecies_Zombie = 2,
gESpecies_Golem = 3,
gESpecies_Demon = 4,
gESpecies_Orc = 5,
gESpecies_Goblin = 6,
gESpecies_Troll = 7,
gESpecies_Minecrawler = 8,
gESpecies_Scavenger = 9,
gESpecies_Wolf = 10,
gESpecies_Boar = 11,
gESpecies_Sabertooth = 12,
gESpecies_Shadowbeast = 13,
gESpecies_Bison = 14,
gESpecies_Rhino = 15,
gESpecies_Ripper = 16,
gESpecies_Lurker = 17,
gESpecies_Varan = 18,
gESpecies_Snapper = 19,
gESpecies_Alligator = 20,
gESpecies_Trex = 21,
gESpecies_FireVaran = 22,
gESpecies_Bloodfly = 23,
gESpecies_Lizard = 24,
gESpecies_Fish = 25,
gESpecies_Meatbug = 26,
gESpecies_Vulture = 27,
gESpecies_Rabbit = 28,
gESpecies_Deer = 29,
gESpecies_Chicken = 30,
gESpecies_Molerat = 31,
gESpecies_Snake = 32,
gESpecies_Pig = 33,
gESpecies_Cow = 34,
gESpecies_Spider = 35,
gESpecies_Turtle = 36,
gESpecies_Bird = 37,
gESpecies_Gargoyle = 38,
gESpecies_SwampLurker = 39,
gESpecies_EMPTY_B = 40,
gESpecies_Ogre = 41,
gESpecies_Ray = 42,
gESpecies_Scorpion = 43,
gESpecies_Seagull = 44,
gESpecies_Walrus = 45,
gESpecies_Whale = 46,
gESpecies_Eagle = 47,
gESpecies_FireGolem = 48,
gESpecies_IceGolem = 49,
gESpecies_ScorpionKing = 50,
gESpecies_Stalker = 51,
gESpecies_Dragon = 52
}


gETradeCategory {
gETradeCategory_None = 0,
gETradeCategory_Valuable = 1,
gETradeCategory_Trophy = 2,
gETradeCategory_Empty_A = 3,
gETradeCategory_Empty_B = 4
}

gEUseType (http://forum.worldofplayers.de/forum/showthread.php?p=3866169&#post3866169)

Kronos
02.07.2007, 16:14
Hey nette Liste! Ich glaube damit kann man arbeiten! Ich frage mich nur wie du das alles durch decompilieren herausfindest! Sorry aber ich kenne nur die sehr grobe Theorie.

Dann stellt sich mir noch die Frage, ob du so eine Liste für die Item Kategorie herausfinden könntest! Oder die Liste Spell (oder ist die durch GUIDs abgedeckt ?)

MFG,
Kronos

mdahm
02.07.2007, 16:31
Hier ein paar Aufzählungen, welche von NPC-Templates verwendet werden

Ganz ausgezeichnet! :) Absolut hilfreich, vielen Dank!

Ich komme immer noch nicht bei dem Problem weiter, dass sich die Stückzahl der Spruchrolle "Flammenschwert rufen" nach Gebrauch nicht reduziert (siehe Post #23 hier oben).
Hast du eventuell einen Tipp dazu, ob es ein Engine-Problem ist? (Sorry, falls ich zu hartnäckig bin.)

@Kronos: Die Item-Kategorie ist in Post #25 aufgelistet:
eEItemCategory {
gEItemCategory_None = 0,
gEItemCategory_Weapon = 1,
gEItemCategory_Armor = 2,
gEItemCategory_Artefact = 3,
gEItemCategory_Alchemy = 4,
gEItemCategory_Empty_A = 5,
gEItemCategory_Misc = 6,
gEItemCategory_Written = 7,
gEItemCategory_Empty_B = 8,
gEItemCategory_Spellbook = 9,
gEItemCategory_Skill = 10
//gEItemCategory_Count = 11

lichtwicht
02.07.2007, 16:51
Hier ein paar Aufzählungen, welche von NPC-Templates verwendet werden:
genau das hätte ich mir auch "gewünscht", Danke!


Ich komme immer noch nicht bei dem Problem weiter, dass sich die Stückzahl der Spruchrolle "Flammenschwert rufen" nach Gebrauch nicht reduziert (siehe Post #23 hier oben).
Hast du eventuell einen Tipp dazu, ob es ein Engine-Problem ist? (Sorry, falls ich zu hartnäckig bin.)
ich bin zwar auch nur ein "Trial-and-Error"-Fixer, aber ich denke, daß das noch tiefer, als in den Templates liegt...(ich finde mit marvin z.B. keinen Unterschied zwischen der FeuerballRolle und der FlammenschwertRolle...und warum sollte das "herunterzählen" im Item stehen?)

Kronos
02.07.2007, 16:52
@mdahm
Sicher dass die Anzahl nur 1 ist? Ansonsten bleibt natürlich noch das permanent (Wie du ja weißt) und vielleicht ist die Kategorie falsch ? Könnte es sein, dass es als sozusagen Rune eingetragen ist, obwohl es eine Spruchrolle ist ?

MFG,
Kronos

Edit:
Achja, auch in Templatedateien wird auf die Stringtable zugegriffen. Ob das aber die Engine automatisch erkennt oder durch einen Befehl erreicht wird, weiß ich nicht. Siehe allle Dateien mit Written_* im Namen.

NicoDE
02.07.2007, 17:21
Hast du eventuell einen Tipp dazu, ob es ein Engine-Problem ist?Keine Ahnung (lies: Keine Zeit :)).

Achja, auch in Templatedateien wird auf die Stringtable zugegriffen. Ob das aber die Engine automatisch erkennt oder durch einen Befehl erreicht wird, weiß ich nicht. Siehe allle Dateien mit Written_* im Namen.Ich gehe davon aus, dass der Stream-Operator der Archiv-Klasse (GENOMFLE) für bCString überschrieben wurde (sprich: alle bCString werden als Referenz in die String-Liste gespeichert).
Allerdings habe ich diese Vermutung noch nicht mit allen Datensätzen überprüft.

mdahm
02.07.2007, 18:42
@mdahm
Sicher dass die Anzahl nur 1 ist? Ansonsten bleibt natürlich noch das permanent (Wie du ja weißt) und vielleicht ist die Kategorie falsch ? Könnte es sein, dass es als sozusagen Rune eingetragen ist, obwohl es eine Spruchrolle ist ?

Gute Ideen! Ich habe allerdings dann wirklich mal nur die "Item-ID"(?) in der Schriftrolle "Flammenschwert zaubern" gegen die des Feuerballs ausgetauscht, und schon wurde die Anzahl nach Benutzung reduziert.
Die Info "reduzieren oder nicht" muss also irgendwo anders abgelegt sein - ich weiß nur nicht, ob in Dateien oder im Code.

@NiceDE: Okay, trotzdem danke! :)

Kronos
02.07.2007, 19:54
@mdahm: Schade. Dann fürchte ich ist der Spell kaputt! Vielleicht war das der Grund, wegen dem PB stattdessen das Schwert eingefügt haben ?

@all:
Ab Byte 32 beginnt bekanntlich ein Block mit Aufzählungen, dieser Block ist eine Index-Aufzählung für die Stringtable die am Ende steht. Muss also in einen Editor integriert werden! Diese Aufzählung endet an einem Block, der immer mit dem Byte "3E" endet. Dessen Sinn ist leider noch unbekannt. (Erkenntnisse von Urban aus dem JWD-Chat)


MFG,
Kronos

NicoDE
02.07.2007, 20:57
Ab Byte 32 beginnt bekanntlich ein Block mit Aufzählungen, dieser Block ist eine Index-Aufzählung für die Stringtable die am Ende steht. Muss also in einen Editor integriert werden! Diese Aufzählung endet an einem Block, der immer mit dem Byte "3E" endet. Dessen Sinn ist leider noch unbekannt. (Erkenntnisse von Urban aus dem JWD-Chat)Vorher kommt, meiner Meinung nach, noch die Größe des Datenblocks und ein weiterer UInt32.
Den Beginn interpretiere ich bisher so:
00000000: 'GENOMFLE' (Kennung eines Archivs)
00000008: 0x0001
0000000A: <UInt32> (absoluter Offset zur Archiv-Sicherheitskennung)
0000000E: 'GENOMETP' (Kennung für Template-Entities)
00000016: 0x003E
00000018: 0x0001
0000001A: 0x01
0000001B: <UInt32> (Anzahl der String-Indizes?)
0000001F: <UInt16>[<0000001B>] (String-Indizes?)
: <UInt32> (Größe des ff. Datenblocks bis zur Sicherheitskennung)
: <UInt32> (?)
: 0x003E
: 0x0000
: <UInt8>[16] (Unique ID?)
...
: 0xDEADBEEF (Sicherheitskennung zur Überprüfung des Lesevorgangs)
: 0x01
: <UInt32> (Länge der String-Liste)
: [ASCII[<UInt16>]]
EOF

MasterEvil
02.07.2007, 20:59
Einfach klasse @Nico :)

Jetzt bin ich mal noch ganz frech, folgende fehlen noch (vieleicht auch noch mehr).
Die ersten sind vermutlich die, welche man am meisten bräuchte.
Falls du die noch finden könntest :D


bTPropertyContainer<enum gESpellType>
bTPropertyContainer<enum gESpellDeity>
bTPropertyContainer<enum gESpellTarget>
bTPropertyContainer<enum gECastType>
bTPropertyContainer<enum gESkillCategory>

bTPropertyContainer<enum gETreasureDistribution>
bTPropertyContainer<enum gEEnclaveStatus>
bTPropertyContainer<enum eERigidbody_Flag>
bTPropertyContainer<enum eEPropertySetType>

bTPropertyContainer<enum eECollisionGroup>
bTPropertyContainer<enum eEPhysicRangeType>
bTPropertyContainer<enum eEEventType>
bTPropertyContainer<enum eEStripSpawning>
bTPropertyContainer<enum eEStaticLighingType>
bTPropertyContainer<enum eEStaticIlluminated>
bTPropertyContainer<enum eEShapeGroup>
bTPropertyContainer<enum eEShapeMaterial>
bTPropertyContainer<enum eELightmapType>
bTPropertyContainer<enum eELightmapAmbientOcclusion>
bTPropertyContainer<enum eEDynamicLightEffect>
bTPropertyContainer<enum eEDirectionalShadowType>
bTPropertyContainer<enum eEFinalBlend>



Ab Byte 32 beginnt bekanntlich ein Block mit Aufzählungen, dieser Block ist eine Index-Aufzählung für die Stringtable die am Ende steht. Muss also in einen Editor integriert werden! Diese Aufzählung endet an einem Block, der immer mit dem Byte "3E" endet.

Bei Byte 32 steht die Länge der Aufzählungen, nach den Aufzählungen steht in UINT32 wieviele Bytes jetzt an Daten kommen bzw. wo die Strings anfangen.

Urban
02.07.2007, 21:39
Moin

@NicoDE
FILE: Miscellaneous_World_It_Joint.tple

Little-Endian

0x0000000E 4745 4E4F 4D45 5450 GENOMETP ID
0x00000016 3E00 0100 01 ????
0x0000001B 9400 00 <--??? 3Byte Anzahl der String-Indizes (94)
0x0000001E 0000 0001 0002 0003 String-Indizes form 0 to 93


Gruß
Urban

MasterEvil
02.07.2007, 21:56
Templates\Items\Items\Items_World\Miscellaneous_World_It_Joint.tple

[EDIT], aso Hex-Kram ;) also doch kein Fehler, is doch richtig :)

Bei Byte 16 ist 3E 00 dann 01 00 , 01

danach 94 00 00 00 (148 Strings)

Urban
02.07.2007, 22:08
hi

korrekt!:D nein nicht 94 00 00 00 sondern 94 00 00


Gruß
Urban

Urban
02.07.2007, 22:19
FILE: Miscellaneous_World_It_Joint.tple

frage: was stimmnt hier nicht

eCRigidBody_PS->TotalMass

0x00000415 0012 000E 001E 0004 0000 0000 0020 41 1300 1400
_________________________size_=_4_1__2_3__4_5__normal= 0013 0014

Danke
Urban

MasterEvil
02.07.2007, 22:32
0x00000416 - 12 00 TotalMass
0x00000418 - 0E 00 Float
0x0000041A - 1E 00 04 00 00 00 4 Bytes werden genutzt
0x00000420 - 00 00 20 41 10,0

Urban
02.07.2007, 22:51
ahhh ja danke ich bin da wohl um 1Byte verrutsch
0x00000415 0012 000E 001E
besser so
0x00000416 1200 0E00 1E00

ok danke solte lieber ins Bett §danke
Urban

Kronos
02.07.2007, 22:51
Hier eine Frage die ich eigentlich in MasterEvils Editor Thread posten wollte, ihr müsst also ein wenig umdenken, aber ich denke es lohnt sich!:


Also:
Ich hab noch was :D
Öffne mal bitte die Datei \Items\Items\Items_Story\Written_Story_It_Ashton_GoldList.tple
im Hexeditor.
Pos 16BB: Ein String der eine neue Klasse anfängt, dann der nächste Bezeichner heißt Header, der und dessen Wert wird erfolgreich erfasst, aber als nächstes kommt ein String, der überhaupt nicht beachtet wird:
eCLocString% der anscheinend ankündigt, dass eine Stringadresse kommt danach ein LETTERHEADER_BPANKRATZ320060510152902 das stellt eine Bezeichnung für einen Stringtabeleintrag dar (also die Datei Stringtable.ini).

Anhand dessen wird der Text auf dem Zettel nachher erstellt (erfolgreich getestet) leider zieht dein Tool dies gar nicht mit ein, wahrscheinlich weil im oberen Block keine Referenz darauf besteht.
Ein Rätsel, nun kommt es aber noch härter: Danach kommt noch ein String und zwar: Text wieder eine Eigenschaft die dein Editor auch erfolgreich einliest, hintenangehängt noch ein "#", dann kommt wieder eine Stringtableadresse, allerdings diesmal ohne den String eCLocString% vorher. Jetzt eine Frage: Was bedeutet das ganze ? Und kann man eine Referenz dafür einbauen?

MFG,
Der müde Kronos

NicoDE
02.07.2007, 22:54
Falls du die noch finden könntest :DAuf die Schnelle rausgesucht:


eECollisionGroup {
eECollisionGroup_Undefined = 0,
eECollisionGroup_Static = 1,
eECollisionGroup_Dynamic = 2,
eECollisionGroup_Player = 3,
eECollisionGroup_NPC = 4,
eECollisionGroup_Item_Equipped = 5,
eECollisionGroup_Item_World = 6,
eECollisionGroup_Item_Attack = 7,
eECollisionGroup_Interactable = 8,
eECollisionGroup_Trigger = 9,
eECollisionGroup_Zone = 10,
eECollisionGroup_Camera = 11,
eECollisionGroup_Tree = 12,
eECollisionGroup_DownCharacter = 13,
eECollisionGroup_PlayerTrigger = 14,
eECollisionGroup_ObjectTrigger = 15,
eECollisionGroup_Ghost = 16,
eECollisionGroup_Mover = 17,
eECollisionGroup_RagDoll = 18,
}


eEDirectionalShadowType {
eEDirectionalShadowType_Terrain = 0,
eEDirectionalShadowType_Building = 1,
eEDirectionalShadowType_Object = 2
}


eEDynamicLightEffect {
eEDynamicLightEffect_Steady = 0,
eEDynamicLightEffect_Pulse = 1,
eEDynamicLightEffect_Blink = 2,
eEDynamicLightEffect_Flicker = 3,
eEDynamicLightEffect_Strobe = 4
}


eEEventType {
eEEventType_None = 0,
eEEventType_Trigger = 1,
eEEventType_Untrigger = 2,
eEEventType_Touch = 3,
eEEventType_Untouch = 4,
eEEventType_Intersect = 5,
eEEventType_Damage = 6
}


eEFinalBlend {
eEFinalBlend_Overwrite = 0,
eEFinalBlend_AlphaBlend = 1,
eEFinalBlend_AlphaModulate = 2,
eEFinalBlend_Modulate = 3,
eEFinalBlend_Translucent = 4,
eEFinalBlend_Darken = 5,
eEFinalBlend_Brighten = 6,
eEFinalBlend_Invisible = 7
}


eELightmapAmbientOcclusion {
eELightmapAmbientOcclusion_None = 0,
eELightmapAmbientOcclusion_PerTriangle = 1,
eELightmapAmbientOcclusion_PerVertex = 2
}


eELightmapType {
eELightmapType_PerVertex = 0,
eELightmapType_Mixed = 1
}


eEPhysicRangeType {
eEPhysicRangeType_World = 0,
eEPhysicRangeType_ProcessingRange = 1,
eEPhysicRangeType_VisibilityRange = 2
}


eEPropertySetType {
eEPropertySetType_Unknown = 0,
eEPropertySetType_Base = 1,
eEPropertySetType_MeshVisual = 2,
eEPropertySetType_DummyVisual = 3,
eEPropertySetType_Advanced = 4,
eEPropertySetType_Navigation = 5,
eEPropertySetType_DynamicCollisionCircle = 6,
eEPropertySetType_CollisionCircle = 7,
eEPropertySetType_NavZone = 8,
eEPropertySetType_NegZone = 9,
eEPropertySetType_NavPath = 10,
eEPropertySetType_PrefPath = 11,
eEPropertySetType_NavHelper = 12,
eEPropertySetType_RigidBody = 13,
eEPropertySetType_CollisionShape = 14,
eEPropertySetType_DynamicLight = 15,
eEPropertySetType_DirectionalLight = 16,
eEPropertySetType_PointLight = 17,
eEPropertySetType_SpotLight = 18,
eEPropertySetType_Hemisphere = 19,
eEPropertySetType_MovementBase = 20,
eEPropertySetType_CharacterMovement = 21,
eEPropertySetType_CharacterControl = 22,
eEPropertySetType_CharacterSensor = 23,
eEPropertySetType_CameraAI = 24,
eEPropertySetType_Editor = 25,
eEPropertySetType_AIHelper = 26,
eEPropertySetType_AIHelperFreePoint = 27,
eEPropertySetType_AIHelperSpawnPoint = 28,
eEPropertySetType_AIHelperPlayerStart = 29,
eEPropertySetType_NPC = 30,
eEPropertySetType_Inventory = 31,
eEPropertySetType_Clock = 32,
eEPropertySetType_Effect = 33,
eEPropertySetType_ParticleEffect = 34,
eEPropertySetType_EventFilter = 35,
eEPropertySetType_EventDebugger = 36,
eEPropertySetType_EventLogic = 37,
eEPropertySetType_EventScript = 38,
eEPropertySetType_Trigger = 39,
eEPropertySetType_TriggerList = 40,
eEPropertySetType_TriggerCombiner = 41,
eEPropertySetType_Skydome = 42,
eEPropertySetType_EditorVisual = 43,
eEPropertySetType_EngineCaps = 44,
eEPropertySetType_ScriptRoutine = 45,
eEPropertySetType_SpeedTree = 46,
eEPropertySetType_SpeedTreeWind = 47,
eEPropertySetType_Item = 48,
eEPropertySetType_Interaction = 49,
eEPropertySetType_TouchDamage = 50,
eEPropertySetType_Damage = 51,
eEPropertySetType_DamageReceiver = 52,
eEPropertySetType_QuestManager = 53,
eEPropertySetType_Quest = 54,
eEPropertySetType_InfoManager = 55,
eEPropertySetType_Info = 56,
eEPropertySetType_InfoScript = 57,
eEPropertySetType_InfoScriptLine = 58,
eEPropertySetType_Focus = 59,
eEPropertySetType_PlayerMemory = 60,
eEPropertySetType_NavOffset = 61,
eEPropertySetType_Enclave = 62,
eEPropertySetType_Arena = 63,
eEPropertySetType_Area = 64,
eEPropertySetType_Vegetation = 65,
eEPropertySetType_VegetationBrush = 66,
eEPropertySetType_VegetationRubber = 67,
eEPropertySetType_Dialog = 68,
eEPropertySetType_Lock = 69,
eEPropertySetType_Door = 70,
eEPropertySetType_StaticLight = 71,
eEPropertySetType_StaticPointLight = 72,
eEPropertySetType_StaticSpotLight = 73,
eEPropertySetType_Illuminated = 74,
eEPropertySetType_Statistics = 75,
eEPropertySetType_PhysicScene = 76,
eEPropertySetType_Party = 77,
eEPropertySetType_Anchor = 78,
eEPropertySetType_Letter = 79,
eEPropertySetType_Book = 80,
eEPropertySetType_Map = 81,
eEPropertySetType_LinkContainer = 82,
eEPropertySetType_Projectile = 83,
eEPropertySetType_Sound = 84,
eEPropertySetType_Strip = 85,
eEPropertySetType_ForceField = 86,
eEPropertySetType_Particle = 87,
eEPropertySetType_ParticleSystem = 88,
eEPropertySetType_ParticleEmitter = 89,
eEPropertySetType_SpriteEmitter = 90,
eEPropertySetType_BeamEmitter = 91,
eEPropertySetType_SparkEmitter = 92,
eEPropertySetType_MeshEmitter = 93,
eEPropertySetType_AIZone = 94,
eEPropertySetType_AudioEmitter = 95,
eEPropertySetType_Effect2 = 96,
eEPropertySetType_LightStreaks = 97,
eEPropertySetType_WeatherZone = 98,
eEPropertySetType_Precipitation = 99,
eEPropertySetType_Animation = 100,
eEPropertySetType_Magic = 101,
eEPropertySetType_Skill = 102,
eEPropertySetType_Mover = 103,
eEPropertySetType_Teleporter = 104,
eEPropertySetType_ArmorSet = 105,
//eEPropertySetType_106 = 106,
eEPropertySetType_Flock = 107,
eEPropertySetType_TreasureSet = 108,
eEPropertySetType_Recipe = 109,
eEPropertySetType_WaterZone = 110,
eEPropertySetType_DistanceTrigger = 111,
eEPropertySetType_TimeZone = 112
}


eEShapeGroup {
eEShapeGroup_Undefined = 0,
eEShapeGroup_Static = 1,
eEShapeGroup_Dynamic = 2,
eEShapeGroup_Shield = 3,
eEShapeGroup_MeleeWeapon = 4,
eEShapeGroup_Projectile = 5,
eEShapeGroup_Movement = 6,
eEShapeGroup_WeaponTrigger = 7,
eEShapeGroup_ParadeSphere = 8,
eEShapeGroup_Tree_Trunk = 9,
eEShapeGroup_Tree_Branches = 10,
eEShapeGroup_Camera = 11,
eEShapeGroup_Movement_ZoneNPC = 12,
eEShapeGroup_HeightRepulsor = 13,
eEShapeGroup_Cloth = 14,
eEShapeGroup_PhysicalBodyPart = 15,
eEShapeGroup_KeyframedBodyPart = 16,
eEShapeGroup_Camera_Obstacle = 17,
eEShapeGroup_Projectile_Level = 18,
eEShapeGroup_Trigger = 19,
eEShapeGroup_Door = 20
}


eEShapeMaterial {
eEShapeMaterial_None = 0,
eEShapeMaterial_Wood = 1,
eEShapeMaterial_Metal = 2,
eEShapeMaterial_Water = 3,
eEShapeMaterial_Stone = 4,
eEShapeMaterial_Earth = 5,
eEShapeMaterial_Ice = 6,
eEShapeMaterial_Leather = 7,
eEShapeMaterial_Clay = 8,
eEShapeMaterial_Glass = 9,
eEShapeMaterial_Flesh = 10,
eEShapeMaterial_Snow = 11,
eEShapeMaterial_Debris = 12,
eEShapeMaterial_Foliage = 13,
eEShapeMaterial_Magic = 14,
eEShapeMaterial_Grass = 15,
eEShapeMaterial_SpringAndDamper1 = 16,
eEShapeMaterial_SpringAndDamper2 = 17,
eEShapeMaterial_SpringAndDamper3 = 18,
eEShapeMaterial_Damage = 19,
eEShapeMaterial_Sand = 20,
eEShapeMaterial_Movement = 21
}


eEStaticIlluminated {
eEStaticIlluminated_Static = 0,
eEStaticIlluminated_Dynamic = 1
}


eEStaticLighingType {
eEStaticLighingType_Lightmap = 0,
eEStaticLighingType_Instance = 1
}


eEStripSpawning {
eEStripSpawning_Continuous = 0,
eEStripSpawning_Movement = 1,
eEStripSpawning_Timed = 2
}


gECastType {
gECastType_Immediate = 0,
gECastType_Power = 1,
gECastType_Regular = 2
}


gEEnclaveStatus {
gEEnclaveStatus_Routine = 0,
gEEnclaveStatus_Attack = 1,
gEEnclaveStatus_Flee = 2
}


gESkillCategory {
gESkillCategory_Combat = 0,
gESkillCategory_Hunting = 1,
gESkillCategory_Magic = 2,
gESkillCategory_Smithing = 3,
gESkillCategory_Theft = 4,
gESkillCategory_Alchemy = 5,
gESkillCategory_Misc = 6,
gESkillCategory_Cooking = 7
}


gESpellDeity {
gESpellDeity_Adanos = 0,
gESpellDeity_Beliar = 1,
gESpellDeity_Innos = 2,
gESpellDeity_None = 3
}


gESpellTarget {
gESpellTarget_Caster = 0,
gESpellTarget_Focus = 1
}


gESpellType {
gESpellType_Projectile = 0,
gESpellType_Target = 1,
gESpellType_Summon = 2
}


gETreasureDistribution {
gETreasureDistribution_Plunder = 0,
gETreasureDistribution_Unique = 1,
gETreasureDistribution_Trophy = 2,
gETreasureDistribution_Weaponry = 3,
gETreasureDistribution_Trade_Generate = 4,
gETreasureDistribution_Trade_Refresh = 5,
gETreasureDistribution_Mining = 6,
gETreasureDistribution_Pickpocket = 7
}

MasterEvil
02.07.2007, 23:09
@Kronos
THx, lag daran das ich das Objekt "eCLocString" noch nicht als String drin hatte.
Hab ne neue Version hoch geladen, jetzt wird der Text auch angezeigt ;)

Ja, sehr sehr gut @ Nico :D
Die bau ich aber erst morgen ein :/

NicoDE
03.07.2007, 07:19
Die bau ich aber erst morgen ein :/Hat dir wohl keine Ruhe gelassen... :D

Schön wäre es, wenn es einen generischen Typ-Handler in deinem Tool gäbe, welcher alle unbekannten bTPropertyContainer<enum Xxx> behandelt (Datenwert als int).

Urban
03.07.2007, 18:36
Hi

ich habe mir die Mühe gemacht und eine Zusammenfassung erstelt
in der Infos zu Template Format, TinyHerxer Script etc vorhanden sind
vielleicht könnt ihr damit was anfangen.
Es soll nur eine Hilfestellung sein.

Bitte um Mithilfe bei der Erweiterung/Fehlersuche etc
Danke

http://upload.worldofplayers.de/upload.cgi?a=show&file=67335f74706c655f6465736372697074696f6e5f3030372e7a6970&big=1

Gruß
Urban

NicoDE
03.07.2007, 19:47
Noch ein Hinweis zur "Eindeutigen ID" eines Templates...

Data\Templates\Navigation\Navigation\Navigation.lrtpldatasc:
[TemplateList]
{5190b78f-0860-4ea3-b8d5-e101f536b639}:293283=Navigation_CollisionCircle_200.tpleData\Templates\Navigatio n\Navigation\Navigation_CollisionCircle_200.tple:

00000130: 00 00 00 3E 00 00 00 8F B7 90 51 60 08 A3 4E B8
00000140: D5 E1 01 F5 36 B6 39 A3 79 04 00 01 00 00 00 01

... die "Eindeutige ID" scheint also (mindestens) aus GUID+UInt32 zu bestehen.

Hinweis: Achtung, diese TPLE liegt nicht im Archiv-Format (GENOMFLE) vor, sondern direkt als GENOMETP. Wie man sehen kann, befindet sich am Anfang eine String-Liste... was auch die redundante String-Indizes-Liste erklärt, wenn ein GENOMETP in ein GENOMFLE verpackt wird.

Kronos
03.07.2007, 21:01
Stimmt, dass kann keine normale Datei sein!
Mir sind bisher immer nur Einträge aufgefallen die hinter dem Doppelpunkt eine Null haben. Vielleicht gibt es mehrere Dateien mit der GUID, sodass man noch eine Zahl zur Unterscheidung braucht ?:confused:

MFG,
Kronos

Kronos
04.07.2007, 21:21
Achja, MasterEvil für dich hab ich noch nen Tipp:

Wenn du noch Bezeichner für enums brauchst, kannst du dir ein Objekt mit dem enum raussuchen. Gothic 3 starten und das Objekt per Marvin spawnen und dann guckst du dir das Objekt per Edit im Marvin Modus an, der eine schon fertige Kopie deines Editors ist. Du kannst dann dort alle Bezeichner für das (?) Enum raussuchen, denn du hast dort auch eine nette Auswahlliste. Ich denke das ist nicht mehr Arbeit, als Nico zum raussuchen braucht!

MFG,
Kronos

Urban
05.07.2007, 18:14
Moin

falls es noch jemanden interessiert hier mal ne neue Version

v0.09
http://upload.worldofplayers.de/upload.cgi?a=show&file=67335f74706c655f6465736372697074696f6e5f3030392e7a6970&big=1

Gruß
Urban

NicoDE
05.07.2007, 20:28
Folgender Kommentar von mir "ps: der erste String in der Liste ist (fast?) immer "" (Länge 0)." kann entfernt werden (diese Aussage war/ist falsch; sie basierte auf der Annahme, dass die Anzahl der Strings in einem UInt16 stehen würde).

Erst in der nächsten Woche werde ich dazu kommen, die Analyse der restlichen Daten zu beginnen... was ziemlich aufwendig werden dürfte, da die entsprechenden Lesefunktionen etliche Versionsabfragen enthalten (und es teilweise komplett eigene Leseroutinen für diverse Dateiversionen gibt).

Urban
06.07.2007, 19:33
Moin

und hier noch ne neue Version

v0.12

http://upload.worldofplayers.de/upload.cgi?a=show&file=6c6273344867335f74706c655f6465736372697074696f6e5f3031322e7a6970&big=1

- Bug Fix
- Tiny Hexer Script: Tag's / Type's werden jetzt in Strings aufgelöst (die aus der DEADBEEF Section )
& Sub Class >eCCollisionShape<

Gruß
Urban

mdahm
06.07.2007, 20:41
falls es noch jemanden interessiert hier mal ne neue Version

Da keiner reagiert hat: Ja, es interessiert! :) v0.12 habe ich mir gerade runtergeladen. Wird ja immer besser :)

Urban
10.07.2007, 18:03
Moin

@mdahm
danke wenigsten einer den das interessiert :)

@all
um es nochmal zu sagen es soll der Hilfe dienen für die die zum Beispiel Tool's
erstellen (MasterEvil etc).
! Hilfe/Bug Fix etc ist erwüncht !


hier die aktuelle Version 0.15

Support:
- *.tple (GENOMFLE/GENOMETP, GENOMETP)
- *.lrtpl / *.lrtpldat
- *.lrgeo / *.lrgeodat
- *.sec
- TeacherSVMs.dat

http://upload.worldofplayers.de/upload.cgi?a=show&file=67335f74706c655f6465736372697074696f6e5f3031352e7a6970&big=1


Gruß
Urban

NicoDE
10.07.2007, 18:46
danke wenigsten einer den das interessiert :)Keine Angst, es gibt sicherlich genug, die einfach nur mitlesen (dieser Thread ist ohnehin ziemlich lang und es gibt (soweit ich es mitbekommen habe) keine bahnbrechenden Neuigkeiten).

Das einzige was deine Dokumentation (für mich) schwer lesbar macht, ist die ungewöhnliche Verwendung von Schreibweisen für Datenwerte und Byte-Folgen. In vielen Dokumenten wird die 4-Byte-Folge (hex) 00, 11, 22, 33 als hexadezimales Doppelwort so geschrieben: 0x33221100 (little endian). Du fasst die Bytes einfach zusammen (00112233), was dafür sorgt, dass jeder, der den Wert im little-endian-Format lesen möchte, unweigerlich darüber stolpert. Es ist sicherlich kein großes Problem; aber vermute mal, dass ich nicht der einzige bin, der dadurch Schwierigkeiten hat, die Dateninterpretation zu lesen.

Gruß Nico

Dungeon Master
10.07.2007, 18:57
danke wenigsten einer den das interessiert :)


Mich interessiert's auch und ich habe mir bisher jede Version runtergeladen. :) Danke für Deine Arbeit. §thx

MasterEvil
10.07.2007, 19:03
... was deine Dokumentation (für mich) schwer lesbar macht, ist die ungewöhnliche Verwendung von Schreibweisen für Datenwerte und Byte-Folgen ...

Ich komm besser damit klar wie er es gerade macht :)
Liegt aber vermutlich daran das ich einfach vorher noch nie mit Hex-Werten was machen musste, daher auch überhaupt keine Erfahrung habe ;)

Also, auch wenn ichs so besser finde würde ich auch vorschlagen es in der anderen Schreibweise zu machen, ich änder das im Editor auch noch.

NicoDE
10.07.2007, 19:13
Also, auch wenn ichs so besser finde würde ich auch vorschlagen es in der anderen Schreibweise zu machen, ich änder das im Editor auch noch.Mach dir mal nicht zuviel Arbeit deswegen. Ich bin zwar alt, aber wenn es mich total verwirrt hätte, dann hätte ich schon vorher was dazu geschrieben ;) Zumal dein Editor intern mit big-endian arbeitet und somit 00112233 die "natürliche" Schreibweise ist :)

Urban
10.07.2007, 20:28
§klatsch§dankeJo man

erstmal danke an alle hätte ich nicht gedacht da bis dato noch kein goßes feedback da war danke! §danke

@NicoDE
nur zur info ;)
zu schreib weise die meisten editoren stellen standard mäßig
little endian da (tiny auch).
Klickt man in Tiny Hexer Script auf einen Wert dann springt
dieser zum Wert im Dokumenten Fenster und dort ist der Wert nunmal
im little endian Format dargestellt, also gebe ich das auch so aus.

Wenn ich also z.B. ein "WORD" auslese
dann sieht das little endian wie folgt aus
0x0100 und nicht 0x01 0x00 (das sind zwei getrennte bytes)
die Spaltenbreite bei den meisten freunden und kollegen beträgt
ein WORD (0001 0002 0003 0004 ....).
Die "Value" Spalte (Script) stellt dann bei bedarf die "natürliche" Schreibweise dar.

wie gesagt nur zur info warum und weshalb!!

ich finde das da noch einige interessante Dinge dazu gekommen sind.

gibt es ne Möglichkeit die structure bsw aufbau z.B. bCRange1
raus zu kriegen ? (ja ich weiß wenn man den Code hätte§cry)

@MasterEvil
nur weiter so vielleicht kannst du noch ein paar Sachen in den Editor einbauen wie z.B GUID's (siehe Script oder dump)?

EDIT: oh Sorry hab die neue Version von dir grade erst gesehen heiß bei dir Hash ok
und noch ne tip der Eintrag unter gCItem_PS->skill in z.B. Ims_Skills_MISC_It_Perk_Acrobatic.tple
01 00 01 ->ist ein HASH bzw GUID<- 34 79 18 51 28 B7 FE 41 B6 99 EA 3B F6 B3 A4 F2 00 00 00 00
(GUID+Extended siehe post von NicoDE)


v0.16 bug fix
http://upload.worldofplayers.de/upload.cgi?a=show&file=67335f74706c655f6465736372697074696f6e5f3031362e7a6970&big=1


Gruß
Urban

NicoDE
10.07.2007, 21:11
gibt es ne Möglichkeit die structure bsw aufbau z.B. bCRange1 raus zu kriegen ?Auf den ersten Blick würde ich sagen, dass 2 Fließkommazahlen (2*4 Byte) aus dem Stream gelesen werden (Min/Max). Die anderen Werte scheinen aus diesen beiden Zahlen hergeleitet zu werden (Center,Random,...), bzw Min/Max aus den Parametern berechnet zu werden (Average/Variance).

Urban
10.07.2007, 21:32
Ok dann lang ich nicht verkert danke!

gibt es noch mehr infos in bezug auf die struc's?

Gruß
Urabn

NicoDE
10.07.2007, 21:37
gibt es noch mehr infos in bezug auf die struc's?Ich sag’s mal so... es gibt so viele Strukturen und Klassen, dass ich sicher nicht versuche werde, alle und jede zu analysieren :)
Wenn du etwas bestimmtes brauchst (und ich gerade Zeit habe - was manchmal eine ganze Weile dauern kann) dann werde ich sicher keine Mühe scheuen, einen Blick in die Glaskugel (Disassembler) zu werfen :)

Angelos_AI
12.07.2007, 15:30
console

eCVisualMeshDynamic_PS
ResourceFilePath
ResourceFileName
StaticLightingType 1 : eEStaticLighingType_Instanc
LightmapAmbientOcclusion 1 : eELightmapAmbientOcclusion
LightmapType 0 : eELightmapType_PerVertex
UnitsPerLightmapTexel 25.000000
MaterialSwitch 0


tple

0002 = eCVisualMeshDynamic_PS
0003 = ResourceFilePath
0004 = bCMeshResourceString
0005 = G3_Item_Smoke_Joint_01.xcmsh
0006 = ResourceFileName
0007 = StaticLightingType
0008 = bTPropertyContainer<enum eEStaticLighingType>
0009 = LightmapAmbientOcclusion
000A = bTPropertyContainer<enum eELightmapAmbientOcclusion>
000B = LightmapType
000C = bTPropertyContainer<enum eELightmapType>
000D = UnitsPerLightmapTexel
000E = float
000F = MaterialSwitch
0010 = int


console
StaticLightingType 1 : eEStaticLighingType_Instanc

tple
StaticLightingType
bTPropertyContainer<enum eEStaticLighingType>


console ? Instanc

tple ? bTPropertyContainer<enum

mdahm
12.07.2007, 21:17
Ach so ist das also! ;)

Urban
13.07.2007, 16:48
Jo und hier noch ein paar ENUM's




eEAudioEmitterMode {
eEAudioEmitterMode_Once = 0,
eEAudioEmitterMode_Loop = 1,
eEAudioEmitterMode_Repeat = 2
}

eETriggerListProcessType {
eETriggerListProcessType_All = 0,
eETriggerListProcessType_NextOne = 1,
eETriggerListProcessType_Rand_One = 2
}

gEEmitterType {
gEEmitterType_Point = 0,
gEEmitterType_Line = 1,
gEEmitterType_Box = 2,
gEEmitterType_Circle = 3,
gEEmitterType_Sphere = 4,
gEEmitterType_Mesh = 5
}

gEDirectionMode {
gEDirectionMode_None = 0,
gEDirectionMode_Direction = 1,
gEDirectionMode_Target = 2
}

gEVisualOrientation {
gEVisualOrientation_None = 0,
gEVisualOrientation_Velo = 1,
gEVisualOrientation_Velo3D = 2
}

gEFOR {
gEFOR_World = 0,
gEFOR_Object = 1
}

gEMasterBlending {
gEMasterBlending_InvSrcAlpha = 0,
gEMasterBlending_SrcAlpha = 1
}

gEMasterCmpFunc {
gEMasterCmpFunc_Less = 0
}

eETextureDrawStyle {
eETextureDrawStyle_Regular = 0,
eETextureDrawStyle_AlphaBlend = 1,
eETextureDrawStyle_Modulated = 2,
eETextureDrawStyle_Translucent = 3,
eETextureDrawStyle_AlphaModulate = 4,
eETextureDrawStyle_Darken = 5,
eETextureDrawStyle_Brighten = 6,
eETextureDrawStyle_Invisible = 7
}

eECoordinateSystem {
eECoordinateSystem_Independent = 0,
eECoordinateSystem_Relative = 1
}

eEVelocityDirectionFrom {
eEVelocityDirectionFrom_None = 0,
eEVelocityDirectionFrom_StartPositionAndOwner = 1,
eEVelocityDirectionFrom_OwnerAndStartPosition = 2
}

eELocationShape {
eELocationShape_Box = 0,
eELocationShape_Sphere = 1
}

eEFacingDirection {
eEFacingDirection_FacingCamera = 0,
eEFacingDirection_AlongMovementFacingCamera = 1,
eEFacingDirection_SpecifiedNormal = 2,
eEFacingDirection_AlongMovementFacingNormal = 3,
eEFacingDirection_PerpendicularToMovement = 4
}

eERotationFrom {
eERotationFrom_None = 0,
eERotationFrom_Entity = 1,
eERotationFrom_Offset = 2,
eERotationFrom_Normal = 3
}

eESpawningSound {
eESpawningSound_Disabled = 0,
eESpawningSound_LinearLocal = 1,
eESpawningSound_LinearGlobal = 2,
eESpawningSound_Random = 3
}

eECollisionSound {
eECollisionSound_Disabled = 0,
eECollisionSound_LinearLocal = 1,
eECollisionSound_LinearGlobal = 2,
eECollisionSound_Random = 3
}

eELightingStyle {
eELightingStyle_Disabled = 0,
eELightingStyle_Flat = 1,
eELightingStyle_Particle = 2,
eELightingStyle_System = 3
}

eEForceFieldType {
eEForceFieldType_AddForce = 0,
eEForceFieldType_ChangeVelocity = 1
}

eEForceFieldDirMode {
eEForceFieldDirMode_Entity_AtVec = 0,
eEForceFieldDirMode_ShapeCenterOutside = 1,
eEForceFieldDirMode_ShapeCenterInside = 2,
eEForceFieldDirMode_EntityCenterOutside = 3,
eEForceFieldDirMode_EntityCenterInside = 4
}

eEForceFieldDistanceScale {
eEForceFieldDistanceScale_One = 0,
eEForceFieldDistanceScale_Linear = 1,
eEForceFieldDistanceScale_Ease = 2,
eEForceFieldDistanceScale_Exp = 3
}

eEShapeAABBAdapt {
eEShapeAABBAdapt_None = 0,
eEShapeAABBAdapt_LocalNode = 1,
eEShapeAABBAdapt_LocalTree = 2
}

eECollisionShapeType {
eECollisionShapeType_None = 0,
eECollisionShapeType_Box = 1,
eECollisionShapeType_TriMesh = 2,
eECollisionShapeType_ConvexHull = 3,
eECollisionShapeType_Plane = 4,
eECollisionShapeType_Capsule = 5,
eECollisionShapeType_Sphere = 6,
eECollisionShapeType_Point = 7
}

eEJointFlag {
eEJointFlag_None = 0,
eEJointFlag_CollisionEnabled = 1,
eEJointFlag_Visualization = 2
}

eEJointProjectionMode {
eEJointProjectionMode_NONE = 0,
eEJointProjectionMode_POINT_MINDIST = 1
}

eESoundLoopMode {
eESoundLoopMode_Off = 0,
eESoundLoopMode_Normal = 1,
eESoundLoopMode_PingPong = 2
}

eEAmbientEnvironment {
eEAmbientEnvironment_Forest = 0,
eEAmbientEnvironment_Meadow = 1,
eEAmbientEnvironment_Plain = 2,
eEAmbientEnvironment_Mountain = 3,
eEAmbientEnvironment_Coast = 4,
eEAmbientEnvironment_Town = 5
}

eEShaderMaterialBlendMode {
eEShaderMaterialBlendMode_Normal = 0,
eEShaderMaterialBlendMode_Masked = 1,
eEShaderMaterialBlendMode_AlphaBlend = 2,
eEShaderMaterialBlendMode_Modulate = 3,
eEShaderMaterialBlendMode_AlphaModulate = 4,
eEShaderMaterialBlendMode_Translucent = 5,
eEShaderMaterialBlendMode_Brighten = 6,
eEShaderMaterialBlendMode_Darken = 7,
eEShaderMaterialBlendMode_Invisible = 8
}

eEShaderMaterialVersion {
eEShaderMaterialVersion_1_1 = 0,
eEShaderMaterialVersion_1_4 = 1,
eEShaderMaterialVersion_2_0 = 2,
eEShaderMaterialVersion_3_0 = 3
}

eEShaderMaterialTransformation {
eEShaderMaterialTransformation_Default = 0,
eEShaderMaterialTransformation_Instanced = 1,
eEShaderMaterialTransformation_Skinned = 2,
eEShaderMaterialTransformation_Tree_Branches = 3,
eEShaderMaterialTransformation_Tree_Fronds = 4,
eEShaderMaterialTransformation_Tree_Leafs = 5,
eEShaderMaterialTransformation_Billboard = 6
}

eETexCoordSrcOscillatorType {
eETexCoordSrcOscillatorType_Pan = 0,
eETexCoordSrcOscillatorType_Stretch = 1,
eETexCoordSrcOscillatorType_StretchRepeat = 2,
eETexCoordSrcOscillatorType_Jitter = 3
}

eETexCoordSrcRotatorType {
eETexCoordSrcRotatorType_Once = 0,
eETexCoordSrcRotatorType_Constant = 1,
eETexCoordSrcRotatorType_Oscillate = 2
}

eEColorSrcCombinerType {
eEColorSrcCombinerType_Add = 0,
eEColorSrcCombinerType_Subtract = 1,
eEColorSrcCombinerType_Multiply = 2,
eEColorSrcCombinerType_Max = 3,
eEColorSrcCombinerType_Min = 4
}

eEColorSrcSampleTexRepeat {
eEColorSrcSampleTexRepeat_Wrap = 0,
eEColorSrcSampleTexRepeat_Clamp = 1,
eEColorSrcSampleTexRepeat_Mirror = 2
}

eEColorSrcSwitchRepeat {
eEColorSrcSwitchRepeat_Repeat = 0,
eEColorSrcSwitchRepeat_Clamp = 1,
eEColorSrcSwitchRepeat_PingPong = 2
}

eEVegetationBrushMode {
eEVegetationBrushMode_Place = 0,
eEVegetationBrushMode_Remove = 1
}

eEVegetationBrushShape {
eEVegetationBrushShape_Circle = 0,
eEVegetationBrushShape_Rect = 1,
eEVegetationBrushShape_Single = 2
}

eEVegetationBrushPlace {
eEVegetationBrushPlace_DistanceSelf = 0,
eEVegetationBrushPlace_DistanceOther = 1,
eEVegetationBrushPlace_RemoveOther = 2
}

eEVegetationBrushProbability {
eEVegetationBrushProbabilityFunction_None = 0,
eEVegetationBrushProbabilityFunction_Shape = 1,
eEVegetationBrushProbabilityFunction_PerlinNoise = 2,
eEVegetationBrushProbabilityFunction_PerlinNoise_Improved = 3,
eEVegetationBrushProbabilityFunction_EbertNoise = 4,
eEVegetationBrushProbabilityFunction_PeacheyNoise = 5,
eEVegetationBrushProbabilityFunction_PeacheyNoise_Gradient = 6,
eEVegetationBrushProbabilityFunction_PeacheyNoise_GradientValue = 7,
eEVegetationBrushProbabilityFunction_PeacheyNoise_SparseConvolusion = 8,
eEVegetationBrushProbabilityFunction_PeacheyNoise_ValueConvolusion = 9
}

eEVegetationBrushColorFunction {
eEVegetationBrushColorFunction_Random = 0,
eEVegetationBrushColorFunction_PerlinNoise = 1,
eEVegetationBrushColorFunction_PerlinNoise_Improved = 2,
eEVegetationBrushColorFunction_EbertNoise = 3,
eEVegetationBrushColorFunction_PeacheyNoise = 4,
eEVegetationBrushColorFunction_PeacheyNoise_Gradient = 5,
eEVegetationBrushColorFunction_PeacheyNoise_GradientValue = 6,
eEVegetationBrushColorFunction_PeacheyNoise_SparseConvolusion = 7,
eEVegetationBrushColorFunction_PeacheyNoise_ValueConvolusion = 8
}

eEVegetationMeshShading {
eEVegetationMeshShading_MeshNormal = 0,
eEVegetationMeshShading_EntryOrientation = 1
}

eEWeatherZoneShape {
eEWeatherZoneShape_2D_Circle = 0,
eEWeatherZoneShape_2D_Rect = 1,
eEWeatherZoneShape_3D_Sphere = 2,
eEWeatherZoneShape_3D_Box = 3
}

eEWeatherZoneOverwrite {
eEWeatherZoneOverwrite_None = 0,
eEWeatherZoneOverwrite_Overwrite = 1,
eEWeatherZoneOverwrite_Modulate = 2,
eEWeatherZoneOverwrite_Add = 3
}




-FIXED-

sind auch in v0.17
g3_tple_description_017.zip
enthalten

http://upload.worldofplayers.de/upload.cgi?a=show&file=6e67335f74706c655f6465736372697074696f6e5f3031372e7a6970&big=1

Gruß
Urban

NicoDE
13.07.2007, 19:17
Ich denke da ist noch ein kleiner Fehler drin; so sollte es korrekt sein:
eEForceFieldDistanceScale {
eEForceFieldDistanceScale_One = 0,
eEForceFieldDistanceScale_Linear = 1,
eEForceFieldDistanceScale_Ease = 2,
eEForceFieldDistanceScale_Exp = 3
}

Urban
13.07.2007, 20:43
Oh ja danke ist gefixt

Urban

NicoDE
13.07.2007, 21:55
eECollisionShapeType {
eECollisionShapeType_None = 0,
eECollisionShapeType_Box = 1,
eECollisionShapeType_TriMesh = 2,
eECollisionShapeType_ConvexHull = 3,
eECollisionShapeType_Plane = 4,
eECollisionShapeType_Capsule = 5,
eECollisionShapeType_Sphere = 6,
eECollisionShapeType_Point = 7
}Wie ermittelst du die Werte der Mitglieder der Aufzählung?
Ich habe da was anderes in meinen Notizen stehen:
eECollisionShapeType {
eECollisionShapeType_None = 0,
eECollisionShapeType_TriMesh = 1,
eECollisionShapeType_Plane = 2,
eECollisionShapeType_Box = 3,
eECollisionShapeType_Capsule = 4,
eECollisionShapeType_Sphere = 5,
eECollisionShapeType_ConvexHull = 6,
eECollisionShapeType_Point = 7
}Meine Daten stammen aus den (per Disassembler aufgelösten) Referenzen auf die Property-Member (bTPropertyType<XXX,bTPropertyContainer<YYY>> XXX::ms_PropertyMember_m_ZZZ). Bisher bin ich davon ausgegangen, dass der numerische Wert dort registriert wird (was bisher mit den verifizierten Datensätzen übereinstimmte).

Gruß Nico

ps: die anderen Aufzählungen in deiner Liste habe ich bisher noch nicht verglichen.

Urban
14.07.2007, 21:29
Ok OK du hast mich erwischt. ;)
Dachte es mir schon dass es in die Hose geht,
habe aus Zeitgründen nur die Einträge aus der String Table genommen.:confused:
Aber danke dass du das überprüfst. §danke

Gruß
Urban

NicoDE
14.07.2007, 23:38
Aber danke dass du das überprüfst. §dankeIm Moment genieße ich eher meinen Urlaub :D
Ich werde bis morgen (Montag) mal meine Enum-Liste aufbereiten und zur Verfügung stellen. Sie ist sicher nicht komplett und enthält viele unwichtige Aufzählungen (zumindest was die Templates angeht) - aber ich denke, es müssen sich nicht mehrere Leute die gleiche Arbeit machen...

NicoDE
16.07.2007, 00:06
Bitteschön.

Angelos_AI
16.07.2007, 15:20
gCItem_PS



AccessActivateSkill1 \ gCItem_PS \ eCTemplateEntityProxy
AccessActivateSkill2 \ gCItem_PS \ eCTemplateEntityProxy
AccessAmount \ gCItem_PS
AccessArmorSet \ gCItem_PS \ eCTemplateEntityProxy
AccessCategory \ gCItem_PS \ bTPropertyContainer \ gEItemCategory
AccessDropped \ gCItem_PS
AccessGoldValue \ gCItem_PS
AccessItemInventory \ gCItem_PS \ eCTemplateEntityProxy
AccessItemWorld \ gCItem_PS \ eCTemplateEntityProxy
AccessMissionItem \ gCItem_PS
AccessModAttrib1Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
AccessModAttrib1Tag \ gCItem_PS \ bCString
AccessModAttrib1Value \ gCItem_PS
AccessModAttrib2Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
AccessModAttrib2Tag \ gCItem_PS \ bCString
AccessModAttrib2Value \ gCItem_PS
AccessModAttrib3Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
AccessModAttrib3Tag \ gCItem_PS \ bCString
AccessModAttrib3Value \ gCItem_PS
AccessModAttrib4Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
AccessModAttrib4Tag \ gCItem_PS \ bCString
AccessModAttrib4Value \ gCItem_PS
AccessModAttrib5Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
AccessModAttrib5Tag \ gCItem_PS \ bCString
AccessModAttrib5Value \ gCItem_PS
AccessModAttrib6Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
AccessModAttrib6Tag \ gCItem_PS \ bCString
AccessModAttrib6Value \ gCItem_PS
AccessPermanent \ gCItem_PS
AccessQuality \ gCItem_PS
AccessReqAttrib1Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
AccessReqAttrib1Tag \ gCItem_PS \ bCString
AccessReqAttrib1Value \ gCItem_PS
AccessReqAttrib2Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
AccessReqAttrib2Tag \ gCItem_PS \ bCString
AccessReqAttrib2Value \ gCItem_PS
AccessReqAttrib3Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
AccessReqAttrib3Tag \ gCItem_PS \ bCString
AccessReqAttrib3Value \ gCItem_PS
AccessReqAttrib4Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
AccessReqAttrib4Tag \ gCItem_PS \ bCString
AccessReqAttrib4Value \ gCItem_PS
AccessRequiredSkill1 \ gCItem_PS \ eCTemplateEntityProxy
AccessRequiredSkill2 \ gCItem_PS \ eCTemplateEntityProxy
AccessRobe \ gCItem_PS
AccessSkill \ gCItem_PS \ eCTemplateEntityProxy
AccessSpell \ gCItem_PS \ eCTemplateEntityProxy
AccessTexture \ gCItem_PS \ bCString
Compare \ gCItem_PS \ gCInventory_PS
CopyFrom \ gCItem_PS \ bEResult \ bCObjectBase
Create \ gCItem_PS \ bEResult
Destroy \ gCItem_PS
ExecuteScript \ gCItem_PS
GetActivateSkill1 \ gCItem_PS \ eCTemplateEntityProxy
GetActivateSkill2 \ gCItem_PS \ eCTemplateEntityProxy
GetAmount \ gCItem_PS
GetArmorSet \ gCItem_PS \ eCTemplateEntityProxy
GetCategory \ gCItem_PS \ bTPropertyContainer \ gEItemCategory
GetDropped \ gCItem_PS
GetGoldValue \ gCItem_PS
GetImage \ gCItem_PS \ bCString
GetItemInventory \ gCItem_PS \ eCTemplateEntityProxy
GetItemWorld \ gCItem_PS \ eCTemplateEntityProxy
GetMissionItem \ gCItem_PS
GetModAttrib1Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
GetModAttrib1Tag \ gCItem_PS \ bCString
GetModAttrib1Value \ gCItem_PS
GetModAttrib2Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
GetModAttrib2Tag \ gCItem_PS \ bCString
GetModAttrib2Value \ gCItem_PS
GetModAttrib3Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
GetModAttrib3Tag \ gCItem_PS \ bCString
GetModAttrib3Value \ gCItem_PS
GetModAttrib4Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
GetModAttrib4Tag \ gCItem_PS \ bCString
GetModAttrib4Value \ gCItem_PS
GetModAttrib5Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
GetModAttrib5Tag \ gCItem_PS \ bCString
GetModAttrib5Value \ gCItem_PS
GetModAttrib6Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
GetModAttrib6Tag \ gCItem_PS \ bCString
GetModAttrib6Value \ gCItem_PS
GetModValue \ gCItem_PS \ bCString
GetPermanent \ gCItem_PS
GetPropertySetType \ gCItem_PS \ eEPropertySetType
GetQuality \ gCItem_PS
GetReqAttrib1Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
GetReqAttrib1Tag \ gCItem_PS \ bCString
GetReqAttrib1Value \ gCItem_PS
GetReqAttrib2Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
GetReqAttrib2Tag \ gCItem_PS \ bCString
GetReqAttrib2Value \ gCItem_PS
GetReqAttrib3Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
GetReqAttrib3Tag \ gCItem_PS \ bCString
GetReqAttrib3Value \ gCItem_PS
GetReqAttrib4Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
GetReqAttrib4Tag \ gCItem_PS \ bCString
GetReqAttrib4Value \ gCItem_PS
GetRequiredSkill1 \ gCItem_PS \ eCTemplateEntityProxy
GetRequiredSkill2 \ gCItem_PS \ eCTemplateEntityProxy
GetRobe \ gCItem_PS
GetRootObject \ gCItem_PS \ bCPropertyObjectBase
GetSaveGameRelevance \ gCItem_PS \ eEPSSaveGameRelevance \ eCEntityPropertySet
GetScript \ gCItem_PS \ bTObjArray \ USScriptLine \ gCItem_PS
GetScript \ gCItem_PS \ bTObjArray \ USScriptLine \ gCItem_PS
GetSkill \ gCItem_PS \ eCTemplateEntityProxy
GetSlot \ gCItem_PS \ gESlot
GetSpell \ gCItem_PS \ eCTemplateEntityProxy
GetTexture \ gCItem_PS \ bCString
GetVersion \ gCItem_PS
GetWeaponItem \ gCEntity \ gCItem_PS
Invalidate \ gCItem_PS
IsEquipped \ gCItem_PS
IsReferencedByTemplate \ gCItem_PS
IsVisible \ gCItem_PS
OnCustomPatch \ gCItem_PS \ eCEntityPropertySet
OnPostRead \ gCItem_PS
OnTouch \ gCItem_PS \ eCEntity \ eCContactIterator
PostInitializeProperties \ gCItem_PS \ bEResult
Read \ gCItem_PS \ bEResult \ bCIStream
SetActivateSkill1 \ gCItem_PS \ eCTemplateEntityProxy
SetActivateSkill2 \ gCItem_PS \ eCTemplateEntityProxy
SetAmount \ gCItem_PS
SetArmorSet \ gCItem_PS \ eCTemplateEntityProxy
SetCategory \ gCItem_PS \ bTPropertyContainer \ gEItemCategory
SetDropped \ gCItem_PS
SetGoldValue \ gCItem_PS
SetItemInventory \ gCItem_PS \ eCTemplateEntityProxy
SetItemWorld \ gCItem_PS \ eCTemplateEntityProxy
SetMissionItem \ gCItem_PS
SetModAttrib1Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
SetModAttrib1Tag \ gCItem_PS \ bCString
SetModAttrib1Value \ gCItem_PS
SetModAttrib2Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
SetModAttrib2Tag \ gCItem_PS \ bCString
SetModAttrib2Value \ gCItem_PS
SetModAttrib3Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
SetModAttrib3Tag \ gCItem_PS \ bCString
SetModAttrib3Value \ gCItem_PS
SetModAttrib4Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
SetModAttrib4Tag \ gCItem_PS \ bCString
SetModAttrib4Value \ gCItem_PS
SetModAttrib5Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
SetModAttrib5Tag \ gCItem_PS \ bCString
SetModAttrib5Value \ gCItem_PS
SetModAttrib6Op \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
SetModAttrib6Tag \ gCItem_PS \ bCString
SetModAttrib6Value \ gCItem_PS
SetPermanent \ gCItem_PS
SetQuality \ gCItem_PS
SetReqAttrib1Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
SetReqAttrib1Tag \ gCItem_PS \ bCString
SetReqAttrib1Value \ gCItem_PS
SetReqAttrib2Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
SetReqAttrib2Tag \ gCItem_PS \ bCString
SetReqAttrib2Value \ gCItem_PS
SetReqAttrib3Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
SetReqAttrib3Tag \ gCItem_PS \ bCString
SetReqAttrib3Value \ gCItem_PS
SetReqAttrib4Op \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
SetReqAttrib4Tag \ gCItem_PS \ bCString
SetReqAttrib4Value \ gCItem_PS
SetRequiredSkill1 \ gCItem_PS \ eCTemplateEntityProxy
SetRequiredSkill2 \ gCItem_PS \ eCTemplateEntityProxy
SetRobe \ gCItem_PS
SetSkill \ gCItem_PS \ eCTemplateEntityProxy
SetSlot \ gCItem_PS \ gESlot
SetSpell \ gCItem_PS \ eCTemplateEntityProxy
SetTexture \ gCItem_PS \ bCString
SetVisible \ gCItem_PS
Write \ gCItem_PS \ bEResult \ bCOStream
ms_PropertyMember_m_bDropped \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_bMissionItem \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_bPermanent \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_bRobe \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_entActivateSkill1 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_entActivateSkill2 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_entArmorSet \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_entRequiredSkill1 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_entRequiredSkill2 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_entSkill \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_entSpell \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_enuCategory \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ gEItemCategory
ms_PropertyMember_m_enuModAttrib1 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
ms_PropertyMember_m_enuModAttrib2 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
ms_PropertyMember_m_enuModAttrib3 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
ms_PropertyMember_m_enuModAttrib4 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
ms_PropertyMember_m_enuModAttrib5 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
ms_PropertyMember_m_enuModAttrib6 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribModOperation
ms_PropertyMember_m_enuReqAttrib1 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
ms_PropertyMember_m_enuReqAttrib2 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
ms_PropertyMember_m_enuReqAttrib3 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
ms_PropertyMember_m_enuReqAttrib4 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bTPropertyContainer \ EAttribReqOperation
ms_PropertyMember_m_iGoldValue \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iModAttrib1 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iModAttrib2 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iModAttrib3 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iModAttrib4 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iModAttrib5 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iModAttrib6 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iReqAttrib1 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iReqAttrib2 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iReqAttrib3 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_iReqAttrib4 \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_itemWorld \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_itemInventory \ gCItem_PS \ bTPropertyType \ gCItem_PS \ eCTemplateEntityProxy
ms_PropertyMember_m_strModAttrib1 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strModAttrib2 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strModAttrib3 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strModAttrib4 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strModAttrib5 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strModAttrib6 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strReqAttrib1 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strReqAttrib2 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strReqAttrib3 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strReqAttrib4 \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_strTexture \ gCItem_PS \ bTPropertyType \ gCItem_PS \ bCString
ms_PropertyMember_m_u32Amount \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyMember_m_u32Quality \ gCItem_PS \ bTPropertyType \ gCItem_PS
ms_PropertyObjectInstance_gCItem_PS \ gCItem_PS0VbTPropertyObject \ gCItem_PS \ eCEntityPropertySet

NicoDE
16.07.2007, 21:56
Lieber Angelos_AI, die exportierten Funktionen kann man mit etlichen Tools herausschreiben. Dies ist schon der zweite unkommentierte Beitrag ohne offensichtlichen Informationsgehalt. Hier geht es um die Entschlüsselung der Persistenzdaten diverser Klassen...

Urban
17.07.2007, 00:21
Danke NicoDE :) Super

hab mal kurz ein geschaut das ist noch nict alles drin (ich mein auch die Sachen von mir) oder ?:rolleyes:

Gruß
Urban

NicoDE
17.07.2007, 11:34
hab mal kurz ein geschaut das ist noch nict alles drin (ich mein auch die Sachen von mir) oder ?:rolleyes:Meine Liste ist schon etwas älter, ich habe sie nur etwas aufgeräumt und meine persönlichen Notizen entfernt. Die Liste ist mit Sicherheit nicht vollständig. Mir fehlt die Freizeit um die DLLs komplett zu analysieren. Alle, durch den Disassembler, automatisch gefundenen Strings und deren Referenzen sind in der Datei vorhanden. Wurden keine Referenzen gefunden, steht nur ??? dort.
Da die "G3 Taskforce" in absehbarer Zeit den Quellcode bekommen soll, ist weitere Arbeit meinerseits wohl nicht mehr nötig.

Kronos
17.07.2007, 14:38
Tja was wir an dem Code kriegen weiß ja auch keiner, und wieviel man damit anfangen kann auch nicht. Aber du hast recht, jetzt Arbeit zu machen, die nachher vielleicht nutzlos war ist unnötig!

MFG,
Kronos

NicoDE
17.07.2007, 22:19
Tja was wir an dem Code kriegen weiß ja auch keiner, und wieviel man damit anfangen kann auch nicht. Aber du hast recht, jetzt Arbeit zu machen, die nachher vielleicht nutzlos war ist unnötig!Nunja, ich würde nicht sagen, dass es unnötig war, dass die Dialoge, Questen und Templates komplett oder zu großen Teilen bearbeitbar geworden sind :)
Wie auch immer, ich bin im Moment so oder so mit G1 beschäftigt.

Kronos
18.07.2007, 11:39
Nein ich meinte auch nicht, dass es unnötig war, nur, dass weitere Arbeit vielleicht unnötig ist. Aber durch die bisherige Arbeit haben wir wenigsten einen Überblick bekommen, was in den Templates geregelt wird und was man damit machen kann.

Mit G1? Aha, naja ich würde dich ja fragen was du so machst, aber das würde hier nun wirklich nicht hinpassen ;)

MFG,
Kronos

yankee
18.07.2007, 21:25
Ich habe mir auch gerade überlegt mal ein Programm zu schreiben, welches möglichst viele Informationen aus Gothic3 rausholt...

Sonderlich weit bin ich nicht gekommen (also auf dem Stand von Urban bin ich noch nicht), aber ich gebe mir Mühe zu euch aufzuholen.

Mein Programm wandelt die Binärdateien in xml um. Wäre natürlich verdammt cool, wenn man es schaffen würde eine Art "Standard" zu schaffen, mit dem alle was anfangen können etc.
Naja... Ob das mal gelingt...

Aber erstmal meine Ergebnisse:

http://gothic.cipher-code.de/Miscellaneous_World_It_Joint.xml
http://gothic.cipher-code.de/_Weapons_1H_World_It_1H_Sword_01.xml

Mit den zwei tple's habe ich es erstmal versucht.

Erstellt habe ich die Dateien mit Java... Alles, was dafür notwenidig ist, sind diese 2 Klassen:

http://gothic.cipher-code.de/LittleEndianDataInputStream.java
http://gothic.cipher-code.de/TpleFile.java

Was mir aber erstmal so auffällt:
Hat das mit dem Hochzählen der String Index Table Entries am Anfang irgendeinen Sinn? Also ausser die Datei unnötig größer zu machen?
Diese "Magic-Values"... Erscheinen mir teilweise auch etwas sinnlos. Also gut, man kann mit erhöhter Präzision sagen, ob die Datei beschädigt ist, aber sont?

@Urban:
In deinem Script ist mir aufgefallen, dass du alle Werte immer als big endian einliest. Zumindest, wenn ich die Hilfe vom TinxHex richtig vesratnden habe ^^.
Ich lese alle Werte als LittleEndian ein und komme auf die gleichen Ergebnisse wie du (ausser bei der GUID, da ist noch irgendwas "komisch"). (Am Anfang hat mich das super verwirrt. Da Java auf Big Endian beruht habe ich mich erstmal gefreut und mich gewundert, warum alles drunter und drüber geht). Kannst du mir das erklären? ^^.

Ansonsten noch Respekt an die Arbeit, die ihr bis jetzt geleisted habt.

NicoDE
18.07.2007, 22:33
Hat das mit dem Hochzählen der String Index Table Entries am Anfang irgendeinen Sinn? Also ausser die Datei unnötig größer zu machen?Jain...
Bevor es das Archiv(GENOMFLE)-Format gab (bei dem der Streaming-Operator für bCString überschrieben wurde), hatte die Vorlageentität-Klasse wohl bereits die gleiche Optimierung (nur, dass sich die String-Tabelle am Anfang befand). Da sich in der TPLE nur eine Vorlageentität befindet, sorgt diese Optimierung im optimierten Archiv-Format für redundante Daten...


Diese "Magic-Values"... Erscheinen mir teilweise auch etwas sinnlos. Also gut, man kann mit erhöhter Präzision sagen, ob die Datei beschädigt ist, aber sont?Ich denke es gibt kein "sonst". Wenn die Engine bei der Entwicklung geändert wurde, wollte man nicht erst durch skurrile Fehler merken, dass man mit alten/inkompatiblen Klassendaten arbeitet.

Urban
19.07.2007, 00:54
Moin



@Urban:
In deinem Script ist mir aufgefallen, dass du alle Werte immer als big endian einliest. Zumindest, wenn ich die Hilfe vom TinxHex richtig vesratnden habe ^^.
Ich lese alle Werte als LittleEndian ein und komme auf die gleichen Ergebnisse wie du (ausser bei der GUID, da ist noch irgendwas "komisch"). (Am Anfang hat mich das super verwirrt. Da Java auf Big Endian beruht habe ich mich erstmal gefreut und mich gewundert, warum alles drunter und drüber geht). Kannst du mir das erklären? ^^.


Das ist ein Problem vom Tiny Hexer bzw der fehlerhaften Bezeichnung

Die GUID sieht deshalb so "komisch" aus weil sie eine Structure mit
folgenden aufbau ist:



typedef struct GUID
{
DWORD Data1; //32 Bit
WORD Data2; // 16 Bit
WORD Data3; // 16 Bit
Byte Data4[8]; //64 Bit
}


denke bei DWORD & WORD an Little Endian ;)

Gruß
Urban

Urban
20.07.2007, 17:47
So und hier mal wieder ne neue Version

v0.18
- Vector3f Section

http://upload.worldofplayers.de/upload.cgi?a=show&file=67335f74706c655f6465736372697074696f6e5f3031382e7a6970&big=1

Gruß
Urban

Kronos
20.07.2007, 18:47
Schöne Arbeit §klatsch
Aber hast du auch eine Idee was der Sinn dieses Vektors ist? Denkst du es ist eine Position ? Oder wie bisd du sonst auf die x,y,z gekommen :confused:

MFG,
Kronos

Urban
20.07.2007, 19:25
Moin


Schöne Arbeit §klatsch
Aber hast du auch eine Idee was der Sinn dieses Vektors ist? Denkst du es ist eine Position ? Oder wie bisd du sonst auf die x,y,z gekommen :confused:

MFG,
Kronos

Es kommt auf die Datei an (ist noch nicht alles 100%)
Orientation/Location/Position/Velocity etc
wurde zum Teil getestet mit SFX Daten
(wie immer ohne gewähr)

Gruß
Urban

Urban
21.07.2007, 09:59
und noch ne Bug Fix Version 0.19

http://upload.worldofplayers.de/upload.cgi?a=show&file=67335f74706c655f6465736372697074696f6e5f3031392e7a6970&big=1

Gruß
Urban

Kronos
21.07.2007, 20:48
Was mich sehr interessieren würde (und ich weiß nicht, ob man es herausfinden kann), wie die Klasse class bCVector aufgebaut ist.

Kann man das herausfinden ?
MFG,
Kronos

Urban
22.07.2007, 12:00
Moin moin


Was mich sehr interessieren würde (und ich weiß nicht, ob man es herausfinden kann), wie die Klasse class bCVector aufgebaut ist.

Kann man das herausfinden ?
MFG,
Kronos


ja könne man aber wofür ? Das ist eine Standardsache und nichts besonderes, ich könnte die die Funktionsaufrufe geben den Inhalt
muss man aber selber machen.
Google mal sowas wie -> vector3d.cpp class oder so

Es gibt auch noch:

bCVector2() //u,v Texture Coordinate
bCVector4() //x,y,z,w

Gruß
Urban

Angelos_AI
03.08.2007, 06:00
§cry §cry §cry 22.07.2007, 12:00 §cry §cry §cry

g3_tple_description_020 :dnuhr:
g3_tple_description_021 :dnuhr:
g3_tple_description_022 :dnuhr:

§wink :gratz
Hans Trapp
r00tshell (tplereader)
MasterEvil
NicoDE
mdahm

mdahm
03.08.2007, 19:10
:dnuhr:

Dachte ich auch, als ich deinen Post gelesen habe. ;)

Urban
04.08.2007, 08:53
Moin

@ngelos_AI
da du mich nicht mit aufgezählt hast gibt es auch keine neue Version (ich hab da auch ein paar Dinge zu beigetragen;)) :p
Ok ok Spaß bei seite ich hab zu tun und es gibt im Bezug auf die tple nichts neues (oder weiß jemand da noch was?):dnuhr:
Ich hab eine Version die auch noch *.secdat lesen kann V0.20 wenn
die jemand will Ok

Gruß
Urban

EDIT: Ach ja lichtwicht muß in die Liste auch mit rein :gratz an dieser stelle DANKE!

Angelos_AI
04.08.2007, 13:56
Ich bitte die Verzeihungen für schlecht Deutsch. :)

Zur Zeit versucht Sie einziger wer, das Format (tple)
Und zu ordnen wenn in der Strömung 10 Tage nicht der Mitteilungen bitter war, dass auch darauf allen zu verstehen kann enden.
Ich versuchte schon zu machen und, zu ändern ( - NPC – Items - Missionen ) und es die Missionen nur dankt, dass Sie gemacht haben.
Ich sehe immer, ob о Der Erneuerung nein, ich habe allen g3_tple_description.

Und ich hoffe es nicht das Ende. :)

Urban Ja hat vergessen, verzeih. :gratz

Urban
05.08.2007, 00:14
@Angelos_AI
Danke;)
Ich verstehe auch Englisch, für den fall das es dir besser liegt

Gruß
Urban

Urban
14.08.2007, 19:57
Moin moin

@lichtwicht
bitte update deine Post wegen neuer Version thx

Gruß
Urban

Edit: da der Link ins JWD Forum nicht mehr geht hier die Versio 0.21

http://upload.worldofplayers.de/upload.cgi?a=show&file=67335f74706c655f6465736372697074696f6e5f3032312e7a6970&big=1

NicoDE
15.08.2007, 08:07
Ah, wie ich sehe wurden den Klassenwerten Namen gegeben...
In den Lesefunktionen der Engine gibt es eine Unmenge an Versionsabfragen... werden die später berücksichtigt?

lichtwicht
15.08.2007, 13:50
@lichtwicht
bitte update deine Post wegen neuer Version thx
done (auch den Link ins JWF;)) greetz lw

Urban
15.08.2007, 20:06
@NicoDE
Versionsabfragen sind in der v0.21+ eingebaut. Habe das aber nicht in die v0.21 drin da ich keine Datei mit einer anderen Version gefunden habe als >= v0.62. Wenn Du eine hast dann teile es mit doch bitte mit.
Es soll ja auch nur der Hilfe dienen deswegen ja auch immer das "Join" Template.;)

@lichtwicht Danke:)

Gruß
Urban

NicoDE
16.08.2007, 08:20
Ich habe leider keine Daten hier um nachzusehen...
Es gibt noch ein paar TemplateEntities (zB Camera, wenn ich recht erinnere), welche nicht im Archiv-Format (GENOMFLE) gespeichert wurden. Da grundsätzlich die gleichen Daten enthalten sind (nur ohne Optimierung durch eine globale String-Liste), wäre eine Unterstützung wahrscheinlich relativ einfach umsetzbar.

Urban
16.08.2007, 09:30
@NicoDE
meinst du den einfachen Container GENOMETP wo die Strings gleich oben stehen?
Wenn ja das ist schon (sehr) lange drin siehe dump files:

Support:
- *.tple (GENOMFLE/GENOMETP, GENOMETP)

Und die Camera_PC_Camera.tple ist nach dem GENOMETP Format aufgebaut.

Gruß
Urban

NicoDE
16.08.2007, 11:45
Upz, dann habe ich das wohl beim Überfliegen übersehen, entschuldige bitte :)

Dungeon Master
19.08.2007, 21:45
Ich weiß nicht ob's bereits bekannt war, aber im Thread habe ich dazu nichts gefunden:

Bei bestimmten Template-Änderungen ist es zusätzlich nötig die "Change Time"-Werte (Bezeichnung übernommen aus dem "Gothic 3 Template Structure Example v0.21 (c) Urban free4all" für den Tiny Hexer) mit zu ändern, da sonst weiterhin die bereits vorcompilierten Templates benutzt werden.

Ein Beipiel dafür sind die Templates für die Spruchrollen (_Scrolls_*_Story_It_Scroll_*.tple), welche ich in diesem Fix (http://forum.jowood.com/showpost.php?p=2136180&postcount=30) verändert habe.

Als Grund dafür vermute ich, dass es sich bei diesen Templates, im Gegensatz z.B. zu Items in Truhen, um bereits fest in der Welt verteilte Gegenstände handelt. Ich habe in allen Dateien im Fix-Paket beide "Change Time"-Werte geändert. Ob ggf. auch die Änderung eines "Change Time"-Wertes ausreicht, habe ich nicht getestet.

Leider hilft die gleiche Änderung bei NPC-Templates nicht weiter (getestet am bereits vor zwei Wochen geänderten AssTrader_01; siehe auch hier (http://forum.worldofplayers.de/forum/showthread.php?p=4209692&#post4209692)). Da verwendet G3 trotz nachträglicher Änderung der "Change Time"-Werte weiterhin die vorcompilierten Templates. :(

Urban
20.08.2007, 15:42
So hier erstmal eine neue Version 0.22
http://upload.worldofplayers.de/upload.cgi?a=show&file=687839467a67335f74706c655f6465736372697074696f6e5f3032322e7a6970&big=1

@Dungeon Master
Wo der Fehler liegt kann ich Dir so auf die schnelle nicht sagen
aber schaumal in die Datei >Assassins.lrtpldatasc<
da fehlt der Eintrag zu Assassins_AssTrader_01.tple vielleicht ist das
da Problem.
Fehlt:
{f43b6a36-a9eb-4b90-83bc-3aaed64a0038}:0=Assassins_AssTrader_01.tple

Sonst warte da mal auf das Tool von Master Evil

Gruß
Urban

Dungeon Master
20.08.2007, 17:28
aber schaumal in die Datei >Assassins.lrtpldatasc<
da fehlt der Eintrag zu Assassins_AssTrader_01.tple vielleicht ist das
da Problem.
Fehlt:
{f43b6a36-a9eb-4b90-83bc-3aaed64a0038}:0=Assassins_AssTrader_01.tple


Nö, der ist da. Nur weiter oben als die restlichen Trader (4. Eintrag von oben):
{f43b6a36-a9eb-4b90-83bc-3aaed64a0038}:0=Assassins_AssTrader_01.tple

Bei den Elites, Mages, Novices und Warriors ist das genauso. Wahrscheinlich sind die anderen erst später von den 01ern kopiert worden. Ein früherer Fixversuch von Kronos an der Datei BenErai_Outdoor_Sugut.tple (PoliticalAlignment von "NONE" -> "NOM"; Bugtracker ID 1122 (http://www.worldofgothic.de/gothic3/bugtracker/view.php?id=1122)) war übrigens ebenso erfolglos, weil G3 die Datei im Spiel selber nicht angezogen hat. Gelesen wird eine geänderte NPC-Template-Datei von der Engine aber in jedem Fall, da es bei mir einige Guru-Fehlversuche mit dem AssTrader_01 gebraucht hat, bis ich alle Stellen korrekt per Hex-Editor geändert hatte. :D

Danke für die neue g3_tple_description-Version. :)

Kronos
20.08.2007, 18:17
Außerdem war es mir möglich den veränderten NPC zu spawnen. Nur halt in der World wurde die Datei nicht beachtet.

MFG,
Kronos

Dungeon Master
20.08.2007, 18:38
Nur halt in der World wurde die Datei nicht beachtet.

Ja, das war bei den Scrolls ebenso, bis ich auch die "Change Time"-Werte geändert habe. Bei neu gespawnten Scrolls war die Änderung hingegen auch ohne geänderte "Change Time" sofort sichtbar. Daher auch meine Vermutung, dass die Engine erst davon überzeugt werden möchte, dass wirklich ein, im Vergleich zum vorcompilierten, geändertes Template vorliegt. Die Frage ist nur, welche Änderung diese Überzeugungskraft bei NPC-Templates besitzt. :dnuhr:

Kronos
21.08.2007, 15:16
Hat PB niemals die Templates von NPCs in einem Patch geändert? Wenn doch müsste man doch analysieren können, welcher Wert festlegt, dass das Template eingebaut wird. Schließlich werden sie sich nicht alle Möglichkeiten verbaut haben Änderungen an der Welt durchzuführen.

MFG,
Kronos

NicoDE
21.08.2007, 18:21
Es gibt im Spiel ja vor-kompilierte Versionen diverser Daten. Zum Beispiel werden die geänderten Infos und Quest gelesen, weil die vor-kompilierten Versionen im CP als "entfernt" markiert wurden... könnte mit den anderen Templates das gleiche Problem geben.

Dungeon Master
22.08.2007, 03:58
Erstmal noch ein Nachtrag zu Urbans Post.


Sonst warte da mal auf das Tool von Master Evil

Das hilft in diesem Fall nicht, da ich die "Assassins_AssTrader_01.tple" bereits manuell richtig angepasst habe. Ein über die Marvin-Konsole neu gespawnter AssTrader_01 hat nun auch korrekterweise einen Handelsdialog und das zuvor fehlende Warenangebot ist ebenfalls vorhanden. MasterEvils Tool ist eher für weitere Änderungen in diese Richtung (z.B. AssTrader_02 - 05) wichtig, da dadurch die sehr aufwendige manuelle Änderung beim Einfügen neuer Listenelemente entfällt.

Hat PB niemals die Templates von NPCs in einem Patch geändert?

PB hat von V1.04 nach V1.07 und dann wiederum in V1.08 sehr viele Änderungen an NPCs durchgeführt. Hauptsächlich wurden die anscheinend inzwischen überflüssigen Einträge LastFallVelocity, TimeStampFrozen, TimeStampBurning, TimeStampPoisoned, TimeStampDiseased, TimeStampTransformed entfernt. Das hatte ich mir bereits früher mal angesehen.

Wenn doch müsste man doch analysieren können, welcher Wert festlegt, dass das Template eingebaut wird.

Anhand der von V1.07 nach V1.08 geänderten "Geldern_City_Renwik.tple" habe ich nun überprüft, dass von den Genome-Verwaltungsattributen ebenfalls nur die beiden "Change Time"-Einträge verändert wurden (abgesehen von der Index-Anzahl und den damit verbundenen Änderungen).

Schließlich werden sie sich nicht alle Möglichkeiten verbaut haben Änderungen an der Welt durchzuführen.

PB als Entwickler von G3 stehen ja wesentlich weitergehende Möglichkeiten zur Verfügung, um durchgeführte Änderungen zu aktivieren und per Patch zu verteilen. Im Falle z.B. einer NPC-Template-Änderung werden einfach alle Dateien neu compiliert, die das betreffende Template enthalten. Im Falle von Renwik ist das z.B. mindestens die Datei "G3_Myrtana_01_Geldern_NPC_01.lrentdat". Alle neu compilierten Dateien werden dann im Patch über eine neu gepackte Projects_compiled.p00 verteilt.

Wenn wirklich kein Mechanismus existieren sollte, der die Genome-Engine dazu veranlasst, eine nachträglich geändertes NPC-Template statt des vorcompilierten zu verwenden, bliebe, bei den mir zur Verfügung stehenden Möglichkeiten, nur eine nachträgliche Änderung der lrentdat-Dateien. Zu diesem Datei-Format existiert aber derzeit noch keine entsprechende Strukturansicht von Urban für den Tiny Hexer, wie z.B. für das tple-Format. Das hieße aber auch, dass alle in einem NPC-Template durchgeführten Änderungen auch in allen lrentdat-Dateien durchgeführt werden müsste, in denen die geänderte Template-Datei verwendet wird.

Es gibt im Spiel ja vor-kompilierte Versionen diverser Daten. Zum Beispiel werden die geänderten Infos und Quest gelesen, weil die vor-kompilierten Versionen im CP als "entfernt" markiert wurden... könnte mit den anderen Templates das gleiche Problem geben.


Zum AssTrader_01 hatte ich damals nach der Änderung bereits ausprobiert die Dateien "G3_Varant_01_Bakaresh_NPC_01.lrentdat", "G3_Varant_01_MoraSul_NPC_01.lrentdat" und sogar die "SysDyn_{9A103CC2-4190-4DB3-9618-0419E5445AAD}.lrentdat" durch leere Versionen zu ersetzen, was aber nur zu Gurus oder einer nicht mehr weiterlaufenden G3-Initialisierung führte. Denn anders als z.B. bei den Info-Dateien und der Stringtable.ini, welche sich ja einfach durch das Leeren der "compiledinfos_G3_World_01.bin" und der "stringtable.bin" in neuen Versionen einbinden lassen, existieren die eigentlichen "Projects" ja nur im compilierten Zustand. Damit hat die Engine nach Leerung der compilierten Dateien nicht mehr die Möglichkeit die Informationen aus den Rohdaten neu zusammen zu bauen, da diese ja nicht mit ausgeliefert werden. Hier würde m.E. nur eine Möglichkeit zur De- und Recompilierung bzw. zur Bearbeitung der Projects_compiled-Dateien (.sec, .secdat, .lrent, .lrentdat, .lrgeo, .lrgeodat und .node) weiterhelfen (z.B. wie bei den PAK und Pnn-Dateien).

@Urban
.sec-, .secdat-, .lrgeo- und .lrgeodat-Dateien aus dem Projects_compiled-Verzeichnis mag die Strukturansicht für den Tiny Hexer (g3_template_format_example.mps) übrigens nicht. Es erscheint immer die Meldung "ERROR: UNKNOWN FILE FORMAT".

NicoDE
22.08.2007, 09:45
Denn anders als z.B. bei den Info-Dateien und der Stringtable.ini, welche sich ja einfach durch das Leeren der "compiledinfos_G3_World_01.bin" und der "stringtable.bin" in neuen Versionen einbinden lassen, existieren die eigentlichen "Projects" ja nur im compilierten Zustand.Als ich damals die russische StringTable auf dem deutschen G3 testete, wurde von der Engine automatisch eine neue stringtable.bin erstellt (das Zielverzeichnis existierte natürlich). Falls die stringtable.bin bereits existierte, wurde sie unter einem alternativen (müssen ja eindeutig sein) Namen gespeichert (stringtable_.bin wenn ich mich recht erinnere).
Insofern ist mir nicht ganz klar, warum man im CP die stringtable.bin als "gelöscht" markiert hat; man hätte sie auch ausliefern können.

MasterEvil
22.08.2007, 12:20
Übrigens werden die Attribute der NPC in den Savegames gespeichert, wenn man was funktionierendes hinbekommt muss man das Spiel vermutlich neu beginnen.

Ich habe auch mal mit den veränderten Templates rumgespielt und auch die Templates vom offiziellen Patch scheinen keine Änderung zu bewirken $zuck

lichtwicht
26.11.2007, 19:44
(Post1)
*Thread vorkram*

ich habe Urbans Skript mal soweit "erweitert", daß man zumindest die Stringtable der *.lrentdat angezeigt bekommt...
g3_tple_description_0222lw (DL gelöscht)

da ich aber bei den *.lrentdat aber so auch nicht wirklich weiterkomme, werde ich mir erstmal die *.lrent ansehen, vielleicht kann man sich da eher einen Reim draufmachen:dnuhr:

EDIT! Dank an Urban !, der erlaubt hat, daß ich sein Skript "weiterverwenden" darf!
(meine schlechten Manieren und ich...)

(Post2)
sooo, habe wieder etwas gebastelt...

g3_tple_description_0225lw (DL gelöscht)

damit sollten alle *.lrent "interpretierbar" sein.
UND die meisten *.lrentdat...
NICHT jedoch die "SysDyn"(SysDyn_{9A103CC2-4190-4DB3-9618-0419E5445AAD}.lrentdat) !!! ich habe einen "rauszukommentierenden" "Stopper" eingebaut um wenigstens den Header zu sehen...Ich schätzte die "SysDyn" hat nocheinmal eine "umgreifende" Klasse...kümmere ich mich demnächst darum...
(ich will noch gar nicht wissen wie lange das dauern wird die "SysDyn" mit dem Skript "aufzulösen", die "lächerlich kleine" G3_Myrtana_01_Okara_NPC_01.lrentdat(~317kB) braucht schon bald eine Minute(89 Entities, "SysDyn": 2169(?) Entities)...)

"Schlimm" ist die schiere Informationsfülle! (und bei Urbans "Read_Class_Entry" fehlen sogar noch einige Sachen(soll KEIN Vorwurf sein!!!)...ich sag nur "SUB-CLASS") Da "durchzublicken" wird alles andere als einfach...

Problem vor allem bei den *.lrentdat ist der Header...alles was bei "reusable 2nd HeaderPart" steht, ist extrem unsicher! (letztenendes habe ich "ins Blaue" geraten und ein paar Bool-Bezeichnungen von Urbans (*.tple-)"Native_Header" übernommen.)
Tips dazu wären sehr willkomen! ;) Deswegen hänge ich hier mal einen HTML-Ausdruck zur "G3_Nordmar_01_FireClan_NPC_01.lrentdat" an. (hat keine "Klassen / Entities")

(diesmal denk ich gleich dran!)Dank an Urban und ich nenne mal exemplarisch noch NicoDE für die geleistete Vorarbeit!
und ich schaff es noch, etwas "neues" nach G3 zu bringen ;-! "WannaDance" will come!

(Post3)
jetzt sollte die "SysDyn" theorethisch lesbar/auflösbar sein...
praktisch jedoch hört es bei mir spätestens nach ca. 700 "Entities" auf! (TinyHexer benutzt zu diesem Zeitpunkt ~1,5GB Speicher...)

g3_tple_description_024lw (DL gelöscht)

ich habe mal einen "Stopper" eingebaut... man bekommt von der "SysDyn" nur die ersten 101 Entities angezeigt...

ich werde demnächst mal versuchen, das mit der "SysDyn" etwas "besser" zu machen...
(so, daß man nicht mehr in dem Skript selbst etwas eintragen muß um bestimmte Teile zu sehen)

(gleicht die erste Entity(World_MPC) hat ein "schönes" QuestManager_PS, das habe ich erstmal übersprungen...;-)

gruß lw

(Post4)
wieder ich ;)
EDIT: g3_tple_description_026lw ~Bugfixing~

g3_tple_description_026lw (DL gelöscht)

(nochimmer bin ich gerne bereit Hinweise zu den *.lrentdat-Headern einzubauen ;-)
...
schaumermal, ob das reicht, oder ob ich noch die *.node's "auflösen" muß...

yours lichtwicht

(keine Arrays...:()

P.S.@Shak-otay: die "G3_Nordmar_01_FireClan_NPC_01.lrentdat" ist zwar in der Stringtable(SysDyn)...jedoch gibt es KEINE "Entity"-Definition dafür!..(sie wird nur "genannt", und Mangels "Super-Rechner" kann ich dir noch nicht einmal sagen in welcher "Entity"!..)
auch kommt "Hatlods-HammerSäge"(für den Silden_Waran_01) scheinbar NICHT aus der SysDyn...irgendwie, scheint es noch eine "dritte Instanz" zu geben...HOFFENTLICH müssen wir das nicht aufklären um etwas in G3 einzufügen...

(Post5)
Update

g3_tple_description_027lw (http://www.file-upload.net/download-541152/g3_tple_description_027lw.rar.html)

Nun lassen sich auch (große) *.node-Dateien anzeigen...
Wie gesagt die Header zu den *.lrentdat und *.node müssen noch überarbeitet werden!
Das müssten jetzt eigentlich alle Dateitypen sein. Es gibt aber sicherlich noch ein paar Sondertypen! Wenn jemand eine "findet" bitte hier posten (oder PN an mich).

greez lw

P.S.
HOWTO use "g3_tple_description_027lw" with "Big"(>299 Entities) *.lrentdat's & *.node's

-runskript ;)
-(wait!)
-when questioned(first) answer with "0"

-search(via "CTRL-F") the Entity you're interested in
-REMEMBER the "Entity-Number"

-runskript again
-(wait!)
-when questioned answer with "1" (or "2")

-enter "Entity-Number" (which you should have remerbered after "CTRL-F")
-(wait (if you entered "2")!)
-be happy!, because you see the Class references of your desired Entity!

Drachentoeter27
22.12.2007, 08:52
Grüße,

ich versuche den Sound beim Schwertziehen zu aktivieren. Deshalb habe ich folgende Untersuchungen gemacht. Ich brauchte einen Animationssound (anisound), der funktioniert. Also habe ich nach fight_woosh gesucht und folgende Ergebnisse bekommen:

Suchbegriff "fight_woosh"
1) _compiledAnimation.pak ->z. Bsp. (es gibt sehr viele) Hero_Stand_1H_1H_P0_Attack_Hit_N_Right_00_%_00_P11_110_R.xmot
2) g3.efm
3) Templates.pak ->SFX_Foley_Animation_Fight_SFX_Ani_Fight_Whoosh_01.tple
-> SFX_Foley_Animation_Fight.lrtpldatasc

4) Sound.pak -> sfx_ani_fight_whoosh_light_01.ogg
-> sfx_ani_fight_whoosh_normal_01.ogg
-> sfx_ani_fight_whoosh_power_01.ogg

Anschließend habe ich die .tple Dateien gelöscht, eine neue Templates.pak erstellt und ein neues Spiel gestartet. Die Schlaggeräusche waren dennoch zu hören, so dass ich die alte Templates.pak wiederhergestellt habe.

Danach habe ich die g3.efm angeschaut und dort die Einträge
sfx_ani_fight_whoosh_light_01.ogg, sfx_ani_fight_whoosh_normal_01.ogg, sfx_ani_fight_whoosh_power_01.ogg in sfx_ani_fight_whoosh_axe_01.ogg
samt entsprechender Stringlänge geändert. Das Ergebnis war, dass kein Sound beim Schwertschlag hörbar war.

In g3.efm Datei gibt es noch eff_ani_fight_whoosh* Bezeichner, die in den xmot -Dateien zu finden sind. Ihre Bedeutung habe ich noch nicht ganz verstanden. Vielleicht muss man z.Bsp. eff_ani_fight_whoosh_power in eff_ani_fight_whoosh_axe in g3.efm und Hero_Stand_1H_1H_P0_Attack_Hit_N_Right_00_%_00_P11_110_R.xmot umbenennen, damit der axe-Sound hörbar wird. Das werde ich heute noch testen.

Abgesehen davon gibt es doppelte Datenhaltung mit dem Unterschied in den Suffixen *.ogg und *.wav.
ogg:
0x1E64A 0x21 = 33 sfx_ani_fight_whoosh_power_01.ogg
0x1E66D 0x21 = 33 sfx_ani_fight_whoosh_light_01.ogg
0x1E690 0x22 = 34 sfx_ani_fight_whoosh_normal_01.ogg

wav:
0x1F114 0x1D = 29 eff_ani_fight_whoosh_short_01
0x1F133 0x21 = 33 sfx_ani_fight_whoosh_light_01.wav

0x21A74 0x1D = 29 eff_ani_fight_whoosh_power_01
0x21A93 0x21 = 33 sfx_ani_fight_whoosh_power_01.wav

0x22AB5 0x1E = 30 eff_ani_fight_whoosh_normal_01
0x22AD5 0x22 = 34 sfx_ani_fight_whoosh_normal_01.wav

was hier auffällt ist der Namenunterschied zwischen eff_ani_fight_whoosh_short_01 und sfx_ani_fight_whoosh_light_01. Damit hat sich der Versuch zur Umbenennung von eff_ani_fight_whoosh_power in eff_ani_fight_whoosh_axe in g3.efm und Hero_Stand_1H_1H_P0_Attack_Hit_N_Right_00_%_00_P11_110_R.xmot von selbst erledigt. :cry:

Ich würde gerne wissen welche Bedeutung die *.wav und die eff* haben und welche Attribute in ihrer(n) (Klasse(n) in g3.efm vorhanden sind?

lichtwicht
30.12.2007, 14:56
es geht "weiter"...

g3_tple_description_028lw (http://www.file-upload.net/download-582029/g3_tple_description_028lw.rar.html)

Viele, viele, viele Fragezeichen!!!

greez lw

P.S.
HOWTO use "g3_tple_description_027lw" with "Big"(>100 Entities) *.lrentdat's & *.node's
siehe oben!

---------

mini-update (@Drachentoeter27)
g3_tple_description_029lw (http://www.file-upload.net/download-583404/g3_tple_description_029lw.rar.html)
löst jetzt auch die g3.efm auf.

ich seh' mir vielleicht noch die anderen Dateien in der Library.pak an...
Nicht jedoch die "g3_kairo.efm"! (dieses Format begegnet mir bisher hauptsächlich bei "_deleted" & "Testzeug"-files...) und man müßte (wahrscheinlich) in dem Skript ziemlich viel "neu" schreiben um dieses Format aufzulösen...

Drachentoeter27
30.12.2007, 15:12
Wow,

das war ziemlich fix. Werds gleich anwenden. Danke!

Ich glaub auch, dass "g3_kairo.efm" nicht notwendig ist.

Gruß

MasterEvil
30.12.2007, 20:17
Hiho, ihr dachtet bestimmt ich lass mich hier nicht mehr blicken ... das dachte ich ne Weile lang auch :D

Ab jetzt arbeite ich aber wieder ne Weile lang zu Hause und werde jetzt die Tage nochmal was schönes zusammenbasteln.

Ne kleine Frage habe ich noch zu den TPLE-Dateien, nach jeder Klasse kommt ein scheinbar völlig willkürlicher Teil Code. Irgendwie sehe ich da überhaupt keinen Zusammenhang, dass einzige was auffält ist das der Codeteil immer mit einem UINT16-Wert beginnt der im 2-Stelligen Bereich liegt?!

Hat irgendwer von euch vieleicht ne Vermutung?
Dies ist der einzigste Teil der noch fehlt um TPLE-Dateien wirklich von Null neu zuerstellen ...

Ach ja, besten Dank an alle die an der "TinyHexer Template-Structure" mitgewirkt haben, das ist wirklich hilfreich!


[EDIT]
Ok, hab gerade ne kleine Entdeckung gemacht, der UINT16-Wert ist die Versionsnummer der Klasse.
Ich hab den Wert (50) einfach mal mit 0 überschrieben und folgenden Fehler erhalten:
"Can´t read propertyset 'eCVisualMeshDynamic_PS' of entity: It_Joint (Ver.50) with size 132. End block isn´t correct !"
Der Rest der dann noch kommt scheint bei allen Instanzen dieser Klasse gleich zu sein, muss ich aber nochmal genau durchgucken.
Also vermutlich so eine Art Identifizierungs-Footer :D


MFG

Shak-otay
31.12.2007, 00:18
Hi MasterEvil,

schön, dass Du wieder "dabei" bist!

Lichtwicht reisst auch gerade Bäume aus:-)

Vielleicht kommt das G3-Modding ja noch richtig in Fahrt...

Gruß und Guten Rutsch,
shak-otay

MasterEvil
06.01.2008, 10:46
So, hab mal noch n bisschen was rausgefunden.

Also das was nach den regulären PS-Klassen kommt ist definitiv kein Identifizierungs-Footer :D

Nach der Klasse kommt generell noch einmal die Klassenversion als UInt32.
Dann folgt im einfachsten Fall der DeadCode, ansonsten beginnen dort Zusatzinformationen zur Klasse.
Diese Infos beginnen mit 2x UInt16, beim ersten Wert vermute ich dass dieser die Anzahl der Zusatzinformationen angibt.

Subclasses hab ich außer bei eCCollisionShape_PS auch noch bei gCInventory_PS gefunden. Die beiden Subclasses die dort auftauchen können sind gCInventorySlot und gCInventoryStack.

[EDIT]
gCInventory_PS kann gCInventorySlot mehrfach enthalten.
gCInventory_PS kann gCInventoryStack mehrfach enthalten.
eCCollisionShape_PS kann eCCollisionShape mehrfach enthalten.
eCRigidBody_PS kann StartForce enthalten.
gCPlayerMemory_PS kann gCAttribute mehrfach enthalten.
gCPlayerMemory_PS kann gCStat mehrfach enthalten.


Vor jeder Subclass steht (soweit ich sehen konnte) immer die Bytefolge: 01-00-01-01-00-01 und leitet meiner Meinung nach eine Subclass ein.
Davor sind aber meist noch weitere unterschiedlich lange Bytefolgen zu finden deren Sinn sich mir noch nicht erschlossen hat :p
Das macht das heraussuchen von Subclasses leider auch so schwer.



In der Datei Templates\NPC\_Monster\Alligator_Alligator.tple hab ich in der Klasse eCRigidBody_PS die Daten nach der Klasse bis zum DeadCode einfach mal mit Nullen überschrieben ohne anschließenden Fehler im Spiel.
Beim durchsuchen aller TPLE-Dateien hab ich bemerkt dass es bei der Klasse eCRigidBody_PS nur ca 3 - 4 unterschiedliche Bytefolgen gibt welche aber alle 84 Bytes lang sind. Welche Relevanz diese Daten haben bleibt also noch rauszufinden ...


Liste der Klassen mit immer gleichlangen "Enden" (Byte-Anzahl)

eCRigidBody_PS (84)
eCIlluminated_PS (113)
eCIlluminated_PS (113)
eCLightStreaks_PS (4311)
eCSpeedTree_PS (3)
eCVisualMeshDynamic_PS (5)
eCVisualMeshStatic_PS (5)
gCCharacterControl_PS (122)
gCCharacterSensor_PS (68)
gCEnclave_PS (5)
gCParty_PS (5)
gCPlayerMemory_PS (1123)
gCProjectile_PS (34)



Folgende Klassen haben garkeine Daten am "Ende"

eCAudioEmitter_PS
eCParticleSystemBase_PS
eCPointLight_PS
eCStaticPointLight_PS
eCStrip_PS
eCWeatherZone_PS
gCAIHelper_FreePoint_PS
gCAIHelper_Label_PS
gCBook_PS
gCCharacterMovement_PS
gCCollisionCircle_PS
gCDamage_PS
gCDamageReceiver_PS
gCDialog_PS
gCDoor_PS
gCEffect_PS
gCFlock_PS
gCFocus_PS
gCInteraction_PS
gCLetter_PS
gCLock_PS
gCMagic_PS
gCMagicBarrier_PS
gCNavigation_PS
gCNavOffset_PS
gCNPC_PS
gCRecipe_PS
gCScriptRoutine_PS
gCSkill_PS
gCTimeZone_PS
gCTouchDamage_PS
gCTreasureSet_PS



Und bei folgenden Klassen variiert das Ende, vermutlich durch Subclasses oder ähnliches

eCCollisionShape_PS
eCParticle_PS
eCVisualAnimation
gCInventory_PS
gCItem_PS
gCMap_PS

lichtwicht
07.01.2008, 18:57
Hallo MasterEvil,

von mir auch: willkommen zurück!-) wir können wirklich JEDE Hilfe gebrauchen!

in dem THexer-Skript nenne ich diese "SubKlassen" teilweise auch "SubVektoren", da sie für mich eben wie Vektoren aussehen...
100%ig habe ich das auch noch nicht verstanden! :D :( (also, was drinsteht)
"SubKlassen" identifiziere ich zumeist über die Bytefolge (00)530053(00), die kurz nach der Benennung der Klasse kommt(StringtableEntry).
Zu deiner Bytefolge 010001010001: die gibt's auch am Anfang jeder "normalen" Klasse...(zumindest bei denen, die ich bisher angesehen hab...)
Wie du bemerkt hast, werden diese SubKlassen/Vektoren oft, jedoch nicht immer! mit dem "Start Class Entry (Version) ????"(Wort) eingeleitet...

Warum du keinen Fehler bekommen hast, nachdem du eine "SubKlasse" mit 00 überschrieben hast, kann ich mir gut vorstellen...
(fast) alle Templates werden ins Spiel in *.node oder *.lrentdat gebracht, soll heißen sie werden da nocheinmal genannt.
Offensichtlich werden die Templates (trotzdem) eingelesen, und über offensichtliche Fehler(z.B. falsches Offset zum DEADBEEF oder falsche Size(z.B. zum DEADCODE)) beschwert sich das Spiel.
Änderst du aber "nur Werte", so werden diese ignoriert, da das Template aus der .lrentdat benutzt wird, AUßER du änderst den (Haendler-Hash-Header) ChangeTimeValue(siehe z.B. meine LehrerLares-MOD)...

zu: "eCRigidBody_PS kann StartForce enthalten."
z.B. beim "Alligator_Alligator.tple" taucht 0x2000(das ist hier die Stringtable-Referenz für "StartForce") in der "SubClass von eCRigidBody_PS" überhaupt nicht auf...
"StartForce" ist einfach der 5. Wert von "eCRigidBody_PS"(hier an: (hex)0735)

achja, wo hast du denn mehrere "gCInventoryStack" gefunden? (ich hätte gedacht, daß "gCInventoryStack" überhaupt nicht in Templates vorkommt...)


am meisten interessiert mich jedoch der Aufbau der SubKlasse nach: (habe ich "AfterDefinition" genannt, da es eben keine Klasse im herkömmlichen Sinne ist...)
(Notiz an mich: sämtliche "SubKlassen" sollten einheitlich benannt werden!...)
eCVisualAnimation_PS
eingeleitet immer mit 0x4000 (Start Class Entry von eCVisualAnimation_PS)
bei den Templates funzt das Skript wohl meistens...bei den meisten .lrentdat nicht...

-----

g3_tple_description_030lw (http://www.wurde-geloescht.de)
support added for "g3.ams" and (most) parts of "g3.mul" (Library.pak)
(und ein paar Werte "besser" angezeigt...~"Bugfixing")

grüße vom Bäume ausreissenden(§knin) lichtwicht

-----
minor-Update zu eCVisualAnimation_PS / MaterialSwitch
g3_tple_description_031lw (http://www.wurde-geloescht.de)
(als nächstes muß ich mir die "some Bools" im Invetory_PS bzw. zwischen Inventory-Stack(s) & -Slots ansehen!...(ich muß nämlich ein neues Inventory-Slot einfügen...))

EDIT:
habe inzwischen ein Inventory-Slot eingefügt, erreicht habe ich dies aber nur durch Vergleich mit anderen Dateien und etwas Raten...
Es schein aber so zu sein, daß umso mehr Inventory-Slot's in der Datei sind umso weniger ???Bools???(0x010000) stehen drin...
Ein Inventory-Slot könnte 2 ???Bools???(0x010000)-Folgen entsprechen????


EDIT2@MasterEvil(18.1.): DAS ist eine gute Idee !!! Ich muß leider nächste Woche wieder Arbeiten, aber das sehe ich mir definitiv genauer an!

MasterEvil
17.01.2008, 22:23
Ich gehe jetzt davon aus dass jede Klasse mit 01-00-01-01-00-01 beginnt daher auch die Subklassen, das womit die Subklassen dann eingeleitet werden sind meiner Meinung nach die Versionen dieser.

Diese Subklassen hab ich dadurch gefunden das ich in einem Script einfach alle Dateien durchforstet habe und geguckt habe wann innerhalb einer Klasse eine weitere aufgeführt wird.
Das in meinem vorigen Post ist dann dabei rausgekommen allerdings lege ich jetzt dafür auch nicht meine Hand ins Feuer *gg*

Leider hab ich das nur kurz getestet als ich noch an meiner Einlese-Routine gefeilt hab, muss ich mal gucken ob ich es nochmal so zusammenbaue das ich nochmal die genauen Dateien rausbekomme. Es waren aber glaube zum Größten Teil "deleted" - Dateien.


Was mir noch in eCCollisionShape aufgefallen ist,
"not sure if Values are really true!" : die Werte sollten so stimmen
und gleich darauf folgt dann der Index für den String einer Ressource-Datei also beim Joint: G3_Item_Smoke_Joint_01_CV.xnvmsh

[EDIT]
Also nich gleich daruf, denn gleich darauf folgt noch ein zweites mal File-Version und dann kommt der Index.
Ich weiß bloß noch nicht ob das an File-Version oder an jede SubKlasse gebunden ist.
Vieleicht sind die "Subklassen" ja auch nur mit dieser Klasse verbundene Objekte/Dateien wie zum Beispiel ein Mesh und die "Subklasse" enthält die Information zum Handling ?!?

MasterEvil
18.01.2008, 21:05
So, also dieser Dateiname hängt glaube ich vom ShapeType ab.
In allen Dateien die ich einlesen kann werden in CollisionShape nur 4 verschiedene ShapeTypes verwendet.
Box (3) und Capsule (4), bei diesen beiden gibt es keinen Dateiname.
TriMesh (1) und ConvexHull (6), bei diesen beiden gibt es immer einen Dateinamen.

Ich glaube das die unbekannten Daten am Ende jeder Klasse mit den Properties dieser zusammenhängen. Jetzt müsste man nur noch wissen welches Property welche Daten erwartet ;)

lichtwicht
16.08.2008, 20:43
ehemals post zu ver0.32:
minor Update
g3_tple_description_032lw

habe in der SubKlasse von eCCollisionShape_PS (0x3F00: eCCollisionShape)
1. bei ShapeType die Enums von "bTPropertyContainer<enum eECollisionShapeType>" eingetragen
2. die Auflistung von Vektoren? / Floats? / ??? die nach der/den SubKlassen kommen nach dem ShapeType unterschieden.
bisher habe ich "nur" die zwei folgenden ShapeTypes gefunden: eECollisionShapeType_Capsule(4) und eECollisionShapeType_ConvexHull(6)

"gefühlsmäßig" würde ich vermuten, daß die Daten sich auch auf die "bTPropertyContainer<enum eEShapeGroup>" beziehen...aber irgendwie kann ich (bisher) noch keine Bezüge zwischen den Daten und den Enums erkennen...

sorry, mehr Fragen als Antworten...lichtwicht

ehemals post zu ver0.33:
Bugfix: mehrere Punkte(.) im Dateinamen/Pfad jetzt möglich.
(vorher u.U. "Abbruch" mit "ERROR: UNKNOWN FILE FORMAT")
und einige andere Kleinigkeiten...

Begriffsdefinition "Haendler-Hash":
die kleine Diskussion mit Shak-otay würde mich nun dazu zu bewegen, diese GUID anders zu bennen...
Entstanden ist der Name, weil diese(2te GUID in .tple's) Hash in (Händler-)TreasureSet's genannt wird um das Template zu referenzieren.
Wie wir inzwischen "wissen" wird diese GUID auch in .lrentdat's benutzt um sich auf Template's zu beziehen, daher empfinde ich den Namen Haendler-Hash inzwischen als unpassend(/irreführend)...
Ich würde als neue Bezeichnung "Reference-Hash" vorschlagen.
Anmerkungen? Einwände? Andere Vorschläge?

greez lw

ehemals post zu ver0.34:
YEAH!

nachdem ich ENDLICH!!! einen halbwegs brauchbaren Weg gefunden habe THexer eine Art Array abzuringen, habe ich nun einige Enums eingebaut.
Natürlich geht die Speichernutzung hoch und die Geschwindigkeit runter, aber dank der Vorarbeit von NicoDE ist es (inzwischen!!!) für mich recht einfach die Listen ins Skript einzubauen und die Übersicht/Interpretationsgrundlage nimmt mAn beträchtlich zu!
(macht natürlich gleich ~40K mehr ~"Code"~)

desweiteren "entdeckt":
-in der Sub-Klasse für "gCInventory_PS" gibt es ein Anzahl-DWord wieviele "gCInventoryStack"s vorhanden sind! (könnte auch nur das Byte oder ein Word sein??? da die meisten Anzahlen bisher in DWord's gespeichert sind...)
(Dank an Shak-otay, der das Ding gleichzeitig gefunden hat als ich "offline" war! betreffs der 010000-Folgen: ich kann sie immer noch nicht wirklich einordnen, aber beliebig viele InventoryStacks kann man (wohl;-) immer direkt nach der Inventory_PS einfügen, und muß dann nur eben den Zähler, die "Size"(bzw. 2 Größen/Sprungadressen in Templates) der Inventory_PS und die 2 Sprungadressen zum DEADBEEF anpassen)
-in der (allseits beliebten) Sub-Klasse für "eCVisualAnimation_PS"(bei "MainEntities") habe ich die "Beziehungen" zu der "MaterialSwitch"-Eigenschaft auch zu den Sub-Entities(Templates) "eraten/entdeckt/erkannt" (???;-)
(ist dieser Wert (z.B. für den Kopf) größer als in der SubEntity(bzw. Template) wird nicht die referenzierte SubEntity bzw. der bezeichnende FileName(STE) benutzt sondern der Kopf des Templates der MainEntity)
-(recht sinnlos eigentlich, da es wohl nicht benutzt wird...) Ich habe den QuestManager in der SysDyn(Entity 1) "aufgelöst" (ebenso "sinnlos" wie die G3_World_01.wrldatasc oder die ebenfalls in der Entity 1(der "SysDyn") aufgezählten Verzeichnisse in der SubKlasse von gCSectorPersistence_PS)
(ich war halt' am suchen nach einer Einfügemöglichkeit neuer Verzeichnisse...->G3_World_01_local.wrldatasc!!!)

ehemals post zu ver0.35:
"Abfallprodukt" vom "Templates für Grafiker"-Projekt:
Anzeige der Klassen von *.xshmat-Dateien, die im "Archiv"-Format vorliegen.

(Tip?!:
_diese "Routine" kann auch mißbraucht werden um in beliebigen Dateien(, die im "Archiv"-Format("GENOMFLE" mit Stringtable) vorliegen,) nach G3-Klassen(identifiziert über die Byte-Folge: 010001010001) zu suchen! (und sich diese natürlich anzeigen zu lassen)
_einfach die Erweiterung ".xshmat" an die gewünschte Datei anhängen(umbenennen) und das Skript drüberlaufenlassen...
)

ehemals post zu ver0.36:
lange vorgehabt, jetzt gemacht. Unterstütztung der 2 GENOMEDL(8)-lrentdats

node (H???) folgen ~irgendwann~ auch noch...

"dieser" post zu ver0.37:
versuch der DrehRichtungsangabe bei .node's und .lrentdat's

isch bin jetzt nicht so 100%ig sicher(wie immer...), aber bei den paar FP's, die ich überprüft habe stimmt es so...(Ishtar_Outdoor: DynObj01.node)

D3DXMatrix: (dafür gibt's nicht etwa eine "offizielle" Definition? Link?)
(es gibt in der Datei z.B. noch folgende Entity: No.19 "G3_Object_Tablestuff_Poor_Single_01" bei der einerseits Werte(Winkel?) bei der "z-Spalte" und in der zweiten Zeile angegeben sind...)


W1(float) z? W2(float) ? - W1° W2°
?? z? ?? ?
W3(float) z? W4(float) ? - W3° W4°
x z y ?

("vereinfacht": W1°=arccos(W1); W2°=-arcsin(W2); W3°=arcsin(W3); W4°=arccos(W4); thx to Shak-otay!)

Wenn der DrehWinkel kleiner 90° ist werden W1° und W3° mit gleichem(, absoluten)Wert angebeben.
(z.B.: (W1°-W4°-Angaben)
60 60
60 60 oder
85 -85
-85 85
hier wird gegen den UZ gedreht, wenn W3° < 0

entgegen:
139 -41
-41 139 oder
146 34
34 146
hier wird gegen den UZ gedreht, wenn W3° > 0)

(???? Feedback mit Beispielen, bei denen es nicht zutrifft wäre toll!)

Urban
16.08.2008, 21:32
@lichtwicht

Die Definition steht im Microsoft DirectX SDK (http://www.computerbase.de/downloads/software/betriebssysteme/directx/) z.B. in d3dx9math.h

siehe auch:
World Matrix
View Matrix
Projection Matrix

Gruß
Urban

Shak-otay
17.08.2008, 08:38
@lichtwicht
Du machst das etwas kompliziert.;)
Es geht doch nur um einen Winkel ß.

(Ich würde nur den angeben, man wird doch 'eh schon von der Datenflut erschlagen.)

Aus W1float berechnest Du per arccos den Winkel ß.
Wenn W3float negativ ist, multiplizierst Du ß mit (-1)
(entspricht einer Spiegelung in Quadrant III oder IV).

Dann natürlich noch von Radiant in Grad umrechnen.

lichtwicht
02.09.2008, 19:13
post zu v0.38 (vom 20.8.08)
(dat mit den Winkeln konkretiesiere ich später mal noch)

Vermutungen aus diesem Thread: gCInventorySlot... (http://forum.worldofplayers.de/forum/showthread.php?t=441304)
betreffs 010000-Folgen ins script übernommen, das script richtet sich auch danach! (soll heißen, falsche Einträge da können zu STOP führen)

post zu v0.39 (vom 2.9.08)
g3_tple_description_039lw

+ the "unknown Entity-Counter" is no longer unknown (only for *.lrentdat and *.node, since in *.tple there's always only 1 Definition(tple to Root; loggisch!, oder?))
+ SubClass of "gCAnchor_PS" now decoded (Ahhh!!! FP's in *.lrentdat's!)
+ Warnings when Entities in file don't match Number in Header or last Entity not mentioned in "Sub-Entities-Definition"(formerly "unknown Entity-Counter") (Wich causes usually a crash to desktop without any Error-Dialog)
+/- changed back from TStrings to "HiddenHelperWindow" for Entities (TStrings are toooo slow!)

(always: +/- bugs and other minor things, I don't remember;-)

(still) ToDo:
- read the X*X** DirectX-SDK to understand D3DMatrix, since I already encountered 1 file where my interpretion didn't seem to work properly...
- *.node-Counterpart of lrentdat-genomedl8-files
(- will be too much work, I suppose...nonetheless: decoding of "non-archived"(w/o stringtable) files)

post vom 12.1.09

@Lichtwicht: Wenn ich besagte .node Datei öffne und mir die ersten 100 Entities anzeigen lasse bekomme ich folgende Fehlermeldung, welche am Ende des Scripts eingetragen wird:

0x0000B48D File: C:\[mein Pfad]\projects compiled\G3_World_01\Myrtana\Reddock_City\G3_Myrtana_01_Reddock_Dynamic_Objects_ 01\G3_Myrtana_01_Reddock_Dynamic_Objects_01_SHyb.node
(Skript-)Error in Line: 3818 ErrorNumber: 11 Problem: Gleitkommafehler
Ist hier ein Fehler innerhalb der Datei oder ein Fehler in deinem/eurem Script, oder kann das Script eine bestimmte Gleitkommazahl nicht richtig interprtieren/darstellen?
Ja das hatte ich schon mal...(z.B. auch in der Lago-DynObj.node)
Da es öfter vorkommt, schätze ich, daß TinyHexer eben doch Fließkommazahlen anders versteht als G3:(
einen spontanen Lösungsansatz habe ich gerade nicht...(ich kann nur hoffen, daß ich mit dem Exception-Handler da was anfangen kann, habe zugegebenermaßen gerade wenig Lust drauf)
vielleicht sind es aber nur bestimmte "Zahlen"...wenn jemand noch "Gleitkommafehler" findet, bitte Datei hier posten.
(Es dürfte einfacher werden ein/zwei if's in die FließkommaDarstellung zu packen...)

EDIT:
Ich hoffe allerdings, dass meine Erklärung bezüglich der Koordinaten stimmen könnte.
im Goßen und Ganzen schon!

splEEnfiRe
12.01.2009, 13:58
Also ich glaube nicht, dass es an Fehlern in eurem Script liegt, denn alle anderen Dateien, die ich bis jetzt geöffnet habe, funktionieren einwandfrei. Möglicherweise ist hier wieder ein Bug bei G3 aufgetaucht, der im Spiel unbemerkt bleibt, da man diesen Punkt zwar in den .nodes findet, er aber im Spiel von keinem NPC verwendet wird;). Ist aber nur ne Vermutung.

Ich hoffe allerdings, dass meine Erklärung bezüglich der Koordinaten stimmen könnte.

lichtwicht
15.01.2009, 08:55
betreffs dem Gleitkommafehler(11) (vom Skript)
also bei mir (Projects_compiled\G3_World_01\Varant\Lago_City\G3_Varant_01_Lago_Dynamic_Object s_01\G3_Varant_01_Lago_Dynamic_Objects_01_SHyb.node (Entity 44)) handelt es sich um einen RIESIGEN Winkel(nach kurzer Durchsicht des DX-SDK bin ich nicht wirklich schlauer) (dasselbe in Reddock)

(Umrechnung Radiant nach Grad: Grad = 360/Pi*Radiant/2
für die Drehrichtungsbestimmung benutzte ich nur Winkel1 und das Vorzeichen von Winkel3)


...wieauchimmer, TinyHexer hat offensichtlich Probleme mit der Umrechnung großer single's zu int's, nachdem die Variable initialisiert ist(Speicher reserviert?) geht's aber...(scheinbar)

soll heißen, wer auf einen Gleitkommafehler(11) bei einer Winkelangabe stößt, Error wegklicken, Skriptfenster schließen und dann Skript einfach nochmal ausführen...und schupdiwupp geht's!

ich habe mir die 2 Free(Use)Points mal ingame angesehen(STRG-N):
Reddock-City-DynObj-Ent 47-Pace: 70638/43/-11420// (xzy)(End-of-GUID-863635EF8D1D)
Lago-City-DynObj-Ent 44-Guard: -18054/577/-52750// (xzy)(End-of-GUID-AADD85059FE6)
(leider) sehen sie ganz nornmal aus...also stimmt meine Umrechnung (wohl) nicht (immer)...

Wer also Fehler, Verbesserungen oder weitere Dateien mit diesem Fehler findet, immer her damit;)

Shak-otay
15.01.2009, 12:25
(leider) sehen sie ganz nornmal aus...also stimmt meine Umrechnung (wohl) nicht (immer)...

don't worry, baby;):D


0x0000B481 0x0200803F, 0x00000000, 0x00000000, 0x00000000 (1.00000023841857904, 0, 0, 0) (D3DXMATRIX) World ????
0x0000B491 0x00000000, 0x0000803F, 0x00000000, 0x00000000 (0, 1, 0, 0) (D3DXMATRIX) World ????
0x0000B4A1 0x00000000, 0x00000000, 0x0200803F, 0x00000000 (0, 0, 1.00000023841857904, 0) (D3DXMATRIX) World

Da nach Adam Riese (oder in diesem Falle wohl eher Regiomontanus) die Winkelfunktionen sin und cos immer Werte zwischen -1...+1 zurückgeben, ist das wohl ein PB-Bug. Imho muss es 0x0000803F statt 0x0200803F heissen.
(Wie auch immer es zu so einem Fehler edit: bei mir gekommen sein mag!???) (sry, PBs, behaupte ich nie wieder...§cry)

Gruß,
shak

Urban
15.01.2009, 18:06
Reddock
GUID: {0503458e-27f0-401f-8cfd-863635ef8d1d}

local position: X:70638, Y:43, Z:-11420
local rotation: Pitch:0, Roll:0, Yaw:0

world position: X:70638, Y:43, Z:-11420
world rotation: Pitch:0, Roll:0, Yaw:0

Lago
GUID: {22ca3eab-f8ed-477c-9c92-aadd85059fe6}

local position: X:-18054, Y:577, Z:-52750
local rotation: Pitch:0, Roll:0, Yaw:89

world position: X:-18054, Y:577, Z:-52750
world rotation: Pitch:0, Roll:0, Yaw:89

>Camera in Direct3D - Rotating the camera< (http://www.toymaker.info/Games/html/camera.html)

btw:
> 0x0200803F = 1,0000002
> 0x0000803F = 1,0000000
> 0x000080BF = -1,0000000

Gruß
Urban

splEEnfiRe
15.01.2009, 20:15
Mal ne Frage: Was ist denn der Unterschied zwischen World Position und Local Position?

Urban
15.01.2009, 21:06
Mal ne Frage: Was ist denn der Unterschied zwischen World Position und Local Position?

Ein Objekt hat sein eigenes Koordinatensystem (local), dieses kann eine andere Lage/Ausrichtung haben als der Raum (world) in dem es sich befinden.

Gruß
Urban

lichtwicht
16.01.2009, 11:45
EDIT: falsche Annahme


[...]
Da nach Adam Riese (oder in diesem Falle wohl eher Regiomontanus) die Winkelfunktionen sin und cos immer Werte zwischen -1...+1 zurückgeben, ist das wohl ein PB-Bug. Imho muss es 0x0000803F statt 0x0200803F heissen.
(Wie auch immer es zu so einem Fehler gekommen sein mag!???)

Gruß,
shak
Danke! Genauso sehe ich das (inzwischen) auch: arcsin und arccos sind nur für Werte zwischen -1 und 1 definiert!
(soll heißen, bei TinyHexerSkript müßte es eigentlich IMMER einen Fehler geben?!? Die angezeigten Winkel sind somit nonsens!)

Reddock
GUID: {0503458e-27f0-401f-8cfd-863635ef8d1d}
local position: X:70638, Y:43, Z:-11420
local rotation: Pitch:0, Roll:0, Yaw:0
world position: X:70638, Y:43, Z:-11420
world rotation: Pitch:0, Roll:0, Yaw:0
da haben wir als anderen Winkel 0°(W2&W3) (was ja passt)
als W1 0200803F (>1) was, wie Shak schon sagte, unserer Meinung nach 1 und damit (auch) 0° sein sollte

Lago
GUID: {22ca3eab-f8ed-477c-9c92-aadd85059fe6}
local position: X:-18054, Y:577, Z:-52750
local rotation: Pitch:0, Roll:0, Yaw:89
world position: X:-18054, Y:577, Z:-52750
world rotation: Pitch:0, Roll:0, Yaw:89
da habe ich als W1 90° (daß ich 90° habe dürfte daran liegen, daß ich im Skript auf 0 Nachkommastellen runde!)
und als W2 010080BF (<-1); wäre es 000080BF, also dann auch 90°, würde es auch wieder stimmen...

@Urban: Was mich primär interessiert, ist, ob dies nun ein Fehler in den PB-Daten(dann @CPT Bugreport) oder die 0200803F und 010080BF innerhalb dieser Struktur so OK ist ?

>Camera in Direct3D - Rotating the camera< (http://www.toymaker.info/Games/html/camera.html)
[...]
Gruß
Urban
EDITEDITEDIT:
Danke Urban!
ich glaub' jetzt hab' ich's begriffen...(alte Menschen brauchen manchmal etwas länger...)

more to follow...
Gruß lichtwicht

EDIT2...doch nicht alles gerafft...

splEEnfiRe
16.01.2009, 14:57
Also gibt "world position: X:70638, Y:43, Z:-11420" die Position des Objekts innerhalb der Welt an, oder?

Urban
16.01.2009, 18:18
Ergänzung:

Die Werte Pitch, Roll, Yaw sind Winkel, diese müssen aber erst wieder aus der Matrix zurück gerechnet werden.

bsp:

Lago
GUID: {22ca3eab-f8ed-477c-9c92-aadd85059fe6}
G3_Varant_01_Lago_Dynamic_Objects_01_SHyb.node (Entity 44)

(0.000796318054199218688, 0, -1.0000001192092896, 0)
(0, 1, 0, 0)
(1.0000001192092896, 0, 0.000796318054199218688, 0)

Yaw = atan2(1.0000001192092896,0.000796318054199218688)
Yaw = 1.5700000090039 (radians)
Yaw = ( 180 / PI ) * 1.5700000090039 (degrees)
Yaw = 89.954374351427° (degrees)

>Yaw, pitch, and roll< (http://en.wikipedia.org/wiki/Tait-Bryan_angles)
>Euler angles< (http://en.wikipedia.org/wiki/Euler_angles)

btw: die "PB-Daten" sind korrekt.

Gruß
Urban

Shak-otay
16.01.2009, 20:41
Na, aber hallo- nach einem Jahr tote Hose im Forum auch mal was dazugelernt.:D

Danke, Urban.:gratz

lichtwicht
24.01.2009, 17:53
sooo, neue ver...
auch von mir: vielen Dank an Urban!:gratz
(ich für meinen Teil "checks" zwar immer noch nicht, aber hier mal)
ein neuer Versuch der Drehrichtungsangabe!

so "wirklich" bin ich von meiner "Rechnerei" (obwohl Urban ALLES versucht hat, mir bezüglich der D3DXMATRIX zu helfen!) noch nicht überzeugt, deshalb würde ich diese Version als "beta" bezeichnen...
(btw. genaugenommen sind ALLE Versionen(von mir) "beta's" !!!)

daher bräuchte es mal wieder Hilfe von euch!
schick wäre, wenn ihr den ein oder anderen Punkt "ingame" mal nachprüfen könntet...(Primär interessant sind die Yaw-Werte, sie sollen gegeben sein vom Ursprung des Koordinatensystems, d.h. ingame "nach rechts kucken"(mit dem UZ) gibt einen negativen Winkel und umgekehrt(gegen UZ ist positiv))
(im Anhang ein paar Beispiele)

P.S. ist das Hellgrün(#339966) arg schlimm oder geht's? Vorschläge(#rrggbb) ?
ich wollte halt' eine andere Farbe...(maroon(braun)= GUIDs und ENUMs; nicht noch zusätzlich Position&Winkel)

P.S.S. atan2-Berechnung (http://en.wikipedia.org/wiki/Atan2)


ver 0.40 (beta):
+/- new calaculation of D3DXMATRIX (Rotation)
+ warning if Definition of of Sub-Entities doesn't end with "ffffffff ffffffff" (^ "ffffffff ffffffff" is not directly before DEADBEEF)
+ searching for "Error" in "Structure viewer"(Dt. "Strukturansicht") should lead to a Problem!
(always: +/- bugs and other minor things, I don't remember;-)

still TODO:
- non-Archive-Format
- *.node-Counterpart of lrentdat-genomedl8-files
- many, many other Things...

"Anhang": (Skript(0.40)-"Ausdrucke") (obsolete)

EDIT: (falsche Version entfernt...)
(Komentare zu der Farbe?)

Urban
25.01.2009, 16:03
Danke für die Blumen lichtwicht §wink
leider ist da noch ein Fehler in der Pitch Berechung, hoffe es hilft Dir weiter.


Lago (City-DynObj_01) (y44/-44)
GUID: 2AF2D7A9-9273-4083-9904-D1B59FC0E1D8
Entity #8 (G3_Object_Torch_02)
xyz: -18315/793/-53367//
Pitch(x): -1.53° Yaw(y): -133.72° Roll(z): 90.00°

Ist: Pitch:-87,88419 Yaw:-133,721, Roll:90,00056

Lago (City-DynObj_01) (y92/-84)
GUID: 951FAF5A-0F0B-4F53-9C5B-32AFB711079B
Entity #17 (G3_Object_Torch_02)
xyz: -17077/837/-52436//
Pitch(x): -1.48° Yaw(y): 177.49° Roll(z): 90.03°

Ist: Pitch:-85,08419, Yaw:177,4855, Roll:90,02766

Reddock (City-DynObj_01) (y94/86)
GUID: A2356F06-D5A8-4346-8E03-1B0086B9B6BF
Entity #39 (G3_Object_Interact_Campfire_03)
xyz: 70693/43/-11170//
Pitch(x): -0.01° Yaw(y): 93.95° Roll(z): -0.34°

Ist: Pitch:-0,7680617, Yaw:93,94756, Roll:-0,3377218

Hatte leider keine Zeit alle durchzugehen sorry.

Gruß
Urban

lichtwicht
27.01.2009, 08:11
§wall§wall§wall
nachdem ich 3-9 Varianten der Pitch-Berechnung mittels "atan2"(u.a.) versucht hatte, sah ich es dann irgendwann:
ächtz...man sollte den Winkel auch aus Radiant auch nach Grad umrechnen! ich IDIOT!

also noch ein Versuch v0.41:
+/- new(w/o my Error) calaculation of D3DXMATRIX (Rotation)
still TODO:
- *.node-Counterpart of lrentdat-genomedl8-files
- non-Archive-Format
- many, many other Things...

Wiederholung mit "neuen" Werten:

ist das Hellgrün(#339966) arg schlimm oder geht's? Vorschläge(#rrggbb) ?
ich wollte halt' eine andere Farbe...(maroon(braun)= GUIDs und ENUMs; nicht noch zusätzlich Position&Winkel)

es bräuchte also mal wieder Hilfe von euch!
schick wäre, wenn ihr den ein oder anderen Punkt "ingame" mal nachprüfen könntet...(Primär interessant sind die Yaw-Werte, sie sollen gegeben sein vom Ursprung des Koordinatensystems, d.h. ingame "nach rechts kucken"(mit dem UZ) gibt einen negativen Winkel und umgekehrt(gegen UZ ist positiv))
Skript(0.41)-"Ausdrucke"
Lago (City-DynObj_01) (y44/-44)
GUID: 2AF2D7A9-9273-4083-9904-D1B59FC0E1D8
Entity #8 (G3_Object_Torch_02)
xyz: -18315/793/-53367//
Pitch(x): -87.88° Yaw(y): -133.72° Roll(z): 90.00°

Lago (City-DynObj_01) (y133/-47)
GUID: DC7960E1-4B48-4575-BFAA-CCB7FDB9A9A0
Entity #13 (G3_Object_Fire_Cage_01)
xyz: -17950/832/-51932//
Pitch(x): 0.41° Yaw(y): -132.98° Roll(z): -0.03°

Lago (City-DynObj_01) (y92/-84)
GUID: 951FAF5A-0F0B-4F53-9C5B-32AFB711079B
Entity #17 (G3_Object_Torch_02)
xyz: -17077/837/-52436//
Pitch(x): -85.08° Yaw(y): 177.49° Roll(z): 90.03°

Reddock (City-DynObj_01) (y7/7)
GUID: 6C8E1F82-3558-4616-A213-A6125B626841
Entity #28 (G3_Object_Interact_Stool_01)
xyz: 71290/111/-12231//
Pitch(x): 0.06° Yaw(y): 7.39° Roll(z): -0.28°

Reddock (City-DynObj_01) (y94/86)
GUID: A2356F06-D5A8-4346-8E03-1B0086B9B6BF
Entity #39 (G3_Object_Interact_Campfire_03)
xyz: 70693/43/-11170//
Pitch(x): -0.77° Yaw(y): 93.95° Roll(z): -0.34°

Ishtar (Outdoor-DynObj_01) (y21/-20)
GUID: 7760A3B5-22FF-4852-92DB-C09FE3F98BBC
Entity #4 (G3_Object_Interact_Campfire_01)
xyz: -214994/8456/-136672//
Pitch(x): -0.84° Yaw(y): -20.54° Roll(z): 3.34°

P.S. (btw.) weiß jemand etwas über "Color: bCFloatColor" ?
das sind 4(nicht 3 !) float's, AFAIR zwischen 0 und 1
(könnte man ja mit 255 multiplizieren?)
...wie bekomme ich da eine Farbe ?

P.S.S. @Urban: danke für's raussuchen der Werte!

.Feuerbarde
27.01.2009, 13:33
P.S. (btw.) weiß jemand etwas über "Color: bCFloatColor" ?
das sind 4(nicht 3 !) float's, AFAIR zwischen 0 und 1
(könnte man ja mit 255 multiplizieren?)
...wie bekomme ich da eine Farbe ?

Evtl. RGB (Rot-Grün-Blau)?

http://de.wikipedia.org/wiki/RGB-Farbraum

KA ob das richtig ist, Deine 255 und die 3 brachten mich zu der Vermutung. Bei RGB bestehen die Farben aus 3 Werten, ebend Rot-Grün-Blau die sich jeweils aus Koordinaten zwische 0 und 255 zusammensetzen und gemeinsam einen Farbton ergeben.

Kronos
27.01.2009, 13:51
Evtl. RGB (Rot-Grün-Blau)?

http://de.wikipedia.org/wiki/RGB-Farbraum

KA ob das richtig ist, Deine 255 und die 3 brachten mich zu der Vermutung. Bei RGB bestehen die Farben aus 3 Werten, ebend Rot-Grün-Blau die sich jeweils aus Koordinaten zwische 0 und 255 zusammensetzen und gemeinsam einen Farbton ergeben.

Deswegen ist er wahrscheinlich irritiert, schließlich besteht RGB und die meisten anderen Farbsysteme aus 3 Werten.

Aber ich hätte da noch eine Vermutung (Vermutung! Ich habe nirgendswo nachgeschaut) wofür der 4. Wert steht: Eine Alpha-Ebene, also die Transparenz.

Gruß,
Kronos

Urban
27.01.2009, 15:10
....
P.S. (btw.) weiß jemand etwas über "Color: bCFloatColor" ?
das sind 4(nicht 3 !) float's, AFAIR zwischen 0 und 1
(könnte man ja mit 255 multiplizieren?)
...wie bekomme ich da eine Farbe ?
....


bsp: 0xA0FCC700, 0x0000803F, 0x0000803F, 0x0000803F 1.83658885097250657E-38, 1, 1, 1 (Value? seems not to help...)

Der erste Wert ist nur ein Dummy um auf "16Bye" zukommen.
Die anderen Werte stellen RGB da, du kannst diese mit 255 multiplizieren um sie in Byte/Integer umzuwandeln,
achte dabei aber auf Rundungsfehler.

btw: bCFloatAlphaColor > D, R, G, B, A

Gruß
Urban

peacemaker3D
05.02.2009, 12:41
Ich verfolg das ganze schon etwas länger mit und finds sehr interessant, was ihr hier so zaubert.

Mich würde mal interessieren, ob ihr auch an die Member der Klassen irgendwie rankommt... Beispielweise der NPC-Klasse.

mfG

peacemaker3D
05.02.2009, 13:26
Ich bin nicht ganz informiert, was den Aufbau der Klassen betrifft, aber es gibt ja sicherlich eine CNpc-Klasse, oder sowas, und die Member davon würden mich sehr interessieren.

Damit meine ich die Definition der NPC-Klasse innerhalb der Engine.



class CNPc
{
int blabla; // usw.
};


mfG

lichtwicht
05.02.2009, 13:42
Mich würde mal interessieren, ob ihr auch an die Member der Klassen irgendwie rankommt... Beispielweise der NPC-Klasse.
Äh, was meinst du damit???
Es gibt noch ungereimtheiten bezüglich der Sachen, die nach dem offiziellen PS (PropertySheet(?)) kommen, aber die "Klasse" wird komplett dargestellt.
Und so einzelne Werte wie Farben...(v0.42 kommt vorr. morgen)
Und ich habe nicht ALLE Enums "eingebaut", wenn dich etwas interessiert mußt du ggf. in der "g3_enum.txt" nachsehen...
greez lw

du hast das TH-Skript noch nicht benutzt oder ?
lade dir mal die aktuelle Ver und sieh dir die datei "g3_lrentdat_dump.html" an.
suche nach "npc" 2.te fundstelle (?)

EDIT(2)
@DWI: äh, das ist doch schon in der v0.41 drin §kratz
als marvin-string auf volle Zahlen gerundet (also x/y/z//)
zumindest bei den lrentdat und node AFAIR (???)

DWI
05.02.2009, 13:51
Lichtwicht,
wenn du morgen nen neues Script machst, kannst du dann bitte die Koordinaten mit einem Komma, statt einem Punkt darstellen.
Bisher 123.456 und mach bitte 123,456.
Das erleichtert einem die Arbeit mit dem MM sehr.
Wenn es möglichwäre sogar ganz im MM-Format ("123,456/123,456/123,456//").

Gruß
DWI

Überhaupt vielen Dank für das klasse Script :gratz

DWI
05.02.2009, 14:23
Ohje, dann tut mir das Leid, dass ich scheinbar ne veraltete Version benutze.
Vielen Dank, dass du es mittlerweile drinne hast :gratz

peacemaker3D
05.02.2009, 15:00
So, hab mir das mal genauer angeschaut, ist tatsächlich genau das was ich meinte, danke.

Wie stehts eigentlich mit Methoden? Kommt man auch irgendwie an die ran? (Schätz mal eher nicht, da die ja in keinster Weise gespeichert werden)

mfG

splEEnfiRe
05.02.2009, 16:17
Über diese Dateien, sprich .tples und .lrentdats nicht, da sie, so wie ich das sehe nur die persistenten Daten der Objekte enthalten.

lichtwicht
06.02.2009, 11:02
§dito

also, im Anhang eine v0.42 (eigentlich eine Verschwendung von Versionsnummern...aber wie sagte jemand mal? "Sonst kommen wir ja nie auf 1.0!";-)

also 0.42 "Einbau" der Farben, das mit dem Runden(und die Umrechnung mit den THSkript-Möglichkeiten) gibt noch etwas Möglichkeit für Fehler...
(ich mußte z.B. Null extra abfragen)

EDIT:(P.S. wenn die Farbe in ein mittleres Grau geht, wird die Schrift eher unleserlich, da mich das beruflich interessiert, errechne ich vielleicht noch die Komplementärfarbe, wäre aber sonst zu vernachlässigen...)
habe gerade gesehen, ich "berechne" schon die Komplementärfarbe...
mfg lw

DWI
15.02.2009, 00:19
Lichtwicht,
wenn du morgen nen neues Script machst, kannst du dann bitte die Koordinaten mit einem Komma, statt einem Punkt darstellen.
Bisher 123.456 und mach bitte 123,456.
Das erleichtert einem die Arbeit mit dem MM sehr.
Wenn es möglichwäre sogar ganz im MM-Format ("123,456/123,456/123,456//").

Gruß
DWI

Überhaupt vielen Dank für das klasse Script :gratz

Hey lichtwicht.
Habe eben mal deine neue Version gezogen und die Koordinaten werden bei mir


0x0000004F 0xF07BAA47, 0x72E49445, 0xA3446CC6 87287.875, 4764.5556640625, -15121.1591796875 (D3DXVECTOR3) ??? a Min-Vector ???
0x0000005B 0x78A8B847, 0xF8B8D545, 0xB73200C6 94544.9375, 6839.12109375, -8204.6787109375 (D3DXVECTOR3) ??? a Max-Vector ???

angezeigt.

Kannst du das bitte wie oben beschrieben abändern? :)

lichtwicht
15.02.2009, 23:19
0x0000004F 0xF07BAA47, 0x72E49445, 0xA3446CC6 87287.875, 4764.5556640625, -15121.1591796875 (D3DXVECTOR3) ??? a Min-Vector ???
0x0000005B 0x78A8B847, 0xF8B8D545, 0xB73200C6 94544.9375, 6839.12109375, -8204.6787109375 (D3DXVECTOR3) ??? a Max-Vector ???

ähh...aber das sind doch die min-max-vektoren?
da willst du doch gar nicht "hinspringen" (oder?)
DER "Punkt", DER in der node/lrentdat AUSSCHLAGGEBEND ist, wird im "marvin-format" angezeigt (also im Header!)

ICH für meinen Teil sehe KEINEN Sinn darin min- und max-Vektoren im "marvin-format" anzeigen zu lassen ? (nicht, daß ich mich nicht überzeugen lassen würde...)

(von der ganzen skript-einbindung mal abgesehen...und da bin ich alles andere als experte, aber halt' "der Verantwortliche")
ich fände es z.B. auch "sinnlos" den LastUsableNavigationPoint so darzustellen...
(marvin-) "Sprungadresse" sind die zwei Werte im Header! (World bzw. Local als Teil der D3DXMatrix) (mAn)
Sinnloserweise wird das auch im Template angezeigt...(zuviel Information!)...aber tut ja auch nicht sonderlich "weh'" (?)

Aber jetzt JEDEN Vektor auf diese Weise anzeigen zu lassen, führt mAn(MEINER Ansicht nach) nur noch zu mehr "kuddelmuddel" ???

soll heißen---> bitte begründen!

gruß lichtwicht

P.S. die Vektoren sind "float" 's und die Anzeige der float's ~dürfte~ von den Windows-Sprach-Einstellungen abhänmgen (Deutsch .(punkt) dumme Ammi's ,(komma))
BITTE! erwarte nicht von MIR dafür überall extra-routinen zu schreiben! (besonders wenn ich nicht der Meinung bin, die Anzeige in dieser Form wäre nötig...)
wiegesagt, begründe dein Anliegen (und wenn es irgendwie geht, grenze es ein...) und ich bin dir gern zu diensten...


EDIT2: hmmm, schaumermal...

DWI
16.02.2009, 01:42
Also wenn ich den Sinn einer Koordinate nicht verstehe, beame ich mich einfach hin.
Um zu schauen, was da ist / ob da was ist.
Und weil man die Koordinaten doch eigentl eh nur für den MM braucht, dachte ich, kann man doch auch alle so darstellen lassen :)
Die Lesbarkeit leidet ja nicht darunter.

Gruß

lichtwicht
17.02.2009, 17:47
Hoi DWI,
anbei 'ne beta (das ist mir jetzt aber echt keine neue Versionsnummer wert(und kein "full-release")!, die nächste wird 0.43 heißen)
bei allen D3DXVektoren hat's jetzt am Ende der Zeile 'ne Klammer: rounded for marvin, die floats auf Ganzzahlen gerunded, und damit es nicht IMMER den Gleitkommafehler(11) gibt, begrenzt auf +/- 4 Billionen.

Zufrieden?

gruß lichtwicht

splEEnfiRe
21.02.2009, 19:35
Beim stöbern in den ganzen .nodes ist mir aufgefallen, dass die "SUB CLASS EXTRA DEFINITION" der "eCCollisionShape"-Klasse noch nicht alle Werte des ENUM-Datentyps "eECollisionShapeType" auflösen kann.

Deswegen habe ich mal an 3 Beispielen versucht den Wert "eECollisionShapeType_TriMesh" etwas aufzulösen. Folgendes ist dabei herausgekommen:

Fireplace_Large_01(Ardea_Dynamic_Objects):
Headereintrag:
0x8A497E43, 0x187A4943, 0xA2061B43 254.287261962890625, 201.4769287109375, 155.025909423828125

SUB____
0x9700 ShapeTypeDefinitionFile?: G3_Object_Fireplace_Large_01_COL.xnvmsh

0x00000100 ???
0x80497EC3 0x000021BD 0x14A49AC3 -254.287109375, -0.039306640625, -309.2818603515625
0x80497E43 0xA96EC943 0x0010453F 254.287109375, 402.8645324707031, 0.769775390625
0x00000000 0x00000000 0x00000000 0, 0, 0

Ardea_Palisaden_04(Ardea_statischeObjekte_SysDyn-Ordner):
Headereintrag:
0x00003943, 0x18D29243, 0xA0DECD43 185, 293.641357421875008, 411.739257812499968

SUB___
0x8500 ShapeTypeDefinitionFile?: G3_Myrtana_Ardea_Palisaden_04_COL.xnvmsh

0x00000100 ???
0x000039C3 0x10D292C3 0xA0DECDC3 -185, -293.6406555175781, -411.739257812499968
0x00003943 0x20D29243 0xA0DECD43 185, 293.6406555175781, 411.739257812499968
0x00000000 0x00000000 0x00000000 0, 0, 0

G3_Myrtana_House_Small_01(Ardea_statischeObjekte_SysDyn-Ordner):
Headereintrag:
0x208DD843, 0xCC8F0244, 0x2CAA2A44 433.102539062499968, 522.246826171875008, 682.658935546875008

SUB___
0x8800 ShapeTypeDefinitionFile?: G3_Myrtana_House_Small_01_COL.xnvmsh

0x00000100 ???
0x40ADD9C3 0x029580C3 0xAF35FAC3 -435.3516845703125, -257.16412353515625, -500.4194030761719
0x006DD743 0x2483A243 0x00200B44 430.8515625, 325.0245361328125, 1409
0x00000000 0x00000000 0x00000000 0, 0, 0

Die Bytes, die zu diesem SUB-Klassenabschnitt in der .node gehören, habe ich rot markiert.

Die Headereinträge in der gleichen Entity-Definition habe ich nur hinzugefügt, da ich vermute, dass dieser Eintrag die Maße des zu spawnenden Objekts repräsentiert(Breite, Höhe, Länge -Reihenfolge?-).

In dieser Subklass scheinen die Grenzen für diese Maßangaben festgelegt zu werden.

Ich bin mir nicht sicher, ob das hier stimmt, aber bevor ich es verliere, dachte ich, ich schreibe es mal hier rein. Lichtwicht, wenn du Zeit und Motivation hast, könntest du mal versuchen, das ins Script mit aufzunehmen?
(Natürlich nur, wenn es nicht zu viel arbeit macht)

Dieser enum-Wert scheint nur bei Objekten verwendet zu werden, dessen Form sehr individuell ist, d.h. die Form ist in den Mesh-Dateien festgelegt. Ich vermute mal, in den .nodes wird dann einfach auf diese .xnvmsh-Dateien verwiesen
(Wie bei ConvexHull auch), zusätzlich müssen die Grenzen für die Ausmaße des Objekts festgelegt werden.

Gruß

splEEnfiRe

lichtwicht
24.02.2009, 16:10
TinyHexerSkript v0.43 !
+eECollisionShapeType_TriMesh
-some false "Errors"
(still TODO: many, many other things...)

thx@splEEnfiRe !
-der TriMesh löst sich genauso auf wie der ConvexHull, deshalb von mir nicht wirklich viele tests dazu...(sollte aber stimmen!)

-habe für unbekannte ShapeTypes mal eine rudimentäre Anzeige eingebaut. Achtung! diese "Funktion" liest "über das Ende der SubKlasse hinweg" (schwer zu erklären...ihr werdet sehen was ich meine, wenn's euch begegnet...)
-desweiteren habe ich dem node-Header ein paar Vermutungen(textueller Art) hinzugefügt...
-und der Wunsch von DWI ist (noch?) drin: alle Vektoren werden auch im marvin-format dargestellt...(ich finds teilweise schon etwas unübersichtlich, aber das liegt wohl eher an meinen ganzen Textvermutungen...) wenn's niemand stört, bleibt's drin!

gruß lichtwicht

splEEnfiRe
24.02.2009, 23:03
Erstmal danke für deine schnelle Umsetzung und deine Mühe§wink.


-desweiteren habe ich dem node-Header ein paar Vermutungen(textueller Art) hinzugefügt...
gruß lichtwicht

Diesbezüglich kann und werde ich in der nächsten Zeit genaueres sagen können(hoffe ich jedenfalls).

lichtwicht
26.02.2009, 23:08
dat ging schnell, oder?

v0.44
+ "node-counterpart of genomedl8-files" (node 0x4800)
- error when viewing lrentdat/node with ONLY 1 (root-)Entity


P.S. ich wußte warum ich diese alten Versionen eigentlich nicht mehr groß anfassen wollte...
bei den lrentdat(genomedl(8)) mußte ich EXTREM "tricksen" damit das skript durchläuft...abhängig von 3 Versionsangaben! (wobei ich inzwischen denke, daß da eine "zuviel" ist)...
Die Angaben zu den Headern dieser 2 Versionen (genomedl(8) & 0x4800) dürftet ihr in die Tonne treten können...
Was bei den "offiziellen" Klassen steht, ~müßte~ aber stimmen...

NICHT ganz ausschließen kann ich, daß die neue Version "in die "normalen" nodes "spuckt""...ich denke nicht! könnte aber sein!
Wenn euch also eine node begegnet, die vorher gut anzusehen war und jetzt (Skript-)Fehler produziert -> bitte melden!

TODO:
sub-class of "eCIlluminated_PS" !

(taucht jetzt gerade in den "statischen" verstärkt auf...und ca. 128 Bytes könnten schon interessant sein...)

splEEnfiRe
05.03.2009, 21:34
oh...deinen Beitrag hab ich ganz übersehen. Vielen Dank und klasse Arbeit!

Ich werd das ganze bei Gelegenheit mal testen, hab bisher immer Version 39 genutzt, aber wird Zeit etwas aktuelleres zu nehmen;).

Bleibt wohl nur noch die NavigationMap.xnav als größeres Projekt. Wenn das geschafft ist, kann man endlich mal weiter versuchen die technischen Machbarkeiten auszureizen:D.

Gruß

splEEnfiRe§wink

splEEnfiRe
08.03.2009, 14:06
So dann hier mal meine Vermutungen zum .node Header-Part:

So wie ich das sehe gibt es mehrere Arten von .node-Headern, sprich, dass die Werte an bestimten Stellen im Headern anders interpretiert(?), verwendet oder ignoriert werden. Einige der Erkenntnisse sind schon im Header beschrieben, ich kann sie lediglich bestätigen.

Als erstes Mal der Header für statische/dynamische Objekte:
(Am Beispiel eines statischen Fasses, dass ich in der Mine von Geldern erfolgreich spawnen konnte)

0x0000031A 0x0000 ????
0x0000031C 0x2300 35 Version ????
0x0000031E 0x00 ????
0x0000031F 0x468936C7, 0x581E9444, 0x1B2C7647 -46729.2734375, 1184.9482421875, 63020.10546875 (D3DXVECTOR3) ??? Min World Root /
0x0000032B 0x4E3336C7, 0x38C2A044, 0x19887647 -46643.3046875, 1286.0693359375, 63112.09765625 (D3DXVECTOR3) ??? Max World Root /
0x00000337 0x4A5E36C7, 0x48709A44, 0x1A5A7647 -46686.2890625, 1235.5087890625, 63066.1015625 (D3DXVECTOR3) ??? World / Local Position
0x00000343 0x80F12B42, 0xF83D4A42, 0xA5FB3742 42.98583984375, 50.560516357421875, 45.9957466125488281 (D3DXVECTOR3) ??? Limitation (Min/Max) ??? (rounded for marvin: 43/51/46// )
0x0000034F 0x0CFA7F3F, 0xE2DA5CBC, 0x7A376E38 0.999909162521362305, -0.0134799201041460037, 5.67952884011901915E-5 (D3DXVECTOR3) ??? Rotation Matrix Line 1 ??? (rounded for marvin: 1/0/0// )
0x0000035B 0xE2DA5C3C, 0xB8F77F3F, 0xB40D0ABC 0.0134799201041460037, 0.999873638153076172, -0.0084261186420917511 (D3DXVECTOR3) ??? Rotation Matrix Line 2 ??? (rounded for marvin: 0/1/0// )
0x00000367 0x7A376E38, 0xB40D0A3C, 0xACFD7F3F 5.67952884011901915E-5, 0.0084261186420917511, 0.999964475631713867 (D3DXVECTOR3) ??? Rotation Matrix Line 3 ??? (rounded for marvin: 0/0/1// )
0x00000373 0x5300 83 Class Version(!) (No.3)
0x00000375 0x0100 Identifier/Version ???
0x00000377 0x4350312E 0x375F 0x4765 0x6C64 0x65726E60 0x13C7 0x00000000 2E315043-5F37-6547-6C64-65726E6013C7:0 GUID (in BigEndian for Clipboard: 43 50 31 2E 37 5F 47 65 6C 64 65 72 6E 60 13 C7 00 00 00 00 )
.......... Beginning of reusable 2nd HeaderPart
0x0000038B 0x01 ? Enabled (Bool) ????
0x0000038C 0x01 ? Render Enabled (Bool) ????
0x0000038D 0x00 ? Process Disabled (Bool) ????
0x0000038E 0x01 ? Can (be) Deactivated (Bool) ????
0x0000038F 0x00 ? Pickable (Bool) ????
0x00000390 0x01 ? Can Collided (Bool) ????
0x00000391 0x01 ? Must Compiled Static (Bool) ????
0x00000392 0x0000803F 1 ??? Render Alpha (Float) ????
0x00000396 0x0200 0002 ? Insert Type: eEInsertType_Ground = 2
0x00000398 0x00 ??? Last Render Priority (Byte) ????
0x00000399 0x0000 ????
0x0000039B 0x00 ????
0x0000039C 0x0100 0x0001 Entity:
0x0000039E 0x0CFA7F3F, 0xE2DA5CBC, 0x7A376E38, 0x00000000 World-D3DXMATRIX 0.9999 -0.0135 0.0001 0 Yaw/Roll: 1° Roll: -1° Yaw: 0° (0.999909162521362305, -0.0134799201041460037, 5.67952884011901915E-5, 0)
0x000003AE 0xE2DA5C3C, 0xB8F77F3F, 0xB40D0ABC, 0x00000000 World-D3DXMATRIX 0.0135 0.9999 -0.0084 0 Roll: -1° Pitch/Roll: 1° Pitch: 0° (0.0134799201041460037, 0.999873638153076172, -0.0084261186420917511, 0)
0x000003BE 0x7C376E38, 0xB50D0A3C, 0xAEFD7F3F, 0x00000000 World-D3DXMATRIX 0.0001 0.0084 0.10000 0 Yaw: 0° Pitch/Roll: 0° Pitch/Yaw: 0° (5.67952956771478057E-5, 0.00842611957341432571, 0.999964594841003418, 0)
0x000003CE 0x4A5E36C7, 0x48709A44, 0x1A5A7647, 0x0000803F World-D3DXMATRIX xyz: -46686/1236/63066// (rounded for marvin) (-46686.2890625, 1235.5087890625, 63066.1015625, 1)
Pitch(x): -0.48° Yaw(y): 0.00° Roll(z): -0.77° (P:-0.482786804437637329, Y:0.00325424596667289734, R:-0.772393345832824707)
0x000003DE 0x0CFA7F3F, 0xE2DA5CBC, 0x7A376E38, 0x00000000 Local-D3DXMATRIX 0.9999 -0.0135 0.0001 0 Yaw/Roll: 1° Roll: -1° Yaw: 0° (0.999909162521362305, -0.0134799201041460037, 5.67952884011901915E-5, 0)
0x000003EE 0xE2DA5C3C, 0xB8F77F3F, 0xB40D0ABC, 0x00000000 Local-D3DXMATRIX 0.0135 0.9999 -0.0084 0 Roll: -1° Pitch/Roll: 1° Pitch: 0° (0.0134799201041460037, 0.999873638153076172, -0.0084261186420917511, 0)
0x000003FE 0x7C376E38, 0xB50D0A3C, 0xAEFD7F3F, 0x00000000 Local-D3DXMATRIX 0.0001 0.0084 0.10000 0 Yaw: 0° Pitch/Roll: 0° Pitch/Yaw: 0° (5.67952956771478057E-5, 0.00842611957341432571, 0.999964594841003418, 0)
0x0000040E 0x4A5E36C7, 0x48709A44, 0x1A5A7647, 0x0000803F Local-D3DXMATRIX xyz: -46686/1236/63066// (rounded for marvin) (-46686.2890625, 1235.5087890625, 63066.1015625, 1)
Pitch(x): -0.48° Yaw(y): 0.00° Roll(z): -0.77° (P:-0.482786804437637329, Y:0.00325424596667289734, R:-0.772393345832824707)
0x0000041E 0x468936C7, 0x581E9444, 0x1B2C7647 -46729.2734375, 1184.9482421875, 63020.10546875 (D3DXVECTOR3) Min World Root (bCBox) ????
0x0000042A 0x4E3336C7, 0x38C2A044, 0x19887647 -46643.3046875, 1286.0693359375, 63112.09765625 (D3DXVECTOR3) Max World Root (bCBox) ????
0x00000436 0x80F12BC2, 0x00C88B3C, 0xAEFB37C2 -42.98583984375, 0.017063140869140625, -45.9957809448242188 (D3DXVECTOR3) Min Local Point (bCBox) ????
0x00000442 0x80F12B42, 0xB446CA42, 0x9BFB3742 42.98583984375, 101.138092041015625, 45.9957084655761719 (D3DXVECTOR3) Max Local Point (bCBox) ????
0x0000044E 0x468936C7, 0x581E9444, 0x1B2C7647 -46729.2734375, 1184.9482421875, 63020.10546875 (D3DXVECTOR3) Min Local World (bCBox) ????
0x0000045A 0x4E3336C7, 0x38C2A044, 0x19887647 -46643.3046875, 1286.0693359375, 63112.09765625 (D3DXVECTOR3) Max Local World (bCBox) ????
0x00000466 0x28E7A342 81.95147705078125 ????
0x0000046A 0x4A5E36C7, 0x48709A44, 0x1A5A7647 -46686.2890625, 1235.5087890625, 63066.1015625 (D3DXVECTOR3) ??? World-Vector ???
0x00000476 0x28E7A342 81.95147705078125 ????
0x0000047A 0x4A5E36C7, 0x48709A44, 0x1A5A7647 -46686.2890625, 1235.5087890625, 63066.1015625 (D3DXVECTOR3) ??? World-Vector ???
0x00000486 0x0000803F 1 ????
0x0000048A 0x01 ????
0x0000048B 0x00401C45 2500 ? Object Cull (Float) ????
0x0000048F 0xFFFFFFFF Change Time (DWord) ? If different as in Template, Template will be used ?
0x00000493 0x0000803F 1 ????
0x00000497 0x01 ????
0x00000498 0x00 ????
0x00000499 0x03000000 3 Total Number Of Class Entries (for THIS Entity)


Zu 0x00000337:
Diese Koordinaten beschreiben den Standpunkt des Objektes innerhalb der Welt. Hierbei ist (vermutlich) der geometrische Mittelpunkt des Objektes gemeint, bei diesem Fass also also der Punkt, der im Fass liegt und von Boden und Deckel gleichen Abstand hat und von den Wänden genau den gleichen Abstand hat.

Zu 0x00000343:
Hier stehen die Ausmaße des Objekts, sprich Breite (X), Höhe(Y), Länge(Z). Hier ist zu beachten, dass jeweils vom Mittelpunkt ausgegangen wird, d.h. die tatsächliche Höhe des Objekts in der Welt beträgt nicht 50.560516357421875 sondern das doppelte, also 2*50.560516357421875 = 101,12103271484375. Bei den anderen zwei Maßen verhält es sich genauso.

Zu 0x0000031F u. 0x0000032B:
Diese untere(0x0000031F) und obere(0x0000032B) Grenze berechnen sich, indem man die Ausmaße aus "Zeile" 0x00000343 erst zum entsprechenden Wert aus "Zeile" 0x00000337 subtrahiert und dann addiert. Hier also mal die entsprechende Rechnung, für die "X-Achsen-Grenzen":

Untere Grenze(Subtraktion):
-46686.2890625 - 42.98583984375 = -46729.2734375

Obere Grenze(Addition):
-46686.2890625 + 42.98583984375 = -46643.3046875

Diese Rechnungen werden im Header auch etwas weiter unten aufgführt. Hier ist es mal grün markiert(0x0000041E bis 0x0000045A). Sollte klar sein, was da steht;).

Zu 0x0000046A u. 0x0000047A
Das sind die Mittelwerte der einzelnen Koordinatengrenzen(Ober- und Untergrenze). Damit auch hier keine Missverständnisse aufkommen, die Rechnung mal für den X-Mittelwert:

( -46729.2734375 -46643.3046875) / 2 = -46686.2890625

Warum das ganze 2mal aufegührt wird ist mir nicht ganz klar, vlt. hängt es mit der Angabe der Berechnung der Extremwerte(grüner Abschnitt) zusammen.(die grünen Grenzen stimmen übrigens mit den orangenen Überein, nur der Vollsändigkeit halber)

Zu 0x00000497 u. 0x00000498 :
Diese Werte ändern sich, wenn man dynamische und statische Objekte vergleicht. Bei allein bisher von mir betrachteten statischen Objekten ist der erste Boolean-Wert true(01) und der zweite false(00). Bei dynamischen Objekten ist es entprechend umgekehrt. Wobei es manche dynamische Objekte gibt, bei denen der erste Wert true und der zweite Wert false ist(womoglich dynamische Objekte, die statisch angelegt sind). Diese Werte könnten also diejenigen sein, über die die Engine festellen kann, ob ein Objekt dynamisch oder statisch zu interpretieren ist.
Hierbei scheinen aber auch die Werte von 0x0000048B bis 0x00000493 eine Rolle zu spielen, da sie sich jenachdem ob statisch oder dynamisch auch unterscheiden. Was und ob die Engine daraus was macht kann ich nciht sagen:dnuhr:.

Zu 0x00000466 u. 0x00000476:
Es ist mir leider noch nicht gelungen diesen Wert zu berechnen. Man kann ihn näherungsweise bestimmen, aber dies bringt aufgrund der manchmal enormen Abweichung von 20-30% nicht viel, da man hiermit nur Bugs verursachen könnte. Was ich vermute, dass er sich irgendwie aus den Ausmaßen des Objekts (Mittelwerte) oder den Grenzen ergeben könnte, da sich diese Zahl z.B. bei Fässern nur minimal unterscheidet. Also es ist sehr wahrscheinlich ein Mittelwert oder die Additio von mehreren Mittelwerten. Für leute, die vlt. auch im "Statische Objekte erstellen[Diskussion]" mitlesen:
"Dieser" Wert taucht auch in Region 2 auf. Berechnet man hier die Abweichung der X-KoordinatenWerte der Punkte eines Nav-Objekts/Nav-Region zum Mittelwert und bildet dann den Mittelwert dieser Abweichungen, erhält man 3 Werte (für X-,Y-,Z-Mittelabweichung). addiert man diese Werte, erhält man eine Zahl, die der, vor den Mittelwertskoordinaten stehenden relativ nahe kommt.


Insbesondere im Bezug auf .lrentdats:
Die Koordinaten der Matrix (0x0000040E u. 0x000003CE):

Bei oben aufgeführtem .node-Header wird die Position des Objekts auch schon früher (bei 0x00000337) angegeben, aber bei dem gleich noch folgenden .node-Header und bei .lrentdat-Objekten, wird hier die Position des Objekts festgelegt.

So jetzt zum .node-Header für Nav-Objekte(NavZone/NavPath):
(Auch hier erstmal der Beispielcode -Entity Nr.2 aus "G3_Myrtana_01_Ardea_NavZones_01_SHyb.node")

.......... Beginning of node HeaderPart
0x0000061C 0x0000 ????
0x0000061E 0x2300 35 Version ????
0x00000620 0x00 ????
0x00000621 0xFFFF7F7F, 0xFFFF7F7F, 0xFFFF7F7F 3.4028234663852886E38, 3.4028234663852886E38, 3.4028234663852886E38 (D3DXVECTOR3) ??? Min World Root / Local Point (or Max) (rounded for marvin: tooBig/tooBig/tooBig// )
0x0000062D 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFF7FFF -3.4028234663852886E38, -3.4028234663852886E38, -3.4028234663852886E38 (D3DXVECTOR3) ??? Max World Root / Local Point (or Min) (rounded for marvin: tooSmall/tooSmall/tooSmall// )
0x00000639 0x25E35B47, 0x6097BA45, 0xA4025A47 56291.14453125, 5970.921875, 55810.640625 (D3DXVECTOR3) ??? World / Local Position
0x00000645 0xFFFF7FFF, 0xFFFF7FFF, 0xFFFF7FFF -3.4028234663852886E38, -3.4028234663852886E38, -3.4028234663852886E38 (D3DXVECTOR3) ??? Limitation (Min/Max) ??? (rounded for marvin: tooSmall/tooSmall/tooSmall// )
0x00000651 0x6D4E57BF, 0x00000000, 0x297D0ABF -0.841040432453155518, 0, -0.540972292423248291 (D3DXVECTOR3) ??? Rotation Matrix Line 1 ??? (rounded for marvin: -1/0/-1// )
0x0000065D 0x00000000, 0x0000803F, 0x00000000 0, 1, 0 (D3DXVECTOR3) ??? Rotation Matrix Line 2 ??? (rounded for marvin: 0/1/0// )
0x00000669 0x297D0A3F, 0x00000000, 0x6D4E57BF 0.540972292423248291, 0, -0.841040432453155518 (D3DXVECTOR3) ??? Rotation Matrix Line 3 ??? (rounded for marvin: 1/0/-1// )
0x00000675 0x5300 83 Class Version(!) (No.3)
0x00000677 0x0100 Identifier/Version ???
0x00000679 0x5E8742AD 0x3A08 0xAC47 0x90C2 0xD8ABB0CC 0xFDA9 0x00000000 AD42875E-083A-47AC-90C2-D8ABB0CCFDA9:0 GUID (in BigEndian for Clipboard: 5E 87 42 AD 3A 08 AC 47 90 C2 D8 AB B0 CC FD A9 00 00 00 00 )
.......... Beginning of reusable 2nd HeaderPart
0x0000068D 0x01 ? Enabled (Bool) ????
0x0000068E 0x01 ? Render Enabled (Bool) ????
0x0000068F 0x00 ? Process Disabled (Bool) ????
0x00000690 0x01 ? Can (be) Deactivated (Bool) ????
0x00000691 0x00 ? Pickable (Bool) ????
0x00000692 0x01 ? Can Collided (Bool) ????
0x00000693 0x01 ? Must Compiled Static (Bool) ????
0x00000694 0x0000803F 1 ??? Render Alpha (Float) ????
0x00000698 0x0100 0001 ? Insert Type: eEInsertType_Floor = 1
0x0000069A 0x00 ??? Last Render Priority (Byte) ????
0x0000069B 0x0000 ????
0x0000069D 0x00 ????
0x0000069E 0x0100 0x0001 Entity: Nav_NavZone 1 Edge
0x000006A0 0x0000803F, 0x00000000, 0x00000000, 0x00000000 World-D3DXMATRIX 1 0 0 0 Yaw/Roll: 0° Roll: 0° Yaw: 0° (1, 0, 0, 0)
0x000006B0 0x00000000, 0x0000803F, 0x00000000, 0x00000000 World-D3DXMATRIX 0 1 0 0 Roll: 0° Pitch/Roll: 0° Pitch: 0° (0, 1, 0, 0)
0x000006C0 0x00000000, 0x00000000, 0x0000803F, 0x00000000 World-D3DXMATRIX 0 0 1 0 Yaw: 0° Pitch/Roll: 0° Pitch/Yaw: 0° (0, 0, 1, 0)
0x000006D0 0xCA04B347, 0x68BBA445, 0xBBF205C6, 0x0000803F World-D3DXMATRIX xyz: 91658/5271/-8573// (rounded for marvin) (91657.578125, 5271.42578125, -8572.6826171875, 1)
Pitch(x): 0° Yaw(y): 0° Roll(z): 0° (P:0, Y:0, R:0)
0x000006E0 0x0000803F, 0x00000000, 0x00000000, 0x00000000 Local-D3DXMATRIX 1 0 0 0 Yaw/Roll: 0° Roll: 0° Yaw: 0° (1, 0, 0, 0)
0x000006F0 0x00000000, 0x0000803F, 0x00000000, 0x00000000 Local-D3DXMATRIX 0 1 0 0 Roll: 0° Pitch/Roll: 0° Pitch: 0° (0, 1, 0, 0)
0x00000700 0x00000000, 0x00000000, 0x0000803F, 0x00000000 Local-D3DXMATRIX 0 0 1 0 Yaw: 0° Pitch/Roll: 0° Pitch/Yaw: 0° (0, 0, 1, 0)
0x00000710 0xCA04B347, 0x68BBA445, 0xBBF205C6, 0x0000803F Local-D3DXMATRIX xyz: 91658/5271/-8573// (rounded for marvin) (91657.578125, 5271.42578125, -8572.6826171875, 1)
Pitch(x): 0° Yaw(y): 0° Roll(z): 0° (P:0, Y:0, R:0)
0x00000720 0xF894B147, 0x68BBA445, 0xC3920DC6 90921.9375, 5271.42578125, -9060.6904296875 (D3DXVECTOR3) Min World Root (bCBox) ???? (rounded for marvin: 90922/5271/-9061// )
0x0000072C 0x3C91B347, 0x2ABEA445, 0xB73200C6 91938.46875, 5271.7705078125, -8204.6787109375 (D3DXVECTOR3) Max World Root (bCBox) ???? (rounded for marvin: 91938/5272/-8205// )
0x00000738 0x80E937C4, 0x00000000, 0x0001F4C3 -735.6484375, 0, -488.0078125 (D3DXVECTOR3) Min Local Point (bCBox) ????
0x00000744 0x00728C43, 0x0080B03E, 0x8000B843 280.890625, 0.3447265625, 368.00390625 (D3DXVECTOR3) Max Local Point (bCBox) ????
0x00000750 0xF894B147, 0x68BBA445, 0xC3920DC6 90921.9375, 5271.42578125, -9060.6904296875 (D3DXVECTOR3) Min Local World (bCBox) ???? (rounded for marvin: 90922/5271/-9061// )
0x0000075C 0x3C91B347, 0x2ABEA445, 0xB73200C6 91938.46875, 5271.7705078125, -8204.6787109375 (D3DXVECTOR3) Max Local World (bCBox) ???? (rounded for marvin: 91938/5272/-8205// )
0x00000768 0x351E2644 664.47198486328125 ????
0x0000076C 0x1A93B247, 0xC9BCA445, 0xBDE206C6 91430.203125, 5271.59814453125, -8632.6845703125 (D3DXVECTOR3) ??? World-Vector ??? (rounded for marvin: 91430/5272/-8633// )
0x00000778 0x351E2644 664.47198486328125 ????
0x0000077C 0x1A93B247, 0xC9BCA445, 0xBDE206C6 91430.203125, 5271.59814453125, -8632.6845703125 (D3DXVECTOR3) ??? World-Vector ??? (rounded for marvin: 91430/5272/-8633// )
0x00000788 0x0000803F 1 ????
0x0000078C 0x01 ????
0x0000078D 0x0000803F 1 ? Object Cull (Float) ????
0x00000791 0xFFFFFFFF Change Time (DWord) ? If different as in Template, Template will be used ?
0x00000795 0x0000803F 1 ????
0x00000799 0x00 ????
0x0000079A 0x00 ????
0x0000079B 0x02000000 2 Total Number Of Class Entries (for THIS Entity)


Zu 0x00000639:
Dieser Wert entspricht auf keinen Fall der Position, wie oben schon erwähnt, wird diese bei diesem Typ von Header in der Matrix weiter unten festgelegt.

Zu 0x00000738 u. 0x00000744:
Diese Werte sind auf den ersten Blick nicht ganz ersichtlich, aber dennoch logisch. Man findet diese Werte in der ersten Klasse des entsprechenden Objekts. Hiermal der entscheidende Ausschnitt:

.......... START OF CLASS (Number: 1 of 2)
.......... for Entity: Nav_NavZone 1 Edge (Number: 2)
0x0000079F 0x0100 Start Class Entry (Version) ????
0x000007A1 0x0100 0x0101 0x0001 010001010001 (Sub-)Class Identifier
0x000007A7 0x0200 0x0002 Class Type: gCNavZone_PS
0x000007A9 0x0100 ????
0x000007AB 0x00 ????
0x000007AC 0x5300 (Class Version)
0x000007AE 0x5300 83 Class Version(!)
0x000007B0 0xB3000000 (000007B4 + 000000B3 = 00000867) Size Until Dead Code
0x000007B4 0x1E00 30 Property Class Version
0x000007B6 0x09000000 9 Property Type Count
0x000007BA 0x0300 0x0003 Property Name: Point
0x000007BC 0x0400 0x0004 Property Class Type: bTValArray<class bCVector>
0x000007BE 0x1E00 0x001E Magic Value
0x000007C0 0x35000000 53 Size
0x000007C4 0x01 Identifier/Active(Bool) ???
0x000007C5 0x04000000 Number of VECTORs declared: 4
0x000007C9 0x0020EFC3, 0x00C0A23E, 0x8000B843 -478.25, 0.31787109375, 368.00390625 (D3DXVECTOR3) (rounded for marvin: -478/0/368// )
0x000007D5 0x80E937C4, 0x00008F3E, 0x007934C3 -735.6484375, 0.279296875, -180.47265625 (D3DXVECTOR3) (rounded for marvin: -736/0/-180// )
0x000007E1 0x00DC8842, 0x0080B03E, 0x0001F4C3 68.4296875, 0.3447265625, -488.0078125 (D3DXVECTOR3) (rounded for marvin: 68/0/-488// )
0x000007ED 0x00728C43, 0x0000EF3D, 0x0048F241 280.890625, 0.11669921875, 30.28515625 (D3DXVECTOR3) (rounded for marvin: 281/0/30// )


Für die Eckpunkte einer jeden NavZone 1 Edge werden nicht die Koordinaten angegeben, sondern lediglich die Abweichungen der Eckpunkt-Koordinaten von den Standpunkt-Koordinaten der NavZone 1 Edge selbst(hier also die Abweichung von den Koordinaten bei 0x00000710 oder 0x000006D0). Die grün markierten sind wieder Extremwerte, sprich die höchsten/niedrigsten Abweichungen vom Standpunkt für jede Koordinate(X,Y,Z). Diese Werden im Header aufgeführt und dienen zur Berechnung der Ober- und Untergrenze. Warum hier als niedrigste Abweichung bei der Y-Koordinate im Header 0 steht weis ich nicht. Aber es scheint aufgrund der minimalen Abweichung keine Probleme zu geben.

Zu 0x00000799 u. 0x0000079A:
Nach meiner Vermutung handelt es sich bei solchen Nav-Objekten weder um dynamische noch um statische Objekte, desswegen bei beiden Bool-Werten false. Das ist vlt. auch der Grund, warum es die "NavigationMap.xnav" gibt. Diese Objekte benötigen zusätzliche Informationen(?) oder müssen für die Engine auf eine spezielle Weise angeordnet(?)/miteinander verknüpft(?) werden.

Der Rest bei diesem Header ist der gleiche wie bei dem ersten Header. Es scheint aber, dass 0x00000621 bis 0x00000669 keine richtige Verwendung finden(?). Auch die Rotationsmatrix scheint unnötig, da man die Objekte durch die Veränderung der Eckpunkt-Koordinaten drehen kann.

So das wars erstmal, ich hoffe ich ahbe nichts vergessen, falls doch, werde ich es hier herein editieren. Vieles von Obigem ist schon im Script enthalten.

Gruß

splEEnfiRe§wink

splEEnfiRe
22.03.2009, 13:38
So ich hoffe der dreifachpost ist gerechtfertigt.

Seit CP 1.7 gibt es mehrere Dateien(bisher nur .node) die das Script nicht mehr auflösen kann, d.h. es kommt zu einem Fehler. Auch nach mehrmaligem Schließen und Neustarten des Scripts keine Änderung.

Beispielsweise im Varant_Outdoor-Ordner, die .node im "G3_Varant_01_Outdoor_Island_NavZones_01"-Ordner. Das Script bricht bei 0x00000031
mit folgendem fehler ab:

(Skript-)Error in Line: 3862 ErrorNumber: 0 Problem: Ungültige Gleitkommaoperation

Der Int-Wert ab 0x31 wird noch hingeschrieben, allerdings ist danach schluss.

lichtwicht
26.03.2009, 00:22
v0.45-beta7!
-wie ich das sehe läuft das Skript problemlos auch über die "NavigationMap.xnav" vom CP1.7, ALLERDINGS ist der "Sector 4" ENORM gewachsen!!!
Das heißt, das Skript kann ihn nicht komplett "darstellen" (bei mir hört es immer bei ca. 1.7-1.9Gigs RAM-Benutzung von der "mpth.exe" auf...
->TODO! (es fehlen "nur noch ca. 1000 NavObjekte"(von 8320) und das CPT verwendet eine andere "ID", wenn ich den Text etwas kürze könnte ich es noch gerade noch reinbekommen???)

-ich hab's ja geahnt! dieses dämliche "rounded for marvin" für ALLE "Vektoren"!!!
in der von don oben genannten Datei(CP1.7 "G3_Varant_01_Outdoor_Island_NavZones_01\G3_Varant_01_Outdoor_Island_NavZones_01_ SHyb.node") tauchen bei der "Float(single)-Umrechnung" im THSkript auf einmal "NAN"s (was war das nochmal genau?) auf...
Schätzungsweise ist ein Float von G3 eben doch nicht dasselbe wie ein Single vom THSkript...
->lichtwicht-Lösung: mal wieder ein "if";-)

btw. @splEEnfiRe: du meintest:
"Seit CP 1.7 gibt es mehrere Dateien(bisher nur .node) die das Script nicht mehr auflösen kann."
das hört sich so an als ob es noch andere Dateitypen(lrentdat?) gäbe, die dir begenet sind, die nicht mit dem Skript funktionierten...
Wenn ja, hast du ein Beispiel???

gruß lichtwicht

P.S. immer noch TODO, deine guten Anmerkungen zu den Headern einbauen...die Zeit, die Lust und überhaupt...sorry!

Shak-otay
26.03.2009, 06:07
[...], ALLERDINGS ist der "Sector 4" ENORM gewachsen!!!
So ein Mist aber auch. Musste es gerade DER sein?§cry


[...]tauchen bei der "Float(single)-Umrechnung" im THSkript auf einmal "NAN"s (was war das nochmal genau?) auf...


Kommen wir zunächst zu den Zahlenkombinationen, die keine Zahl repräsentieren, da sie sich beim Programmieren (oder besser: beim Debuggen) als die wichtigsten erweisen: sind alle Bits der Charakteristik 1 und die der Mantisse 0, so symbolisiert das einenWert von ±1 (+/− ist abhängig vom höchsten Bit). Sind alle Bit der Charakteristik 1 und die der Mantisse
6= 0, so bedeutet dies, dass es sich nicht um eine Zahl handelt (NAN, Not a Number) . Dieser Wert entsteht durch ungültige Rechenoperationen, z.B. Wurzel aus −x.
(Mit Charakteristik ist hier der Exponent gemeint.)


...die Zeit, die Lust und überhaupt...sorry!Nun mach' uns aber hier nicht schlapp! Du bist EINER;) der Grundpfeiler des G3-Moddings. Wo kämen wir denn hin, wenn sich jeder hier so gehen lassen würde?:D

Mit dem CP 1.7 ist das Kampfverhalten der NPCs imho sehr gut, d.h. man gewinnt keine Kämpfe mehr durch Dauermausgeklicke. Jetzt fehlt eigentlich nur noch der rote Faden in der Story.

keep on running,
shak

splEEnfiRe
26.03.2009, 15:16
btw. @splEEnfiRe: du meintest:
"Seit CP 1.7 gibt es mehrere Dateien(bisher nur .node) die das Script nicht mehr auflösen kann."
das hört sich so an als ob es noch andere Dateitypen(lrentdat?) gäbe, die dir begenet sind, die nicht mit dem Skript funktionierten...
Wenn ja, hast du ein Beispiel???


Also ich habe noch keine .lrentdat gefunden, die das Script nciht auflösen konnte, desswegen habe ich (bisher nur .node) geschrieben. Soll heissen, möglicherweise gibt es noch andere Dateien, von denen ich aber noch keine gefunden habe.



P.S. immer noch TODO, deine guten Anmerkungen zu den Headern einbauen...die Zeit, die Lust und überhaupt...sorry!

Das was ich bei "Zu 0x00000738 u. 0x00000744" geschrieben habe ist möglicherweise fehlerhaft, wie Shak mir gezeigt hat.:)


Nun mach' uns aber hier nicht schlapp! Du bist EINER der Grundpfeiler des G3-Moddings. Wo kämen wir denn hin, wenn sich jeder hier so gehen lassen würde?

Jop, ohne dich gehts nicht. Aber lenk dich ruhig mal etwas ab...


Mit dem CP 1.7 ist das Kampfverhalten der NPCs imho sehr gut, d.h. man gewinnt keine Kämpfe mehr durch Dauermausgeklicke. Jetzt fehlt eigentlich nur noch der rote Faden in der Story.


Und die Story wird bereits in Angriff genommen, wenngleich das noch etwas dauert, wir wollen schließlich keinen Müll entwickeln, davon gab es nämlich in G3 schon genug:D.

splEEnfiRe
27.03.2009, 15:11
Schonmal ne menge Arbeit gewesen denk ich mir mal...sehr gut!


Bengerd und Mason hat's in die SysDyn verschlagen; die anderen 3 sicher auch.


Wenn ich das schon lese grauts mir schon. Diese besch****** Sys_Dyn, die ist so schwer zu bearbeiten, ich denke es wird sich lohnen, das ein doer andere da raus zu nehmen.;)

lichtwicht
10.05.2009, 05:16
Tach Leutz,
sooo, längere, berufsbedingte Pause meinerseits...sorry dafür...
also, neue ver: 0.45lw


-"kann" die NavigationMap.xnav
--Problem: es bleibt letztenendes eine Auflistung von Indexen, Vektoren und GUIDs...eher unkommentiert und vorallem unverknüpft...
--für Interessierte aber hoffentlich eine Hilfe...;-)
--etwas "Probleme" machte die "Sektion 4" vom CP1.7...
---nachdem ich jetzt fast alles gekürzt habe (false=fls; true=tru; Index=Ix usw.) "passt" die Sektion gerade so ins RAM, also 1663 MB bei 8320 Objekten, zum Vergleich die PB belegt "nur" 854 MB bei 6317 Objekten...
--mittelmäßig "brauchbar" dürfte die "Show ALL"-Option sein, zeigt sie doch von jeder Sektion max. 500 Objekte, um sich vielleicht einen Grobüberblick zu verschaffen...


-"auf die Schnelle" habe ich noch eine kleine Routine für die stringtable.bin eingebaut, Dank an NicoDE(mal wieder)!

Ich habe nichts dagegen, solange niemand behauptet, die Beschreibung wäre komplett und/oder fehlerfrei ;)
--Das gilt natürlich auch für sämtliches (anderes) was das Skript "ausspuckt";-)
:zur stringtable.bin-"Routine":
--der rebuilt DAUERT EWIG !!! (ich habe ein paar kleine "Status-Meldungen" wärend des lesens eingebaut, aber so RICHTIG LANG dauert das "ausdrucken" der "wiederhergestellten stringtable.ini")
--Unicode-Raffel:
---gnädigerdings könnte THSkript egal was (wahrscheinlich platform-bedingt) alles einlesen und ausspucken...(zu sehen bei der "show"-Variante(1 & 2))
---leider, leider, leider! ist das nicht so einfach, wenn man die gelesenen Strings in das "HiddenHelperWindow"(html)(unser Array-Ersatz für TinyHexerSkript) "kopieren" will !!!
----dafür muß ich leider eine EXPLIZITE Konvertierung von Unicode(2-Byte) nach ANSI(?) bemühen!!!
----kleine (genervte) Anmerkung meinerseits...Unicode ist gut, toll, und überhaupt...aber die vielen verschiedenen Implementationen (vorher) machen die Bearbeitung (für mich) echt schwer...
---natürlich sind die Einträge NICHT (alphabetisch) sortiert! (das wollt ihr wirklich nicht!, wiegesagt, der unsortierte rebuilt geht echt schon LANG genug!)
---weitere (genervte) Anmerkung meinerseits...ja, es wäre ja wohl auch ZUUUUU einfach gewesen, wenn die Einträge der Sprachen wenigstens chronologisch mit den StringTable-Einträgen gewesen wären...(ECHT!) typisch G3...

--Fazit:
---1. die entsprechende Routine ist von mir "mehr oder weniger" UNGETESTET !
---2. ob die Zeichen aus der .bin im (Browser-Fenster vom) TinyHexerSkript richtig dargestellt werden WEIß ICH NICHT!!!
(wie immer) über Feedback (diesbezüglich) wäre ich durchaus dankbar.
---3. den Zeilen aus der .bin habe ich die Sektionsbezeichnung "[LocAdmin_Strings]" vorangestellt. die Zeilen müssen aus dem Fenster in eine neue Datei kopiert werden! und diese Datei muß ggf. nach "Unicode"(z.B. per notepad) "konvertiert" werden!


gruß lichtwicht

P.S.@(splEEnfiRe/Shak/)All: an den Headern habe ich jetzt nichts wirklich gemacht...sagt mir bitte ggf. wo ich was diesbezüglich an Beschreibung ändern soll.

P.S.S.@Shak: bezüglich den Sachen zum CP1.7(obwohl nicht mehr vorhanden;-): Danke fürs raussuchen! (wird mir in der Zukunft bestimmt noch etwas Arbeit sparen!)
Aber wenn ich das richtig überblicke, ändert sich fürs Skript nix. (oder?)

EDIT: 0.45b ! Leider hatte sich ein Fehler in der *.xshmat-Routine eingeschlichen!...fixed

DWI
10.05.2009, 14:57
Vielen vielen Dank,

Ich hatte vor einer Zeit auf einem PC, den ich eigentl nicht nutze, eine veraltete Version von dem Script benutzt und ich muss sagen:
Dieses Script vereinfacht und verschnellert die Bearbeitung mit (fast) jeder Version spürbar.

Sehr gute Sache!

NicoDE
11.05.2009, 17:12
weitere (genervte) Anmerkung meinerseits...ja, es wäre ja wohl auch ZUUUUU einfach gewesen, wenn die Einträge der Sprachen wenigstens chronologisch mit den StringTable-Einträgen gewesen wären...Da die Listen pro Sprache "Lücken" aufweisen (etliche Texte wurden gar nicht oder nur teilweise lokalisiert), hätte dir das nicht viel gebracht :)
Die "Sortierung" dürfte die Folge einer Optimierung sein (hash_map).

lichtwicht
01.06.2009, 03:56
Beitrag vom 20.5. 1:15

Da die Listen pro Sprache "Lücken" aufweisen (etliche Texte wurden gar nicht oder nur teilweise lokalisiert), hätte dir das nicht viel gebracht :)
Die "Sortierung" dürfte die Folge einer Optimierung sein (hash_map).
ist zwar nicht weiter wichtig, aber das hätte mir schon was gebracht...ich müßte nicht extra (String-)Arrays für jede Sprache erstellen(zur Erinnerung: TinyHexer hat keinen Array-Datentyp! wir müssen dafür (zeitaufwändige) Umwege gehen). Ich(man) könnte dann sofort mit dem Ausruck beginnen und jede der 5 Sprachen nacheinander(pro Zeile in jeder Sprache einen weiteren Eintrag) einlesen und (sofort)ausdrucken. (pure Lücken überlesen ist ja kein Thema!)
Aber wie gesagt...ist unwichtig...die Wenigen, die das jemals brauchen werden, können dann auch 'ne Halbe bis 2 Stunden warten...(und wer weiß ob es wirklich so eine große Zeitersparnis gewesen wäre...die große Datenmenge macht TinyHexer eh' die meisten Probleme...und so ist es ziemlich Fehlerunanfällig)
---------------------------------------
Hi Leutz,
beim suchen nach einer neuen father-lrentdat bin ich über folgende Datei gestolpert:
\Projects_compiled\G3_World_01\Varant\MoraSul_Outdoor\G3_Varant_01_Outdoor_MoraS ul_NPC_01\{4EBE4FCF-27C6-4835-889F-A61827F963F0}.lrentdat
ist bei mir NUR 406.784 Bytes groß! Ich würde ja sagen, so bei ca. 40% abgeschnitten...auf jeden Fall fehlt eine StringTable, die aber offensichtlich, eigentlich verwendet wird...
in dem Ordner hat es übrigens(bei mir) NUR die .lrentdat...(keine .lrent, keine .sec, keine .secdat)

wahrscheinlich ist die Datei als "Deleted" gekennzeichnet, wofür ja shon der Name sprechen würde...weitere Hinweise:
-das "Offset To String Table" und die "Size Until Dead Code" sind Null
-auch die "Size Until Dead Code" der letzten(abgeschnitten) Klasse ist Null
andere Dateien ähnlicher Form(GUID.lrentdat) hören aber schon nach der zweiten ID auf(so ca. 10-20Bytes)...
wahrscheinlich wurde nur vergessen den unwichtigen Rest genauso abzuschneiden(?)...

anbei eine Skript-"PreRelease", die etwas Fehlertoleranter ist und die Datei wenigstens teilweise "dekodiert"...(und mehr Enum's anzeigt)
---------------------------------------
desweiteren (wieder) aufgefallen ist mir im "gCItem_PS", daß die "ReqAttrib1Op" nicht "weiterzählen"...
im Gegensatz (z.B.) zu den "ModAttrib1Op"(also: ModAttrib2Op, ModAttrib3Op, ModAttrib4Op, ModAttrib5Op und ModAttrib6Op)
(das ist aber auch schon bei den PB-112-daten so gewesen!)
??? dunno ???
---------------------------------------
Desweiteren bin ich auf der Suche nach Enum's...
ich habe vor, möglichst alle vom Skript darstellen zu lassen...
bzw. zumindest in die "g3_enum.txt" einzutragen...

wer noch welche findet, die nicht in der g3_enum.txt stehen, bitte hier mit Quelle(Datei/Klasse) nennen.

gruß lichtwicht

-------------------------------------------------------------
Beitrag vom 1.6. 3:56
wieder einmal neue version(0.46):
+ Interpretation vieler "neuer" Enums
+ make me "faster"
+ *.xcmsh (GENOMFLE) (+ *.xlmsh?)

zu "make me "faster"":
die vielen neuen Enums verlangsamen den Skriptstart nun merklich!
Es ist allerdings nicht immer nötig sich alle Enums anzeigen zu lassen...z.B. wenn man eine eigene Datei verändert und nur sehen will ob die Struktur(Offsets, Sizes usw.) stimmt...
Am Anfang des Skriptes wird die Konstante "showAllEnums" definiert. Setzt den Wert auf Null und nur eine kleine Anzahl EnumKonstanten wird definiert/verarbeitet.

zu "*.xcmsh (GENOMFLE)"
nachdem ich einen kurzen Blick auf splEEnfiRe's Analyse des Mesh-Formats (http://forum.worldofplayers.de/forum/showthread.php?p=9539274) geworfen habe, stach mich der Hafer und ich habe die Info's ins Skript verwurstelt...
Aber es ist wie bei der "NavigationMap.xnav"... nur eine Ansammlung von Zahlen ... was die wirklich bedeuten gilt es noch herauszufinden...
kann NUR das Archiv-Format(GENOMFLE) !
ich habe es auf eine ganze Reihe Dateien losgelassen...wahrscheinlich gibt's noch "neue" "Identifier of Matrix-Block !"...und der "Extrablock"...naja...

gruß lichtwicht

splEEnfiRe
01.06.2009, 11:29
Wiedermal Top Arbeit und sehr schnell umgesetzt§wink.

Um die Bedeutung der ganzen Zahlen herauszubekommen, müsste man das Objekt in der Welt finden. Desweiteren hatte Shak es doch mal geschafft eine Rüstung mit Hilfe eines Programms zu isolieren und sich diese in der Polygonansicht anzeigen zu lassen. Das wäre mit Sicherheit eine große Hilfe, leider finde ich den Thread dazu nicht mehr:(.

WernerTWC
01.06.2009, 18:10
hatte Shak es doch mal geschafft eine Rüstung mit Hilfe eines Programms zu isolieren und sich diese in der Polygonansicht anzeigen zu lassen. Das wäre mit Sicherheit eine große Hilfe, leider finde ich den Thread dazu nicht mehr:(.

Das Programm war der "3D Ripper DX":
http://www.deep-shadows.com/hax/3DRipperDX.htm

DWI
02.06.2009, 00:20
Ich habe ein Problem mit der "G3_World_Lowpoly_01_Levelmesh_01_Spat.node"

Das Script gibt mir nen Error aus.

Hat jemand ne Ahnung, wie ich das zum Laufen bekomme?

splEEnfiRe
02.06.2009, 10:41
Ein mögliches Problem könnte sein, dass der Header dieser Datei 2 Class-Entrys besitzt.

Shak-otay
02.06.2009, 14:52
Ich habe ein Problem mit der "G3_World_Lowpoly_01_Levelmesh_01_Spat.node"

Das Script gibt mir nen Error aus.

Hat jemand ne Ahnung, wie ich das zum Laufen bekomme?
Seltsame Frage.:rolleyes:
Wer ausser dem Autor (in diesem Fall lichtwicht) sollte denn bei G3 noch durch Analyseprogramme durchblicken?:dnuhr:

Wenn Dir eine Spat-"light"-Analyse reicht (s. log-Ausschnitt),


(eCVisualMeshStatic_PS 1. of 2)
45: G3_Object_Varant_Gargoyle_01_LOWPOLY.xcmsh 0 000892C
2CE14E3B6642C34D8984D7923FF278EE
-127120.750000 2431.974609 -169672.000000 68.434731°

8bc7 class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
46: G3_Object_Varant_Gargoyle_01_LOWPOLY.xcmsh 0 0008C38
D7A9F871FD44444E8B9A078221C1C2BA
-135052.812500 1642.211548 -175761.125000 94.538033°

8ed3 class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
47: G3_Object_Varant_Gargoyle_01_LOWPOLY.xcmsh 0 0008F44
4A02EF902A7F214A8E6334632A665EB6
-106667.695313 1276.330200 -161972.296875 -163.905807°

91df class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
48: G3_Objects_Varant_Stone_Big_01_LOWPOLY.xcmsh 0 0009250
FF6A555EAC7B2343998F4EDAC41E88FB
-71255.789063 286.025024 -124682.734375 -93.119217°

94eb class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
49: G3_Objects_Varant_Stone_Big_02_LOWPOLY.xcmsh 0 000955C
A00FEB5F9C512449982E731755993B92
-72093.820313 425.193481 -125045.265625 -56.840015°

97f7 class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
50: G3_Objects_Varant_Stone_Big_03_LOWPOLY.xcmsh 0 0009868
B9E31A5AEA6B11458D66DB1AB9A21915
-71424.906250 449.370239 -125379.953125 -73.251152°

9b03 class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
51: G3_Objects_Varant_Stone_Big_02_LOWPOLY.xcmsh 0 0009B74
4EAF769AB142454C9D774A0331D3F015
-57664.390625 980.448792 -125305.820313 -86.735558°

9e0f class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
52: G3_Objects_Varant_Stone_Big_03_LOWPOLY.xcmsh 0 0009E80
17074EF7DAEF6D448B31907C99616FBD
-57436.910156 887.651611 -124274.875000 -46.773178°

a11b class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
53: G3_Varant_City_Tent_Ork_01_LOWPOLY.xcmsh 0 000A18C
E01E0228D372DF4BB2F8B5EEB2E0BBAF
-95456.859375 854.103638 -181054.656250 134.619690°

a427 class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
54: G3_Varant_City_Tent_Ork_02_LOWPOLY.xcmsh 0 000A498
BB3BF2A747DC4D4FA9E602CFFF1585AB
-94471.929688 854.102661 -178796.140625 17.163322°

a733 class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
55: G3_Varant_City_Tent_03_LOWPOLY.xcmsh 0 000A7A4
E4030C9AB72528468C025C77ECFE3B30
-96854.593750 882.453979 -179996.031250 -173.241150°

aa3f class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
56: G3_Varant_City_Tent_02_LOWPOLY.xcmsh 0 000AAB0
2F95AD2312BB564FAD4EBB658AB61964
-94162.234375 856.886841 -179884.406250 -110.606239°

ad4b class 2; SubClassCnt=0
PropNamesCnt= 16

(eCVisualMeshStatic_PS 1. of 2)
57: G3_Object_Varant_Skeleton_01_LOWPOLY.xcmsh 0 000ADBC
3A4FFBDBCF717E4794C2E92A828B39A5
-140337.109375 2735.627441 -174353.140625 -21.195313°
kann ich Dir die mal schicken.

Für eine bildliche Darstellung s. Anhang.
.

splEEnfiRe
02.06.2009, 15:56
Danke für die Hilfe Shak, hat sich mittlerweile geklärt.

Man musste nur die 2 Class-Entries des Headers der Datei entfernen. Danach kann das Script die Datei ohne Probleme auflösen.§wink

Shak-otay
02.06.2009, 19:32
Da hast Du mal wieder recht.§wink

Die Namen der Entities werden aber nicht angezeigt!?
(Zumindest bei script version 0.45-7.)

DWI
02.06.2009, 19:39
Ist doch nicht selten, dass die unbenannt sind.

Erleichtert zwar nicht unbedingt das Arbeiten, aber es ist immerhin bearbeitbar.

Gruß

Shak-otay
02.06.2009, 20:01
Ok, ich gebe mich geschlagen.;)

(Wage nur zu bezweifeln, dass man bei über 8000 Entities da was Sinnvolles mit machen kann, wenn man nicht weiss, um welche es sich denn handelt.)

DWI
02.06.2009, 20:06
Doch, man kann mittels xcmsh herausfinden um was es sich handelt. :)

Und das wurde auch schon gefunden und isoliert.
Leider im Moment noch etwas fehlerhaft.

Shak-otay
02.06.2009, 20:25
Gut. Dann hast Du entweder sehr viel Zeit oder weisst tatsächlich mehr als ich.:)

Wenn man zum Beispiel "Blockhut" sucht, was etwa 38 mal enthalten ist, ist (nach meiner Zählung) die erste Nr. 182 und die letzte Nr. 3258.

Wüsste nicht, wie einem da "xcmsh" helfen sollte, das herauszufinden. Das findet sich nämlich 8664 mal in der Datei.

(Jetzt ist aber Schluss mit Spam.:D)
Nimm Dir bitte mal ein Beispiel an spleen. Dann könnten auch wir beide so kommunizieren, dass es auch MIR Erkenntnisse bringt.

Ist jetzt nicht bös' gemeint, DWI. Du verstehtst, was ich sagen will?

Gruß,
shak

splEEnfiRe
02.06.2009, 21:28
Wüsste nicht, wie einem da "xcmsh" helfen sollte, das herauszufinden. Das findet sich nämlich 8664 mal in der Datei.


Natürlich muss man vor die Dateiendung auch den Rest noch hinzuziehen, sonst ist tatsächlich sinnlos. Aber mit .xcmsh meinte DWI XX_XXXXXXXXXXX_XXXXXXXXXXX.xcmsh.

Die einzige Möglichkeit für die Suche ist folgende:

Sich mit dem TinyHexer-Script 100 Entities anzeigen lassen und das ganze als .txt speichern. danach das Textfile nach XX_XXXXXXXXXXX_XXXXXXXXXXX.xcmsh" durchsuchen. Hat man ncihts gefunden gehts weiter, bis man es findet. Anhand der Offsets kann man dann feststellen, welche Entity es sein muss.

So, jetzt aber genug OT

Shak-otay
02.06.2009, 23:43
Natürlich muss man vor die Dateiendung auch den Rest noch hinzuziehen, sonst ist tatsächlich sinnlos. Aber mit .xcmsh meinte DWI [...]
Alles klar; er hat mich inzwischen auch per PN informiert.


Die einzige Möglichkeit für die Suche ist folgende:

Na ja, wenn Du mal hier (http://forum.worldofplayers.de/forum/showthread.php?p=9555720&#post9555720) reinguckst, siehst Du, dass meine light-Analyse die Entity-Namen enthält. (Das komplette log-File ist 2 MB groß und enthält alle Entitynamen.)

Aber wenn Ihr es lieber umständlich machen wollt- auch gut.:D

War ja nur ein Angebot...

The-DeathKnight
03.06.2009, 09:25
Ich wär an dem Log interessiert falls das Angebot allgemein gelten sollte ;) Jedes mal von Hand suchen könnte sich bei etwas häufigeren Entities doch als recht umständlich herausstellen

MfG TheDK

splEEnfiRe
03.06.2009, 10:05
Na ja, wenn Du mal hier (http://forum.worldofplayers.de/forum/showthread.php?p=9555720&#post9555720) reinguckst, siehst Du, dass meine light-Analyse die Entity-Namen enthält. (Das komplette log-File ist 2 MB groß und enthält alle Entitynamen.)

Aber wenn Ihr es lieber umständlich machen wollt- auch gut.:D

War ja nur ein Angebot...


Ok, Punkt für dich. Gestern ist uns auf die schnelle keine bessere Suchmethode eingefallen. Aber wenn du das File mit einem Programm grob auflöst mit Dateinamen, ist das natürlich effektiver;).

Gruß

splEEnfiRe

lichtwicht
04.06.2009, 01:49
Beitrag vom 3.6. 18:07

Ich habe ein Problem mit der "G3_World_Lowpoly_01_Levelmesh_01_Spat.node"

Das Script gibt mir nen Error aus.

Hat jemand ne Ahnung, wie ich das zum Laufen bekomme?

Ein mögliches Problem könnte sein, dass der Header dieser Datei 2 Class-Entrys besitzt.
Ächtz, daß die Root-Entity auch Klassen haben könnte, damit hatte ich tatsächlich nicht gerechnet...
-> wird bearbeitet...

"Edit"
so, bei "G3_World_Lowpoly_01_Levelmesh_01_Spat.node" funktioniert es jetzt (Klassen für die Root-Entity)
(btw. die Entities sind "einfach" nicht benannt (eigentlich eher standard bei nodes))
ich habe die kleine Abfrage auch bei lrentdats eingefügt...kennt jemand eine? und kann es mal ausprobieren ob es da jetzt auch funktioniert?

und dann habe ich die "G3_World_Lowpoly_01_Levelmesh_01.lrentdat" geöffnet (ich Idiot!)
und siehe da! eine "Sub-Klasse"..."Anzeige" eingebaut... (Sub-Klasse der Sub-Klasse der Sub-Klasse usw...arghh!) (immerhin eine mögliche Zuweisung von *.spt zu *.dds ???)
(nachdem jetzt alle StringTableEntries abgefrühstückt sind(bis 7A), ist mir spontan die Lust ausgegangen...das weitere "Dekodieren" wäre wohl sowieso nur wieder eine Ansammlung von Zahlen(???)...)
wer mehr weiß...immer her damit;) (ich verspreche, daß ich die Info's schamlos ausnutze und im Skript "verwurstle";-)

diese "Anzeige-Funktion" ist in der allgemeinen Lesefunktion für Klassen...nicht unmöglich(wenn auch unwahrscheinlich), daß es jetzt Probleme mit Klassen mit "End Class Entry (Version) ????" 0x0200 gibt...?
Wenn jemand also zufällig über eine andere Datei mit "End Class Entry (Version) ????" 0x0200 findet, bitte mir die Datei nennen (und ob es Probleme gab)! Danke!

dementsprechend angehängt: eine beta für 0.47

gruß lichtwicht

Ringo81
28.08.2009, 00:23
Habe die letzte Version der g3_tple_description_***lw heruntergeladen und die mps Datei in den, in der readme, angegebenen Pfad kopiert.
Als ich dann im Tiny Hexer über tools->execute script versuchte die Datei zu öffnen passiert gar nichts.
Zuvor habe ich im Tiny Hexer die Datei "_Weapons_1H_Story_It_1H_ElBastardo_01" geöffnet.

Ich habe den Tiny Hexer 1.0.1.18

Werde wahrscheinlich eine neuere Version benötigen oder?

edit: Jupp, mit dem 1.8.1.6 klappts. Hat sich somit erledigt.

MfG
Ringo81

lichtwicht
22.03.2010, 19:29
*Staub wegkratz*

bin ~zufällig~ über |Lorn|'s Beitrag (http://forum.worldofplayers.de/forum/showthread.php?p=12248636&#post12248636) gestolpert...
und tatsächlich! gespeichert wird das zwar als String, in der Rückumwandlung allerdings hatte ich(Copy&Paste von Urban...) das in ein "Word"(2 Bytes) gepackt....jetzt "Longword"(4 Bytes...das sollte hoffentlich reichen:D)
(dies war auch in der Zuordnung der Entities zueinander so(vorm DEADBEEF))
daß bei der Zuordnung die "Farbe gewechselt" wird, liegt an der Verwendung eines " ' "(Theos' irgendwas)...das ist mir jetzt zu kompliziert, das auszumerzen und meiner Meinung nach nicht kritisch...

ich muß gestehen, daß ich seit Oktober(2009) nichts mehr daran gemacht habe...und damals fummelte ich mit der Rotationsmatrix rum...(irgendwie "kompatibel" mit meinem "Rechner" kriegen...)
ich hab' kurz drübergesehen, und außer, daß ich für die Rotationsmatrix einen anderen Datentyp verwende habe ich wohl nix gemacht...

troztdem bitte Nachricht, falls was mit der Rotationsmatrix jetzt anders wäre, danke!

gruß lichtwicht

EDIT: "neue" ver mit SubKlasse und "NachKlassenRaffel" für Camera_PC_Camera.tple(GD)
€2: noch 'ne Kleinigkeit geändert...

splEEnfiRe
22.03.2010, 20:52
Generelle Frage, wieviel Code umfasst das Script mittlerweile?

splEEnfiRe
23.03.2010, 18:35
(deswegen "kümmere" ich mich auch "ab und an" darum...diesen "Müll" kann man sonst keinem zumuten(mAn)...nicht, daß ich nicht unglücklich wäre würde jemand anders sich dieser "Aufgabe" annehmen:D)

Ich kenne die scriptsprache nicht, aber vlt. les ich mich mal etwas ein.



btw. wolltest du nicht mal deine gesammelten Erkenntnisse in Schriftform bringen? *völlig unverschämt unter Druck setz*


Ist nicht vergessen, keine Sorge, aber im Moment muss erstmal das CSP durchgeboxt werden.§wink

lichtwicht
23.03.2010, 22:46
Beitrag vom 23.3.10 2:19

Generelle Frage, wieviel Code umfasst das Script mittlerweile?
(390kB 10195 Zeilen ???)
hmmm, komische Frage... .mps = source ... (="Basic")
aber massig! copy&paste....(was zu viel "Müll" geführt hat...)
und programmiertechnisch wohl das schlechteste was ich jemals "abgeliefert" habe...

(deswegen "kümmere" ich mich auch "ab und an" darum...diesen "Müll" kann man sonst keinem zumuten(mAn)...nicht, daß ich nicht unglücklich wäre würde jemand anders sich dieser "Aufgabe" annehmen:D)
btw. wolltest du nicht mal deine gesammelten Erkenntnisse in Schriftform bringen? *völlig unverschämt unter Druck setz*
(ich für meinen Teil kann mir immer noch keinen Rechner leisten, der G3 spielen könnte:(:(!!! wird aber irgendwann passieren und dann mach ich ENDLICH meine ZNI-Mod fertig...das brennt mir ECHT auf der Seele...)

grüße an die DURCHHALTER des G3-Modding!!! lichtwicht, bei Fragen/Anregungen/Wünschen zum Skript mir im Zweifelsfall eine PN schreiben...mehr, als daß ich die PN ignoriere kann nicht passieren:D


Beitrag vom 23.3.10 23:46

Ich kenne die scriptsprache nicht, aber vlt. les ich mich mal etwas ein.
"Sprache"=Basic...
Aber mach DU ruhig mit dem CSP weiter! (es sei denn, du willst auf die Schnelle selbst was ("per Copy&Paste") einfügen/auflösen...)
(mehr als anbieten mir "in dringenden Fällen" 'ne PN zu schreiben kann ich leider auch nicht...)

Ist nicht vergessen, keine Sorge, aber im Moment muss erstmal das CSP durchgeboxt werden.§wink
(das würd' mich persönlich schon eher interessieren...aber mach dir kein Stress deswegen!..)
mfg lw

splEEnfiRe
23.03.2010, 23:36
"Sprache"=Basic...
Aber mach DU ruhig mit dem CSP weiter! (es sei denn, du willst auf die Schnelle selbst was ("per Copy&Paste") einfügen/auflösen...)
(mehr als anbieten mir "in dringenden Fällen" 'ne PN zu schreiben kann ich leider auch nicht...)

Danke, ich melde mich, wenns dringend ist.



(das würd' mich persönlich schon eher interessieren...aber mach dir kein Stress deswegen!..)
mfg lw

Ist ja, wie du selber erahnen kannst, nicht gerade wenig, was es zu erzählen/erklären gäbe;).

lichtwicht
14.04.2010, 20:52
tja die esme(post#64) (http://forum.worldofplayers.de/forum/showthread.php?t=799168) hat mich dann doch veranlasst das nicht-Archiv-Format mal anzugehen...

war weniger Arbeit als gedacht...(ich hatte GottseiDank früher schon angefangen zu "abstahieren" (Read_STE))
ich bin noch nicht einmal auf die "ClassVersion"(hier 0100(BE: 0001) anstatt Standard 5300) eingegenagen... 3500(afair) hat es hierfür getan (<5300 !)

also anbei "Unterstützung" für *.xcmsh (non-Archive-Format)
(fragt mich spontan nicht wie/wer/was oder warum... *.xlmsh ist in der selben Routine...das habe ich mal so dringelassen...)
Kriteria: Erweiterung : .xcmsh (bzw. .xlmsh) und
0x00000000 0x0100 0x0101 0x0001 010001010001 (Sub-)Class Identifier(mit ein paar weiteren Stunden extra könnte vielleicht auch eine Leseroutine für Templates rauskommen...wer Interesse hat, sagt mir ein paar Interessante...wenn's geht PB1.12 ABER inkl. Angabe des Namens und Pfades innerhalb der ".pak")

betreffs Meshes(*.xcmsh !)...(also prinzipiell denke ich ja, daß Shak da schon DEUTLICH weiter ist!)
aber nach der Klasse die "Folge":
? 0 ?
? 1 ?
? 5 ?
also zumindest ? 1 ? und ? 5 ? würde ich als Zähler interpretieren (wollen)...
Edit: ? 1 ? dürfte Anzahl der Materials sein...(26x .xmat in der GoldenHind)
mit ein paar "Aussagekräftigen" Beispielen(möglichst klein, aber mit mehreren "Materials", und am Besten "non-Archive") wäre zumindest theoretisch möglich eine Zuordnung STE(Material-String/File) zu bCBox durch das Skript auslesen zu lassen...

(@Shak: nicht, daß ich es wirklich wissen will...ich raff's ja eh' nicht...)

gruß lichtwicht