Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
29.04.2011, 01:32
Flex-Maker



Hallo liebe Freunde,

wollte ich gegen altes Program bsp2map kämpfen, weil die Mitspieler unter Mac OS X oder Linux mit Half-Life und Goldsource ( z.B. Quake Enigne usw. )
bsp2map ist Windows Programm. Darum hat es Problem für Mac OS X und Linux?

Da habe ich eigener Dekompiler gebastelt.

Ein Bild zeigt für meine Idee.

Dort gibt es Möglichkeit mit der genialen Laufzeit Wie Adobe Air Runtime :)

Ich benutze Adobe Flash Builder 4 und Adobe Air 2.6.

PS: Für Half-Life 2 und Sourcemods Maps decompilieren: Vmex arbeitet prima unter Linux und Mac OS X = Kein Problem! Weil vmex eine "Java Applikation" ist. Linux und Mac OS X muss Java Laufzeit ibenötigen :)

Danke.. Wenn ihr mir bisschen helfen könnt. Ich habe Actionscript 3 selbst programmiert. Ich probiere mal aus, wenn AS3 mit Adobe AIr 2.6 über dekompilierte Map schreiben und erstellen kann.

Ich habe oft viele Probleme mit bsp2map von c++ oder C# gelesen.

Frage: Warum zeigt die dekompilierte Version nicht mehr Spezialtexture z.B. Clip, Hint, Skip, Origin usw... an dekompilierten Bushen?

Vergleichende Funktion!
WinBspc = zereissende Dekompilierung, gelöschte Spezialtexture-Bush
bsp2map = gelöschte Spezialtexture-Bush, fehlende Löcher..
BspTwoMap = komplette echte Map.

Ich hoffe, dass ihr AS3 Programmierung kennt, dann können wir bisschen zusammen umtauschen und programmieren.. :)

Gruss Flex-Maker

--

zum Seitenanfang zum Seitenende Profil || Suche
001
29.04.2011, 02:10
manionsen



Zitat:
Flex-Maker postete
Frage: Warum zeigt die dekompilierte Version nicht mehr Spezialtexture z.B. Clip, Hint, Skip, Origin usw... an dekompilierten Bushen?
Das liegt daran, dass die Brushes in der Bsp nicht mehr existieren.
Die Brushes mit der Clip-Textur werden z.B. in der Bsp zur Clipping-hull hinzugefügt.
Es ist also kein Brush mehr, sondern einfach nur nicht mehr begehbar. Würdest du einen Clip-Brush rekonstruieren wollen, wäre deine gesamte dekompilierte map voll mit Clip-Brushes, die so nicht erstellt wurden.

Bei Hint verhält es sich ähnlich, nur dass es dort die vis-leaves sind, an denen Hint-Brushes erstellt werden würden.

Insgesamt wäre es im Verhältnis zum Ergebnis vermutlich viel zu umständlich, zu versuchen Brushes mit diesen Spezialtexturen in einer dekompilierten Map wiederherzustellen. Man müsste sehr viele unnötige Brushes per Hand löschen, da die dekompilierte Karte sehr unübersichtlich wäre und einfach zu viele Brushes mit diesen Texturen enthalten würde.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
29.04.2011, 02:28
Flex-Maker



Hallo,
@manionsen, hast du recht, da finde ich komisch, dass Karte von Half-Life 2 zum Beispiel mit vmex dekompiliert dann zeigt die dekompilierte Karte alles mit Spezialtexture z.B. Clip, Hint Skip..

Danke für ihrer Meinung über Clip, NULL Texturen.

Was ist Unterschied zwischen NULL und CLIP? Wenn die Karte schon weg dekompiliert wurde, dann wird die Karte fehlerhaft und problematisch erhalten?

Und manche Bushes haben "Invaild Vertex Structure" bekommen, wenn die Karte dekompiliert ...

Danke versuche ich scharfe Dekompilierung mit BspTwoMap :) um die Variables und Funktionen zu stabileren.

Mfg Flex-Maker

--


Dieser Beitrag wurde am 29.04.2011 um 02:30 von Flex-Maker bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
29.04.2011, 02:52
manionsen



Die Bsp dateien von Half-Life 2 sind anders aufgebaut und enthalten mehr Informationen als die von Half-Life 1.

Der Unterschied zwischen NULL und CLIP: Half-Life hat 4 Hüllen. 1 Sichtbare Hülle und 3 Kollisionshüllen.
Brushes mit NULL sind in allen Kollisionshüllen vorhanden, so dass auch z.B. Granaten davon abprallen.
Brushes mit CLIP sind nur in der Kollissionshülle vorhanden, die dafür verantwortlich ist, dass der Spieler geblockt wird. Z.B. Granaten fliegen durch CLIP-Brushes hindurch.

Die BSP-Datei enhält ja nur noch die sichbaren Faces und nicht die Brushes. Der Decompiler muss ja nun Brushes aus den Faces erstellen, jedoch sind Faces nur 2-Dimensional (frontal betrachtet immer ungekrümmt) und Brushes 3-Dimensional. Dieses Umwandeln funktioniert nur nicht immer ganz so gut, so dass invalide Brushes entstehen.

Bei NULL-Brushes, die die Map gegen das VOID abschirmen, kommt es also dazu, dass die map nach dem decompilieren an dieser Stelle ein Leak hat, da der Decompiler hier kein face findet, sondern lediglich ein eine Blockierung in den 3 Kollissionshüllen.

--

zum Seitenanfang zum Seitenende Profil || Suche
004
29.04.2011, 19:25
Flex-Maker



Hallo, @manionsen
schon gut, das ist schwierig... Ich versuche mal... Danke für Info! Ich muss die Glühbirne anschalten lassen = leuchtende Idee, dann kann man sicher zu coden...

Danke :)

--

zum Seitenanfang zum Seitenende Profil || Suche
005
30.04.2011, 18:16
Flex-Maker



Hallo liebe Freunde,

PS: Sorry für Doppelpost!

Ich wollte was noch zeigen, wenn ich eigene Libraries wie HL-Lib oder VTF-Lib "komplett coden" musste. Ich weiß, dass es irgendwelche Funtionen oder Variablen für bsptwomap fehlt. Ich muss Ersatz für bsptwomap mit *.swc basteln.

Deshalb möchte ich euch zeigen, was habe ich mit Flash Builder 4 mit AS3 selbst programmiert:

Ich habe noch eigene Unterstützung mit den unbekannten Dateiformaten wie Beispiel tga, spr, wad und gcf und viele Dateiendungen für Actionscript mitgebracht z.B. Encoder, zip-ähnliche Libraries fzip ( Flash As3 Zip )

Ich hoffe, dass ihr mir wissen sollt, wenn ihr möchtet :)

Danke! Gruss Flex-Maker

--


Dieser Beitrag wurde am 30.04.2011 um 18:18 von Flex-Maker bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
09.11.2011, 15:14
Flex-Maker



Bin wieder da, habe ich riesige Problem mit AS3 wegen Array, Booleam und Object..

Actionscript 3:
Code für mapFile.as in /com/valve/utils
Quellcode:/*
    Valve Software
    
    Half-Life 1 - Maps
*/
package com.valve.utils
{
    import flash.filesystem.File;
    
    public class mapFile
    {
        private var mapFileName:String;
        private var wadFile:String;
        private var sprFile:String;
        private var mdlFile:String;
        private var burshnumber:Number;
        private var texture:File = new File;
        private var specialTexture:Array(
            wadFile = File(
                // Secialtextures for default texture with Half-Life
                "BEVEL",
                "HINT",
                "NULL",
                "SKIP",
                "NULL",
                "SKY",
                "CLIP",
                "ORIGIN",
                "AAA_TRIGGER",
                
                // Water Texture like !water
                "!" + texture.name,
                
                // Transparent Texture like Wall or Rock
                "{" + texture.name,
                
                // Animatted Texture like this +0blend, +1blend
                "+" + uint + texture.name,
                
                // Toggled Animation-Texture like Button or Switcher
                "+A" + texture.name,
                
                // Light Texture like ~LIGHT3C5
                "~" + texture.name,
                
                // Same unknown custom Texture like Natural Selection 3.2x
                "" + texture.name
            );
            ...
        );
        ...
    }
}
Die mapFile soll komplette Karte auslesen und auschecken, während findet die bsp2map genauso 1:1. ABer es ist möglich.

Und ich werde nächster Betrag für Encorder mit Map zum Dekompilieren.
:)

--

zum Seitenanfang zum Seitenende Profil || Suche
007
09.11.2011, 15:17
Flex-Maker



Und die Datei mapEncorder.as in /com/valve/utils:
Quellcode:/*
    Valve Software

    Half-Life 1 - Maps
*/
package com.valve.utils
{
    import flash.filesystem.File;
    import flash.filesystem.FileMode;
    import flash.filesystem.FileStream;
    import flash.utils.ByteArray;

    public class mapEncorder
    {
        public function decompileBsp2map(bspSrc:Object, mapFile:File):void
        {
            if( bspSrc == null || mapFile == null ){
                throw new ArgumentError("Half-LIfe Bsp File and Half-Life Map File cannot be null.");
            }
            
            var bspSrcByte:ByteArray;
            var mapFileTarget:File = new File(mapFile.nativePath);
            
            var fileTime:Date;
            
            if(bspSrc is File){
                var bspSrcFile:File = bspSrc as File;
                if(!bspSrcFile.exists || bspSrcFile.isDirectory){
                    throw new ArgumentError("If your bsp File is current version.");
                }
                
                var bspFileStream:FileStream = new FileStream();
                bspFileStream.open(bspSrcFile, FileMode.READ);
                bspSrcByte = new ByteArray();
                bspFileStream.readBytes(bspSrcByte, bspFileStream.bytesAvailable);
                bspFileStream.close();
                
                if (mapFileTarget.isDirectory)
                {
                    mapFileTarget = mapFileTarget.resolvePath(bspSrcFile.name + ".map");
                    fileTime = bspSrcFile.modificationDate;
                }
                else if (bspSrc is ByteArray)
                {
                    bspSrcByte = bspSrc as ByteArray;
                    
                    if (mapFileTarget.isDirectory)
                    {
                        mapFileTarget = mapFileTarget.resolvePath("_decompiled.map");
                    }
                    
                    fileTime = new Date();
                }
                else
                {
                    throw new ArgumentError("Bsp File must be complety.");
                }
                
                ...
                
                var mapFileStream:FileStream = new FileStream();
                mapFileStream.open(mapFileTarget, FileMode.WRITE);
                ...
                mapFileStream.writeBytes(bspSrcByte);
                mapFileStream.close();
            }
        }
    }
}
Das ist eine starke Funktion für Dekompilieren mit bsp und map Dateien :)

Ich hoffe, dass ihr mir bisschen mithelfen könnt. Wenn ich schwer versucht hätte...

Vielen Dank für Hilfe :)

--

zum Seitenanfang zum Seitenende Profil || Suche
008
15.11.2011, 23:42
Flex-Maker



Ich habe noch kleine Verbesserung wegen diesem falschen Array :/ Sorry ich habe Erklärung aus der Webseite von Adobe gelesen. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

Quellcode:/*
    Valve Software
    
    Half-Life 1 - Maps
*/
package com.valve.utils
{
    import flash.filesystem.File;
    
    import mx.rpc.events.AbstractEvent;
    
    public class mapFile
    {
        private var mapFileName:String;
        private var wadFile:String;
        private var sprFile:String;
        private var mdlFile:String;
        private var burshnumber:Number;
        private var texture:File = new File;
        private var specialTexture:Array = new Array(    
            "BEVEL",
            "HINT",
            "NULL",
            "SKIP",
            "NULL",
            "SKY",
            "CLIP",
            "ORIGIN",
            "AAA_TRIGGER",
            "!" + texture.name,
            "{" + texture.name,
            "+" + uint + texture.name,
            "+A" + texture.name,
            "~" + texture.name,
            "" + texture.name
        );
        
        private var x:uint;
        private var y:uint;
        private var z:uint;
        ...
        private var block:Array = new Array(
            x, y, z, ...
        );
        
        private var cycler_name:String;
        private var env_name:String;
        private var func_name:String;
        private var info_name:String;
        ...
        private var path_name:String;
        
        private var entity:Array = new Array(
            cycler_name, env_name, func_name, info_name, ...
        );
        
        public function mapFile():void
        {
            ...
        }
    }
}
Danke ich habe fast geschafft. Ich hoffe, dass Decompiler alles möglich sein kann.

Zitat:
manionsen posteteDer Unterschied zwischen NULL und CLIP: Half-Life hat 4 Hüllen. 1 Sichtbare Hülle und 3 Kollisionshüllen.
Brushes mit NULL sind in allen Kollisionshüllen vorhanden, so dass auch z.B. Granaten davon abprallen.
Brushes mit CLIP sind nur in der Kollissionshülle vorhanden, die dafür verantwortlich ist, dass der Spieler geblockt wird. Z.B. Granaten fliegen durch CLIP-Brushes hindurch.

Die BSP-Datei enhält ja nur noch die sichbaren Faces und nicht die Brushes. Der Decompiler muss ja nun Brushes aus den Faces erstellen, jedoch sind Faces nur 2-Dimensional (frontal betrachtet immer ungekrümmt) und Brushes 3-Dimensional. Dieses Umwandeln funktioniert nur nicht immer ganz so gut, so dass invalide Brushes entstehen.

Bei NULL-Brushes, die die Map gegen das VOID abschirmen, kommt es also dazu, dass die map nach dem decompilieren an dieser Stelle ein Leak hat, da der Decompiler hier kein face findet, sondern lediglich ein eine Blockierung in den 3 Kollissionshüllen.

Ach, das ist nicht wahr. Ich habe Lösung gefunden, dass Clip, Null und andere Spezielle Texturen stammen aus "basic.wad" Deshalb hat dekompilierte Map Fehler, weil Half-Life GCF Packer kein Wad Datei "basic.wad" hat. Also ich habe genaue Lösung gefunden und Dekompilierte Map soll basic.wad neu schreiben, wenn die eigene Spezielle Texturen von der Datei basic.wad stammen.....

--


Dieser Beitrag wurde am 15.11.2011 um 23:48 von Flex-Maker bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
06.01.2012, 00:25
Skolenking



Klingt interessant. Bin gespannt wie es hinterher wird. Wir lernen ja auch grade Java in der Schule aber sowas definitiv noch nicht xD

--

Gruß Skolenking

"Wenn alles was wir tun, was wir sagen und denken vorausbestimmt und vorgegeben ist, hoffe ich, dass der Autor meiner Geschichte viel Fantasie hatte"
as_sk_checkpointcharlie

zum Seitenanfang zum Seitenende Profil || Suche
010
21.01.2012, 10:42
Flex-Maker



Hey @Skolenking,

das ist mit Java nicht zu tun. Sondern das ist Actionscript 3 vom Adobe Flash Builder oder Adobe Flash Pro CS5.5 :)

Ich bin beschäftigt, dass es schwierig zu programmieren ist...

Ich weiss, dass die Struktur Aufbau-Fortschritt genau lesen und genaue Struktur als der neue dekompiilierte Datei erstellt.

Danke voraus...

--

zum Seitenanfang zum Seitenende Profil || Suche