Skycastle/Initial Game
Description of the first 'game' to implement on Skycastle.
This would mostly be a test environment, to enable further development of the engine, but would also help get the crafting rules developed.
Contents
World Objects
- A simple round shape without any function, made of some material (e.g. stone)
- A splinter shape of some material (resulting e.g. from breaking a rock). May have some sharp edges.
- A container, and some item types that are containers, like a backpack and a bag.
- A tree, which can be cut down to provide a fallen tree
- An apple tree (somehow inherits the functionality of a tree, and also grows apples and allows picking them)
- An axe, can be used to cut the tree, or splinter stones into sharp pieces, or cut branches from a tree.
- A fallen tree (similar to a tree, but dead/dying)
- Round wood (=log / branch of some diameter and length) (results from removing branches from a dead tree and cutting it to suitable pieces, or by cutting off a branch from a tre)
- Leaf (can fall from tree, or can result from removing leaves from branches).
- Thin roots, can be acquired from trees
- An orc, which can be used as an avatar
Scenarios
NOTE: For now we do not simulate distances, but consider that everything is close at hand for an avatar.
Here Be Orc Scenario
The world is empty.
- Create an Orc avatar
The world should now contain an orc.
Pick Apples Scenario
The world has an apple tree in it.
- Create an Orc avatar
- The orc starts picking apples from the apple tree into its backpack
- The orc stops when its backpack is full, or the tree is out of apples
The end result is that the apple tree has fever apples in it, and that the orcs backpack has some apples in it.
Make Axe Cut Tree Scenario
The world has a groove of trees and some rocks scattered about.
This is a scenario that should work in the above world:
- Create an Orc avatar
- The orc breaks a branch from a tree.
- The orc hits a stone with a stone until one of them breaks and produces rock splinters.
- The orc pulls a root from a tree
- The orc attaches a rock splinter to the branch with the root to produce a crude cutting and bashing tool
- The orc uses the created stone axe to chop down a tree
The end result is that the chopped down tree disappears, and the world contains a fallen tree.
Tool abilities
A tool can provide a set of different abilities. Various actions and processes need different abilities. To be able to complete an action, you'll need to have the right abilities.
Most avatars have some abilities provided directly by their bodies.
A tool may be good at some ability, or less good. Abilities provided by a tool could also be parametrized, e.g. by how accurately they are (a small hammer is more accurate than a sledgehammer, but is less efficient at transforming muscle energy to impact energy).
Abilities in the test world:
- Pick(min-max size, maxWeight) - can pick up things (and drop them). Allows moving items e.g. between the ground and a backpack.
- Cut(accuracy, sharpness, hardness, impact amplification, impact interval) - allows cutting things, either by dragging across a surface (slash), or by hitting a surface with a sharp edge (hack) (maybe hack and slash should be separate abilities?)
- Bash(accuracy, hardness, impact amplification, impact interval) - allows hitting something with a blunt edge (e.g. by swinging a branch).
- Break(accuracy, strength) - can break a rigid stick like object, by holding it at some distance apart and bending or pushing it with something. E.g. breaking a stick you are holding with your knee.
- Knot(diameter of rope, pull strength) - can manipulate something rope-like, to do (or undo) knots or to lash together objects.
Ideas for other abilities:
- Dig - dig in an earth like material
- Twist - apply rotation in different directions on two points of a stick
- Saw - cut something by scraping away mass along a line.
- Drill - create a hole in something by removing particles of mass at a point
- Rasp - erode or smooth a surface by removing particles over an area, e.g. with sandpaper, sandstorm, sliding along ground..
- Pierce - With a needle, or spearpoint
- Scrape - remove a layer of a surface by moving a blade across it
- Carve - shape a cuttable material into a desired shape by cutting flakes of it.
- Sculpt - shape a soft clay-like material into a desired shape.
- Forge - shape a hard but malleable material into a desired shape by hammering it.
- Chip - shape a hard and flaky material by chipping away small pieces.
- Glue - attach some objects by applying a cohesive between them and positioning them together
Actions
- CreateAxe( shaft material, head material, attachment type ) - This action should somehow be generalized to take the type of item we want to create as a parameter, and the components and attachment/processing method as parameters.
- Gather (source entity, type of objects) - pick objects of some type from a source. E.g. apples or branches from the tree in our example world.
- Wield( tool ) - make the specified tool the default tool to use for the next actions.
- Hit( target, tool ) - hits (bashes) the target with the specified tool. In our example, used to shatter stones.
CHECK: Do we actually need actions that use the abilities, or could we directly use the abilities instead?
Gathering
Gathering fruit, branches, leafs, roots and so on from a tree (or similar).
For this, probably we may want to have some way to query what things can be picked from an object, and have an action that creates a process that transfers object of some kind to the avatars inventory (or container of choice).
The picked items should also be reduced from the source, usually just by decreasing some counter.
Picking might benefit from some tool use (cutting), but might work by hand strength and abilities also (break), or just by picking up the items (picking)
Other Features
Piles
We'd want to use some kind of Pile concept for storing many similar entities, so that we don't need to keep one instance of each. E.g. a pile of leaves, or a pile of apples.
Core Engine Notes
Possibly every entity could potentially be a container, just by flipping a flag. Where an entity consists of a number of different components, they might be contained in the entity, and linked up with connections to each other and access points on the entity (e.g. fuel tank and engine in a car, mental journal of a character, etc).