From ff7e580d288136bd02590ba8ee0273f25c5c7639 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 15 Jul 2019 00:34:18 -0500 Subject: [PATCH] Adjusted creation of various assets to utilize template files. --- .../assetBrowser/scripts/assetBrowser.cs | 2 + .../scripts/assetTypes/component.cs | 41 +-- .../assetBrowser/scripts/assetTypes/cpp.cs | 8 +- .../assetBrowser/scripts/assetTypes/gui.cs | 69 +++-- .../assetBrowser/scripts/assetTypes/postFX.cs | 30 ++- .../templateFiles/componentFile.cs.template | 26 ++ .../scripts/templateFiles/guiFile.cs.template | 9 + .../templateFiles/guiFile.gui.template | 7 + .../templateFiles/postFXFile.cs.template | 96 +++++++ .../templateFiles/postFXFileP.glsl.template | 35 +++ .../templateFiles/postFXFileP.hlsl.template | 31 +++ Templates/BaseGame/game/tools/settings.xml | 238 +++++++++--------- 12 files changed, 426 insertions(+), 166 deletions(-) create mode 100644 Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/componentFile.cs.template create mode 100644 Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.cs.template create mode 100644 Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.gui.template create mode 100644 Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFile.cs.template create mode 100644 Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.glsl.template create mode 100644 Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.hlsl.template diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs index 49c1941c3..252053850 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.cs @@ -53,6 +53,8 @@ function AssetBrowser::onWake(%this) %this.onlyShowModulesWithAssets = false; %this.treeFilterMode = "list"; + %this.templateFilesPath = "tools/assetBrowser/scripts/templateFiles/"; + //First, build our our list of active modules %modulesList = ModuleDatabase.findModules(true); diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.cs index ff643f9ad..f0ba4d228 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/component.cs @@ -23,24 +23,31 @@ function AssetBrowser::createComponentAsset(%this) TamlWrite(%asset, %tamlpath); %file = new FileObject(); + %templateFile = new FileObject(); - if(%file.openForWrite(%scriptPath)) - { - //TODO: enable ability to auto-embed a header for copyright or whatnot - %file.writeline("//onAdd is called when the component is created and then added to it's owner entity.\n"); - %file.writeline("//You would also add any script-defined component fields via addComponentField().\n"); - %file.writeline("function " @ %assetName @ "::onAdd(%this)\n{\n\n}\n"); - %file.writeline("//onAdd is called when the component is removed and deleted from it's owner entity."); - %file.writeline("function " @ %assetName @ "::onRemove(%this)\n{\n\n}\n"); - %file.writeline("//onClientConnect is called any time a new client connects to the server."); - %file.writeline("function " @ %assetName @ "::onClientConnect(%this, %client)\n{\n\n}\n"); - %file.writeline("//onClientDisconnect is called any time a client disconnects from the server."); - %file.writeline("function " @ %assetName @ "::onClientDisonnect(%this, %client)\n{\n\n}\n"); - %file.writeline("//update is called when the component does an update tick.\n"); - %file.writeline("function " @ %assetName @ "::Update(%this)\n{\n\n}\n"); - - %file.close(); - } + %templateCodeFilePath = %this.templateFilesPath @ "componentFile.cs.template"; + + if(%file.openForWrite(%scriptPath) && %templateFile.openForRead(%templateCodeFilePath)) + { + while( !%templateFile.isEOF() ) + { + %line = %templateFile.readline(); + %line = strreplace( %line, "@@", %assetName ); + + %file.writeline(%line); + echo(%line); + } + + %file.close(); + %templateFile.close(); + } + else + { + %file.close(); + %templateFile.close(); + + warnf("CreateComponentAsset - Something went wrong and we couldn't write the Component script file!"); + } Canvas.popDialog(AssetBrowser_newComponentAsset); diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cpp.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cpp.cs index 3ce87b672..56bc5ec06 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cpp.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/cpp.cs @@ -41,15 +41,13 @@ function AssetBrowser::createCppAsset(%this) AssetBrowserFilterTree.onSelect(%smItem); - %templateFilesPath = "tools/assetBrowser/scripts/templateFiles/"; - %file = new FileObject(); %templateFile = new FileObject(); if(%assetType $= "CppStaticClassAsset") { - %cppTemplateCodeFilePath = %templateFilesPath @ "CppStaticClassFile.cpp"; - %cppTemplateHeaderFilePath = %templateFilesPath @ "CppStaticClassFile.h"; + %cppTemplateCodeFilePath = %this.templateFilesPath @ "CppStaticClassFile.cpp"; + %cppTemplateHeaderFilePath = %this.templateFilesPath @ "CppStaticClassFile.h"; } if(%file.openForWrite(%codePath) && %templateFile.openForRead(%cppTemplateCodeFilePath)) @@ -103,7 +101,7 @@ function AssetBrowser::createCppAsset(%this) %file = new FileObject(); %templateFile = new FileObject(); - if(%file.openForWrite(%cppModuleFilePath) && %templateFile.openForRead(%templateFilesPath @ "CppModuleFile.cpp")) + if(%file.openForWrite(%cppModuleFilePath) && %templateFile.openForRead(%this.templateFilesPath @ "CppModuleFile.cpp")) { while( !%templateFile.isEOF() ) { diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.cs index 22fa29185..1a5075afb 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/gui.cs @@ -20,27 +20,56 @@ function AssetBrowser::createGUIAsset(%this) TamlWrite(%asset, %tamlpath); %file = new FileObject(); + %templateFile = new FileObject(); + + %guiTemplateCodeFilePath = %this.templateFilesPath @ "guiFile.gui.template"; + + if(%file.openForWrite(%guipath) && %templateFile.openForRead(%guiTemplateCodeFilePath)) + { + while( !%templateFile.isEOF() ) + { + %line = %templateFile.readline(); + %line = strreplace( %line, "@@", %assetName ); + + %file.writeline(%line); + echo(%line); + } + + %file.close(); + %templateFile.close(); + } + else + { + %file.close(); + %templateFile.close(); + + warnf("CreateGUIAsset - Something went wrong and we couldn't write the GUI file!"); + } + + %scriptTemplateCodeFilePath = %this.templateFilesPath @ "guiFile.cs.template"; + + if(%file.openForWrite(%scriptPath) && %templateFile.openForRead(%scriptTemplateCodeFilePath)) + { + while( !%templateFile.isEOF() ) + { + %line = %templateFile.readline(); + %line = strreplace( %line, "@@", %assetName ); + + %file.writeline(%line); + echo(%line); + } + + %file.close(); + %templateFile.close(); + } + else + { + %file.close(); + %templateFile.close(); + + warnf("CreateGUIAsset - Something went wrong and we couldn't write the GUI script file!"); + } - if(%file.openForWrite(%guipath)) - { - %file.writeline("//--- OBJECT WRITE BEGIN ---"); - %file.writeline("%guiContent = new GuiControl(" @ %assetName @ ") {"); - %file.writeline(" position = \"0 0\";"); - %file.writeline(" extent = \"100 100\";"); - %file.writeline("};"); - %file.writeline("//--- OBJECT WRITE END ---"); - - %file.close(); - } - - if(%file.openForWrite(%scriptPath)) - { - %file.writeline("function " @ %assetName @ "::onWake(%this)\n{\n\n}\n"); - %file.writeline("function " @ %assetName @ "::onSleep(%this)\n{\n\n}\n"); - - %file.close(); - } - //load the gui exec(%guipath); exec(%scriptPath); diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/postFX.cs b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/postFX.cs index 7eb23bd34..271b3b414 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/postFX.cs +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/postFX.cs @@ -27,12 +27,32 @@ function AssetBrowser::createPostEffectAsset(%this) AssetBrowserFilterTree.onSelect(%smItem); - %file = new FileObject(); + %file = new FileObject(); + %templateFile = new FileObject(); + + %postFXTemplateCodeFilePath = %this.templateFilesPath @ "postFXFile.cs.template"; - if(%file.openForWrite(%scriptPath)) - { - %file.close(); - } + if(%file.openForWrite(%scriptPath) && %templateFile.openForRead(%postFXTemplateCodeFilePath)) + { + while( !%templateFile.isEOF() ) + { + %line = %templateFile.readline(); + %line = strreplace( %line, "@@", %assetName ); + + %file.writeline(%line); + echo(%line); + } + + %file.close(); + %templateFile.close(); + } + else + { + %file.close(); + %templateFile.close(); + + warnf("CreatePostFXAsset - Something went wrong and we couldn't write the PostFX script file!"); + } return %tamlpath; } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/componentFile.cs.template b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/componentFile.cs.template new file mode 100644 index 000000000..85d9c50f3 --- /dev/null +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/componentFile.cs.template @@ -0,0 +1,26 @@ +//onAdd is called when the component is created and then added to it's owner entity. +//You would also add any script-defined component fields via addComponentField(). +function @@::onAdd(%this) +{ + +} +//onAdd is called when the component is removed and deleted from it's owner entity. +function @@::onRemove(%this) +{ + +} +//onClientConnect is called any time a new client connects to the server. +function @@::onClientConnect(%this, %client) +{ + +} +//onClientDisconnect is called any time a client disconnects from the server. +%function @@::onClientDisonnect(%this, %client) +{ + +} +//update is called when the component does an update tick. +function @@::Update(%this) +{ + +} \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.cs.template b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.cs.template new file mode 100644 index 000000000..3e4204d9e --- /dev/null +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.cs.template @@ -0,0 +1,9 @@ +function @@::onWake(%this) +{ + +} + +function @@::onSleep(%this) +{ + +} \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.gui.template b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.gui.template new file mode 100644 index 000000000..63dc722d2 --- /dev/null +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/guiFile.gui.template @@ -0,0 +1,7 @@ +//--- OBJECT WRITE BEGIN --- +%guiContent = new GuiControl(@@) +{ + position = "0 0"; + extent = "100 100"; +}; +//--- OBJECT WRITE END --- \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFile.cs.template b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFile.cs.template new file mode 100644 index 000000000..3be04b347 --- /dev/null +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFile.cs.template @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +singleton ShaderData( @@_Shader ) +{ + DXVertexShaderFile = $Core::CommonShaderPath @ "/postFX/postFxV.hlsl"; + DXPixelShaderFile = $Core:modulePath @ "@@P.hlsl"; + OGLVertexShaderFile = $Core::CommonShaderPath @ "/postFX/gl/postFxV.glsl"; + OGLPixelShaderFile = $Core:modulePath @ "@@P.glsl"; + + samplerNames[0] = "$inputTex"; + + pixVersion = 3.0; +}; + +singleton GFXStateBlockData( @@_StateBlock ) +{ + samplersDefined = true; + samplerStates[0] = SamplerClampLinear; + samplerStates[1] = SamplerClampLinear; + samplerStates[2] = SamplerClampLinear; + samplerStates[3] = SamplerClampLinear; + + blendDefined = true; + blendDest = GFXBlendOne; + blendSrc = GFXBlendZero; + + zDefined = true; + zEnable = false; + zWriteEnable = false; + + cullDefined = true; + cullMode = GFXCullNone; +}; + + +function @@::setShaderConsts( %this ) +{ +} + +function @@::preProcess( %this ) +{ +} + +function @@::onEnabled( %this ) +{ + return true; +} + +function @@::onDisabled( %this ) +{ +} + +singleton PostEffect( @@ ) +{ + isEnabled = false; + allowReflectPass = false; + + // Resolve the HDR before we render any editor stuff + // and before we resolve the scene to the backbuffer. + renderTime = "PFXBeforeBin"; + renderBin = "EditorBin"; + renderPriority = 9999; + + // The bright pass generates a bloomed version of + // the scene for pixels which are brighter than a + // fixed threshold value. + // + // This is then used in the final HDR combine pass + // at the end of this post effect chain. + shader = @@_Shader; + stateBlock = @@_StateBlock; + texture[0] = "$backBuffer"; + target = "$outTex"; + targetFormat = "GFXFormatR16G16B16A16F"; + targetScale = "1 1"; +}; \ No newline at end of file diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.glsl.template b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.glsl.template new file mode 100644 index 000000000..6611d718b --- /dev/null +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.glsl.template @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "core/rendering/shaders/gl/torque.glsl" +#include "core/rendering/shaders/gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "core/rendering/shaders/postFX/gl/postFX.glsl" + +uniform sampler2D inputTex; + +out vec4 OUT_col; + +void main() +{ + OUT_col = hdrEncode( vec4(1,1,1,1) ); +} diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.hlsl.template b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.hlsl.template new file mode 100644 index 000000000..27b5838e8 --- /dev/null +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/templateFiles/postFXFileP.hlsl.template @@ -0,0 +1,31 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +//----------------------------------------------------------------------------- + +#include "core/rendering/shaders/postFX/postFx.hlsl" +#include "core/rendering/shaders/torque.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + return hdrEncode( float4(1,1,1,1) ); +} diff --git a/Templates/BaseGame/game/tools/settings.xml b/Templates/BaseGame/game/tools/settings.xml index c235de5b9..492d259a6 100644 --- a/Templates/BaseGame/game/tools/settings.xml +++ b/Templates/BaseGame/game/tools/settings.xml @@ -1,140 +1,108 @@ - - 1 - 0 - 40 - screenCenter - 6 - WorldEditorInspectorPlugin - 50 - AssetWork_Debug.exe - - 0 - 0 - 0 - 1 - 100 - 2 - 1 + + raiseHeight + + 0.1 + 1 + 50 + 0 + 10 + 90 + 1 + 100 + 1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000 + 1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000 + + 40 40 + 1 1 + ellipse + 1 + 1 + + + + screenCenter + AssetWork_Debug.exe + 6 + 0 + WorldEditorInspectorPlugin + 1 + 40 + 50 - 0 - 255 20 8 1 - - - ../../../Documentation/Torque 3D - Script Manual.chm - http://www.garagegames.com/products/torque-3d/documentation/user - http://www.garagegames.com/products/torque-3d/forums - ../../../Documentation/Official Documentation.html - - - 1 - 1 - 1 - 1 - 1 - - - 48 48 48 255 - 50 50 50 255 - 180 180 180 255 - 215 215 215 255 - 255 255 255 255 + 0 + 255 - 0 255 0 255 - 255 255 0 255 - 255 255 255 255 - 255 255 0 255 100 100 100 255 + 0 255 0 255 255 0 0 255 + 255 255 0 255 + 255 255 255 255 + 255 255 0 255 0 0 255 255 + + 1 + 1 + 1 + 1 + 1 + 0 - 255 255 255 100 - 1 - 102 102 102 100 51 51 51 100 + 102 102 102 100 + 1 + 255 255 255 100 + + + ../../../Documentation/Torque 3D - Script Manual.chm + http://www.garagegames.com/products/torque-3d/forums + ../../../Documentation/Official Documentation.html + http://www.garagegames.com/products/torque-3d/documentation/user + + + 2 + 0 + 1 + 100 + 0 + 0 + 1 + + + 215 215 215 255 + 48 48 48 255 + 50 50 50 255 + 255 255 255 255 + 180 180 180 255 + tools/worldEditor/images/LockedHandle tools/worldEditor/images/DefaultHandle tools/worldEditor/images/SelectHandle - tools/worldEditor/images/LockedHandle - - - - 178 175 172 255 - 236 234 232 255 - 17 16 15 255 - 50 49 48 255 - 240 240 240 255 - 100 98 96 255 - 50 49 48 255 - 59 58 57 255 - 37 36 35 255 - 255 255 255 255 - 50 49 48 255 - 72 70 68 255 - 234 232 230 255 - 72 70 68 255 - 32 31 30 255 - 43 43 43 255 - 96 94 92 255 - 59 58 57 255 - - - raiseHeight - - 1 - ellipse - 1 1 - 40 40 - 1 - - - 90 - 0.1 - 50 - 100 - 0 - 1 - 10 - 1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000 - 1 - 1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000 - - - - 15 - 0 - 0 - 1 - 0.8 - 100 - 0.8 - - 10 10 10 - 0 - 255 255 255 20 - 500 - 0 - 0 tools/gui 1024 768 + ../../../Documentation/Official Documentation.html http://www.garagegames.com/products/torque-3d/documentation/user ../../../Documentation/Torque 3D - Script Manual.chm - ../../../Documentation/Official Documentation.html + + + 1 + 1 + 1 1 0 2 @@ -142,24 +110,59 @@ 8 1 1 - 1 Categorized + + 0 + 0 + 0 + 0 - - 0 - 0 - 0 - - - 1 - 1 + + + 100 + 0 + 0.8 + 1 + 15 + 0.8 + 0 + + 10 10 10 + 0 + 0 + 0 + 255 255 255 20 + 500 + + 72 70 68 255 + 50 49 48 255 + 236 234 232 255 + 240 240 240 255 + 100 98 96 255 + 72 70 68 255 + 234 232 230 255 + 50 49 48 255 + 59 58 57 255 + 32 31 30 255 + 96 94 92 255 + 255 255 255 255 + 50 49 48 255 + 17 16 15 255 + 178 175 172 255 + 43 43 43 255 + 59 58 57 255 + 37 36 35 255 + + + Grid_512_Orange + data/FPSGameplay/levels @@ -171,9 +174,6 @@ - - Grid_512_Orange - AIPlayer