From a8fb9c3e5ca4e089b8161b0e0f0150c1100d68c3 Mon Sep 17 00:00:00 2001 From: jak1 Date: Sun, 1 Aug 2021 17:02:17 +0200 Subject: added some more features, and fixed some bugs (was to lazy to commit every change *hides) --- app.js | 467 ++- client/assets/maps/002-1.tmx | 130 + client/assets/npcs.xml | 20 + client/assets/tilesets/2006__desert1.png | Bin 0 -> 295336 bytes client/assets/tilesets/2006__desert1.tsx | 4 + client/assets/tilesets/2006__desert2.png | Bin 0 -> 179534 bytes client/assets/tilesets/2006__desert2.tsx | 4 + client/assets/tilesets/2006__desert_x2.png | Bin 0 -> 18093 bytes client/assets/tilesets/2006__desert_x3.png | Bin 0 -> 21957 bytes client/assets/tilesets/collision.png | Bin 0 -> 177 bytes client/consts.js | 12 +- client/index.html | 187 +- client/lib/socket.io.js | 6081 ++++++++++++++++++++++++++++ client/lib/socket.io.js.map | 1 + client/lib/socket.io.min.js | 7 + client/lib/socket.io.min.js.map | 1 + client/lib/socket.io.msgpack.min.js | 7 + client/lib/socket.io.msgpack.min.js.map | 1 + client/tmxloader.js | 190 +- docs/ChangeLog | 3 + docs/ClassStructure.md | 15 + server/Entities/Bullet.js | 83 + server/Entities/Entity.js | 28 + server/Entities/Player.js | 156 + 24 files changed, 7071 insertions(+), 326 deletions(-) create mode 100644 client/assets/maps/002-1.tmx create mode 100644 client/assets/npcs.xml create mode 100644 client/assets/tilesets/2006__desert1.png create mode 100644 client/assets/tilesets/2006__desert1.tsx create mode 100644 client/assets/tilesets/2006__desert2.png create mode 100644 client/assets/tilesets/2006__desert2.tsx create mode 100644 client/assets/tilesets/2006__desert_x2.png create mode 100644 client/assets/tilesets/2006__desert_x3.png create mode 100644 client/assets/tilesets/collision.png create mode 100644 client/lib/socket.io.js create mode 100644 client/lib/socket.io.js.map create mode 100644 client/lib/socket.io.min.js create mode 100644 client/lib/socket.io.min.js.map create mode 100644 client/lib/socket.io.msgpack.min.js create mode 100644 client/lib/socket.io.msgpack.min.js.map create mode 100644 docs/ChangeLog create mode 100644 docs/ClassStructure.md create mode 100644 server/Entities/Bullet.js create mode 100644 server/Entities/Entity.js create mode 100644 server/Entities/Player.js diff --git a/app.js b/app.js index 42f1e75..d219310 100644 --- a/app.js +++ b/app.js @@ -1,3 +1,4 @@ +var consts = require('./client/consts') var mongojs = require("mongojs"); var db = mongojs("localhost:27017/ThePixelWorld", ["account","progress"]); @@ -14,229 +15,12 @@ app.use('/client', express.static(__dirname + '/client')); serv.listen(2000); console.log("Server started."); -var DEBUG = true; var SOCKET_LIST = {}; -var Entity = function(){ - var self = { - x:250, - y:250, - map: '001-1', - speedX:0, - speedY:0, - id:"", - } - self.update = function(){ - self.updatePosition(); - } - self.updatePosition = function(){ - self.x += self.speedX; - self.y += self.speedY; - } - self.getDistance = function(pt){ - return Math.sqrt(Math.pow(self.x-pt.x,2)) + Math.pow(self.y-pt.y,2); - } - return self; -} - -var Player = function(id){ - var self = Entity(); - self.id = id; - self.number = "" + Math.floor(10 * Math.random()); - self.pressingRight = false; - self.pressingLeft = false; - self.pressingUp = false; - self.pressingDown = false; - self.pressingAttack = false; - self.mouseAngle = 0; - self.maxSpeed = 10; - self.hp = 10; - self.hpMax = 10; - self.score = 0; - - var super_update = self.update; - self.update = function(){ - self.updateSpeed(); - super_update(); - if(self.pressingAttack){ - self.shootBullet(self.mouseAngle); - } - } - - self.shootBullet = function(angle){ - var b = Bullet(self.id, angle); - b.x = self.x - b.y = self.y - } - - self.updateSpeed = function(){ - if(self.pressingRight) - self.speedX = self.maxSpeed; - else if(self.pressingLeft) - self.speedX = -self.maxSpeed; - else - self.speedX = 0; - - if(self.pressingUp) - self.speedY = -self.maxSpeed; - else if(self.pressingDown) - self.speedY = self.maxSpeed; - else - self.speedY = 0; - } - - self.getInitPack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - number:self.number, - hp:self.hp, - hpMax:self.hpMax, - score:self.score, - }; - } - self.getUpdatePack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - score:self.score, - hp:self.hp, - }; - } - Player.list[id] = self; - initPack.player.push(self.getInitPack()); - return self; -} - -Player.list = {}; -Player.onConnect = function(socket){ - var player = Player(socket.id); +const Entity = require('./server/Entities/Entity') +const Player = require('./server/Entities/Player') +const Bullet = require('./server/Entities/Bullet') - socket.on('keyPress', function(data){ - if (data.inputId === 'left') - player.pressingLeft = data.state; - else if (data.inputId === 'right') - player.pressingRight = data.state; - else if (data.inputId === 'up') - player.pressingUp = data.state; - else if (data.inputId === 'down') - player.pressingDown = data.state; - else if (data.inputId === 'attack') - player.pressingAttack = data.state; - else if (data.inputId === 'mouseAngle') - player.mouseAngle = data.state; - }); - - socket.emit('init',{ - selfId:socket.id, - player:Player.getAllInitPack(), - bullet:Bullet.getAllInitPack(), - }); -} - -Player.getAllInitPack = function(){ - var players = []; - for(var i in Player.list) - players.push(Player.list[i].getInitPack()); - return players; -} - -Player.onDisconnect = function(socket){ - delete Player.list[socket.id]; - removePack.player.push(socket.id); -} - -Player.update = function(){ - var pack = []; - for(var i in Player.list){ - var player = Player.list[i]; - player.update(); - pack.push(player.getUpdatePack()); - } - return pack; -} - -var Bullet = function(parent, angle) { - var self = Entity(); - self.id = Math.random(); - self.speedX = Math.cos(angle/180*Math.PI) *10; - self.speedY = Math.sin(angle/180*Math.PI) *10; - self.parent = parent; - self.timer = 0; - self.toRemove = false; - var super_update = self.update; - self.update = function(){ - if (self.timer++ > 100) - self.toRemove = true; - super_update(); - for (var i in Player.list){ - var p = Player.list[i]; - if(self.getDistance(p) < 32 && self.parent !== p.id){ - p.hp -= 1; - if (p.hp <= 0){ - var shooter = Player.list[self.parent]; - if (shooter) - shooter.score += 1; - p.hp = p.hpMax; - p.x = Math.random() * 500; - p.y = Math.random() * 500; - - } - self.toRemove = true; - } - } - } - - self.getInitPack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - }; - } - - self.getUpdatePack = function() { - return { - id:self.id, - x:self.x, - y:self.y, - map:self.map, - }; - } - - Bullet.list[self.id] = self; - initPack.bullet.push(self.getInitPack()); - return self; -} - -Bullet.list= {}; - -Bullet.update = function(){ - var pack = []; - for(var i in Bullet.list){ - var bullet = Bullet.list[i]; - bullet.update(); - if(bullet.toRemove){ - delete Bullet.list[i]; - removePack.bullet.push(bullet.id); - } - else - pack.push(bullet.getUpdatePack()); - } - return pack; -} - -Bullet.getAllInitPack = function(){ - var bullets = []; - for(var i in Bullet.list) - bullets.push(Bullet.list[i].getInitPack()); - return bullets; -} var isValidPassword = function(data, cb){ db.account.find({username:data.username, password:data.password},function(err,res){ @@ -262,6 +46,21 @@ var addUser = function(data, cb){ }); } +var updateGMLevel = function(username, lvl, cb){ + db.account.update({username:username},{$set:{gmlvl:lvl}},function(err){ + cb(); + }); +} + +var hasPermission = function(username, req, cb){ + db.account.find({username:username},function(err,res){ + if (res[0].gmlvl >= req) + cb(true); + else + cb(false); + }); +} + var io = require('socket.io')(serv, {}); io.sockets.on('connection', function(socket){ socket.id = Math.random(); @@ -270,7 +69,7 @@ io.sockets.on('connection', function(socket){ socket.on('signIn', function(data){ isValidPassword(data, function(res){ if (res){ - Player.onConnect(socket); + Player.Player.onConnect(socket, data.username); socket.playerName = data.username; socket.emit('signInResponse', {success:true}); } else { @@ -292,40 +91,226 @@ io.sockets.on('connection', function(socket){ socket.on('disconnect', function(){ delete SOCKET_LIST[socket.id]; - Player.onDisconnect(socket); + Player.Player.onDisconnect(socket); }); socket.on('sendMsgToServer', function(data){ - var playerName = ("" + socket.id).slice(2,7); - for (var i in SOCKET_LIST){ - SOCKET_LIST[i].emit('addToChat', socket.playerName + ': ' + data); + if (data) + for (var i in SOCKET_LIST){ + SOCKET_LIST[i].emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + ': ' + data, tab: "world"}); + } + }); + + socket.on('command', function(data){ + servermsg = "Server: "; + modifyer = data[0]; + command = data.slice(1).split(' '); + + // TODO: has permission + //staff cmd + if(modifyer === '@'){ + hasPermission(socket.playerName, 1, function(res){ + if (res) + switch (command[0]) { + // @bc (args: ) + case "bc": + res = joinArgs(command, 1, 0); + for (var i in SOCKET_LIST){ + SOCKET_LIST[i].emit('addToChat', {ctimestamp: getTimeStamp(0), content: "GlobalAnnounce: " + res + "", tab: "world"}); + } + break; + + // @who (args: none) + case "who": + for (var i in Player.Player.list){ + servermsg+=Player.Player.list[i].playerName + ", "; + } + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg, tab:"any"}); + break; + + // @where (args:[playername]) + case "where": + found = false; + if(command.length <= 1) + command[1] = socket.playerName; + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName.includes(command[1])){ + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Player.Player.list[i].playerName + ": " + Player.Player.list[i].map + " [" + Player.Player.list[i].x + ", " + Player.Player.list[i].y + "]",tab: "any"}); + found = true; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"}); + break; + + // @goto (args:) + case "goto": + found = false; + if(command.length <= 1) + command[1] = socket.playerName; + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName.includes(command[1])){ + Player.Player.list[socket.id].map = Player.Player.list[i].map; + Player.Player.list[socket.id].x = Player.Player.list[i].x; + Player.Player.list[socket.id].y = Player.Player.list[i].y; + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Warped to " + Player.Player.list[i].playerName, tab: "any"}); + found = true; + break; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab:"any"}); + break; + + // @recall (args:) + case "recall": + found = false; + if(command.length <= 1) + command[1] = socket.playerName; + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName.includes(command[1])){ + Player.Player.list[i].map = Player.Player.list[socket.id].map; + Player.Player.list[i].x = Player.Player.list[socket.id].x; + Player.Player.list[i].y = Player.Player.list[socket.id].y; + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Recalled " + Player.Player.list[i].playerName + " to you.", tab: "any"}); + SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "You were Recalled from " + socket.playerName, tab: "any"}); + found = true; + break; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"}); + break; + + // @setgm (args: ) + case "setgm": + hasPermission(socket.playerName, 99, function(res){ + if (res) + updateGMLevel(command[1],parseInt(command[2]), function(){ + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "GM level set.", tab:"any"}); + }); + else + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"}); + }); + break; + default: + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Command not found.", tab: "any"}); + break; + } + else{ + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"}); + } + }); + } + + // player cmd + else if(modifyer === '/'){ + switch (command[0]) { + // /who (args: none) + case "who": + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Object.keys(Player.Player.list).length + " Players Online.", tab: "any"}); + break; + + // /where (args: none) + case "where": + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + Player.Player.list[socket.id].playerName + ": " + + Player.Player.list[socket.id].map + " [" + Player.Player.list[socket.id].x + ", " + Player.Player.list[socket.id].y + "]", tab: "any"}); + + break; + + // /whisper (args: ) + case "w": + case "whisper": + found = false; + + for (var i in Player.Player.list){ + if (Player.Player.list[i].playerName == command[1]){ + res = joinArgs(command, 2, 0); + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + " : " + res, tab: Player.Player.list[i].playerName}); + SOCKET_LIST[Player.Player.list[i].id].emit('addToChat', {ctimestamp: getTimeStamp(0), content: socket.playerName + ": " + res, tab: socket.playerName}); + found = true; + break; + } + } + if (!found) + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Player not found", tab: "any"}); + break; + + default: + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "Command not found.", tab: "any"}); + break; + } + } + + // guild commands + else if(modifyer === '#'){ + + } + // party commands + else if(modifyer === '.'){ + + } + // help commands + else if(modifyer === '?'){ + // ? + } + else{ + // this should never happen... } }); - + socket.on('evalServer', function(data){ - if(DEBUG){ - socket.emit('evalAnswer', eval(data)); - } + servermsg = "Server: "; + hasPermission(socket.playerName, 80, function(res){ + if (res) + socket.emit('evalAnswer', eval(data)); + else + socket.emit('addToChat', {ctimestamp: getTimeStamp(0), content: servermsg + "you dont have permission to use this command!", tab: "any"}); + }); }); }); -var initPack = {player:[], bullet:[]}; -var removePack = {player:[], bullet:[]}; - +// erm... the game loop setInterval(function(){ var pack = { - player:Player.update(), - bullet:Bullet.update() + player: Player.Player.update(), + bullet: Bullet.Bullet.update() } for(var i in SOCKET_LIST){ var socket = SOCKET_LIST[i]; - socket.emit('init', initPack); + socket.emit('init', Entity.initPack); socket.emit('update', pack); - socket.emit('remove', removePack); + socket.emit('remove', Entity.removePack); } - initPack.player = []; - initPack.bullet = []; - removePack.player = []; - removePack.bullet = []; + Entity.initPack.player = []; + Entity.initPack.bullet = []; + Entity.removePack.player = []; + Entity.removePack.bullet = []; + +}, 1000/25); + +//removes (number)remArgsBefore and (number)remArgsAfter from argument array/list +joinArgs = function(argsList, remArgsBefore, remArgsAfter){ + var res = ""; + for(var i = 0; i + + + + + + + + + + +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,47,48,0,0,63,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,38,0,40,0,0,0,0,0,63,0,0,0,0,0,0,0, +0,0,0,0,54,55,56,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,342,343,344,0,0,0,0,0,0, +0,0,0,0,59,0,0,364,355,356,0,358,359,360,0,362,363,364,0,0, +0,0,0,0,0,0,0,380,371,372,0,358,359,360,0,378,379,380,0,0, +0,0,62,0,0,0,0,0,342,343,343,407,359,360,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,358,359,359,359,359,360,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,374,375,375,375,375,376,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,31,32,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,22,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,259,260,261,262,263,264,265,266,267,0,0,0, +0,0,0,0,0,0,0,0,275,276,277,278,279,280,281,282,283,0,0,0, +0,0,0,0,0,0,0,300,291,292,293,294,295,296,297,298,299,300,0,0, +0,0,0,0,0,0,0,316,307,308,309,310,311,312,313,314,315,316,0,0, +0,0,0,0,0,0,0,332,323,324,325,326,327,328,329,330,331,332,0,0, +0,0,0,0,0,0,0,348,339,340,341,0,0,0,345,346,347,348,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,258,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,258,258,0,0,258,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,258,258,258,0,0,0,0,0,258,0,0,0,0,0,0,0, +0,0,0,0,258,258,258,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,258,0,0,258,258,258,0,0,0,0,0,258,258,258,0,0, +0,0,0,0,0,0,0,258,258,258,0,0,0,0,0,258,258,258,0,0, +0,0,258,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + diff --git a/client/assets/npcs.xml b/client/assets/npcs.xml new file mode 100644 index 0000000..3238114 --- /dev/null +++ b/client/assets/npcs.xml @@ -0,0 +1,20 @@ + + + + + + + + #hidden + Chest + Girl 1 + Boy 1 + \ No newline at end of file diff --git a/client/assets/tilesets/2006__desert1.png b/client/assets/tilesets/2006__desert1.png new file mode 100644 index 0000000..5813119 Binary files /dev/null and b/client/assets/tilesets/2006__desert1.png differ diff --git a/client/assets/tilesets/2006__desert1.tsx b/client/assets/tilesets/2006__desert1.tsx new file mode 100644 index 0000000..b062249 --- /dev/null +++ b/client/assets/tilesets/2006__desert1.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/client/assets/tilesets/2006__desert2.png b/client/assets/tilesets/2006__desert2.png new file mode 100644 index 0000000..98a8740 Binary files /dev/null and b/client/assets/tilesets/2006__desert2.png differ diff --git a/client/assets/tilesets/2006__desert2.tsx b/client/assets/tilesets/2006__desert2.tsx new file mode 100644 index 0000000..7db0966 --- /dev/null +++ b/client/assets/tilesets/2006__desert2.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/client/assets/tilesets/2006__desert_x2.png b/client/assets/tilesets/2006__desert_x2.png new file mode 100644 index 0000000..8b14d63 Binary files /dev/null and b/client/assets/tilesets/2006__desert_x2.png differ diff --git a/client/assets/tilesets/2006__desert_x3.png b/client/assets/tilesets/2006__desert_x3.png new file mode 100644 index 0000000..5453761 Binary files /dev/null and b/client/assets/tilesets/2006__desert_x3.png differ diff --git a/client/assets/tilesets/collision.png b/client/assets/tilesets/collision.png new file mode 100644 index 0000000..9486abf Binary files /dev/null and b/client/assets/tilesets/collision.png differ diff --git a/client/consts.js b/client/consts.js index 0e0e28c..242857d 100644 --- a/client/consts.js +++ b/client/consts.js @@ -1,8 +1,16 @@ -const WIDTH = 500; -const HEIGHT = 500; +// game settings +const WIDTH = 500; +const HEIGHT = 500; +// directions +const DIR_DOWN = 0; +const DIR_LEFT = 1; +const DIR_UP = 2; +const DIR_RIGHT = 4; + +// error codes const CONNECTION_LOST = 10001; \ No newline at end of file diff --git a/client/index.html b/client/index.html index c77e929..0d576d8 100644 --- a/client/index.html +++ b/client/index.html @@ -1,8 +1,23 @@ - + ThePixelWorld +
Username:
Password:
@@ -19,8 +34,9 @@ To disable the limit, set it to 0.

News:

- I have some trouble while parsing tmx maps.
- currently we are using just a sprite file as "map" :D
+ tmx maps loading and rendering nearly done, beside collision system.
+ basic chat system (guild/party/... wip) {may also implement an api for irc usage?}
+ every player has a name drawn above there head now.

ToDo

to much, and to lazy to write it down *blush*
@@ -28,25 +44,34 @@ +