Path: blob/main/website/GAUSS/js/generator.js
2941 views
var exportGame = function()1{2var header =3'<!DOCTYPE html>\n\4<html>\n\5<head>\n\6<title>Game - made with the GAUSS engine by Andrea Serreli</title>\n\7<script type="text/javascript" src="js/jquery-1.11.0.js"></script>\n\8<script type="text/javascript" src="js/paper-full.js"></script>\n\9</head>\n\10<body>\n\11<style>\n\12@font-face { font-family: LEC; src: url(\'fonts/MI.TTF\'); }\n\13</style>\n\14<canvas id="game-canvas"></canvas>\n';15var backupRooms = owl.deepCopy(editorRoomsList);16var backupCharacters = owl.deepCopy(editorCharactersList);17var backupAnims = owl.deepCopy(editorAnimsList);18for(var i in backupRooms)19{20eliminateCycles(backupRooms[i], 'room');21delete backupRooms[i].zOrderMap;22}23for(var i = 0; i < backupAnims.length; i++)24eliminateCycles(backupAnims[i], 'anim');25var globalVars = '\n\26var WALK_TO_ID = \'Walk_to\';\n\27var EYES_ID = \'Eyes\';\n\28var HAND_ID = \'Hand\';\n\29var MOUTH_ID = \'Mouth\';\n\30var COMBINE_ID = \'Combine\';\n\31var roomsList = ' + JSON.stringify(backupRooms) + '; \n\32var charactersList =' + JSON.stringify(backupCharacters) + '; \n\33var animsList = ' + JSON.stringify(backupAnims) + '; \n\34var invItemsList = ' + JSON.stringify(editorInvItemList) + '; \n\35var scripts = ' + JSON.stringify(compileScripts()) + '; \n\36var gameVars = ' + JSON.stringify(editorGameVars) + '; \n\37var gameActions = ' + JSON.stringify(editorActionsList) + ';\n\38var mapIdDialog = ' + JSON.stringify(editorMapIdDialog) + ';\n\39var mapIdAudio = ' + JSON.stringify(editorMapIdAudio) + ';\n\40var resolution = ' + JSON.stringify(resolution) + ';\n\41var mapIdAction = ' + JSON.stringify(editorMapIdAction) + ';\n\42var defaultSentences = ' + JSON.stringify(defaultSentences) + ';\n\43var mapIdInvItem = ' + JSON.stringify(editorMapIdInvItem) + ';\n\44var gameScripts;\n\45var mapIdRoom = {};\n\46var mapIdItem = {};\n\47var mapIdAnim = {};\n\48var mapIdEvent = {};\n\49var currentCharacter;\n\50var currentRoom;\n\51var actionSelected;\n\52var targetObj1;\n\53var targetObj2;\n\54var currentAction;\n\55var testCurrentSentence;\n\56var inventory;\n\57var guiObj;\n\58var pathfinder;\n\59var activeAnims;\n\60var sentence;\n\61var definedTriples;\n\62var undefinedTriples;\n\63var hovering = false;\n\64var DEBUG_ON = false;\n\65var scrollIntLR;\n\66var scrollIntUD;\n\67var walkCycleMillisecs = 20;\n\68var scrollingMillisecs = 30;\n\69var scrollingAmount = 10;\n\70var mouseDownTimer = 300;\n\71var mouseDown;\n\72var guiStyle = \'CMI\';\n\73var drawInterval;\n\74var mousePos;\n\75var MAX_SLOPE = 1.5;\n\76var MIN_SLOPE = -MAX_SLOPE;\n\77var DEFAULT_WALK_SPEED = 7;\n\78var scaleFactor = { x :1, y : 1 };\n\79var atomicEffects = {\n\80setDirection: setDirection,\n\81egoSetDirection : egoSetDirection,\n\82setPosition: setPosition,\n\83setRoom : setCurrentRoom,\n\84inventoryAdd: inventoryAdd,\n\85inventoryRemove: inventoryRemove,\n\86show: show,\n\87hide: hide,\n\88setState : setState,\n\89egoSetState : egoSetState,\n\90enableInput : enableInput,\n\91disableInput : disableInput,\n\92openDialog : openDialog,\n\93closeDialog : closeDialog,\n\94playAudio : playAudio\n\95};\n\96\n\97var interruptibleEffects = {\n\98delay: delay,\n\99sayLine: sayLine,\n\100egoSayLine: egoSayLine,\n\101walkToPos: walkToPos,\n\102egoWalkToPos: egoWalkToPos,\n\103walkToObj: walkToObj,\n\104egoWalkToObj: egoWalkToObj\n\105};\n\106$(document).ready(function() \107{\n\108$(document.body).css({ margin : \'0\', padding : \'0\' });\n\109initGame();\n\110});';111112var nativeFunctions = new Array();113nativeFunctions.push('var initGame = function()\n\114{\n\115viewport = { left : 0, right : 0, top : 0, bottom : 0 };\n\116clearInterval(scrollIntLR);\n\117clearInterval(scrollIntUD);\n\118scrollIntLR = null;\n\119scrollIntUD = null;\n\120actionSelected = WALK_TO_ID;\n\121targetObj1 = null;\n\122targetObj2 = null;\n\123mouseDown = false;\n\124testMapIdRoom = {};\n\125testMapIdAnim = {};\n\126testMapIdEvent = {};\n\127testMapIdAudio = {};\n\128testMapIdWalkbox = {};\n\129for(var key in activeAnims)\n\130clearInterval(activeAnims[key]);\n\131activeAnims = {};\n\132for (var i in testRoomsList)\n\133{\n\134testRoomsList[i].zOrderMap = {}\n\135testRoomsList[i].walkBehindList = [];\n\136var items = testRoomsList[i].items;\n\137var bg = testRoomsList[i].items[0];\n\138var src = bg.img;\n\139var img = new Image();\n\140img.src = src;\n\141testRoomsList[i].items[0] = {img : img, boundingBox : new paper.Rectangle(bg.boundingBox[1], bg.boundingBox[2], bg.boundingBox[3], bg.boundingBox[4])};\n\142for (var j = 1; j < items.length; j++) {\n\143if (testRoomsList[i].zOrderMap[testRoomsList[i].items[j].layer] == undefined)\n\144testRoomsList[i].zOrderMap[testRoomsList[i].items[j].layer] = [];\n\145testRoomsList[i].zOrderMap[testRoomsList[i].items[j].layer].push(testRoomsList[i].items[j].id);\n\146items[i].getCurrentFrame = getItemCurrentFrame;\n\147items[j].setLayer = setItemLayer;\n\148testMapIdItem[items[j].id] = items[j]\n\149delete items[j].hideFromCanvas;\n\150items[j].img = new Image();\n\151if (items[j].defaultAnims.default != null && items[j].centralPerspectiveWalkBehind != null)\n\152testRoomsList[i].walkBehindList.push({\'walkBehind\': items[j].centralPerspectiveWalkBehind, \'itemId\': items[j].id});\n\153if (items[j].hotspot != null) {\n\154var hotspotCopy = new Polygon();\n\155var hotspot = items[j].hotspot;\n\156for (var k = 0; k < hotspot.points.length; k++)\n\157hotspotCopy.points[k] = new paper.Point(hotspot.points[k][1], hotspot.points[k][2]);\n\158if(hotspot.closed)\n\159hotspotCopy.close();\n\160items[j].hotspot = hotspotCopy;\n\161//items[j].onClick = testMapIdItem[items[j].id].onClick;\n\162//items[j].onHover = testMapIdItem[items[j].id].onHover;\n\163//items[j].onWalk = testMapIdItem[items[j].id].onWalk;\n\164;\n\165}\n\166testMapIdRoom[testRoomsList[i].id] = testRoomsList[i];\n\167}\n\168for(var j in testRoomsList[i].walkBoxes)\n\169{\n\170var walkBox = testRoomsList[i].walkBoxes[j];\n\171var poly = new Polygon();\n\172var polygon = walkBox.polygon;\n\173for (var k = 0; k < polygon.points.length; k++)\n\174{\n\175poly.points[k] = new paper.Point(polygon.points[k][1], polygon.points[k][2]);\n\176}\n\177if(polygon.closed)\n\178poly.close();\n\179testRoomsList[i].walkBoxes[j].polygon = poly;\n\180testMapIdWalkbox[j] = testRoomsList[i].walkBoxes[j];\n\181}\n\182\n\183}\n\184computeWalkboxNeighbors(testMapIdRoom);\n\185\n\186for(var i = 0; i < testAnimsList.length; i++)\n\187{ \n\188testMapIdAnim[testAnimsList[i].id] = testAnimsList[i];\n\189for(var j = 0; j < editorAnimsList[i].frames.length; j++)\n\190{\n\191var frame = testAnimsList[i].frames[j];\n\192if (frame)\n\193\n\194{\n\195var img = new Image();\n\196img.src = frame.img;\n\197testAnimsList[i].frames[j] = {img: img};\n\198}\n\199testAnimsList[i].incrCurrIdx = incrCurrFrame;\n\200testAnimsList[i].play = startRollingFrames;\n\201testAnimsList[i].stop = stopRollingFrames;\n\202}\n\203}\n\204\n\205for (var i = 0; i < testCharactersList.length; i++)\n\206{\n\207testCharactersList[i].scaleFactor = 1;\n\208testCharactersList[i].getCurrentFrame = getItemCurrentFrame;\n\209testCharactersList[i].setLayer = setItemLayer;\n\210testMapIdItem[testCharactersList[i].id] = testCharactersList[i];\n\211}\n\212\n\213for(var key in gameScripts[\'Events\'])\n\214{\n\215$(document).off(key);\n\216(function(key)\n\217{\n\218$(document).on(key, function()\n\219{\n\220eval(gameScripts[\'Events\'][key]);\n\221});\n\222})(key);\n\223}\n\224for(var key in editorMapIdAudio)\n\225{\n\226var audio = new Audio();\n\227audio.src = editorMapIdAudio[key].audioData;\n\228testMapIdAudio[key] = audio;\n\229}\n\230setCurrentCharacter(testCharactersList[0].id);\n\231\n\232currentCharacter.inventory = [];\n\233//setObjectLocation(currentCharacter.id, currentCharacter.locationId);\n\234testCurrentAction = testGameActions[0].description;\n\235testCurrentSentence = testCurrentAction;\n\236testInventory = new Array();\n\237\n\238currentCharacter.path = [];\n\239if(currentCharacter.walkInt)\n\240clearInterval(currentCharacter.walkInt);\n\241currentCharacter.walkInt = null;\n\242\n\243sceneSentences = {};\n\244pathfinder = new PathFinder();\n\245guiObj = initGUI(resolution, guiStyle);\n\246\n\247var $gameCanvas = $(\'#game-canvas\');\n\248$gameCanvas.css({\'background\' : \'black\', \'cursor\' : \'none\', \'border\' : \'1px solid black\' });\n\249gameCanvas = $gameCanvas[0];\n\250gameCanvas.width = resolution.width;\n\251gameCanvas.height = resolution.height;\n\252setCanvasResolution(gameCanvas, window.screen.width, window.screen.height);\n\253\n\254gameCtx = gameCanvas.getContext(\'2d\');\n\255gameCtx.font = \'30px LEC\';\n\256gameCtx.fillStyle = \'white\';\n\257gameCtx.strokeStyle = \'black\';\n\258\n\259mousePos = { x: 0, y: 0};\n\260\n\261$(gameCanvas).mousedown(function(e)\n\262{\n\263e.preventDefault();\n\264e.stopImmediatePropagation();\n\265var BUTTON_RIGHT = 3;\n\266\n\267if(e.which == BUTTON_RIGHT && guiObj.listening)\n\268{\n\269if(!guiObj.inventoryOpen)\n\270{\n\271hovering = null;\n\272guiObj.hovering = null;\n\273stopPath(currentCharacter);\n\274currentCharacter.path = [];\n\275}\n\276guiObj.inventoryOpen = !guiObj.inventoryOpen;\n\277guiObj.setCursor(\'default\');\n\278guiObj.onScreen = false;\n\279guiObj.sentence = \'\';\n\280return;\n\281}\n\282\n\283var offset = $(this).offset();\n\284var relX = Math.round((e.pageX - offset.left) / scaleFactor.x);\n\285var relY = Math.round((e.pageY - offset.top) / scaleFactor.y);\n\286\n\287if(guiObj.actionSelected)\n\288{\n\289if(guiObj.actionSelected !== COMBINE_ID)\n\290{\n\291var action = guiObj.actionSelected;\n\292var obj = guiObj.hovering;\n\293if(gameScripts[guiObj.actionSelected][guiObj.hovering])\n\294{\n\295if(obj in testMapIdInvItem)\n\296try\n\297{\n\298eval(gameScripts[action][obj].code);\n\299}\n\300catch (err)\n\301{\n\302alert(err);\n\303}\n\304else\n\305try\n\306{\n\307walkToObj(currentCharacter.id, guiObj.hovering, null, function ()\n\308{\n\309setDirection(currentCharacter.id, testMapIdItem[obj].faceDir);\n\310eval(gameScripts[action][obj].code);\n\311});\n\312\n\313}\n\314catch (err)\n\315{\n\316alert(err);\n\317}\n\318}\n\319}\n\320else\n\321{\n\322var img = testMapIdAnim[testMapIdInvItem[guiObj.hovering].anim].frames[0].img;\n\323guiObj.setCursor(guiObj.hovering, img, -img.width / 2, 0);\n\324}\n\325guiObj.sentence = \'\';\n\326guiObj.hovering = null;\n\327guiObj.onScreen = false;\n\328guiObj.actionSelected = null;\n\329$gameCanvas.trigger(\'mousemove\');\n\330return;\n\331}\n\332if(!guiObj.inventoryOpen)\n\333{\n\334if(guiObj.dialogOpen)\n\335{\n\336var dialog = testMapIdDialog[guiObj.dialogOpen];\n\337var dialogChoices = dialog.subdialogs[dialog.currentSubDialog];\n\338for(var i = 0; i < dialogChoices.length; i++)\n\339if(dialogChoices[i].hovering)\n\340{\n\341dialogChoices[i].hovering = false;\n\342for(var j = 0; j < dialogChoices.length; j++)\n\343{\n\344if(dialogChoices[j].showOnce === true)\n\345dialogChoices[j].hidden = true;\n\346}\n\347//alert(dialogChoices[i].sentence);\n\348var choice = dialogChoices[i];\n\349if (choice.script)\n\350try\n\351{\n\352if(choice.chooseOnce)\n\353choice.hidden = true;\n\354if(choice.open)\n\355{\n\356dialog.currentSubDialog = choice.open;\n\357hideDialog();\n\358}\n\359else closeDialog();\n\360disableInput();\n\361eval(gameScripts[dialogChoices[i].script].code.concat());\n\362}\n\363catch (err) { alert(err); }\n\364else\n\365{\n\366closeDialog();\n\367enableInput();\n\368}\n\369return;\n\370}\n\371return;\n\372}\n\373if(!hovering)\n\374{\n\375if (guiObj.onScreen)\n\376{\n\377guiObj.sentence = \'\';\n\378guiObj.hovering = null;\n\379guiObj.onScreen = false;\n\380guiObj.item = null;\n\381return;\n\382}\n\383\n\384if(guiObj.cursor.state !== \'default\')\n\385{\n\386guiObj.setCursor(\'default\');\n\387return;\n\388}\n\389\n\390relX += viewport.left;\n\391relY += viewport.top;\n\392if (actionSelected == WALK_TO_ID && guiObj.listening)\n\393{\n\394walkToPos(currentCharacter.id, relX, relY, [], null);\n\395}\n\396return;\n\397}\n\398\n\399if(guiObj.cursor.state == \'default\')\n\400{\n\401guiObj.setPivot(relX, relY);\n\402if (guiObj.onScreen)\n\403{\n\404guiObj.onScreen = false;\n\405var ev = new jQuery.Event(\'mousemove\');\n\406ev.pageX = e.pageX;\n\407ev.pageY = e.pageY;\n\408$(gameCanvas).trigger(ev);\n\409}\n\410guiObj.onScreen = true;\n\411guiObj.item = null;\n\412guiObj.hovering = hovering;\n\413}\n\414else if(guiObj.cursor.state === \'exit\')\n\415{\n\416var obj = testMapIdItem[hovering];\n\417if(!mouseDown)\n\418{\n\419e.stopImmediatePropagation();\n\420mouseDown = true;\n\421walkToObj(currentCharacter.id, obj.id, null, function ()\n\422{\n\423setPosition(currentCharacter.id, obj.exitTo.room, obj.exitTo.xPos, obj.exitTo.yPos);\n\424});\n\425setTimeout(function() { mouseDown = false; }, mouseDownTimer);\n\426}\n\427else\n\428{\n\429stopPath(currentCharacter);\n\430setPosition(currentCharacter.id, obj.exitTo.room, obj.exitTo.xPos, obj.exitTo.yPos);\n\431}\n\432return;\n\433}\n\434else\n\435{\n\436var obj1 = guiObj.cursor.state;\n\437var obj2 = hovering;\n\438\n\439try\n\440{\n\441walkToObj(currentCharacter.id, obj2, null, function ()\n\442{\n\443setDirection(currentCharacter.id, testMapIdItem[obj2].faceDir);\n\444eval(gameScripts[COMBINE_ID][obj1][obj2].code);\n\445});\n\446\n\447}\n\448catch (err) { }\n\449hovering = null;\n\450guiObj.sentence = \'\';\n\451guiObj.hovering = null;\n\452guiObj.setCursor(\'default\');\n\453return;\n\454}\n\455stopPath(currentCharacter);\n\456}\n\457else if(!guiObj.dialogOpen)\n\458{\n\459var hoveredInvItem = guiObj.getHoveredInvItem();\n\460if(!hoveredInvItem)\n\461{\n\462var invMargin = guiObj.getInvMargin();\n\463if(mousePos.x < invMargin || mousePos.x > resolution.width - invMargin\n\464|| mousePos.y < invMargin || mousePos.y > resolution.height - invMargin)\n\465{\n\466guiObj.inventoryOpen = false;\n\467}\n\468guiObj.onScreen = false;\n\469guiObj.setCursor(\'default\');\n\470return;\n\471}\n\472if(guiObj.cursor.state !== \'default\')\n\473{\n\474if(guiObj.cursor.state !== hoveredInvItem.id)\n\475{\n\476eval(gameScripts[COMBINE_ID][guiObj.cursor.state][hoveredInvItem.id].code);\n\477guiObj.setCursor(\'default\');\n\478}\n\479return;\n\480}\n\481guiObj.setPivot(relX, relY);\n\482guiObj.onScreen = true;\n\483guiObj.hovering = hovering;\n\484}\n\485});\n\486$(gameCanvas).mousemove(function(e)\n\487{\n\488e.preventDefault();\n\489e.stopImmediatePropagation();\n\490\n\491var offset = $(this).offset();\n\492var relX = Math.round((e.pageX - offset.left) / scaleFactor.x);\n\493var relY = Math.round((e.pageY - offset.top) / scaleFactor.y);\n\494\n\495if(!isNaN(relX) && !isNaN(relY))\n\496{\n\497mousePos.x = relX;\n\498mousePos.y = relY;\n\499}\n\500\n\501if(guiObj.onScreen === true)\n\502{\n\503var btnHovering = false;\n\504hovering = null;\n\505if(getDistanceBetweenPoints(mousePos, guiObj.magnifierButtonCenter) < guiObj.getButtonRadius())\n\506{\n\507guiObj.setActionSelected(EYES_ID);\n\508btnHovering = true;\n\509}\n\510else if(getDistanceBetweenPoints(mousePos, guiObj.handButtonCenter) < guiObj.getButtonRadius())\n\511{\n\512guiObj.setActionSelected(HAND_ID);\n\513btnHovering = true;\n\514\n\515}\n\516else if(getDistanceBetweenPoints(mousePos, guiObj.mouthButtonCenter) < guiObj.getButtonRadius())\n\517{\n\518guiObj.setActionSelected(MOUTH_ID);\n\519btnHovering = true;\n\520}\n\521else if(guiObj.inventoryOpen === true && getDistanceBetweenPoints(mousePos, guiObj.cogwheelButtonCenter) < guiObj.getButtonRadius())\n\522{\n\523guiObj.setActionSelected(COMBINE_ID);\n\524btnHovering = true;\n\525}\n\526\n\527if(btnHovering)\n\528{\n\529var sentence = null;\n\530\n\531if (gameScripts[guiObj.actionSelected][guiObj.hovering])\n\532sentence = gameScripts[guiObj.actionSelected][guiObj.hovering].sentence;\n\533\n\534if (guiObj.hovering in testMapIdItem)\n\535guiObj.sentence = sentence ? sentence : editorMapIdAction[guiObj.actionSelected].description + \' \' + testMapIdItem[guiObj.hovering].description;\n\536else if (guiObj.hovering in testMapIdInvItem)\n\537guiObj.sentence = sentence ? sentence : editorMapIdAction[guiObj.actionSelected].description + \' \' + testMapIdInvItem[guiObj.hovering].description;\n\538else\n\539guiObj.sentence = \'Combine \' + testMapIdInvItem[guiObj.hovering].description;\n\540\n\541return;\n\542}\n\543\n\544guiObj.setActionSelected(null);\n\545return;\n\546}\n\547\n\548relX += viewport.left;\n\549relY += viewport.top;\n\550\n\551if(guiObj.dialogOpen)\n\552{\n\553var dialogTopLeft = guiObj.getDialogMargin();\n\554var x = dialogTopLeft.left;\n\555var y = dialogTopLeft.top - 20;\n\556\n\557var dialog = testMapIdDialog[guiObj.dialogOpen];\n\558var dialogChoices = dialog.subdialogs[dialog.currentSubDialog];\n\559\n\560for(var i = 0; i < dialogChoices.length; i++)\n\561{\n\562if(dialogChoices[i].hidden === true)\n\563continue;\n\564dialogChoices[i].hovering = false;\n\565if(mousePos.x >= x && mousePos.y >= y && mousePos.y <= y + 20)\n\566{\n\567dialogChoices[i].hovering = true;\n\568}\n\569y += 40;\n\570}\n\571return;\n\572}\n\573if(!guiObj.listening)\n\574return;\n\575\n\576if(!guiObj.inventoryOpen)\n\577{\n\578var reverseLayers = [];\n\579for (var i in testCurrentRoom.zOrderMap)\n\580reverseLayers.unshift(i);\n\581for(var i = 0; i < testCharactersList.length; i++)\n\582{\n\583if(testCharactersList[i].id === currentCharacter.id)\n\584continue;\n\585var character = testCharactersList[i] ;\n\586if (character.visible && character.hotspot && isPointInPoly(character.hotspot.points, { x: relX, y: relY }) == true)\n\587{\n\588hovering = character.id;\n\589if (!guiObj.onScreen)\n\590{\n\591if(guiObj.cursor.state === \'default\')\n\592guiObj.sentence = character.description;\n\593else\n\594{\n\595var sentence = \'Combine \' + testMapIdInvItem[guiObj.cursor.state].description + \' with \' + testMapIdItem[hovering].description;\n\596try\n\597{\n\598sentence = (gameScripts[COMBINE_ID][guiObj.cursor.state][hovering].sentence) ? gameScripts[COMBINE_ID][guiObj.cursor.state][hovering].sentence : sentence;\n\599}\n\600catch(err) {}\n\601guiObj.sentence = sentence;\n\602}\n\603}\n\604return;\n\605}\n\606}\n\607\n\608for (var i = 0; i < reverseLayers.length; i++)\n\609{\n\610var items = testCurrentRoom.zOrderMap[reverseLayers[i]];\n\611for (var j = 0; j < items.length; j++)\n\612{\n\613var item = testMapIdItem[items[j]];\n\614if (item.visible && item.hotspot && isPointInPoly(item.hotspot.points, { x: relX, y: relY }) == true)\n\615{\n\616hovering = item.id;\n\617if (!guiObj.onScreen)\n\618{\n\619if(item.exitTo.room)\n\620{\n\621if(guiObj.cursor.state === \'default\')\n\622guiObj.setCursor(\'exit\');\n\623else if(guiObj.cursor.state !== \'exit\')\n\624{\n\625hovering = null;\n\626return;\n\627}\n\628}\n\629else if(guiObj.cursor.state === \'default\')\n\630guiObj.sentence = item.description;\n\631else if(guiObj.cursor.state !== \'exit\')\n\632{\n\633var sentence = \'Combine \' + testMapIdInvItem[guiObj.cursor.state].description + \' with \' + testMapIdItem[hovering].description;\n\634try\n\635{\n\636sentence = (gameScripts[COMBINE_ID][guiObj.cursor.state][hovering].sentence) ? gameScripts[COMBINE_ID][guiObj.cursor.state][hovering].sentence : sentence;\n\637}\n\638catch(err) {}\n\639guiObj.sentence = sentence;\n\640}\n\641}\n\642return;\n\643}\n\644}\n\645}\n\646if (!guiObj.onScreen)\n\647guiObj.sentence = \'\';\n\648hovering = null;\n\649if(guiObj.cursor.state === \'exit\')\n\650guiObj.setCursor(\'default\');\n\651}\n\652else\n\653{\n\654if(!guiObj.actionSelected)\n\655if(guiObj.cursor.state != \'default\')\n\656{\n\657var invMargin = guiObj.getInvMargin();\n\658\n\659if (mousePos.x < invMargin || mousePos.x > resolution.width - invMargin\n\660|| mousePos.y < invMargin || mousePos.y > resolution.height - invMargin)\n\661{\n\662guiObj.inventoryOpen = false;\n\663return;\n\664}\n\665}\n\666var hoveredItem = guiObj.getHoveredInvItem();\n\667if(!hoveredItem || hoveredItem.id == guiObj.cursor.state)\n\668return;\n\669hovering = hoveredItem.id;\n\670if (!guiObj.onScreen)\n\671{\n\672if(guiObj.cursor.state === \'default\')\n\673guiObj.sentence = testMapIdInvItem[hoveredItem.id].description;\n\674else\n\675{\n\676var sentence = \'Combine \' + testMapIdInvItem[guiObj.cursor.state].description + \' with \' + testMapIdInvItem[hoveredItem.id].description;\n\677try\n\678{\n\679sentence = (gameScripts[COMBINE_ID][guiObj.cursor.state][hoveredItem.id].sentence) ? gameScripts[COMBINE_ID][guiObj.cursor.state][hoveredItem.id].sentence : sentence;\n\680}\n\681catch (err) {}\n\682guiObj.sentence = sentence;\n\683}\n\684}\n\685}\n\686});\n\687$(gameCanvas).contextmenu(function(e)\n\688{\n\689e.preventDefault();\n\690});\n\691setCurrentRoom(testRoomsList[0].id);\n\692drawInterval = setInterval(function() { drawScene(); }, 1000/30);\n\693};\n');694695nativeFunctions.push('var setPosition = ' + setPosition.toString());696nativeFunctions.push('var walkToPos = ' + walkToPos.toString());697nativeFunctions.push('var walkToObj = ' + walkToObj.toString());698nativeFunctions.push('var egoWalkToObj = ' + egoWalkToObj.toString());699nativeFunctions.push('var egoWalkToPos = ' + egoWalkToPos.toString());700nativeFunctions.push('var show = ' + show.toString());701nativeFunctions.push('var hide = ' + hide.toString());702nativeFunctions.push('var inventoryAdd = ' + inventoryAdd.toString());703nativeFunctions.push('var inventoryRemove = ' + inventoryRemove.toString());704nativeFunctions.push('var sayLine = ' + sayLine.toString());705nativeFunctions.push('var egoSayLine = ' + egoSayLine.toString());706nativeFunctions.push('var setDirection = ' + setDirection.toString());707nativeFunctions.push('var setState = ' + setState.toString());708nativeFunctions.push('var enableInput = ' + enableInput.toString());709nativeFunctions.push('var disableInput = ' + disableInput.toString());710nativeFunctions.push('var openDialog = ' + openDialog.toString());711nativeFunctions.push('var hideDialog = ' + hideDialog.toString());712nativeFunctions.push('var closeDialog = ' + closeDialog.toString());713nativeFunctions.push('var Sequence = ' + Sequence.toString());714nativeFunctions.push('var SortedSequence = ' + SortedSequence.toString());715nativeFunctions.push('var delay = ' + delay.toString());716nativeFunctions.push('var egoSetDirection = ' + egoSetDirection.toString());717nativeFunctions.push('var setCurrentRoom = ' + setCurrentRoom.toString());718nativeFunctions.push('var egoSetState = ' + egoSetState.toString());719nativeFunctions.push('var playAudio = ' + playAudio.toString());720nativeFunctions.push('var drawScene = ' + drawScene.toString());721nativeFunctions.push('var drawGUI = ' + drawGUI.toString());722nativeFunctions.push('var drawGUISentence = ' + drawGUISentence.toString());723nativeFunctions.push('var drawSentences = ' + drawSentences.toString());724nativeFunctions.push('var drawInventory = ' + drawInventory.toString());725nativeFunctions.push('var drawCursor = ' + drawCursor.toString());726nativeFunctions.push('var drawSprite = ' + drawSprite.toString());727nativeFunctions.push('var getBottomMiddlePos = ' + getBottomMiddlePos.toString());728nativeFunctions.push('var setCurrentCharacter = ' + setCurrentCharacter.toString());729nativeFunctions.push('var setCurrentRoom = ' + setCurrentRoom.toString());730nativeFunctions.push('var setObjectLocation = ' + setObjectLocation.toString());731nativeFunctions.push('var getItemZIndex = ' + getItemZIndex.toString());732nativeFunctions.push('var startPath = ' + startPath.toString());733nativeFunctions.push('var updatePath = ' + updatePath.toString());734nativeFunctions.push('var stopPath = ' + stopPath.toString());735nativeFunctions.push('var interpolateScaleAndSpeed = ' + interpolateScaleAndSpeed.toString());736nativeFunctions.push('var setCurrentRoom = ' + setCurrentRoom.toString());737nativeFunctions.push('var setCurrentRoom = ' + setCurrentRoom.toString());738nativeFunctions.push('var setCurrentRoom = ' + setCurrentRoom.toString());739nativeFunctions.push('var setCurrentRoom = ' + setCurrentRoom.toString());740nativeFunctions.push('var computeWalkboxNeighbors = ' + computeWalkboxNeighbors.toString());741nativeFunctions.push('var getEdgeList = ' + getEdgeList.toString());742nativeFunctions.push('var Neighbor = ' + Neighbor.toString());743nativeFunctions.push('var Walkbox = ' + WalkBox.toString());744nativeFunctions.push('var Polygon = ' + Polygon.toString());745nativeFunctions.push('var PathFinder = ' + PathFinder.toString());746nativeFunctions.push('var SearchGraphNode = ' + SearchGraphNode.toString());747nativeFunctions.push('var initGUI = ' + initGUI.toString());748nativeFunctions.push('var Anim = ' + Anim.toString());749nativeFunctions.push('var EditorSprite = ' + EditorSprite.toString());750nativeFunctions.push('var addAnimFrame = ' + addAnimFrame.toString());751nativeFunctions.push('var removeAnimFrame = ' + removeAnimFrame.toString());752nativeFunctions.push('var incrCurrFrame = ' + incrCurrFrame.toString());753nativeFunctions.push('var startRollingFrames = ' + startRollingFrames.toString());754nativeFunctions.push('var stopRollingFrames = ' + stopRollingFrames.toString());755nativeFunctions.push('var cameraCenterItem = ' + cameraCenterItem.toString());756nativeFunctions.push('var getItemPlaceHolder = ' + getItemPlaceHolder.toString());757nativeFunctions.push('var setItemLayer = ' + setItemLayer.toString());758nativeFunctions.push('var isPointInPoly = ' + isPointInPoly.toString());759nativeFunctions.push('var getWalkboxFromPoint = ' + getWalkboxFromPoint.toString());760nativeFunctions.push('var getNearestWalkBox = ' + getNearestWalkBox.toString());761nativeFunctions.push('var getPolygonCentroid = ' + getPolygonCentroid.toString());762nativeFunctions.push('var getPolygonTopAndBottom = ' + getPolygonTopAndBottom.toString());763nativeFunctions.push('var getDistanceFromPoints = ' + getDistanceFromPoints.toString());764nativeFunctions.push('var getDistanceBetweenPoints = ' + getDistanceBetweenPoints.toString());765nativeFunctions.push('var EditorItem = ' + EditorItem.toString());766nativeFunctions.push('var getItemCurrentFrame = ' + getItemCurrentFrame.toString());767nativeFunctions.push('var Point = ' + Point.toString());768nativeFunctions.push('var getCommonEdge = ' + getCommonEdge.toString());769nativeFunctions.push('var getLineSlope = ' + getLineSlope.toString());770nativeFunctions.push('var getNextPointInLine = ' + getNextPointInLine.toString());771nativeFunctions.push('var normalizeVector = ' + normalizeVector.toString());772nativeFunctions.push('var getVector = ' + getVector.toString());773nativeFunctions.push('var wrapText = ' + wrapText.toString());774nativeFunctions.push('var checkLineIntersection = ' + checkLineIntersection.toString());775nativeFunctions.push('var setDescription = ' + setDescription.toString());776nativeFunctions.push('var fireEvent = ' + fireEvent.toString());777nativeFunctions.push('var throwError = ' + throwError.toString());778nativeFunctions.push('var setCanvasResolution = ' + setCanvasResolution.toString());779nativeFunctions.push('var qSort = ' + qSort.toString());780781nativeFunctions.push('var drawPolygon = ' + drawPolygon.toString());782nativeFunctions.push('var DEBUG_drawWalkBoxes = ' + DEBUG_drawWalkBoxes.toString());783784var program = header + '\n<script>\n';785for(var i = 0; i < nativeFunctions.length; i++)786program += nativeFunctions[i] + '\n';787program += globalVars + '\n</script>\n</body>';788789program = program.replace(/testGameActions/g, 'gameActions')790.replace(/testMapIdEvent/g, 'mapIdEvent')791.replace(/testMapIdItem/g, 'mapIdItem')792.replace(/testCurrentRoom/g, 'currentRoom')793.replace(/game-test-container/g, 'game-container')794.replace(/editorActionsList/g, 'testGameActions')795.replace(/editorAnimsList/g, 'animsList')796.replace(/testMapIdInvItem/g, 'mapIdInvItem')797.replace(/testMapIdRoom/g, 'mapIdRoom')798.replace(/testMapIdItem/g, 'mapIdItem')799.replace(/testCurrentCharacter/g, 'currentCharacter')800.replace(/testRoomsList/g, 'roomsList')801.replace(/testInvItemsList/g, 'invItemsList')802.replace(/editorScriptList/g, 'scripts')803.replace(/testGameActions/g, 'gameActions')804.replace(/editorMapIdAnim/g, 'mapIdAnim')805.replace(/editorMapIdRoom/g, 'mapIdRoom')806.replace(/testMapIdAnim/g, 'mapIdAnim')807.replace(/testMapIdDialog/g, 'mapIdDialog')808.replace(/testCharactersList/g, 'charactersList')809.replace(/testAnimsList/g, 'animsList')810.replace(/editorMapIdDialog/g, 'mapIdDialog')811.replace(/editorMapIdAudio/g, 'mapIdAudio')812.replace(/EditorSprite/g, 'Sprite')813.replace(/gameScripts/g, 'scripts')814.replace(/EditorItem/g, 'Item')815.replace(/editorMapIdAction/g, 'mapIdAction');816817818819var blob = new Blob([program], {type : 'text/html'});820var pom = document.createElement('a');821//pom.setAttribute('href', 'data:application/json;charset=utf-8,' + encodeURIComponent(text));822pom.setAttribute('href', URL.createObjectURL(blob));823pom.setAttribute('download', 'game.html');824pom.click();825};826827var compileScripts = function()828{829var gameScripts = {};830for(var i = 0; i < editorActionsList.length; i++)831gameScripts[editorActionsList[i].id] = {};832for(var key in editorScriptList)833scriptInterpreter(editorScriptList[key], gameScripts);834for(var key in gameScripts)835{836if(key === 'Events')837continue;838for (var item in editorMapIdItem)839if(key !== COMBINE_ID)840{841if (gameScripts[key][item] === undefined)842gameScripts[key][item] = { 'code': defaultReactions[key] };843}844else break;845846//gameScripts[key][item] = { 'code' : getDefaultReaction(key, item) };847//createDefaultScript('item', [key, item]);848for (var item in editorMapIdInvItem)849if(key !== COMBINE_ID)850{851if (gameScripts[key][item] === undefined)852gameScripts[key][item] = { 'code': defaultReactions[key] };853}854else855{856if (gameScripts[key][item] === undefined)857gameScripts[key][item] = {};858for(var item2 in testMapIdItem)859{860if (gameScripts[key][item][item2] === undefined)861gameScripts[key][item][item2] = { 'code': defaultReactions[key] };862}863for(var item2 in testMapIdInvItem)864{865if(item === item2)866break;867if (gameScripts[key][item][item2] === undefined)868gameScripts[key][item][item2] = { 'code': defaultReactions[key] };869}870}871//createDefaultScript('inv', [key, item]);872}873874for(var key1 in editorMapIdDialog)875{876for(var key2 in editorMapIdDialog[key1].subdialogs)877{878var subD = editorMapIdDialog[key1].subdialogs[key2];879for(var i = 0; i < subD.length; i++)880if(subD[i].script)881gameScripts[subD[i].script] = scriptInterpreter(editorScriptList[subD[i].script], gameScripts);882}883}884885return gameScripts;886};887888