Browse Source

Start the idea of a "templates" directory.
Attempt one at a very clean and simple empty or "BlankGame"

Charlie Patterson 12 years ago
parent
commit
226253a

+ 62 - 0
templates/baseProject/.gitignore

@@ -0,0 +1,62 @@
+# Dev Files #
+###################
+*.xcworkspace
+*.xcuserdatad
+.LSOverride
+/tmp/*
+/preferences.cs
+*.dso
+*.edso
+*.user
+*.sdf
+*.suo
+*.dir
+*.opensdf
+*.idea
+*.dSYM
+*.res
+*.cache
+*.exports
+*.opt
+*.tmp
+Torque2D.app
+Torque2D_DEBUG.app
+Torque2D.exe
+Torque2D_DEBUG.exe
+Torque2DGame.app
+Torque2DGame_Debug.app
+linkmap.txt
+    
+# Compiled source #
+###################
+*.com
+*.class
+*.o
+*.a
+*.so
+*.obj
+*.lib
+*.idb
+*.pdb
+*.ilk
+*.ipch
+*.lastbuildstate
+*.unsuccessfulbuild
+*.manifest
+*.tlog
+
+# Logs and databases #
+######################
+*.log
+*.sql
+
+# OS generated files #
+######################
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+Icon?
+ehthumbs.db
+Thumbs.db

+ 12 - 0
templates/baseProject/README - setup.txt

@@ -0,0 +1,12 @@
+baseProject is a template for starting a Torque2D game from scratch.
+
+1. Copy this "baseProject" directory to wherever you want to create the project.
+2. copy the following files from your Torque2D original source to your copy of baseProject:
+	* OpenAL32.dll
+	* unicows.dll
+
+3a) copy the engine into "baseProject" as well.
+  To do this you may need to obtain or compile a copy.  Either
+	* copy the game engine Torque2D.exe (for Windows) or Torque2D.app (for Mac OSX). Or
+	* compile the original (or modified) Torque2D engine.  Then copy it.
+3b) alternatively you may want to copy the original (or modified) "engine" directory  to "baseProject" and build and modify your copy as part of this project.

+ 34 - 0
templates/baseProject/baseProject.torsion

@@ -0,0 +1,34 @@
+<TorsionProject>
+<Name>baseProject</Name>
+<WorkingDir/>
+<EntryScript>main.cs</EntryScript>
+<DebugHook>dbgSetParameters( #port#, "#password#", true );</DebugHook>
+<Mods>
+<Folder>modules</Folder>
+</Mods>
+<ScannerExts>cs; gui</ScannerExts>
+<Configs>
+<Config>
+<Name>Release</Name>
+<Executable>Torque2D.exe</Executable>
+<Arguments/>
+<HasExports>true</HasExports>
+<Precompile>false</Precompile>
+<InjectDebugger>true</InjectDebugger>
+<UseSetModPaths>false</UseSetModPaths>
+</Config>
+<Config>
+<Name>Debug</Name>
+<Executable>Torque2D_DEBUG.exe</Executable>
+<Arguments/>
+<HasExports>false</HasExports>
+<Precompile>false</Precompile>
+<InjectDebugger>true</InjectDebugger>
+<UseSetModPaths>false</UseSetModPaths>
+</Config>
+</Configs>
+<SearchURL/>
+<SearchProduct>baseProject</SearchProduct>
+<SearchVersion>HEAD</SearchVersion>
+<ExecModifiedScripts>true</ExecModifiedScripts>
+</TorsionProject>

+ 1 - 0
templates/baseProject/cleandso.bat

@@ -0,0 +1 @@
+del /s *.dso

+ 33 - 0
templates/baseProject/main.cs

@@ -0,0 +1,33 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 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.
+//-----------------------------------------------------------------------------
+
+$Scripts::ignoreDSOs = true;
+
+ModuleDatabase.scanModules( "modules" );
+ModuleDatabase.LoadExplicit( "BlankGame" );
+
+//-----------------------------------------------------------------------------
+
+function onExit()
+{
+    ModuleDatabase.unloadExplicit( "BlankGame" );
+}

+ 4 - 0
templates/baseProject/modules/AppCore/1/fonts/.gitignore

@@ -0,0 +1,4 @@
+# Ignore everything in this directory
+*
+# Except this file
+!.gitignore

+ 54 - 0
templates/baseProject/modules/AppCore/1/main.cs

@@ -0,0 +1,54 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 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.
+//-----------------------------------------------------------------------------
+
+function AppCore::create( %this )
+{
+    // Load system scripts
+    exec("./scripts/constants.cs");
+    exec("./scripts/defaultPreferences.cs");
+    exec("./scripts/canvas.cs");
+    exec("./scripts/openal.cs");
+    
+    // Initialize the canvas
+    initializeCanvas("Torque 2D");
+    
+    // Set the canvas color
+    Canvas.BackgroundColor = "CornflowerBlue";
+    Canvas.UseBackgroundColor = true;
+    
+    // Initialize audio
+    initializeOpenAL();
+    
+    // This is one method of starting your game.
+    // Edit your "main" module(s) to have an attribute of Group="gameBase".
+    // Then uncomment the following line.
+    // Now the "AppCore" will go first and then start your game.
+    // ModuleDatabase.loadGroup("gameBase");
+}
+
+//-----------------------------------------------------------------------------
+
+function AppCore::destroy( %this )
+{
+
+}
+

+ 7 - 0
templates/baseProject/modules/AppCore/1/module.taml

@@ -0,0 +1,7 @@
+<ModuleDefinition
+	ModuleId="AppCore"
+	VersionId="1"
+	Description="Barebones startup module"
+	ScriptFile="main.cs"
+	CreateFunction="create"
+	DestroyFunction="destroy" />

+ 133 - 0
templates/baseProject/modules/AppCore/1/scripts/canvas.cs

@@ -0,0 +1,133 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 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.
+//-----------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// initializeCanvas
+// Constructs and initializes the default canvas window.
+//------------------------------------------------------------------------------
+$canvasCreated = false;
+function initializeCanvas(%windowName)
+{
+    // Don't duplicate the canvas.
+    if($canvasCreated)
+    {
+        error("Cannot instantiate more than one canvas!");
+        return;
+    }
+
+    videoSetGammaCorrection($pref::OpenGL::gammaCorrection);
+
+    if ( !createCanvas(%windowName) )
+    {
+        error("Canvas creation failed. Shutting down.");
+        quit();
+    }
+
+    $pref::iOS::ScreenDepth = 32;
+
+    if ( $pref::iOS::DeviceType !$= "" )
+    {
+        %resolution = iOSResolutionFromSetting($pref::iOS::DeviceType, $pref::iOS::ScreenOrientation);
+    }
+    else
+    {
+        if ( $pref::Video::windowedRes !$= "" )
+            %resolution = $pref::Video::windowedRes;
+        else
+            %resolution = $pref::Video::defaultResolution;
+    }
+
+    if ($platform $= "windows" || $platform $= "macos")
+    {
+        setScreenMode( %resolution._0, %resolution._1, %resolution._2, $pref::Video::fullScreen );
+    }
+    else
+    {
+        setScreenMode( %resolution._0, %resolution._1, %resolution._2, false );
+    }
+
+    $canvasCreated = true;
+}
+
+//------------------------------------------------------------------------------
+// resetCanvas
+// Forces the canvas to redraw itself.
+//------------------------------------------------------------------------------
+function resetCanvas()
+{
+    if (isObject(Canvas))
+        Canvas.repaint();
+}
+
+//------------------------------------------------------------------------------
+// iOSResolutionFromSetting
+// Helper function that grabs resolution strings based on device type
+//------------------------------------------------------------------------------
+function iOSResolutionFromSetting( %deviceType, %deviceScreenOrientation )
+{
+    // A helper function to get a string based resolution from the settings given.
+    %x = 0;
+    %y = 0;
+    
+    %scaleFactor = $pref::iOS::RetinaEnabled ? 2 : 1;
+
+    switch(%deviceType)
+    {
+        case $iOS::constant::iPhone:
+            if(%deviceScreenOrientation == $iOS::constant::Landscape)
+            {
+                %x =  $iOS::constant::iPhoneWidth * %scaleFactor;
+                %y =  $iOS::constant::iPhoneHeight * %scaleFactor;
+            }
+            else
+            {
+                %x =  $iOS::constant::iPhoneHeight * %scaleFactor;
+                %y =  $iOS::constant::iPhoneWidth * %scaleFactor;
+            }
+
+        case $iOS::constant::iPad:
+            if(%deviceScreenOrientation == $iOS::constant::Landscape)
+            {
+                %x =  $iOS::constant::iPadWidth * %scaleFactor;
+                %y =  $iOS::constant::iPadHeight * %scaleFactor;
+            }
+            else
+            {
+                %x =  $iOS::constant::iPadHeight * %scaleFactor;
+                %y =  $iOS::constant::iPadWidth * %scaleFactor;
+            }
+
+        case $iOS::constant::iPhone5:
+            if(%deviceScreenOrientation == $iOS::constant::Landscape)
+            {
+                %x =  $iOS::constant::iPhone5Width;
+                %y =  $iOS::constant::iPhone5Height;
+            }
+            else
+            {
+                %x =  $iOS::constant::iPhone5Height;
+                %y =  $iOS::constant::iPhone5Width;
+            }
+    }
+   
+    return %x @ " " @ %y;
+}

+ 51 - 0
templates/baseProject/modules/AppCore/1/scripts/constants.cs

@@ -0,0 +1,51 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 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.
+//-----------------------------------------------------------------------------
+
+$iOS::constant::iPhone = 0;
+$iOS::constant::iPad = 1;
+$iOS::constant::iPhone5 = 2;
+
+$iOS::constant::Landscape = 0;
+$iOS::constant::Portrait = 1;
+$iOS::constant::ResolutionFull = 0;
+$iOS::constant::ResolutionSmall = 1;
+
+$iOS::constant::iPhoneWidth = 480;
+$iOS::constant::iPhoneHeight = 320;
+
+$iOS::constant::iPhone4Width = 960;
+$iOS::constant::iPhone4Height = 640;
+
+$iOS::constant::iPadWidth = 1024;
+$iOS::constant::iPadHeight = 768;
+
+$iOS::constant::NewiPadWidth = 2048;
+$iOS::constant::NewiPadHeight = 1536;
+
+$iOS::constant::iPhone5Width = 1136;
+$iOS::constant::iPhone5Height = 640;
+
+$iOS::constant::OrientationUnknown = 0;
+$iOS::constant::OrientationLandscapeLeft = 1;
+$iOS::constant::OrientationLandscapeRight = 2;
+$iOS::constant::OrientationPortrait = 3;
+$iOS::constant::OrientationPortraitUpsideDown = 4;

+ 68 - 0
templates/baseProject/modules/AppCore/1/scripts/defaultPreferences.cs

@@ -0,0 +1,68 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 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.
+//-----------------------------------------------------------------------------
+
+/// Game
+$Game::CompanyName              = "GarageGames LLC";
+$Game::ProductName              = "Torque 2D";
+
+/// iOS
+$pref::iOS::ScreenOrientation   = $iOS::constant::Landscape;
+$pref::iOS::ScreenDepth		    = 32;
+$pref::iOS::UseGameKit          = 0;
+$pref::iOS::UseMusic            = 0;
+$pref::iOS::UseMoviePlayer      = 0;
+$pref::iOS::UseAutoRotate       = 1;
+$pref::iOS::EnableOrientationRotation = 1;
+$pref::iOS::EnableOtherOrientationRotation = 1;   
+$pref::iOS::StatusBarType       = 0;
+
+/// Audio
+$pref::Audio::driver = "OpenAL";
+$pref::Audio::forceMaxDistanceUpdate = 0;
+$pref::Audio::environmentEnabled = 0;
+$pref::Audio::masterVolume   = 1.0;
+$pref::Audio::channelVolume1 = 1.0;
+$pref::Audio::channelVolume2 = 1.0;
+$pref::Audio::channelVolume3 = 1.0;
+$pref::Audio::sfxVolume = 1.0;
+$pref::Audio::musicVolume = 1.0;
+
+/// T2D
+$pref::T2D::ParticlePlayerEmissionRateScale = 1.0;
+$pref::T2D::ParticlePlayerSizeScale = 1.0;
+$pref::T2D::ParticlePlayerForceScale = 1.0;
+$pref::T2D::warnFileDeprecated = 1;
+$pref::T2D::warnSceneOccupancy = 1;
+$pref::T2D::imageAssetGlobalFilterMode = Bilinear;
+
+/// Video
+$pref::Video::appliedPref = 0;
+$pref::Video::disableVerticalSync = 1;
+$pref::Video::displayDevice = "OpenGL";
+$pref::Video::preferOpenGL = 1;
+$pref::Video::fullScreen = 0;
+$pref::Video::defaultResolution = "1024 768";
+$pref::Video::windowedRes = "1024 768 32";
+$pref::OpenGL::gammaCorrection = 0.5;
+
+/// Fonts.
+$Gui::fontCacheDirectory = expandPath( "^AppCore/fonts" );

+ 64 - 0
templates/baseProject/modules/AppCore/1/scripts/openal.cs

@@ -0,0 +1,64 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 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.
+//-----------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// Audio channel descriptions.
+//------------------------------------------------------------------------------
+$musicAudioType = 1;
+$effectsAudioType = 2;
+
+//------------------------------------------------------------------------------
+// initializeOpenAL
+// Starts up the OpenAL driver.
+//------------------------------------------------------------------------------
+function initializeOpenAL()
+{
+    // Just in case it is already started.
+    shutdownOpenAL();
+
+    echo("OpenAL Driver Init");
+
+    if (!OpenALInitDriver())
+    {
+        echo("OpenALInitDriver() failed");
+        $Audio::initFailed = true;
+    }
+    else
+    {
+        // Set the master volume.
+        alxListenerf(AL_GAIN_LINEAR, $pref::Audio::masterVolume);
+
+        // Set the channel volumes.
+        for (%channel = 1; %channel <= 3; %channel++)
+            alxSetChannelVolume(%channel, $pref::Audio::channelVolume[%channel]);
+
+        echo("OpenAL Driver Init Success");
+    }
+}
+
+//------------------------------------------------------------------------------
+// shutdownOpenAL
+//------------------------------------------------------------------------------
+function shutdownOpenAL()
+{
+    OpenALShutdownDriver();
+}

+ 9 - 0
templates/baseProject/modules/BlankGame/1/assets/images/font.asset.taml

@@ -0,0 +1,9 @@
+<ImageAsset
+    AssetName="font"
+    ImageFile="font.png"
+	CellOffsetY="1"
+	CellStrideY="16"
+    CellCountX="16"
+    CellCountY="6"
+    CellWidth="16"
+    CellHeight="14" />

BIN
templates/baseProject/modules/BlankGame/1/assets/images/font.png


+ 72 - 0
templates/baseProject/modules/BlankGame/1/main.cs

@@ -0,0 +1,72 @@
+//-----------------------------------------------------------------------------
+// Copyright (c) 2013 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.
+//-----------------------------------------------------------------------------
+
+function BlankGame::create( %this )
+{
+    // We need a main "Scene" we can use as our game world.  The place where sceneObjects play.
+    // Give it a global name "mainScene" since we may want to access it directly in our scripts.
+    new Scene(mainScene);
+
+    // Without a system window or "Canvas", we can't see or interact with our scene.
+    // AppCore initialized the Canvas already
+
+    // Now that we have a Canvas, we need a viewport into the scene.
+    // Give it a global name "mainWindow" since we may want to access it directly in our scripts.
+    new SceneWindow(mainWindow);
+    mainWindow.profile = new GuiControlProfile();
+    Canvas.setContent(mainWindow);
+
+    // Finally, connect our scene into the viewport (or sceneWindow).
+    // Note that a viewport comes with a camera built-in.
+    mainWindow.setScene(mainScene);
+    mainWindow.setCameraPosition( 0, 0 );
+    mainWindow.setCameraSize( 100, 75 );
+
+    // load some scripts and variables
+    // exec("./scripts/someScript.cs");
+
+echo("going to draw words");
+
+    BlankGame.sayHello();
+}
+
+//-----------------------------------------------------------------------------
+
+function BlankGame::destroy( %this )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+
+function BlankGame::sayHello( %this )
+{
+    %phrase = new ImageFont();
+    %phrase.Image = "BlankGame:Font";
+       
+    // Set the font size in both axis.  This is in world-units and not typicaly font "points".
+    %phrase.FontSize = "2 2";
+    
+    %phrase.TextAlignment = "Center";
+    %phrase.Text = "Hello, World!";
+    mainScene.add( %phrase );    
+}

+ 13 - 0
templates/baseProject/modules/BlankGame/1/module.taml

@@ -0,0 +1,13 @@
+<ModuleDefinition
+	ModuleId="blankGame"
+	VersionId="1"
+	Description="Blank Project as a Template.  You should probably rename this module!"
+	Dependencies="AppCore=1"
+	ScriptFile="main.cs"
+	CreateFunction="create"
+	DestroyFunction="destroy">
+		<DeclaredAssets
+			Path="assets"
+			Extension="asset.taml"
+			Recurse="true"/>
+</ModuleDefinition>