Code Monkey home page Code Monkey logo

tca-roguemazov's Introduction

"The Code Awards 2023": rogueMazov

MTLI original logo.

Memory tastes like iron

HTML badge CSS JavaScript badge

🐱 /JuditKaramazov

📍 Personal site

⬇️ Play


Getting Started

After all this time, it feels somehow odd to provide you with a project that won't require other than some truly basic steps. First, some context: this sort of "game" has been created with HTML, CSS and JavaScript. No more, no less. Considering this (and I am not lying to you this time, guys), you can simply:

  1. Open your terminal and run the following command:
$ git clone https://github.com/JuditKaramazov/TCA-rogueMazov.git
$ cd TCA-rogueMazov
  1. Launch a local development server with live reload feature for static and dynamic pages. In this case, I would highly suggest you to use Live Server as it is one of the most actively used extensions I've ever seen.

  2. That's... all! Feel free to explore, play, and manipulate the code as much as you want.

Doesn't it sound simple and accessible enough? Oh, wait... are you simply curious about the game but not the development process itself? We've got you covered, then! If that's indeed the case and you'd want to test this atrocious creation of mine, you can also visit Memory tastes like iron dedicated site, give it a try, and let me know how your personal experience was.

Allow me to warn you beforehand, though: even though some features took more time than others (especially the ones related to sound effects due to all the research behind), this project was made under a week, and it's not aiming to become the next Dead Cells or something of the kind. Also, since it's a browser-based, everything-but-ambitious little something by someone who is just getting started with this form of development, limitations are to be expected. However, let me tell you that yes, indeed: this was my first attempt... but not the last of them! Until we can get to know what the future will bring, let's just enjoy and keep things as we truly like them: accessible, simple, and entertaining.

MTLI original asset.

Introduction

"Last Christmas I gave you my heart, but the very last..."

"Eh, Judit... Judit! Is this even serious? You promised you wouldn't dare singing this song. You told yourself multiple times that this empty way of celebrating capitalism was forbidden, and...!" Well, well. What do you want me to say, guys? I assume I am getting old and emotional - especially now that we threw the E3 away, just like we did with some Christmas' hearts. "But weren't we talking about 'The Code Awards', Judit?" Oh, this seasonal event based on The Game Awards, you mean? Of course we were, but now that Geoff Keighley's Summer Games Fest seems poised to hold the June industry news slot unopposed, I do not truly know if we should celebrate or cry our eyes out together. Some new information about Hollow Knight Silksong's state could easily change my mind regarding this matter, Geoff...

Because that's the thing, right? We do care about new announcements and blockbusters, but we feel slightly uncomfortable whenever a team takes more space on stage than what the "acceptable" amount of time would be, at least compared to the number of new trailers and "World Premieres". Wrap it up, as Geoff himself would say - or accept others to say. Nevertheless, and quoting Eurogamer.net's article on the matter, the only thing that's left to say is that:

The Game Awards are not what many video game developers want, which as they've made clear over the past few , is a platform, an occasion for shared appreciation, and above all representation of game developers as they truly are - often, as we've discovered: dedicated, overworked, political and at times radical artists and engineers. Inspiring individuals who represent the bright, bold, and inclusive future. But there's also, crucially, little reason to believe The Game Awards will change.

Will we, though? If you want my humble opinion, we did change, no matter if certain aspects are still unaltered or not portraying the industry's reality as they should. Perhaps we just didn't change enough to embrace and defend such reality as it truly is now that the industry is reaching a more mature stage.

"Maturity", what a concept. Now that I can consider myself a mature and serene adult (or so I hope), I find it funny to recall the days when I found myself staring to this old TV screen that my brother was using to play The Legend of Zelda: Ocarina of Time. Independently of the immense progress this industry has witnessed in the last decades, the truth is that even today I find it soothing to go back to those games many people can't even stand anymore. Generational graphic limits, an overwhelming simplicity, not that much of character development, no online features... that's right. However, if we can afford to accept today's limitations, it would be interesting to understand yesterday's ones - and embrace what it meant to demolish some of those obstacles as well. Because we did overcame quite a lot of them, am I right?

We all did. Not so long ago, and while I was still going through one of my formations, I was terrified when confronting the idea of having to go through a JavaScript technical test. These days, it doesn't look as much of a hassle, but the fear paralyzed so fiercely while picturing the many words my mentor could use to express that I didn't pass (spoiler: I did), that nothing seemed enough for me to stop practicing and panicking. Now, it's clear that I'd simply check the documentation, practice, practice, practice... and that's all. But that's today's perspective; unlike today, yesterday I was indeed scared, smol, fragile, and unable to see all the tools I had at my disposal. I was someone who studied humanities during her entire life, after all. "Not good enough for this sector".

In the end, however, and as funny and twisted as it might sound, it was all about words - just like Memory tastes like iron is, too.

MTLI original asset.

Features & Themes

Features: a canonical approach

Turns out that everything was indeed about words and languages, two concepts so intertwined as themes, features, sound, style and controls are here, making it tricky to differentiate one section from the rest. A nice way to begin would be clarifying that, on the surface (and at several deeper levels, too), this is a simple roguelike, with all the "musts" one could expect:

  • Procedurally generated levels to increase replayability.
  • Turn-based gameplay, giving you as much time as needed to make a decision. Do we escape? Do we engage in a fight, should we heal ourselves...?
  • Grid-based movement, with the game taking place on a uniform grid of tiles.
  • Player versus Environment. As Roguelikes have always been combat/survival focused, the player will have to overcome some computer-generated challenges rather than other players' existence, which has been increased with the addition of different meteorological conditions affecting your vision. Also (greatly inspired by The Last of Us, I must admit), the main weapons are a Broken bottle (for melee combat) and a Bow (for ranged combat). Good luck with that.
  • Permanent death of the player, which regenerates the game's levels anew. Yes, guys: from scratch, and it can be triggered not only by our health hitting 0, but also due to the lack of oxygen or a leaking suit lowering our stats and increasing the damage received. The suit, or secondary skin, is meant to absorb part of the damage dealt by the hunter AIs, making it crucial to find a balance between our stats, and the resources at our disposal.
  • Exploration of the world and items system. As for this part, an inventory, a ? functionality (making it possible to thoroughly investigate each object, enemy, and map area), a stats menu, a shop (also called bench due to the crafting connotations), and some devices allowing the player to create new items given certain materials have been included as core elements of the gameplay itself. Similarly, a base area the player can return to symbolizes the starting point, as well as the only peaceful space in contrast to the different caves populating the world.

Keep in mind that the base is still part of a never-ending loop of pain, though.

MTLI original asset.

Themes: we are nothing but words

Space adventures, complex and overwhelming RPGs providing you with tons of equipment, and items, and interactions, and more items... Before games like Hades dared offering different ways of exploring the narrative possibilities of the genre, that was basically it. In fact, even imagining to keep people to live on the edge between triumph and disaster with permanent death mechanics represents an unthinkable reality nowadays. However, and since the story itself focuses on the positive and negative power of words, the impact of their psycholigal repercusions in our daily routines, mental disorders (such as PTSD, depression, or derrealization), and the feeling of being trapped in the same, long day while having to deal with our constant (and invisible) inner fights, it would have been nearly unacceptable to choose a different way of representing this specific reality.

A reality about words represented through words - or characters, as we'll explain later. This is how a philologist tries to access the darkest corners of her mind, but the meaning behind this is completely up to you, in the end. Why? As you probably noticed now that this one became a flourishing genre again, the roguelike format is notoriously hard to build storytelling around. While permadeath creates a higher sense of immersion, it vaporizes the tension built up through the run whenever the player dies. Traditional linear narratives are impossible to tell, as running through the same scenes or dialogue over and over destroys their emotional impact or importance. These reasons always made the genre rely on their gameplay instead of a strong narrative or emotional appeal, and here's why I chose to focus my energy on building a certain mood related to very specific psychological disorders rather than a competent story.

Do not take it as a narrative moment of introspection. If anything, it's simply a way of feeling and understanding reality.

Map: The art of algorithms

Most games are built either mostly or entirely by hand, with artists and developers designing every character, location and enemy. However, some games choose a different path: instead of crafting every element of the game by hand, they create an algorithm that will automatically generate the world of the game, including the layout of the map, placement of items, distribution of enemies, and environmental conditions. "Oh, no... the AI is here!", it indeed is, guys, but that wasn't my point at all. What I meant to express was that this process is known as procedural generation, and although it first appeared in the late 1970s, this style of game development has seen a bit of a resurgence in recent days. All in all, procedural generation is an extremely powerful and useful tool for game development, but the truth is that it can also be easily abused. In the right game, which can truly benefit from the variety granted by these types of systems, procedural generation is an invaluable asset; in the wrong game, however, it can be used as a crutch to simply generate content without regards to quality.

In this specific case, this became a a playground where I could explore new ideas, but my intention was never to create the ultimate roguelike. What's interesting, to my eye, is that, behind the scenes, intricate algorithms work tirelessly to craft a diverse and challenging world for players to explore, and uncovering this form of player progression and difficulty scaling became a temptation that I couldn't avoid.

If you feel curious about the process itself, I implemented rot.js as it was designed to provide help with traditional chores of roguelike programming. Also, and if you'd want to see how each map actually looks like, feel free to uncomment both main.js:

// main.js
document.addEventListener('keydown', function(event) {
  if (event.key === 'm' || event.key === 'M') {
    world.dungeon.displayMap()
    }
  })

and dungeon.js :

// dungeon.js
Dungeon.prototype.displayMap = function() {
  console.clear()
  var mapString = ''
  
  for (var j = 0; j < this.height; ++j) {
    for (var i = 0; i < this.width; ++i) {
      var x = i
      var y = j
      var tile = this.getTile(x, y)
      var color = tile.color || "#FFFFFF"
      mapString += tile.ch
      }
      mapString += '\n'
      }

    console.log(mapString)

to get a better picture of what's going on under the hood.

MTLI original asset.

Controls

In the vein of classic roguelikes, the controls are fairly simple as well.

Laptop/Mobile Controls

  • Movement: Click or touch the desired tile to move your character in that direction.
  • Interaction: Click or touch items, enemies, or UI elements to interact with them. This includes actions like picking up items, attacking enemies, and accessing menus.

Note: Some inconsistencies have already been detected on mobile devices, related to either visual aspects or sound issues. While I'm already working on resolving them, don't forget that laptops and desktop computers can offer a smooth experience.

Keyboard Controls

If you prefer the classic keyboard input combined with your mouse (I am sorry for the mouse part, guys, but I truly wanted to keep the essence of these games):

  • Movement:

    • Use Arrow Keys to move your character in the corresponding direction:

      • (Up)
      • (Down)
      • (Left)
      • (Right)

      Note: Moving your character to an item or enemy's position will automatically interact with them.

  • Interaction:

    • I: Open the Inventory.
    • Esc: Open the Main Menu & Cancel.
    • Space: View your Stats.

In all cases, you'll find a Quickslot section at the bottom right of the screen allowing you to easily equip your preferred items and weapons.

MTLI original asset.

Style & Sound

Style: the weight of a genre

Following the schema of early roguelikes, developed to be played on text-based user interfaces, I decided to go with a mix of ASCII or ANSI characters to visually represent the elements of the dungeon levels, the enemies, and the items, just as it happens in ASCII art. One of the main and most evident influences for this decision is a 1990 computer game in the subgenre of turn-based permadeath dungeon-crawling RPGs: Angband. Rather than simply interiorizing a vague conceptualization of its genre, I even embraced some of its terms and significant elements, like the presence of artifacts: special items with preset statics that cannot be destroyed, and that in this specific scenario, may lead the player to win the game. However, I found Angband's complexity and ambition difficult enough to recreate in a game meant to be developed under a week, and aknowledging this factor inevitably led to a focus on the style more than the impossible mechanics, world design, or resource management.

Similarly to early roguelikes again, and still keeping Angband or its undeniable precessor, Moria, in mind, few lines representing the player's current status at the top left of the screen were included as well, keeping the stats, menus, and UI messages as minimalistic and clean as possible. Just like it used to happen before we got to coexist with computers and video game consoles capable of more advanced graphics and gameplay, too, the player's character is represented by the @, which had been chosen by the developers of Rogue to stand for "where you're at" (in this case, it makes even more sense now that we all feel like digital animals more than creatures made of flesh and bones, somehow). Closely related to this spatial idea, the walls are #, and the enemies are symbolized with certain letters (c, r, P, etc.) that aim to represent their (physical and psychological) power over us. As for the color scheme, it's entirely personal as it intends to recreate not only a place (ice caves, sandy mountains...), but also a state of mind, as we previously stated.

Sound: waves and bones

Finally, when it comes to the sound effects and the artistic decisions that made a couple of tracks possible to incorporate into the game, most of the tonal interactions you'll get to encounter are based on royalty-free music (mixkit's assets turned out to be extremely useful), various MIDI files and samples that I managed to put together (most of them from The Dark Side of Sound, widely used by artists such as Akira Yamaoka), and tools like bfxr or Logic 9 to try and experiment a bit with synthwave, retrowave, industrial and ambient music.

Although my biggest inspiration for this minimal soundtrack is the music and sounds of the several games I managed to play throughout the years, please note that I am not a composer, and I have no idea about music theory either. However, I always believed that the non-essential visual, audio, and haptic effects enhance the player experience more than some other essential elements would, and even though I felt tempted to leave this project as silent as some realities are, I finally understood that prioritizing:

  • the sense of responsiveness between the player and what they are controlling,
  • a greater sense of impact and reward,
  • immersion, engagement, and satisfaction behind specific actions and
  • the player's emotional connection to the game

was more than tiny mere details. Quite the contrary, it also felt honest with the game mechanics since they are about serving the user's emotional needs, not just the functional ones.

MTLI original asset.

And the award goes to...

Let's keep it simple - for once. This time, The Code Award goes to both my past and future selves. As for the past one, you insisted a lot on convincing yourself that you wouldn't be able to do this, and yet you did it. We're still struggling with difficult times, but I suppose that's part of the process, too. Can you remember those endless days (and nights) practicing JavaScript, reading old books about the matter that you thought were completely out of point? Perhaps they were, but you did what you could with the tools that you had - and here we are now. As for my future self, be considerate towards the many changes we went through, and try your best to keep working on growing some self-compassion. Right now, we are failing quite harshly at it; sadly, it is how it is. However, if there's some strength left inside you, pour some into yourself as you would with the ones you truly care about.

We (past and present versions of this shattered "self") will be here for you. Be there for us, too.

As for the rest of you... "Bones festes", guys. Don't go hollow.

Please note that while I'm trying my best to improve and explore different possibilities, there might be some inconsistencies, bugs, and errors making Santa arrive at your place before expected - and jumping through the window, Tom Cruise style (is that... bad even?). If that's the case, do not hesitate to let me know about it by opening an issue, and I'll gladly try my best to improve this little "something".

Oh, and remember that you can make the (Christmas) Dinosaur extremely happy if you...


Buy Me A Coffee

tca-roguemazov's People

Contributors

juditkaramazov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.