Author Archives: xangis

Rain Without End by Bloodless Mushroom

Back in 2018-2020 I published a few guitar-and-bass songs as Rain Without End. Well, I want to have fewer things to manage, so I folded the REW stuff into my main Bloodless Mushroom project and re-released the the music that people liked as an the “Rain Without End” EP by Bloodless Mushroom today.

Listen on your favorite platform here:

https://songwhip.com/bloodlessmushroom/rain-without-end

Why You Shouldn’t Use Google’s Programmable Search Engine

Google’s Programmable Search Engine, formerly known as the Custom Search Engine (or CSE), is a simple solution to integrate basic site search into a website. In just a few clicks, you can add an easy search box that more-or-less works for site-wide search.

The search box looks like this, complete with Google branding:

Google Programmable Search Engine Search Box

 

 

In addition, you can integrate this search with AdSense so that you get some ad revenue when someone clicks on an ad or sponsored link in the search results. It’s not much, only a tiny fraction of what you might get from other ads on your site, but it’s something.

You don’t have any control over how pages rank in search results.

Here’s an example of what the search results looked like for one of my sites:

Google Custom Search Engine Results With Ads

If you don’t really care about the user experience or look and feel of your site and want to give away all of the valuable information that search data can tell you, then you’re done.

If, however, you care about the user experience for your site and want to make it better over time, you’re better off finding a creating a different solution.

If you’re using a framework or CMS like WordPress, there are plenty of built-in and plugin solutions that you can use that will let you see what people actually searched for.

Let’s compare two pieces of data.

First, here is the google Programmable Search report for my website soundprogramming.net:

Google Programmable Search Engine Data

Note that there is not a lot of useful information here. Although you can see the text of queries that people made more than 10 times, that doesn’t tend to be a lot of information. You lose ALL unique search queries, uncommon variations, and are left with almost nothing that you can use to improve your site content or user experience. This is all I get from more than 30,000 queries over more than a decade!

Second, here’s an example of what I saw in the first 24 hours after switching to my own site search:

Homegrown Site Search Data

 

In my case, I coded something from scratch, but you probably don’t have to. Like I said, there will be options and plugins for whatever you’re using.

Although some of these searches are from me doing testing, I already have some useful information. For example, I had some information on the “triton” synthesizer, but nothing about the “triton extreme”. This was a clue that I should add that to my site (which I did). I would never have realized that I had left that out if I didn’t know what people were looking for. Even better, because I built this custom, I can see what the top search result was for each query. This tells me whether people are getting what they want with a quick glance.

The value of this information is FAR more than the paltry few pennies that you’d get from Google’s custom search, and those pennies come at a cost — directing people away from your site.

In addition, I now have full control of how pages rank on my site. Because I know my site better than Google and have more context about my particular niche, I can provide more relevant prioritization of results.

Hosting your own search is more work overall (although maybe just a few minutes), and you may need to do a bit to filter out bot and crawler traffic, but this is valuable information worth having access to. You shouldn’t just give it away.

Dragon Dropper 2023 Year-End Numbers

I started building games in April 2023. It’s been an interesting ride so far, and I’ve learned a lot from just under 8 full months of full-time work. Starting from zero, here’s what I accomplished in 2023:

  • 2 games released on Steam.
  • 1300 total wishlists and 150 follows.
  • 80 sales totalling $700 before Steam fees.
  • Two released game soundtracks.
  • Two small Kickstarter campaigns funded.
  • Two released demos for games launching in 2024.

It’s less than I’d hoped for and more than I’d feared.

It will be interesting comparing these numbers at the end of 2024, which will be my first full year as a solo indie game developer barring any unexpected life changes.

Goodnight MusicSrch

I’ve had MusicSrch for about seven years now.

Although it was an interesting curiosity, I never really figured out what to do with it, and it never managed to have more than a few dozen visits per month.

It was super helpful when writing music reviews because I could just dig up all the streaming links for a band with a quick search.

About a year ago I added a sort of “directory browse” feature, where it would save the data for a band, and keep track of some historical numbers, and let you browse by genre. That was kind of interesting, but not really useful, especially given the plethora of music sites out there in the world.

If I haven’t figured out what to do with the site in seven years, seven more won’t help.

So, goodnight, MusicSrch.

If you’d like to see the historical site, it’s been saved on the Wayback Machine over the years:

https://web.archive.org/web/20230000000000*/musicsrch.com

A New Save System – Easy Save To The Rescue

With Into The Inferno development, I reached the point where it was time to get a better save-game system than the existing hacked-together-in-an-hour XML file. It had been on my to-do list for a while as part of evolving past the “you get one save slot, and that’s it” stage.

I have a ton of experience with C#, so throwing something in an XML file is second nature. That’s not necessarily a good or bad thing, but some of the legacy bits are strongly disrecommended by Microsoft at this point (BinaryFormatter for example).

I decided to “do what everyone else does” and get a copy of Easy Save from the Unity Asset Store. It’s immensely popular and highly recommended and it seemed like it’d be the shortest time-to-implement of the available options.

Fast-forward 8 hours later. I have a working save system with three save slots and it’s better in every way than the previous system. I was able to re-use a lot of my existing data code, rewrote some of it to be cleaner, and have “summaries” that are saved as part of the game saves that say where and who the party was at the time of save, and the interface changes necessary to support all of this.

Before:

Into The Inferno Main Menu Load Game - Before

Loading From the Main Menu – Before

Into The Inferno Save Game - Before

Saving At The Inn – Before\

As you can see, there’s just “Load Game” but you have no idea what you’re loading. Similarly, saving the game is just “Save Game” with nothing beyond that.

After implementing Easy Save, this is what I have:

Loading From the Main Menu - After

Loading From the Main Menu – After

Into The Inferno Save Game - After

Saving At The Inn – After

The first screenshot shows what comes up after you click “Load Game” on the menu. The summary text is localized in realtime, so in Spanish you’ll see that Archie is a “nivel 1 guerrero” even if you saved the game in English.

The second screenshot is saving the game from the inn. Saves at this point are an intentionally-limited resource (for better or worse), but at least now you have more control over them, and it’s easy to customize the number of slots that there are.

In the future I’d like to add Steam cloud save synchronization, but I have no idea how tough that will be. In any case, Easy Save made what I thought was a 40-hour task into a single day project, testing and UI changes included, and I definitely recommend it.

Into The Inferno Demo Now Available on Steam!

I’ve posted a demo version of Into The Inferno on Steam. It includes roughly half of the game — the main town, the three wilderness areas, the orc village, goblin village, gnoll village, and the first of eight dungeon levels.

Into The Inferno - Main Town

Into The Inferno – Main Town

There’s still a lot more work to do between now and the October launch, but it’s mostly cosmetic and translation work and the gameplay itself isn’t going to change much.

If you’d like to offer suggestions or feedback, you can hit the F12 key from within the demo to send comments.

Beast Dungeon Nearing Completion

In the last week and a half I’ve put a lot of work into Beast Dungeon.

What’s been added? More dungeon variety, more monsters, more items, UI improvements, adding the endgame, adding a high score list, adding tracking of monsters killed, and adding localization in Spanish.

Beast Dungeon Kill Screen

The new kill tracker in Beast Dungeon.

At this point, it just needs a bit more translation and few audio tracks and it’s done. I anticipate it being completed within the next week. Wishlist it on Steam, it’s releasing soon!

YouTube is a Risky Platform

If you’re building your audience or business primarily on YouTube you should probably think again, or at least have a backup plan.

Google can and will destroy all of your work at a whim, or with a bad bot decision, and there’s nothing you can do about it. You have no recourse, and there is no “manager” you can talk to.

In my case, I had been posting logs of my journey starting a game development studio. It started with a few videos detailing my goals and my process of learning the Unity game development framework, then with demos of the process of building my first-person dungeon crawler game Into The Inferno. It was totally normal stuff, just like hundreds of other channels are doing or have done. This approach is a time-tested way of telling your story, building an engaged audience, connecting with the world, and having more success than you would have without telling your story. This is the sort of thing YouTube was designed for in the first place. Or so I thought.

Just shy of two weeks ago I woke up to an email saying that YouTube had deleted my channel for “spam, deceptive practices, or scams”.

This was a pretty big surprise. There was no warning, no strikes, and no indication what, exactly the problem was. They didn’t indicate that there was something wrong with a particular video, so I really had no idea why my channel was deleted. There was nothing deceptive. If anything, I might have been too honest, bordering on oversharing. There was certainly no scam. I wasn’t trying to get people to do anything, or asking for money, or selling anything (yet). My game wasn’t even ready to wishlist on Steam.

I only have two guesses, and they’re vague ones. Maybe they decided that posting mostly videos on the same topic (my video game development) was spam, even though all the videos had different focus and were in different stages of the game’s progress. Or, since my account was nuked right after I uploaded a video describing how I had implemented in-game shops where you could buy equipment, recharge your mana, or heal your characters with the gold you get from killing monsters, maybe that was it, MAYBE they thought I was talking about some sort of real-money transaction thing. That’d be a stretch – since shops are just a standard mechanic that thousands of games have, and I wouldn’t ever consider adding real-money transactions to a game because that’s dirty, disgusting, slimy, and wrong. People who put real-money transactions in games should be ashamed. Look for the “Log 15” video on this blog if want to review that one and venture a guess.

Assuming it was just an algorithm glitch — after all, Google is not very good at algorithms, and they often make very dumb assumptions (I speak from experience since I’ve had quite a few websites over the last 20 or so years) — I sent in an appeal. The auto-responder said that they’d reply within 2 days.

Now, 12 days later, I have received a response.

“Hi Dragon Dropper,

We have reviewed your appeal for the following:

Channel: Dragon Dropper

We reviewed your channel carefully, and have confirmed that it violates our spam, deceptive practices and scams policy. We know this is probably disappointing news, but it’s our job to make sure that YouTube is a safe place for all.

How this affects your channel

We won’t be putting your channel back up on YouTube.

Thanks,
The YouTube team”

Again, still no indication of what the problem is. Whatever it was, I was definitely making YouTube an unsafe place.

They did NOT delete any of my other YouTube channels associated with the same email, some of which are more than 10 years old (my band channel, my vintage synthesizer demo channel, and some various other music channels). They certainly did delete any motivation I have to maintain or grow any of those channels.

I’ve switched all of my video hosting to Vimeo and re-uploaded all of my videos. They’re visible here on this blog at xangis.com or you can see my channel on Vimeo here. The first 15 log entries were hosted on YouTube. If you want to watch them and figure out why they might have insta-banned me, be my guess. I’m out of ideas.

I’ll miss those ~10 subscribers, and the extra organic visitors that YouTube brings, but at least with Vimeo I won’t have to worry about some random bot arbitrarily declaring that I am a scam because you can give in-game gold to a healer to have your injuries repaired in one of my games.

Take caution, a random deletion could happen to anyone, including you, and there will be nothing you can do about it.

Am I John Connor?

Do you ever feel like John Connor or is it just me?

It feels like lately any time there’s something that I do that involves an algorithm making a decision, the algorithm goes against me. Whether that’s posting a video (separate rant entirely!), or posting a comment, or placing an advertisement, or writing an article, the bots always seem to come up with something.

It’s never because there’s a reason. The excuse produced by the algorithm is always invalid and not applicable. But I probably used the wrong keyword, or had the wrong IP address, or exhibited “bot-like behavior” because I type so ridiculously fast (40 years of typing experience), or because my vocabulary is too large, or any of a thousand things that makes me not appear to 100% adhere to the “average, standard Human” that algorithms expect.

I am not good at bullshitting. I’m annoyingly honest, because making stuff up is EXHAUSTING and I just don’t have the patience for it. My style is to tell you what’s up, give a (hopefully concise) explanation, and get on with my day or whatever I was creating. So, the idea that a bot would flag me for “deceptive statements” or “misleading links” is doubly offensive. First, your bot is stupid. Second, that’s not something I’d even try to do.

Google/YouTube, Facebook, and every other platform: Fix your half-assed algorithms. You’re making the world a worse place with them. Stop being evil.

I expect that this problem will only get worse as the internet becomes mostly just robots lying about things. Before “AI”, this was already tough. Now it’s probably going to become impossible. It’s hard enough to get a tech support Human now. As companies hand over more and more of their business to algorithms, Human support is pretty much going to disappear.

The thought that I might be the one to defeat the AI apocalypse gives me a lot of hope for the future.

Wishlist Into The Inferno on Steam Today!

Into The Inferno is a retro-style grid-based first-person dungeon crawler RPG. Battle monsters and increase your skills in order to rescue a group of children from a horde of demons.

Battling snakes in Into The Inferno.

Battling snakes in Into The Inferno.

I’ve had a lot of fun working on this game, and it’s something I’ve been dreaming of for years. I must admit I really enjoy playing it, and now it’s in the “polishing and tuning” stage with an expected release in early fall.

Walking through town in Into The Inferno.

Walking through town in Into The Inferno.

Wishlist it on Steam today!

Disabling Automatic Closing Braces in Visual Studio Code

I really like Visual Studio Code as an editor, but it has some annoying defaults.

When working in C# (and a lot of other languages), it tries to be “helpful” by automatically adding closing braces, brackets, and parentheses when you type the opening ones.

An Automatic Closing Brace

Automatic closing brace added when typing an opening brace.

For some people, this is great. For me, no. It just doesn’t work with my typing and coding style, and ends up being something that gets in the way and I have to move or remove later.

Fortunately it’s easy to turn this off.

Go to File –> Preferences –> Settings

Search for “auto closing brackets”.

Change “Editor: Auto Closing Brackets” to “never”.

Auto Closing Brackets Setting

Turning off the auto closing brackets setting.

Problem solved. Happy coding!

Seasonal Website Advertising Income Differences (Monthly RPM Changes)

I’ve been running advertising-supported websites for about 15 years now, primarily music-related.

I typically notice a decline in income at the beginning of the year, and a spike in income toward the end of the year. My audience is international, but the majority of visitors are from the USA and to a lesser extent other English-speaking countries.

I gathered up the data on my historical earnings for the last three years and charted how much income changes throughout the year on average. Using January as a baseline, this is how things change throughout the year:

Month Earnings vs. January Pageviews vs. January
January 0% 0%
February -2.2% -9.9%
March -2.0% -3%
April -6.1% +6.6%
May -15.0% -0.4%
June -18.0% -15.7%
July -16.1% -17.0%
August -6.8% -21.0%
September -4.4% -38.6%
October +2.5% -8.0%
November +16.3% -4.1%
December +26.6% -3.2%

What’s clear and obvious is that income is heavily impacted by the holiday season.

Something else that I didn’t realize is how much both traffic and earnings drop during the North American summer and early fall. I think this a sort of “go out and play” influence — I tend to get less traffic on days when people are out with friends in the evening or otherwise on vacation. People tend to spend less time working on music and looking for tools to make that music when they’re out playing music in clubs or at parties.

That’s my theory, at least.

Of course, this is a sample size of one person (across two sites) over three years, so there will be a significant margin of error. Nevertheless, I still find it interesting.

Coming Full Circle With Game Development (Unity)

The very first programming I ever did was game programming.

It started with my Commodore VIC-20 in 1984. The computer’s manual had some BASIC programs you could type in and run. One was a Space-Invaders-type game.

Well, naturally, after typing in this game and playing it for a bit, I wanted to start making changes to enemy colors, speed, and score values. This was how I started programming.

It continued when I got a Tandy 1000 EX that ran MS-DOS and started writing games in GW-BASIC. By now I was coding much more detailed and complex programs. They were still text-only (ASCII), but I was creating them from scratch, and they had much more detailed mechanics.

I remember well a text-based gladiator combat tournament game that I spent the better part of a year working on, at about age 10, in addition to a few text-based adventure games.

Later, as the Internet started to grow, I became interested in multi-user dungeons. There were various codebases — Diku, Merc, Envy, Circle, and others. Not only did I work on some existing games, I also created my own, starting with Illustrium Arcana, and later with the Basternae  rewrite, Basternae 3: Phoenix Rising. If you look at the “Basternae and ModernMUD” topic on this blog, you’ll see that I was working on them well into 2013.

When I was finishing my college degree in 2004, I took some classes for credit at The Game Institute and got a job with a company working on simulators for the US Army (among other government contracts). It was basically a video game company, but replace “fun” with “realism”. I didn’t really work on any graphics code, and ended up specializing in audio and network communications. This was the first and last job I had in video games.

My strong knowledge of audio programming and networking protocols took me on to develop parts of the Authentic8 SILO browser, work on a home automation system, and build the various audio applications I released as Zeta Centauri.

Now I’m returning to my roots and learning Unity. It’s incredibly intuitive, and the programming is easy and natural thanks to the many years I spent writing C# code.

I’ve started with the “Complete C# Unity Game Developer 2D” course available through Udemy. I’m about 50% of the way through, and the deep, thorough coverage coupled with real hands-on coding projects has been great for the learning process. I’m definitely going to take more of the Gamedev.tv courses because they really know how to teach.