Merge pull request #797 from ClementVieilly75/FTUEPopup

Popup early dev
This commit is contained in:
David Négrier 2021-03-28 16:43:21 +02:00 committed by GitHub
commit 07666f6ce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 2239 additions and 54 deletions

View File

@ -1176,27 +1176,27 @@ div.action p.action-body{
border-radius: 15px; border-radius: 15px;
} }
.popUpElement{ .popUpElement{
animation-duration: 1s;
animation-delay: 3s;
animation-name: slidein;
}
.popUpElement p {
font-family: 'Press Start 2P'; font-family: 'Press Start 2P';
text-align: left; text-align: left;
font-size: 10px;
background-color: #727678;
color: white; color: white;
} }
.popUpElement div { .popUpElement div {
width: 300px; font-family: 'Press Start 2P';
height: 120px; font-size: 10px;
background-color: #727678; background-color: #727678;
} }
.popUpElement button { .popUpElement button {
font-family: 'Press Start 2P'; position: relative;
position: center;
font-size: 10px; font-size: 10px;
border-image-repeat: revert;
margin-right: 5px;
}
.popUpElement .buttonContainer {
float: right;
background-color: inherit;
} }

View File

@ -336,7 +336,7 @@ export class ConsoleGlobalMessageManager {
} }
active(){ active(){
this.userInputManager.clearAllKeys(); this.userInputManager.disableControls();
this.divMainConsole.style.top = '0'; this.divMainConsole.style.top = '0';
this.activeConsole = true; this.activeConsole = true;
} }

View File

@ -0,0 +1,13 @@
import * as tg from "generic-type-guard";
export const isGoToPageEvent =
new tg.IsInterface().withProperties({
url: tg.isString,
}).get();
/**
* A message sent from the iFrame to the game to add a message in the chat.
*/
export type GoToPageEvent = tg.GuardedType<typeof isGoToPageEvent>;

View File

@ -4,4 +4,4 @@ export interface IframeEvent {
} }
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
export const isIframeEventWrapper = (event: any): event is IframeEvent => typeof event.type === 'string' && typeof event.data === 'object'; export const isIframeEventWrapper = (event: any): event is IframeEvent => typeof event.type === 'string';

View File

@ -0,0 +1,13 @@
import * as tg from "generic-type-guard";
export const isOpenCoWebsite =
new tg.IsInterface().withProperties({
url: tg.isString,
}).get();
/**
* A message sent from the iFrame to the game to add a message in the chat.
*/
export type OpenCoWebSiteEvent = tg.GuardedType<typeof isOpenCoWebsite>;

View File

@ -0,0 +1,13 @@
import * as tg from "generic-type-guard";
export const isOpenTabEvent =
new tg.IsInterface().withProperties({
url: tg.isString,
}).get();
/**
* A message sent from the iFrame to the game to add a message in the chat.
*/
export type OpenTabEvent = tg.GuardedType<typeof isOpenTabEvent>;

View File

@ -6,9 +6,12 @@ import * as crypto from "crypto";
import {HtmlUtils} from "../WebRtc/HtmlUtils"; import {HtmlUtils} from "../WebRtc/HtmlUtils";
import {EnterLeaveEvent} from "./Events/EnterLeaveEvent"; import {EnterLeaveEvent} from "./Events/EnterLeaveEvent";
import {isOpenPopupEvent, OpenPopupEvent} from "./Events/OpenPopupEvent"; import {isOpenPopupEvent, OpenPopupEvent} from "./Events/OpenPopupEvent";
import {isOpenTabEvent, OpenTabEvent} from "./Events/OpenTabEvent";
import {ButtonClickedEvent} from "./Events/ButtonClickedEvent"; import {ButtonClickedEvent} from "./Events/ButtonClickedEvent";
import {ClosePopupEvent, isClosePopupEvent} from "./Events/ClosePopupEvent"; import {ClosePopupEvent, isClosePopupEvent} from "./Events/ClosePopupEvent";
import {scriptUtils} from "./ScriptUtils";
import {GoToPageEvent, isGoToPageEvent} from "./Events/GoToPageEvent";
import {isOpenCoWebsite, OpenCoWebSiteEvent} from "./Events/OpenCoWebSiteEvent";
/** /**
@ -22,9 +25,33 @@ class IframeListener {
private readonly _openPopupStream: Subject<OpenPopupEvent> = new Subject(); private readonly _openPopupStream: Subject<OpenPopupEvent> = new Subject();
public readonly openPopupStream = this._openPopupStream.asObservable(); public readonly openPopupStream = this._openPopupStream.asObservable();
private readonly _openTabStream: Subject<OpenTabEvent> = new Subject();
public readonly openTabStream = this._openTabStream.asObservable();
private readonly _goToPageStream: Subject<GoToPageEvent> = new Subject();
public readonly goToPageStream = this._goToPageStream.asObservable();
private readonly _openCoWebSiteStream: Subject<OpenCoWebSiteEvent> = new Subject();
public readonly openCoWebSiteStream = this._openCoWebSiteStream.asObservable();
private readonly _closeCoWebSiteStream: Subject<void> = new Subject();
public readonly closeCoWebSiteStream = this._closeCoWebSiteStream.asObservable();
private readonly _disablePlayerControlStream: Subject<void> = new Subject();
public readonly disablePlayerControlStream = this._disablePlayerControlStream.asObservable();
private readonly _enablePlayerControlStream: Subject<void> = new Subject();
public readonly enablePlayerControlStream = this._enablePlayerControlStream.asObservable();
private readonly _closePopupStream: Subject<ClosePopupEvent> = new Subject(); private readonly _closePopupStream: Subject<ClosePopupEvent> = new Subject();
public readonly closePopupStream = this._closePopupStream.asObservable(); public readonly closePopupStream = this._closePopupStream.asObservable();
private readonly _displayBubbleStream: Subject<void> = new Subject();
public readonly displayBubbleStream = this._displayBubbleStream.asObservable();
private readonly _removeBubbleStream: Subject<void> = new Subject();
public readonly removeBubbleStream = this._removeBubbleStream.asObservable();
private readonly iframes = new Set<HTMLIFrameElement>(); private readonly iframes = new Set<HTMLIFrameElement>();
private readonly scripts = new Map<string, HTMLIFrameElement>(); private readonly scripts = new Map<string, HTMLIFrameElement>();
@ -53,6 +80,30 @@ class IframeListener {
} else if (payload.type === 'closePopup' && isClosePopupEvent(payload.data)) { } else if (payload.type === 'closePopup' && isClosePopupEvent(payload.data)) {
this._closePopupStream.next(payload.data); this._closePopupStream.next(payload.data);
} }
else if(payload.type === 'openTab' && isOpenTabEvent(payload.data)) {
scriptUtils.openTab(payload.data.url);
}
else if(payload.type === 'goToPage' && isGoToPageEvent(payload.data)) {
scriptUtils.goToPage(payload.data.url);
}
else if(payload.type === 'openCoWebSite' && isOpenCoWebsite(payload.data)) {
scriptUtils.openCoWebsite(payload.data.url);
}
else if(payload.type === 'closeCoWebSite') {
scriptUtils.closeCoWebSite();
}
else if (payload.type === 'disablePlayerControl'){
this._disablePlayerControlStream.next();
}
else if (payload.type === 'restorePlayerControl'){
this._enablePlayerControlStream.next();
}
else if (payload.type === 'displayBubble'){
this._displayBubbleStream.next();
}
else if (payload.type === 'removeBubble'){
this._removeBubbleStream.next();
}
} }

View File

@ -0,0 +1,23 @@
import {coWebsiteManager} from "../WebRtc/CoWebsiteManager";
class ScriptUtils {
public openTab(url : string){
window.open(url);
}
public goToPage(url : string){
window.location.href = url;
}
public openCoWebsite(url : string){
coWebsiteManager.loadCoWebsite(url,url);
}
public closeCoWebSite(){
coWebsiteManager.closeCoWebsite();
}
}
export const scriptUtils = new ScriptUtils();

View File

@ -58,14 +58,13 @@ import {addLoader} from "../Components/Loader";
import {ErrorSceneName} from "../Reconnecting/ErrorScene"; import {ErrorSceneName} from "../Reconnecting/ErrorScene";
import {localUserStore} from "../../Connexion/LocalUserStore"; import {localUserStore} from "../../Connexion/LocalUserStore";
import {iframeListener} from "../../Api/IframeListener"; import {iframeListener} from "../../Api/IframeListener";
import DOMElement = Phaser.GameObjects.DOMElement;
import Tween = Phaser.Tweens.Tween;
import {HtmlUtils} from "../../WebRtc/HtmlUtils"; import {HtmlUtils} from "../../WebRtc/HtmlUtils";
import Texture = Phaser.Textures.Texture; import Texture = Phaser.Textures.Texture;
import Sprite = Phaser.GameObjects.Sprite; import Sprite = Phaser.GameObjects.Sprite;
import CanvasTexture = Phaser.Textures.CanvasTexture; import CanvasTexture = Phaser.Textures.CanvasTexture;
import GameObject = Phaser.GameObjects.GameObject; import GameObject = Phaser.GameObjects.GameObject;
import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR; import FILE_LOAD_ERROR = Phaser.Loader.Events.FILE_LOAD_ERROR;
import DOMElement = Phaser.GameObjects.DOMElement;
import {Subscription} from "rxjs"; import {Subscription} from "rxjs";
export interface GameSceneInitInterface { export interface GameSceneInitInterface {
@ -588,7 +587,7 @@ export class GameScene extends ResizableScene implements CenterListener {
const contextRed = this.circleRedTexture.context; const contextRed = this.circleRedTexture.context;
contextRed.beginPath(); contextRed.beginPath();
contextRed.arc(48, 48, 48, 0, 2 * Math.PI, false); contextRed.arc(48, 48, 48, 0, 2 * Math.PI, false);
// context.lineWidth = 5; //context.lineWidth = 5;
contextRed.strokeStyle = '#ff0000'; contextRed.strokeStyle = '#ff0000';
contextRed.stroke(); contextRed.stroke();
this.circleRedTexture.refresh(); this.circleRedTexture.refresh();
@ -684,30 +683,45 @@ export class GameScene extends ResizableScene implements CenterListener {
this.gameMap.onPropertyChange('zone', (newValue, oldValue) => { this.gameMap.onPropertyChange('zone', (newValue, oldValue) => {
if (newValue === undefined || newValue === false || newValue === '') { if (newValue === undefined || newValue === false || newValue === '') {
iframeListener.sendLeaveEvent(oldValue as string); iframeListener.sendLeaveEvent(oldValue as string);
} else { } else {
iframeListener.sendEnterEvent(newValue as string); iframeListener.sendEnterEvent(newValue as string);
} }
}); });
} }
private listenToIframeEvents(): void { private listenToIframeEvents(): void {
iframeListener.openPopupStream.subscribe((openPopupEvent) => { iframeListener.openPopupStream.subscribe((openPopupEvent) => {
const escapedMessage = HtmlUtils.escapeHtml(openPopupEvent.message);
let html = `<div class="nes-container with-title is-centered"> let objectLayerSquare : ITiledMapObject;
const targetObjectData = this.getObjectLayerData(openPopupEvent.targetObject);
if (targetObjectData !== undefined){
objectLayerSquare = targetObjectData;
} else {
console.error("Error while opening a popup. Cannot find an object on the map with name '" + openPopupEvent.targetObject + "'. The first parameter of WA.openPopup() must be the name of a rectangle object in your map.");
return;
}
const escapedMessage = HtmlUtils.escapeHtml(openPopupEvent.message);
let html = `<div id="container"><div class="nes-container with-title is-centered">
${escapedMessage} ${escapedMessage}
</div>`; </div> </div>`;
const buttonContainer = `<div class="buttonContainer"</div>`;
html += buttonContainer;
let id = 0; let id = 0;
for (const button of openPopupEvent.buttons) { for (const button of openPopupEvent.buttons) {
html += `<button type="button" class="nes-btn is-${HtmlUtils.escapeHtml(button.className ?? '')}" id="popup-${openPopupEvent.popupId}-${id}">${HtmlUtils.escapeHtml(button.label)}</button>`; html += `<button type="button" class="nes-btn is-${HtmlUtils.escapeHtml(button.className ?? '')}" id="popup-${openPopupEvent.popupId}-${id}">${HtmlUtils.escapeHtml(button.label)}</button>`;
id++; id++;
} }
const domElement = this.add.dom(objectLayerSquare.x + objectLayerSquare.width/2 ,
objectLayerSquare.y + objectLayerSquare.height/2).createFromHTML(html);
const domElement = this.add.dom(150, 150).createFromHTML(html); const container : HTMLDivElement = domElement.getChildByID("container") as HTMLDivElement;
container.style.width = objectLayerSquare.width + "px";
domElement.scale = 0; domElement.scale = 0;
domElement.setClassName('popUpElement'); domElement.setClassName('popUpElement');
id = 0; id = 0;
for (const button of openPopupEvent.buttons) { for (const button of openPopupEvent.buttons) {
const button = HtmlUtils.getElementByIdOrFail<HTMLButtonElement>(`popup-${openPopupEvent.popupId}-${id}`); const button = HtmlUtils.getElementByIdOrFail<HTMLButtonElement>(`popup-${openPopupEvent.popupId}-${id}`);
@ -745,6 +759,23 @@ ${escapedMessage}
}, },
}); });
}); });
iframeListener.disablePlayerControlStream.subscribe(()=>{
this.userInputManager.disableControls();
})
iframeListener.enablePlayerControlStream.subscribe(()=>{
this.userInputManager.restoreControls();
})
let scriptedBubbleSprite : Sprite;
iframeListener.displayBubbleStream.subscribe(()=>{
scriptedBubbleSprite = new Sprite(this,this.CurrentPlayer.x + 25,this.CurrentPlayer.y,'circleSprite-white');
scriptedBubbleSprite.setDisplayOrigin(48, 48);
this.add.existing(scriptedBubbleSprite);
})
iframeListener.removeBubbleStream.subscribe(()=>{
scriptedBubbleSprite.destroy();
})
} }
private getMapDirUrl(): string { private getMapDirUrl(): string {
@ -1267,7 +1298,19 @@ ${escapedMessage}
bottom: camera.scrollY + camera.height, bottom: camera.scrollY + camera.height,
}); });
} }
private getObjectLayerData(objectName : string) : ITiledMapObject| undefined{
for (const layer of this.mapFile.layers) {
if (layer.type === 'objectgroup' && layer.name === 'floorLayer') {
for (const object of layer.objects) {
if (object.name === objectName) {
return object;
}
}
}
}
return undefined;
}
private reposition(): void { private reposition(): void {
this.presentationModeSprite.setY(this.game.renderer.height - 2); this.presentationModeSprite.setY(this.game.renderer.height - 2);
this.chatModeSprite.setY(this.game.renderer.height - 2); this.chatModeSprite.setY(this.game.renderer.height - 2);
@ -1323,7 +1366,7 @@ ${escapedMessage}
//todo: into onConnexionMessage //todo: into onConnexionMessage
private bannedUser(){ private bannedUser(){
this.cleanupClosingScene(); this.cleanupClosingScene();
this.userInputManager.clearAllKeys(); this.userInputManager.disableControls();
this.scene.start(ErrorSceneName, { this.scene.start(ErrorSceneName, {
title: 'Banned', title: 'Banned',
subTitle: 'You were banned from WorkAdventure', subTitle: 'You were banned from WorkAdventure',
@ -1335,7 +1378,7 @@ ${escapedMessage}
if (event.type === ConnexionMessageEventTypes.worldFull) { if (event.type === ConnexionMessageEventTypes.worldFull) {
this.cleanupClosingScene(); this.cleanupClosingScene();
this.scene.stop(ReconnectingSceneName); this.scene.stop(ReconnectingSceneName);
this.userInputManager.clearAllKeys(); this.userInputManager.disableControls();
this.scene.start(ErrorSceneName, { this.scene.start(ErrorSceneName, {
title: 'Connection rejected', title: 'Connection rejected',
subTitle: 'The world you are trying to join is full. Try again later.', subTitle: 'The world you are trying to join is full. Try again later.',

View File

@ -61,7 +61,7 @@ export class ReportMenu extends Phaser.GameObjects.DOMElement {
this.opened = true; this.opened = true;
gameManager.getCurrentGameScene(this.scene).userInputManager.clearAllKeys(); gameManager.getCurrentGameScene(this.scene).userInputManager.disableControls();
this.scene.tweens.add({ this.scene.tweens.add({
targets: this, targets: this,

View File

@ -31,10 +31,11 @@ export class ActiveEventList {
export class UserInputManager { export class UserInputManager {
private KeysCode!: UserInputManagerDatum[]; private KeysCode!: UserInputManagerDatum[];
private Scene: GameScene; private Scene: GameScene;
private isInputDisabled : boolean;
constructor(Scene : GameScene) { constructor(Scene : GameScene) {
this.Scene = Scene; this.Scene = Scene;
this.initKeyBoardEvent(); this.initKeyBoardEvent();
this.isInputDisabled = false;
} }
initKeyBoardEvent(){ initKeyBoardEvent(){
@ -63,16 +64,25 @@ export class UserInputManager {
this.Scene.input.keyboard.removeAllListeners(); this.Scene.input.keyboard.removeAllListeners();
} }
clearAllKeys(){ disableControls(){
this.Scene.input.keyboard.removeAllKeys(); this.Scene.input.keyboard.removeAllKeys();
this.isInputDisabled = true;
} }
restoreControls(){
this.initKeyBoardEvent();
this.isInputDisabled = false;
}
getEventListForGameTick(): ActiveEventList { getEventListForGameTick(): ActiveEventList {
const eventsMap = new ActiveEventList(); const eventsMap = new ActiveEventList();
if (this.isInputDisabled) {
return eventsMap;
}
this.KeysCode.forEach(d => { this.KeysCode.forEach(d => {
if (d. keyInstance.isDown) { if (d. keyInstance.isDown) {
eventsMap.set(d.event, true); eventsMap.set(d.event, true);
} }
}); });
return eventsMap; return eventsMap;
} }

View File

@ -70,12 +70,12 @@ export class DiscussionManager {
const inputMessage: HTMLInputElement = document.createElement('input'); const inputMessage: HTMLInputElement = document.createElement('input');
inputMessage.onfocus = () => { inputMessage.onfocus = () => {
if(this.userInputManager) { if(this.userInputManager) {
this.userInputManager.clearAllKeys(); this.userInputManager.disableControls();
} }
} }
inputMessage.onblur = () => { inputMessage.onblur = () => {
if(this.userInputManager) { if(this.userInputManager) {
this.userInputManager.initKeyBoardEvent(); this.userInputManager.restoreControls();
} }
} }
inputMessage.type = "text"; inputMessage.type = "text";

View File

@ -6,6 +6,9 @@ import {EnterLeaveEvent, isEnterLeaveEvent} from "./Api/Events/EnterLeaveEvent";
import {OpenPopupEvent} from "./Api/Events/OpenPopupEvent"; import {OpenPopupEvent} from "./Api/Events/OpenPopupEvent";
import {isButtonClickedEvent} from "./Api/Events/ButtonClickedEvent"; import {isButtonClickedEvent} from "./Api/Events/ButtonClickedEvent";
import {ClosePopupEvent} from "./Api/Events/ClosePopupEvent"; import {ClosePopupEvent} from "./Api/Events/ClosePopupEvent";
import {OpenTabEvent} from "./Api/Events/OpenTabEvent";
import {GoToPageEvent} from "./Api/Events/GoToPageEvent";
import {OpenCoWebSiteEvent} from "./Api/Events/OpenCoWebSiteEvent";
interface WorkAdventureApi { interface WorkAdventureApi {
sendChatMessage(message: string, author: string): void; sendChatMessage(message: string, author: string): void;
@ -13,11 +16,20 @@ interface WorkAdventureApi {
onEnterZone(name: string, callback: () => void): void; onEnterZone(name: string, callback: () => void): void;
onLeaveZone(name: string, callback: () => void): void; onLeaveZone(name: string, callback: () => void): void;
openPopup(targetObject: string, message: string, buttons: ButtonDescriptor[]): Popup; openPopup(targetObject: string, message: string, buttons: ButtonDescriptor[]): Popup;
openTab(url : string): void;
goToPage(url : string): void;
openCoWebSite(url : string): void;
closeCoWebSite(): void;
disablePlayerControl() : void;
restorePlayerControl() : void;
displayBubble() : void;
removeBubble() : void;
} }
declare global { declare global {
// eslint-disable-next-line no-var // eslint-disable-next-line no-var
var WA: WorkAdventureApi var WA: WorkAdventureApi
} }
type ChatMessageCallback = (message: string) => void; type ChatMessageCallback = (message: string) => void;
@ -62,7 +74,6 @@ class Popup {
} }
} }
window.WA = { window.WA = {
/** /**
* Send a message in the chat. * Send a message in the chat.
@ -77,14 +88,60 @@ window.WA = {
} as ChatEvent } as ChatEvent
}, '*'); }, '*');
}, },
disablePlayerControl() : void {
window.parent.postMessage({'type' : 'disablePlayerControl'},'*');
},
restorePlayerControl() : void {
window.parent.postMessage({'type' : 'restorePlayerControl'},'*');
},
displayBubble() : void {
window.parent.postMessage({'type' : 'displayBubble'},'*');
},
removeBubble() : void {
window.parent.postMessage({'type' : 'removeBubble'},'*');
},
openTab(url : string) : void{
window.parent.postMessage({
"type" : 'openTab',
"data" : {
url
} as OpenTabEvent
},'*');
},
goToPage(url : string) : void{
window.parent.postMessage({
"type" : 'goToPage',
"data" : {
url
} as GoToPageEvent
},'*');
},
openCoWebSite(url : string) : void{
window.parent.postMessage({
"type" : 'openCoWebSite',
"data" : {
url
} as OpenCoWebSiteEvent
},'*');
},
closeCoWebSite() : void{
window.parent.postMessage({
"type" : 'closeCoWebSite'
},'*');
},
openPopup(targetObject: string, message: string, buttons: ButtonDescriptor[]): Popup { openPopup(targetObject: string, message: string, buttons: ButtonDescriptor[]): Popup {
popupId++; popupId++;
const popup = new Popup(popupId); const popup = new Popup(popupId);
const btnMap = new Map<number, () => void>(); const btnMap = new Map<number, () => void>();
popupCallbacks.set(popupId, btnMap); popupCallbacks.set(popupId, btnMap);
let id = 0; let id = 0;
for (const button of buttons) { for (const button of buttons) {
const callback = button.callback; const callback = button.callback;
@ -96,6 +153,7 @@ window.WA = {
id++; id++;
} }
window.parent.postMessage({ window.parent.postMessage({
'type': 'openPopup', 'type': 'openPopup',
'data': { 'data': {
@ -167,6 +225,7 @@ window.addEventListener('message', message => {
callback(popup); callback(popup);
} }
} }
} }
// ... // ...

View File

@ -0,0 +1,25 @@
License
-------
CC-BY-SA 3.0:
- http://creativecommons.org/licenses/by-sa/3.0/
- See the file: cc-by-sa-3.0.txt
GNU GPL 3.0:
- http://www.gnu.org/licenses/gpl-3.0.html
- See the file: gpl-3.0.txt
Assets from: workadventure@thecodingmachine.com
BASE assets:
------------
- le-coq.png
- logotcm.png
- pin.png
- tileset1-repositioning.png
- tileset1.png
- tileset2.2.png
- tileset2.png
- tileset3.2.png
- tileset3.png
- walls2.png

BIN
maps/Tuto/Male 13-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
maps/Tuto/fantasy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

74
maps/Tuto/scriptTuto.js Normal file
View File

@ -0,0 +1,74 @@
var isFirstTimeTuto = false;
var textFirstPopup = 'Hey ! This is how to start a discussion with someone ! You can be 4 max in a bubble.';
var textSecondPopup = 'You can also use the chat to communicate ! ';
var targetObjectTutoBubble ='Tutobubble';
var targetObjectTutoChat ='tutoChat';
var targetObjectTutoExplanation ='tutoExplanation';
var popUpExplanation = undefined;
function launchTuto (){
WA.openPopup(targetObjectTutoBubble, textFirstPopup, [
{
label: "Next",
className: "popUpElement",
callback: (popup) => {
popup.close();
WA.openPopup(targetObjectTutoChat, textSecondPopup, [
{
label: "Open Chat",
className: "popUpElement",
callback: (popup1) => {
WA.sendChatMessage("Hey you can talk here too!", 'WA Guide');
popup1.close();
WA.openPopup("TutoFinal","You are good to go! You can meet the dev team and discover the features in the next room!",[
{
label: "Got it!",
className : "success",callback:(popup2 => {
popup2.close();
WA.restorePlayerControl();
})
}
])
}
}
])
}
}
]);
WA.disablePlayerControl();
}
WA.onEnterZone('popupZone', () => {
WA.displayBubble();
if (!isFirstTimeTuto) {
isFirstTimeTuto = true;
launchTuto();
}
else {
popUpExplanation = WA.openPopup(targetObjectTutoExplanation, 'Do you want to review the explanation?', [
{
label: "No",
className: "error",
callback: (popup) => {
popup.close();
}
},
{
label: "Yes",
className: "success",
callback: (popup) => {
popup.close();
launchTuto();
}
}
])
}
});
WA.onLeaveZone('popupZone', () => {
if (popUpExplanation !== undefined) popUpExplanation.close();
WA.removeBubble();
})

BIN
maps/Tuto/shift.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
maps/Tuto/textTuto3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -0,0 +1,4 @@
LPC Atlas :
https://opengameart.org/content/lpc-tile-atlas
LPC Atlas 2 :
https://opengameart.org/content/lpc-tile-atlas2

View File

@ -0,0 +1,139 @@
License
-------
CC-BY-SA 3.0:
- http://creativecommons.org/licenses/by-sa/3.0/
- See the file: cc-by-sa-3.0.txt
GNU GPL 3.0:
- http://www.gnu.org/licenses/gpl-3.0.html
- See the file: gpl-3.0.txt
Note the file is based on the LCP contest readme so don't expect the exact little pieces used like the base one.
*Additional license information.
Assets from:
LPC participants:
----------------
Casper Nilsson
*GNU GPL 3.0 or later
email: casper.nilsson@gmail.com
Freenode: CasperN
OpenGameArt.org: C.Nilsson
- LPC C.Nilsson (2D art)
Daniel Eddeland
*GNU GPL 3.0 or later
- Tilesets of plants, props, food and environments, suitable for farming / fishing sims and other games.
- Includes wheat, grass, sand tilesets, fence tilesets and plants such as corn and tomato.
Johann CHARLOT
*GNU LGPL Version 3.
*Later versions are permitted.
Homepage http://poufpoufproduction.fr
Email johannc@poufpoufproduction.fr
- Shoot'em up graphic kit
Skyler Robert Colladay
- FeralFantom's Entry (2D art)
BASE assets:
------------
Lanea Zimmerman (AKA Sharm)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- barrel.png
- brackish.png
- buckets.png
- bridges.png
- cabinets.png
- cement.png
- cementstair.png
- chests.png
- country.png
- cup.png
- dirt2.png
- dirt.png
- dungeon.png
- grassalt.png
- grass.png
- holek.png
- holemid.png
- hole.png
- house.png
- inside.png
- kitchen.png
- lava.png
- lavarock.png
- mountains.png
- rock.png
- shadow.png
- signs.png
- stairs.png
- treetop.png
- trunk.png
- waterfall.png
- watergrass.png
- water.png
- princess.png and princess.xcf
Stephen Challener (AKA Redshrike)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- female_walkcycle.png
- female_hurt.png
- female_slash.png
- female_spellcast.png
- male_walkcycle.png
- male_hurt.png
- male_slash.png
- male_spellcast.png
- male_pants.png
- male_hurt_pants.png
- male_fall_down_pants.png
- male_slash_pants.png
Charles Sanchez (AKA CharlesGabriel)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- bat.png
- bee.png
- big_worm.png
- eyeball.png
- ghost.png
- man_eater_flower.png
- pumpking.png
- slime.png
- small_worm.png
- snake.png
Manuel Riecke (AKA MrBeast)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- hairfemale.png and hairfemale.xcf
- hairmale.png and hairmale.xcf
- soldier.png
- soldier_altcolor.png
Daniel Armstrong (AKA HughSpectrum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Castle work:
- castlewalls.png
- castlefloors.png
- castle_outside.png
- castlefloors_outside.png
- castle_lightsources.png

View File

@ -0,0 +1,166 @@
License
-------
CC-BY-SA 3.0:
- http://creativecommons.org/licenses/by-sa/3.0/
- See the file: cc-by-sa-3.0.txt
GNU GPL 3.0:
- http://www.gnu.org/licenses/gpl-3.0.html
- See the file: gpl-3.0.txt
Note only some files from the entries are selected.
*Additional license information.
Assets from:
LPC participants:
----------------
Barbara Rivera
- tree,tombstone
Casper Nilsson
*GNU GPL 3.0 or later
email: casper.nilsson@gmail.com
Freenode: CasperN
OpenGameArt.org: C.Nilsson
- LPC C.Nilsson (2D art)
Chris Phillips
- tree
Daniel Eddeland
*GNU GPL 3.0 or later
- Tilesets of plants, props, food and environments, suitable for farming / fishing sims and other games.
- Includes wheat, grass, sand tilesets, fence tilesets and plants such as corn and tomato.
- Also includes village/marketplace objects like sacks, food, some smithing equipment, tables and stalls.
Anamaris and Krusmira (aka? Emilio J Sanchez)
- Sierra__Steampun-a-fy (with concept art)
Jonas Klinger
- Skorpio's SciFi Sprite Pack
Joshua Taylor
- Fruit and Veggie Inventory
Leo Villeveygoux
- Limestone Wall
Mark Weyer
- signpost+shadow
Matthew Nash
- Public Toilet Tileset
Skyler Robert Colladay
- FeralFantom's Entry
BASE assets:
------------
Lanea Zimmerman (AKA Sharm)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- barrel.png
- brackish.png
- buckets.png
- bridges.png
- cabinets.png
- cement.png
- cementstair.png
- chests.png
- country.png
- cup.png
- dirt2.png
- dirt.png
- dungeon.png
- grassalt.png
- grass.png
- holek.png
- holemid.png
- hole.png
- house.png
- inside.png
- kitchen.png
- lava.png
- lavarock.png
- mountains.png
- rock.png
- shadow.png
- signs.png
- stairs.png
- treetop.png
- trunk.png
- waterfall.png
- watergrass.png
- water.png
- princess.png and princess.xcf
Stephen Challener (AKA Redshrike)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- female_walkcycle.png
- female_hurt.png
- female_slash.png
- female_spellcast.png
- male_walkcycle.png
- male_hurt.png
- male_slash.png
- male_spellcast.png
- male_pants.png
- male_hurt_pants.png
- male_fall_down_pants.png
- male_slash_pants.png
Charles Sanchez (AKA CharlesGabriel)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- bat.png
- bee.png
- big_worm.png
- eyeball.png
- ghost.png
- man_eater_flower.png
- pumpking.png
- slime.png
- small_worm.png
- snake.png
Manuel Riecke (AKA MrBeast)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- hairfemale.png and hairfemale.xcf
- hairmale.png and hairmale.xcf
- soldier.png
- soldier_altcolor.png
Daniel Armstrong (AKA HughSpectrum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Castle work:
- castlewalls.png
- castlefloors.png
- castle_outside.png
- castlefloors_outside.png
- castle_lightsources.png

View File

@ -0,0 +1,2 @@
https://opengameart.org/content/lpc-interior-castle-tiles
credit Lanea Zimmerman

View File

@ -0,0 +1,55 @@
= Wooden floor(CC-BY-SA) =
* Horizontal wooden floor by Lanea Zimmerman (AKA Sharm)
* Horizontal wooden floor with hole by Lanea Zimmerman (AKA Sharm) and Tuomo Untinen
* Vertical wooden floor by Tuomo Untinen
* Vertical wooden floor with hole by Tuomo Untinen
= Wooden wall topping (CC-BY-SA) =
* Tuomo Untinen
= Pile of barrels =
* Based LPC base tiles by Lanea Zimmerman (AKA Sharm)
= Decorational stuff (CC-BY-SA) =
* Green bottle
* Wine glass and bottle
* Hanging sacks
* Wall mounted rope and ropes
* Wall mounted swords
* Wall mounted kite shield
* Wall hole
By Tuomo Untinen
* Small sack from LPC farming tileset by Daniel Eddeland (http://opengameart.org/content/lpc- farming-tilesets-magic-animations-and-ui-elements)
* Purple bottles and gray lantern from Hyptosis Mage city
* Green and blue bottle by Tuomo Untinen
= Wall clock (CC-BY-SA) =
* Lanea Zimmerman AKA Sharm
* Tuomo Untinen (Scaled down and animation)
= Stone floor (CC-BY-SA)=
* Tuomo Untinen
= Cobble stone floor (CC-BY-SA)=
* Based on LPC base tileset by Lanea Zimmerman (AKA Sharm)
= Cabinets and kitchen stuff including metal stove(CC-BY-SA) =
* Based on LPC base tileset by Lanea Zimmerman (AKA Sharm)
* Cutboard is made by Hyptosis
* Sacks based on LPC farming tileset by Daniel Eddeland (http://opengameart.org/content/lpc- farming-tilesets-magic-animations-and-ui-elements)
* Spears by Tuomo Untinen
* Vertical chest by Tuomo Untinen based on LPC base tiles Lanea Zimmerman (AKA Sharm)
Manuel Riecke (AKA MrBeast)
= Skull (CC-BY-SA) =
* http://opengameart.org/content/lpc-dungeon-elements
* Graphical artist Lanea Zimmerman AKA Sharm
* Contributor William Thompson
= pile sacks =
* LPC farming tileset by Daniel Eddeland (http://opengameart.org/content/lpc- farming-tilesets-magic-animations-and-ui-elements)
= Pile of papers(CC-BY-SA) =
* Based on caeles papers
= Armor shelves(CC-BY-SA) =
* Based on LPC base tileset by Lanea Zimmerman (AKA Sharm)
* Armors by: Adapted by Matthew Krohn from art created by Johannes Sjölund
= Table lamp =
* Tuomo Untinen
= Distiller =
* Table is from LPC base tileset by Lanea Zimmerman (AKA Sharm)
* Distiller by Tuomo Untinen
= Fireplace =
* Tuomo Untinen
* Inspired by Lanea Zimmerman (AKA Sharm) Fireplace

View File

@ -0,0 +1,28 @@
License
-------
CC-BY-SA 3.0:
- http://creativecommons.org/licenses/by-sa/3.0/
GNU GPL 3.0:
- http://www.gnu.org/licenses/gpl-3.0.html
If you need to figure out exactly who made what please see the Liberated Pixel Cup entries.
Liberated Pixel Cup Assets:
http://opengameart.org/lpc-art-entries
LPC participants:
----------------
Johann CHARLOT
Homepage http://poufpoufproduction.fr
Email johannc@poufpoufproduction.fr
- Shoot'em up graphic kit
Recolored Leaves
William Thompson
Email: william.thompsonj@gmail.com
OpenGameArt.org: williamthompsonj

View File

@ -0,0 +1 @@
https://opengameart.org/content/lpc-leaf-recolor

View File

@ -0,0 +1 @@
https://opengameart.org/content/lpc-submissions-merged

View File

@ -0,0 +1 @@
https://opengameart.org/content/lpc-mountains

View File

@ -0,0 +1,344 @@
License
-------
CC-BY-SA 3.0:
http://creativecommons.org/licenses/by-sa/3.0/
GNU GPL 3.0:
http://www.gnu.org/licenses/gpl-3.0.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Terrain and Outside:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) - CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- barrels
- darkishgreen water
- buckets
- bridges
- cement
- cement stairs
- chests
- cup
- light dirt
- mid dirt
- dungeon
- grass1 (leftmost)
- grass2 (Middle grass)
- hole1 (left hole near lava)
- hole2 (middle hole)
- hole3 (black whole next to transparent water)
- lava
- lavarock (black dirt)
- mountains ridge (right of the water tiles)
- white rocks
- waterfall
- water/grass
- water (transparent water beside black hole)
Daniel Eddeland CC-BY-SA-3.0 / GPL 3.0
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Plowed Ground
- Water reeds
- Sand
- Sand with water
- Tall grass
- Wheat
- Young wheet (green wheat left of tall grass)
William Thompsonj
https://opengameart.org/content/lpc-sandrock-alt-colors
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- sand (near the wheat)
- sand with water
- grey dirt left of the lava)
Matthew Krohn (Makrohn)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Cave / Mountain steps originals from Lanea Zimmerman
Matthew Nash
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- stone tile (purplish color beside the dirt path bottom right corner)
Nushio
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Ice tiles
- Snow
- snow/ice
- Snow water
Casper Nilson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- grass with flowers
- stone pattern below cement
- tree stumps
- lily pads
MISSING:
Bricks / Paths above lillypads and left of barrels
The recoloing of the rocks on the left
The bigger stump
Bottom right tiles
Outside stone head and columns
Green water
Ladders
Brown path
Sewer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Outside Objects:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Tree trunks (for evergreen and oak)
- Tree Tops (for evergreen and oak)
Daniel Eddeland
(https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Farming stuff including food / crops / sack of grains
- Logs / Anvils
- Fish / boats / pier
- Bazaar / Merchant displays
- Wooden Fences
Caeless
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Shadowless veggies (originally made by Daniel Eddeland)
William Thompsonj
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- fallen leaves
Casper Nilsson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Metal Fence
- Wheelbarrows
- tent
- Gravestones
- harbor (stone platform in water)
- long boat
Barbara Rivera / C Phillips
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Leafless tree
Skorpio
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Trash / Barrel ( Top right corner)
MISSING:
Bricks bottom left
- Mushrooms need attributions
Bricks/tiles above pier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exterior:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- house (light red brick wall on far left and purple roof below it)
- house white door frame / brown door and white windows.
- signs under gold and drak brown brick house wall
Daniel Armstrong (AKA HughSpectrum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- castle walls
- castle floors
- castle outside
- castle floors outside
Xenodora CC-BY-3.0 / GPL 3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- water well
Tuomo Untinen CC-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- stone bridge
- silver windows
Casper Nilsson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Asain themed shrine including red lantern
- foodog statue
- Toro
- Cherry blossom tree
- Torii
- Grey Roof
- Flag poles
- Fancy white and black entrance
- white door
- green and white walls / roof / windows
- shrub plant in white square pot
- flower box
Steampun-a-fy: Amaris / Krusimira
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- dark purple brick near purple roof
- bronze and wood house (gold and dark brick)
- dark wooden stairs
- gold and dark chimney
- grey door
- gears
- pipes
- dark wooden windows
Leo Villeveygoux
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- white bricks (limestone wall)
Skyler Robert Collady
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Grey home assets
MISSING attributions:
Graves bottom right
Water filled boat
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Interior
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm) CC-BY-3.0 / GPL 3.0 / GPL 2.0 / OGA-BY-3.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- bookshelves (to the left of light brown chairs)
- cabinents above bookshelves
- counters (to the right of the kitchen table (between the white bathroom tiles) and bottom left by the rug.
- blue wallpaper
- kitchen furnace, pots and sink.
- country inside (blue bed and light brown chairs)
- red royal bed with white pillows.
- Mahogany kitchen table (near the dungeon bed with a black blanket)
- Yellow curtains
- Flower pot with tall pink flower
- Empty flower pots
- Chairs with gold seats (between the fireplaces)
- Fireplaces
- White and red mahogany stairs
- Double Rounded doors
- Flower vases
- Purple/Blue Tiles near white brick wall
- White brick wall
- White Columns
- Black candle-holder stand with candles
- Royal rug beside cabinents
- White stairs with runway / platform
- Grandfather clock
- Blue wallpaper with woodem trim
- Wood tiles
- Long painting
- Royal chairs ( gold seats)
- Rounded white windows
- Portrait painting
- small end / round tables
- Royal bed with red pillows
- white china
By Sharm but Commissioned by William Thompsonj
- campfire
- skeletons
- dungeon beds
- wood chairs and tables between the calderon and the fancy door rounded door
- calderon
- cobwebs
- dungeon prison wall and door/gate (beside fancy red and gold rugs)
- dirt by the dungeon beds
- rat
Daniel Armstrong (Aka HughSpectrum)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- castle light Sources (torches)
- red carpets
- grey brick top of walls
Matthew Nash
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Public Toilets
- Bathroom tiles (white and black)
Tuomo Untinen
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Pots with cover (based from Sharm's pots)
- Yellow stone floor
- Short paintings
- royal chair modification
- cupboards based on Sharm's (with china)
- small footchair
- piano
MISSING attributions:
Some bottomleft tiles
Banners
Sideways table
Stacked barrels
Stacked chess
Things to left of the pots
Some of the furniture below the beds
Some of the single beds
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Interior 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- brown stairs with blue
- Fountain
- Pool
- FLoor tiles
- Everything between top row (between toilet stalls and bookcases) down to the floor tiles
Xenodora
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Steel floor
Tuomo Untinen
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Armor and sheilds
- Cheese and bread
- Ship
Janna - CC0
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Beds
- Dressers / book shelves
- Wardrobe
Casper Nilsson
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Red and Blue stairs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Extensions Folder:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lanea Zimmerman (AKA Sharm)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
https://opengameart.org/content/lpc-adobe-building-set
https://opengameart.org/content/lpc-arabic-elements
- Adobe / Arabic - Commissioned by William Thompsonj

View File

@ -0,0 +1,12 @@
License
-------
CC-BY-SA 3.0:
- http://creativecommons.org/licenses/by-sa/3.0/
Author :
Jacques-Olivier Farcy
https://interstices.ouvaton.org
https://twitter.com/JO_Interstices

View File

@ -0,0 +1,106 @@
## Flowers / Plants / Fungi / Wood
"[LPC] Flowers / Plants / Fungi / Wood," by bluecarrot16, Guido Bos, Ivan Voirol (Silver IV), SpiderDave, William.Thompsonj, Yar, Stephen Challener and the Open Surge team (http://opensnc.sourceforge.net), Gaurav Munjal, Johann Charlot, Casper Nilsson, Jetrel, Zabin, Hyptosis, Surt, Lanea Zimmerman, George Bailey, ansimuz, Buch, and the Open Pixel Project contributors (OpenPixelProject.com).
CC-BY-SA 3.0.
Based on:
[LPC] Guido Bos entries cut up
Guido Bos
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-guido-bos-entries-cut-up
Basic map 32x32 by Silver IV
Ivan Voirol (Silver IV)
CC-BY 3.0 / GPL 3.0 / GPL 2.0
https://opengameart.org/content/basic-map-32x32-by-silver-iv
Flowers
SpiderDave
CC0
https://opengameart.org/content/flowers
[LPC] Leaf Recolor
William.Thompsonj
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-leaf-recolor
Isometric 64x64 Outside Tileset
Yar
CC-BY 3.0
https://opengameart.org/content/isometric-64x64-outside-tileset
32x32 (and 16x16) RPG Tiles--Forest and some Interior Tiles
Stephen Challener and the Open Surge team (http://opensnc.sourceforge.net)commissioned by Gaurav Munjal
CC-BY 3.0
https://opengameart.org/content/32x32-and-16x16-rpg-tiles-forest-and-some-interior-tiles
Lots of Hyptosis' tiles organized!
Hyptosis
CC-BY 3.0
https://opengameart.org/content/lots-of-hyptosis-tiles-organized
Generic Platformer Tiles
surt
CC0
http://opengameart.org/content/generic-platformer-tiles
old frogatto tile art
Guido Bos
CC0
https://opengameart.org/content/old-frogatto-tile-art
LPC: Interior Castle Tiles
Lanea Zimmerman
CC-BY-3.0 / GPL 3.0
http://opengameart.org/content/lpc-interior-castle-tiles
RPG item set
Jetrel
CC0
https://opengameart.org/content/rpg-item-set
Shoot'em up graphic kit
Johann Charlot
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/shootem-up-graphic-kit
LPC C.Nilsson
Casper Nilsson
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-cnilsson
Lots of trees and plants from OGA (DB32) tilesets pack 1
Jetrel, Zabin, Hyptosis, Surt
CC0
https://opengameart.org/content/lots-of-trees-and-plants-from-oga-db32-tilesets-pack-1
Trees & Bushes
ansimuz
CC0
https://opengameart.org/content/trees-bushes
Outdoor tiles, again
Buch <https://opengameart.org/users/buch>
CC-BY 2.0
https://opengameart.org/content/outdoor-tiles-again
16x16 Game Assets
George Bailey
CC-BY 4.0
https://opengameart.org/content/16x16-game-assets
Tuxemon tileset
Buch
CC-BY-SA 3.0
https://opengameart.org/content/tuxemon-tileset
Orthographic outdoor tiles
Buch
CC0
https://opengameart.org/content/orthographic-outdoor-tiles
OPP2017 - Jungle and temple set
OpenPixelProject.com
CC0
https://opengameart.org/content/opp2017-jungle-and-temple-set

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

View File

@ -0,0 +1,101 @@
## Medieval
[LPC] Hanging signs
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-hanging-signs
Liberated Pixel Cup (LPC) Base Assets
Lanea Zimmerman (Sharm)
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/liberated-pixel-cup-lpc-base-assets-sprites-map-tiles
[LPC] City outside
Reemax (Tuomo Untinen), Xenodora, Sharm, Johann C, Johannes Sjölund
CC-BY-SA 3.0 / GPL 3.0 / GPL 2.0
https://opengameart.org/content/lpc-city-outside
[LPC] Cavern and ruin tiles
CC-BY-SA 3.0 / GPL 3.0 / GPL 2.0
Reemax, Sharm, Hyptosis, Johann C, HughSpectrum, Redshrike, William.Thompsonj, wulax,
https://opengameart.org/node/33913
Statues & Fountains Collection
Casper Nilsson, Daniel Cook, Rayane Félix (RayaneFLX), Wolthera van Hövell tot Westerflier (TheraHedwig), Hyptosis, mold, Zachariah Husiar (Zabin), & Clint Bellanger
CC-BY-SA 3.0
https://opengameart.org/content/statues-fountains-collection
LPC C.Nilsson
Casper Nilsson
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-cnilsson
LPC Style Well
CC-BY 3.0 / GPL 3.0
Xenodora, Sharm
https://opengameart.org/content/lpc-style-well
RPG item set
Jetrel
CC0
https://opengameart.org/content/rpg-item-set
[LPC] Guido Bos entries cut up
Guido Bos
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-guido-bos-entries-cut-up
LPC Sign Post
Nemisys
CC-BY 3.0 / CC-BY-SA 3.0 / GPL 3.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-sign-post
[LPC] Signposts, graves, line cloths and scare crow
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-signposts-graves-line-cloths-and-scare-crow
[LPC] Hanging signs
Reemax
CC-BY-SA 3.0 / GPL 3.0
https://opengameart.org/content/lpc-hanging-signs
Hyptosis
Mage City Arcanos
CC0
https://opengameart.org/content/mage-city-arcanos
[LPC] Street Lamp
Curt
CC-BY 3.0
https://opengameart.org/content/lpc-street-lamp
[LPC] Misc
Lanea Zimmerman (Sharm), William.Thompsonj
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-misc
RPG Tiles: Cobble stone paths & town objects
https://opengameart.org/content/rpg-tiles-cobble-stone-paths-town-objects
Zabin, Daneeklu, Jetrel, Hyptosis, Redshrike, Bertram.
CC-BY-SA 3.0
[LPC] Farming tilesets, magic animations and UI elements
https://opengameart.org/content/lpc-farming-tilesets-magic-animations-and-ui-elements
Daniel Eddeland (daneeklu)
CC-BY-SA 3.0 / GPL 3.0
RPG item set
Jetrel
CC0
https://opengameart.org/content/rpg-item-set
RPG Indoor Tileset: Expansion 1
Redshrike
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/rpg-indoor-tileset-expansion-1
[LPC] Dungeon Elements
Lanea Zimmerman (Sharm), William.Thompsonj
CC-BY 3.0 / GPL 3.0 / GPL 2.0 / OGA-BY 3.0
https://opengameart.org/content/lpc-dungeon-elements

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

706
maps/Tuto/tutoV3.json Normal file

File diff suppressed because one or more lines are too long

99
maps/tests/goToPage.json Normal file
View File

@ -0,0 +1,99 @@
{ "compressionlevel":-1,
"height":20,
"infinite":false,
"layers":[
{
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"height":20,
"id":2,
"name":"start",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":20,
"x":0,
"y":0
},
{
"data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"height":20,
"id":4,
"name":"floor",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":20,
"x":0,
"y":0
},
{
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"height":20,
"id":3,
"name":"popupZone",
"opacity":1,
"properties":[
{
"name":"zone",
"type":"string",
"value":"popUpGoToPageZone"
}],
"type":"tilelayer",
"visible":true,
"width":20,
"x":0,
"y":0
},
{
"draworder":"topdown",
"id":5,
"name":"floorLayer",
"objects":[
{
"height":59,
"id":1,
"name":"popUp",
"rotation":0,
"type":"",
"visible":true,
"width":152,
"x":247,
"y":11
}],
"opacity":1,
"type":"objectgroup",
"visible":true,
"x":0,
"y":0
}],
"nextlayerid":6,
"nextobjectid":2,
"orientation":"orthogonal",
"properties":[
{
"name":"script",
"type":"string",
"value":"goToPageScript.js"
}],
"renderorder":"right-down",
"tiledversion":"1.5.0",
"tileheight":32,
"tilesets":[
{
"columns":11,
"firstgid":1,
"image":"tileset1.png",
"imageheight":352,
"imagewidth":352,
"margin":0,
"name":"tileset1",
"spacing":0,
"tilecount":121,
"tileheight":32,
"tilewidth":32
}],
"tilewidth":32,
"type":"map",
"version":1.5,
"width":20
}

View File

@ -0,0 +1,49 @@
var zoneName = "popUpGoToPageZone";
var urlPricing = "https://workadventu.re/pricing";
var urlGettingStarted = "https://workadventu.re/getting-started";
var isCoWebSiteOpened = false;
WA.onChatMessage((message => {
WA.sendChatMessage('Poly Parrot says: "'+message+'"', 'Poly Parrot');
}));
WA.onEnterZone(zoneName, () => {
WA.openPopup("popUp","Open Links",[
{
label: "Open Tab",
className: "popUpElement",
callback: (popup => {
WA.openTab(urlPricing);
popup.close();
})
},
{
label: "Go To Page", className : "popUpElement",
callback:(popup => {
WA.goToPage(urlPricing);
popup.close();
})
}
,
{
label: "openCoWebSite", className : "popUpElement",
callback:(popup => {
WA.openCoWebSite(urlPricing);
isCoWebSiteOpened = true;
popup.close();
})
}]);
})
WA.onLeaveZone(zoneName, () => {
if (isCoWebSiteOpened) {
WA.closeCoWebSite();
isCoWebSiteOpened = false;
}
})
WA.onLeaveZone('popupZone', () => {
})

View File

@ -1,7 +1,37 @@
console.log('SCRIPT LAUNCHED'); console.log('SCRIPT LAUNCHED');
WA.sendChatMessage('Hi, my name is Poly and I repeat what you say!', 'Poly Parrot'); //WA.sendChatMessage('Hi, my name is Poly and I repeat what you say!', 'Poly Parrot');
var isFirstTimeTuto = false;
var textFirstPopup = 'Hey ! This is how to open start a discussion with someone ! You can be 4 max in a booble';
var textSecondPopup = 'You can also use the chat to communicate ! ';
var targetObjectTutoBubble ='tutoBobble';
var targetObjectTutoChat ='tutoChat';
var popUpExplanation = undefined;
function launchTuto (){
WA.openPopup(targetObjectTutoBubble, textFirstPopup, [
{
label: "Next",
className: "popUpElement",
callback: (popup) => {
popup.close();
WA.openPopup(targetObjectTutoChat, textSecondPopup, [
{
label: "Open Chat",
className: "popUpElement",
callback: (popup1) => {
WA.sendChatMessage("Hey you can talk here too ! ", 'WA Guide');
popup1.close();
WA.restorePlayerControl();
}
}
])
}
}
]);
WA.disablePlayerControl();
}
WA.onChatMessage((message => { WA.onChatMessage((message => {
console.log('CHAT MESSAGE RECEIVED BY SCRIPT'); console.log('CHAT MESSAGE RECEIVED BY SCRIPT');
WA.sendChatMessage('Poly Parrot says: "'+message+'"', 'Poly Parrot'); WA.sendChatMessage('Poly Parrot says: "'+message+'"', 'Poly Parrot');
@ -11,8 +41,7 @@ WA.onEnterZone('myTrigger', () => {
WA.sendChatMessage("Don't step on my carpet!", 'Poly Parrot'); WA.sendChatMessage("Don't step on my carpet!", 'Poly Parrot');
}) })
WA.onLeaveZone('myTrigger', () => { WA.onLeaveZone('popupZone', () => {
WA.sendChatMessage("Thanks!", 'Poly Parrot');
}) })
WA.onEnterZone('notExist', () => { WA.onEnterZone('notExist', () => {
@ -20,24 +49,31 @@ WA.onEnterZone('notExist', () => {
}) })
WA.onEnterZone('popupZone', () => { WA.onEnterZone('popupZone', () => {
WA.openPopup('foobar', 'This is a test message. Hi!', [ WA.displayBubble();
if (!isFirstTimeTuto) {
isFirstTimeTuto = true;
launchTuto();
}
else popUpExplanation = WA.openPopup(targetObjectTutoChat,'Do you want to review the explanation ? ', [
{ {
label: "Close", label: "No",
className: "normal", className: "popUpElementReviewexplanation",
callback: (popup) => { callback: (popup) => {
popup.close(); popup.close();
} }
}, },
{ {
label: "Next", label: "Yes",
className: "success", className: "popUpElementReviewexplanation",
callback: (popup) => { callback: (popup) => {
popup.close(); popup.close();
launchTuto();
} }
} }
]) ])
}) });
/*WA.onLeaveZone('popupZone', () => { WA.onLeaveZone('popupZone', () => {
WA.sendChatMessage("Thanks!", 'Poly Parrot'); if (popUpExplanation !== undefined) popUpExplanation.close();
})*/ WA.removeBubble();
})

View File

@ -75,15 +75,26 @@
"name":"floorLayer", "name":"floorLayer",
"objects":[ "objects":[
{ {
"height":120.377012261239, "height":147.135497146101,
"id":1, "id":1,
"name":"myPopup", "name":"myPopup2",
"rotation":0, "rotation":0,
"type":"", "type":"",
"visible":true, "visible":true,
"width":162.815914588373, "width":104.442827410047,
"x":77.4042872633247, "x":142.817125079855,
"y":61.1226958044874 "y":147.448134926559
},
{
"height":132.434722966794,
"id":2,
"name":"myPopup1",
"rotation":0,
"type":"",
"visible":true,
"width":125.735549178518,
"x":13.649632619596,
"y":50.8502491249093
}], }],
"opacity":1, "opacity":1,
"type":"objectgroup", "type":"objectgroup",
@ -92,7 +103,7 @@
"y":0 "y":0
}], }],
"nextlayerid":8, "nextlayerid":8,
"nextobjectid":2, "nextobjectid":3,
"orientation":"orthogonal", "orientation":"orthogonal",
"properties":[ "properties":[
{ {
@ -101,7 +112,7 @@
"value":"script.js" "value":"script.js"
}], }],
"renderorder":"right-down", "renderorder":"right-down",
"tiledversion":"1.3.3", "tiledversion":"1.4.3",
"tileheight":32, "tileheight":32,
"tilesets":[ "tilesets":[
{ {
@ -119,6 +130,6 @@
}], }],
"tilewidth":32, "tilewidth":32,
"type":"map", "type":"map",
"version":1.2, "version":1.4,
"width":10 "width":10
} }