Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 6 von 6
  1. Homepage besuchen Beiträge anzeigen #1 Zitieren
    Ranger Avatar von Vaana
    Registriert seit
    Oct 2016
    Ort
    Czech republic
    Beiträge
    112
     
    Vaana ist offline

    [CC -> PB] Relations of PB's very own Genome Engine to the CodeCult CodeCreatures engine

    Hello,

    I would like to start this thread to bring the rumours to rest and perhaps start a discussion about the history of the Genome Engine and its relation to the CodeCreatures engine by CodeCreatures. Let's start with the basic facts



    A short backstory

    In the late 90s, a small German company called "Codecult Software Research & Development GmbH", was developing its own "CodeCreatures" engine. CodeCreatures was conceived as a "GDS" or a Game Development System, which was meant to be licensed by other game companies for their games.

    Around the same time Piranha Bytes was working on their Gothic RPG game. As you might have known, Piranha Bytes ran out of money around the latter half of 1999 and was acquired by Phenomedia AG.

    With the new cash injection Piranha Bytes received, they decided to expand and make plans for the next game after Gothic. That's why they acquired CodeCult and its CodeCreatures engine with plans to use it for their next game.

    codecult software research & development GmbH aims to offer this technology on specializedlicensing markets as an international provider, and to utilize it within the Creative Products businessunit in the area of offline games (Piranha Bytes Software GmbH) and online games (Better DayCommunications Werbeagentur GmbH)
    Also around this time in 1999/2000, Piranha Bytes was working on Project Zerberus, which, according to all known information, was only a demo made on the CodeCreatures engine.

    After Gothic was released in March 2001 and subsequent patches came out, Piranha Bytes started working on the recently-discussed sci-fi shooter game, which used the CodeCreatures engine. This game was cancelled in October 2001 in favor of Gothic 2.

    In 2002 Phenomedia AG's stock collapsed after it was found out that the company leaders were under investigation for falsifying balance sheets. While Phenomedia AG was going through the insolvency proceedings, Pluto 13 GmbH was formed by members of Piranha Bytes and bought the Piranha Bytes studio and its assets. The same happened for CodeCult, with the creation of H2Labs Creative Research GmbH and the acqusition of CodeCult's property.

    This is where Piranha Bytes and CodeCult separated, with CodeCult slowly fading into obscurity and their engine sadly never being used in any released game (even though it was licensed by several companies).

    Interestingly, sometime after the bankruptcy of Phenomedia AG, many of the programmers, like Oliver Höller, Kurt Pelzer, Philipp Krause or Roman Keskenti who had previously worked on CodeCreatures went on to work at Piranha Bytes on Gothic 3 and it's "Genome" engine, which was said to be created from scratch.



    GE -> Genome?

    In 2016 the user Avallach made post in which it was mentioned that Gothic 1 included and used the GEdialogs.dll library which originated from the CodeCreatures engine. The post also mentions the fact the file has the prefix GE (Gothic?, Genome?) and not CE (CodeCreatures). This might lead you to the conclusion that these are the origins of the Genome Engine. However, it's not as simple.

    In 2002 the Codecult Codecreatures Benchmark was released. As the name suggests, it is based on the CodeCreatures engine (and also includes the GEdialogs.dll library). The most interesting part about it is when you decide to inspect all the .exes and .dll included in the benchmark. Using a tool like strings2, we can view strings and symbolic information which was leftover from the compilation process. Depending on the compiler options, the .exe/.dll can include paths to and file names of the original source code files.

    Using this method, we can easily explain the prefix GE. If you use strings2 on any of the benchmark's .exes or .dlls, eventually you will encounter one of these file paths.

    Code:
    U:\golem\work\source\engine\plugins\plfxgrass\ge_main.cpp
    As you can see, the source code of the engine was stored in a folder called Golem. This leads us to the conclusion that the engine was internally called the "Golem engine" hence the prefix GE and has nothing to do with the name Genome. Case solved?




    A closer look

    If you're as curious as me, you might find yourself performing this kind of autopsy on Gothic 3. When doing so, you will find that the compilation process of Gothic 3 also left behind these file paths.

    Code:
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_States\ZS_Freeze.cpp
    This is where I thought that finding all these paths would help me take a closer look at the technical side of the game. For that purpose I ended up putting together a small tool which roughly filtered out all the paths from the output of the strings2 tool.

    After manually filtering and beautifying the output further, I ended up with this.

    Spoiler:(zum lesen bitte Text markieren)
    C:\Windows\system32\ageia\pcmpLocation.txt
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Cooking\src\ConvexHullBuilder.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Cooking\src\ConvexMeshBuilder.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Cooking\src\InternalTriangleMeshBuilder.c pp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Cooking\src\TriangleMeshBuilder.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\CCDTest.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\ContactBoxMeshICE.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\ContactConvexHeightfield. cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\ContactMeshMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\ContactPlaneMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\ConvexMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\EdgeList.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\HeightField.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\HeightFieldShape.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\IceAdjacencies.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\InternalTriangleMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\Joint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\PenetrationMap.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\Scene.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\Shape.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\SphereShape.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\TriangleMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\cloth\Cloth.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Core\Common\src\cloth\ClothManager.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Opcode\src\IcePrunable.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Opcode\src\OPC_MeshInterface.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Opcode\src\OPC_Model.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\Actor.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpBoxShape.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpConvexMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpCylindricalJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpD6Joint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpDefaultScheduler.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpDistanceJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpFixedJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpHeightField.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpMaterial.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpPhysicsSDK.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpPointInPlaneJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpPointOnLineJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpPrismaticJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpPulleyJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpRevoluteJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpScene.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpSphericalJoint.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpSpringAndDamperEffector.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\NpTriangleMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\cloth\NpCloth.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\cloth\NpClothMesh.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\fluids\NpFluid.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\fluids\NpFluidEmitter.cpp
    C:\dev\Workspace_Release\Piranha Bytes\Gothic III\work\source\NovodexPhysicsAPI\SDKs\Physics\src\npactor.cpp
    C:\dev\sh8\SHW32.pdb
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\Hs32bitAddrMem.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsDME.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsDMEController.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsEMUController.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsExternalMem.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsPCEThreadProgram.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsSyncNet.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsVCUThreadProgram.cpp
    C:\p4\release\PhysX_2.4.1\novodex\HLSoftSim\HsVPUThreadProgram.cpp
    C:\p4\release\PhysX_2.4.1\novodex\PhysX-DDI\HLP\fluid\HOST\hlpPipelineStages.cpp
    C:\p4\release\PhysX_2.4.1\novodex\PhysX-DDI\common\fluid\src\types\BucketArrayHLP.cpp
    C:\p4\release\PhysX_2.4.1\novodex\PhysX-DDI\common\fluid\src\types\CellArrayHLP.cpp
    C:\p4\release\PhysX_2.4.1\novodex\PhysX-DDI\common\fluid\src\types\ParticleArrayFW.cpp
    C:\p4\release\PhysX_2.4.1\novodex\PhysX-DDI\common\fluid\src\types\portableIntVectors.cpp
    C:\p4\release\PhysX_2.4.1\novodex\SDKs\Core\Hardware\src\NfPhysicsSDK.cpp
    C:\p4\release\PhysX_2.4.1\novodex\SDKs\Core\Hardware\src\NfRBFwPipeline.cpp
    C:\p4\release\PhysX_2.4.1\novodex\SDKs\Core\Hardware\src\NfScene.cpp
    C:\p4\release\PhysX_2.4.1\novodex\SDKs\Core\Hardware\src\NfShape.cpp
    C:\p4\release\PhysX_2.4.1\novodex\SDKs\Core\Hardware\src\fluids\NfFluidPPUInterf aceHw.cpp
    C:\p4\release\physx_2.4.1\novodex\hlsoftsim\HsMailbox.h
    C:\p4\release\physx_2.4.1\novodex\sdks\core\hardware\src\NfPPUDataStream.h
    D:\Devel\projects\bink\build\binkw32.pdb
    E:\8397\vc98\self\bin\x86\msvcrt.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\Engine.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\Exporter.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\FileSystem.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\GFC.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\GUI.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\Game.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\Importer.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\SCM.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\Script.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\Scripts\Script_Game.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\SharedBase.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\ge3Prototype1.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\ge3dialogs.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\bin\sapi_lipsync.pdb
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\admin\ge_application.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\animation\propertysets\ge_ps_resource_animatio nactor.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\console\ge_consolecommands.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Admin\ge_windowmanager.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Fonts\ge_fontresource.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_buttonctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_contextmenu.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_dllinfoctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_entityctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_listboxctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_listctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_progressctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_propertyctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_propertysetctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_staticctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_tooltipctrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\gui\Windows\Controls\ge_treectrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\physics\admin\ge_physics_scene.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\rendersystem\stages\PVSPrefetcher\ge_pvsprefet cher3.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\resource\propertysets\collision\ge_ps_resource _collisionmesh.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\resource\propertysets\ge_ps_resource_base.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\resource\propertysets\mesh\ge_ps_resource_ligh tmap.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\resource\propertysets\mesh\ge_ps_resource_mesh complex.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\resource\propertysets\mesh\lightmaps\ge_lightm ap.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\resource\propertysets\speedtree\ge_ps_resource _speedtree.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\resource\speedtree\ge_speedtree_renderbuffer.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\scene\admin\ge_entityadmin.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\scene\context\ge_entity_templatecontext.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\scene\entity\ge_dynamicentity.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\scene\entity\ge_entity.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\components\scene\entity\ge_templateentity.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\io\archivesystem\ge_archivefile.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\io\physical\ge_configfile.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Engine\io\physical\ge_unicodeconfigfile.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Importer\helpers\scenecompiler\ge_sectorcompiler.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Action.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_AniStateAction.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Attack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Cast.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Dialog.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Die.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_DropInventoryItem.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Enjoy.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_EquipInventoryWeapo ns.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_FinishingAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_GetUpAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_GetUpParade.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Goto_Ext.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_HUD.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_HackAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_HeavyParadeStumble. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_HoldInventoryItems. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_HoldItems.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Jump.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_JumpAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_JumpBack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_LieKnockDown.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Parade.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_ParadeStumble.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_PierceAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_PierceStumble.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_PowerAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_QuickAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_QuickStumble.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Say.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_SelectWeapon.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Shoot.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_StandUp.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Stumble.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_TakeItem.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_TransferItem.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_TwirlAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_Unlock.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_UseInventoryItem.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_UseItem.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\AI_WhirlAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\EquipBestMeleeWeapon.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\GiveDefeatXP.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\GiveXP.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\SelectCombatMove.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\StartSayAttackEnd.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\StartSayAttackReason.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Commands\StartSayRefuseTalk.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\CanParade.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\CanSleep.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\GetAttitude.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\GetFollowTime.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\GetThreatenTime.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\HasAttackReasonToKill. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\HasDangerousWeapon.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsEvil.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsGuard.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsHumanoid.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsLivestock.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsOwner.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsSlave.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsUndead.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\IsUpset.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\WantToEat.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\WantToFlee.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\WantToRansack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\WantToSwim.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Decision\WantToThreaten.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Memory\GetAttribute.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Memory\GetPlayerCrime.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Memory\MemorizePlayerCrime.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Memory\SetAttackReason.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessActivePercepti on.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessBody.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessCmdAttack.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessDefeat.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessDoor.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessFightSound.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessHit.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessMurder.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessNearNpc.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessPlayer.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessPlayerSneaking .cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessPlayerWeapon.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessPlayerZone.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessPrey.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessTakeItem.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessTalk.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessTarget.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessUseInteractObj ect.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\AssessWarn.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Perception\SendPerception.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Party_Tasks\ZS_Arena.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Party_Tasks\ZS_FollowPlay er.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Party_Tasks\ZS_GuidePlaye r.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Party_Tasks\ZS_WaitForPla yer.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Attack. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Dead.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_EatBody .cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Flee.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Hunt.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Inspect Body.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Observe Suspect.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Ransack Body.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_ReactTo Damage.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_ReactTo Weapon.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_ReactTo Zone.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Stumble .cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Talk.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Threate n.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_Unconsc ious.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\AI\AI_Tasks\Reaction_Tasks\ZS_WatchFi ght.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Enclave\Enclave.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\GetAniStateByA ction.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\GetCombatMoveL ength.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\GetDCCRadius.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\GetFocusEntity Priority.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\IsFirstPersonC ameraAllowed.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnCheat.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnDamage.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnDoor.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnEnterArea.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnEnterProcess ingRange.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnExitProcessi ngRange.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnGameStartUp. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnHit.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnInit.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnLeaveArea.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnMovementMode Changed.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnProcessRouti ne.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnResetPlayer. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnReturnFromMe nu.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnTick.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnTouchCharact er.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnTouchDamage. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnTouchItem.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_Callback\OnTouchZone.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Idle_Closed.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Idle_Trade.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_NoEnc laveReputation.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_NoLea rnRequirements.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_NoPar ty.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_NoPol iticalReputation.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_NotEn oughGold.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_NotEn oughLP.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_Proce ssInfo.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\IS_Running_Selec tInfo.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Engine\Engine_States\ZS_SwitchTask.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Barrier\OnTouchMagicBarri er.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Decision\CanTameAnimal.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Decision\CanTransformInto .cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Spells\Magic.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Spells\MagicAdanos.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Spells\MagicBeliar.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Spells\MagicInnos.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_Spells\MagicMisc.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_States\ZS_Burn.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_States\ZS_Freeze.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_States\ZS_MagicSleep.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_States\ZS_Misc.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_States\ZS_Summoned.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Magic\Magic_States\ZS_WaitForDawn.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_Interface\OnPlayerChang ed.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_Interface\OnPlayerGameK eyPressed.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\Bookstand.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_DuskToDawn.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_Ghost.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_HUD.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_Interact.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_Inventory.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_Magic.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_Melee.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_Normal.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Player\Player_States\PS_Ranged.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Commands\ContinueRout ine.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Commands\SelectRoutin eDestination.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Commands\SelectRoutin eTask.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Decision\GetRoutineTi me.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Decision\GetTravellin gWalkMode.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Decision\IsFreeDestin ation.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\Routine_Callbac k.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Alchemy.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Ambient.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_AnimalSleep. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Barbecue.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Bard.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Boss.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Break.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_CarryStones. cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Cook.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Digger.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Farmer.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Goblin.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Grind.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Guard.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_HangAround.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Herd.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Listen.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Lumberjack.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Monster.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_OrcParty.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Pray.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Preach.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_RunToAttackP oint.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_SlaveBabe.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Sleep.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Smalltalk.cp p
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Smith.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Study.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Trader.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Routine_Tasks\ZS_Woodwork.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Rtn_Monster.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Rtn_Player.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Routine\Rtn_Test.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Test\TA_Test_NavOffset.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Test\TestEffect.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Test\ZS_NavEval.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\Scripts\Script_Game\Script\Test\ZS_NavOffset.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\bugslayer\BSUFunctions.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\bugslayer\CrashHandler.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\bugslayer\GetLoadedModules.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\bugslayer\IsNT.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\bugslayer\NT4ProcessInfo.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\bugslayer\TLHELPProcessInfo.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\World\ge_world.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\admin\ge_gameapp.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\entity\ge_gameentity.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\gui\ge_dialogManagerCtrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\gui\ge_npcInfoCtrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\gui\ge_questLogCtrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\gui\ge_screenOutputCtrl.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\inventory\objects\ge_inventoryslots.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\inventory\propertyobjects\ge_inventoryslot.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\layers\ge_templatelayer.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\movement\propertysets\ge_ps_charactermovement.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\quests\ge_ps_quest.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\game\session\ge_session.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\container\map\ge_indexmap.inl
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\kernel\ge_basemem.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\kernel\ge_fpuadmin.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\kernel\ge_message.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\kernel\ge_validatemem.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\math\3d\ge_octtree.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\math\interpolation\ge_keyframerdata.inl
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\accessors\ge_accessor_type.inl
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\base\ge_po_puresmartptr.inl
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\factories\ge_propertyobjectfactory.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\factories\ge_propertyobjectsingleton.c pp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\objects\ge_propertyobject.inl
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\persistence\ge_propertylayout.cpp
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\types\ge_propertytype.inl
    E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\propertysystem\types\ge_propertytypebase.cpp
    F:\rtm\vctools\vc7libs\ship\atlmfc\include\afxwin2.inl
    F:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\filecore.cpp
    F:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\filetxt.cpp


    At this point I asked myself "what if i did the same to the CodeCreatures Benchmark?". Sure enough, this was the result.

    Spoiler:(zum lesen bitte Text markieren)
    T:\DOut\GELibShared\GELibShared.pch
    T:\DOut\GELibShared\GELibShared.pch
    T:\DOut\GELibShared\ge_basemem.obj
    T:\DOut\GELibShared\ge_message.obj
    T:\DOut\GELibShared\ge_string.obj
    T:\DOut\GELibShared\vc60.pdb
    T:\DOut\gedi8drv\ge_di8_device.obj
    T:\DOut\gedi8drv\ge_di8_keyboard.obj
    T:\DOut\gedi8drv\ge_di8_mouse.obj
    T:\DOut\gedi8drv\ge_di8_sys.obj
    T:\DOut\gedi8drv\ge_di8_sys.objJ
    T:\DOut\gedi8drv\ge_di8interface.obj
    T:\ROut\GELibShared\GELibShared.pch
    T:\ROut\filemanager\filemanager.pch
    T:\ROut\gecore\gecore.pch
    T:\ROut\gedx8graphicdrv\gedx8graphicdrv.pch
    T:\ROut\ploutdoor\plOutdoor.pch
    T:\ROut\plrender\plrender.pch
    T:\ROut\plscene\plscene.pch
    T:\ROut\plsmartrenderer\plsmartrenderer.pch
    T:\ROut\sysmanager\sysmanager.pch
    U:\Golem\work\engine\debug\gedi8drv.dll
    U:\Golem\work\engine\debug\gedi8drv.exp
    U:\Golem\work\source\engine\enginecore\gecore\admin\ge_admin.cpp
    U:\Golem\work\source\engine\enginecore\gecore\admin\ge_cacheadmin.cpp
    U:\Golem\work\source\engine\enginecore\gecore\admin\ge_itemadmin.cpp
    U:\Golem\work\source\engine\enginecore\gecore\admin\ge_render.cpp
    U:\Golem\work\source\engine\enginecore\gecore\admin\ge_subadmin.cpp
    U:\Golem\work\source\engine\enginecore\gecore\camera\ge_camera.cpp
    U:\Golem\work\source\engine\enginecore\gecore\interface.cpp
    U:\Golem\work\source\engine\enginecore\gecore\system\ge_CPUIDdump.cpp
    U:\Golem\work\source\engine\enginecore\gecore\system\ge_SysProbe.cpp
    U:\Golem\work\source\engine\enginecore\gecore\system\ge_optimize.cpp
    U:\Golem\work\source\engine\enginecore\gecore\system\ge_processor.cpp
    U:\Golem\work\source\engine\enginecore\gecore\system\ge_sysinfo.cpp
    U:\Golem\work\source\engine\enginecore\gecore\system\ge_timer.cpp
    U:\Golem\work\source\engine\plugins\plCollision\Primitives\ge_bbox.cpp
    U:\Golem\work\source\engine\plugins\plCollision\Primitives\ge_cylinder.cpp
    U:\Golem\work\source\engine\plugins\plCollision\Primitives\ge_primitive.cpp
    U:\Golem\work\source\engine\plugins\plCollision\Primitives\ge_sphere.cpp
    U:\Golem\work\source\engine\plugins\plCollision\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_cubemaplight.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_fog.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_lensflare.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_mirror.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_odbase.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_outdoor.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_quad.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_sky.cpp
    U:\Golem\work\source\engine\plugins\plOutdoor\ge_skybody.cpp
    U:\Golem\work\source\engine\plugins\pladmin\ge_admin.cpp
    U:\Golem\work\source\engine\plugins\pladmin\interface.cpp
    U:\Golem\work\source\engine\plugins\plcamera\Interface\ge_plugincamera.cpp
    U:\Golem\work\source\engine\plugins\plfxgrass\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plfxgrass\ge_main.cpp
    U:\Golem\work\source\engine\plugins\plparticle\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plphysics\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plrender\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_GOO.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_admin.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_culler.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_cullobject.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_pipeline.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_renderer.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_renderzoneadmin.cpp
    U:\Golem\work\source\engine\plugins\plrender\main\ge_supportrender.cpp
    U:\Golem\work\source\engine\plugins\plscene\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plscene\ge_sceneadmin.cpp
    U:\Golem\work\source\engine\plugins\plscene\main\ge_scenecontainer.cpp
    U:\Golem\work\source\engine\plugins\plscene\main\ge_scenelink.cpp
    U:\Golem\work\source\engine\plugins\plscene\main\ge_sceneobject.cpp
    U:\Golem\work\source\engine\plugins\plscene\main\ge_zonecache.cpp
    U:\Golem\work\source\engine\plugins\plscenehandler\Interface\ge_plugin_scenehand ler.cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\ge_interface.cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\ge_admin.cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\ge_smartrenderer.cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\jobs\ge_srjobattenuatio nlightandshadow.cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\jobs\ge_srjobbasic.cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\jobs\ge_srjobcubemap.cp p
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\jobs\ge_srjobimpostor.c pp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\jobs\ge_srjobmirror.cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\jobs\ge_srjobshadowmap. cpp
    U:\Golem\work\source\engine\plugins\plsmartrenderer\main\jobs\ge_srjobvertexligh tandshadow.cpp
    U:\Golem\work\source\engine\system\filemanager\ge_archivestream.cpp
    U:\Golem\work\source\engine\system\filemanager\ge_filemanager.cpp
    U:\Golem\work\source\engine\system\filemanager\stream\ge_fmfilestream.cpp
    U:\Golem\work\source\engine\system\filemanager\stream\ge_fmstream.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\ge_dx8framedrawbase.c pp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\ge_dx8generalservice. cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\ge_dx8image.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\ge_dx8imagedrawbase.c pp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\ge_dx8interface.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\ge_dx8interfaceservic e.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\ge_dx8renderbase.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobarchiveloa d.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobbasic.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobblend.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobempty.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobmulti.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobplugin.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobprimary.cp p
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobrectcopy.c pp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobscale.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobscene.cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobuncompress .cpp
    U:\Golem\work\source\engine\system\graphic\GEDX8GRAPHICDRV\jobs\ge_jobvirtualloa d.cpp
    U:\Golem\work\source\engine\system\input\gedx8input\ge_di8_device.cpp
    U:\Golem\work\source\engine\system\input\gedx8input\ge_di8_device.h
    U:\Golem\work\source\engine\system\input\gedx8input\ge_di8_keyboard.cpp
    U:\Golem\work\source\engine\system\input\gedx8input\ge_di8_mouse.cpp
    U:\Golem\work\source\engine\system\input\gedx8input\ge_di8_sys.cpp
    U:\Golem\work\source\engine\system\input\gedx8input\ge_di8interface.cpp
    U:\Golem\work\source\engine\system\sysmanager\ge_basmem.cpp
    U:\Golem\work\source\engine\system\sysmanager\ge_errorsys.cpp
    U:\Golem\work\source\engine\system\sysmanager\ge_heap.cpp
    U:\Golem\work\source\engine\system\sysmanager\ge_linklist.h
    U:\Golem\work\source\engine\system\sysmanager\ge_syncobjects.cpp
    U:\Golem\work\source\engine\system\sysmanager\ge_sysmanager.cpp
    U:\Golem\work\source\shared\GELibShared\container\map\ge_indexmap.h
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\common\ge_cachebase.cp p
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\ge_archivehelp.h
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\items\ge_item_visual.h
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\items\ge_item_visual_a rrays.h
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\items\ge_items.cpp
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\plugins\ge_plugins.cpp
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\subsystems\ge_inputdrv interface.h
    U:\Golem\work\source\shared\GELibShared\engine\interfaces\subsystems\ge_subsyste m.h
    U:\Golem\work\source\shared\GELibShared\gfx\ge_imagedescriptor.cpp
    U:\Golem\work\source\shared\GELibShared\io\logical\ge_amarchive.cpp
    U:\Golem\work\source\shared\GELibShared\io\logical\ge_amfile.cpp
    U:\Golem\work\source\shared\GELibShared\io\logical\ge_ampackage.cpp
    U:\Golem\work\source\shared\GELibShared\io\logical\ge_amresourcegroup.cpp
    U:\Golem\work\source\shared\GELibShared\io\logical\ge_archivemanager.cpp
    U:\Golem\work\source\shared\GELibShared\io\logical\ge_archivestream.cpp
    U:\Golem\work\source\shared\GELibShared\io\physical\ge_diskmanager.cpp
    U:\Golem\work\source\shared\GELibShared\io\physical\ge_filestream.cpp
    U:\Golem\work\source\shared\GELibShared\io\streams\ge_iostream.cpp
    U:\Golem\work\source\shared\GELibShared\kernel\container\ge_map.h
    U:\Golem\work\source\shared\GELibShared\kernel\container\ge_queue.h
    U:\Golem\work\source\shared\GELibShared\kernel\container\map\ge_indexmap.h
    U:\Golem\work\source\shared\GELibShared\kernel\ge_basemem.cpp
    U:\Golem\work\source\shared\GELibShared\kernel\ge_baseobject.cpp
    U:\Golem\work\source\shared\GELibShared\kernel\ge_message.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_eulerangles.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_matrix.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_octtree.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_quaternion.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_sphericalrotation.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_vector.cpp
    U:\Golem\work\source\shared\GELibShared\math\interpolation\ge_interpolatorfactor y.cpp
    U:\Golem\work\source\shared\GELibShared\system\win32\ge_memorymappedfile.cpp
    U:\Golem\work\source\shared\GELibShared\system\win32\ge_win32_guid.cpp
    U:\Golem\work\source\shared\GELibShared\types\ge_datetime.cpp
    U:\Golem\work\source\shared\GELibShared\types\ge_def.cpp
    U:\Golem\work\source\shared\GELibShared\types\ge_guid.cpp
    U:\Golem\work\source\shared\GELibShared\types\ge_string.cpp
    U:\Golem\work\source\shared\GELibShared\types\ge_string.h
    U:\Golem\work\source\shared\GELibShared\types\ge_variant.cpp


    If you compare both of these lists, you might notice that there is some overlap. In fact, there are at least 3 files that have the same name and same directory path in both CodeCreatures and Genome.

    U:\Golem\work\source\shared\GELibShared\kernel\ge_basemem.cpp -> E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\kernel\ge_basemem.cpp
    U:\Golem\work\source\shared\GELibShared\kernel\ge_message.cpp -> E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\kernel\ge_message.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_octtree.cpp -> E:\Workspace\Piranha Bytes\Gothic III\work\source\sharedbase\math\3d\ge_octtree.cpp
    You can see that in both cases, all of these files are in the "shared" part of the engine (to my understanding this is the part of the engine which is shared by all modules), which in one case is called GELibShared and sharedbase in the other. Beyond that, the paths and names are identical.


    kernel\ge_basemem.cpp
    kernel\ge_message.cpp
    math\3d\ge_octtree.cpp
    To gain more information, I performed the same analysis on the rest of PB games. Risen has only 2 of the paths shown above and in newer games (particularly ELEX), the team at Piranha Bytes was more "careful" with the compilation process.

    Risen:
    Code:
    U:\Golem\work\source\shared\GELibShared\kernel\ge_basemem.cpp -> C:\Project\platform\pc\source\sharedbase\kernel\ge_basemem.cpp
    U:\Golem\work\source\shared\GELibShared\math\3d\ge_octtree.cpp -> C:\Project\platform\pc\source\sharedbase\math\3d\ge_octtree.cpp
    This led me to examine the extracted strings further to see if I could spot anything else that looked similar. This is one of the things i found:

    CodeCreatures:
    Code:
    Integer-persistence poses a cross-processor incompatibility threat. Consider using explicit byte-size-types such as GEU32 etc.
    GECOutputStream::Read( GEInt )
    Gothic 3:
    Code:
    bCOutputStream::Read( GEInt )
    Integer-persistence poses a cross-processor incompatibility threat. Consider using explicit byte-size-types such as GEU32 etc.
    bCOutputStream::Read( GEUInt )
    Another similarity between the engines is how they're both structured into multiple modules that are loaded at runtime. They both have similarly named library files that seem to do the same thing.

    For example, in CodeCreatures there is gedialogs.dll, while in Gothic 3 there is ge3dialogs.dll or the CodeCreatures library file gecore.dll which's functionality in Gothic 3's case is taken care of by SharedBase.dll.




    Not so fast

    Even if the information shown so far might make you think that Genome was based on CodeCreatures, the truth may be much more benign than you think. As mentioned above, the same programmers that worked on CodeCreatures later worked on Gothic 3 and Genome. In that case there are bound to be similarities.

    With all of the information presented here taken into consideration, I would narrow it down to 3 scenarios:

    Scenario n.1
    The Genome engine is a direct fork of the CodeCreatures engine, which was slowly moulded into the shape we know it as today. In my opinion, this is the most unlikely option. If such was true, there would be many more similarities and Gothic 3 would not have taken 3 years to develop.

    Scenario n.2
    The similarities in project structuring and filenames are just down to both engines being coded by the same team of programmers. The structuring and naming is the same because that's how they structure and name all of their projects.

    Scenario n.3
    Only the most basic code which is the starting point of any engine (such as matrix calculations or perspective projection) was brought over in order to speed up the development process. People are lazy... efficient and don't like to do the things they have just done all over again.

    I think scenario n.3 is the most likely option. Piranha Bytes was a small team and starting totally from scratch would not make sense.

    Of course it could be a combination of all of the scenarios. Perhaps PB only reused the core of the CodeCreatures engine and built the rest of the engine and game around it.



    Conclusion

    I would like you to again reconsider all of the info laid out here before jumping to any
    conclusions. There is not a reasonable way to find out what actually happened without either comparing both of the engine's source codes or letting somebody who knows how it was answer it. In the end it doesn't really matter. It's just an interesting piece of video-game history.

    If you wish to explain this or have spotted a mistake feel free to tell me and I will correct the record.


    Finally, I would like to thank Odin68 and Lali for their amazing work in researching the origins of the cancelled PB sci-fi shooter and CodeCult itself.

    Stay safe people
    Stay safe!

  2. Beiträge anzeigen #2 Zitieren
    Hero Avatar von lali
    Registriert seit
    Feb 2016
    Beiträge
    5.473
     
    lali ist offline
    I've added it to the archive with a subpage on its own and wrote a news.
    Phoenix Dev | Website | Discord

  3. Beiträge anzeigen #3 Zitieren
    Hero Avatar von lali
    Registriert seit
    Feb 2016
    Beiträge
    5.473
     
    lali ist offline

  4. Homepage besuchen Beiträge anzeigen #4 Zitieren
    Ranger Avatar von Vaana
    Registriert seit
    Oct 2016
    Ort
    Czech republic
    Beiträge
    112
     
    Vaana ist offline
    Zitat Zitat von lali Beitrag anzeigen
    Is that from 1.01e? It includes the aforementioned gedialogs.dll file.

    What's strange is that it says "Version 0.0 Build 0" even when inside the DLL it says

    Codecreatures Engine
    Version 0.4 Build 360
    Copyright 1999, 2000 by
    Codecult Research and Development GmbH
    Stay safe!

  5. Homepage besuchen Beiträge anzeigen #5 Zitieren
    Ranger Avatar von Vaana
    Registriert seit
    Oct 2016
    Ort
    Czech republic
    Beiträge
    112
     
    Vaana ist offline
    Hello,

    since I am not sure what is the legal situation behind sharing files from the CodeCult CodeCreatures Benchmark, I decided to write an extractor for its archive format. A win32 binary and source code is included:
    https://drive.google.com/file/d/1yjK...ew?usp=sharing
    Feel free to share, expand or modify it.

    The usage is very simple:

    1. Within the files of the benchmark navigate to the "content" directory and then to the "WORKSPACE" directory.
    2. Every directory there is considered a package, pick one and open it.
    3. Now you will see a directory structure that looks something like this:

      Code:
      Bitmaps
      Materials
      RawImages
      Scenes
      Textures
      Visuals
      Inside each one of these directories is an archive file. Pick the directory from which you want to extract and open it (If you're looking for the textures then go to RawImages).
    4. Now you will see the archive file which has no extension. Simply drag and drop it over Extract.exe, which is included in the bin folder of the tool you have downloaded.
    5. Depending on the content of archive, files should start appearing in the same directory as the archive file.

    If you wish to do this from the command-line, here is how:

    Code:
    Usage:  extract [-l] [-f filename] archive
    
    Example usage:
      extract -f LeavesTexture04.tga RawImages
    
    Arguments:
      -f filename : The name of the file in the archive to extract.
                    If not specified, all files will be extracted.
      -l          : List all files in archive. Output will be in JSON.
    Since the benchmark has higher resolution versions of some Gothic 2 textures, now you can create a Gothic 2 HD texture pack with 3 upgraded textures for your personal use.

    I don't expect this to be used much, since it's a tool for an old forgotten engine that was only ever used in one benchmark. This was just something i quickly put together for fun. Still, it might become useful one day in case a game running on CC is ever found. Although in that case, modifications might be needed, since the Benchmark archives have no compression and they would all be probably bundled in one big "pak" file in a production or even a development build.
    Stay safe!

  6. Homepage besuchen Beiträge anzeigen #6 Zitieren
    Ranger Avatar von Vaana
    Registriert seit
    Oct 2016
    Ort
    Czech republic
    Beiträge
    112
     
    Vaana ist offline
    In my search to find the answer, I found this old post by Michael Rüve. I think that explains it.

    Zitat Zitat von Michael Rüve Beitrag anzeigen
    Es geht nicht um Epic an sich, sondern um die Tatsache, dass die in dieser Interpretation seit 1999 "dieselbe Engine" verwenden. Ich hätte auch Microsoft (Windows) oder irgendeine beliebige andere Engine hernehmen können - nur die kennt dann keiner.

    Überhaupt, wenn schon dann bitte richtig unsinnig:
    "PB verwenden eine Engine von 1999!". Es sind (oder waren, k.A. wieviel davon noch übrig ist) nämlich Bestandteile der "Codecult" Engine von Codecult/Phenomedia enthalten. Das sind/waren zwar so Banalitäten wie Stringverwaltungsklassen, aber falscher als "dieselbe wie bei G3" ist das auch nicht.
    Case closed.

    I'll update this thread if anything new pops up.
    Stay safe!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide