Mainframe (and other personal projects discussion)

Discussion in 'Anything Goes' started by The G-Meister, Apr 30, 2016.

  1. res7less

    res7less Jumpkin

    It just seemed natural for the topic of hacking having something to do with leetspeak and symbols, that's why I suggested it. If you're looking for something with good readability, it's not something to go with, of course.

    PS: Good to know that I am ressevenless for you and your friend :p
  2. The G-Meister

    The G-Meister Giga Slime

    Yeah that's fair enough. I was referring to readability in the code rather than the game, but when you've got letters as well as letters made with letters it does get a bit confusing. Bunging in symbols and numbers won't help that much.

    Also yes, ever since I saw your name I have pronounced it "ressevenless", and I only realised it wasn't once I saw your twitch name :p
  3. res7less

    res7less Jumpkin

    Since you're slightly letting the thread go stale, I will just hijack it a bit in order to revive it as a thread for hobby projects :p I hope you don't mind.

    I'm a big fan of turn-based combat system games, like Final Fantasy (several parts), Penny Arcade's On the rain-slick Precipice of Darkness 1-4, South Park: The Stick of Truth et cetera. Currently I've been somewhat digging into Unreal Engine 4 in my spare time to try building my very own turn-based combat system. I know, a lot of you guys already mentioned that Unity is the way to go, but I'm not really a programmer, so the blueprint system of UE4 is really coming in handy for people like me and after having used it for a bit, I have to say it's still pretty powerful without being able to write a single line of code. Also UE4's license is free as long as you don't earn over 3000$ per calendar quarter, which means you can fully use it for something you don't intend to earn money with.

    In any case, the system is still in the early stages, meaning I don't have damage calculation yet, dodging/missing have no visible feedback (although they already do work), there are no class bonuses, or other temporary effects, no skip turn mechanics and so forth, but it slowly starts to take shape, so I recorded a small outtake. Beware, the left side is dark and full of traces.

    Edit: It appears YouTube clammed in the same video twice for some reason.
    Last edited: Dec 27, 2016
  4. The G-Meister

    The G-Meister Giga Slime

    Looking good! I can't make much sense out of what's happening, especially with how quickly that console on the left scrolls past, but something's gotta be happening for the console to be that full :D

    I would be much more active in this thread if I had much to update you on :p Since my hand pains started getting pretty serious around September time I halted any programming I wanted to do, and so I haven't really done much. However, since a physiotherapist finally found out where the problem was (eating too much wheat, of all things - and a wheat-free diet is pretty costly and hard to maintain) around the start of December I've actually managed to get a few things done.

    I've moved over to Eclipse as an IDE, simply as it was getting a bit confusing with notepad++. I've got a looooad of stuff planned, such as new classes to make, a package structure and a decent amount of gameplay features, for the point when I actually finish the engine :/ More work is set to be done soon, and now with two monitors, programming is even easier!

    If you want anything in the mean time, I've got a couple images I've done over the past few weeks. The top one is a piece of promotional art I attempted, still unfinished, but a good start (despite the fact that the woman looks far younger than she actually should be. Will redraw that eventually). The bottom is a few assets that I plan to use in the game - a dial, a button (clicked and unclicked), and the animation for a switch being flicked. I originally had a bit more art on the game assets one, but I accidentally deleted the file. What's there is a re-draw, and slight improvement, but still lacking content. I guess I could go fill in the blank now. That's something to do.


  5. res7less

    res7less Jumpkin

    Sorry to hear about your hand pains, but at least now you know the cause and that counts for something.

    I still find it amazing how people are able to produce art, especially with symbols, so that's pretty cool. Perhaps you could give the woman a hairband to make her hair into one of those things female librarian stereotypes are wearing to make her look older? Dunno, just an idea. Hope you'll continue pursuing your goal and looking forward to see some playable results ;)
  6. The G-Meister

    The G-Meister Giga Slime

    I think I made the spontaneous decision to make her your manager in the company you're working for, so I should probably drop the wink. I might try a hair band, but the thing I really want to change is her body. Looks a little too petite, so much that it looks cartoonish, which wasn't the art style I was going for. Realism with letters is an extra challenge - and I like a challenge :D

    As for something playable, I have an idea for a basic tech demo. I don't think I've talked much about what the game will contain, so here goes that as well I guess. The game will revolve around trying to match a given number of symbols with whatever inputs you have available - whether that be buttons, switches or dials. The catch? You have no idea what any of these inputs is gonna do before you click it. It could increment to the next symbol, decrement to the last, or even change what other inputs do. I have a whole list of possible effects, but I won't spoil them all for you now ;)

    The tech demo was going to be a "bike lock"... sort of. 4 symbols to match, 8 buttons, each either above or below one of the symbols, such as to deceive the simple minded into thinking the one above increments and the one above decrements. As you complete more of them, they gradually get more difficult - you have more symbols you can cycle between, and the inputs become increasingly more jumbled and complicated.

    The game itself (when complete... sorry, if completed) will be much more structured and have better progression, as well can integration of other types of inputs. Don't get too hyped though - probably won't get much out anytime soon :p

    In case you don't get when I'm on about with the symbols thing, imagine the image below as your options (getting increasingly more difficult) but you can't see what's above or below the arrows:

    Last edited: Dec 27, 2016
  7. res7less

    res7less Jumpkin

    I totally always wanted to hack myself into a bicycle! :p But yeah, I think I get the idea of how it's supposed to work. Reminds me somewhat of the good old Mastermind, a game that was there before there were games. But with letters it's probably way more complicated as there are much more possibilities and combinations. Sounds interesting, in any case.
    The G-Meister likes this.
  8. The G-Meister

    The G-Meister Giga Slime

    Ah yes, I did mean to put "bike lock" in quotes.

    ...or are digital bike locks the thing of the future?! To the ideas board!
    res7less likes this.
  9. The G-Meister

    The G-Meister Giga Slime

    Okay this is worthy of an update. I saved my Game Assets text file... to have it turn into this when I reopened it. upload_2016-12-29_0-28-53.png

    Anyone know how to read that (@TsReaper) ? More importantly, is there any way I can revert this back to the latin alphabet? Haven't lost much important work, just some rearrangement stuff.

    All of this malarkey with codes is started to get complicated. Should really move over to a different sorta system.
  10. res7less

    res7less Jumpkin

    Did you get that issue fixed? Cause I don't have a clue, what could have happened. Perhaps some problem with displaying the contents with the correct encoding?

    Meanwhile I added damage calculation and some fancy damage numbers, as well as feedback for when an attack misses or hits but gets evaded. You can even notice healing exists too as the Berserker occassionally absorbs damage and heals for 50% of the damage amount he would have received.

    Also I found a way to enable/disable the console traces on the left.

    Edit: Oh, yeah, I still don't know why YouTube doubles the video. It's 2 minutes before uploading, 4 after.
  11. The G-Meister

    The G-Meister Giga Slime

    That's... genuinely quite confusing. Pretty baffled at that!

    I have to say that system's looking pretty good now! I can see what's going on quite clearly with those damage numbers. Much improved, looking forward to seeing what else you can do with it :p

    As for the glyphs, I never got them sorted. It wasn't worth chasing up as I didn't lose too much work, so I never bothered asking around anywhere else other than here, nor did I do any Googling. That doesn't mean it's halted progress though - I found where the programming vibe went the other day, settled straight down and got a load done, and it hasn't worn off since :D

    The developer tools are now in very much a working state, aside from the odd graphical bug that is so minimal that I can't be bothered to fix it. There was this huge issue I was having where it took two whole seconds to update the graphics of my window if I was changing all the letters which I managed to fix yesterday, with a simple repaint() method. Now it takes just 0.2 seconds, meaning loading times will be practically non-existent and I can put off learning thread management even longer! Yay!

    I've got a bit of artwork to show off as well, though I'm waiting to implement a couple extra features into the dev tools and a couple things with event handlers (clicks and key presses) before I really start working. I've got a pretty polished tech-demo screen here, which I've spent quite a while redrawing until I got something I liked. After not liking the look of a circuit board-type layout I decided to take some inspiration from a CPU and came up with this:


    ^ Please click to expand that, looks terrible without :(

    I believe I've also increased the brightness of the green a little as well, it looked a bit too grey last time, but now it pops a bit more.

    We've got 5 main elements here - the output box, the buttons, the timer, the notepad and the auto-notepad. The output box is the thing with the letters in the middle. That's the one in which you're gonna try to match your four letters for the bike lock code. The buttons are either side of the output box, and are what you use as the inputs. The timer is up the top, and will give a fixed time limit for each level, if you decide to turn it on in the options menu (coming soon!).

    The notepad is the thing with the Ms on the right. It'll be blank on startup. It works by registering keyboard presses and putting the relevant letter in one of the boxes. If you press that button again, the letter stays there, but scored out (to show that it's present, but it doesn't appear in one of the output sections). You press it once more and it disappears altogether. The cycle repeats.

    The auto-notepad is the thing on the left. It does the same thing as the notepad, but automatically, while also showing you in which order the letters appear. I might add an option for the middleground as well, where it automatically fills in, but uses the one on the right instead of the one on the left. You can either have one of the auto-notepad or the notepad active at once, or neither of them.

    Aside from a couple graphical upgrades (the odd bolt, maybe a few capacitors), that's basically all I wanted to add to this. If I keep up the programming high I might have a load more done in the next month or so :D

    [Edit]: Oh I also forgot to mention that I've added a different saving/loading system. Whether it still ends up resulting in those issues I'm not sure, but at least now I can save sections of and load bits onto the table, rather than the whole thing.
    Last edited: Jan 15, 2017
    MrChocodemon likes this.
  12. res7less

    res7less Jumpkin

    Looks cool and interesting so far. A bit hard to understand maybe, but I'm sure it's one of those cases, where it's hard to explain, but easy to understand once observed.

    So you basically premade all letters and numbers out of letters and numbers? :D That's awesome. Is it like a custom font then?
  13. The G-Meister

    The G-Meister Giga Slime

    Yeah, essentially. It's basically a 5x5 pixel font I've created, turned into letters. I decided to stylise the font such that no letter has a pixel in the top left or the bottom right corner. Why? Dunno really. Just sorta felt like it :D

    I have a screenshot with all the letters and numbers that I'll upload when I get home.
  14. The G-Meister

    The G-Meister Giga Slime


    That's what they look like. They're changing every now and then as time goes on, as I realize which ones I do and don't like. The X and Y still look a bit weird, so they'll probably change soon, and I'm torn on two designs I have for the R.
  15. res7less

    res7less Jumpkin

    Hm, yeah, X and Y do look a bit weird. E too. But the rest looks nice. I especially like the S and Z. But you could maybe switch to 10x10 for a bit more room for fancy squiggles. Or 8x8 to be more classic.
  16. KoBeWi

    KoBeWi Jumpkin

    The X has a very interesting shape.

    R and A look too similar.
  17. The G-Meister

    The G-Meister Giga Slime

    The problem with an E other than that one is that it starts to look even more weird when you extend to top out, because it wraps around too much and starts to look like a euro symbol. I'd totally go larger, and I do have a 7x7 font planned, but I tried doubling that one to 8x8 and I could only fit 8 out of the 9 letters in "mainframe" onto the table :D I won't make them much bigger I don't think, because if they get any larger they become difficult to read when you're also trying to read small text. That would involve rescaling the window... then it gets complicated.

    Yes, the R and the A do look very similar, but as do the 0 and the Q, the 8 and the B and the O and the D :p It's pretty hard to get away from when I'm working around these restrictions. At least with how far away I'm sitting from my monitor they're distinguishable (about 80cm).
  18. The G-Meister

    The G-Meister Giga Slime


    It's been a while of fairly intense bug fixing and testing. Nothing much to show, but instead some much needed optimisations have been dealt with. Why am I posting then? I've just got rendering working cleanly at 60fps :D Seen as I have nothing to show, I'll at least go over the inefficiencies I've cut out.

    So, to start off with, I attempted rebuilding the program from the ground up - twice. The first time was to see if using AWT components instead of Swing components would speed up the render time. I remember it having a somewhat significant difference, but it also brought up a whole host of other issues I wasn't prepared to deal with. For that reason I decided to cut out what was probably the worst inefficiency - having the program repaint 5184 individual containers every frame.

    Before now, it wasn't a nice sight. Frame times were coming it at 75 milliseconds instead of the needed 16. Having said that, cutting 5184 components down to 1 isn't that pretty either. It took a long time, and involved the creation of a whole new class in doing so (I kept overflowing Java's maximum storage capacity for a method/class of 65535 bytes - turns out it doesn't like you feeding in an array of 12000 integers :oops:).

    Then I hit a fun issue. Having not used Graphics and custom Swing painting before, I had no idea why my calls of repaint() to my singular component weren't working. The internet didn't help, no errors were being thrown, nothing. Eventually, after about 3 or 4 days, I found out that setting the layout property of the container holding my canvas to null was no longer relevant. Removed one line of code, and it worked instantly.

    So I tested render times - an improved 47 milliseconds per frame, but still waaaay off the maximum threshold of 16. So tonight, I took a look through my code, and found these things I could optimise:
    • Instead of running 5184 operations per frame, I was instead running about 13,000,000, due to a for loop within a for loop
    • After testing the speed of running a 1 dimensional for loop and converting the 1D value into x and y co-ordinates, it was about 200 times faster to run a 2 dimensional for loop (as in, a for loop within a for loop. So for every value of y, it loops a number of iterations of x). No extra conversion calculation has to be done, except when you need to cut the loop prematurely.
    So a couple edits took place, and now my code is a bit messy. Half of it is optimised, half of it isn't. However, I decided to only optimise the bits I needed for the rendering and now:


    Look at those glorious frame times (in nanoseconds - divide by 1,000,000 to get milliseconds) baby! Averaging 1 millisecond, I now have the spare 15 to do any extra calculations I need.

    This engine is slowly becoming more and more of an engine. Once I've found how to anti-alias the text (if I want to) I've got a couple extra classes to make and I'll then also have a working layering system!

    Stuff is happening now - and fast. If you're lucky I might have some extra art soon, and I've got idea about improving event handling code (last time I checked, clicking a button took about 0.3 seconds to respond :confused:). After that I've gotta code some functions for buttons, the letter animations and all sorts... So while gameplay might be quite a while away, it's at least in sight.

    ~G <3
    Kana, res7less and Teddy like this.
  19. res7less

    res7less Jumpkin

    I think I understood about a half of what you're talking about :D But it definitely sounds like you have reached an important milestone, so that's good then. The only thing I can somewhat relate to is this:

    Back in the day I was working with Adobe Flash CS5, which was able to convert apps to Android and iOS. The iOS converter, however, was using Java (or JavaScript? I'm always confusing those two). And due to the problem that the app had over 10.000 lines of dialogue stored in a three-dimensional array and because of Java's limited memory, the program just couldn't convert all the information without reaching memory overflow after about 5 minutes of exporting time. Because of that I could never port the app to iOS without a major rework. Funny enough, porting to Android took only about 20 seconds without any issues. Ahhh, good times :bag:
    The G-Meister and Kana like this.
  20. The G-Meister

    The G-Meister Giga Slime

    When I said I don't have much progress to show, what I forgot about was that I've been making some significant progress with the music :oops: So, here we go I guess.

    One of the benefits of being a programmer, graphic artist and music artist is that I don't have to explain my ideas to anyone to be able to get the stuff I want. I'm using that to my advantage with the music here, as I've been making music that will work dynamically with the game.

    But how does dynamic music fit in with a puzzler? Like so - each stage/level will generally consist of 5 different sections, all of which revolve around a single specific concept/idea, but with slightly increased difficulty. The music tracks I've created so far also consist of 5 different sections, each corresponding to a level section, but in each track the tune gets slightly more complex. And thus, we have dynamic music. Bear this in mind when listening to the tunes (links below) :D

    I've got another couple things I might want to implement with regards to the dynamic-ness of it. Despite also having a start and an end to begin and round the tracks off smoothly, I've had an idea that the game will take a brief pause in between level sections to allow players to take a breather. I'll do this in place of normal, any-time-you-want pausing the game when there's a time limit involved in the puzzle, as otherwise people could get all the info they need and figure out the puzzle while paused, which is definitely not the optimal strategy I want.

    Anyway, I'll probably make tracks switch back to the first tune if the track happens to hit a transition point during that time of waiting, so it hypes down a bit as you wait, chucking you back into the action when you decide to resume. I've tested this pretty roughly inside GarageBand, but I think I'll actually need a playable level to test with first. Something else to add into the tech demo :D

    Here are the two in-puzzle tunes I've got so far. Challenge is the first tune I came up with for a timed puzzle. It's pretty basic in terms of chord progression but it's got two distinct movements (parts within each section that sound pretty different), and I think it does the job. Probably won't fit a lot of people's music tastes, but hopefully it gets across the feeling. Jazz is a tune I made ages ago that I added to and modified to work within this 5 part setting. I'm a big fan of this one, mainly because I love the chord changes and how the drums convey that feeling that you're under some serious mental pressure in the second movement, almost like someone's nagging you to do something :p

    You may also notice that both tunes use very similar instruments. Having really liked the "Arcade" thing I came up with to mess around with chord sequences, I've decided to modify that a tad and keep using the same instruments for all the other pieces. It's like the old chiptunes, but with a modern twist. I guess I can upload that for you to listen to as well - link here.
    UTech likes this.

Share This Page