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