Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411283 Posts in 69325 Topics- by 58380 Members - Latest Member: bob1029

March 29, 2024, 06:04:34 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsJack Move. A cyberpunk JRPG
Pages: 1 ... 5 6 [7] 8 9 ... 15
Print
Author Topic: Jack Move. A cyberpunk JRPG  (Read 49007 times)
Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #120 on: May 15, 2017, 02:55:47 AM »

It's looking fantastic now. I used Fonstruct for designing font for my game too, neat little site indeed. I also use Kinoglitch for some stuff in game (being hit by EMP), Keijiro made a great script.

Looking forward to this, i really enjoy yout devlogs Smiley

Logged

empika
Level 1
*



View Profile WWW
« Reply #121 on: May 15, 2017, 10:03:41 PM »

It's looking fantastic now. I used Fonstruct for designing font for my game too, neat little site indeed. I also use Kinoglitch for some stuff in game (being hit by EMP), Keijiro made a great script.

Yeah fontstruct is aces, highly recommended for anyone else that needs to quickly and easily create a nice pixel font Smiley

Kinoglitch is aces too! I made a small modification to the original source to allow the jitter effect to have chunky lines that would match my game resolution (i'm not rendering to a texture and then scaling up). My changes are up here: https://github.com/empika/KinoGlitch (specific commit https://github.com/empika/KinoGlitch/commit/b44d2dbcea87598ebe864e677ee53ca175df7ccb)

Looking forward to this, i really enjoy yout devlogs Smiley

I always wonder if they are kinda boring or not, so I'm glad you enjoy them. Thanks! Smiley
Logged

Fat Pug Studio
Level 2
**


View Profile WWW
« Reply #122 on: May 16, 2017, 12:49:28 AM »

Nice modification! Hand Clap

They're not boring, they are meaningful and interesting, keep them coming Smiley
Logged

empika
Level 1
*



View Profile WWW
« Reply #123 on: May 21, 2017, 09:31:55 PM »

Hey! What's good, everyone

Not a whole lot to show this week. The main things that got crossed off the todo list were:

Find a bunch of old megadrive sound effects to use as placeholders and pop those in game (this is still ongoing). I really like the old FM sound effects on the Megadrive/Genesis.

Refactor the way that items work. Previously I'd only pseudo coded items, so you could receive them from chests but they wouldn't actually do anything. I was hoping to avoid actually implementing items just yet as it's a bunch more work and maybe not necessary for this vertical slice. However, after doing a bunch of play testing it felt like the demo would be better for it, it's hard to get through without needing more data/mana. I did have some "vending machines" set up that instantly refill your health and data, but they felt really clunky, plus you can't use them in battle.
So now we have a new menu option to use items outside of battle, and a new option in battle to use items (although this battle code needs a big refactor, it's piggybacking o the magic system and is just really gross and hacky).

Here's another super exciting UI screenshot:




The next big task I took on this week was a refactor of the rendering system. Having refactored the UI to render nicely on tiny screens and look good when scaled up, it seemed like a good thing to do. You wouldn't be able to tell the game is actually rendered at native size and scaled using the cameras orthographic size, unless you look closely (not too closely) at the lighting.



If you look at this screenshot, you can see that the lighting is super smooth, and is being rendered at much higher resolution than the artwork.

I've seen quite a few tutorials on how to get pixel perfect gameplay but I went for my own weird approach as none of them really fit how Jack Move is set up. Here's a brief overview of how I've got it set up.

I have a bootstrap scene that sets up a bunch of stuff. The main object is the World Controller that handles input, loading new maps, showing the gui etc. The World Controller is a singleton and sticks around between scene loads. Nested under the World Controller I have a new "Render Stuff" object, this has new camera and ui canvas underneath it.



The canvas has a RawImage object on it. This is what we'll be rendering to using a simple material.

The important thing here is the PixelRenderer component. This sets up rendering on every scene load or when the resolution is changed. Here's the code: https://gist.github.com/empika/61bf4939635783c7e133c587465bd429

The main part of the code is the UpdateEverything function (a lot of things could all do with better names Tongue). Here we do a bunch of stuff...

...when I say source resolution, i mean the tiny version. Eg, the source resolution for 1280x720 might be 427x240.

* Get the camera we'll be rendering to (Just using GameObject.Find. It doesn't happen very often so we should be ok to do that here)
* Work out the source resolution (small res) we'll be rendering at (see below), and the scale we'll then be rendering that at.
* Create a new rendertexture and set it up
    * Most importantly here is setting the resolution and setting the filter mode to FilterMode.Point.
* Set the orthographic size of the camera we are rendering to (this should be 1/2 your source resolution.)
* Setting the main texture of the RawImage's material to the rendertexture we just created.
* Set the size of our RawImage to our source resolution
* Set the scale of our RawImage to our calculated scale

Most of the other stuff in this class is related to turning off the ui when a battle starts and other jack move specific bits. I guess the only other important thing is caching the screen width and height at the end of UpdateEverything. We can check against these cached values in update, if either one has changed then we update everything again to accommodate the new resolution.

Here's the result, note the chunky lighting as it now matches the resolution of the assets.



So, about calculating resolution and scale... I have a simple formula. Given a screens height and a target height we can work out the scale, and then the source resolution (our small one that we'll then scale up).

To work with the example I gave above, 1280x720... I have designed the UI around 320x240. To get our scale we take the height of the screen, 720 and divide it by 240, which neatly divides by 3, otherwise we would round down. Another example, 1920x1080, 1080 / 240 = 4.5, which we round down to 4.

That gives us our scale, which we can then use to workout the source resolution. 1280x720 @ 3x scale = 427x240. 1280x1024 @ 4x scale = 480x270.

Once we have our scales and target resolutions, we can set the rendering camera to use that orthographic height, recreate our rendertexture with the new size, set our UI image to the new size and then scale it up.

I think the main advantage of this approach is that there are never any cropping, we're always rendering at the same aspect ratio as our screen. And using the UI we don't have to mess around with planes and matching their scale to camera size and vice-versa. As long as we set our UI image to the same size as our render texture we can scale it up and down to fit the screen.

That's probably not the greatest explanation of all that, so let me know if you have any questions!

Oh, and this morning I already moved some of the in world UI to the gui layer. This means that it wont get smooshed into any fullscreen effects such as bloom or the battle transition. I think the only thing affected by this is the portals that link maps. I just had to recreate the direction arrow sprite as a UI element and then update it's screen position to track the in world position. They get placed as world objects so I can easily position them within the collider. You can see how the arrow is placed in world on the left. At runtime the renderer component gets switched off so only the UI version is displayed:



This week will mostly involve finishing up adding placeholder sound, a whole bunch of playtesting/qa and fixing all the stuff that comes out of that.

Wow, big update this week! Ok, think that's it!

Cheers
Logged

empika
Level 1
*



View Profile WWW
« Reply #124 on: May 25, 2017, 10:56:17 PM »

Heya

Early update this week as it's a public holiday here in taiwan on monday and tuesday, so I'm not sure how much work I'll be getting done.

Here's a pro tip... use a material for your UI element colours. Otherwise, when you need to change them, you'll have to go through every single UI element in order to to so! That's how I spent my entire day yesterday  Cry

This came about because I did some testing on a TV to see how it looks. The TV I used isn't super great though, so the colours are not quite as good as the monitor I use. The light and the dark greens I use in the UI are not contrasting enough, so it was really hard to tell when something was highlighted on or not. Thankfully, now I've moved everything over to using materials I can tweak the values and have it apply across the whole UI.

Other stuff I've done this week is:

  • Move all those portals I was talking about on monday, and check they are all in the right positions
  • Fix a bunch of cutscene stuff
  • Mostly finish adding placeholder sound effects to battles etc
  • Refactor the way cameras are initialised, so now I only have one camera that can handle rain + environmental sfx etc
  • Fix lots of small bugs that have come out of testing

Nothing super exciting i'm afraid!

Still got a tons of bugs from testing to fix, so that's the plan for the coming week.

Cheers
Logged

empika
Level 1
*



View Profile WWW
« Reply #125 on: June 05, 2017, 11:29:56 AM »

Hey everyone!

Back from Taiwan last night and feeling super jetlagged, so how about a ton of fancy battle gifs to start off with?!

Basic damage!




Heal!!




Portscan!!! (Reveal details about an enemy, hp, strengths/weaknesses etc)




Summon a new enemy!!!!




Attack up!!!!!




Electronic fireball!!!!!!



I had Joe working again this week, and he got all these fx finished. I spent most of the day today popping those in to the game Smiley

There's probably a few of Gary's character animations that I've not shown before too. The whistling call of the cyber-doggie summon and cyber doggies vicious bite!

Gary has been working on a bunch of Noa's in-world animations too, though we're still tweaking and finishing those so perhaps I'll show them in the next update.

Other than that, this past week has been playtesting, fixing bugs, adding missing soundfx etc.

Oh! I also started on writing my own texture packing program. This was mainly procrastination from fixing bugs, but also because there are a few features I'd really like in TexturePacker and my needs are pretty simple. Mainly,  I mostly work with just rectangular sprites and I'd like the ability to just set a cell size, and be able to anchor the sprites either center/top/bottom/left/right etc, and also give them an offset.
I started off using electron to create a cross platform app using javascript, I'll see how far I get. It's not high on my list of priorities so will probs sit on the back burner for a while.

Think that's about it Smiley

Logged

empika
Level 1
*



View Profile WWW
« Reply #126 on: June 12, 2017, 11:34:53 AM »

Hey folks,

Not a whole lot to show this week. I've mostly been fixing bugs and getting a build ready to send to some friends. It's gotten to the point where I think it's getting good, but need some more eyeballs on it!

This morning I worked up a quick flash effect. I wanted some way to add a bit more impact to damage hits and things.

The first version was a bit intense:



This version using just a screen border is much nicer, although the amount of flashes and colour needs to be experimented with Smiley



Cheers!


Logged

empika
Level 1
*



View Profile WWW
« Reply #127 on: June 25, 2017, 10:22:36 AM »

Hey everyone,

I've been super busy over the last couple of week, both with the game and organising an event that I run called Games by the Sea. It's a fun party with drinks and multiplayer/party games, held each year whilst the Develop conference is on in my home town of Brighton. So if you're attending Develop, you should come along! We have a bunch of free tickets, with the next batch going up on Friday!

As for Jack Move, lots has been going on. I've got a ton of new npc and player animations from Gary and Joe. The world is starting to feel a bit more alive with all these npcs.

On the code side of things, I made a neat little cutscene action so that you can give an actor a target and they will face the correct direction, ie, have the correct idle or talking animation play. This has also been added to the Dialog action, which means I don't really have to manually set the talk and post-dialog idle each time unless it specifically needs it.





I've tweaked a ton of stuff like battle timing and screenshake amounts. These things (especially screenshake) could be tweaked forever, so I'll have to stop at some point. I've also been implementing tweaks and fixes from a bunch of feedback I've got after I sent out a build a couple of weeks ago. Some of this is pretty mundane like spelling mistakes and things not getting triggered correctly in cutscenes. But other stuff has had a major impact on the game, my favourite being the Cache move that is available in battle...

Previously the Cache move acted as a basic defend. Once activated you would take 25% (with a random chance of 30%) less damage. However, some feedback that I got was that it was quite difficult to balance changing up your loadout (more about loadout and software in this previous post) and not getting massacred by enemies. This is something that I've actually been thinking about for a long time. With only one party member it can be quite difficult to time your loadout swap if you don't also have enough ram to keep your regenerative software. The playtesters suggestion was that Cache should do as it's name suggests (and what they expected in the first place) and delay you current turn so that next time you get two turns in a row.
I thought it was going to be super hard to implement in my battle engine, but turns out it only took twenty minutes :D The outcome is actually really good, with a nice bit of risk and reward. Using the turn order list you can time when you want to Cache, usually when only one or two enemies will attack between now and your next turn, you still take the damage but are still defending so you'll take a bit less. Then next turn, you can swap out your software and use it within what is essentially one go, with no wait in between.



Not sure if that's a great description, but it definitely solves the problem :D

Still more tweaks and fixing to do this week, onwards and upwards!
Logged

SolarLune
Level 10
*****


It's been eons


View Profile WWW
« Reply #128 on: June 26, 2017, 09:18:11 AM »

Very cool! I really like the art style, again. It all seems to be coming together well.

Cache sounds like a nice ability that has a few strategic uses, so good work on that front, too.

I was thinking that in regards to your NPC animations, you might be able to get more bang for your buck, so to speak, by having the NPCs be less "static". Like, less frames of animation with more interesting poses > more frames of animation in less interesting poses. Having characters seated, leaning against the wall, crouching, playing with objects - you could add more to the atmosphere with characters, even with fewer actual animation frames, rather than having a larger number of characters with more frames all moving in the same way (bobbing up and down).
Logged

empika
Level 1
*



View Profile WWW
« Reply #129 on: June 27, 2017, 03:26:29 AM »

Very cool! I really like the art style, again. It all seems to be coming together well.

Cache sounds like a nice ability that has a few strategic uses, so good work on that front, too.

Thanks!

I was thinking that in regards to your NPC animations, you might be able to get more bang for your buck, so to speak, by having the NPCs be less "static". Like, less frames of animation with more interesting poses > more frames of animation in less interesting poses. Having characters seated, leaning against the wall, crouching, playing with objects - you could add more to the atmosphere with characters, even with fewer actual animation frames, rather than having a larger number of characters with more frames all moving in the same way (bobbing up and down).

Thanks for the feedback, that's really useful. I think once we get more time we'll revisit these animations to give them a bit more character. For the moment I just wanted to get something in the game that's not just a single static frame but wouldn't take a huge amount of time to produce. Bobbing up and down is a lot easier than an idle with a complicated pose or more subtle animation.

For example, as Uncle Guin is a main character I chose to put more effort into getting him animated. His animations are much more naturalistic, no bobbing up and down, smoking a cigarette, swirling his drink etc. I hope to bring this level of animation to all the npcs in the future, sadly I just don't have the budget at the moment.



Cheers!
Logged

empika
Level 1
*



View Profile WWW
« Reply #130 on: July 06, 2017, 05:04:41 AM »

Hey champs!

Been busy working on getting Jack Move ready to show to people during the Develop conference next week (as well as organising the Games by the Sea party), it's been a super busy couple of weeks of getting the last bits of art in to the demo, fixing bugs and making a new trailer...





Also, I finally got round to updating the first post of this thread Smiley
Logged

Xorglord
Level 0
***



View Profile WWW
« Reply #131 on: July 06, 2017, 07:55:09 AM »

This game looks so awesome. The art / animations & world all look incredibly smooth. Great work!
Logged

Jasmine
Level 5
*****

Boop


View Profile WWW
« Reply #132 on: July 06, 2017, 01:59:19 PM »

Man, this game has come a long way, and it looks faaaantastic!
Logged

xix
Level 5
*****


View Profile
« Reply #133 on: July 06, 2017, 03:06:01 PM »

The animations are looking fantastic!
Logged


Get the demo itch.io
Follow @lunarsignals on twitter
zede05
Level 2
**



View Profile WWW
« Reply #134 on: July 06, 2017, 09:12:15 PM »

So good! Really nice progress!
Logged

justincavenagh
Level 0
**


View Profile WWW
« Reply #135 on: July 09, 2017, 03:56:23 AM »

Hey champs!

Been busy working on getting Jack Move ready to show to people during the Develop conference next week (as well as organising the Games by the Sea party), it's been a super busy couple of weeks of getting the last bits of art in to the demo, fixing bugs and making a new trailer...





Also, I finally got round to updating the first post of this thread Smiley

Wow! great work, really dig the overall aesthetic. The music in the trailers is really well done as well. Whos the composer for that one?
Logged

empika
Level 1
*



View Profile WWW
« Reply #136 on: July 13, 2017, 01:03:16 AM »

Thanks everyone Smiley

Wow! great work, really dig the overall aesthetic. The music in the trailers is really well done as well. Whos the composer for that one?

The music for the trailer is by Fracture, who I'm pleased to say will be doing all the music for the game Smiley
Logged

empika
Level 1
*



View Profile WWW
« Reply #137 on: July 22, 2017, 08:04:33 AM »

Hey folks,

Been a hectic couple of weeks, what with Develop etc. But slowly getting back into the swing of development.

Did some playtesting and bits so I've been fixing some of the issue that have come up from feedback.

Firstly, I've added input device independent icons to a bunch of dialog to make tutorials a bit easier to understand:





I used the excellent TextPic in the UI-Extensions project https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/wiki/Controls/TextPic. I had to change a bunch of stuff to get it to swap out images at runtime, but it seems to be working well Smiley

I also added a context sensitive thing to show what inputs are available. At some point I'll add an option to turn this on or off.



Lastly, people were having trouble understanding what they needed to do. Lot's of people just skip past any dialog stuff and then miss what their goal is. So I added a little objective system that tells you exactly what you need to do. It pops up a little thing when you receive the objective, and they are all viewable in the menu too.





This next week I'll be concentrating on making a tutorial for the battles, hopefully this will be quite simple. I'd really rather not over tutorialise things, but if I can reduce the friction some players are encountering then it will be better for everyone Smiley

Till next time, x
« Last Edit: August 15, 2017, 07:33:04 AM by empika » Logged

empika
Level 1
*



View Profile WWW
« Reply #138 on: August 15, 2017, 08:37:13 AM »

Hey folks, been a while!

I've mostly spent the last few weeks working on pitch and budget stuff, which has been fun, if not a challenge as they're not my strongest skills.

I've also been working on a lot of small fixes and improvements, a battle simple tutorial (as promised!) and making cutscene skippable.

A nice little touch I've added is a slight scroll-in when battles start (after Joe suggested it). It's quite subtle, but gives the battle a bit more depth:



Other small things I've worked on include adding a button prompt to dialog boxes, making all the air-con units more 3d (rather than a flat sprite) and general tweaks to maps and lighting and things.

The next big thing was the battle tutorial. This is pretty simple and just presents the player with a bunch of dialogs to explain things. I might revisit this at some point to include a turn by turn tutorial but that would involve some battle code refactoring that I don't have time for at the moment. I'm hoping this should be enough.







Lastly I worked on skipping cutscenes, this wasn't as tricky as I had thought, but will mean a bit more content work in the future.

Cutscenes a comprised of a list of frames, and each frame has a list of actions, these are stored as just a hierarchy of game objects. The cutscene controller steps through each frame, plays all of that frames actions, waits for them to complete and then steps to the next frame. Skipping a cutscene halfway through could leave things in a weird state if control was handed back to the player immediately.

The first thing I did was add a "cancel cutscene" hook to each action that would require it. Then I added a second list of frames and a little bit of scripting to put the original frames under their own object so we're not mixing normal frames and skip frames together. Now when the cutscene is canceled we fade out and run the skip frames, then fade back in. Super simple! The end result is that anything like a moving character can have it's action cancelled, and a skip frame and accompanying action that sets the character to it's final position and sets the correct (usual idle) animation, so everything is set up for control to be handed back to the player.

This might sound super simple, and the initial implementation was. However, things like dialogs and UI dependant actions caused a lot more pain than I was expecting. Luckily this was a good time to tidy up some of that code Smiley

That's about it. Till next time...
« Last Edit: September 22, 2017, 07:10:36 AM by empika » Logged

thefoolishbrave
Level 2
**



View Profile WWW
« Reply #139 on: August 15, 2017, 09:13:22 AM »

come a long way man, and looking great! :D
Logged

Pages: 1 ... 5 6 [7] 8 9 ... 15
Print
Jump to:  

Theme orange-lt created by panic