Projects: Making Generative Game Engine Source Code
<?xml version="1.0" encoding="UTF-8"?>
<widget version="0.1">
<debug>off</debug>
<window title="Generative Game Engine">
<name>main_window</name>
<width>512</width>
<height>512</height>
<shadow>false</shadow>
</window>
<image src="images/chrome/backing.png">
<name>background</name>
<voffset>0</voffset>
<hoffset>0</hoffset>
<zorder>1</zorder>
<opacity>0</opacity>
</image>
<image src="images/chrome/dropBoxNormal.jpg">
<name>dropBox</name>
<hoffset>0</hoffset>
<voffset>0</voffset>
<ondragenter>
dropBox.src="images/chrome/dropBoxDropping.jpg"
</ondragenter>
<ondragdrop>
dropBox.src="images/chrome/dropBoxDropped.jpg"
if(checkText()){
generateGame();
clearScreen();
loadScene();
}
</ondragdrop>
<ondragexit>
dropBox.src="images/chrome/dropBoxNormal.jpg"
</ondragexit>
</image>
<action trigger="onLoad">
var text = "";
var textArray = new Array();
var map = new Array();
var visualMap = new Array();
var x_position = 0;
var y_position = 0;
var tiles = 8;
var tileSize = 64;
var maxTiles = 0;
var started = false;
var user;
var terrain = {
a: ["images/tiles/a_cap.png", true], b: ["images/tiles/b_cap.png", false], c: ["images/tiles/c_cap.png", true],
d: ["images/tiles/d_cap.png", false], e: ["images/tiles/e_cap.png", true], f: ["images/tiles/f_cap.png", true],
g: ["images/tiles/g_cap.png", true], h: ["images/tiles/h_cap.png", true], i: ["images/tiles/i_cap.png", true],
j: ["images/tiles/j_cap.png", true], k: ["images/tiles/k_cap.png", true], l: ["images/tiles/l_cap.png", true],
m: ["images/tiles/m_cap.png", true], n: ["images/tiles/n_cap.png", true], o: ["images/tiles/o_cap.png", true],
p: ["images/tiles/p_cap.png", true], q: ["images/tiles/q_cap.png", true], r: ["images/tiles/r_cap.png", true],
s: ["images/tiles/s_cap.png", true], t: ["images/tiles/t_cap.png", true], u: ["images/tiles/u_cap.png", true],
v: ["images/tiles/v_cap.png", true], w: ["images/tiles/w_cap.png", true], x: ["images/tiles/x_cap.png", true],
y: ["images/tiles/y_cap.png", true], z: ["images/tiles/z_cap.png", true], A: ["images/tiles/a_cap.png", true],
B: ["images/tiles/b_cap.png", false], C: ["images/tiles/c_cap.png", true], D: ["images/tiles/d_cap.png", false],
E: ["images/tiles/e_cap.png", true], F: ["images/tiles/f_cap.png", true], G: ["images/tiles/g_cap.png", true],
H: ["images/tiles/h_cap.png", true], I: ["images/tiles/i_cap.png", true], J: ["images/tiles/j_cap.png", true],
K: ["images/tiles/k_cap.png", true], L: ["images/tiles/l_cap.png", true], M: ["images/tiles/m_cap.png", true],
N: ["images/tiles/n_cap.png", true], O: ["images/tiles/o_cap.png", true], P: ["images/tiles/p_cap.png", true],
Q: ["images/tiles/q_cap.png", true], R: ["images/tiles/r_cap.png", true], S: ["images/tiles/s_cap.png", true],
T: ["images/tiles/t_cap.png", true], U: ["images/tiles/u_cap.png", true], V: ["images/tiles/v_cap.png", true],
W: ["images/tiles/w_cap.png", true], X: ["images/tiles/x_cap.png", true], Y: ["images/tiles/y_cap.png", true],
Z: ["images/tiles/z_cap.png", true],
};
function checkText()
{
var name;
var extension;
if(system.event.data[0] == "filenames"){
name = system.event.data[1];
extension = name.substr(name.length-3, 3);
if(extension == "txt"){
return true;
}
}else{
alert("Please only drop in .txt files");
return false;
}
}
function generateGame()
{
getText();
stripText();
generateMap();
generateCharacter();
}
function getText()
{
text = runCommand("cat -u " + system.event.data[1]);
}
function stripText()
{
var i = 0;
for(i=0; i < text.length; i++){
if(text.charCodeAt(i) > 96 && text.charCodeAt(i) < 123){
textArray.push(text.charAt(i));
}
if(text.charCodeAt(i) > 64 && text.charCodeAt(i) < 91){
textArray.push(text.charAt(i));
}
}
text = null;
}
function generateMap()
{
var i = 0;
var j = 0;
var k = 0;
var scenes = 0;
var sceneShiftRight = 0;
var sceneShiftDown = 0;
var imageShiftRight = 0;
var imageShiftDown = 0;
maxTiles = Math.floor(Math.sqrt(textArray.length));
scenes = Math.ceil(maxTiles/tiles);
for(i=0; i< scenes; i++){
map[i] = new Array();
for(j=0; j< scenes; j++){
map[i][j] = new Array();
}
}
for(i=0; i< scenes; i++){
for(j=0; j< scenes; j++){
for(k=0; k < (tiles*tiles); k++){
sceneShiftRight = (i*tiles);
sceneShiftDown = ((j*tiles)*maxTiles);
imageShiftRight = (k%tiles)
imageShiftDown = (Math.floor(k/tiles)*maxTiles)
if(i+1 == scenes){
sceneShiftRight = ((i*tiles-(tiles-(maxTiles-i*tiles))));
}
if(j+1 == scenes){
sceneShiftDown = (((j*tiles)-(tiles-(maxTiles-j*tiles)))*maxTiles);
}
map[i][j][k] = textArray[sceneShiftRight+sceneShiftDown+imageShiftDown+imageShiftRight];
}
}
}
for(i=0; i < (tiles*tiles); i++){
visualMap.push(new piece(i));
}
}
function piece(i)
{
this.image = new Image();
this.image.src = "images/blank.gif";
this.image.hOffset = (tileSize*(i%tiles));
this.image.vOffset = (tileSize*Math.floor(i/tiles));
this.image.zOrder = 10;
this.image.width = tileSize;
this.image.height = tileSize;
}
function generateCharacter()
{
user = new character();
}
function character()
{
this.image = new Image();
this.image.src = "images/chrome/character/down.gif"
this.image.hOffset = 0;
this.image.vOffset = 0;
this.image.zOrder = 20;
this.image.width = tileSize;
this.image.height = tileSize;
this.image.opacity = 0;
this.dir = "down";
}
function clearScreen()
{
dropBox.fade(255, 0, 10);
dropBox.zOrder = 0;
background.fade(0, 255, 10);
}
function loadScene()
{
print(visualMap);
loadMap();
user.image.opacity = 255;
}
function loadMap()
{
var i = 0;
for(i=0; i < map[x_position][y_position].length; i++){
visualMap[i].image.src = terrain[map[x_position][y_position][i]][0];
}
}
</action>
<action trigger="onKeyDown">
if(system.event.keyString == "RightArrow"){
moveRight()
checkRight();
}
if(system.event.keyString == "LeftArrow"){
moveLeft()
checkLeft();
}
if(system.event.keyString == "UpArrow"){
moveUp()
checkUp();
}
if(system.event.keyString == "DownArrow"){
moveDown()
checkDown();
}
function moveRight()
{
user.image.hOffset+=7;
if(user.dir != "right"){
user.image.src = "images/chrome/character/right.gif";
user.dir = "right";
}
}
function moveLeft()
{
user.image.hOffset-=7;
if(user.dir != "left"){
user.image.src = "images/chrome/character/left.gif";
user.dir = "left";
}
}
function moveUp()
{
user.image.vOffset-=7;
if(user.dir != "up"){
user.image.src = "images/chrome/character/up.gif";
user.dir = "up";
}
}
function moveDown()
{
user.image.vOffset+=7;
if(user.dir != "down"){
user.image.src = "images/chrome/character/down.gif";
user.dir = "down";
}
}
function checkRight()
{
if(user.image.hOffset+tileSize > (tileSize*tiles)){
x_position++;
user.image.hOffset = 0;
user.image.opacity = 0;
loadScene();
}
}
function checkDown()
{
if(user.image.vOffset+tileSize > (tileSize*tiles)){
y_position++;
user.image.vOffset = 0;
user.image.opacity = 0;
loadScene();
}
}
function checkLeft()
{
if(user.image.hOffset < 0){
x_position--;
user.image.hOffset = (tileSize*tiles)-tileSize;
user.image.opacity = 0;
loadScene();
}
}
function checkUp()
{
if(user.image.vOffset < 0){
y_position--;
user.image.vOffset = (tileSize*tiles)-tileSize;
user.image.opacity = 0;
loadScene();
}
}
</action>
</widget>