<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Development &#8211; Caged Wave</title>
	<atom:link href="https://cagedwave.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>https://cagedwave.com</link>
	<description>games that flow</description>
	<lastBuildDate>Thu, 09 Sep 2021 20:33:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://cagedwave.com/wp-content/uploads/2021/08/cropped-Caged-Wave-Logo-2021a-square-32x32.png</url>
	<title>Development &#8211; Caged Wave</title>
	<link>https://cagedwave.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Pushing all the right buttons</title>
		<link>https://cagedwave.com/pushing-all-the-right-buttons/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pushing-all-the-right-buttons</link>
		
		<dc:creator><![CDATA[Nathan]]></dc:creator>
		<pubDate>Thu, 09 Sep 2021 20:32:14 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://www.cagedwave.com/?p=102</guid>

					<description><![CDATA[A short update today. I managed to set up the interaction between the player and that huge-ass green button. As I&#8217;m trying to still come to grips with coding in C++ (I&#8217;m a Java developer, so it&#8217;s similar, but not quite the same), I immersed myself in a few basic C++ principles these past few [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>A short update today. I managed to set up the interaction between the player and that huge-ass green button.</strong></p>



<span id="more-102"></span>



<p>As I&#8217;m trying to still come to grips with coding in C++ (I&#8217;m a Java developer, so it&#8217;s similar, but not quite the same), I immersed myself in a few basic C++ principles these past few days. This will eventually mean a game with smarter code.</p>



<h2 class="wp-block-heading">Open sesame</h2>



<p>But all the boring programming theory was becoming kind of&#8230; well&#8230; boring, so I decided to set up the mechanics behind the player interaction with the button. And, more importantly, the button now also opens the doorway. At least&#8230; until the player steps off the button again. Here&#8217;s a short test clip:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Button Test" width="676" height="380" src="https://www.youtube.com/embed/pzrB3c_tM7o?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>The next update will be a lot meatier and expand even more on the player interactions with his environment. So until next time!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Control Freak</title>
		<link>https://cagedwave.com/control-freak/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=control-freak</link>
		
		<dc:creator><![CDATA[Nathan]]></dc:creator>
		<pubDate>Sat, 04 Sep 2021 15:27:24 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://www.cagedwave.com/?p=84</guid>

					<description><![CDATA[This post is all about taking control. Both of the player character, and of the way the game window is presented to the player. You&#8217;ll also see a basic game screen setup I&#8217;ll be using for upcoming tests. For this test, I&#8217;ve used the Caged Wave logo as a simple game test room, divided into [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>This post is all about taking control. Both of the player character, and of the way the game window is presented to the player. You&#8217;ll also see a basic game screen setup I&#8217;ll be using for upcoming tests.</strong></p>



<span id="more-84"></span>



<p>For this test, I&#8217;ve used the Caged Wave logo as a simple game test room, divided into two zones (thanks to a colleague for the idea). The total resolution of the game screen is 432 by 240 pixels, which is a ratio of 16:9 and should look good on most modern displays.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="569" src="https://cagedwave.com/wp-content/uploads/2021/09/sprite-setup-1-1024x569.jpg" alt="" class="wp-image-88" srcset="https://cagedwave.com/wp-content/uploads/2021/09/sprite-setup-1-1024x569.jpg 1024w, https://cagedwave.com/wp-content/uploads/2021/09/sprite-setup-1-300x167.jpg 300w, https://cagedwave.com/wp-content/uploads/2021/09/sprite-setup-1-768x427.jpg 768w, https://cagedwave.com/wp-content/uploads/2021/09/sprite-setup-1-676x376.jpg 676w, https://cagedwave.com/wp-content/uploads/2021/09/sprite-setup-1.jpg 1081w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Each square on the grid represents a 16 x 16 chunk of the total playing area</figcaption></figure>



<p>I&#8217;ve added five basic test sprites to the background. The first sprite is a floating head to represent the player, followed by some gold that the player has to collect by solving a basic puzzle, two states of a button that will open a (not so secret) door and a box that the player has to push on top of the button to hold the door open.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="182" src="https://cagedwave.com/wp-content/uploads/2021/09/sprites-loose-1024x182.png" alt="" class="wp-image-89" srcset="https://cagedwave.com/wp-content/uploads/2021/09/sprites-loose-1024x182.png 1024w, https://cagedwave.com/wp-content/uploads/2021/09/sprites-loose-300x53.png 300w, https://cagedwave.com/wp-content/uploads/2021/09/sprites-loose-768x136.png 768w, https://cagedwave.com/wp-content/uploads/2021/09/sprites-loose-676x120.png 676w, https://cagedwave.com/wp-content/uploads/2021/09/sprites-loose-1320x234.png 1320w, https://cagedwave.com/wp-content/uploads/2021/09/sprites-loose.png 1444w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>The five basic sprites for the gameplay test, each one is 32 x 32 pixels in size</figcaption></figure>



<p>These sprites were saved as .PNG files and imported as SDL2-textures in the C++ program that will run this test. </p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="231" src="https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-1024x231.jpg" alt="" class="wp-image-90" srcset="https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-1024x231.jpg 1024w, https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-300x68.jpg 300w, https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-768x173.jpg 768w, https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-1536x347.jpg 1536w, https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-2048x462.jpg 2048w, https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-676x153.jpg 676w, https://cagedwave.com/wp-content/uploads/2021/09/code-sprites-1320x298.jpg 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">I like to move it, move it</h2>



<p>Then, I added some basic code to check for different inputs. Right now, the program checks if the player presses any of the W, A, S, or D keys on the keyboard and moves the sprite up (W), down (S), left (A) or right (D) accordingly.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="864" height="480" src="https://cagedwave.com/wp-content/uploads/2021/09/01_movement_web.gif" alt="" class="wp-image-85"/></figure>



<p>At this point, there is not yet any collision detection in the code, so the player sprite can move wherever it likes. These limits to player movement will of course be added in a future update.</p>



<h2 class="wp-block-heading">Sizing up the screen</h2>



<p>To get to grips with window scaling options in SDL2, I also added a few zoom states to the test. The game window can be shown in the original (tiny) <meta charset="utf-8">432 x 240 pixel resolution, or two zoomed in modes (2x and 3x) that will perform perfect integer scales of the entire game window and all movement within. These zoom modes can be selected by pressing either the 1, 2, or 3 key on the keyboard. Pressing the F-key will toggle a full screen mode.</p>



<p>Below, you can see a video of all the movement and screen options working in this test. In the next blogpost, I aim to have collision detection working and some simple player interaction.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Basic controls and zoom options test" width="676" height="380" src="https://www.youtube.com/embed/TbcheYLz_YQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div><figcaption>All movement and screen options working together.</figcaption></figure>



<p>Until next time, take care!</p>


  
  
  <div class="
    mailpoet_form_popup_overlay
      "></div>
  <div
    id="mailpoet_form_1"
    class="
      mailpoet_form
      mailpoet_form_html
      mailpoet_form_position_
      mailpoet_form_animation_
    "
      >

    <style type="text/css">
     #mailpoet_form_1 .mailpoet_form {  }
#mailpoet_form_1 form { margin-bottom: 0; }
#mailpoet_form_1 .mailpoet_column_with_background { padding: 0px; }
#mailpoet_form_1 .mailpoet_form_column:not(:first-child) { margin-left: 20px; }
#mailpoet_form_1 h2.mailpoet-heading { margin: 0 0 12px 0; }
#mailpoet_form_1 .mailpoet_paragraph { line-height: 20px; margin-bottom: 20px; }
#mailpoet_form_1 .mailpoet_segment_label, #mailpoet_form_1 .mailpoet_text_label, #mailpoet_form_1 .mailpoet_textarea_label, #mailpoet_form_1 .mailpoet_select_label, #mailpoet_form_1 .mailpoet_radio_label, #mailpoet_form_1 .mailpoet_checkbox_label, #mailpoet_form_1 .mailpoet_list_label, #mailpoet_form_1 .mailpoet_date_label { display: block; font-weight: normal; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea, #mailpoet_form_1 .mailpoet_select, #mailpoet_form_1 .mailpoet_date_month, #mailpoet_form_1 .mailpoet_date_day, #mailpoet_form_1 .mailpoet_date_year, #mailpoet_form_1 .mailpoet_date { display: block; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea { width: 200px; }
#mailpoet_form_1 .mailpoet_checkbox {  }
#mailpoet_form_1 .mailpoet_submit {  }
#mailpoet_form_1 .mailpoet_divider {  }
#mailpoet_form_1 .mailpoet_message {  }
#mailpoet_form_1 .mailpoet_form_loading { width: 30px; text-align: center; line-height: normal; }
#mailpoet_form_1 .mailpoet_form_loading > span { width: 5px; height: 5px; background-color: #5b5b5b; }#mailpoet_form_1{border-radius: 3px;background: #27282e;text-align: left;}#mailpoet_form_1 form.mailpoet_form {padding: 15px;}#mailpoet_form_1{width: 100%;}#mailpoet_form_1 .mailpoet_message {margin: 0; padding: 0 20px;}
        #mailpoet_form_1 .mailpoet_validate_success {color: #00d084}
        #mailpoet_form_1 input.parsley-success {color: #00d084}
        #mailpoet_form_1 select.parsley-success {color: #00d084}
        #mailpoet_form_1 textarea.parsley-success {color: #00d084}
      
        #mailpoet_form_1 .mailpoet_validate_error {color: #cf2e2e}
        #mailpoet_form_1 input.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 select.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 textarea.textarea.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 .parsley-errors-list {color: #cf2e2e}
        #mailpoet_form_1 .parsley-required {color: #cf2e2e}
        #mailpoet_form_1 .parsley-custom-error-message {color: #cf2e2e}
      #mailpoet_form_1 .mailpoet_paragraph.last {margin-bottom: 0} @media (max-width: 500px) {#mailpoet_form_1 {background: #27282e;}} @media (min-width: 500px) {#mailpoet_form_1 .last .mailpoet_paragraph:last-child {margin-bottom: 0}}  @media (max-width: 500px) {#mailpoet_form_1 .mailpoet_form_column:last-child .mailpoet_paragraph:last-child {margin-bottom: 0}} 
    </style>

    <form
      target="_self"
      method="post"
      action="https://cagedwave.com/wp-admin/admin-post.php?action=mailpoet_subscription_form"
      class="mailpoet_form mailpoet_form_form mailpoet_form_html"
      novalidate
      data-delay=""
      data-exit-intent-enabled=""
      data-font-family=""
      data-cookie-expiration-time=""
    >
      <input type="hidden" name="data[form_id]" value="1" />
      <input type="hidden" name="token" value="e6b87a42d4" />
      <input type="hidden" name="api_version" value="v1" />
      <input type="hidden" name="endpoint" value="subscribers" />
      <input type="hidden" name="mailpoet_method" value="subscribe" />

      <label class="mailpoet_hp_email_label" style="display: none !important;">Please leave this field empty<input type="email" name="data[email]"/></label><div class='mailpoet_spacer' style='height: 1px;'></div>
<div class="mailpoet_form_image is-style-default"><figure class="size-large aligncenter"><img decoding="async" src="https://ps.w.org/mailpoet/assets/form-templates/template-11/soundicon.png" alt width=68 height=69 style="width: 68px;height: 69px"></figure></div>
<div class='mailpoet_spacer' style='height: 1px;'></div>
<h2 class="mailpoet-heading  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 20px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font"><strong>DON’T MISS A BLOGPOST</strong></span></h2>
<p class="mailpoet_form_paragraph  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 13px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font">Be the first to know when a new Caged Wave blogpost appears!</span></p>
<div class="mailpoet_paragraph "><style>input[name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]"]::placeholder{color:#4c537e;opacity: 1;}</style><input type="email" autocomplete="email" class="mailpoet_text" id="form_email_1" name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]" title="Email Address" value="" style="width:100%;box-sizing:border-box;background-color:#ffffff;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#4c537e;" data-automation-id="form_email"  placeholder="Email Address *" aria-label="Email Address *" data-parsley-errors-container=".mailpoet_error_18dar" data-parsley-required="true" required aria-required="true" data-parsley-minlength="6" data-parsley-maxlength="150" data-parsley-type-message="This value should be a valid email." data-parsley-required-message="This field is required."/><span class="mailpoet_error_18dar"></span></div>
<div class="mailpoet_paragraph "><input type="submit" class="mailpoet_submit" value="SUBSCRIBE" data-automation-id="subscribe-submit-button" data-font-family='Fira Sans' style="width:100%;box-sizing:border-box;background-color:#4c537e;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#ffffff;" /><span class="mailpoet_form_loading"><span class="mailpoet_bounce1"></span><span class="mailpoet_bounce2"></span><span class="mailpoet_bounce3"></span></span></div>

      <div class="mailpoet_message">
        <p class="mailpoet_validate_success"
                style="display:none;"
                >Thank you for subscribing!

Check your inbox or spam folder to confirm your subscription.
        </p>
        <p class="mailpoet_validate_error"
                style="display:none;"
                >        </p>
      </div>
    </form>

      </div>

  ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Will it blend?</title>
		<link>https://cagedwave.com/will-it-blend/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=will-it-blend</link>
		
		<dc:creator><![CDATA[Nathan]]></dc:creator>
		<pubDate>Sat, 28 Aug 2021 17:27:24 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://www.cagedwave.com/?p=64</guid>

					<description><![CDATA[The past few days I&#8217;ve been running some tests to get to grips with basic SDL2 concepts like windows, renderers and textures. And I&#8217;ve tried to answer the age-old question: will it blend? Well, since I&#8217;m not making a text adventure here (although that would be a nice genre to make a comeback), I have [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>The past few days I&#8217;ve been running some tests to get to grips with basic SDL2 concepts like windows, renderers and textures. And I&#8217;ve tried to answer the age-old question: will it blend?</strong></p>



<span id="more-64"></span>



<p>Well, since I&#8217;m not making a text adventure here (although that would be a nice genre to make a comeback), I have to know how to draw stuff onto the screen. So I&#8217;ve been figuring out how SDL2 wants me to handle things when it comes to graphics. Here&#8217;s a moving test I came up with:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Sprite movement and blending test" width="676" height="380" src="https://www.youtube.com/embed/NwWXt9jT6Zs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div><figcaption>A simple test moving a semi-transparent pulsating sprite across a simple tiled background.</figcaption></figure>



<p>The most basic test would have been just to move a box or circle around I guess, but I also wanted to test two more things: alpha transparency and changing said transparency over time, so the image would appear to pulsate.</p>



<h2 class="wp-block-heading">The pulsation that&#8217;s rocking the nation</h2>



<p>The trick to this pulsating image is first to create a hexadecimal number between 0 and 255 (my starting value is <code>0x33</code>, also known as the decimal number 51), which will determine how transparent the image will appear: 0 is fully transparent, 255 is fully opaque.</p>



<pre class="wp-block-code"><code><span class="datatype">Uint8</span> alphaValue = <span class="hex">0x33;</span></code></pre>



<p>After setting this default value, I assign this variable to the native SDL2-function <code>SDL_SetTextureAlphaMod()</code>, that takes two arguments: the name of the image you want to apply the alpha value to, and the alpha value itself.</p>



<pre class="wp-block-code"><code><span class="function">SDL_SetTextureAlphaMod</span>(floatingImage, alphaValue);</code></pre>



<p>When applying this alpha-blended image over the background, the image appears semi-transparent, like so:</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="393" src="https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-1024x393.png" alt="" class="wp-image-71" srcset="https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-1024x393.png 1024w, https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-300x115.png 300w, https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-768x294.png 768w, https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-1536x589.png 1536w, https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-2048x785.png 2048w, https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-676x259.png 676w, https://cagedwave.com/wp-content/uploads/2021/08/test-blend-steps-1320x506.png 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Alpha blending makes the background art shine through subtly.</figcaption></figure>



<p>The rest is just a simple matter of changing the alpha value over time, and voila, the moving image pulsates.</p>



<h2 class="wp-block-heading">Where to go from here?</h2>



<p>I have some ideas that will use the image blending principles in this simple test to great effect, but you&#8217;ll have to wait for a future post for more info on that. In the next post, I&#8217;ll be showing a basic gameplay interaction that will be central to the game I&#8217;m planning. See you then!</p>


  
  
  <div class="
    mailpoet_form_popup_overlay
      "></div>
  <div
    id="mailpoet_form_1"
    class="
      mailpoet_form
      mailpoet_form_html
      mailpoet_form_position_
      mailpoet_form_animation_
    "
      >

    <style type="text/css">
     #mailpoet_form_1 .mailpoet_form {  }
#mailpoet_form_1 form { margin-bottom: 0; }
#mailpoet_form_1 .mailpoet_column_with_background { padding: 0px; }
#mailpoet_form_1 .mailpoet_form_column:not(:first-child) { margin-left: 20px; }
#mailpoet_form_1 h2.mailpoet-heading { margin: 0 0 12px 0; }
#mailpoet_form_1 .mailpoet_paragraph { line-height: 20px; margin-bottom: 20px; }
#mailpoet_form_1 .mailpoet_segment_label, #mailpoet_form_1 .mailpoet_text_label, #mailpoet_form_1 .mailpoet_textarea_label, #mailpoet_form_1 .mailpoet_select_label, #mailpoet_form_1 .mailpoet_radio_label, #mailpoet_form_1 .mailpoet_checkbox_label, #mailpoet_form_1 .mailpoet_list_label, #mailpoet_form_1 .mailpoet_date_label { display: block; font-weight: normal; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea, #mailpoet_form_1 .mailpoet_select, #mailpoet_form_1 .mailpoet_date_month, #mailpoet_form_1 .mailpoet_date_day, #mailpoet_form_1 .mailpoet_date_year, #mailpoet_form_1 .mailpoet_date { display: block; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea { width: 200px; }
#mailpoet_form_1 .mailpoet_checkbox {  }
#mailpoet_form_1 .mailpoet_submit {  }
#mailpoet_form_1 .mailpoet_divider {  }
#mailpoet_form_1 .mailpoet_message {  }
#mailpoet_form_1 .mailpoet_form_loading { width: 30px; text-align: center; line-height: normal; }
#mailpoet_form_1 .mailpoet_form_loading > span { width: 5px; height: 5px; background-color: #5b5b5b; }#mailpoet_form_1{border-radius: 3px;background: #27282e;text-align: left;}#mailpoet_form_1 form.mailpoet_form {padding: 15px;}#mailpoet_form_1{width: 100%;}#mailpoet_form_1 .mailpoet_message {margin: 0; padding: 0 20px;}
        #mailpoet_form_1 .mailpoet_validate_success {color: #00d084}
        #mailpoet_form_1 input.parsley-success {color: #00d084}
        #mailpoet_form_1 select.parsley-success {color: #00d084}
        #mailpoet_form_1 textarea.parsley-success {color: #00d084}
      
        #mailpoet_form_1 .mailpoet_validate_error {color: #cf2e2e}
        #mailpoet_form_1 input.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 select.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 textarea.textarea.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 .parsley-errors-list {color: #cf2e2e}
        #mailpoet_form_1 .parsley-required {color: #cf2e2e}
        #mailpoet_form_1 .parsley-custom-error-message {color: #cf2e2e}
      #mailpoet_form_1 .mailpoet_paragraph.last {margin-bottom: 0} @media (max-width: 500px) {#mailpoet_form_1 {background: #27282e;}} @media (min-width: 500px) {#mailpoet_form_1 .last .mailpoet_paragraph:last-child {margin-bottom: 0}}  @media (max-width: 500px) {#mailpoet_form_1 .mailpoet_form_column:last-child .mailpoet_paragraph:last-child {margin-bottom: 0}} 
    </style>

    <form
      target="_self"
      method="post"
      action="https://cagedwave.com/wp-admin/admin-post.php?action=mailpoet_subscription_form"
      class="mailpoet_form mailpoet_form_form mailpoet_form_html"
      novalidate
      data-delay=""
      data-exit-intent-enabled=""
      data-font-family=""
      data-cookie-expiration-time=""
    >
      <input type="hidden" name="data[form_id]" value="1" />
      <input type="hidden" name="token" value="e6b87a42d4" />
      <input type="hidden" name="api_version" value="v1" />
      <input type="hidden" name="endpoint" value="subscribers" />
      <input type="hidden" name="mailpoet_method" value="subscribe" />

      <label class="mailpoet_hp_email_label" style="display: none !important;">Please leave this field empty<input type="email" name="data[email]"/></label><div class='mailpoet_spacer' style='height: 1px;'></div>
<div class="mailpoet_form_image is-style-default"><figure class="size-large aligncenter"><img decoding="async" src="https://ps.w.org/mailpoet/assets/form-templates/template-11/soundicon.png" alt width=68 height=69 style="width: 68px;height: 69px"></figure></div>
<div class='mailpoet_spacer' style='height: 1px;'></div>
<h2 class="mailpoet-heading  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 20px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font"><strong>DON’T MISS A BLOGPOST</strong></span></h2>
<p class="mailpoet_form_paragraph  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 13px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font">Be the first to know when a new Caged Wave blogpost appears!</span></p>
<div class="mailpoet_paragraph "><style>input[name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]"]::placeholder{color:#4c537e;opacity: 1;}</style><input type="email" autocomplete="email" class="mailpoet_text" id="form_email_1" name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]" title="Email Address" value="" style="width:100%;box-sizing:border-box;background-color:#ffffff;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#4c537e;" data-automation-id="form_email"  placeholder="Email Address *" aria-label="Email Address *" data-parsley-errors-container=".mailpoet_error_ugcgh" data-parsley-required="true" required aria-required="true" data-parsley-minlength="6" data-parsley-maxlength="150" data-parsley-type-message="This value should be a valid email." data-parsley-required-message="This field is required."/><span class="mailpoet_error_ugcgh"></span></div>
<div class="mailpoet_paragraph "><input type="submit" class="mailpoet_submit" value="SUBSCRIBE" data-automation-id="subscribe-submit-button" data-font-family='Fira Sans' style="width:100%;box-sizing:border-box;background-color:#4c537e;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#ffffff;" /><span class="mailpoet_form_loading"><span class="mailpoet_bounce1"></span><span class="mailpoet_bounce2"></span><span class="mailpoet_bounce3"></span></span></div>

      <div class="mailpoet_message">
        <p class="mailpoet_validate_success"
                style="display:none;"
                >Thank you for subscribing!

Check your inbox or spam folder to confirm your subscription.
        </p>
        <p class="mailpoet_validate_error"
                style="display:none;"
                >        </p>
      </div>
    </form>

      </div>

  ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>X&#160;marks the expletive</title>
		<link>https://cagedwave.com/x-marks-the-expletive/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=x-marks-the-expletive</link>
		
		<dc:creator><![CDATA[Nathan]]></dc:creator>
		<pubDate>Sun, 22 Aug 2021 14:38:52 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://www.cagedwave.com/?p=57</guid>

					<description><![CDATA[Trying to set up a good development toolchain can always be a little daunting. Thankfully setting up SDL2 and C++ development is relatively easy, even though some operating systems still make things way harder than they should be. I&#8217;ve written about how one of my main reasons for choosing SDL2 was it&#8217;s excellent cross-platform support. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>Trying to set up a good development toolchain can always be a little daunting. Thankfully setting up SDL2 and C++ development is relatively easy, even though some operating systems still make things way harder than they should be.</strong></p>



<span id="more-57"></span>



<p>I&#8217;ve written about how one of my main reasons for choosing SDL2 was it&#8217;s excellent cross-platform support. So I realized that, before I could continue coding some moving elements, I first had to create a setup that would allow me to build this project quickly for multiple systems.</p>



<h2 class="wp-block-heading">The big three</h2>



<p>So naturally I picked the big three operating systems (Windows, Linux and macOS) as my target platforms to try this on. My first test was already running on Linux, so I decided to tackle macOS next, since its Unix underpinnings make it relatively similar to Linux.</p>



<p>This turned out to be the case, as getting the same code up and running on macOS requires more or less the same steps as in the Ubuntu installation I had done my first test in. And before long, the same code was compiling and running on the Mac.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://cagedwave.com/wp-content/uploads/2021/08/test-mac-1024x576.jpg" alt="" class="wp-image-59" srcset="https://cagedwave.com/wp-content/uploads/2021/08/test-mac-1024x576.jpg 1024w, https://cagedwave.com/wp-content/uploads/2021/08/test-mac-300x169.jpg 300w, https://cagedwave.com/wp-content/uploads/2021/08/test-mac-768x432.jpg 768w, https://cagedwave.com/wp-content/uploads/2021/08/test-mac-1536x864.jpg 1536w, https://cagedwave.com/wp-content/uploads/2021/08/test-mac-2048x1152.jpg 2048w, https://cagedwave.com/wp-content/uploads/2021/08/test-mac-676x380.jpg 676w, https://cagedwave.com/wp-content/uploads/2021/08/test-mac-1320x743.jpg 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>X marks the cross-platform happiness&#8230;</figcaption></figure>



<h2 class="wp-block-heading">Windows</h2>



<p>Then along came Windows and mucked up all my plans. The less rigid structure of this system means lots more time (and curse words) had to be spent tweaking settings and environment variables, just to make sure everything pointed at the right libraries.</p>



<p>So after a lot more time was spent than I&#8217;d like, the code was running on Windows as well. I wish this step had been a little more painless.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="640" src="https://cagedwave.com/wp-content/uploads/2021/08/test-windows-1024x640.jpg" alt="" class="wp-image-60" srcset="https://cagedwave.com/wp-content/uploads/2021/08/test-windows-1024x640.jpg 1024w, https://cagedwave.com/wp-content/uploads/2021/08/test-windows-300x188.jpg 300w, https://cagedwave.com/wp-content/uploads/2021/08/test-windows-768x480.jpg 768w, https://cagedwave.com/wp-content/uploads/2021/08/test-windows-1536x960.jpg 1536w, https://cagedwave.com/wp-content/uploads/2021/08/test-windows-2048x1280.jpg 2048w, https://cagedwave.com/wp-content/uploads/2021/08/test-windows-676x423.jpg 676w, https://cagedwave.com/wp-content/uploads/2021/08/test-windows-1320x825.jpg 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>I can&#8217;t describe how glad I was to finally get this working as well.</figcaption></figure>



<p>The good thing is, that the whole Windows experience made me rethink my strategy for building a bit. Instead of trying to juggle different hand-written Makefiles for different systems, I&#8217;ve concluded that it&#8217;s much smarter to use something like CMake and have that do a lot of the dirty work.</p>



<p>So the next step will be to get CMake doing its brave thing on all three platforms and then I&#8217;ll finally be ready to jump into some basic movement stuff.</p>


  
  
  <div class="
    mailpoet_form_popup_overlay
      "></div>
  <div
    id="mailpoet_form_1"
    class="
      mailpoet_form
      mailpoet_form_html
      mailpoet_form_position_
      mailpoet_form_animation_
    "
      >

    <style type="text/css">
     #mailpoet_form_1 .mailpoet_form {  }
#mailpoet_form_1 form { margin-bottom: 0; }
#mailpoet_form_1 .mailpoet_column_with_background { padding: 0px; }
#mailpoet_form_1 .mailpoet_form_column:not(:first-child) { margin-left: 20px; }
#mailpoet_form_1 h2.mailpoet-heading { margin: 0 0 12px 0; }
#mailpoet_form_1 .mailpoet_paragraph { line-height: 20px; margin-bottom: 20px; }
#mailpoet_form_1 .mailpoet_segment_label, #mailpoet_form_1 .mailpoet_text_label, #mailpoet_form_1 .mailpoet_textarea_label, #mailpoet_form_1 .mailpoet_select_label, #mailpoet_form_1 .mailpoet_radio_label, #mailpoet_form_1 .mailpoet_checkbox_label, #mailpoet_form_1 .mailpoet_list_label, #mailpoet_form_1 .mailpoet_date_label { display: block; font-weight: normal; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea, #mailpoet_form_1 .mailpoet_select, #mailpoet_form_1 .mailpoet_date_month, #mailpoet_form_1 .mailpoet_date_day, #mailpoet_form_1 .mailpoet_date_year, #mailpoet_form_1 .mailpoet_date { display: block; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea { width: 200px; }
#mailpoet_form_1 .mailpoet_checkbox {  }
#mailpoet_form_1 .mailpoet_submit {  }
#mailpoet_form_1 .mailpoet_divider {  }
#mailpoet_form_1 .mailpoet_message {  }
#mailpoet_form_1 .mailpoet_form_loading { width: 30px; text-align: center; line-height: normal; }
#mailpoet_form_1 .mailpoet_form_loading > span { width: 5px; height: 5px; background-color: #5b5b5b; }#mailpoet_form_1{border-radius: 3px;background: #27282e;text-align: left;}#mailpoet_form_1 form.mailpoet_form {padding: 15px;}#mailpoet_form_1{width: 100%;}#mailpoet_form_1 .mailpoet_message {margin: 0; padding: 0 20px;}
        #mailpoet_form_1 .mailpoet_validate_success {color: #00d084}
        #mailpoet_form_1 input.parsley-success {color: #00d084}
        #mailpoet_form_1 select.parsley-success {color: #00d084}
        #mailpoet_form_1 textarea.parsley-success {color: #00d084}
      
        #mailpoet_form_1 .mailpoet_validate_error {color: #cf2e2e}
        #mailpoet_form_1 input.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 select.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 textarea.textarea.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 .parsley-errors-list {color: #cf2e2e}
        #mailpoet_form_1 .parsley-required {color: #cf2e2e}
        #mailpoet_form_1 .parsley-custom-error-message {color: #cf2e2e}
      #mailpoet_form_1 .mailpoet_paragraph.last {margin-bottom: 0} @media (max-width: 500px) {#mailpoet_form_1 {background: #27282e;}} @media (min-width: 500px) {#mailpoet_form_1 .last .mailpoet_paragraph:last-child {margin-bottom: 0}}  @media (max-width: 500px) {#mailpoet_form_1 .mailpoet_form_column:last-child .mailpoet_paragraph:last-child {margin-bottom: 0}} 
    </style>

    <form
      target="_self"
      method="post"
      action="https://cagedwave.com/wp-admin/admin-post.php?action=mailpoet_subscription_form"
      class="mailpoet_form mailpoet_form_form mailpoet_form_html"
      novalidate
      data-delay=""
      data-exit-intent-enabled=""
      data-font-family=""
      data-cookie-expiration-time=""
    >
      <input type="hidden" name="data[form_id]" value="1" />
      <input type="hidden" name="token" value="e6b87a42d4" />
      <input type="hidden" name="api_version" value="v1" />
      <input type="hidden" name="endpoint" value="subscribers" />
      <input type="hidden" name="mailpoet_method" value="subscribe" />

      <label class="mailpoet_hp_email_label" style="display: none !important;">Please leave this field empty<input type="email" name="data[email]"/></label><div class='mailpoet_spacer' style='height: 1px;'></div>
<div class="mailpoet_form_image is-style-default"><figure class="size-large aligncenter"><img decoding="async" src="https://ps.w.org/mailpoet/assets/form-templates/template-11/soundicon.png" alt width=68 height=69 style="width: 68px;height: 69px"></figure></div>
<div class='mailpoet_spacer' style='height: 1px;'></div>
<h2 class="mailpoet-heading  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 20px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font"><strong>DON’T MISS A BLOGPOST</strong></span></h2>
<p class="mailpoet_form_paragraph  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 13px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font">Be the first to know when a new Caged Wave blogpost appears!</span></p>
<div class="mailpoet_paragraph "><style>input[name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]"]::placeholder{color:#4c537e;opacity: 1;}</style><input type="email" autocomplete="email" class="mailpoet_text" id="form_email_1" name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]" title="Email Address" value="" style="width:100%;box-sizing:border-box;background-color:#ffffff;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#4c537e;" data-automation-id="form_email"  placeholder="Email Address *" aria-label="Email Address *" data-parsley-errors-container=".mailpoet_error_14ubt" data-parsley-required="true" required aria-required="true" data-parsley-minlength="6" data-parsley-maxlength="150" data-parsley-type-message="This value should be a valid email." data-parsley-required-message="This field is required."/><span class="mailpoet_error_14ubt"></span></div>
<div class="mailpoet_paragraph "><input type="submit" class="mailpoet_submit" value="SUBSCRIBE" data-automation-id="subscribe-submit-button" data-font-family='Fira Sans' style="width:100%;box-sizing:border-box;background-color:#4c537e;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#ffffff;" /><span class="mailpoet_form_loading"><span class="mailpoet_bounce1"></span><span class="mailpoet_bounce2"></span><span class="mailpoet_bounce3"></span></span></div>

      <div class="mailpoet_message">
        <p class="mailpoet_validate_success"
                style="display:none;"
                >Thank you for subscribing!

Check your inbox or spam folder to confirm your subscription.
        </p>
        <p class="mailpoet_validate_error"
                style="display:none;"
                >        </p>
      </div>
    </form>

      </div>

  ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Development approach</title>
		<link>https://cagedwave.com/development-approach/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=development-approach</link>
		
		<dc:creator><![CDATA[Nathan]]></dc:creator>
		<pubDate>Thu, 19 Aug 2021 20:09:27 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">https://www.cagedwave.com/?p=50</guid>

					<description><![CDATA[A good base plan will probably save me a lot of headaches in the future. So this post is all about what to do, and perhaps more importantly, what NOT to do. First off, the basic approach is to learn as much about how things work under the hood as possible. So the biggest limitation [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><strong>A good base plan will probably save me a lot of headaches in the future. So this post is all about what to do, and perhaps more importantly, what NOT to do.</strong></p>



<span id="more-50"></span>



<p>First off, the basic approach is to learn as much about how things work under the hood as possible. So the biggest limitation I&#8217;m setting myself is: no pre-existing game engines! So no <em>Game Maker Studio</em>, <em>Unity</em>, <em>Godot</em>, etc&#8230; just a programming language and a multimedia library, that&#8217;s it.</p>



<h2 class="wp-block-heading">The language: C++</h2>



<p>Well, it&#8217;s an industry-leading language used in game programming everywhere. And since I have some prior experience in other c-family programming languages, it&#8217;s just a good personal choice as well and will ensure I won&#8217;t have to learn a totally alien syntax. So C++ it is!</p>



<h2 class="wp-block-heading">The library: SDL2</h2>



<p>Also a deliberate choice. Mainly because SDL runs on a lot of different platforms, which will make porting of games to different devices easier. But SDL also handles a lot of the stuff that is either extremely hard, or extremely tedious to code myself. Things like handling of video, audio, input devices, etc&#8230; SDL does it all.</p>



<h2 class="wp-block-heading">First blood</h2>



<p>So that&#8217;s about where I&#8217;m at. I&#8217;m currently following some C++ and SDL2 tutorials online to get to grips with the basics. Today I managed to get a static image of the Caged Wave logo to display in a game window, which is not very spectacular, but always a good start.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="640" src="https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-1024x640.png" alt="" class="wp-image-51" srcset="https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-1024x640.png 1024w, https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-300x187.png 300w, https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-768x480.png 768w, https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-1536x960.png 1536w, https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-2048x1280.png 2048w, https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-676x422.png 676w, https://cagedwave.com/wp-content/uploads/2021/08/hello-world-linux-1320x825.png 1320w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>A simple &#8216;Hello World&#8217; image, displaying in a 640 x 480 pixel window. </figcaption></figure>



<p>Next steps are to get some sprites moving on a static background image and I&#8217;ll see where that takes me. For now, I&#8217;m signing off, ciao!</p>


  
  
  <div class="
    mailpoet_form_popup_overlay
      "></div>
  <div
    id="mailpoet_form_1"
    class="
      mailpoet_form
      mailpoet_form_html
      mailpoet_form_position_
      mailpoet_form_animation_
    "
      >

    <style type="text/css">
     #mailpoet_form_1 .mailpoet_form {  }
#mailpoet_form_1 form { margin-bottom: 0; }
#mailpoet_form_1 .mailpoet_column_with_background { padding: 0px; }
#mailpoet_form_1 .mailpoet_form_column:not(:first-child) { margin-left: 20px; }
#mailpoet_form_1 h2.mailpoet-heading { margin: 0 0 12px 0; }
#mailpoet_form_1 .mailpoet_paragraph { line-height: 20px; margin-bottom: 20px; }
#mailpoet_form_1 .mailpoet_segment_label, #mailpoet_form_1 .mailpoet_text_label, #mailpoet_form_1 .mailpoet_textarea_label, #mailpoet_form_1 .mailpoet_select_label, #mailpoet_form_1 .mailpoet_radio_label, #mailpoet_form_1 .mailpoet_checkbox_label, #mailpoet_form_1 .mailpoet_list_label, #mailpoet_form_1 .mailpoet_date_label { display: block; font-weight: normal; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea, #mailpoet_form_1 .mailpoet_select, #mailpoet_form_1 .mailpoet_date_month, #mailpoet_form_1 .mailpoet_date_day, #mailpoet_form_1 .mailpoet_date_year, #mailpoet_form_1 .mailpoet_date { display: block; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea { width: 200px; }
#mailpoet_form_1 .mailpoet_checkbox {  }
#mailpoet_form_1 .mailpoet_submit {  }
#mailpoet_form_1 .mailpoet_divider {  }
#mailpoet_form_1 .mailpoet_message {  }
#mailpoet_form_1 .mailpoet_form_loading { width: 30px; text-align: center; line-height: normal; }
#mailpoet_form_1 .mailpoet_form_loading > span { width: 5px; height: 5px; background-color: #5b5b5b; }#mailpoet_form_1{border-radius: 3px;background: #27282e;text-align: left;}#mailpoet_form_1 form.mailpoet_form {padding: 15px;}#mailpoet_form_1{width: 100%;}#mailpoet_form_1 .mailpoet_message {margin: 0; padding: 0 20px;}
        #mailpoet_form_1 .mailpoet_validate_success {color: #00d084}
        #mailpoet_form_1 input.parsley-success {color: #00d084}
        #mailpoet_form_1 select.parsley-success {color: #00d084}
        #mailpoet_form_1 textarea.parsley-success {color: #00d084}
      
        #mailpoet_form_1 .mailpoet_validate_error {color: #cf2e2e}
        #mailpoet_form_1 input.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 select.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 textarea.textarea.parsley-error {color: #cf2e2e}
        #mailpoet_form_1 .parsley-errors-list {color: #cf2e2e}
        #mailpoet_form_1 .parsley-required {color: #cf2e2e}
        #mailpoet_form_1 .parsley-custom-error-message {color: #cf2e2e}
      #mailpoet_form_1 .mailpoet_paragraph.last {margin-bottom: 0} @media (max-width: 500px) {#mailpoet_form_1 {background: #27282e;}} @media (min-width: 500px) {#mailpoet_form_1 .last .mailpoet_paragraph:last-child {margin-bottom: 0}}  @media (max-width: 500px) {#mailpoet_form_1 .mailpoet_form_column:last-child .mailpoet_paragraph:last-child {margin-bottom: 0}} 
    </style>

    <form
      target="_self"
      method="post"
      action="https://cagedwave.com/wp-admin/admin-post.php?action=mailpoet_subscription_form"
      class="mailpoet_form mailpoet_form_form mailpoet_form_html"
      novalidate
      data-delay=""
      data-exit-intent-enabled=""
      data-font-family=""
      data-cookie-expiration-time=""
    >
      <input type="hidden" name="data[form_id]" value="1" />
      <input type="hidden" name="token" value="e6b87a42d4" />
      <input type="hidden" name="api_version" value="v1" />
      <input type="hidden" name="endpoint" value="subscribers" />
      <input type="hidden" name="mailpoet_method" value="subscribe" />

      <label class="mailpoet_hp_email_label" style="display: none !important;">Please leave this field empty<input type="email" name="data[email]"/></label><div class='mailpoet_spacer' style='height: 1px;'></div>
<div class="mailpoet_form_image is-style-default"><figure class="size-large aligncenter"><img decoding="async" src="https://ps.w.org/mailpoet/assets/form-templates/template-11/soundicon.png" alt width=68 height=69 style="width: 68px;height: 69px"></figure></div>
<div class='mailpoet_spacer' style='height: 1px;'></div>
<h2 class="mailpoet-heading  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 20px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font"><strong>DON’T MISS A BLOGPOST</strong></span></h2>
<p class="mailpoet_form_paragraph  mailpoet-has-font-size" style="text-align: center; color: #ffffff; font-size: 13px"><span style="font-family: Fira Sans" data-font="Fira Sans" class="mailpoet-has-font">Be the first to know when a new Caged Wave blogpost appears!</span></p>
<div class="mailpoet_paragraph "><style>input[name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]"]::placeholder{color:#4c537e;opacity: 1;}</style><input type="email" autocomplete="email" class="mailpoet_text" id="form_email_1" name="data[form_field_NDA1ZDMwYjA0NzU0X2VtYWls]" title="Email Address" value="" style="width:100%;box-sizing:border-box;background-color:#ffffff;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#4c537e;" data-automation-id="form_email"  placeholder="Email Address *" aria-label="Email Address *" data-parsley-errors-container=".mailpoet_error_15klk" data-parsley-required="true" required aria-required="true" data-parsley-minlength="6" data-parsley-maxlength="150" data-parsley-type-message="This value should be a valid email." data-parsley-required-message="This field is required."/><span class="mailpoet_error_15klk"></span></div>
<div class="mailpoet_paragraph "><input type="submit" class="mailpoet_submit" value="SUBSCRIBE" data-automation-id="subscribe-submit-button" data-font-family='Fira Sans' style="width:100%;box-sizing:border-box;background-color:#4c537e;border-style:solid;border-radius:2px !important;border-width:0px;border-color:#313131;padding:10px;margin: 0 auto 0 0;font-family:&#039;Fira Sans&#039;;font-size:15px;line-height:1.5;height:auto;color:#ffffff;" /><span class="mailpoet_form_loading"><span class="mailpoet_bounce1"></span><span class="mailpoet_bounce2"></span><span class="mailpoet_bounce3"></span></span></div>

      <div class="mailpoet_message">
        <p class="mailpoet_validate_success"
                style="display:none;"
                >Thank you for subscribing!

Check your inbox or spam folder to confirm your subscription.
        </p>
        <p class="mailpoet_validate_error"
                style="display:none;"
                >        </p>
      </div>
    </form>

      </div>

  ]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
