Riven X 0.9.8 is now available. It addresses the missing sound effects and music issue in 0.9.7.
Download Riven X 0.9.8 (1.6 MiB)
I’ve finished pushed out Riven X 0.9.7 a few days ago. It fixes a large number of bugs and includes over a year of, admittedly sparse, development. In particular, it fixes the QuickTime version check issues people have reported on recent versions of Snow Leopard.
Download Riven X 0.9.7 (1.9 MB)
As far as finishing Riven X, here is my general plan. First, I’ve dropped support for Tiger and Leopard. Apple is about to release 10.7 “Lion”, and I really don’t have the resources or time to support these older versions, not to mention all the bugs they have in their graphics drivers and other frameworks that will never be fixed. Focusing on current OS and current OS – 1 is the right thing to do for a hobby project.
Secondly, and I am serious, I am giving myself one year to finish the project (starting July 2011). Hopefully I’ll need a lot less, but if I’m not done after that I’ll declare the project dead (as far as I am concerned). I will be making a definitive list of issues I want to address for 1.0 and will share it with you when done.
Until then, enjoy the new release.
Update: Riven X 0.9.1 is now available to resolve the multi-disc installation issue (lp:577641).
Update 2: Riven X 0.9.2 is now available to resolve another multi-disc installation bug.
Update 3: Riven X 0.9.3 is now available to resolve an issue in the installer on Tiger.
Update 4: Riven X 0.9.4 is now available to resolve an issue with the village trapeze (lp:577758).
Update 5: Riven X 0.9.5 is now available to resolve a crash at launch on Tiger. (lp:577893) .
Update 6: Riven X 0.9.6 is now available to resolve another crash at launch on Tiger (lp:578062).
After a long development cycle, Riven X 0.9 is finally available. This is an almost-complete version of the game with only a few features remaining and some polish. The game should be entirely playable from start to finish.
Download Riven X 0.9.6 (1.9 MB)
I realize it’s been a little while since I communicated the status of Riven X, so here’s where things are at right now:
- The game is fully implemented. Every puzzle works as does the inventory, all the endings are done, the i’s are dotted, the t’s crossed.
- There is one missing feature from the original game: the flies special effect, seen in many cards on the village island. This will take at least 2 to 3 weeks to implement.
- Many improvements have been made to the engine which should address some of the currently open bugs.
Once the flies special effect is done, Riven X 0.9 will go out and I will enter the 1.0 development cycle, which will aim at truly polishing the program, fixing as many bugs as possible, testing with a wider audience and preparing the release. I expect this process to take about a month.
So thank you all for your support, it won’t be too long now until you can get your hands on Riven X 1.0.
The spec is available at http://www.opengl.org/registry/ for both profiles as well as the new GLSL 1.5 spec.
Some of the highlights:
- OpenGL 3.2 comes in 2 “flavors” called profiles. The core profile contains the streamlined, modern OpenGL API, while the compatibility profile contains all of core plus all of the old-world APIs. An implementation of OpenGL 3.2 is required to support core, while compatibility is optional. This profile mechanism replaces the ARB_compatibility extension mechanism for providing deprecated functionality.
- GLSL 1.5, which has numerous improvements (listed below).
- Geometry shaders (ARB_geometry_shader4). I think we all know what this does
- Multisampled textures and texture samplers (allows access to specific multi-sampling samples) (ARB_texture_multisample). This is useful for a wide range of applications, including efficient depth peeling, K-buffer emulation and multi-sampled deferred shading.
- Fragment depth clamping (ARB_depth_clamp). Useful for a number of algorithms, such as shadow volumes.
- Fence objects (ARB_sync or APPLE_fence). Allows finer-grained pipeline synchronization and non-blocking “are you done” queries.
- Seamless cube map filtering (ARB_seamless_cube_map). This functionality allows the GPU to sample from adjacent faces for a given cube map sampling operation in order to compute a seamless filtered sample. Without this functionality, any samples falling outside of the selected cube map face are subject to the normal texture wrapping mode (e.g. CLAMP_TO_EDGE, etc.), which leads to seams appearing between the cube map faces.
There are also a number of new features that are designed specifically to make it easier to port Direct3D code or to re-use assets designed for Direct3D. Some of those include:
- BGRA vertex component ordering (ARB_vertex_array_bgra). This is basically the standard Direct3D ordering.
- Modification of the base vertex index (ARB_draw_elements_base_vertex). This adds a variant DrawElements function which allows to specify an offset that is to be added to every index. This in turn allows to have “relocatable” indexed meshes: a particular indexed mesh, for which you have the index array, can be relocated anywhere inside any number of vertex arrays. All you need to know is the new base offset of the mesh inside the vertex array that is to be used by a particular draw call. This is a direct equivalent of BaseVertexIndex in Direct3D 9 and BaseVertexLocation in Direct3D 10.
- Configurable fragment center coordinates (ARB_fragment_coord_conventions). This basically lets you configure the fragment center and origin for fragment processing (e.g. fragment shaders). With this extension, you can adopt the Direct3D 9 conventions (pixel center at <0.0, 0.0> and origin at upper-left corner of window) or the Direct3D 10 conventions (pixel center at <0.5, 0.5> and origin at upper-left corner of window). This does not affect rasterization or transformation (which you can modify using existing OpenGL state).
- Provoking vertex control (ARB_provoking_vertex). Quoting the extension, “[t]he provoking vertex of a primitive is the vertex that determines the constant primary and secondary colors when flat shading is enabled”. In OpenGL, the last vertex is the provoking vertex (with the exception of polygon primitives), whereas it is the first vertex in Direct3D. This lets you instruct OpenGL to use the first vertex.
As for GLSL 1.5, some of the highlights include:
- Geometry shader support. This was previously provided by extensions, now it’s in the core spec.
- New gl_PrimitiveID as an input to fragment shaders (relevant when using geometry shading or instancing).
- New determinant built-in function.
- Vertex shader inputs (e.g. vertex attributes) can now be arrays.
- Vertex shader outputs, geometry shader inputs and outputs as well as fragment shader inputs can now be structures.
- The “interface blocks” mechanism introduced in GLSL 1.4 to support uniform buffer objects has been expanded to include in and out interfaces as well (e.g. vertex attributes and varyings).
- New origin_upper_left and pixel_center_integer qualifiers for gl_FragCoord, to match the configurable fragment center coordinates functionality.
- New sampler types for multi-sampled texture sampling.
Perhaps the most dramatic change to the language are interface blocks, which is an extension of the uniform block functionality introduced in GLSL 1.4 to support uniform buffer objects. Right now, it is illegal to have an input block in a vertex shader or an output block in a fragment shader, so they are mainly used to define coarse granularity backing of interface data (e.g. varyings) between vertex, geometry and fragment shaders. Uniform blocks are shared across all shader types and can be backed by buffer objects, which is how OpenGL expresses Direct3D 10 constant buffers.
Update: More information about the release and some new extensions at http://www.g-truc.net/#news0170.
I’ve created a developer diary for Riven X on Twitter at http://twitter.com/rivenx. I’ll be posting there much more frequently than on this blog I think, mostly because I appreciate the short status updates style of communication Twitter excels at.
I am also looking at integrating this blog a little bit better with Twitter. For those of you who want to follow me, check out http://twitter.com/jfroy.
Update: Riven X 0.8.3 is now available.
Riven X 0.8 is a massive release, with nearly every puzzle in the game implemented and a long list of improvements and bug fixes to the engine. See the release notes for all the details. I know it’s been a long time coming, but I think you will find it to be the strongest, most polished release yet. I’m also hoping it will resolve a number of graphics issues some people have been seeing on older hardware as well as on Intel graphics hardware.
I now turn my attention to a short list of remaining puzzles and core game features to essentially complete the game. This work will be released as Riven X 0.9, which aims to be a completely playable from start to finish version of the game. I expect this work to take around a month and a half. Once Riven X 0.9 is out, I will advertise the beta a little bit more to gather as much feedback as possible to make sure Riven X works great on as many configurations as possible. The 1.0 release cycle will thus focus on polish, bug fixing, interface and installation improvements, packages, and all the things one must do for a final release.
Finally, thank you to all of those who have tested Riven X so far and contributed feedback or bugs. Your help and support is greatly appreciated.
Now go on and give Riven X 0.8 a try!
Download Riven X 0.8.3 (4.0 MiB).
I thought I should congratulate Cyan Worlds on a really good port of the original MYST to the iPhone. That they managed to accomplish this at all is pretty amazing, but they went beyond getting the game on there and really tried to adapt the control interface for the touch screen.
And according to numbers on the App Store, they are doing quite well, at number 10 overall in the US. Considering the game is a massive 727 MB, that’s quite an achievement.
And before you ask, no, I don’t have Riven X working on the phone… yet. There are a number of technical challenges standing in the way, most notably the sheer amount of assets in Riven and background movies (the phone may not be able to handle those at all). In any case, I am focused on finishing the desktop version first.
Speaking of which, I should have the first development release of the 0.8 series out shortly.
Get the from http://developer.nvidia.com/object/opengl_3_driver.html. I’m sure AMD will follow suite in short order. IHV support is incredibly important to the ongoing success of the OpenGL standard, so a big thank you to them.
The spec is available at http://www.opengl.org/registry/doc/glspec31.20090324.pdf
Some of the highlights:
- ARB_draw_instanced is now core (instanced draw in vertex shaders with an instance ID built-in)
- EXT_copy_buffer is now core (data copies between buffer objects without round-tripping to SRAM)
- ARB_texture_buffer_object is now core (using buffer objects as the backing store for texture images)
- ARB_texture_rectangle is now core (non-power of two textures with non-normalized texture coordinates and additional restrictions)
- ARB_uniform_buffer_object is now core (using buffer objects as the backing store for many uniforms)
- New signed normalized texture format
- Modified NV_primitive_restart is now core (server-side primitive rasterization restart)
- All of the OpenGL 3.0 features marked deprecated in Section E of the OpenGL 3.0 specification are gone from the OpenGL 3.1 specification, with the exception of line widths greater than one.
In addition, GLSL 1.4 has been released in tandem with OpenGL 3.1. The spec is available at http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.40.05.pdf. Some of the highlights include support for uniform buffers, rectangular textures, texture buffers and instanced drawing. In addition, all OpenGL “fixed function” built-in variables, namely built-in vertex shader inputs, built-in state uniforms (with the exception of depth range parameters) and all built-in varyings have been removed.
Of course, in both cases, the removed functionality has been moved to ARB extensions (ARB_compatibility), as was described in detail in the deprecation model section of the OpenGL 3.0 specification.
From http://www.khronos.org/news/events/detail/gdc_san_francisco_2009 and Khronos announces highlights from the News Conference and Developers Sessions at GDC 2009:
Streamlined OpenGL 3.1 Specification Released
Just nine months after OpenGL 3.0; Adds cutting-edge GPU functionality
The press release also mentions that OpenCL 1.0 implementations are close to shipping, which is extremely impressive considering that the specification was not released too long ago. In any case, this is going to be an interesting week for the OpenGL and OpenCL communities.