<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Domingos Martins</title>
    <description>The latest articles on DEV Community by Domingos Martins (@domingos211).</description>
    <link>https://dev.to/domingos211</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4221237%2F55c2fe3e-2573-4915-8dd1-a43e7d272650.jpg</url>
      <title>DEV Community: Domingos Martins</title>
      <link>https://dev.to/domingos211</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/domingos211"/>
    <language>en</language>
    <item>
      <title>Running classic MU Online Season 6 in the browser and on mobile</title>
      <dc:creator>Domingos Martins</dc:creator>
      <pubDate>Sun, 01 Nov 2026 22:05:08 +0000</pubDate>
      <link>https://dev.to/domingos211/running-classic-mu-online-season-6-in-the-browser-and-on-mobile-ee3</link>
      <guid>https://dev.to/domingos211/running-classic-mu-online-season-6-in-the-browser-and-on-mobile-ee3</guid>
      <description>&lt;p&gt;If you played MU Online back around 2005, you probably remember the setup: downloading a patchy archive, running &lt;code&gt;main.exe&lt;/code&gt;, and praying legacy DirectX drivers wouldn't crash.&lt;/p&gt;

&lt;p&gt;We wanted to see how far we could take Season 6 using modern web standards, letting people play directly in a browser on both desktop and mobile without downloading a client. The result is &lt;a href="https://openmu.com.br/en" rel="noopener noreferrer"&gt;OpenMU&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffj554y1sha5ds284bkjy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffj554y1sha5ds284bkjy.png" alt="What OpenMU offers" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The foundation: open source work
&lt;/h2&gt;

&lt;p&gt;We didn't build this from scratch. This project stands on the shoulders of existing community efforts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server:&lt;/strong&gt; &lt;a href="https://github.com/MUnique/OpenMU" rel="noopener noreferrer"&gt;MUnique/OpenMU&lt;/a&gt;, an open-source C# (.NET) reimplementation of the classic Season 6 game rules and network stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client:&lt;/strong&gt; built on &lt;a href="https://github.com/Ignies/OpenMu-Client-Babylon" rel="noopener noreferrer"&gt;Ignies/OpenMu-Client-Babylon&lt;/a&gt; (which evolved from afrokick's original JSClient), written in TypeScript and rendered with Babylon.js (WebGL).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Engineering compromises &amp;amp; tweaks
&lt;/h2&gt;

&lt;p&gt;Porting a 2000s desktop MMORPG into a browser comes with very specific bottlenecks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The network bridge (WebSocket to TCP):&lt;/strong&gt; the original client protocol uses raw TCP sockets with SimpleModulus and XOR encryption. Browsers cannot open raw TCP sockets, so we run a lightweight proxy written in Bun that forwards bytes between WebSocket (WSS) and backend TCP. It maintains a 45-second keepalive and connection-level logging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asset loading &amp;amp; caching:&lt;/strong&gt; assets are bundled into packages, served gzipped (reducing payload sizes to roughly a third), and cached locally via a Service Worker. The first launch takes around a minute while assets cache; subsequent visits load almost entirely offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rendering limits:&lt;/strong&gt; dynamic shadows are only rendered for the 12 closest characters, and full equipment glow effects are limited to the 6 closest players. If the client drops below 22 FPS, it automatically toggles a stripped-down lightweight mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile input:&lt;/strong&gt; classic MU relies on mouse clicks and keyboard potion shortcuts (Q/W/E/R). For mobile browsers, we integrated virtual joysticks, an auto-attack toggle, and support for the built-in MU Helper system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvjn8jk9bm9u7eabonjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyvjn8jk9bm9u7eabonjr.png" alt="Real gameplay on desktop and mobile" width="800" height="958"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup today
&lt;/h2&gt;

&lt;p&gt;The server runs on standard Season 6 Episode 3 rules with a 20x EXP rate.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The same account works interchangeably across desktop and mobile browsers (one active session at a time).&lt;/li&gt;
&lt;li&gt;We do not sell gear for real money, except for rentable pets. An optional VIP system offers an EXP bonus and access to &lt;code&gt;/offlevel&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;All new accounts receive 5 days of VIP to test out the features.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxm1pvwdjddq0kntowz0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxm1pvwdjddq0kntowz0n.png" alt="The in-game player market" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We push updates weekly to improve rendering stability and touch controls.&lt;/p&gt;

&lt;p&gt;You can try it out here: &lt;a href="https://openmu.com.br/en" rel="noopener noreferrer"&gt;https://openmu.com.br/en&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback on performance, touch responsiveness, or browser quirks is very welcome!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>gamedev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
