NetworkProtocolNotes

From MountainfortWiki

Jump to: navigation, search
(Created page with "* connecting webgl+javascript in browser via html5 websocket (tcp) to lua/c++ server == movement & show/hide/create/destroy == * player * enemies/npcs * items * tiles (unit box...")
(idea : generic gui system for serverside scripting with thin client)
 
Line 1: Line 1:
 +
== general ==
 +
 +
* [[NetworkProtocolSpec|protocol specification]]
 +
* connecting webgl+javascript in browser via html5 websocket (tcp) to lua/c++ server
* connecting webgl+javascript in browser via html5 websocket (tcp) to lua/c++ server
-
== movement & show/hide/create/destroy ==
+
* websocket(tcp) maybe doesn't support binary data but only utf8 "text" blocks
 +
* jason encoding for structured network messages might be good for speed on clientside (javascript slow?) and utf8 as well as debugging
 +
* 8x8x8 terrain chunk might be transferred as 512byte long utf8 text string, if blocktype is encoded as printable utf8 char
 +
 +
== map, show/hide/create/destroy, movement, server-sent content ==
 +
 +
* mapdata (update) : tile by tile (chunk) or single tile update
 +
** each tile consists of 1 byte tiletype info and 1 byte parameter (4 bits) + lighting (4 bits) info
 +
** collision (solid/empty/liquid/stair-or-ramp), texture is tiletype based
 +
** special infos like direction or liquid fill level is handled via the extra parameter
* player
* player
-
* enemies/npcs
+
* enemies/npcs (mobiles)
-
* items
+
** actions/animations
-
* tiles (unit box) and whole map blocks
+
* items (on ground and in backpack/inventory. pickup?)
 +
* buildings (look like multiple blocks but might be highlighted/tooltipped in client somehow)
* particle effects?
* particle effects?
 +
** area effects like rain/snow?
 +
* time/weather
 +
* sound/music effects
 +
* chat
 +
* clientinteraction sends the current position, direction and the target tile position + face
 +
* server sends update interval for looking (gestures for multiplayer) and targetting (default:0.1s) during tool-usage
 +
* client sends targetting info : (A:starting point + direction  AND B: target tile pos + side) while mouse is down (interval sent from server)
 +
* client sends looking direction regularly (interval sent from server)
 +
 +
* types for sound/music
 +
 +
* tiles (box) types / terraintypes : texture url, name (tooltip) properties
 +
 +
* possibly animated or multi-part models :  (probably obsolete by model type below)
 +
** monster/creature "models" (pixel art flat sprites first, later maybe simple modelling from big-pixel textures and rect-blocks?)
 +
** player skin ?
 +
 +
* model type : vertex+index array (as json or .js file) and texture
 +
** prefabs:block, double-culling-block(foliage), diamond, sphere, cylinder, ingot? (texcoords as param, in case atlas is used: neccessary for terrain)
 +
** can be used by :
 +
*** "torch" terraintype items or similar (texture=atlas) (tree-round? foliage? mine-cart-tracks? ladders? stairs?) terrain-type-parameter -> different models?
 +
*** items on ground ?
 +
*** player wearable equipment (param at which bodypart the model is attached)
 +
*** mobiles (ai-enemies, animals)
 +
*** vehicles (boats, wagons, mining carts)
 +
*** building parts
 +
*** particles ? (turn to cam?)
 +
 +
* building type (1x1x1, 2x2x1,2x2x2, 3x3x3,3x3x2,3x3x1 ...)
 +
** tooltip
 +
** terraintypes (or model types) for parts
 +
 +
* image type ("sprite"?)
 +
** used by gui : texture name +uv start+ dimension(uv) + dimension on screen
 +
** interesting for particles ? (nah, atlas)
 +
 +
* icon type = image id + tooltip  (e.g. for generic multi-choice dialog)... or negative typeid as value makes this unneccessary?
 +
 +
* dialogs (should be moved to gui section below? later)
 +
** can contain text (including icons)
 +
** text input dialog (writing books, signs, player name)
 +
** inventory (quickbar?)
 +
** crafting : list of thinks one can produce (with tooltip and costs, marked red or something like this if you dont have enought ressources) in your backpack
 +
 +
== vehicles ? ==
 +
 +
* df : wagons, minecraft : ships, uo : big ships ?
== gui ==
== gui ==
Line 13: Line 74:
* chat
* chat
* playerlist ?
* playerlist ?
-
* building/workshop crafting items available ? (required resources)
+
* building placement (list of available buildings and required resources)
 +
* items crafting inside buildings (list of available items and required resources)
 +
* other building functions (switches/levers,heal/sleep?)
-
== construction ==
+
* generic multi-choice dialog : title text + entries (image + tooltip + text, (color, dimensions, multiple images for ressource list?))
 +
** idea : per entry list of  image,text,image,text,....  can be used for ressource list  (probably needs 2d image type with tex+uv start+dimension, see server-sent-content above)
 +
** usable by :  building construction, crafting,  multiplayer-voting and similar (kick, mapchange, save...)
 +
 
 +
=== idea : generic gui system for serverside scripting with thin client ===
 +
 
 +
* element = { x,y, w,h, img(url) / text / textentry / checkbox , returncode on click , tooltip on mouseover }
 +
* thin client -> doesn't have to understand concepts like "choose from list", all is in server -> scriptable
 +
* maybe for serverside options (sight range, map selection ...)
 +
* server can send CloseDialog(id) and UpdateDialog(id,newdata)
 +
<b>SCRAPPED</b>, problems : things like radar etc that should update every frame, too expensive via network
 +
 
 +
== player actions ==
 +
 
 +
* use selected tool on environment (client sends which block or only direction?)
 +
** weapons : direction (ranged)
 +
** place blocks / construct walls
 +
* activate object ? (switches)
 +
* drop items (pickup automatic?)
 +
* construct building (initiates server sent list of available buildingtypes and materials)
 +
* use building (starts crafting gui)
 +
 
 +
=== construction ===
* blocks
* blocks
* buildings/workshops
* buildings/workshops
 +
** different sizes but simple shapes : 1x1, 2x2, 3x3 with height 1 each
* crafting
* crafting
 +
 +
= gameplay notes =
 +
(different wiki page, just noting from chat)
 +
 +
* simple axe : stoneage like : use bare hands on : ground->small stones, tree->sticks, combine:stone-axe, slow but gets real wood
 +
* mining stone should not be so easily achievable, need pickaxe : metal 
 +
** 1 pick total per TEAM as start equip? npc trade?  nope =)
 +
** a bit ore findable in soil layers ? (burn wood->coal ->smelt ore ->metal : stone anvil + coal + stone hammer -> crude metal tools)
 +
*** metal hammer, metal anvil : better tools
 +
 +
= naming conventions =
 +
* "tile" is a unit box, used for terrain and similar, 1x1x1
 +
* "chunk" is a group of 8x8x8 tiles
 +
* the term "block" is avoided as it is ambigious and could be understood as 1x1x1 or 8x8x8
 +
 +
= gameplay concept =
 +
 +
* multiplayer, roughly 4 players, match lasts roughly 1 hour, but can be saved/loaded/continued later
 +
* start with nothing, survive & build from scratch (no start items)
 +
* build fortress and defend against sieges (after certain time, regular?) and individual enemies
 +
* maybe dungeon-heart(movable item?) / king that needs to be defended to create motivation for defense rather than escape
 +
* sandbox, play with water/magma simulation
 +
 +
= tasks/interest distribution? =
 +
 +
* hagish : water-simulation, pathfinding (multithreading)?  c++  , ext lib input browser independent keydown
 +
* ghoul : lua-scripted events, e.g. tree falling if lumberjacked, webgl client (but quick&dirty,lua>js), network?
 +
 +
= todo : planning =
 +
 +
* gui system detailed net messages
 +
* server : multithreading data access (water sim + pathfinding mainly, double-buffer old=readonly to avoid locking)
 +
* physic resync / blocking / cheatprotect ? (later)
 +
* player appearance / animation (later)

Latest revision as of 19:22, 30 April 2011

Personal tools