Tutorial

From BEEP BOOP
Jump to: navigation, search

Preface[edit]

So first of all, if it isn't obvious, this isn't the final draft of the interface. Hell, there's a decent chance this isn't even a final draft of the system, we'll see. Right now I'll focus on UI elements that will definitely be changed:

  • The center line (the red one between boards) will be made wider, so as make it clearer where the two boards end.
    • (Additionally in the final draft the enemy's (or the player who's turn it isn't? I don't know just yet, probably this actually) board will be a bit darker, just to help focus)
  • Not sold on the shield block, don't know if it's the color or the shape (or the Color and the Shape by the Foo Fighters). Sword block is fine right now, MIGHT change it in a final detailing stage.
  • The colors are too pastel on my laptop screen. On my desktop they're fine, though I'd probably want them a bit more neon.
  • I think by default the player would probably be on top (to give the more natural feeling of gravity with blocks going down towards the center rather than going up on the bottom), so I'd PROBABLY flip the information so their portrait is on the left.
    • I was gonna have the sides flipped, but I may their abilities further spaced apart (and the enemies darkened in the final draft) it could probably make more sense just to have 'health and reserves on the left, spells on the right' for both sides, DERP.
  • A move counter, double derp.
    • Currently on each player's turn, they get four moves. It costs a move to activate a character block next to an active tetromino. A move is refunded if:
      • They use the delete function (not used in this tutorial because triple DERP) AND create a cascade that causes a match.
      • They match four character blocks together (additionally, this costs no moves to activate, but anyone banking on this is probably largely wasting their time).

As a note, I'll say what will probably stay the same:

  • The basic colors for the currently colored blocks, and the fact that they'll be the least detailed (though they'll probably get a nice little token sheen in the final draft)
    • Light Green - Physical Attack Reserve
    • Dark Green - Physical Defense Reserve
    • Pink - Mental Attack Reserve
    • Purple - Mental Defense Reserve
    • The reason these are the least detailed is because they're the 'least appealing' blocks, they add to your reserves, your MP system in this game. This is still really important, but it doesn't have a direct impact on your life like the ones below.
  • Shield (Shield) and Damage (sword) will probably be slightly more detailed, drawing the eye to them. Current ideas for the block are okay, may change 'em in time though.
    • Shields raise your shield (Gasp! NOTE: Shields were an idea that came up after the original UI was drawn up, so they aren't represented in it yet, WHOOPS), preventing damage from reaching your health (which, outside of possibly one or two kits cannot be regenerated). Swords, meanwhile, when matched, do direct damage to the enemy's shields (if they're up) or health.
  • Character blocks (I'm gonna start calling 'em that rather than special, I think?) are highly detailed symbols inside a circle, to really draw the eye to them.
    • Every character's is different, but as they're a big part of playing the character (and the rarest spawned of the blocks, 1/13 chance rather than 2/13) I want them to draw your eye.

There's lots more to ramble about, but I think I'll touch on some of it during the actual example of a resolution.

Board Generation[edit]

Sample Board

The board is randomly filled with blocks. The meanings of each blocks were explained above, I'm not doing it again here, just look up.

Nitty-Gritty[edit]

I've currently got a board simulator programmed, it's fairly simple, I mean it's an array. 1/7 are physical attack, 2/8 are physical defense, 3/9 are mental attack, 4/10 are mental defense, 5/11 are sword, 6/12 are shield, and 13 is the character block.

Board Clean-Up[edit]

Board Clean-Up

This step is pretty much there just for the programmers. The random board started with matches, and by default we don't want matches at the start, it puts too much power into luck that takes away from skill.

Nitty-Gritty[edit]

As such, the program runs its match checker before anyone gets their move, then replaces one of the blocks with a random block of another type. This one in the example is 'truly' random and therefore kinda dumb, as you can see it fails to get rid of what will still leave a match around the tetrominoes numbered 1. And to resolve the tetromino created after the bottom 1 was resolved, it actually ended up generating a dark green and creating a NEW tetromino. Honestly though, I'm not sure if it needs to be TOO smart (at best check adjacent blocks and don't make it the same color as any), just because with how many types of blocks there are I find it hard to believe there'd really be a chance of it getting stuck in this step for a noticeable amount of time to the player.

Round 1, Karm (Top)[edit]

Round 1 Karm

Karm swaps the placement of his special block (highlighted) with an adjacent shield block to make an active tetromino.

  • He has three moves left, so he spends one on each of the character blocks adjacent to a block in the active tetromino.
    • It's important to note, as you'll see below, the tetromino does not resolve instantly like in most match-three-type games, but is active until the beginning of the next turn of player who created it. This gives opponents the ability to mess up active sets with abilities or special blocks, delaying the match further (this cuts both ways, of course).

Nitty-Gritty[edit]

Swapping values in arrays is easy. Now we have to keep track of which ones are active. You know how I said 1/7 are physical attack? In my current algorithm, in generation, if it's in the 7-12 range it reduces it to 1-6, so I can use 7-12 as active versions. I kinda derped on active versions of the character block in my current build of the skeleton, but I imagine I could just do 14.

Round 1, Koray (Bottom)[edit]

Round 1 Koray

Koray swaps two blocks (NOTE: he could have and should have deleted the one he swapped, I kinda derped on that, though this does work out for him at the end of next round anyway), creating an active tetromino of mental attack blocks.

  • It's adjacent to two character blocks, so he spends two moves activating those.
  • He still has one move left (two if he deleted that block to create the tetromino), but for the sake of emphasizing the very bones of the system he apparently doesn't use it.

Nitty-Gritty[edit]

Nothing new really here. Deleting a value and cascading it down is also pretty simple in an array.

Round 2, Karm[edit]

Round 2 Karm

So of note here is Karm doesn't actually do anything this turn, this is just to show a resolution.

  • The active tetromino resolves at the beginning of the turn and moves down.
  • In most cases the character block would be consumed, but Karm's (currently) work in a way they are not.
    • Instead, they stay on the board active, then move down towards the center (as you can see with the righthand ones).
    • They are consumed when Karm takes damage blocking a minor amount of it, or when the blocks are made inactive and then attacked again, as will be seen below.

Nitty-Gritty[edit]

At the start of the turn, if the value in the array is 7-12, delete it and move the values from above. If it's 14 and character case is Karm, move it down until it runs into another 14.

Round 2, Koray[edit]

Alright, this is a big one.

Round 2 Koray, Character Block 1

Koray's active tetromino resolves, and his character blocks are consumed. His allow him to target a part of the board in a + shape, on either board.

  • He sets his sites on Karm's cluster of character blocks. The blocks on the | portion are all inactive, so they're immediately destroyed by the blast. The two special blocks on the - of the shape are hit and made inactive.
  • Again, because of the way Karm's blocks work, the active one now 'sinks' down to where the inactive one was on the right. This will end up saving that inactive block in the next step, though Karm will be left with no active character blocks, how sad.
  • Also note Koray is destroying one of his blocks with the bottom of the + shape in order to hit the two of Karm's character blocks.

Round 2 Koray, Character Block 2

So blocks on the | configuration of the + on both sides have moved to fill the gaps.

  • The left of Karm's character blocks in the blast is now inactive, and so destroyed as easily as any other inactive block.
  • The right one from last time got moved up a block due to active sinking to the bottom, and that one that sank is now hit and made inactive too. Overall a good play from Koray, he negated three of Karm's moves with only two and being a quickfire (ah, ah) type of character Koray wants Karm to have as few defenses as possible.

Round 2 Koray, finally beginning (ignore the image name, i quadruple derped (quaderpled) on that)

After all his special blocks are consumed, Koray's turn actually begins, with the active blocks disappearing. He gets lucky here that he didn't delete earlier and gets two active tetrominoes at the start of his turn.

That's the end of example of moves and resolutions (and character blocks), there's a few mechanics that weren't presented here (damage/shields, abilities, deleting) that I'll likely create similar stuff for in time, but ideally this should give people an idea of what the system looks like.

Nitty-Gritty[edit]

Ugh, not looking foward to programming Koray's blocks, especially when he uses it in edge cases like this where it hits both boards. It may actually be simpler to program the board as one array than two separate ones due to cases like this, though they are fairly rare. I don't know, I'll mull it over. Anyway, Koray chooses a block for the center and then if it's active it hits the deactivate code and if it's inactive then it deletes and moves values. It does this check for every block in that + configuration ((x,y), (x+/-1, y), (x, y+/-y)). Not that bad in that form, but when he's hitting both boards it gets ugly to program for if they're separate arrays.