<?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: XANOZOID</title>
    <description>The latest articles on DEV Community by XANOZOID (@xanozoid).</description>
    <link>https://dev.to/xanozoid</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F205896%2Fc41219f5-0974-4280-b307-bb8fdced0f96.png</url>
      <title>DEV Community: XANOZOID</title>
      <link>https://dev.to/xanozoid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xanozoid"/>
    <language>en</language>
    <item>
      <title>Introducing Burger! A Game Programming Language</title>
      <dc:creator>XANOZOID</dc:creator>
      <pubDate>Sun, 10 Sep 2023 16:05:59 +0000</pubDate>
      <link>https://dev.to/xanozoid/introducing-burger-a-game-programming-language-1jdf</link>
      <guid>https://dev.to/xanozoid/introducing-burger-a-game-programming-language-1jdf</guid>
      <description>&lt;p&gt;Hello! I'm Xanozoid, and I'm excited to introduce the idea behind my language "Burger" (BGL: Burger Game Language). I'm writing this post today to provide a taste of Burger and ideas of what future BGL posts may contain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Another Language?
&lt;/h2&gt;

&lt;p&gt;I've been programming for a while. It was a year or so before Game Maker 8 was released (released Dec 2009), and I used that program almost daily for as much time as possible each day. So, by that, you can guess I got into programming because I liked making games - and you'd be right. Skip a couple of years, and Game Maker Studio comes out, and I'm still using it every day until it becomes unusable on my laptop. Not much longer, GM:S2 comes out, and I buy that too . . . well, something happened, and I felt like I had to move on.&lt;/p&gt;

&lt;p&gt;So, what does this have to do with another language? Well, during the last few years I was using GM, I started moving on to new languages. It was a considerable difference from programming in GML - but in a good way (mostly). I found a LOT of programming languages I liked and a few I didn't. I've since dabbled with around 40 languages, just trying to familiarize myself with the options and the programming landscape. There were problems, though, and I was looking for something that didn't exist.&lt;/p&gt;

&lt;p&gt;So, sorry to cut a long story short, but here comes BGL. What BGL does is solve a personal problem of mine. I'm looking for a free and open-source experience that captures much of my experience working with Game Maker (not the exact same, though). That's to say, Burger is an attempt at molding my experiences working in other languages, specifically GML, into something I can use to make games in a fashion I'm used to. In any case, hopefully, I can interest you in the project in this post: I'll go over (for now) a small detail of how it looks and some core ideas that further explain why I "want" "burger". &lt;/p&gt;

&lt;h2&gt;
  
  
  What does it look like?
&lt;/h2&gt;

&lt;p&gt;🍔! No just joking . . . It's mostly a blend of my three most experienced languages. Without saying all three, I'll mention just two: JavaScript and Haxe. Do be fooled! If you're comfortable with either of those languages, you should only have to make a few small adjustments to take a bite at Burger!&lt;/p&gt;

&lt;p&gt;So, what about the syntax and semantics? Like I said - it's a lot like JavaScript and Haxe, but since JavaScript is more widely known, here's a small example that exposes a lot of similarities to JS but a lot of differences.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="nx"&gt;move_north_east&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amt_right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;amt_up&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;amt_right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="nx"&gt;amt_up&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;create_and_move_object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;move_x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;move_y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;move_north_east&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;move_x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;move_y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// silly destructure&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So this is a small but silly example. If you're comfortable with JS you should be able to tell what's going on with a slight correction to your JS-lenses. That being said, the first thing that probably jumped out to you is there are two notations for functions. One is for methods, and one is for . . . functions. The simple explanation is methods have access to &lt;code&gt;this&lt;/code&gt;, and implicitly so, while functions have no concept of a &lt;code&gt;this&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Is &lt;code&gt;this&lt;/code&gt; in BGL different from &lt;code&gt;this&lt;/code&gt; in JS? I won't bore you with the details, but let's say it is somewhat different. The main difference is that &lt;code&gt;this&lt;/code&gt; carries through method calls implicitly via some context. If that doesn't make sense, we'll review it in more detail in later posts!&lt;/p&gt;

&lt;p&gt;While I still have your attention, though, you may have noticed a few more small things. Firstly, &lt;code&gt;this&lt;/code&gt; in the arguments. That's a small trick I picked up from Dart (&lt;a href="https://dart.dev/"&gt;check it out&lt;/a&gt;!) - it just means "apply those arguments to this object". The last thing you may have noticed is the colon (:) in &lt;code&gt;obj:move_north_east...&lt;/code&gt;. This is a reflection of a core idea in BGL that we'll discuss next - but it essentially means "apply this method to obj". &lt;/p&gt;

&lt;h2&gt;
  
  
  Core Ideas
&lt;/h2&gt;

&lt;p&gt;There isn't necessarily a ton to Burger as a language. In fact, it probably "&lt;em&gt;feels&lt;/em&gt;" like any other "game language", perhaps as one person put it: "Lua in JS clothes". There &lt;em&gt;are&lt;/em&gt; things that separate it from other languages, however, and it doesn't just have "inspired" syntax/semantics. Though, it should &lt;em&gt;mostly&lt;/em&gt; seem this way. &lt;/p&gt;

&lt;p&gt;As a whole, this is a scripting language that will be embedded in another language made to be used for writing games (for BGE: Burger Game Engine). This is all intentional because it's pretty much how I imagine a game scripting language should work. There are other reasons for this, but mostly because I see Burger as something other than for game-specific things. That does &lt;em&gt;not&lt;/em&gt; mean you can only use Burger in an engine, though - as this is the #1 thing that bothered me about GML. Also, If you have been wondering about the name up to this point, it's because Burger is a scripting language that will be written in Beef (A lower-level language also made for game development. &lt;a href="https://www.beeflang.org/"&gt;Check it out&lt;/a&gt;!). Lastly, I am going with Beef because of its many targets - I want to target as many platforms as possible (for me).&lt;/p&gt;

&lt;p&gt;So now that we got an idea of the "whole", what about core ideas of the &lt;strong&gt;language&lt;/strong&gt;? We might say there isn't much to the language because it's like many other C-like languages, but that's not entirely true. At least there are a few things that stick out or even separate it. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All calls are (mostly) statically resolvable&lt;/li&gt;
&lt;li&gt;Language designed for game dev&lt;/li&gt;
&lt;li&gt;Portable and embeddable &lt;/li&gt;
&lt;li&gt;capable of server-side programming&lt;/li&gt;
&lt;li&gt;has a decent concurrency story via workers and coroutines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few of these ideas we'll discuss over the course of the BGL posts but one thing that might catch your attention at first glance is the first point. Like mentioned earlier, we have a special syntax &lt;code&gt;object:method&lt;/code&gt;. There's also &lt;code&gt;object: { block }&lt;/code&gt;. Like said before, it's related to point 1 and means "object :(applied to) logic" - we pretty much don't have callbacks in this language, or other ways of storing methods/functions inside of data that moves around (I'm slightly lying), but that's the gist of it. There is a reason for this, but we will talk about this in more detail as more posts come out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Timeline and future posts
&lt;/h2&gt;

&lt;p&gt;Burger has yet to have an entirely clear timeline (I only work on it during the weekends), but I want to use it sooner rather than later. That being said, a lot of the front work has been done already, and it's mostly a matter of implementation at this point. There's a lot to cover about the design and work that's been done so far, and I intend on writing some posts down the line about the design decisions and overall language - as well as where the implementation is heading these coming weeks.&lt;/p&gt;

&lt;p&gt;The next few posts I write will expose even more central ideas around Burger and the challenges/experiences of writing a language. So be on the lookout!&lt;/p&gt;

&lt;p&gt;If Burger has captured your interest, please feel free to look at the &lt;a href="https://github.com/XANOZOID/Burger"&gt;repository&lt;/a&gt;! There, you may find a complete outline of the intended syntax/semantics and a working ANTLR4 grammar. Have further comments or questions? Continue them here or on the &lt;a href="https://github.com/XANOZOID/Burger"&gt;repo&lt;/a&gt;! &lt;/p&gt;

&lt;p&gt;Thanks for reading 🍔😁&lt;/p&gt;

</description>
      <category>programming</category>
      <category>coding</category>
      <category>showdev</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Hello! From: HaxePunk and me 😄</title>
      <dc:creator>XANOZOID</dc:creator>
      <pubDate>Fri, 02 Aug 2019 22:12:32 +0000</pubDate>
      <link>https://dev.to/xanozoid/hello-from-haxepunk-and-me-4h9k</link>
      <guid>https://dev.to/xanozoid/hello-from-haxepunk-and-me-4h9k</guid>
      <description>&lt;h1&gt;
  
  
  Welcome;
&lt;/h1&gt;

&lt;p&gt;Unless you're from the future, we haven't met; nice to meet you! I'm X.A.N.O.Z.O.I.D. (or xanozoid, xano, or xanoid, etc . . .) a programmer . For now, I'll skip the whole "about me" and leave that for another day. &lt;/p&gt;

&lt;h2&gt;
  
  
  Blogging
&lt;/h2&gt;

&lt;p&gt;This is my attempt to bring you a weekly(or more frequent) digest of updates on projects I'm working on. As of this post, it will be primarily focused on the development of &lt;strong&gt;HaxePunk&lt;/strong&gt; and then maybe a few posts here and there on a data-centric game editor, or the technologies involved (Haxe, Kha, Gui, rendering, cross-platform stuff).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So if you're interested in HaxePunk news, updates on an ambitious editor, or learning about the tech involved I'd appreciate a follow: &lt;a href="https://dev.to/xanozoid"&gt;dev.to&lt;/a&gt; / &lt;a href="https://www.github.com/xanozoid"&gt;github&lt;/a&gt;&lt;/em&gt; 🙂&lt;/p&gt;

&lt;h1&gt;
  
  
  The state of HaxePunk
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OLnGaQL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/dsxq7cfxq94wwc2wypdy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OLnGaQL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://thepracticaldev.s3.amazonaws.com/i/dsxq7cfxq94wwc2wypdy.jpg" alt="HaxePunk August 2019" width="256" height="256"&gt;&lt;/a&gt;&lt;br&gt;
It's probably no secret that HaxePunk has been lacking when it comes to updates. The time of the original maintainers have passed, but HaxePunk lives on; maybe they'll come back in the future. Don't worry, HaxePunk's not dead; it has been getting a lot of care recently, as you'll see.&lt;/p&gt;

&lt;p&gt;If you have been thinking about trying HaxePunk recently, you'll probably have a few questions. I'll be frank, HaxePunk is in a legacy state right now. The last published version was released on Haxelib and relies on old versions of Lime and OpenFl. That version was posted just before previous project maintainers retired from HaxePunk, so it has been a while since any fixes were published. On the other hand, I simply recommend using HaxePunk's dev-branch, the dev branch was brought back to life in May. While the dev branch for HaxePunk has been updated and now works with the latest Lime and OpenFl, there is a bug in Lime that prevents us from rendering with WebGL. Just keep that in mind; if you need HTML5 use the Haxelib version with the compatible Lime/OpenFL.&lt;/p&gt;

&lt;p&gt;So, should you pick up HaxePunk? Well . . . a few things need to be clarified on the website, but HaxePunk has always had solid documentation, a simple to use workflow, and is still a well-tested engine. You can develop and publish games using the dev branch or the past version, so that's all fine. Right now, we're in a critical transition period, trying to pump life back into the project, which leads me to the next part. . .&lt;/p&gt;
&lt;h1&gt;
  
  
  The state of the transition
&lt;/h1&gt;

&lt;p&gt;If you haven't heard, there's been a recent initiative to make HaxePunk relevant again. We've taken the task to utilize Kha, instead of Lime, while keeping the same API you know and love. We are doing this to simplify HXP's workflow and obtain the several benefits Kha has to offer: support for desktop, web, mobile, consoles, and native graphics abstractions . . . a compiled cross-platform shader-language, platform-consistent input, and more.&lt;/p&gt;

&lt;p&gt;We started this ambitious transition back in June and, while there have been some bumps along the way, we're still making progress. We presently have standard input working and a project that compiles. This may not seem like much, but it's the perfect starting point for us to proceed with our next steps.&lt;/p&gt;

&lt;p&gt;The features that aren't fully-operational yet are: rendering, audio, the asset and config pipeline, and a few things we've yet to see. It is technically possible to use about half or more of the features available in HaxePunk, but a videogame isn't much without &lt;em&gt;video&lt;/em&gt;. Put simply, the core of HaxePunk has been left untouched and we're rewiring the lower-level stuff that's hidden from the core API.&lt;/p&gt;

&lt;p&gt;There's a surprisingly small number of tasks to finish before we can start beta-testing this upcoming version. This isn't to say it won't be a couple of weeks or months until it's in a beta-state, but there's a straight-enough path for us to pursue(&lt;strong&gt;a huge thanks to Matrefeytontias&lt;/strong&gt;). This may not be a completely accurate picture, because the majority of work left to be done is with rendering. Matrefeytontias is our rendering-guy, so it's up to him to dig into that. It's just that there's a lot of details to consider moving from the Lime version that causes quite a headache. No need to worry though! Matrefeytontias is confident about this and has already shown promising results, so a few weeks or months is still in the picture. Maybe we'll have a gift for everyone before the New year.&lt;/p&gt;

&lt;p&gt;I would have loved to introduce this blog in an experience-focused way, instead of a summary of our work, but that's what happens when you get busy. My next post will have more trial-error/experience content; this was just my best attempt to brief you all of what happened and what is being pursued immediately. &lt;/p&gt;
&lt;h1&gt;
  
  
  HaxePunk's Future
&lt;/h1&gt;

&lt;p&gt;We have a lot of ambitions going forward! Yeah, we could have just kept working on the Lime version. Yeah, we also could have supported &lt;em&gt;both&lt;/em&gt; Lime &lt;em&gt;and&lt;/em&gt; Kha. But we didn't, so why? We chose Kha for the future, we dropped Lime because it won't be necessary after Kha. It's blunt like that, and for a good reason, but above all else, Kha is portable. Thanks to Kha being an "Ultra portable multimedia framework", HaxePunk will have all of the power it did before with much, much, more reach. Picture it like HaxePunk was a train conductor, but later decided to become an airplane pilot - just as capable but with unlimited destinations. Thus our primary goal with HaxePunk is making it future-proof, giving it a new foundation for it to expand on our terms to be powerful and native across several existing platforms - and those yet to be known.&lt;/p&gt;

&lt;p&gt;We're focusing on making the #KhaHaxePunk version usable right now, so you may be wondering if any other things are coming out for HaxePunk. I should bring attention to the fact that there is a slight difference between Matrefeytontias and me as far as goals are. We are both focused on making sure HaxePunk is usable, stable, and powerful. We both agree that any changes done in the transition should be minimal. Where I start to verge is on features and the future after the KHA-port. Many ideas sprung during at the start of our journey, as all big initiatives create some sort of hype, but those have been taken out of the main picture and we'll come back to consider their appropriateness.&lt;/p&gt;

&lt;p&gt;I'm still going to give you a taste of my ideas though, so here's a list of things I want to bring to HaxePunk (none of these are expected to be officially supported, or even done - they're just "cool" ideas that are fun to share)&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;There's a lot more to talk about in the future, especially over the process; so, stay tuned because I'll be covering the weekly experiences we have going forward! &lt;/p&gt;

&lt;h2&gt;
  
  
  Fin
&lt;/h2&gt;

&lt;p&gt;Thanks for reading! This took more time to get up and running than I'm willing to admit. From the writing, formatting, revisions, and figuring out how I want to distribute/publish this article it's taken nearly a week to finally choose something and that something was dev.to. As you probably guessed, that does mean this post is a week old; so I might publish yet another article this weekend depending on how busy I am.&lt;/p&gt;

&lt;p&gt;This was my first ever blog post or anything of this nature, so I'm hopeful it serves its purpose! If you have any questions, comments, or criticisms or anything at all feel free to do so! I'm really looking forward to your responses 😄.&lt;/p&gt;

&lt;p&gt;Since I'm hoping to reach out to you guys in the Haxe community, this may be a good place for us all to discuss and write about our developer experiences (if you're into that sort of thing). I decided to come to dev.to instead of my-own-site/medium/WordPress because it seemed to be the most fitting/friendly for this kind of material. I'd love to see some more writing from the Haxe community so let me know if you do! &lt;/p&gt;

&lt;p&gt;For those who have no idea about any of this, I encourage you to visit &lt;a href="https://www.haxe.org"&gt;https://www.haxe.org&lt;/a&gt;. Haxe is a unique and mature programming language that transpiles to other languages like JavaScript, Java, C++, and more; it has a number of use-cases like for web-development, game development, making cross-platform apps and so much more. Have a look around, we're all happy to see some new faces and say hi!&lt;/p&gt;

</description>
      <category>haxe</category>
      <category>kha</category>
      <category>gamedev</category>
      <category>haxepunk</category>
    </item>
  </channel>
</rss>
