Archive for the ‘Eulora’ Category

Cutting through the Tangles (Notes on Graphics in Eulora, VII)

Friday, December 6th, 2019

Eulora (S.MG) - Taking a Different Sort of Stock

Tuesday, November 5th, 2019

Pretty Petty Particles (Notes on Graphics in Eulora, VI)

Friday, September 27th, 2019

Eulora Client Data Hierarchy v2.0

Saturday, September 14th, 2019

A Summer's Summary and Next Steps in Eulora

Thursday, September 5th, 2019

The Widgeting Paws of Pointerism (Notes on Graphics in Eulora, V)

Tuesday, August 6th, 2019

Naked Models (Notes on Graphics in Eulora, IV)

Wednesday, July 24th, 2019

The Mirror Land (Notes on Graphics for Eulora, III)

Wednesday, July 17th, 2019

The Rocky Moon (Notes on Graphics for Eulora, II)

Monday, July 8th, 2019

Notes on Graphics for Eulora

Sunday, June 30th, 2019

Eulora Client Hierarchy of Data Draft

Tuesday, June 11th, 2019

Eulora's Client Core: The Dedicated Requester

Monday, May 27th, 2019

Eulora's Client Core - Basic Docs

Saturday, May 4th, 2019

Inconsiderate Considerations or a Tiny Euloran Dataset on Blueprints

Sunday, March 3rd, 2019

Eulora's Own CR50

Tuesday, June 26th, 2018

Chasing the Elusive Euloran Quality

Sunday, June 10th, 2018

The Lack of Dust - A Very Euloran Problem

Tuesday, June 5th, 2018

A Tiny Stab at a Little Pricing Problem

Thursday, May 24th, 2018

RFC: Eulora's Communication Protocol (EuComms)

Tuesday, April 17th, 2018 response is a "Set of Serpent Keys" (A.1.1)

  • int8 - number of keys requested;
  • int8 - value 1 for server use, 2 for client use, anything else undefined currently.

A.1.3 Choose Serpent Key

  • int32 - ID of the key that will be used for communications from now on (depending on the key's set, it'll be used for server's or client's messages).

A.1.4 Burn & Choose Serpent Key

  • int32 - ID of the key to remove from usable sets;
  • int32 - ID of the key to use for future comms;

A.1.5 Unknown/Malformed Message received

  • int64 - id of message that was not understood.

A.2 File Transfer
A.2.1 File Information

  • int8 - length of file name in octets, n
  • n*char - file name (string)
  • int8 - file type
  • int64 - octets per unit
  • int64 - file size in unit given above
  • int32 - file hash (keccak)

A.2.2 File Content

  • int32 - file hash (keccak)
  • int64 - octets per unit
  • int64 - file size in unit given above
  • unit*file_size*int8 - file content

A.2.3 Request File Information --> response is a "File Information" (A.2.1)

  • int8 - length of file name in octets, n
  • n*char - file name (string)

A.2.4 Request File Content --> response is a "File Content" (A.2.2)

  • int8 - length of file name in octets, n
  • n*char - file name (string)

A.2.5 Request File Information --> response is a "File Information" (A.2.1)

  • int32 - file hash (keccak)

A.2.6 Request File Content --> response is a "File Content" (A.2.2)

  • int32 - file hash (keccak)

A.3 Chat
A.3.1 Chat Public

  • int64 - id of speaker
  • int16 - length of string being said
  • n*char - string being said

A.3.2 Chat Private

  • int64 - id of target for this chat
  • int64 - id of speaker
  • int16 - length of string being said
  • n*char - string being said

A.4 Character Actions & Activities
A.4.1 Basic action

  • int64 - id of subject
  • int64 - id of object
  • int32 - id of action attempted (client-sent)/performed (server-sent) --> see Annex B for list of current basic actions

A.4.2 Item movement

  • int64 - id of subject
  • int64 - id of object
  • int64 - quantity (stack count) to be moved
  • int64 - id of destination object (i.e. own char's id for "pickup", container ID for move to container, sector id for "drop" or move from container to world, other char's id for "trade" or "store" etc.)

A.4.3 Item movement with specified slot

  • int64 - id of subject
  • int64 - id of object
  • int64 - quantity (stack count) to be moved
  • int64 - id of destination object (i.e. own char's id for "pickup", container ID for move to container, sector id for "drop" or move from container to "world", other char's id for "trade" or "store" etc.)
  • int64 - slot id

A.4.4 Activity --> this is meant to be sent by the server;

  • int64 - id of activity
  • int64 - duration (in seconds)
  • int64 - start time (unix format)
  • int8 - status: 0 -> finished/success; >0 -> ongoing / scheduled; <0 -> failed / aborted

A.4.5 Request Activity Information --> response is "Activity" above (A.4.4)

  • int64 - id of requested activity

A.4.6 Train

  • int64 - id of character
  • int64 - id of skill to train

A.5 Environment & Graphics
NB: "requests" here are not actions of the character in the game as such but rather supporting raw API for the client; for instance, requests here include obtaining the id of own character or available maps.

A.5.1 List of Sectors

  • int64 - number of sectors, n
  • n*int64 - list with ids of available sector

A.5.2 Request list of sectors --> response will be "List of Sectors" above (A.5.1)

  • int64 - character ID

A.5.3 Sector Map

  • int64 - id of sector
  • int8 - length of map filename (sector's name)
  • n*char - map filename (sector's name)

A.5.4 Request sector map --> response will be "Sector Map" type above (A.5.3)

  • int64 - id of sector

A.5.5 Item in sector (actor/character or object)

  • int64 - id of item
  • int64 - id of sector in which the item is located
  • float - position of item: x coordinate
  • float - position of item: y coordinate
  • float - position of item: z coordinate
  • int64 - id of graphics profile --> graphics profiles are so that the client can request and choose from alternative/equivalent actual files/meshes/icons/animations for this particular graphics profile
  • int8 - length of name/label of item
  • n*char - name/label of item

A.5.6 Request own char --> no payload here really since it's accepted only from authenticated client so unambiguous anyway; response will be a "Item in sector" type above - it includes id of sector + id of char etc. (A.5.5)

A.5.7 Item in container

  • int64 - id of item
  • int64 - count
  • int64 - parent item/actor id (i.e. inventory is simply actor-as-container)
  • int64 - slot id
  • int64 - id of graphics profile --> same story as at A.5.5 above
  • int8 - length of name/label of item
  • n*char - name/label of item

A.5.8 Request item --> response will be "Item in sector" or "Item in container" types above (A.5.6, A.5.7)

  • int64 - id of item

A.5.9 Item Text Description (returned in response to a "view" basic action)

  • int64 - id of item
  • int64 - length of description
  • n*char - text description

A.5.10 Item Text Content --> sent in response to "read" basic action

  • int64 - id of item
  • int64 - length of text content
  • n*char - text content

A.5.11 Item List of Characteristics

  • int64 - id of item
  • int16 - number of characteristics
  • n*int64- the ids of relevant characteristics for this item

A.5.12 Item Characteristic

  • int64 - id of item
  • int64 - id of characteristic
  • int64(/float/int32/int16/char) - value of characteristic --> type here would depend on characteristic according to definition at A.5.13 below

A.5.13 Characteristic

  • int64 - id of characteristic
  • int8 - type of value of this characteristic (see A.0 above for the ids of data types that can appear here)
  • int64 - length of name of characteristic, n
  • n*char - name of characteristic
  • int64 - length of name of category, c
  • c*char - name of category

5.14 Request Characteristic --> response is "Characteristic" above (A.5.13)

  • int64 - id of requested characteristic

A.5.15 Skill

  • int64 - id of skill
  • int64 - length of skill name
  • n*char - skill name
  • int64 - length of skill's category name
  • c*char - category name

A.5.16 Skill List

  • int 64 - number of skills in this list
  • n*int64- ids of skills in this list

A.5.17 Character's Skill

  • int64 - id of character
  • int64 - id of skill
  • int64 - current rank
  • int64 - current knowledge points
  • int64 - current practice points
  • int64 - cost of knowledge to next rank
  • int64 - cost of practice to next rank

A.5.18 Request Skill Information --> response will be Skill above (A.5.15)

  • int64 - skill id

A.5.19 Request List of Skills --> response will be Skill List above (A.5.16)

  • int64 - id of character whose skills are requested

A.5.20 Request Character's Skill --> response will be Character's Skill above (A.5.17)

  • int64 - id of character whose current skill values are requested
  • int64 - id of skill requested

A.5.21 Time of day (game time)

  • int8 - hour
  • int8 - minute

A.5.22 Request time of day (game time) --> no payload, response is Time of day above (A.5.21)

A.5.23 Movement Type

  • int64 - id of this movement type
  • int64 - id of graphic profile for this movement type
  • float - x change
  • float - y change
  • float - z change
  • float - x rotation
  • float - y rotation
  • float - z rotation
  • int64 - length of name
  • n*char - name of this movement type

A.5.24 Request movement type --> response will be "Movement Type" above (A.5.23)

  • int64 - id of requested movement type

A.5.25 List of movement types

  • int64 - number of available movement types
  • n*int64- list of ids of available movement types

A.5.26 Request list of movements --> response will be a "List of movement types" above (A.5.25)

  • int64 - id of item for which available movement types are requested

A.5.27 Set Movement Type

  • int64 - id of item for which movement type is set
  • int64 - id of movement type to set

A.5.28 Destroy Item

  • int64 - id of item that is destroyed/vanishes

A.5.29 Set Item Position

  • int64 - id of item
  • int64 - id of sector in which the item is located
  • int8 - position of item: x coordinate
  • int8 - position of item: y coordinate
  • int8 - position of item: z coordinate

A.5.30 Neutral message --> mainly for feedback e.g. "X killed himself", "That tool is not useful anymore", "You ranked up.", "You got loot"

  • int64 - length of text in characters, n
  • n*int8 - text

A.5.31 Error message (in game)

  • int64 - length of text in characters, n
  • n*int8 - text

A.5.32 Success message (in game)

  • int64 - length of text in characters, n
  • n*int8 - text

A.5.33 Message of the day

  • int64 - length of text in characters, n
  • n*int8 - text

A.5.34 Request message of the day --> no payload here; answer will be "Message of the day" above (A.5.33)

A.5.35 Top

  • int64 - duration in days from game's "today" (i.e. 0 for today's top, 30 for past months' top etc.)
  • int64 - length of text in characters, n
  • n*int8 - text

A.5.36 Request Top --> answer will be "Top" above (A.5.35)

  • int64 - duration in days from game's "today" (i.e. 0 for today's top, 30 for past months' top etc.)

A.5.37 Graphics Profile

  • int64 - id of this graphics profile
  • float - width
  • float - height
  • float - depth
  • int64 - number of contained slots with their own graphics profiles
  • int8 - length of filename for icon
  • m*int8 - icon filename
  • int8 - length of filename for mesh
  • n*int8 - mesh filename
  • int8 - length of filename for texture
  • p*int8 - texture filename
  • int8 - length of filename for animation
  • q*int8 - animation filename
  • int8 - length of filename for sound
  • r*int8 - sound filename

A.5.38 Request Top-Level Graphics Profile --> response is "Graphics Profile" above (A.5.37)

  • int64 - id of requested graphics profile

A.5.39 Request Child Graphics Profile --> response is "Graphics Profile" above (A.5.37)

  • int64 - length of path (i.e. how deep in the hierarchy is the graphics profile of interest)
  • n*int64- ids forming the path to the desired graphics profile (e.g. 2,1,15 means the 15th slot of the 1st slot of top graphics profile number 2).

Annex B - List of currently available basic actions

B.1 Target --> this is less than View at B.2. below; character targets the object.

B.2 View --> this is a generic view and can be applied to anything (objects, actors, world included).

B.3 Read

B.4 Lock/unlock

B.5 Use/Combine/Sacrifice

B.6 Explore (current /explore, with target sector id)

B.7 Repair

B.8 Exchange --> this would be used for at least 3 currently distinct parts: trade, store, bank. As everywhere else, its exact effect depends on context.

B.9 Complete --> for actions that require explicit "accept" confirmation from player (e.g. trade)

B.10 Abort --> aborts what the character is doing (if the abort is possible, permitted and meaningful in the given context).

B.11 Attack --> for current "/die" simply use this with subject and object the same, namely own character.

Use the comment form below for any questions, comments, suggestions or desires you have regarding this communications protocol.

-->

Quest for the Crafty Noob

Wednesday, May 3rd, 2017

Bundling with Foxybot

Thursday, April 13th, 2017

Basic toolchain for Blender - Cal3d - Crystal Space

Friday, February 24th, 2017

Ordinary trouble of an Euloran explorer

Monday, January 23rd, 2017

The Sentiments of Grass

Monday, December 5th, 2016

Happy 1st Anniversary, Foxybot!

Sunday, September 18th, 2016

Craft-Table Tourism with Foxybot 1.4

Thursday, August 4th, 2016

Coordinate Eulometry (or Tomb of the Dead Mollusc)

Tuesday, March 1st, 2016

Foxy's Musings on Click-Slaves vs Apprentices and Their Choices

Thursday, January 28th, 2016

Making Patterns on Euloran Soil

Thursday, January 21st, 2016

Euloran Cookbook V1.2

Monday, December 28th, 2015

Foxy's Dismal Scribblings on Euloran Exploration Data or Truly Horrible Numbers

Sunday, December 20th, 2015

Foxybots v1.3

Monday, December 14th, 2015

Square Data for a Round World

Tuesday, November 24th, 2015

Foxybots v1.2

Monday, November 16th, 2015

The Unbearably Unknown Value of Things in Eulora

Thursday, October 22nd, 2015

Hic Sunt Flotsams on Eulora (Or the Brand New Foxymaps)

Tuesday, October 13th, 2015

Yo Moon, Got Phases Nao?

Tuesday, September 29th, 2015

Pulling mushrooms by their wooly threads and other disastrous adventures

Thursday, September 3rd, 2015

Eulora's First Grade – How to Get a Skill, Build a Claim, Make Your Own Grass etc.

Sunday, August 30th, 2015

A Lotus by Any Other Name's...a Harlot?

Wednesday, August 26th, 2015

A Data Diet of Wooly Mushrooms and Elusive Purple Snails

Friday, August 14th, 2015

More offensive than ever - Euloran Cookbook v1.1

Monday, August 3rd, 2015

Solid Branches in Empty Space (Eulora's First, Woman-Made, Satellite)

Friday, July 31st, 2015

Foxy's Crafting Bot

Monday, July 27th, 2015

Day 12 – A Drunken World – Drunk on Knowledge That Is!

Sunday, July 5th, 2015

A Thing to Be Treasured or the Secret of Eulorian Samovars

Tuesday, June 30th, 2015

Things of Wonder and Golden Pickaxes

Monday, June 29th, 2015

Samovars, Boulders, Business and Teleportation - All in a Few Days' Work

Thursday, June 25th, 2015

Godly Yellow Lemonade, Loads of Flotsam and Horribly Bad Maths

Monday, June 22nd, 2015

When Cooking Is More Painful than Dying (The Barely Legible and Slightly Bloody Diary of Foxy Foxster on Eulora - Day 2)

Sunday, June 14th, 2015

Names, Pains, Curiosity and Deliberately Bad Maths (The Barely Legible and Slightly Bloody Diary of Foxy Foxster on Eulora - Day 1)

Saturday, June 13th, 2015

Making My Eulorian Cake and Eating It

Wednesday, August 20th, 2014

Boxy and His Leaky Bottle

Saturday, August 16th, 2014