<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Dev on Firefly Zero docs</title>
    <link>https://docs.fireflyzero.com/dev/</link>
    <description>Recent content in Dev on Firefly Zero docs</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://docs.fireflyzero.com/dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Installation</title>
      <link>https://docs.fireflyzero.com/dev/installation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/installation/</guid>
      <description>&lt;h2 id=&#34;-installing-cli&#34;&gt;🐚 Installing CLI&lt;a class=&#34;anchor&#34; href=&#34;#-installing-cli&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;book-tabs&#34;&gt;&lt;input&#xA;    type=&#34;radio&#34;&#xA;    class=&#34;toggle tab&#34;&#xA;    name=&#34;tabs-0&#34;&#xA;    id=&#34;tabs-0-0&#34;&#xA;    data-name=&#34;Linux&#34;&#xA;    checked=&#34;checked&#34;&#xA;  /&gt;&#xA;  &lt;label for=&#34;tabs-0-0&#34;&gt;&#xA;    &#xA;      🐧&#xA;    Linux&lt;/label&gt;&#xA;  &lt;div class=&#34;book-tabs-content markdown-inner&#34;&gt;&lt;p&gt;Choose one of the following:&lt;/p&gt;&#xA;&lt;details open=&#34;true true&#34; &gt;&lt;summary&gt;Installation script (recommended)&lt;/summary&gt;&lt;div class=&#34;markdown-inner&#34;&gt;&#xA;&lt;p&gt;Run the following command in the terminal and watch the magic happen:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bash -c &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;curl https://fireflyzero.com/install.sh&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/details&gt;&#xA;&lt;details &gt;&lt;summary&gt;Cargo (Rust package manager)&lt;/summary&gt;&lt;div class=&#34;markdown-inner&#34;&gt;&#xA;&lt;p&gt;If you have &lt;a href=&#34;https://doc.rust-lang.org/cargo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cargo&lt;/a&gt; (the &lt;a href=&#34;https://www.rust-lang.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Rust&lt;/a&gt; package manager) installed, you can use it to install firefly-cli:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cargo install firefly_cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After that, open &lt;code&gt;~/.bashrc&lt;/code&gt; (or &lt;code&gt;~/.zshrc&lt;/code&gt; if you use zsh) and add at the end the following:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;alias ff&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;firefly_cli&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/details&gt;&#xA;&lt;details &gt;&lt;summary&gt;Manual&lt;/summary&gt;&lt;div class=&#34;markdown-inner&#34;&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/firefly-zero/firefly-cli/releases/latest&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Download the latest release&lt;/a&gt;. You need the one containing &lt;code&gt;-linux-&lt;/code&gt; in the name. If you don&amp;rsquo;t know which one you need, it&amp;rsquo;s probably the one ending with &lt;code&gt;-x86_64-unknown-linux-gnu.tar.gz&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emulator</title>
      <link>https://docs.fireflyzero.com/dev/emulator/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/emulator/</guid>
      <description>&lt;p&gt;The emulator allows you to run any Firefly Zero apps on your computer. To install it, follow the &lt;a href=&#34;https://docs.fireflyzero.com/dev/installation/&#34;&gt;Installation&lt;/a&gt; guide.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-input&#34;&gt;🕹 Input&lt;a class=&#34;anchor&#34; href=&#34;#-input&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The emulator supports the following input methods, from best to worst.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Firefly Zero device&lt;/li&gt;&#xA;&lt;li&gt;Steam controller&lt;/li&gt;&#xA;&lt;li&gt;Gamepad&lt;/li&gt;&#xA;&lt;li&gt;(⌛ Coming soon) UI buttons&lt;/li&gt;&#xA;&lt;li&gt;Keyboard&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;-firefly-zero-device&#34;&gt;📱 Firefly Zero device&lt;a class=&#34;anchor&#34; href=&#34;#-firefly-zero-device&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The device can be used as a gamepad (not only for the emulator). See &lt;a href=&#34;https://github.com/firefly-zero/firefly-gamepad&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;firefly-gamepad&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;-steam-controller&#34;&gt;💨 Steam controller&lt;a class=&#34;anchor&#34; href=&#34;#-steam-controller&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;It is discontinued but you may find a used one. It has a touchpad just like Firefly Zero, and that makes it a better fit, compared to Xbox controllers, for apps requiring a precise input.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Your first app</title>
      <link>https://docs.fireflyzero.com/dev/getting-started/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/getting-started/</guid>
      <description>&lt;h2 id=&#34;-pick-the-language&#34;&gt;👉 Pick the language&lt;a class=&#34;anchor&#34; href=&#34;#-pick-the-language&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Firefly Zero supports lots of programming languages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;🦀 Rust&lt;/li&gt;&#xA;&lt;li&gt;🏃 Go&lt;/li&gt;&#xA;&lt;li&gt;🐀 C and C++&lt;/li&gt;&#xA;&lt;li&gt;⚡️ Zig&lt;/li&gt;&#xA;&lt;li&gt;🐦‍⬛ Odin&lt;/li&gt;&#xA;&lt;li&gt;🐰 MoonBit&lt;/li&gt;&#xA;&lt;li&gt;🟦 AssemblyScript (a subset of TypeScript)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Experimental:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;🌙 Lua&lt;/li&gt;&#xA;&lt;li&gt;🧪 Elixir&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For simple apps and games, it&amp;rsquo;s a good idea to stick to what you already know. But if you&amp;rsquo;re ready to learn something new for better results, we recommend using Go. It&amp;rsquo;s easy to learn, sufficiently fast, and memory-safe.&lt;/p&gt;</description>
    </item>
    <item>
      <title>firefly.toml</title>
      <link>https://docs.fireflyzero.com/dev/config/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/config/</guid>
      <description>&lt;p&gt;The &lt;code&gt;firefly.toml&lt;/code&gt; configuration file tells firefly-cli how to build a ROM for the project. It should be placed at the root of the project (though you can explicitly specify the path using &lt;code&gt;--config&lt;/code&gt;) and must be in the &lt;a href=&#34;https://toml.io/en/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;TOML&lt;/a&gt; format.&lt;/p&gt;&#xA;&lt;p&gt;Required:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;author_id&lt;/code&gt; (string): your username. It should be unique, otherwise users may get a warning about invalid signature when launching your app. The best way to ensure that your author_id is unique is to add it into &lt;a href=&#34;https://catalog.fireflyzero.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;catalog.fireflyzero.com&lt;/a&gt;. There are also limitations on the length of the ID and used characters. If your ID (or any of the options below) is invalid, the &lt;code&gt;build&lt;/code&gt; command will tell you.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;app_id&lt;/code&gt; (string): the app ID. Must be unique for the given author. The combination &lt;code&gt;author_id.app_id&lt;/code&gt; is the full ID of the app, and that must be globally unique.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;author_name&lt;/code&gt; (string): your name. It will be shown in the launcher next to the app name. It must use ASCII Latin alphabet. Non-latin names have to be transliterated.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;app_name&lt;/code&gt; (string): the human-readable name of the game. Shown in the launcher. It must use ASCII Latin alphabet. It should use Title Case. For example, &amp;ldquo;The Plant vs the Zombie&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Optional:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Callbacks</title>
      <link>https://docs.fireflyzero.com/dev/callbacks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/callbacks/</guid>
      <description>&lt;p&gt;Callback is a function with a specific name that you define in your code and then the runtime calls it in the right time. None of the callbacks are required but you&amp;rsquo;ll need to define at least one of them for your app to actually do something.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-supported-callbacks&#34;&gt;📚 Supported callbacks&lt;a class=&#34;anchor&#34; href=&#34;#-supported-callbacks&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Firefly Zero supports the following callbacks:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;boot&lt;/code&gt; is called only once, after all the memory is initialized and all runtime functions are available but before any other callback is called. This is the best place to load fonts, sprites, and other assets, initialize the default state, read configurations, etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;update&lt;/code&gt; is called ~60 times per second. It is guaranteed to be never called more often, and it won&amp;rsquo;t be called less often if the game doesn&amp;rsquo;t consume too much resources. This is the best place to update the state of objects, position of NPCs, read and handle user input, etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;render&lt;/code&gt; is called before updating the image on the screen. It might be called less often than &lt;code&gt;update&lt;/code&gt; if the device sees that the game is slow and needs more resources. This is the best place to call all drawing functions.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;before_exit&lt;/code&gt; is called before the app is closed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cheat&lt;/code&gt; handles cheat codes (see &lt;a href=&#34;https://docs.fireflyzero.com/dev/debugging/#-cheat-codes&#34;&gt;Cheat codes&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;handle_menu&lt;/code&gt; is called when a custom menu item is selected.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;    &lt;img src=&#34;https://docs.fireflyzero.com/warn.png&#34; class=&#34;hint-icon warning&#34; /&gt;&#xA;&#xA;&#xA;&lt;blockquote class=&#34;book-hint warning&#34;&gt;&#xA;    &lt;p&gt;&lt;strong&gt;Use the right callback!&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Graphics</title>
      <link>https://docs.fireflyzero.com/dev/graphics/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/graphics/</guid>
      <description>&lt;h2 id=&#34;-pixels&#34;&gt;🔬 Pixels&lt;a class=&#34;anchor&#34; href=&#34;#-pixels&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The screen size 240x160 pixels, just like GameBoy Advance. Pixels are quite big, so it&amp;rsquo;s safe to draw one pixel wide lines and letters, they will be visible.&lt;/p&gt;&#xA;&lt;p&gt;Coordinates: x=0 is left, x=240 is right, y=0 is top, and y=160 is bottom.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-frames&#34;&gt;🖼 Frames&lt;a class=&#34;anchor&#34; href=&#34;#-frames&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;All those moments will be lost in time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;p&gt;Each update of the image on the screen is called &amp;ldquo;frame&amp;rdquo;. Before each frame is rendered, the &lt;code&gt;render&lt;/code&gt; callback function is called. This is where you should call all drawing functions you need.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Input</title>
      <link>https://docs.fireflyzero.com/dev/input/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/input/</guid>
      <description>&lt;h2 id=&#34;buttons&#34;&gt;Buttons&lt;a class=&#34;anchor&#34; href=&#34;#buttons&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Just feel that you&amp;rsquo;re the hardest little button to button.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;p&gt;Firefly Zero has 4 primary buttons:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;N&lt;/code&gt; (North) on the top.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;S&lt;/code&gt; (South) on the bottom.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;W&lt;/code&gt; (West) on the left.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;E&lt;/code&gt; (East) on the right.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are also Menu and Power buttons but regular apps don&amp;rsquo;t have access to these.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;read_buttons&lt;/code&gt; function returns which buttons are currently pressed. The SDKs also provide convenience methods to compare two states to get which buttons were just pressed or just released.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multiplayer</title>
      <link>https://docs.fireflyzero.com/dev/net/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/net/</guid>
      <description>&lt;p&gt;Firefly Zero has a very unique approach to multiplayer: every game (or app) can be played together! The only question is how the app handles multiple inputs. And this section covers how you can do that. And don&amp;rsquo;t worry, it&amp;rsquo;s very simple.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-how-it-works&#34;&gt;⚙️ How it works&lt;a class=&#34;anchor&#34; href=&#34;#-how-it-works&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you take two or more calculators and punch into all of them the same expression, you&amp;rsquo;ll get the same result. However if you make a typo in any of them, the result might be very different.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accessibility</title>
      <link>https://docs.fireflyzero.com/dev/accessibility/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/accessibility/</guid>
      <description>&lt;p&gt;Accessibility is about making your game accessible to as many people as possible. Everyone is different and have different limits to their abilities. If you can play your game yourself doesn&amp;rsquo;t mean that others can play it too. And this page will help you to fix it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-game-manuals&#34;&gt;📑 Game Manuals&lt;a class=&#34;anchor&#34; href=&#34;#-game-manuals&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Writing a manual is the easiest way to explain people how to play your game. Even if you have an in-game tutorial (which is always the best option if done right), it&amp;rsquo;s still a good idea to write a manual just in case.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Badges and scores</title>
      <link>https://docs.fireflyzero.com/dev/stats/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/stats/</guid>
      <description>&lt;h2 id=&#34;-badges&#34;&gt;🏅 Badges&lt;a class=&#34;anchor&#34; href=&#34;#-badges&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Badges are achievements that the game rewards to the player for doing some actions. Fore example, collecting a certain number of collectables, finding a rare item, doing a hard combo, etc. You can add badges to your game to encourage players to experiment with features they might not normally use, or to approach your game with entirely different play styles.&lt;/p&gt;&#xA;&lt;p&gt;Badges are defined in &lt;code&gt;firefly.toml&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;badges&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;m i tasti&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;descr&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bite yourself&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;u r tasti&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;descr&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bite someone else&amp;#34;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;apel tasti&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;descr&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;eat 100 apples&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;steps&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The key of each badge is the ID used to refer to it in the game. It must start at 1, go sequentially up, and never change between releases. For now, there can be at most 20 badges in a single game.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging</title>
      <link>https://docs.fireflyzero.com/dev/debugging/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/debugging/</guid>
      <description>&lt;p&gt;This page covers how to find bugs in your apps.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-cheat-codes&#34;&gt;😎 Cheat codes&lt;a class=&#34;anchor&#34; href=&#34;#-cheat-codes&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Breaking the law, breaking the law.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;p&gt;You can add cheat codes to your apps. Cheat codes can be used to put the app into a specific state: jump to a specific level, reset NPCs&amp;rsquo; positions, set character health, etc.&lt;/p&gt;&#xA;&lt;p&gt;First, add &lt;code&gt;[cheats]&lt;/code&gt; table into &lt;a href=&#34;https://docs.fireflyzero.com/dev/config/&#34;&gt;&lt;code&gt;firefly.toml&lt;/code&gt;&lt;/a&gt;. The table maps cheat code names to numbers that get passed into the app:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing</title>
      <link>https://docs.fireflyzero.com/dev/testing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/testing/</guid>
      <description>&lt;p&gt;Firefly Zero has an official framework for writing tests for apps. It&amp;rsquo;s written in &lt;a href=&#34;https://www.python.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Python&lt;/a&gt; and works great with &lt;a href=&#34;https://docs.pytest.org/en/stable/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pytest&lt;/a&gt;. If you don&amp;rsquo;t know Python, don&amp;rsquo;t worry. It&amp;rsquo;s quite a simple language and you don&amp;rsquo;t need to know much to succesfully write tests.&lt;/p&gt;&#xA;&#xA;&#xA;    &lt;img src=&#34;https://docs.fireflyzero.com/info.png&#34; class=&#34;hint-icon info&#34; /&gt;&#xA;&#xA;&lt;blockquote class=&#34;book-hint info&#34;&gt;&#xA;    &lt;p&gt;&lt;strong&gt;Under the hood&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/firefly-zero/firefly-test&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;firefly-test&lt;/a&gt; Python package is a wrapper around the actual Firefly runtime written in Rust and embedded into the package using &lt;a href=&#34;https://pyo3.rs/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PyO3&lt;/a&gt;. So, you can be sure that it works exactly as it will in emulator and you don&amp;rsquo;t even need to have the emulator installed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terms</title>
      <link>https://docs.fireflyzero.com/dev/terms/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/terms/</guid>
      <description>&lt;p&gt;Below are different terms that the documentation uses. If there is a technical word in the ocumentation that you don&amp;rsquo;t understand, it should be in there. If it&amp;rsquo;s not, send us a pull request or open an issue!&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Asset&lt;/strong&gt; is a file that an app needs but which isn&amp;rsquo;t the code. It includes sprites, music, sounds, sometimes dialogs and configurations, etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frame&lt;/strong&gt; is what is show on the screen at one specific moment. Each frame is a rectangle of 240 per 160 pixels.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Host function&lt;/strong&gt; is a function defined by Firefly runtime (as opposed to functions defined in the app). The Firefly SDK for your language is a wrapper for host functions.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ROM&lt;/strong&gt; is a distribution of your game. It includes a WebAssembly binary, game assets, metadata, signature, etc. A ROM is distributed in a ZIP (&lt;code&gt;*.zip&lt;/code&gt;) file and on the device is stored as a collection of files in a directory in &lt;code&gt;/roms/&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TOML&lt;/strong&gt; is a configuration format that we use for the &lt;code&gt;firefly.toml&lt;/code&gt; config. It&amp;rsquo;s stricter than YAML and more readable than JSON. If you&amp;rsquo;ve seen INI (&lt;code&gt;*.ini&lt;/code&gt;) files in WIndows games, TOML should look very familiar.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;WebAssembly&lt;/strong&gt; (aka &lt;strong&gt;wasm&lt;/strong&gt;) is a binary format in which all Firefly apps compile. It&amp;rsquo;s like EXE (&lt;code&gt;*.exe&lt;/code&gt;) on Windows.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Bulb Script</title>
      <link>https://docs.fireflyzero.com/dev/bulb/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.fireflyzero.com/dev/bulb/</guid>
      <description>&lt;p&gt;Bulb is a scripting language inspired by &lt;a href=&#34;https://bitsy.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bitsy&lt;/a&gt; and &lt;a href=&#34;https://play.date/pulp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pulp&lt;/a&gt; and designed specifically for Firefly to create simple adventure games.&lt;/p&gt;&#xA;&#xA;&#xA;    &lt;img src=&#34;https://docs.fireflyzero.com/info.png&#34; class=&#34;hint-icon info&#34; /&gt;&#xA;&#xA;&lt;blockquote class=&#34;book-hint info&#34;&gt;&#xA;    &lt;p&gt;&lt;strong&gt;What kind of games?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bulb is designed for making adventure games: you can walk around, talk to NPCs, interact with objects, and solve puzzles. Bulb cannot be used to implement reaction-based games, physics, real-time behaviors, complex fighting systems, or multiplayer. If your game needs any of these features, go to the main &lt;a href=&#34;https://docs.fireflyzero.com/dev/getting-started/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Getting started&lt;/a&gt; to make a game in a proper programming language.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
