About project - NetShag
Hello there! It’s finally time to tell you about the project I’ve been planning and already started to implement. Buuut, I won’t tell you right off the bat what kind of project it is xD. First, you’ll have to be patient for a moment and dive into the backstory.
So, although I’m a techie, I’ve always been drawn to all sorts of creative work. And, like probably many other people, as a child I dreamed of one day becoming famous through this creative work. Back in fifth grade, I dreamed of writing a book that would become super-popular and everyone would know my name. I even started writing it (right then, in fifth grade), and of course I realised very quickly that it wasn’t really that easy. So over time my ambitions diminished a little, I was fine with even moderate fame. And later I came to the conclusion that I didn’t really need the fame at all. But I enjoyed writing, so I continued to do it, although I mostly wrote “for the desk drawer”.
In high school and in my first year at uni, I tried to write stories. It was, of course, quite graphomaniacal - I was vaguely aware of this at that time, and now I can see it quite clearly xD. Thinking through the characters, their motivations, the world around them? Nah, why, it’s just flash fiction. On top of that, as most of the small number of commentators have pointed out, my language was “rusty”. However, I personally liked these stories, and I like some of them to this day. It’s not surprising: after all, I was writing mostly for myself. Besides, I think there were a couple of interesting thoughts in these pieces after all.
If you have a sudden desire to read my opuses, you can do so here (sorry, dear English speakers, it’s only available in Russian). Be prepared for it to be at best naive and maximalist, and at worst… well, just meh xD. The markup has also got damp over the last six years and is “floating” in some places. Maybe someday I’ll drag it all over here, but it’s still all up in the air.
Around the same time, I also tried painting. Again, it was done completely unprofessionally, I never learned how to draw. It’s only natural that I wasn’t able to draw anything “out of my head” - I only copied things (mostly anime and game characters). Of course, I won’t miss the opportunity to “brag”:
Erm, what anime is that from?
A bit more examples here. If you think I was just tracing someone else’s pictures in Paint, you should know that I wasn’t: I’ve been tracing my own pictures! Yeah, yeah, I wanted to digitalise my drawings, but it’s not easy to draw directly on a computer, I didn’t have a graphics tablet, so I drew on paper, took photos, and… yes, traced in Paint xD. This, for example, is what the inquisitor from above looked like before it was digitalised:
Around the same time (yep, again, that was such a busy time) I was trying to explore real computer graphics. At uni they showed us a couple of formulas for transforming coordinates and taught us how to draw something on canvas with C++. Of course, I tried to make a simple animation and it turned out rather nicely for me:
Did you notice the signature icon? Yes, it was made in Borland C++ Builder 6
You can see it in motion even now, on Windows 10, if you have the necessary DLLs (which I’ve put together in archive for you, along with the software itself). I did a lot of other things afterwards, but it was this, the simplest, very first animation I ever made, that really stuck with me. So much so, that 7 years later, when I was already a more or less established developer, I recreated it on the now more familiar Web stack. When you watch, remember to swipe left and right, and if you’re on your phone - test the ability to switch characters by shaking your device. “Switch characters… by shaking your device? Why?” - you ask. Because I could, well, and also
To Satan’s glory, of course
And so, eventually, all these hobbies, spiced up with a craving for creativity, turned / evolved / mutated into a desire to create a game of my own. In fact, this desire always existed - after all, programmers are usually people who wanted to make games.
But now this desire has finally fully formed into a conscious thought. There were several ideas on how to get there. At first I wanted to get a job in a gamedev company. There even were some in my city, but they needed C++ developers. Alas, I didn’t know C++ particularly well, and closer to the graduation from uni I decided that I wanted to switch to web development. Gamedev companies that would make browser games specifically existed, of course, but the ones I knew were mostly doing all sorts of, hmmm… nonsense, yes, let that be the word, nonsense like “Wheel of Fortune” and generic “three in a row”, which was not to my liking. I could have looked for companies further away, in other cities, but at the time I was not ready for relocation. So, the idea has been stalled. But maybe it’s for the best, because from my current experience, all development companies are pretty much the same - in any of them there can be hassles such as the asshole manager, overtime / crunches, requirements that change 100 times a day… Who knows, now I may have looked like this, for example:
Hide the pain
Harold Marcin
In fact, I look pretty much the same, except my hair has gone xD. But if I worked in the games industry, I’d kill my desire to play games too.
There was a phase when I tried to make a game together with my friends. Alas, we were bogged down in the same quagmire in which many such ventures bog down: lack of organisation. We did not have a leader who would assign tasks and monitor their implementation (the notorious project manager). In the end, although everyone’s personal discipline was at a decent level, there was little movement. It was also due to the fact that we did not have a clear and solid idea, and the concept could only change because one of us seeing something cool and wanting to add it to the project. There were also other problems (imperfect knowledge, lack of assets, personal circumstances). Anyway, enthusiasm died down.
Ultimately, I came to the conclusion that I had to make the game myself. There were problems along this road too, but we won’t talk about them just yet (there’s so much material that you could write a whole article just out of it, and we already have a huge wall of text here). Alright, I think we can finally get to the main topic, which is sharing about my game.
It’s gonna be a rogue-like game (maybe even more like rogue-lite, although some mechanics are there from the classic rogue-likes, but these days even Rogue itself is classified as rogue-lite, so it’s probably safer to call your game rogue-lite… in short, I am confused). There’s random generation of mazes and their contents, permanent death, that sort of thing. But what else is worth noting right away…
It’s gonna be a porn game.
Yep, that’s exactly right. One of my characteristics that I forgot to mention in the article about myself is that I am, oh wow, a lustful animal who belongs in horny jail. We won’t go into detail about how it happened, we’ll just take it for granted. If right now you’re sitting there wondering, “What the hell, author? You took a tour of your past for about half an hour just to tell me you’re making a porn game?”, well… sorry. I am sorry for wasting your time. I really am. And if your reaction was somewhere closer to this:
Now, what else is there…
Then let’s go on!
Just as I said, the game is a rogue-li(k/t)e. The setting is typical fantasy, but there will be special features in the lore, which I’ll tell you about later (as I make it up xD). The player’s character descends into a dungeon inhabited by monster girls. The player can interact with them as with monsters (e.g. fighting) or as with girls (e.g. trying to have sex).
What is already in the game?
1) Rooms generation
Here I cheated substantially and used a ready-made solution provided by the marvellous ROT.js library. It can do a lot of things in general and has saved me a lot of time.
2) Drawing the labyrinth and its contents
ROT.js has utils for rendering the map and entities on it, but for me personally it was not enough.Therefore, another wonderful library - Phaser - is responsible for the visual part of the game. It looks something like this at the moment:
I’m using tileset from Dungeon Crawl Stone Soup - thanks to its authors for the free licence! Someday I will commission my own tileset from some artist, but for now this is it (I may leave the environment tiles “as is”, but I will definitely replace the monsters and objects, because right now it’s impossible to guess what kind of monster it is just by looking at it). For the UI elements, I’ve bolted on a great CSS framework - RPGUI.
3) Interactions
You can:
- move around the level (1-2-3-4-6-7-8-9 on the NumPad);
- go to the next level (5, provided you are on the exit square);
- pick up, equip and use items (unequipping items or throwing them out of inventory is not yet possible xD); pick up items as usual by simply moving to the square with them, and use them with the U (use) key - pressing this will display a list of available items in the console, after which you can select one of them by pressing the appropriate key, or cancel selection with Escape;
- attack monsters (H - hit) or perform erotic actions on them ( ͡° ͜ʖ ͡°) (F - fondle / S - sex); you can select a specific area - for example, to hit the torso or head; you can select the default action, and the character will perform it when trying to move into a monster occupied cell.
It is only possible to use the keyboard to perform actions.
4) Roleplaying system (kind of)
I have explored various options for a long time hoping to use some of the existing roleplaying systems. You know, so you don’t have to invent races, classes, characteristics, spells, etc. from scratch, so you don’t have to worry about balance, in general - so that you don’t have to reinvent the wheel. I was considering Tiny d10, The Black Hack, I was even thinking about d20 SRD. Spent a lot of time examining different gaming licences. It all turned out to be either too cumbersome or completely unsuitable for single-player play (or even for the videogame format in general). As a result, I started to compose my own system. Don’t expect much depth, but I don’t think it’s needed.
So, the character has five main attributes:
- appeal - influences the behaviour of some monsters (ugly characters are more likely to be attacked by girls, while pretty ones are more likely to have sex with them);
- endurance - affects the maximum value and recovery rate of body fluids (more about fluids later);
- strength - affects physical damage / defence;
- libido - affects sexual “damage” (amount of pleasure delivered) / resilience;
- intelligence - affects the ability to cast magic (the higher the intelligence, the higher the scrolls the character can read).
The character’s current state is reflected through their body fluids:
- blood is the main indicator of life energy (you can think of it simply as of hitpoints: if you run out of blood, the character dies);
- lymph - essential for the use of magic (can be considered mana);
- sperm is expended upon ejaculation, and its complete depletion will also not end well.
The amount of fluids in the body can be replenished with items, and in addition, they also slowly regenerate on their own.
There are no races / classes in the game, nor are there any levels - the plan is to increase a character’s strength through the items he will find.
The battle goes like this:
- assume character A is attacking character B;
- the result of a d20 roll is added to the attack value of character A; if it is greater than the defence value of character B, it is a hit, otherwise it is a miss;
- if attack hits the target, character B takes damage; the damage taken is reduced proportionally to the character’s resistance index (I won’t give the exact formula, but I will note that the resistance index for each zone is different).
Don’t DnD’s ears stick out too much from under the hat? They do? Whatever xD.
It may seem odd that the zone chosen to attack does not affect the chance of it being hit, only the damage inflicted. I considered this to be enough, because if it so happened that a monster had such stats that it would be hard to hit a certain zone, and the damage to that zone would also be weak, it wouldn’t be fair to the player. Anyway, I’m keeping an eye on this component of the combat system, and have left the possibility of changing it in the future open.
By the way, if you hit an opponent in the arms, she may drop her weapon. And if you hit your opponent in the legs, she may have a chance to be slowed down (skip some of her turns).
5) Character generation
Buying stats with points is kind of boring. So I implemented a system I’ve seen in some of the classic rogue-like games (I thought it was Omega, but then I replayed Omega and didn’t find that there). Before each run, the player is asked one question on a topic unrelated to the game, and given four options for answering that question. Depending on the choices made by the player, his character will receive a bonus (or penalty) to certain characteristics. There are only five questions available so far, but the plan is to have something like a hundred. The game remembers what it has already asked and will not ask those questions again until it has asked all the others. If there is no desire to mess around with the questions, the player can opt out and then his characteristics will simply be randomly rolled.
6) Monsters (monster girls… monster maidens?)
Although they are not entirely sentient, I have tried (and will continue to try) to give each of them a unique behaviour. For now, there are only two species of monsters:
6.1) Catgirl. If you don’t touch her, she’ll just wander around the dungeon. If a player attacks her, or if she sees someone being attacked (yes, there’s already a field of view calculation here - thanks again to ROT.js) - the kitty will show her claws. And if you show her some affection, she will respond in kind.
6.2) Vampire. The vampire is particularly lustful, so when she sees a player, she will rush to him and try to have sex with him. She’s also quite fond of blood, though, so she’ll use her body to distract the hero and drink the blood out of him. And of course, if you hit her, she’s bound to fight back.
I’ve tried to organise the code so that adding new monsters and customising their behaviour is as easy as possible, so the rest, as they say, is just a paperwork.
7) Items
All items in the game now fall into two categories.
7.1) Equipable. This includes primarily weapons and armour. Each item can be equipped in one of six slots: head (helmets), torso (armour), arms (weapons), legs (greaves), feet (boots) and “other” (jewellery). Only one item can be placed in each slot (so you can’t carry a weapon in each hand yet). The only exception to this is the jewellery slot - you can wear as many rings and necklaces as you like.
7.2) Activatable. At the moment, food and scrolls are planned as activatable items. When activated, they give a one-time or repeated effect. Oh yes, I forgot to mention - both player and monsters can be subject to “effects”. For now, they only have an impact on the character’s characteristics, but can theoretically change the state of the game in any possible way. The effects can be either temporary or permanent.
Particular attention should be paid to scrolls. All the magic available to the player in the game is done with them. Depending on how high the character’s intelligence is, the scrolls will work differently (their effect may be applied fully, partially, not applied at all, or even distorted). For example, a Healing Scroll, if read incorrectly, can mutilate a person.
The number of items in the game at the current stage has consolidated at the impressive (no) mark of 4 pieces. Not great, but then again, I’ve spent a lot of time on scalability - adding new items with whatever effects you want should be easy enough, and (dare I hope) won’t require rewriting half the app.
8) Ability to save / load the game
Nuff said!
9) Ability to lose
Suddenly, isn’t it? xD For the time being, the only way to lose is to waste all your blood (and die as a consequence). I haven’t even added any death message yet - the game will just throw you into the main menu.
What isn’t in the game yet (but definitely will be)
1) Ability to win
Erm, somehow missed that this is needed too! As for now, we just wander around the dungeons until we die (or until we get bored, which will happen sooner). But the goal (victory condition) will definitely be in the game (no, won’t be finding amulet of Yendor). And this goal will be directly related to the next point.
2) Named non-playable characters (NPC)
Hypothetically, this would be the so-called “killer feature” of my game. Do you remember the characters from Hades? They look good (more than that, they’re hot), they sound good (oh, Megaera, talk to me more), they respond to absolutely everything (what weapons you have, who killed you last time, whose gifts you accepted) - and yet their phrases are not repeated (at least in the first 30 hours of play)! Imagine that these characters (all of them, not only bosses) appear directly in the game, and you can interact with them in more than just dialogues - you can kill them… or fuck them, for example! Yes, I admit I’m a degenerate, but I like the idea. Of course, it’s far from certain that I’ll be able to create characters as cool as those produced by Supergiant Games; moreover, it would be too arrogant of me to even aspire to that level. But I will try!
And about how the goal of the game will relate to the NPCs. After the player has passed a certain number of levels (say 20), he will meet one of the “girls with a name”. She then must be defeated (not necessarily by brute force), after which the player must decide what to do with her (e.g. execute her, or, ahem, “satisfy her”). The NPCs will respond to the player’s different parameters and play style, and will remember the player’s decisions from past playthroughs. So, a meeting with such a character will be the finale of each run.
3) “Adult” content
Naturally, what else could you expect xD. In fact, it already exists in the game, but only in text form, and I know myself that all players would like to see pics. There will be pics, but later.
The initial plans are to have one picture for each ordinary monster (with the most iconic - in my opinion - position) and 10 pictures for “bosses” (opening by one or by two after each successful run).
I realise that this sounds like a lot of empty gibberish now and you think: “Come on, you can promise anything”. I’m sorry, but I have nothing to show you at the moment. The thing is, although I’ve tried to draw, I haven’t become a decent artist; in my game I’d like to see art of a higher quality than what I can produce. Besides, I’d like to see original characters there, and I can’t paint such characters at all. All this leads to the fact that the art must be commissioned from an artist (which I assure you I will be doing very soon).
4) More interaction possibilities
There will certainly be a “throw” action, and with it, a long-range weapon will be introduced. Inventory management will be improved (you’ll be able to unequip and discard items).
5) Title
This article is called “About the project - NetShag”, from which the observant reader could conclude that the game will be called “NetShag”. Actually, it’s just a reference to the great NetHack, and also to a certain video (which also reminds us of the essence of the game). Who knows, maybe it will really become a title (after all, nothing is more permanent than temporary), or maybe I’ll come up with something better.
By the way, the internal name of the project is Kumano - simply because she’s my waifu (yes, I’m a ship-phile). Do whatever you want with this information, just keeping you informed.
What won’t be in the game at all (well, I you really, really want to, maybe it will, but it’s unlikely to happen)
1) Localisation
Technically, it is possible to add it. And initially I was actually planning to add and support at least two languages (English and Russian), as well as provide tools for users to add other localisations. But there were a few problems along the way:
1.1) The font I’m currently using (“Press Start 2P”, included with RPGUI) does not support Cyrillic. I searched for other fonts with a similar style and Cyrillic support, but couldn’t find any (probably just didn’t look hard enough).
1.2) The perennial problem of stuffing text into its intended containers (mostly buttons). Not everything can be scaled, not everywhere you can add a scroll bar, cropping text is not an option either… Two languages can still be handled, but if you allow players to add their own translations, something is bound to go wrong somewhere.
1.3) The hardest part is probably the “dynamic” messages. Sometimes I need to use, lets say, the name of a monster that the player interacts with in the text. Moreover, sometimes I don’t just want a name, but a name in the plural or in the possessive case. In English, it’s not that hard to form the word I want - there aren’t many rules or exceptions to them, so people have had suitable libraries built up for a long time. In Russian… it’s a little more complicated. And God help you if you need more cases (cause in Russian grammar, you know, there are at least six of them).
In short, there were already too many difficulties at the initial stage, so the localisation idea is scrapped.
2) Support for mobile devices
Very much wanted to, frankly (at least to broaden the potential audience). But it’s also very difficult. Not technically, no, more in terms of user experience (UX). Firstly, it is a challenge to fit all the interface elements into the mobile screen without making them microscopic. Secondly, there is already a lot of actions in the game (including contextual ones), and there will be even more, and I have no idea how to make it easy to control it from the phone (and making the game look like one of the Nethack ports, where you have to open the virtual keyboard upon every action - I understandably don’t want to).
The bottom line
Whew, I think I’ve made a bloody wall of text! To be honest, I didn’t intend to write that much, it’s just that the stream of consciousness turned on and refused to turn off. I’ve probably spent too much time on something and forgotten something else, even though it was important - that’s OK, I’ll remember it in the next post. Yes, something else to note: since in this article I revealed some uncomfortable truths about myself (namely that I am a pervert), and I wouldn’t want to be horny on main, I had to retcon previous articles by removing links to social media by which I could be easily identified. I have left a link to the repository of this blog, but I have made the repository itself private. Remember when I promised that you could leave your pull-requests?
As for the game: it’s far from even an “alpha” version, but nevertheless, I’ll leave here link to download the current build (purely for inquisitive descendants). It’s also already on itch.io (where I plan to release it later), but I won’t give you the link because it’s still too raw.
I have tried to describe what is already in the game and what will someday be there. As mentioned in the last post, I’m going to be working on this project for quite some time, and I’d really like to see it through to completion. So far I can’t devote all my time to the game (I still have to make a living and support my family by coding in a webdev company), so things are going very slowly. But, as they say, easy does it, right? Someday I hope to take a major sabbatical and then I can get on this project with the full-time approach, but for now it’s all just a dream.
That’s all for today.