Brush- und TexturEigenschaften auslesen

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Shodan

Betreff: Brush- und TexturEigenschaften auslesen

BeitragSo, Okt 21, 2007 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Die folgenden Funktionen hab ich aus jfk´s Brush-Hacking Test abgeleitet.
Damit lassen sich alle Brush und Textur-Eigenschaften auslesen.
Gut für geladene Objekte.

Bitte mal testen, obs bei euch auch so gut funktioniert.

Das muss in die kernel32.decls im userlibs-Verzeichnis
Code: [AUSKLAPPEN]

.lib "kernel32.dll"

RtlMoveMemory1%(Destination*,Source,Length) : "RtlMoveMemory"

Nicht wundern, diese Funktion werden viele von euch bereits in einer kernel32.decls stehen haben. Es gibt hier aber ne kleine Änderung innerhalb der Klammer, weswegen es mit der ursprünglichen Variante nicht funzt.

Testprogramm:
Code: [AUSKLAPPEN]

Include"Read_Brush_Texture_Stats.bb"
Graphics3D 800,600,0,2

cam=createcamera()
PositionEntity cam,0,0,-1.5
l=createlight() : TurnEntity l,0,90,0
CameraRange cam,.1,1000

c2=loadmesh("Euer Mesh",0)

cs=countsurfaces(c2)
For a=1 To cs
 surf=getsurface(c2,a)
 DebugLog CountTriangles(surf)
 br=getsurfacebrush(surf)
 DebugLog "Surface "+str$(a)
 DebugLog getbrushred(br)
 DebugLog getbrushgreen(br)
 DebugLog getbrushblue(br)
 
 DebugLog getbrushalpha#(br)
 DebugLog getbrushshininess#(br)
 DebugLog getbrushblend(br)
 DebugLog getbrushfx(br)
 For b=0 To 7
  tex=getbrushtexture(br,b)
  t$=TextureName$(tex)
 
  If T$<>""
   DebugLog "Brush-Textur Layer "+b
   DebugLog t$
   DebugLog gettextureflags(tex)
   DebugLog gettextureblend(tex)
   DebugLog gettextureposx#(tex)
   DebugLog gettextureposy#(tex)
   DebugLog gettexturescalex#(tex)
   DebugLog gettexturescaley#(tex)
   DebugLog gettexturerotation#(tex)
  EndIf
 next

Next

FitMesh c2,-.5,-.5,-.5,1,1,1,1

While KeyHit(1)=0

 TurnEntity c2,0,.5,0
 UpdateWorld()
 RenderWorld()
 Flip
 
Wend


Die Funktionen:
Code: [AUSKLAPPEN]

;Get_Brush_Texture_Stats.bb

global hackbank1,hackbank2
hackbank1=createbank(4)
hackbank2=createbank(4)


Function GetBrushAlpha#(brush)
 Local adr
 RtlMoveMemory1(hackbank1,brush,4)
 adr=PeekInt(hackbank1,0)+32
 RtlMoveMemory1(hackbank2,adr,4)
 return PeekFloat(hackbank2,0)
End Function

Function GetBrushshininess#(brush)
 Local adr
 RtlMoveMemory1(hackbank1,brush,4)
 adr=PeekInt(hackbank1,0)+28
 RtlMoveMemory1(hackbank2,adr,4)
 return PeekFloat(hackbank2,0)
End Function

Function GetBrushRED(brush)
 local adr
 RtlMoveMemory1(hackbank1,brush,4)
 adr=PeekInt(hackbank1,0)+16
 RtlMoveMemory1(hackbank2,adr,4)
 Return PeekFloat(hackbank2,0)*255
End Function

Function GetBrushGREEN(brush)
 local adr
 RtlMoveMemory1(hackbank1,brush,4)
 adr=PeekInt(hackbank1,0)+20
 RtlMoveMemory1(hackbank2,adr,4)
 Return PeekFloat(hackbank2,0)*255
End Function

Function GetBrushBLUE(brush)
 local adr
 RtlMoveMemory1(hackbank1,brush,4)
 adr=PeekInt(hackbank1,0)+24
 RtlMoveMemory1(hackbank2,adr,4)
 Return PeekFloat(hackbank2,0)*255
End Function

Function GetBrushBLEND(brush)
 local adr
 RtlMoveMemory1(hackbank1,brush,4)
 adr=PeekInt(hackbank1,0)+4
 RtlMoveMemory1(hackbank2,adr,4)
 Return Peekint(hackbank2,0)
End Function

Function GetBrushFX(brush)
 local adr
 RtlMoveMemory1(hackbank1,brush,4)
 adr=PeekInt(hackbank1,0)+40
 RtlMoveMemory1(hackbank2,adr,4)
 Return Peekint(hackbank2,0)
End Function

Function GetTextureBlend(tex)
 local adr
 RtlMoveMemory1(hackbank1,tex,4)
 adr=PeekInt(hackbank1,0)+24
 RtlMoveMemory1(hackbank2,adr,4)
 Return Peekint(hackbank2,0)
End Function

Function GetTextureScaleX#(tex)
 local adr
 RtlMoveMemory1(hackbank1,tex,4)
 adr=PeekInt(hackbank1,0)+36
 RtlMoveMemory1(hackbank2,adr,4)
 Return (1.0/Peekfloat(hackbank2,0))
End Function

Function GetTextureScaleY#(tex)
 local adr
 RtlMoveMemory1(hackbank1,tex,4)
 adr=PeekInt(hackbank1,0)+40
 RtlMoveMemory1(hackbank2,adr,4)
 Return (1.0/Peekfloat(hackbank2,0))
End Function

Function GetTexturePosX#(tex)
 local adr
 RtlMoveMemory1(hackbank1,tex,4)
 adr=PeekInt(hackbank1,0)+44
 RtlMoveMemory1(hackbank2,adr,4)
 Return ((-1.0)*Peekfloat(hackbank2,0))
End Function

Function GetTexturePosY#(tex)
 local adr
 RtlMoveMemory1(hackbank1,tex,4)
 adr=PeekInt(hackbank1,0)+48
 RtlMoveMemory1(hackbank2,adr,4)
 Return ((-1.0)*Peekfloat(hackbank2,0))
End Function

Function GetTextureFlags(tex)
 local adr
 RtlMoveMemory1(hackbank1,tex,4)
 adr=PeekInt(hackbank1,0)+140
 RtlMoveMemory1(hackbank2,adr,4)
 Return Peekint(hackbank2,0)
End Function

Function GetTextureRotation(tex)
 local adr
 RtlMoveMemory1(hackbank1,tex,4)
 adr=PeekInt(hackbank1,0)+52
 RtlMoveMemory1(hackbank2,adr,4)
 Return (360/(pi*2))*(Peekfloat(hackbank2,0))*(-1.0)
End Function


mfg Shodan
www.selfmadegames.de
  • Zuletzt bearbeitet von Shodan am Mi, Okt 24, 2007 18:55, insgesamt einmal bearbeitet

hamZta

Administrator

BeitragMo, Okt 22, 2007 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~

Landete wohl im falschen Forum.

hamZta
Blog.

Shodan

BeitragMi, Okt 24, 2007 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoppla.
War es nicht im Codearchiv?

Hast du es wenigstens mal getestet hamZta? Würd gern wissen, obs irgendwo nicht geht.
Bei der Gelegenheit noch ein Nachtrag. Die Funktion für Textureflags funzt nicht 100%.
Die Flags werden scheinbar an unterschiedlichen Stellen gespeichert.
Bei Createtexture() bei Offset 140
Bei Loadtexture() bei Offset 228
Und wenn die Texture im Zuge von Loadmesh geladen wird, stehen die Flags scheinbar bei Offset 196, was allerdings auch nicht immer stimmt.
Habs bisher noch nicht herausfinden können, wie das zusammenhängt.
Während es bei Createtexture() und Loadtexture() immer funzt, scheint es sich bei Loadmesh() nach mehr als 2 geladenen Texturen zu ändern. Und nach mehr als einem geladenen Mesh gehts gleich garnicht mehr richtig.
Sehr mysteriös! Rolling Eyes

Und die Funktion GetTextureScaleY#() hatte ich vergessen. Ist jetzt mit drin. ( siehe oben )

cu Shodan
www.selfmadegames.de
 

lettorTrepuS

BeitragMi, Okt 24, 2007 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Shodan

BeitragFr, Okt 26, 2007 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Gag ist, dass ich die anderen Werte sehr schnell ausfindig gemacht hatte. Sogar den für BrushFX, obwohl der artverwandt mit Textureflags ist.
Nach umfangreicher Suche und Tests auf verschiedenen Rechnern ( naja ok es warn nur 2 Wink ) konnte ich sicher feststellen, dass bei Offset 32 per 1 od. 0 festgelegt wird, ob Flag 2 (Alpha) aktiv ist. Wird z.B. gelöscht, wenn Flag 4 (maskiert) gesetzt wird. Alle anderen Flags warn bisher nicht auffindbar.
Ich vermute, dass das mit einem event. vorhanden Bug in GetBrushTexture() zusammenhängt. Man erhält nämlich ein ungültiges Texturehandle anstelle von 0, wenn man einen leeren Texturlayer abfragt.

Bei Entitys konnte ich garnix herausfinden. Man muss GetEntityBrush() anwenden, und den Brush auslesen.
www.selfmadegames.de

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group