Input and scripting documentation; level todos
This commit is contained in:
parent
521566c5b9
commit
172af950e8
2
Makefile
2
Makefile
|
@ -69,7 +69,7 @@ includeflag := $(addprefix -I, $(includeflag))
|
||||||
WARNING_FLAGS = -Wall -Wno-incompatible-function-pointer-types -Wno-unused-function# -pedantic -Wextra -Wwrite-strings -Wno-incompatible-function-pointer-types -Wno-incompatible-pointer-types -Wno-unused-function
|
WARNING_FLAGS = -Wall -Wno-incompatible-function-pointer-types -Wno-unused-function# -pedantic -Wextra -Wwrite-strings -Wno-incompatible-function-pointer-types -Wno-incompatible-pointer-types -Wno-unused-function
|
||||||
|
|
||||||
SEM = 0.0.1
|
SEM = 0.0.1
|
||||||
COM != git rev-parse --short HEAD
|
COM != fossil describe
|
||||||
VER = $(SEM)-$(COM)
|
VER = $(SEM)-$(COM)
|
||||||
|
|
||||||
COMPILER_FLAGS = $(includeflag) $(QFLAGS) -MD $(WARNING_FLAGS) -I. -DCP_USE_DOUBLES=0 -DTINYSPLINE_FLOAT_PRECISION -DVER=\"$(VER)\" -DINFO=\"$(INFO)\" -c $< -o $@
|
COMPILER_FLAGS = $(includeflag) $(QFLAGS) -MD $(WARNING_FLAGS) -I. -DCP_USE_DOUBLES=0 -DTINYSPLINE_FLOAT_PRECISION -DVER=\"$(VER)\" -DINFO=\"$(INFO)\" -c $< -o $@
|
||||||
|
|
152
docs/game.adoc
152
docs/game.adoc
|
@ -1,152 +0,0 @@
|
||||||
= Yugine
|
|
||||||
|
|
||||||
The yugine essentially is made of a sequence of levels. Levels can be
|
|
||||||
nested, they can be streamed in, or loaded one at a time. Levels are
|
|
||||||
made of levels.
|
|
||||||
|
|
||||||
Different "modes" of using the engine has unique sequences of level
|
|
||||||
loading orders. Each level has an associated script file. Level
|
|
||||||
loading functions call the script file, as well as the level file. The
|
|
||||||
level file can be considered to be a container of objects that the
|
|
||||||
associated script file can access.
|
|
||||||
|
|
||||||
.Game start
|
|
||||||
|
|
||||||
* Engine scripts
|
|
||||||
* config.js
|
|
||||||
* game.lvl & game.js
|
|
||||||
|
|
||||||
.Editor
|
|
||||||
|
|
||||||
* Engine scripts
|
|
||||||
* config.js
|
|
||||||
* editor.js
|
|
||||||
|
|
||||||
.Editor play
|
|
||||||
|
|
||||||
* F5 debug.lvl
|
|
||||||
** Used for custom debug level testing. If doesn't exist, game.lvl is loaded.
|
|
||||||
* F6 game.lvl
|
|
||||||
* F7 Currently edited level
|
|
||||||
|
|
||||||
While playing ...
|
|
||||||
* F7 Stop
|
|
||||||
|
|
||||||
== Level model
|
|
||||||
The game world is made up of objects. Levels are collections of
|
|
||||||
objects. The topmost level is called "World". Objects are spawned into
|
|
||||||
a specific level. If none are explicitly given, objects are spawned
|
|
||||||
into World. Objects in turn are made up of components - sprites,
|
|
||||||
colliders, and so on. Accessing an object might go like this:
|
|
||||||
|
|
||||||
World.level1.enemy1.sprite.path = "brick.png";
|
|
||||||
|
|
||||||
To set the image of enemy1 in level 1's sprite.
|
|
||||||
|
|
||||||
.Level functions
|
|
||||||
,===
|
|
||||||
name, description
|
|
||||||
|
|
||||||
levels, a list of all levels loaded in this one
|
|
||||||
objects, a list of all objects belonging to this level (objects + levels)
|
|
||||||
object_count, objects.length()
|
|
||||||
spawn(type), creates an object from the supplied type in the level
|
|
||||||
create(), creates an empty level inside of this one
|
|
||||||
loadfile(file), loads file as a level inside of this one; returns it. Mainly for editor
|
|
||||||
loadlevel(file), loads file as a level and does running required for gameplay
|
|
||||||
load(level_json), clears this level and spawns all objects specified in the level_json
|
|
||||||
clear(), kills all objects in this level
|
|
||||||
kill(), cleans up the level and kills it
|
|
||||||
|
|
||||||
,===
|
|
||||||
|
|
||||||
.Objects
|
|
||||||
Objects are things that exist in the game world.
|
|
||||||
|
|
||||||
,===
|
|
||||||
name, description
|
|
||||||
level, the level this object belongs to
|
|
||||||
pos, the global position
|
|
||||||
relpos, the position relative to its level
|
|
||||||
angle, the global angle
|
|
||||||
relangle, angle relative to its level
|
|
||||||
velocity, velocity of the object
|
|
||||||
angularvelocity, angular velocity of the object
|
|
||||||
alive, true if the object is valid
|
|
||||||
varname, the variable name of the object (used for friendly naming)
|
|
||||||
friction, physics attribnute
|
|
||||||
elasticity, physics attribute
|
|
||||||
flipx, true if the object is flipped on its x axis
|
|
||||||
flipy, true if the object is mirrored on its y axis
|
|
||||||
body, the internal gameobject id of the object
|
|
||||||
controlled, true if the object is controlled by something
|
|
||||||
phys, set to dynamic; kinematic; or static; explained below
|
|
||||||
moi, the moment of inertia of the object
|
|
||||||
mass, mass of the object
|
|
||||||
visible, true if the object is visible. Set to false to disable all visible features belonging to it
|
|
||||||
in_air(), true if the object is not on the ground
|
|
||||||
on_ground(), !in_air()
|
|
||||||
layer, collision layer for the physics engine
|
|
||||||
draw_layer, draw order. higher numbers draw on top of lower ones
|
|
||||||
scale, change to make the object larger or smaller
|
|
||||||
from, the object this object was created from
|
|
||||||
boundingbox, the boundingbox of this object in world dimensions
|
|
||||||
push(vec), push this object each frame with vec velocity
|
|
||||||
width, the boundingbox defined width
|
|
||||||
height, the boundingbox defined height
|
|
||||||
kill, destroy the object
|
|
||||||
stop, ???
|
|
||||||
world2this(pos), return the pos in world coordinates to relative this object
|
|
||||||
this2world(pos), return the pos in this coordinates relative to the world
|
|
||||||
make(props, level), instantiate an object based on this, with additional props, in level
|
|
||||||
,===
|
|
||||||
|
|
||||||
.Editor related object features
|
|
||||||
,===
|
|
||||||
gizmo, path to an image to draw in editor mode
|
|
||||||
,===
|
|
||||||
|
|
||||||
.Functions for object control
|
|
||||||
,===
|
|
||||||
clone(name; ext), create a copy of this object and extend it with ext; does not spawn
|
|
||||||
instadup(), create an exact duplicate of this object in the World
|
|
||||||
revert(), remove everything that makes the object unique; make it exactly like what it was spawned from
|
|
||||||
,===
|
|
||||||
|
|
||||||
.Physics
|
|
||||||
All objects belong to the physics engine, but may be totally ignored by it.
|
|
||||||
|
|
||||||
,===
|
|
||||||
static, does not and will not move
|
|
||||||
dynamic, moves under the auspices of the physics engine
|
|
||||||
kinematic, moves under the auspices of the player or other control mechanism
|
|
||||||
,===
|
|
||||||
|
|
||||||
Physics properties work as such
|
|
||||||
,===
|
|
||||||
mass, affects how much a given force will move an object
|
|
||||||
elasticity, affects momentum loss on collisions; multiplicative between two objects for each collision; 1 for no loss; 0 for total stoppage; >1 for a chaotic increasing entropy simulation
|
|
||||||
friction, affects momentum loss when rubbing against another surface; multiplicative between the two objects
|
|
||||||
,===
|
|
||||||
|
|
||||||
.Textures & images
|
|
||||||
A sprite is a display of a specific texture in the game world. The
|
|
||||||
underlying texture has values associated with it, like how it should
|
|
||||||
be rendered: is it a sprite, is it a texture, does it have mipmaps,
|
|
||||||
etc. Textures are all file based, and are only accessed through the
|
|
||||||
explicit path to their associated image file.
|
|
||||||
|
|
||||||
.Finding & Addressing Objects
|
|
||||||
|
|
||||||
|
|
||||||
.Editor & Debugging
|
|
||||||
Although intertwined, debugging functions and the editor are separate entities.
|
|
||||||
|
|
||||||
..Debugging
|
|
||||||
Debugging functions are mapped to the F buttons, and are always available during gameplay in a debug build. Pressing the F button toggles the feature; pressing it with ALT shows a legend for that feature; pressing it with CTRL shows additional info
|
|
||||||
|
|
||||||
,===
|
|
||||||
F1, Draw physics info
|
|
||||||
F3, Draw bounding boxes
|
|
||||||
F12, Drawing gui debugging info
|
|
||||||
,===
|
|
|
@ -59,9 +59,9 @@ Objects are things that exist in the game world.
|
||||||
|
|
||||||
|name| description|
|
|name| description|
|
||||||
|---|---|
|
|---|---|
|
||||||
|level| the level this object belongs to
|
|level| the level this object belongs to|
|
||||||
|pos| the global position|
|
|pos| the global position|
|
||||||
|relpos| the position relative to its level
|
|relpos| the position relative to its level|
|
||||||
angle| the global angle|
|
angle| the global angle|
|
||||||
|relangle| angle relative to its level|
|
|relangle| angle relative to its level|
|
||||||
|velocity| velocity of the object|
|
|velocity| velocity of the object|
|
||||||
|
|
1
docs/input.md
Normal file
1
docs/input.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# Yugine Input Guide
|
11
docs/scripting.md
Normal file
11
docs/scripting.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# Yugine Scripting Guide
|
||||||
|
|
||||||
|
All objects in the Yugine can have an associated script. This script can perform setup, teardown, and handles responses for the object.
|
||||||
|
|
||||||
|
|function|description|
|
||||||
|
|---|---|
|
||||||
|
|setup|called before the object is loaded|
|
||||||
|
|start|called when the object is loaded|
|
||||||
|
|update(dt)|called once per game frame|
|
||||||
|
|physupdate(dt)|called once per physics tick|
|
||||||
|
|stop|called when the object is killed|
|
|
@ -1323,7 +1323,7 @@ var Level = {
|
||||||
},this);
|
},this);
|
||||||
|
|
||||||
//eval_filename(this.script, this.scriptfile);
|
//eval_filename(this.script, this.scriptfile);
|
||||||
eval?.(this.script);
|
eval(this.script);
|
||||||
|
|
||||||
if (typeof extern === 'object')
|
if (typeof extern === 'object')
|
||||||
Object.assign(this, extern);
|
Object.assign(this, extern);
|
||||||
|
@ -1406,6 +1406,8 @@ var Level = {
|
||||||
|
|
||||||
var savereturn = JSON.stringify(this.objects, replacer_empty_nil, 1);
|
var savereturn = JSON.stringify(this.objects, replacer_empty_nil, 1);
|
||||||
|
|
||||||
|
Log.warn(JSON.stringify(this));
|
||||||
|
|
||||||
if (this.flipx) {
|
if (this.flipx) {
|
||||||
this.objects.forEach(function(obj) {
|
this.objects.forEach(function(obj) {
|
||||||
this.mirror_x_obj(obj);
|
this.mirror_x_obj(obj);
|
||||||
|
@ -1436,6 +1438,7 @@ var Level = {
|
||||||
obj.angle = -obj.angle;
|
obj.angle = -obj.angle;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/* TODO: Remove this; make it work without */
|
||||||
toJSON() {
|
toJSON() {
|
||||||
var obj = {};
|
var obj = {};
|
||||||
obj.file = this.file;
|
obj.file = this.file;
|
||||||
|
@ -1483,6 +1486,11 @@ var Level = {
|
||||||
},
|
},
|
||||||
|
|
||||||
spawn(prefab) {
|
spawn(prefab) {
|
||||||
|
if (typeof prefab === 'string') {
|
||||||
|
var newobj = this.addfile(prefab);
|
||||||
|
return newobj;
|
||||||
|
}
|
||||||
|
|
||||||
var newobj = prefab.make();
|
var newobj = prefab.make();
|
||||||
newobj.defn('level', this);
|
newobj.defn('level', this);
|
||||||
this.objects.push(newobj);
|
this.objects.push(newobj);
|
||||||
|
@ -1492,6 +1500,12 @@ var Level = {
|
||||||
return newobj;
|
return newobj;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
dup(level) {
|
||||||
|
level ??= this.level;
|
||||||
|
|
||||||
|
Log.warn("Duplicating a level!");
|
||||||
|
},
|
||||||
|
|
||||||
create() {
|
create() {
|
||||||
var newlevel = Object.create(this);
|
var newlevel = Object.create(this);
|
||||||
newlevel.objects = [];
|
newlevel.objects = [];
|
||||||
|
@ -1506,6 +1520,7 @@ var Level = {
|
||||||
},
|
},
|
||||||
|
|
||||||
addfile(file) {
|
addfile(file) {
|
||||||
|
/* TODO: Register this as a prefab for caching */
|
||||||
var lvl = this.loadfile(file);
|
var lvl = this.loadfile(file);
|
||||||
this.objects.push(lvl);
|
this.objects.push(lvl);
|
||||||
lvl.level = this;
|
lvl.level = this;
|
||||||
|
@ -2020,8 +2035,6 @@ var gameobject = {
|
||||||
|
|
||||||
stop() {},
|
stop() {},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
kill() {
|
kill() {
|
||||||
if (this.body === -1) {
|
if (this.body === -1) {
|
||||||
Log.warn(`Object is already dead!`);
|
Log.warn(`Object is already dead!`);
|
||||||
|
|
Loading…
Reference in a new issue