Releases: spheredev/neosphere
miniSphere 4.8.4
miniSphere 4.8.4 is a maintenance release in the 4.8 release series. This release fixes a bunch of issues and improves manifest handling in Cell.
What's Changed?
- Improves Cell game manifest generation to produce an error if the file named
bySphere.Game.main
doesn't exist at the end of a build. - Fixes an issue where running "Package Game" in Sphere Studio would build the
game in$/.staging
instead of the project's usual build directory. - Fixes an issue in which a shape isn't allowed to have a vertex buffer smaller
than its index buffer. - Fixes a bug in Console which prevented the command line cursor from flashing.
- Fixes a bug where throwing either
null
orundefined
causes a segfault. - Fixes a bug where
Transform#project3D()
will accept negative or zero values
fornear
andfar
parameters. - Fixes a bug where the
dataReader
anddataWriter
modules can throw an
exception, caused by a forgotten import.
miniSphere 4.8.3
miniSphere 4.8.3 is a maintenance release in the 4.8 release series. This release adds a new API function, FS.relativePath()
, and fixes several bugs, including a few that can crash the engine.
Changes in This Version
- Adds a new
FS.relativePath()
API for computing partial file and directory
paths for debugging and display purposes. - Changes
Transform#rotate()
to use degrees instead of radians. - Improves game manifest validation by disallowing SphereFS prefixes other than
@/
in the startup script path. - Improves the organization of the Sphere Runtime to avoid duplicating modules
shared between miniSphere and Cell. - Fixes a bug where accessing
Surface#transform
can cause a segfault. - Fixes a bug where changes to a surface's projection matrix are sometimes
ignored. - Fixes a bug where the screen's current projection matrix is used to display
the fatal exception screen. - Fixes a bug where calling
Shape#draw()
with no arguments causes a segfault. - Fixes some bugs in the Sphere v1 implementation where a nonsensical relative
pathname can be returned from certain API functions, e.g.GetCurrentMap()
.
Installing in Windows
Simply download and run miniSphereSetup-4.8.3.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA) (latest version only guaranteed on current Ubuntu release):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of other Linux distributions, or those using older versions of Ubuntu, can build the engine manually from the tarball (minisphere-4.8.3.tar.gz
).
miniSphere 4.8.2
miniSphere 4.8.2 is a maintenance release in the 4.8 release series. This release fixes a long-standing SoundStream
corruption bug which made SoundStreams with more than one channel useless.
Changes in This Version
- Fixes a bug in the internal audio streaming logic which corrupted the output
of SoundStreams with more than one channel and made them sound choppy. - Fixes a bug where legacy
Spriteset#filename
includes a SphereFS prefix. - Fixes a bug where Cell will write an invalid script path to
game.sgm
if the
script filename includes the@/
prefix.
Installing in Windows
Simply download and run miniSphereSetup-4.8.2.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA) (latest version only guaranteed on current Ubuntu release):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of other Linux distributions, or those using older versions of Ubuntu, can build the engine manually from the tarball (minisphere-4.8.2.tar.gz
).
miniSphere 4.8.1
miniSphere 4.8.1 is a maintenance release in the 4.8 release series. This release includes a few minor API tweaks and fixes the Windows installer to install Sphere Studio properly.
Changes in This Version
- Adds
DirectoryStream#dispose()
to the API, for closing an open directory. - Renames
SoundStream#buffer()
toSoundStream#write()
.
Installing in Windows
Simply download and run miniSphereSetup-4.8.1.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA) (latest version only guaranteed on current Ubuntu release):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of other Linux distributions, or those using older versions of Ubuntu, can build the engine manually from the tarball (minisphere-4.8.1.tar.gz
).
miniSphere 4.8.0
miniSphere 4.8.0 is the eighth minor update in the miniSphere 4.x release series. This release adds a new SphereFS prefix, new DirectoryStream
and Image
classes, Sphere 1.x compatibility fixes, and more. As always, upgrading is highly recommended!
Important Considerations
-
The Core API includes a new class,
DirectoryStream
, which lets you game
enumerate the contents of a directory, seek within the list, etc., much like
you would read data from a file usingFileStream
. DirectoryStream objects
are also compatible with the ES6 iterator protocol so you can use them in
from()
query. Refer to the API documentation for details. -
SphereFS now supports a new prefix,
$/
, which maps to the directory
containing the startup script. This should make importing local modules
easier. -
from()
can now enumerate live ES6 iterator objects (i.e. with a compatible
.next()
method), not just those with a[Symbol.iterator]
method. -
The
Music
andLogger
modules now have designated base directories and
providing file extensions is optional. See the API documentation for more
details. -
A new
Image
class in the Sphere Runtime makes it easier to work directly
with raster images, like you could in Sphere 1.x. For now only basic
blitting (likePrim.blit()
) is supported; more features will be added going
forward. -
The backbuffer is no longer cleared between frames during map engine
processing, to improve compatibility with many Sphere 1.x games that relied
on this bug. There may be unintended fallout (graphical glitches) from this,
so keep an eye out.
Changes in This Version
- Adds a new
DirectoryStream
built-in class which allows you to enumerate the
contents of a directory. Works in both miniSphere and Cell! - Adds a new SphereFS prefix,
$/
, which resolves to the directory containing
the startup script for miniSphere, or the root of the source tree for Cell. - Adds a new
Image
class to the Sphere Runtime which allows working directly
with images, like in Sphere v1 code. - Adds
FS.directoryExists()
for checking whether a directory exists. - Adds support for enumerating live iterators in
from.iterable()
. - Adds a new experimental Person class to the Sphere Runtime which makes it
easier to work with map engine persons. - Improves windowed mode scaling behavior when miniSphere is run on a HiDPI/4K
display. - Improves the Music and Logger modules by giving them default base directories
(like in Sphere 1.x) and making the file extension optional. - Improves Sphere 1.x compatibility by avoiding clearing the backbuffer between
frames during aMapEngine()
call. - Improves the maintainability of the codebase with extensive refactoring. Any
bugs, let me know! - Renames the
analogue.js
system script topersist.js
to improve
compatibility with Sphere 1.x. - Fixes several issues in the implementation of
FS.rename()
that could cause
the function to behave destructively on some platforms. - Fixes a bug where Cell
FS.writeFile()
can accept a buffer object as input. - Fixes a bug in Cell
FS.fileExists()
where it returns true for directories. - Fixes a bug in which a path specified uplevel from a SphereFS prefix, e.g.
@/../filename
, is not correctly detected as a sandbox violation.
Installing in Windows
Simply download and run miniSphereSetup-4.8.0.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA) (latest version only guaranteed on current Ubuntu release):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of other Linux distributions, or those using older versions of Ubuntu, can build the engine manually from the tarball (minisphere-4.8.0.tar.gz
).
miniSphere 4.7.2
miniSphere 4.7.2 is a maintenance release in the 4.7 release series. This release makes some tweaks to the API and fixes a fair number of bugs.
Changes in This Version
- Adds a new
cell-runtime
master module for use in ES6 Cellscripts, as an
analogue tosphere-runtime
. - Renames
FS.resolve()
toFS.fullPath()
and adds relative path support. - Renames
FS.exists()
toFS.fileExists()
since the function doesn't work
for directories. - Renames
FileStream#size
toFileStream#fileSize
. - Fixes some inconsistencies between modules in the Cell Runtime and their
Sphere Runtime equivalents. - Fixes an issue where chaining
Dispatch.now()
causes the engine to get stuck
in an infinite loop of processing newly added jobs. - Fixes a bug where
require()
doesn't canonicalize module filenames properly,
causing SSj Blue to sometimes not be able to find the source file. - Fixes a bug where building a large project in Sphere Studio can hang Cell.
- Fixes a bug where
SoundStream
streams are always created in mono mode. - Fixes a bug where
DataReader
andDataWriter
can't be imported by either
require()
orimport
. - Fixes a bug where constructors can be called without using
new
. - Fixes a bug where stepping over a
Dispatch.now()
with SSj sometimes locks
up the engine and prevents it from responding to further debugger commands.
Installing in Windows
Simply download and run miniSphereSetup-4.7.2.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA) (latest version only guaranteed on current Ubuntu release):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of other Linux distributions, or those using older versions of Ubuntu, can build the engine manually from the tarball (minisphere-4.7.2.tar.gz
).
miniSphere 4.7.1
miniSphere 4.7.1 is a maintenance release in the 4.7 release series. This release fixes a few bugs, including a long-standing debugger lockout bug.
Changes in This Version
- Fixes a long-standing bug where getting caught in an infinite loop prevents
the engine from responding to debugger commands. - Fixes a bug where delays, including those from normal frame rate limiting,
cause actively playing SoundStreams to starve, leading to stuttering. - Fixes a bug where reading
Shape#texture
from a shape with no assigned
texture is not handled properly and may cause the engine to crash.
Installing in Windows
Simply download and run miniSphereSetup-4.7.1.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA) (latest version only guaranteed on current Ubuntu release):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of other Linux distributions, or those using older versions of Ubuntu, can build the engine manually from the tarball (minisphere-4.7.0.tar.gz
).
miniSphere 4.7.0
miniSphere 4.7.0 is the seventh minor update in the miniSphere 4.x release series and brings new API features, further refines backward compatibility, and improves rendering performance. Upgrading is highly recommended.
Important Considerations
-
The value of
Sphere.Platform
now includes the version number of the engine,
whileSphere.Version
has been redefined to return the version of the Sphere
API, e.g. 2.Sphere.APIVersion
has been removed as it is now redundant. -
The
Shape
object has been completely overhauled to better support GPU-side
vertex and index lists. Rather than these lists being maintained internally,
they are now exposed to JavaScript code via the new.vertexList
and
.indexList
properties. A few breaking changes were made to the API in
order to support this; refer to the API documentation for more information. -
Games can now assign a
Transform
object to a surface'stransform
property
to change the projection matrix. To create projection matrices, there are
two newTransform
methods:.project2D()
for orthographic projection, and
.project3D()
for perspective projection. -
Clipping is now supported for all surfaces, not just the screen. Your game
can now call.clipTo()
on any Sphere v2 surface object to set its clipping
box, just like you can do withscreen
. -
Socket
objects can now be reused by simply calling the new.connectTo()
method to reestablish a connection. This even works for already-connected
sockets; the existing connection will be closed in that case. -
For convenience,
FS.readFile()
andFS.writeFile()
now work directly with
strings instead of buffer objects. This makes them unsuitable for use with
binary data due to the UTF-8 processing involved. Going forward, games that
must work with binary files should use aFileStream
object instead. -
miniSphere will no longer run on computers without a shader-capable GPU. If
you must continue supporting such hardware, you'll have to stick to v4.5.11
or earlier.
Changes in This Version
- Adds support for creating 2D (orthographic) and 3D (perspective) projection
matrices. - Adds support for setting a clipping rectangle when rendering to a
Surface
. - Adds new
VertexList
andIndexList
objects, used to store vertices and
indices, respectively, directly on the GPU for fast access at render time. - Adds a new
.transform
property toSurface
which allows changing the
surface's projection matrix. - Adds new methods to
Model
for setting shader uniforms:.setBoolean()
,
.setFloatArray()
, and.setIntArray()
. - Adds
Socket#connectTo()
which allows the same socket object to be used for
multiple sessions. - Adds the engine version number to the string returned by
Sphere.Platform
. - Adds support for the Sphere v1
CreateSpriteset()
andSpriteset#save()
functions. - Changes the signature of the
Shape
constructor in order to support vertex
and index lists and make it easier to use. - Changes
FS.readFile()
andFS.writeFile()
to work directly with strings
instead of ArrayBuffers. - Removes support for GPUs without shader support. If the engine can't create
a shader-capable display, it will now simply fail to start rather than trying
to fall back on the fixed-function pipeline. - Renames SSJ to SSj, with a lowercase J, to make the name more recognizable.
- Renames
Sphere.APIVersion
toSphere.Version
. - Fixes several limitations in the internal handling of spritesets which were
preventing full Sphere 1.x compatibility. - Fixes several bugs in internal Dispatch job management, including one that
can cause the engine to crash with a segfault. - Fixes a bug where setting the clipping box out of bounds has no effect.
- Fixes excessive OpenGL state changes in the internal rendering logic, vastly
improving performance for games using the Sphere v2 graphics API.
Installing in Windows
Simply download and run miniSphereSetup-4.7.0.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA) (latest version only guaranteed on current Ubuntu release):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of other Linux distributions, or those using older versions of Ubuntu, can build the engine manually from the tarball (minisphere-4.7.0.tar.gz
).
miniSphere 4.6.0
miniSphere 4.6.0 is the sixth minor update in the miniSphere 4.x release series and brings many improvements to the Sphere v2 API as well as greatly enhanced Sphere 1.x compatibility. It also reinvents miniRT as the new Sphere Runtime, now an official part of the Sphere v2 platform!
Important Considerations
-
When using standard JavaScript modules (
.mjs
), the main module of a
Sphere v2 game can now optionally useexport default
to export a class.
The exported class should implement, at the very least, astart()
method
to be called by the engine on startup. If the startup class derives from
Thread
, you need only implement theon_update()
andon_render()
handlers and miniSphere will kick off your main thread for you! -
Several Sphere Runtime modules have been removed or renamed. Pact is no
longer available, and term has been renamed to Console. All CommonJS modules
making up the Sphere Runtime now also match the object they export. For
instance,require('scene')
returns the standardScene
object. -
Most
Prim
methods have been renamed to make them more self-documenting and
to make it more obvious that these represent immediate-mode drawing. For
example,Prim.line()
is now calledPrim.drawLine()
. Refer to the API
documentation for the full list. -
The Sphere v2 Core API now includes a
Sample
class which allows a single
loaded sound to be played multiple times simultaneously, on any mixer. This
is great for sound effects. -
describe()
has been removed from the Cellscript API and Cellscripts must
now manipulate the contents ofSphere.Game
directly. If desired, you can
use ES6Object.assign()
to get semantics similar todescribe()
. -
SSJ.log()
andSSJ.trace()
have returned and allow logging text to the
attached debugger.SSJ.log()
output will also be visible in the terminal,
whileSSJ.trace()
output will not. -
You must now call
Console.initialize()
to enable the debug console for your
game. Loading the console module withrequire()
will no longer enable it
automatically.
Changes in This Version
- When using ES6 modules (
.mjs
), the main module can nowexport default
a
class and miniSphere will automatically instantiate it and call itsstart()
method. This mirrors how Sphere v1 engines call the globalgame()
function
on startup. - Adds a new
Sample
class which works likeSound
but loads the sound into
memory instead of streaming it and allows multiple instances to be played at
the same time. - Adds methods to
Model
for setting vector-valued shader uniforms. - Adds
Transform#matrix
, allowing direct access to the individual matrix
cells of a transformation. - Adds back the
SSJ
object, to allow sending text to the attached debugger
(and optionally, to standard output). - Adds
Prim.blitSection()
, to allow drawing only part of an image. - Adds
Console.initialize()
which must now be called manually to enable the
debug console. Simply doingrequire('console')
is no longer enough. - Adds a new module,
sphere-runtime
, which brings together all the standard
modules and allows multiple symbols to be imported simultaneously by using
import {}
. - Adds support for
Sphere.Game
in Cellscripts, allowing the data in the JSON
manifest to be manipulated directly. - Adds more missing Sphere v1 API functions, further improving compatibility.
- Renames several standard modules, e.g.
term
becomesconsole
. - Renames
Prim
functions to better reflect their immediate nature and improve
code readability, at the expense of some extra verbosity. For example,
Prim.line()
becomesPrim.drawLine()
. - Renames
defScenelet()
toScene.defineAction()
. - Removes the
console
object from the Core API, as it turned out to be easily
confused with the standard console module. - Removes the
pact
module from the standard library. - Removes the
minify
module from Cell's standard library. - Removes
describe()
from the Cellscript API. - Updates the internal graphics framework to use a pixel-perfect backbuffer,
which improves screenshots and fixes several rendering-related bugs. - Updates the Sphere Studio project template with code to illustrate the use of
ES6 class syntax as well as better showcasing the standard library. - Fixes a crash that happens when using
SetTileImage()
orSetTileSurface()
. - Fixes a bug where an error thrown during execution of a Console command will
crash the game with a JavaScript error. - Fixes a bug where Cell will sometimes not detect a filename conflict.
- Fixes a bug where
Dispatch.onRender()
jobs are processed in reverse order
following a call toDispatch.onUpdate()
, and vice versa. - Fixes a bug where miniSphere calls the render script before the update script
on map engine startup, leading to compatibility issues. - Fixes a bug in
LineSeries()
andPointSeries()
that made them always throw
a "two or more vertices required" error. - Fixes a bug where Sphere v1
Surface#cloneSection()
andSurface#rotate()
could introduce graphical artifacts on some platforms. - Fixes a bug where Sphere v2
Sound#pan
range is treated as [-255,+255]
instead of the documented range of [-1.0,+1.0].
Installing in Windows
Simply download and run miniSphereSetup-4.6.0.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA):
Installing from a PPA is easy. Simply open Terminal and run the following commands:
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
You only need to do this once. The system will automatically notify you of future miniSphere updates.
Note: Users of Linux distributions other than Ubuntu will need to build the engine manually from the tarball (minisphere-4.6.0.tar.gz
).
miniSphere 4.5.11
miniSphere 4.5.11 is a maintenance release in the 4.5.x release series. This release updates Cell to use TypeScript instead of Babel when compiling ES2015 Cellscripts.
Changes in This Version
- Now uses TypeScript to transpile Cellscripts, improving build times a bit.
- Fixes a bug where SSJ repeats the previous action after an invalid command.
- Fixes a bug where regular expressions containing an octal escape (e.g.
\3
)
cause a SyntaxError.
Installing in Windows
Simply download and run miniSphereSetup-4.5.11.exe
. The Inno Setup install wizard will walk you through the installation process.
Installing in Linux
For Ubuntu (14.04 and later), miniSphere is available via personal package archive (PPA):
Installing from a PPA is easy. Simply open Terminal and run the following commands (you only need to do this once, Ubuntu will keep it updated automatically from then on):
sudo add-apt-repository ppa:fatcerberus/minisphere
sudo apt-get update
sudo apt-get install minisphere
Users of Linux distributions other than Ubuntu will need to build the engine manually from the tarball (minisphere-4.5.11.tar.gz
).