|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- <!DOCTYPE html>
- <head>
- <meta charset="utf-8" />
- <!-- Set the viewport width to device width for mobile -->
- <meta name="viewport" content="width=device-width" />
-
- <title>Opensource Game Studio - Opensource Game Studio</title>
-
- <link rel="stylesheet" href="http://opengamestudio.org/theme/css/normalize.css" />
- <link rel="stylesheet" href="http://opengamestudio.org/theme/css/foundation.min.css" />
- <link rel="stylesheet" href="http://opengamestudio.org/theme/css/style.css" />
- <link rel="stylesheet" href="http://opengamestudio.org/theme/css/pygments.css" />
- <script src="http://opengamestudio.org/theme/js/custom.modernizr.js"></script>
-
- <!-- So Firefox can bookmark->"abo this site" -->
- <link href="feeds/all.atom.xml" rel="alternate" title="Opensource Game Studio" type="application/atom+xml">
-
- </head>
-
- <body>
-
- <!-- Nav Bar -->
- <nav>
-
- <!-- Show menu items and pages -->
- <div class="row">
- <div class="large-12 columns top-bar">
- <h1><a href="http://opengamestudio.org">Opensource Game Studio</a></h1>
- </div>
- </div>
- <div class="row top-menu">
- <div class="large-12 columns">
- <a href="/pages/projects.html" class="menu-button secondary">Projects</a>
- <a href="/pages/about.html" class="menu-button secondary">About</a>
-
- </div>
- </div>
- </nav>
- <!-- End Nav -->
-
-
- <!-- Main Page Content and Sidebar -->
- <div class="row">
-
- <!-- Main Blog Content -->
- <div class="large-9 columns">
-
-
-
- <article>
- <a href="http://opengamestudio.org/mahjong-recreation-start.html"><h3 class="article-title">Mahjong recreation start</h3></a>
- <h6 class="subheader" title="2018-01-26T00:00:00+03:00">Пт 26 Январь 2018
- <a class="button secondary small translation-button" href="http://opengamestudio.org/mahjong-recreation-start-ru.html">ru</a>
-
- </h6><p><img alt="Screenshot" src="http://opengamestudio.org/2018-01-26-mahjong-recreation-start.png" /></p>
- <p>This article describes the start of Mahjong game recreation.</p>
- <p><strong>Plan</strong></p>
- <p>We started Mahjong recreation endeavour by composing a brief plan to get gameplay with minimal graphics:</p>
- <ul>
- <li>Load single layout</li>
- <li>Place tiles in layout positions</li>
- <li>Distinguish tiles</li>
- <li>Implement selection</li>
- <li>Implement matching</li>
- </ul>
- <p>Just like any other plan, this one looked fine at first sight. However, once you get down to work, new details start to come out. This plan was no exception. Below are a few problems that came out during development.</p>
- <p><strong>Problem №1: provide binary resources across supported platforms</strong></p>
- <p>Mahjong is going to be available on desktop, mobile, and web. Each of these platforms has its constraints on accessing external files:</p>
- <ul>
- <li>Desktop can access almost any file</li>
- <li>Android/iOS have limited access to file system</li>
- <li>Web does not have any file system at all</li>
- </ul>
- <p>To provide a unified way for accessing resources, we decided to include them into final executable. This decision led to the birth of <strong>mjin-resource</strong> and <strong>mahjong-data</strong> projects.</p>
- <p><a href="https://bitbucket.org/ogstudio/mjin-resource">mjin-resource</a>:</p>
- <ul>
- <li>converts binary files to C header files with the help of <strong>xxd</strong> utility</li>
- <li>generates MJIN project that contains generated headers to be compiled into static library</li>
- <li>provides C++ interface for accessing generated resources</li>
- </ul>
- <p><a href="https://bitbucket.org/ogstudio-games/mahjong-data">mahjong-data</a> is an example of such generated MJIN project that is referenced by <a href="https://bitbucket.org/ogstudio-games/mahjong">mahjong</a> project.</p>
- <p><strong>Problem №2: load PNG images across supported platforms</strong></p>
- <p>To load PNG, we use corresponding OpenSceneGraph plugin. We built it for desktop with no issues. Building for web (Emscripten) turned out to be more difficult: Emscripten provides its own version of <strong>libpng</strong>, which OpenSceneGraph build script can't detect. We had to work around several OpenSceneGraph checks to successfully build the plugin for Emscripten.
- Building the plugin for Android and iOS is still waiting for us. Once we get PNG plugin working across supported platforms, we are going to publish a new tutorial for <a href="https://github.com/ogstudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> to cover PNG image loading. We already got a <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/issues/4">request to describe image loading</a>.</p>
- <p><strong>Development</strong></p>
- <p><a href="http://opengamestudio.org/lets-go.html">As you know</a>, we published OpenSceneGraph cross-platform guide to make OpenSceneGraph community stronger. We value education, and we love to share our knowledge. That's why we decided to develop Mahjong in small reproducible chunks uniquely identified by internal versions. These versions are available in <a href="https://bitbucket.org/ogstudio-games/mahjong">mahjong repository</a>.</p>
- <p>We also provide <a href="http://ogstudio.github.io/game-mahjong">version history and web releases of each internal version</a> for the following reasons:</p>
- <ul>
- <li>education: show how development looks like internally</li>
- <li>accessibility: provide older versions for comparison</li>
- </ul>
- <p><strong>Current Mahjong game status</strong></p>
- <p>As of the time of this writing, we have implemented tile selection. <a href="https://ogstudio.github.io/game-mahjong/versions/010/mjin-player.html">Try it in your browser!</a></p>
- <p>Once we finish tile matching implementation, we are going to publish the intermediate result for all supported platforms.</p>
- <p>That's it for describing the start of Mahjong game recreation.</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- </article>
-
-
- <hr class="gradient"/>
-
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/the-year-of-lessons.html"><h3 class="article-title">The year of lessons</h3></a>
- <h6 class="subheader" title="2017-12-31T22:00:00+03:00">Вс 31 Декабрь 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/the-year-of-lessons-ru.html">ru</a>
-
- </h6><p><img alt="Screenshot" src="http://opengamestudio.org/2017-12-31-celebration.jpg" /></p>
- <p>So, the year 2017 is approaching its finale, the year's results have already
- been summed up. We're going to take a break from igniting the fireworks or
- preparation of the champagne so that we can designate our goal for the
- following year.</p>
- <p>As it may be clear from ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/the-year-of-lessons.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/2017-summary.html"><h3 class="article-title">2017 summary</h3></a>
- <h6 class="subheader" title="2017-11-22T00:00:00+03:00">Ср 22 Ноябрь 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/2017-summary-ru.html">ru</a>
-
- </h6><p><img alt="Screenshot" src="http://opengamestudio.org/2017-11-22-2017-summary.png" /></p>
- <p>It's time to step back to see our accomplishments in 2017 and how they connect to the overall goal of Opensource Game Studio project.</p>
- <p><strong>Brief history</strong></p>
- <p>Opensource Game Studio project is 12 years old now.</p>
- <p><strong>2005.</strong> We started the project with a <a href="https://www.linuxquestions.org/questions/general-10/the-creation-of-the-best-rpg-355858/">fanatic call</a> to create the best game ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/2017-summary.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/back-to-the-static.html"><h3 class="article-title">Back to the Static</h3></a>
- <h6 class="subheader" title="2017-10-16T00:00:00+03:00">Пн 16 Октябрь 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/back-to-the-static-ru.html">ru</a>
-
- </h6><p><img alt="Back to the Static" src="http://opengamestudio.org/2017-10-16-back-to-the-static.png" /></p>
- <p>We have been using Wordpress as our website engine for more than seven years. And now it's time to move forward. Or backward.
- For some time we've been tracking the development of the new breed of website engines - static site generators.
- It seems that this is the technology ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/back-to-the-static.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/mjin-world-birth.html"><h3 class="article-title">The birth of MJIN world</h3></a>
- <h6 class="subheader" title="2017-09-10T00:00:00+03:00">Вс 10 Сентябрь 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/mjin-world-birth-ru.html">ru</a>
-
- </h6><p><img alt="The birth of MJIN world" src="http://opengamestudio.org/2017-09-mjin-world-birth.png" /></p>
- <p>This article describes the birth of MJIN world in August 2017.</p>
- <p><strong>mjin-player</strong></p>
- <p>As you know, <a href="http://opengamestudio.org/scripting-research.html">we spent July to research scripting</a>. We found a solution that satisfies the following criteria. Scripts should:</p>
- <ol>
- <li>run unchanged on all supported platforms</li>
- <li>allow extending C++ code</li>
- </ol>
- <p>We have verified the second criterion by writing ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/mjin-world-birth.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/scripting-research.html"><h3 class="article-title">Scripting research</h3></a>
- <h6 class="subheader" title="2017-08-16T00:00:00+03:00">Ср 16 Август 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/scripting-research-ru.html">ru</a>
-
- </h6><p><img alt="Scripting research" src="http://opengamestudio.org/2017-08-scripting-research.png" /></p>
- <p>This article describes scripting research in July 2017.</p>
- <p><strong>Our first goal of using a scripting language was to have a platform-independent code that runs unchanged on every supported platform.</strong></p>
- <p>OGS Editor 0.10 supports Python for such a code thanks to <a href="http://swig.org/">SWIG</a>. SWIG provides a way to wrap almost any ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/scripting-research.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/openscenegraph-cross-platform-guide.html"><h3 class="article-title">OpenSceneGraph cross-platform guide</h3></a>
- <h6 class="subheader" title="2017-07-17T00:00:00+03:00">Пн 17 Июль 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/openscenegraph-cross-platform-guide-ru.html">ru</a>
-
- </h6><p><img alt="OpenSceneGraph guide" src="http://opengamestudio.org/2017-07-openscenegraph-guide.png" /></p>
- <p>This article summarizes the work we did to produce OpenSceneGraph cross-platform guide.</p>
- <p>June marked the finish of <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide">OpenSceneGraph cross-platform guide</a> with the publishing of the last (initially planned) tutorial. The tutorial describes <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/tree/master/1.10.SampleWeb">how to build and run sample OpenSceneGraph application in Web</a> using Emscripten.
- In case you missed it, here ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/openscenegraph-cross-platform-guide.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/ios-tutorial.html"><h3 class="article-title">iOS tutorial</h3></a>
- <h6 class="subheader" title="2017-06-08T10:00:00+03:00">Чт 08 Июнь 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/ios-tutorial-ru.html">ru</a>
-
- </h6><p><img alt="iOS tutorial" src="http://opengamestudio.org/2017-06-08-ios-refactoring.png" /></p>
- <p>This article describes problems we faced during the creation of iOS tutorial in May 2017.</p>
- <p><a href="https://twitter.com/OpenGameStudio/status/826816343433498627">This February</a> we managed to get simple model rendered under iOS in just a few days. We expected to finish iOS tutorial in no time. However, the reality reminded us: it's easy to come ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/ios-tutorial.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/osg-sample.html"><h3 class="article-title">OpenSceneGraph sample</h3></a>
- <h6 class="subheader" title="2017-05-12T00:00:00+03:00">Пт 12 Май 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/osg-sample-ru.html">ru</a>
-
- </h6><p><img alt="OSG sample" src="http://opengamestudio.org/2017-05_osg-sample.png" /></p>
- <p>This article describes creation of the tutorials for building sample OpenSceneGraph application under Linux, macOS, Windows, and Android in April 2017.</p>
- <p>Previous tutorials described how to install OpenSceneGraph under Linux, macOS, Windows and render a model using the standard <strong>osgviewer</strong> tool. This time we worked on a <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide-application">sample OpenSceneGraph application ...</a></p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/osg-sample.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
-
-
-
- <article>
- <a href="http://opengamestudio.org/its-all-fine.html"><h3 class="article-title">It's all fine</h3></a>
- <h6 class="subheader" title="2017-04-07T00:00:00+03:00">Пт 07 Апрель 2017
- <a class="button secondary small translation-button" href="http://opengamestudio.org/its-all-fine-ru.html">ru</a>
-
- </h6><p><img alt="ItsAllFine" src="http://opengamestudio.org/2017-04_its-all-fine.png" /></p>
- <p>This article describes creation of the first four OpenSceneGraph tutorials in March 2017.</p>
- <p>The <a href="https://github.com/OGStudio/openscenegraph-cross-platform-guide/">first four OpenSceneGraph tutorials</a> explain how to create a cube model with Blender and display the model under Linux, macOS, or Windows using OpenSceneGraph tool called osgviewer.</p>
- <p>The whole process of creating a single tutorial turned ...</p><p class="subheader">Category: <a href="http://opengamestudio.org/category/news.html">News</a>
-
- </p>
-
-
- <a class="button radius secondary small right" href="http://opengamestudio.org/its-all-fine.html">Read More</a>
- <hr class="gradient"/>
- </article>
-
- <!-- /#posts-list -->
- <div class="pagination-centered">
- <h6 class="subheader">Page 1 of 3</h6>
-
- <p>
-
- <a href="http://opengamestudio.org/author/opensource-game-studio2.html">Next »</a>
- </p>
- </div>
-
- </div>
- <!-- End Main Content -->
-
- <!-- Sidebar -->
- <aside class="large-3 columns">
- <!--k
- <h5 class="sidebar-title">Site</h5>
- <ul class="side-nav">
- <li><a href="http://opengamestudio.org/archives.html">Archives</a>
- <li><a href="http://opengamestudio.org/tags.html">Tags</a>
-
-
- <li><a href="http://opengamestudio.org/feeds/all.atom.xml" rel="alternate">Atom feed</a></li>
- </ul>
-
-
- <h5 class="sidebar-title">Categories</h5>
- <ul class="side-nav">
- <li><a href="http://opengamestudio.org/category/news.html">News</a></li>
-
- </ul>
- -->
-
-
-
-
- <h5 class="sidebar-title">Ads</h5>
- <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
- <!-- ogs2 -->
- <ins class="adsbygoogle"
- style="display:block"
- data-ad-client="ca-pub-4473792248813084"
- data-ad-slot="9024247127"
- data-ad-format="auto"></ins>
- <script>
- (adsbygoogle = window.adsbygoogle || []).push({});
- </script>
-
- </aside> <!-- End Sidebar -->
-
- </div> <!-- End Main Content and Sidebar -->
-
-
- <!-- Footer -->
- <footer class="row">
- <div class="large-12 columns">
- <hr />
- <div class="row">
- <div class="large-7 columns">
- <p>Proudly powered by <a href="http://getpelican.com">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.</p>
- </div>
- </div>
- </div>
- <script type="text/javascript">
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-3773114-1']);
- _gaq.push(['_trackPageview']);
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
- </script>
- </footer>
|