31

There's no "best" way. The game design in your case is intimately connected with the UI design. However, given your setup, I'll lay out (haha get it) some advice. You're right about the lower-level spells being on the most convenient keys can be a problem. I would recommend something along the lines of Diablo 2 and 3 where you assign spells to keys in an ...


23

Almo's advise to allow the player to assign spells to hotkeys according to their own preference is good. You can increase the number of spell slots if you allow modifier keys like Ctrl and Shift to access additional hotkey bars (but keep in mind that when the player has one hand on the keyboard in the typical WASD position and the other hand on the mouse, ...


13

You could express it in terms of "attacks per second" or "attack rate". If the per-second numbers are too small to be convenient for the player to compare, you could just scale them by an arbitrary constant - e.g. 0.5 attacks per second (1 attack per 2 seconds) could be multiplied by 10 or 100 and displayed as "5" or "50". The way you'd code it would be ...


13

The elements you can use to present emotions I can think of are: Visual character animations (walking upright, bowed or hobbling, arms near the body when cold) especially facial expressions textures or decals (injury, blood, scratches) particles (sweat, blood) Gameplay player abilities (movement speed, jumps, reaction time, attack strength) body ...


12

Here's a strategy for making arbitrarily bent UI: we'll render our UI into a texture (in realtime, not as a baking step), and then map that texture onto whatever mesh we want. Here's how I made this spherical example: Create a RenderTexture to store the UI. This needs to be quite high-res to get text looking crisp. I used 4096x2048 because I intend to map ...


12

Alright my dude. Welcome to the hell that is layout groups. Here's a few things you'll need to know first: If nothing is sizing the object, the layout group will not work as you expect (in fact it appears the opposite). Things that size the object include LayoutElement and ContentSizeFitter. For whatever reason the default rect transform sizings make the ...


10

Immediate mode in OpenGL consists of glBegin/glEnd calls, with one or more glVertex calls (the minimum legal number depending on the mode param of your glBegin call), and optionally other vertex attribute specification calls (glColor, glTexCoord, etc), between them. glBegin instructs the GL driver that you're starting to draw a point, line or polygon. ...


9

In addition to the old classic, coming from fighter games - key combos. The better the spell, the longer the combo. This has the added benefit of feeling like casting, and a high level spell actually requires a bit more mental power. If the mouse is an option then Legend of Grimrock has a nice idea - a 4x4 or 5x5 square board (can't remember). The combos ...


8

The item you're talking about would be referred to as a progress bar: In this case, the progress bar is animated to fill up over a small amount of time. When completely full, the progress bar matches the highest score for that category. So, where 4975 is equal to 100% of the bar being full, 2000 is 2000/4975 = .40 or 40% full, as you can see in your ...


7

Let's call the content you want to scroll content and the viewable area of that content viewPort. Your scrollbars will be at the sides of the viewport. The first step is to create a mask such that only parts within content which intersect with viewPort are visible. I can't answer exactly how to do this because it depends on your language and technologies. ...


7

There are many reasons a designer/programmer would want to draw the crosshair on the exact center of screen, or a little lower. A hybrid system may even be implemented, taking advantage of the properties of these two systems in a game fich of different weapons, vehicles, interactive spots, and so on. Drawing the crosshair centered or lowered can depend on ...


6

The answer by danijar already has some good ideas, but I have another one. Unless you want to go for a silent protagonist, you could have the player-character monologue about feelings of discomfort. First just occasionally ("I could need a snack right now") and then more frequent and demanding ("Hunger! I'm starving! Food! Please!"). The player will feel ...


6

I don't see why you couldn't give some less subtle hints. Something like this: Seems like an obvious enough encoding. You could remove the keys from the levels that have already been completed. Of course you can tune the prominence of the keys into your desired solution. They could be the same scale as the locks behind the numbers as well. Just some food ...


6

Take a look at Awesomium. I have integrated it to SDL before and the process was fast. The biggest thing you have to deal with is translating SDL events to Awesomium. Otherwise the rendering is really easy, you can just query pixel data from Awesomium into an SDL surface IIRC, and then render that to your game.


6

Hiding the player-character's (PCs) health actually got quite common in the FPS genre. Instead of showing a health number on the bottom of the screen, they represent the health state of the PC with a meta-interface. When the player is hurt, the screen gets a red tint or gets splattered with blood. This represent the pain the PC is experiencing. The idea ...


5

A simple piece to make your Tetris puzzle look better is to go with the original design scheme tetris used: Seperate the 7 colours that you will use (these don't need to stay close to the originals at all but may help with attracting those that recognize it's classic colour scheme.) Giving yourself a colour pallette before you have even made your set of ...


5

I've been trying to figure out in what ways this can be a performance problem. I have been unable to replicate the problem. Yet, let us see what I can do. First a couple notes on what happens internally: Godot timer will internally use the equivalent of _process or _physics_process depending on process_mode and will update time_left using delta. Which ...


4

First of all: I'm no designer either, my games usually consist of "programmer art". ;) Probably the quickest escape, congusbongus already noted in the comments: Get a designer. However, this most likely will cost you some money unless you know someone or got someone really interested in the game, etc. But apart from that, there are some simple things you ...


4

I don't know the exact approach used in games like Diablo, but this problem is actually interesting enough to be given its own name (Automatic Label Placement), for which the general problem is NP-Hard. This means that there's copious amounts of material online, like this paper for example. It's a problem that occurs a lot in map labelling, so you may find ...


4

Humans are usually far better at spotting something of a different color than something of a different shape. Here is an example of an image with some blue pentagons: Among them is a red pentagon and a blue square. Which one do you spot first? In most RTS games it is usually far more important to be able to tell what faction something belongs to than what ...


4

First you need to render you scene to a Frame Buffer Object (here is a good course on FBO: https://learnopengl.com/#!Advanced-OpenGL/Framebuffers) After that you will end up with a Texture (of type GLuint) containing your rendered scene. To print it into Dear imGUI, just call a Draw Image Command. EDIT New (simpler) Example: ImGui::Begin("GameWindow&...


4

Make two batches, one for the buttons (texture) and one for the labels (bitmap font). That is also why you normally batch draw-calls. Group the things using the same resources to reduce draw calls and expensive unbinding/binding of textures and shader-programs.


4

Here is a quick proof of concept of how I would do this: Wrap each text bubble in another object which has the width of the whole chat box. The ChatBox has a Vertical Layout Group with "Force Child Expand" on. This causes the "Wrapper" child objects to always have the width of the full chat box. The "Wrapper" child objects is solely responsible for ...


3

When you resize your game resolution you need to update every single rectangle in your game (every button, etc) and multiply it by a proper scale, so that the "hitboxes" would work, which would be a lot of work. So, a smarter way of achieving the same result is simply by multiplying your mouse position by a Vector2 scale = new Vector2(originalWidth / width, ...


3

A scroll bar is like a 2D camera control that controls the scroll area's viewport's contents. I will assume you know how to render your gui in its entirety. I also strongly advice against making a gui that is complex unless it truly contributes to ux. This could lead to a mediocre gaming experience. I also strongly urge you to use a UI library. In abstract ...


3

Based on your description, you might have better luck using a Text Mesh, which will be treated more in line with the other Components that the rest of Unity uses (rather than delving into the Canvas system). You could create GameObjects with Text Mesh components, and make them children of the enemies, with the y-component of the transform offest so they'd ...


3

I have implemented Android-like toast for my project and decided to share it with you! Enjoy: Toast LibGDX (GitHub). Easy to use: Include Toast in your LibGDX project Create ToastFactory for your toasts (using Builder): Toast.ToastFactory toastFactory = new Toast.ToastFactory.Builder() .font(font) .build(); Create toast: Toast toast = ...


3

Use colours for team identification and shapes and sizes for individual unit type differentiation. This means enemies and friendlies are instantly distinguishable, and unit types look distinct whilst having a degree of consistency from team to team. e.g red triangle is an angry enemy beserker, blue square is a happy allied collector.


Only top voted, non community-wiki answers of a minimum length are eligible