Discord server is now open!

Hey all!Ā My personal Discord server,Ā Archmage Manor, is now open! It’s a small social server with games and gamedev interests, but loads of other things happen there too. If you’re interested, check out the widget in the sidebar on the right, or optionally,Ā click here!

I hope to see you there šŸ™‚

-A

The War Within: Thoughts and Musings

Hey folks! I haven’t posted about Warframe before, so lemme preface this post by saying I’ve spent over 1000 hours being a fabulous space ninja, murdering the same enemies over and over while praying to RNGesus for drops. It’s a game I love, despite its many flaws, and I would implore all of you to give it a try if you haven’t already. With that out of the way, on with the post!


Warframe’s undisputably largest update launched a few days ago: “The War Within”. It had been dangled in front of us since June, with so many delays thatĀ people instead referred to it asĀ “The Wait Within”. Still makes me laugh.

Some of its advertised features were: a new quest of a similar scale to The Second Dream (previously and arguably still the most impactful quest in the game, both gameplay- and story-wise), a new “gameplay feature”, new weapons, a new tileset, new enemies… essentially a whole bunch of new things.

Before I address each of those, I’d like to point out that the patch notes (availableĀ here) contained quite a sizable bugfix list! No matter what the verdict on the added content, it’s incredible to see a company’s dedication to debugging. DE should be commended for that, if nothing else.

Since this is undoubtedly the most exciting part of the update, let’s talk about the various New Thingsā„¢.

BUT BEFORE WE DO, MASSIVE SPOILER ALERT! NEW SCARY CONTENT AHEAD, READ AT YOUR OWN RISK.

The Quest Within

The quest. The main focus of the update. I was impressed! It was shorter than I expected, and I suspect a lot of people probably feel this way. That said, each of the stages were enjoyable – the quest started off fairly close to home (two capture missions), then jumped straight into a puzzle-esque Archwing mission involving hiding behind a moving ship to avoid laser barriers. I was fairly unimpressed with this stage (see: my general feelings on the current state of Archwing), but FWIW it did convey a sense of inflitration and deceptionĀ with Archwing, and for that it earns points.

After the sneaky flying segment, you enter the Kuva Fortress, and things quickly get veeeery interesting. There’s a lot of plot to cover here, so I won’t discuss it all, but I loved how they made Teshin a far more interesting character through uncovering his primary flaw. The Queens were bland evilbadguys with barely present 1D personalities, but somehow that didn’t bother me at the time. In comparison to the main “character” of this quest, though, nothing really compares.

YOU! Your Operator finally gets off their lazy butt and does things! I was so pleasantly surprised by this. It’s awesome to see DE expanding the lore like this. I think the Operator lore development has been one of the strongest points of this update, and I’d love to see more of it in the future. Even the little interactions between us and Teshin (“Don’t call me that!” after being called a child) displayed a level of insight into the Tenno that I haven’t really seen before.

As for the spooky light/neutral/dark morality thing, it shows up on players’ profiles, but doesn’t seem to do anything yet. It seems future content holds the answers…

All in all, while the quest was short and the Queens were uninteresting, I loved the quest and I’m impressed with where the story is going. Sign me up for more!

The Transference Within

Let’s talk aboutĀ Transference, the new gameplay element! It allows you to become your Operator self mid-mission, using Void powers to fight enemies and tackle obstacles. Your Operator form is much weaker and far less versatile than your Warframe, but it has its uses, and I suspect we will see more added to this ability.

Thematically, it’s awesome. Operators can now personally murder their enemies rather than relying on overpowered war surrogates to do their dirty work. Both the offensive powers have their uses; Void Beam is a moderately strong ranged attack that might come in handy for Melee Only missions, while Void Blast ragdolls regular enemies and staggers Kuva Guardians, opening them up to be disarmed.

As for the other powers, Void Dash is fun to use, disarms Kuva Guardians and is required for completing Kuva Siphon objectives. Additionally, given the nature of Transference in that casting it while it’s active teleports your frame to your Operator’s location (not the other way around, surprisingly!), it can be used for rapid relocation or to bypass lasers. Void Mode’s invisibility seems most useful for Spy missions, which will hopefully alleviate the overabundance of Lokis and Ivaras present in public Spy missions.

I’m a little confused as to how it fits into regular combat, as Transference’s 100 health is too low to survive in high-level combat for longer than a few seconds, and when you die in TransferenceĀ you die in real life you lose all your energy (both your frame’s and the Void energy used by Transference). This seems like a massive punishment for what doesn’t seem like a very beneficial risk.

Nevertheless it’s awesome being able to properly fight as an Operator. The Focus system still exists and has not been modified (much to my surprise), so between the two abilities it really feels like we (the Operators) are becoming stronger over time.

The Kuva Within

Kuva, the new resource, is a pain in the ass and probably my least favourite addition to the game with this update. It can only be obtained after completing the quest, and is awarded in quantities of ~600 per drop by successfully destroying Kuva Siphons. They show up in Grineer missions on Uranus, Sedna and the Kuva Fortress on level 30 missions or higher, and only sometimes spawn.

Actually completing the objective is a bit tricky, since you need to survive respawning Kuva Guardians that guard the siphon, while waiting for the siphon to draw Kuva from the environment,Ā then intercept the incoming Kuva cloud by Void Dashing into it using Transference. You need to do this four times, but thankfully the siphon “wins” once it receives eight Kuva clouds.

In a sense it’s quite forgiving, but the Guardians are so demanding to fight when there’s other level 30+ enemies around, and you’re so vulnerable when blast-dashing them to disarm them. I find it much easier to simply ignore them, but even then I’ve had trouble.

My biggest problem with Kuva is that it’s required in quantities of up to 4000 per weapon, and in addition to the 4 new weapons each requiring it, it’s needed in relation to Riven mods, which I’ll explain in a separate post because they’re awesome.

The Weapons Within

There’s five new weapons. Here’s what I think of each:

  • Zarr – no idea, haven’t crafted it yet.
  • Twin Rogga – haven’t crafted them yet, but they look cool! I’ve been looking forward to a new secondary for a while.
  • Kesheg – haven’t crafted it yet, but I hear it’s a stronger Orthos, and people love the Orthos, so I imagine people will love this too.
  • Broken Scepter – I have this! It’s a bit goofy; staves have never been a favourite of mine, but it does have a cool mechanic where you wield it then hit X over a corpse to produce a health orb (organics) or an energy orb (robotics). This has potential against Corpus, but the animation takes too long for it to feel fluid, so I’m not a fan.
  • Orvius – It costs 4000 Kuva, requires drops from Kuva Guardians and is a glavie. 0/10.

I’m sure I’ll have more to say once I’ve used the rest.

The Fortress Within

The new tileset is quite exciting; I’m a fan of the sweeping Grineer sensor-camera things, but some of the traps are waaay too strong. The flow of the levels is nice, DE obviously gave some thought into alternate paths and sightlines. The baseĀ feels like a Grineer fortress, as it should!

I don’t have any major issues with the tileset, and given that I dislike half the tilesets in the game, I guess that means it did wellĀ ĀÆ\_(惄)_/ĀÆ

The Enemies Within

Kuva Guardians are a pain to fight in the context of siphons, but other than that I love their design. Figuring out how to kill them (blast -> dash -> damage) was tricky at first, but it’s the kind of combat Warframe could benefit from including.

The little jester things are cute and easy to kill, so they get a thumbs up from me! Additionally, I think either the jesters or the guardians drop elemental bullet jump mods (Lightning Dash, most notably), and thanks to that I now own all four of them, so I’m happy!

The Conclusion Within

I’m really happy with this update. I wanna talk more about Riven mods in another post, since they are quite involved and they’re far more interesting to me than any of the other content. The Transference ability is super cool, the quest was a lot of fun, and I’m now excited for what the future holds. It’s been a while since I’ve been engaged with Warframe, but this update did the impossible – it gave me a reason to be interested again šŸ™‚

Some last-minute things I’ve just noticed: they added Decorator Mode!! Now we can finally place decorations without navigating menu hell. They also changed how the “Most Used” weapons part of player profiles looks! It now shows Frame, Primary, Secondary, Melee and a few more behinds a scrollbar, rather than Frame, Weapon, Sentinel, Sentinel Weapon. It now looks like this:

woo-new-profile-things

I’m ashamed of that Tonkor :'(

Anyways, stay tunedĀ for that Riven post! Until next time.

-A

The Road to Golden Mage

Ed: this post was written a few months ago, and subsequently forgotten. Here it is!

Once upon a time I discovered Hearthstone. It was pretty fun – I’d just bought a Surface, so I had a blast using the pen and touch screen to fling Fireballs into my enemies’ faces. It was straightforward, warm and welcoming.

I miss those days.

In time, I grew tired of playing minions, only to watch them get blown up. Removal is absurdly prevalent in Hearthstone, so much so that there are decks that revolve around it. There seemed to be very little respect for a player’s dominance over the field. Why bother setting up a strong board presence when, come turn 5, your opponent tosses out a Brawl and wipes it?

I once heard someone complain about the Silence mechanic – their main issue was that it was boring. I’m inclined to agree, but Silence is but a slice of the problem pie.

I think one of Hearthstone’s biggest issues is persistence.

Why Fight When You Can Flamestrike?

After my aforementioned falling out with minions, I looked to the classes to try and find a new way. It’ll be no surprise that I chose the class that balances board control with powerful spells, high-value class minions and an affinity for magic.

Yep, I went with Mage! Once I saw spells like Pyroblast and Ice Block, I was sold.

Over a long experimental period, I tried to run Mage in various directions; spell damage was the most accessible choice at first, but thanks to general board disrespect and a frustrating lack of survivability, my spell damage minions far too often died before I could capitalise on them.

From that point I assembled what would probably be called either a “balanced” or “unfocused” hybrid between classic Rush and Freeze Mage. A big turning point in my Hearthstone deckbuilding was when I went to a tournament in Wynyard, and lost 1-2 to a golden Rogue. They asked me postgame what kind of Mage I was running: “Is that Freeze or Rush? I couldn’t tell.”

I responded that it was sort of a mix of the two. I don’t remember what they said after that, but it was an exciting question – I didn’t know they were the two popular decks until then! From that point, the seeds of Rush Mage had been planted.

Faster Decks Means Faster Wins… Hopefully

It never occurred to me that another way of ignoring removal was to simply win before any comes out. As such, I threw together a Rush Mage, filled with wonders such as pre-nerf Leper Gnome, Wolfrider and, of course, Mana Wyrm.

I’ve always loved how earlygame Mage has the potential to snowball out of control, or fall flat on its face. Mana Wyrm is crucial to tearing through that 30 health fast enough. On the off chance that you go second, get two and a decent set of cheap spells, there’s a very good chance you’ll win by turn 4.

That said, I had limited success with Rush Mage. I don’t think Mage’s rush potential is as dependable as, say, Hunter’s.

Slow And Steady Wins The Race

After my stint with Rush Mage I took some time to re-evaluate. I’d acquired some more cards by this point, so I set out to make the Mage deck that would take me most of the way to 500 ranked wins.

Others might have been quick to simply label it another Freeze Mage, but they would be quite mistaken.

This deck, bless its soul, was lovingly named Secret Control.

The deck started off with a simple idea – if you can hit them for a total of 30 damage (give or take healing) and not die in the process, you win!

To that end, Version 1 of Secret Control was stocked with the finest stalling cards in the game. Unsurprisingly there was Ice Block, Ice Barrier and Frost Nova, but there were cards like Polymorph, Flamestrike and Fireball, too.

Minion-wise I ran Sorcerer’s Apprentice, Mana Wyrm and a couple of draw cards like Loot Hoarder and Acolyte of Pain.

The most notable part of this deck were three cards: Pyroblast, Ice Block and the incredible Alexstrasza! I was fortunate enough to receive a Golden King Mukla, who lived roughly long enough for me to screenshot him then navigate to Disenchant. His spirit lives on in the biggest carry dragon in the game.

I’m sure I don’t need to spell this out (huge pun), but for brevity I will. The deck stalls until turn 9, drawing cards and freezing/killing enemies with spells, until it can play Alexstrasza and drop them to 15. The following turn, it throws as much damage at their face as possible, throwing down an Ice Block if one wasn’t already up. Ideally they go down to less than 10, trigger the Ice Block, then die to a Pyroblast.

I have heard numerous complaints about this playstyle, citing it as “not fun”. My response? If the game wasn’t so flooded with removal and nonsense, I would have taken minions seriously. Give a man a Flamestrike and he will wipe your board.

Ice Block in particular is a card that impresses me to this day. It was good in Secret Control Version 1, but something happened that gave birth to my most loved deck in my entire Hearthstone playtime – a deck in which Ice Block is even more valuable.

It’s A Secret To Everybody

Some more time passed. I’d experimented with other classes, but none of them felt as right as Mage.

Expansions had been released (Naxx, GvG and The Grand Tournament), and we were all drowning under Dr. Boom and his friend, Mech Mage. I refused to play Mech Mage, since I did not care for that playstyle anymore.

Instead I looked around and found some incredibly powerful options for Secret Control Version 2. I’ll go into detail here, because these cards are worth it.

Illuminator was the key element that let me do away with a lot of other minions. It’s a 2/4 for 3 that heals you for 4 at the end of your turn if you control a secret. It’s pretty hard to kill someone if they’re healing for 4 (or more!) a turn, especially if that secret was a Counterspell and you just wasted an Assassinate on it!

Duplicate is a wonderful secret that gives you two copies of a minion when it dies. Of course it only works on your opponent’s turn, but there’s just so much potential. Throw it down with Illuminator and all of a sudden you have years and years of sustain. Use it on Alezstrasza and get two dragons back!

Ethereal Arcanist was a surprising find, since he’d existed for a while. I never realised how good this guy was until I saw what happens when people don’t kill him right away. The synergy with Ice Block and Counterspell is insane.

Mad Scientist was the card this deck needed to help make the earlygame bearable. Having a Duplicate and Counterspell on the board at the end of turn 3 is a pretty solid lead into Ethereal Arcanist.

Doomsayer took over the role of board clear with the help of Frost Nova! It sure is hard to kill a single minion when all of yours are frozen.

Suddenly I had a really dynamic, powerful and flexible early/midgame. I could do goofy plays like throw out a Doomsayer and Illuminator out on turn 5 with Counterspell in play. At turn 7 I could wipe the board with Flamestrike, or I could drop an Illuminator and an Arcanist and force them to choose.

I loved the new and improved Secret Control. It took me all the way to 500 ranked wins, and to this day I have not played a deck I’ve enjoyed more.

What lies ahead for me? Only time will tell.

-A

Fun with Prefabs! – A Musing on ECS Prefab Practices

This is some cool but awfully specific artemis-odb stuff, be warned.

It’s possible to simulate prefabs by creating a BaseSystem that deals entirely in creating an Archetype object matching the desired component pattern of your output object. For argument’s sake, let’s say you have a prefab called PlantPrefab. It might consist of position, velocity and render components, so you’d set up your archetype to have all of them. Easy!

Next you’d write a function like so:

public int create(Vector2 pos, Vector2 vel, Sprite sprite) {
 int e = world.create(archetype);
 // customisation of prefab using arguments...
 return e;
}

Delightful! Now external sources can create your prefab with a bunch of customisable parameters, that directly set data in the instance’s components.

But why would we stop there? >:3

What if we wanted to specify some default values? Or load some values from a string, perhaps?

Suddenly you’d have…

public int create() { /* call create(Vector2, Vector2, Sprite) with some values */ }
public int create(String src) {
 /* write some arbitrary string parsing then pass arguments to create(Vector2, Vector2, Sprite) */
}

This is starting to become cumbersome, not to mention awfully implementation-heavy for each prefab.

At this point I realised I needed a common way to allow external files to instantiate prefabs with create(String).

Up until this point each prefab had been subclassing BaseSystem, which worked fine for my needs. However, I can improve this with a bit of OOP elegance šŸ™‚

Instead of:Ā BaseSystem -> SomePrefab

I am now using:Ā BaseSystem -> Prefab -> SomePrefab

Prefab does a couple of things. First of all, it simplifies the archetype construction process by asking for a single function to be implemented by children:

protected Class<? extends Component> getComponents();

This allows me to define a very simple array containing all the components the archetype uses. Since we’re only dealing with prefabs (pre-assembled collections of components), there’s no need to allow the archetype to be constructed by children – every prefab’s archetype will consist of a single add() call to an ArchetypeBuilder object, with a single argument: the array containing all required components.

If we were building archetypes on the fly (for instance, calling ArchetypeBuilder.remove()), it’d be reasonable to hand off this responsibility to children, but it’s simply not necessary here!

Hiding archetype construction and use aside, the Prefab middleclass also helps in requiring each child to implement a create(String) method. This is helpful, as it allows us to know with certainty that every prefab can be instantiated with a String[] set of arguments.

The end result looks something like this:

prefabs

At the moment I’m going through and ensuring all my existing prefabs comply with their new superclasses… and wow does that sound fascist.

Anyway! It’s lovely and I’m really glad I had the thought to do things this way šŸ˜€

-A

‘ket’ alphabet – An alternative to English!

I was in a lecture yesterday and came up with a neat idea for an alphabet analogous to English. Here’s the sketch I came up with.

ket draft

I realised that if each character used the central “stalk” and featured 1-6 of the other strokes, I’d have enough room for 63 characters! With that in mind I drew up 26 of the full six-stroke symbol, then subtracted lines to form each character.Ā Without further ado, I present “ket“, my first alternate alphabet!

ket

I created the above in Hexels, since I needed a way to maintain the angles of each character and didn’t feel like using a vector program.

Some features of the language:

  • Each character is designed to be quick to draw. At most, a character takes fourĀ strokes: one down the middle and one at each of top, middle and bottom. I’m not sure how this plays out in practice, but I’d love to try it sometime!
  • Vowel characters do not have middle strokes.
  • Characters have a quantity of strokes (1-5) loosely determined by letter frequency in the English alphabet (seeĀ https://en.wikipedia.org/wiki/Letter_frequency#Relative_frequencies_of_letters_in_the_English_language), to make more frequent letters easier to draw!

I’m moderately sure there’s no duplicate characters, but if there are, let me know and I’ll correct it!

I’m not sure if I’ll use it, or what I’ll use it for. It’d be pretty suitable for puzzle or adventure games. Who knows, it may turn up in one of my future games! Keep an eye out šŸ˜‰

-A

Announcing JTask!

Hello again! Today I’m annoucingĀ JTask, a lightweight todo manager written in Java.

jtask

It’s a solution to keeping track of the myriad of tasks we inevitably find ourselves burdened with. There are many solutions like it out there (Wunderlist, for instance), though I’ve never quite found one whose features and functionality haveĀ quite met my needs.

So, I decided to make one for myself!

Presently it’s in a functional state – you can make tasks, assign them to categories, hide completed tasks, sort by any of the columns and even filter tasks with the search bar! It also autosaves/loads, so you don’t have to worry šŸ™‚

I’ll make a download page once it’s a little more polished!

-A

Entity – Mechanics Concept

Hello again! Today I’m going to talk a little about my game Entity, and its core gameplay mechanic, theĀ Entity Component System.

Entity Component System (ECS) is actually a programming concept, whereby you avoid a lot of pitfalls of object-oriented by destroying inheritance and instead dealing with components (dumb data bags) attached to entities. Your entities are nothing more than a unique identifier and a collection of components. They can’t do anything by themselves, but instead areĀ acted upon by the systems in your code. Systems will only perform actions on entities if theyĀ match certain component criteria – for instance, a Gravity system may require an entity to possess Velocity and Gravity components before it will do anything to that entity.

This is a fantastic way of programming that I’ve been slowly coming to appreciate, but you may find yourself asking, “what does this have to do with videogames, and in particular, Entity?”

Entity’s main mechanic involves manipulating the ECS through player actions. The main form of this is the player’s ability toĀ toggle components on and off. Here’s what the interface looks like at the moment.

videogames

Each of those icons up the top right corresponds to a certain kind of component that the player possesses. Throughout the game, the player will acquire more kinds of components, which will show up here once equipped. Players can toggle components on and off, which willĀ change the way systems process the player entity.

Let’s look at a simple example. Entities require a Collision componentĀ to be able to interact with walls. Toggling your personal Collision component off will allow you to “noclip” through walls.

It’s a pretty simple and intuitive system! I’m going to do some obfuscation so that players can’t immediately break the game (such as the aforementioned noclipping), but I’ll gradually grant them more and more powerful options as the game progresses.

I’ve got a lot planned for this game, so expect a more in-depth look at some of the other components in the future!

-A

New site!

Hi everyone! I’m Archmage, and this is my new site, A Site by Archmage. This is a test post to make sure layouts and things are working.

If you’re new to the site, check out all the games under Byteland. Each one is a part of a major project I’m working on. Check back in the future for more info!

-A