Amateur Gamedev General ~ /agdg/ +

I can't think of good edition edition

Resources
>>>/agdg/
>>>/vm/

Other urls found in this thread:

itch.io/jam/gbjam-5
digitalocean.com/
seanmurray.toddhoward.sexy/
pastebin.com/dsQpQR60
pastebin.com/74jKWLmy
youtube.com/watch?v=JjDsP5n2kSM
fabiensanglard.net/quake2/index.php
pastebin.com/iyzm9bxi
redblobgames.com/pathfinding/a-star/introduction.html
redblobgames.com/pathfinding/a-star/implementation.html#csharp
pastebin.com/2BYeUEZZ
blogs.unity3d.com/ru/2015/02/06/extending-unity-5-rendering-pipeline-command-buffers/
pastebin.com/cbZKNKPn
pastebin.com/EGPP2Pnu
pastebin.com/SSnXPmgZ
pastebin.com/86AT9SD8
pastebin.com/tTAp8zjZ
pastebin.com/iJBczWRQ
pastebin.com/w6xZ6K5F
pastebin.com/xy87D5yp
pastebin.com/qKUADJXX
pastebin.com/utmN7keG
pastebin.com/S12dHsu1
twitter.com/SFWRedditGifs

Tell me /agdg/, what do you need to do in order to become a programming wizard?

Spurdo Edition?

From the old thread:


And in Doom the sliding effect is relative easy to control even when the always run mode is off. It just feels wrong when the sliding last quite a while when the movement is relative slow.

mhm my bad, for me I find it hard to tell if the acceleration/speed is alright with a long lasting sliding effect.


mhm right the sliding isn't so much serve as it was in 0.6.6, through I didn't said you should remove the sliding effect completely.

To recap: The sliding effect needs to be more manageable, especially on slow speed. When the player runs fast then it would be ok but not when the player is moving slowly.

Well is it for you a option making the player physic editable via the config file?
I will try to edit it on my own but I cannot do it currently when it is hardcoded.

Not actually that impressive if you understand how that game's netcode works.

What it essentially sends over is a copy of the gamestate once, and then only the inputs off the players. After that, the clients will have to simulate their own game completely, and no information about the gamestate needs to be communicated.

This means that, if you're just starting out on a new map (which would be small in size), have a couple hundred players connect, then after everyone downloads it, the server becomes a simply echo server that echos player commands to everyone on the server.
If the requirement to join mid-game was dropped, then it could easily run on a potato.


Factorio did do a very good job in keeping the game optimized though. It's kind of disgusting how most games these days put zero effort into making stuff run fast.

Hitler was right about there being a master race. He was just wrong about it not being the slavs.

Adressing to the Sigma Engine dev.
Are you sure these keys:

in_forward 130
in_backward 131
in_moveleft 132
in_moveright 133

are for the movement? I rebinded mine into that.

in_forward 133
in_backward 132
in_moveleft 131
in_moveright 130

And all it causes the left arrow to view to the left and the right arrow viewing to the right, the up and down arrow does nuffin.

am i yandev yet

You are self-aware, you can't be Yandev.

yandev is actually a huge inspiration to me. I've found myself following the Linux kernel style guide and writing better, easier to read, and more condensed code just to not be not be another yandev.

I'm pretty happy with this I'm glad i finally got this done the weekend is the only time I can actually do some real work

I dunno what the deal is with the weird flickering but its definitely not like that in game, must be some obs fuckery

So what happened with yandev anyway? Did the shitposters finally get to him and all of a sudden he lost it or what?

yandev is anthony burch of coding

even if you make games in the games factory, you're still not yandev

Is his coding skill comparable to pajeets?

Yeah, I can create some cvars for all the physics constants, it just takes a little bit for me to do that.

I cant do a lot of gamedev until later tonight so I will try doing that then.

by the way, dbg_draw_accel 1 and dbg_draw_vel 1 will show your accel and velocity on the screen. change that to 2 to look at the seperate components.


sorry, this is a problem where I have the game default bind the look commands to the arrow keys. I also forgot to make it rebind the keys from the config file. I fixed this bug just now, so you will be able to save your controls in config.cfg in the next version. Thanks for pointing that bug out.

Try these settings by typing it in manually:

in_lookleft 0
in_lookright 0
in_forward 130
in_backward 131
in_moveleft 132
in_moveright 133

It should unbind the look commands so that it runs correctly.

if
if
if
else
else
else

also saves data to registry

Good to hear it.

mhm at least I can open the console by pressing shift+^

t. Goyman keyboard user

Also the alt-tab bug is still persisting (as in several keys get ignored)

This doesn't look good.
I hate it when those developers do this shit, it only causes issues and makes it multi platform incompatible

huh, doesn't it stop locking the mouse when you alt-tab? Do you mean that the keyboard isnt working right when the program is in the background?

Maybe its your german keyboard, but I wouldn't know. I am only using the winAPI keyboard state functions to get keyboard input.

itch.io/jam/gbjam-5

Shilling for this because I took part last year and had tons of fun.
I hope it'll spur my productivity a bit.

He decided that he wanted to appeal to tumblr and reddit rather than take any more criticism from Holla Forums.


If you were self taught, think back to that time when you knew about nestled if statements and if else chains, but hadn't found out or fully grasped any way to get that functionality without relying on overly large if else chains or too many nestled if statements. That's Yandev. He is stuck being able to do what he wants but not knowing how, or not wanting to take the time, to do it well or elegantly.

hi

Well when I am alt-tabbing from another program and back to your game no keyboard input works and I can only exit the game by pressing the Esc button.

Viewing around via the mouse still works.

When I run other games via Wine alt-tabbing works and doesn't bug out stuff.

If that bug doesn't happen to you at all then it must be something related to Linux and/or Wine then. As Wine is not that stable yet.

t. linux user

(checked)
Well that explains it, thanks.

people have a bit of trouble running my game on wine or other compatibility layers. a big issue is usually my use of raw mouse input, which isn't implemented on all of those layers.

I cant program for compatibility layers, but I can port the game to Linux when its done.

(checked)

That would be great.

Well that was a an experience, but at least have a working lua server now.

How does my laser beam look, friends?

Looks a bit thin and flickery to me.

Looks like a laser pointer, which could be good or bad depending on what you're going for. Nice glow effects though.

Looks fine to me. Can you show us it destroying something? Thin lines of destruction are unusually satisfying.

Yeah i'll show some destruction very soon!


I agree it might be just a tad too thin.

This kind of reminds me of starsector and endless sky

Or ev nova

You can't fool me, that's a Super Soaker

hey whats up 2dolla you cuck

...

There are plenty of varieties, too. Poking pinpoint holes in things, cutting things in half, underwhelming lines that just make shit on the receiving explode, presumably by damaging some dangerous components.

When it's on a turret and spinning freely, it's giving me more of a low-powered ballistic defense vibe than one of an offensive weapon.

He made a poll about if he should remove upskirt-inventory, the poll was overwhelmingly no, keep it, and then he said he was removing it anyway. People called him a cuck, he sperged out, and then left for Reddit because they're always nice to him.

new hitsparks, what do you guys think? Someone mentioned it looks like the sword's glancing off the monster harmlessly

It does kinda look like it's bouncing of their armor
Maybe you should add some blood to the effect

looks nice but doesn't have any impact. the similarly colored straight on hit is good though.

When you point it out I can see it. As far as hit effects go, if it is hurting the enemy it should be apparent that it is hurting the enemy and if it isn't hurting the enemy it should be apparent it isn't hurting the enemy.
The blood effects you have work really well for this. Stagger animations or flashing the enemy sprite a different color for a frame or two also work if you don't think blood makes sense for an enemy.

I guess I could back for an edited version of the old slashes but these sparks from Knights of the round are really nice to me.

Damn it

it's hammer time
gonna try and make ranged attacks work later
i also sort of got the units to avoid each other by giving them random avoidance priority, till now it was always the same

Hahaha oh fuck now i can't unsee it.


I wish my game was even half as cool as starsector.

dropped

well i'm trying to base it on age of empires 2
spears there just give bonus damage against cavalry
besides, there's nothing really stopping the hammer guys from just walking through the spears at the moment

alright, how's this
spears do 20 damage, and have 3 times the range of hammers, but they attack twice as slow. also spearmen stay in one spot, even if they have an enemy
so spears can attack from behind a line of troops
so if the hammers were to fight spears formed in 2-3 lines, the spears would win
but if the hammers were to flank the spears, the spears would lose
as you can see in vid related, in the first fight the hammers lose, because the spears can attack with all their troops from behind the front lines, while in the second fight, the hammers win since only some of the spears are attacking

bretty good

Looks great.

You should add a unit counter for both sides, if only just for debugging purposes.

This is one of the more delicious things I' ve seen on /agdg/ this month. Whatever you do, keep this feature. Also, consider implementing more similar things. Equipment-dependent inertia where a units turn rate is affected by what they're carrying, charging cavalry (or regular units) getting skewered on lowered spears, anything where unit behavor or combat result is affected by multiple state variable, not just base damage modified by armor and class weakness.

i'm trying to do that, but for whatever reason, when i instantiate text and parent it to the canvas, the text isn't visible
i tried putting text there before i start playing, and when the game starts, it's visible, but any instantiated text isn't there
i tried messing with the font and scale and nothing happens
i even copied the pre-play text onto the prefab, and when i started i still get the same results
everything works, aside from the fact that the text is invisible

and the code if it's of any use
public RectTransform canvas; public GameObject TextPrefab; [System.Serializable] public class IngameFaction { public Faction template; public List units = new List(); int id = 0; public IngameFaction(Faction temp, int _id) { template = temp; id = _id; if (Instance != null) { GameObject txt = Instantiate(Instance.TextPrefab); text = txt.GetComponent(); text.transform.SetParent(Instance.canvas); text.color = template.color; text.text = template.name + ": " + units.Count + " units"; } } public Text text; } bool Contains(Faction temp) { for (int i = 0; i < factions.Count; i++) { if (factions[i].template == temp) { return true; } } return false; } static int FindFac(Faction temp) { for (int i = 0; i < Instance.factions.Count; i++) { if (Instance.factions[i].template == temp) { return i; } } return 0; } List factions = new List(); void Start() { for (int i = 0; i < UnitSelection.Instance.units.Count; i++) { Unit unit = UnitSelection.Instance.units[i]; Faction fac = unit.faction; if (Contains(fac) == false) { factions.Add(new IngameFaction(fac, factions.Count)); } factions[FindFac(fac)].units.Add(unit); } for(int i=0;i

oh, the alpha value for the text color was 0 for some reason
anyways, i also had the idea to get the spearmen to walk towards the enemy, but stay at a distance once they're close enough
but then i had to rebalance the hammers, and with the minimum changes, they either demolish the spears, or lose no matter the plan
so for the moment spears are just gonna stand still
also, turns out that splitting up the hammers is a bad idea, considering that spears work better in large numbers

Factorio was made by Slavs too? Jesus…

How do you get a server to run your epic MMORPG on?

I want to make some kind of multiplayer game similar to diep.io, but I have nowhere to put it to.

I've tried to test that kind of thing in the past at home but my upload is so crippled by my ISP that it's basically impossible to do anything with other people.

You get one by paying money to a company that offers servers. How new to the internet are you?

I'm asking what's the recommended place and way to get one.

How much are you willing to pay?

Well for all I know it could cost anything from 50 cents to 500 dollars per month so I don't know.

I just need something simple to test around with for now, probably with a few people from Holla Forums when I get something going.

digitalocean.com/ Is great for testing. Also search for promo codes before you charge your account.

i think i figured out how to work the formations during battle
each unit that has to stay in line, can only walk a certain distance away from his last post, in the direction of the enemy
so in this case the spears can only go about 6 meters away from their post
with the usual example, hammers lose when charging the spears from the front, they win if they flank

i thought you had nailed it on the one with the spears keeping their feet planted. maybe use something like that if you're telling them to move in during a fight, but having them stand fast looked proper.

i dunno, this way they're still more or less in formation, but they get more units to attack

It didn't seem to translate into more combat effectiveness, more were alive after the frontal attack when they weren't trying to shuffle around. But it's mainly the looks, it's more erratic instead of a sturdy formation of seasoned soldiers. maniacs with comically large hammers charging up does look fitting though

Breddy gud. A little odd for the glow to keep going after the beam itself has been blocked though.

that's because i'm constantly fucking with the damage of the spear, trying to balance it out
here's a comparison of standing still/moving on a leash with the same damage
it could just be random, but i think moving gives better results, simply since a few more troops can actually reach their target

Here's my contribution to the thread. Been working on this for 3 years now.

Looks cool. But are all modules going to be flat circles?

Is this going to be like Spacebase DF but not made by a money sink from SanFran?

We went through a lot of iterations on module design and shapes. We decided on circles… also you can't really see it in the previous shot, but we put a lot of thought into using vertical space.

Never played Spacebase DF. But hopefully, it won't be like anything else! I mean, we're still an AI simulation on a space station… but our focus areas are pretty novel.

Congratulations, you've made a game about raising hamsters

Actually, we like to think of them as ants. :)

Will there be only such shapes available or is there a plan to change it a bit in the future?

tbh it looks a little bit monotone that way.

...

added healthbars to the bottom menu

also, am i yandev yet?
for (int i = 0; i < Instance.currentOptions.Count; i++) { TroopOption cur = Instance.currentOptions[i]; GameObject newButton = Instantiate(Instance.ButtonPrefab) as GameObject; Transform trans = newButton.transform; trans.SetParent(Instance.ButtonPanel); switch (cur.code) { case KeyCode.Q: newButton.transform.localPosition = new Vector3(-60, 30, 0); break; case KeyCode.W: newButton.transform.localPosition = new Vector3(-30, 30, 0); break; case KeyCode.E: newButton.transform.localPosition = new Vector3(0, 30, 0); break; case KeyCode.R: newButton.transform.localPosition = new Vector3(30, 30, 0); break; case KeyCode.T: newButton.transform.localPosition = new Vector3(60, 30, 0); break; case KeyCode.A: newButton.transform.localPosition = new Vector3(-60, 0, 0); break; case KeyCode.S: newButton.transform.localPosition = new Vector3(-30, 0, 0); break; case KeyCode.D: newButton.transform.localPosition = new Vector3(0, 0, 0); break; case KeyCode.F: newButton.transform.localPosition = new Vector3(30, 0, 0); break; case KeyCode.G: newButton.transform.localPosition = new Vector3(60, 0, 0); break; case KeyCode.Z: newButton.transform.localPosition = new Vector3(-60, -30, 0); break; case KeyCode.X: newButton.transform.localPosition = new Vector3(-30, -30, 0); break; case KeyCode.C: newButton.transform.localPosition = new Vector3(0, -30, 0); break; case KeyCode.V: newButton.transform.localPosition = new Vector3(30, -30, 0); break; case KeyCode.B: newButton.transform.localPosition = new Vector3(60, -30, 0); break; } Button but = newButton.GetComponent(); but.GetComponent().sprite = cur.icon; but.onClick.AddListener(cur.Function); } }

Yeah we want to do all sorts of different shapes. Point is for the player to make his fantasy station, not to make "ours" if you know what I mean.

But we just don't have the art bandwidth until after we sell some copies to do more than one "base style." Later we can add more. This is the first style we chose to go with, for various reasons.

(checked)
Very well, sounds neato.

No. There is really no other good option for input.
Someone is welcome to correct me with an example.

What are you going to do so stacking modules in tall cylinders right next to each other won't be the optimal layout? Enviromental hazards? Heat dissipation?

Thx!

If you are curious, our development focus is on the character personality/AI stuff, deep gameplay, a bunch of systems we do totally different. But it's hard to get screenshots of that.

We had a Game Jam with a couple friends a bit over a week ago and this is what we created:
seanmurray.toddhoward.sexy/

It's basically a parody of No Man's Sky, I thought people here might like it

It was in Unity because we had some earlier experience with it and didn't have much time to properly develop it

The point with module construction was to have strategies and counter-strategies, so nothing was optimal. I think one of the failings of traditional 4x games is that you always need to expand, even past the point of expansion being fun or the GUI being able to handle your 100 planets. So there is one optimal strategy. This is analogous to most base building games.

So instead we wanted a death star and small science station to be equally viable (just with different pros and cons). And everything in between.

So as one example, station security gameplay encourages you to have "wings" (so you can isolate areas, create choke points, etc). An opposing force is the power system which wants you to have densely packed modules for efficiency. Or keeping crew quarters close to where the jobs are (so they waste less time traveling). Same with cafeteria, etc.

As for stacking Cylinders, it's not a great defensive setup for being invaded. Also having a reactor blow up, fires spreading, pathogens spreading. But it can good for efficiency (depending on how you stack it).

had fun for 2 minutes /10

Originally one slav, although apparently it's now more than one.


Yandev doesn't know how switch cases work, so no.
If you want to be an anti-yandev, make a list of vector3s and use the keycode to look up which vector3 to get. That's lot less code, especially since you can fill said array with two for loops in this case, and might be faster too micro-optimisations, lol since it finds the value in one lookup instead of multiple comparisons, assuming from the for loop that this runs multiple times and thus would keep the list in cache. Not sure that last bit would work out in Unity though.

I was playing Twilight Princess today and I noticed that the terrain was actually displaced 3d meshes as opposed to height maps, resulting in a much more modual approach to the geographical geometry, such as over-arching terrains and steep as fuck cliffs.

Is there actually any reason to use height map terrains? Seems to me that it's harder to optimize and usually only encourages bad world design like Skyrim. I like the lazy approach to dividing up the sections of the overworld by canyons in TP, something that's hard to pull off using height maps without wasting a lot of space.

Lighter on the processor/GPU than 3d meshes, given the same visual quality. Especially for large open world stuff. Less technical/schedule risk. Easier to hire cheap artists to paint terrain than experienced coders/tech artists who can make something modular. Basically, the things AAA producers care about.

I have bad news for you.

Why do you hate your (an my) eyes so much, user?

It's optimized for my own awful eyes.

I don't actually have bread on hand to compare, is this shit too large?

That bread is YUGE!

here's some reference video

better?

...

(checked)
xaxaxaxaxa cyka

you think thats bad take a look at this.

enum FunctionType
{
// function names go here
NON_FUNCTION = - 1,
ORDER_FUNCTION = 0,
FUNCTION1 = 4,
FUNCTION2 = 5,
FUNCTION3 = 6,
FUNCTION4 = 7,
FUNCTION5 = 8,
FUNCTION6 = 9,
FUNCTION7 = 10,
FUNCTION8 = 11,
FUNCTION9 = 12,
FUNCTION10 = 13,
FUNCTION11 = 14,
FUNCTION12 = 15,
FUNCTION13 = 16,
FUNCTION14 = 17,
FUNCTION15 = 18,
FUNCTION16 = 19,
CONTROL_ALL = 20,
SELECT_TYPE = 21,
SELECT = 22,
MOVE_CAMERA = 24,
PAN_DRAG = 26,
SELECT_STOP = 27,
MENU = 28,
MOVE_CAMERA_UP = 29,
MOVE_CAMERA_LEFT = 30,
MOVE_CAMERA_DOWN = 31,
MOVE_CAMERA_RIGHT = 32,
MOVE_CAMERA_BY_MINIMAP = 33,
DESELECT_UNITCARD = 34,
CENTER_ON_SELECTION = 35,
SELECT_UNITCARD = 36,
SELECTGROUP_UNITCARD = 37,
DESELECTGROUP_UNITCARD = 38,
SELECT_ADD = 39,
CREATE_CONTROL_GROUP1 = 40,
CREATE_CONTROL_GROUP2 = 41,
CREATE_CONTROL_GROUP3 = 42,
CREATE_CONTROL_GROUP4 = 43,
CREATE_CONTROL_GROUP5 = 44,
CREATE_CONTROL_GROUP6 = 45,
CREATE_CONTROL_GROUP7 = 46,
CREATE_CONTROL_GROUP8 = 47,
CREATE_CONTROL_GROUP9 = 48,
CREATE_CONTROL_GROUP10 = 49,
CREATE_CONTROL_GROUP11 = 50,
CREATE_CONTROL_GROUP12 = 51,
CREATE_CONTROL_GROUP13 = 52,
CREATE_CONTROL_GROUP14 = 53,
CREATE_CONTROL_GROUP15 = 54,
RECALL_CONTROL_GROUP1 = 55,
RECALL_CONTROL_GROUP2 = 56,
RECALL_CONTROL_GROUP3 = 57,
RECALL_CONTROL_GROUP4 = 58,
RECALL_CONTROL_GROUP5 = 59,
RECALL_CONTROL_GROUP6 = 60,
RECALL_CONTROL_GROUP7 = 61,
RECALL_CONTROL_GROUP8 = 62,
RECALL_CONTROL_GROUP9 = 63,
RECALL_CONTROL_GROUP10 = 64,
RECALL_CONTROL_GROUP11 = 65,
RECALL_CONTROL_GROUP12 = 66,
RECALL_CONTROL_GROUP13 = 67,
RECALL_CONTROL_GROUP14 = 68,
RECALL_CONTROL_GROUP15 = 69,
CENTER_ON_CONTROL_GROUP1 = 70,
CENTER_ON_CONTROL_GROUP2 = 71,
CENTER_ON_CONTROL_GROUP3 = 72,
CENTER_ON_CONTROL_GROUP4 = 73,
CENTER_ON_CONTROL_GROUP5 = 74,
CENTER_ON_CONTROL_GROUP6 = 75,
CENTER_ON_CONTROL_GROUP7 = 76,
CENTER_ON_CONTROL_GROUP8 = 77,
CENTER_ON_CONTROL_GROUP9 = 78,
CENTER_ON_CONTROL_GROUP10 = 79,
CENTER_ON_CONTROL_GROUP11 = 80,
CENTER_ON_CONTROL_GROUP12 = 81,
CENTER_ON_CONTROL_GROUP13 = 82,
CENTER_ON_CONTROL_GROUP14 = 83,
CENTER_ON_CONTROL_GROUP15 = 84,
ADD_TO_CONTROL_GROUP1 = 85,
ADD_TO_CONTROL_GROUP2 = 86,
ADD_TO_CONTROL_GROUP3 = 87,
ADD_TO_CONTROL_GROUP4 = 88,
ADD_TO_CONTROL_GROUP5 = 89,
ADD_TO_CONTROL_GROUP6 = 90,
ADD_TO_CONTROL_GROUP7 = 91,
ADD_TO_CONTROL_GROUP8 = 92,
ADD_TO_CONTROL_GROUP9 = 93,
ADD_TO_CONTROL_GROUP10 = 94,
ADD_TO_CONTROL_GROUP11 = 95,
ADD_TO_CONTROL_GROUP12 = 96,
ADD_TO_CONTROL_GROUP13 = 97,
ADD_TO_CONTROL_GROUP14 = 98,
ADD_TO_CONTROL_GROUP15 = 99,
QUEU_FUNCTION1 = 100,
QUEU_FUNCTION2 = 101,
QUEU_FUNCTION3 = 102,
QUEU_FUNCTION4 = 103,
QUEU_FUNCTION5 = 104,
QUEU_FUNCTION6 = 105,
QUEU_FUNCTION7 = 106,
QUEU_FUNCTION8 = 107,
QUEU_FUNCTION9 = 108,
QUEU_FUNCTION10 = 109,
QUEU_FUNCTION11 = 110,
QUEU_FUNCTION12 = 111,
QUEU_FUNCTION13 = 112,
QUEU_FUNCTION14 = 113,
QUEU_FUNCTION15 = 114,
QUEU_FUNCTION16 = 115,
QUEU_ORDER = 117,
CHANGE_SUBSELECTION = 118,
EDGEPAN = 119,
MOUSE_ENTERED = 120,
COMMAND_CARD_COUNTROL = 121
};

All of these enum values have thier own case in a single giant switch case statement which is to large to post

unfortunately like said there isn't really an alternative.

have you americans ever seen bread


Why would you need to specify codes beyond 4?
Why isn't this just an array of function pointers?

not in a while I haven't

You don't but this why I can immediately see which function has which number which is important for binding hotkeys to the function in my ini file which looks like this pastebin.com/dsQpQR60
Either way I need to write a unique piece of code for each function and I like the switch case way.

...

object allocation is expensive
they're constant so keep them somewhere else and then reference them as needed

What do you mean?
Is the enum meant to pack a function into a corresponding integer so that it can be transmitted over the network?

what?
The enums are used for a switch case like this pastebin.com/74jKWLmy

Why aren't they actual functions?
Not trying to split hairs like people on Stack, I just think this is a case where you can remove the ugly bit instead of just hiding it.

Imagine taking a wrong turn one day and killing fifty people with decompression.
Pretty cool looking though.


Hash table breh.

A plain array of function pointers would be most optimal.

well most of the stuff in the cases is just a few lines long
in which case turning it into a seperate function would almost double the amount lines for the same thing
and I'm never gonna use those functions again probably I guess it's just saving myself a bit of time

Bread.

*cheese

I don't think you could make those seams any more obvious than that without using a bright neon colour to outline them.

cheese

???

Looks more like cake.

Cheesecake?

?

Breadcake.

Okay I have to admit, that pun was glorious.

Good job, user. Looks cool.

Does more lasers = more fun?

What if the pulses were shorter?

nice job. was just looking at some suggestions for good short animations, yours do it well.

the new one looks better, it has good direction and impact. do like other user said and add a damage frame 'flash' to the enemy sprite for feedback.

I think you're mixing laser up with missiles.

Turned out kind of cool, i'll keep tweaking it.


You make a good point!

...

I'm horrible at artwork. Anyone who isn't as shit as I am at animating/spritework have any tips for making this 8-frame run look better?

Head and arms cut off because they're animated seperately depending on actions.

Alright worked to make the seams a little less obvious. Except for the bottom

user you need to leave the houseonve in a while

I always thought since I played Pulsar that some guns would have an effect on the ship. Like a giant fuck all laser rolling the ship over and shit like that.
Basically: Ship propulsion by weapons.
Looks fun so far user, hope you give us a free copy when it's done.

Of course i'll hook my homeboys up with a copy

Looks good overall. It could use a thin (1/4th to 1/2th the width of the main beam) bright center though. This is a good way to make lasers more substantial. They can be whiter, or a slightly different color to help make the laser "pop" out to the eye.

One thing I would mention to anyone making lasers, is that there is a very common mistake of making them way too thick.

Your laser for example, is the perfect size of a single powerful ship weapon. If you were to have a bank of lasers such as you have you'd want them half as thin or even less. I'd try 1/3rd the size and go from there.

The trick with lasers is not to block the screen with them. A laser just needs to be thin and vivid during it's lifetime. What really gives laser "weight" in game is the particle effects on the target. The target particle effects should contain the lasers primary color, but also consist of white/yellow/orange/red sparks and fire. Ideally if the engine allows, the sparks should start hot, and fade out in color, size and transparency as they cool. The size of this mass of effects should be proportional to the damage being done. This makes it easy for a person to identify that "oh shit, those beams really are fucking up my target's day", rather than it looking like you are just throwing glow in the dark goo around.

This is related to a common problem in WoW and various MMO's. Armor and weapons and spells and abilities are all producing an outrageous shitload of effects, and no one can tell what the fuck is going on anymore. While individually someone might be fine and sensible, you have to weight each effect against everything else that may show up on screen. Less is more.

I do like that flicker effect in the later video though. Nicely done overall.


Here's another tip that will help your ships stand out in the background of space. Adding a subtle dark "glow" can help them pop out to the eye. Subtle is the keyword here. It's not something that should be visible unless you are specifically looking for it. In UI it's called a drop shadow, and serves the same purpose.
Pic related, it's an example I made from a picture I pulled from google.

Alrighty, breads. I think I might reuse this model for different types of breads and maybe even a meatloaf.

Not that it'll change what I'm doing, but I'm curious; How does /agdg/ view reusing assets?

Every time someone mentions some sort of ridiculous computer wizardry and it happened to have come from a slav I feel like I'm squandering my heritage.

Reusing assets is fine, and it's been an industry standard for decades, most of the characters in Deus Ex are different textures applied to a small pool of models. Many of the characters in VTMB use remixed models and textures, VV and Jeanette's faces are the same model but their bodies are changed and Jeanette's body is shared with one of Heather's alternate outfits and Heather's face is the same as that thin blood who can see the future.

your texture is blatantly tiled where it's cut, fix it.

Get it to bylat kurwa

...

If you've ever modded commercial games, you'll quickly find that asset reuse is not only common, but critical for speedy development. Don't worry to much about it. As you develop and learn, consider how you might organize things so you can better reuse content in an organized way.


Do be aware that reusing multiple textures on a model can create a lot more draw calls than you'd normally have. There are ways around it though.

For example, C&C Generals/Zero Hour has sub par performance because they had a lot of texture reuse, and they didn't combine multiple textures together (referred to as a texture atlas) and also just had had models with 3-12 meshes that should have just had 1.

It looks better but it still doesn't a bread, firstly there should be a small rim on the slice to match up with the crust, and I'd probably make the sliced faces slightly ligher in colour, secondly what are you even making?

Haven't worked on my game in awhile.
I applied to work at a theme park near me for one of the halloween actors and got the job.
Went for training felt like a timeshare (3 hours of a powerpoint presentation) where they say what you can and cant do, along with the times you have to be there
and you may have to wait 3 hours after your make up is on (unpaid im pretty sure)
It got to the point where I didn't want the job anymore so I started having a panic attack then they give me a 8+ page quiz
I asked to step outside because of a panic attack and left training. (called them later to say I couldn't do the job)

Oh I just do this as a hobby. Maybe one day I'll make a little worldspace to walk around in and fuck with, but I've long since given up on anything with a large scope.

Here's a really quick and really shitty mockup that I'll do properly when I'm not tired, but you're talking about it looking kind of like this yeah?

I'm sure things will work out for you, if you work on your game.


looks better, I'd say try and make the rim roughly consistent, and place some circles on the sliced face texture for where the bubbles form in the dough, you know just like real bread.

i had a similar experience with a mobile gamedev job recently
except that i'd been through a month of "hey user, make me this copy of some old game" and once he got to freemium shit i just gave up, partly because it's immoral and partly because i have no way how to code it into unity
at least i told him that i didn't want the job and why

Does anyone know why John Carmack implemented vectors as arrays instead of structures? This ended up being carried over to Source Engine games too, in which the Vector class seems to be some sort of wrapper for vec3_t, although I haven't looked too much into it.

This is how Carmack did it:
typedef float vec_t;typedef vec_t vec3_t[3];

And this is how a modern engine would do it in C:
struct vec3_t { float x, y, z;};

I'm not one to question John Carmack, but what did he mean by this?

That's a good question. Unreal Engine 4 does vectors as structs, and in my own projects I've done them in the same way.

Yet they still added Jewish shit, you cannot download mods anymore without having a account and you need to actually own the game.

So if you pirated the game no more mods for you goyim.

wew
i changed the healthbar icons to only destroy the ones that have just been killed, and then update their positions, rather than destroying every healthbar and making new ones
also using a hashtable for the formation key bindings, so i don't need a 20 line switch case
public static Hashtable hash = new Hashtable(){ {KeyCode.Q, new Vector3(-60, 30, 0) }, {KeyCode.W, new Vector3(-30, 30, 0) }, {KeyCode.E, new Vector3(0, 30, 0) }, {KeyCode.R, new Vector3(30, 30, 0) }, {KeyCode.T, new Vector3(60, 30, 0) }, {KeyCode.A, new Vector3(-60, 0, 0) }, {KeyCode.S, new Vector3(-30, 0, 0) }, {KeyCode.D, new Vector3(0, 0, 0) }, {KeyCode.F, new Vector3(30, 0, 0) }, {KeyCode.G, new Vector3(60, 0, 0) }, {KeyCode.Z, new Vector3(-60, -30, 0) }, {KeyCode.X, new Vector3(-30, -30, 0) }, {KeyCode.C, new Vector3(0, -30, 0) }, {KeyCode.V, new Vector3(30, -30, 0) }, {KeyCode.B, new Vector3(60, -30, 0) },};
so now framerate is more stable when i have tons of units getting killed while they're selected. stays at around 70-80 fps for me

also fixed the icon resize function for the healthbars. now the unit icon has the right aspect ratio, while his health is shown below it

I don't think it actually makes any difference
but you would have to look into the specific language/compiler implementations to be sure

I remember watching a talk by Jon Blow where he mentions shitposting on usenet to the Doom team for using arrays everywhere. I forget exactly what is said about it other than , something something simplicity, something quick development time.

youtube.com/watch?v=JjDsP5n2kSM

I don't remember when in the video he says it to, maybe it's useful, maybe it'd be better to ask John Carmack himself.

Maybe it makes it easier to write code that takes advantage of vector instructions.

It could just be his personal programming style.

These numbers kind of make it seem like an isometric game. You might find it easier pretending your game works on a 2D plane, where the plane is then transformed and drawn as isometric. The sprites would still move and look the same, but you will be able to take advantage of far easier math, especially if you end up doing things that isometric games usually have, like fog of war.

that's just the canvas
the Z there is always 0
i just forgot to change it to vector2
i'm not actually using sprites outside of the canvas for anything

also, i need some confirmation on this
if i want to have resources that block the ai's path, like trees, rocks, etc, would it be better to just implement A* pathfinding rather than using the navmesh?
because the way i see it, in order to do this with navmesh, everytime a tree is cut down, i'd need to rebake the navmesh, which could take a while depending on map size
alternatively, i can give every tree a NavMeshObstacle component, but that would be costly if there's a lot of trees

I really like this idea. Have you played the game Planetbase? It's a vaguely similar concept that you might get some inspiration from.

Been playing around with the sized, and i think you are absolutely right. It does look more fierce when it is thin and has a powerful impact.
I'll keep tweaking it, thanks for the feedback!

And thanks a lot for the glow tip, I'll download photoshop ASAP!

I need help with networking in gamemaker, i've done this
if type = network_type_disconnect{ playerleaving = ds_list_find_index(listedsockets, sockinlist); global.playerout = playerleaving; with obj_player{ if controlledby = global.playerout{ instance_destroy(); } }}
And my problem is that, since every socket is called sockinlist, it always returns 1 no matter which socket i access because, according to GM help "Note that if there are more than one entries in the list with the same value, the position of any one of them may be returned"
So, how do i get the sockets to have different names? because i need the position which is gonna be parsed into the ID of the player disconnected.

Is there somewhere a few examples of a texture atlas used by models?

I tried to figure it out by looking at the CPUs that were available at the time. Quake is a really fucking old game and I wondered whether this could have had to do with vectorization. With structs it's not guaranteed that the individual variables stay in order or whether they're packed. The compiler can reorder them and add padding. Since we're talking ancient CPUs here, I wondered whether MMX and SSE were a thing back then (answer: not for everyone ass these were new technologies back when Quake was released).
Still, I haven't found an exact answer, because I stumbled upon this: fabiensanglard.net/quake2/index.php
Read that fucking shit. Everyone of us is a Yandev.

no struct padding? in modern compilers, everything gets optimized out, but perhaps it wouldn't have in a compiler from 96.

i would just try it with the navmesh see if it works then there is no reason not to use it

I think we are confusing each other. If this is the case, pic related is what I mean. Instead of having code that moves a character at 30 degree increments, instead have all calculations be done on 2D plane in which they can move in any cardinal direction. Then sprite would then be rendered at the position on the screen, using a transformation between the two planes.

3 floats would not cause any extra memory being reserved for padding because floats fit neatly within 32 bit boundaries.

nig what are you talking about
i move the characters by telling them their destination, after which the navmesh handles where they go
the vectors in the code you originally referenced were from me putting the formation buttons on the screen, and their position depended on their key bindings

Welp looks like I'm retarded and can't read. I just looked at the numbers and assumed you were trying to move something isometrically.

ice effects

tbh, even if i did it with navmesh and it didn't shit itself, doing it with grid based pathfinding lets me treat whatever i want as an obstacle, including the units themselves
i'm gonna try and follow this, mind as well get some idea on how to generate a map anyways

well i sort of got it working
i still need to figure out how to make them find the closest possible target if the main one is now occupied, but otherwise it works
i do have an issue though. for some reason i get a 10 fps drop or so, when i tell them their destination
but the strange thing is that it quickly goes back to normal, even though they do occasionally recalculate their path while walking it, and there's no fps drop there

if anyone wants to help me figure out why it's shit, be my guest
using UnityEngine;using System.Collections;using System.Collections.Generic;public class PathfindingMap : MonoBehaviour{ public NodeTemplate[] nodeTypes; public GameObject NodeMesh; public Node[,] mapcords; public int width = 10, height = 10; public static PathfindingMap Instance; PathfindingMap() { Instance = this; } public static float CostToEnterTile(Node source, Node target) { if (UnitCanEnterTile(target.cords.x, target.cords.z) == false) return Mathf.Infinity; float cost = target.cost; //i'm retarded and have no idea why this even works. doesn't it just check if source==target? if (source.cords.x != target.cords.x && source.cords.z != target.cords.z) { // We are moving diagonally! Fudge the cost for tie-breaking // Purely a cosmetic thing! cost += 0.001f; } if (target.occupied == true) { cost += 1; } return cost; } void Start() { // Camera.main.transform.position = new Vector3(-width / 4, 10, -height / 4); mapcords = new Node[width, height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { GameObject temp = Instantiate(NodeMesh, new Vector3(x, 0, y), NodeMesh.transform.rotation) as GameObject; temp.transform.SetParent(transform); mapcords[x, y] = ScriptableObject.CreateInstance(); mapcords[x, y].inWorld = temp; mapcords[x, y].cords = new Vector3(x, 0, y); if (nodeTypes.Length > 0) { temp.GetComponent().material = nodeTypes[0].mat; mapcords[x, y].cost = nodeTypes[0].Cost; mapcords[x, y].enterable = nodeTypes[0].enterable; } } } for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (x > 0) { mapcords[x, y].neighbours.Add(mapcords[x - 1, y]); if (y > 0) mapcords[x, y].neighbours.Add(mapcords[x - 1, y - 1]); if (y < height - 1) mapcords[x, y].neighbours.Add(mapcords[x - 1, y + 1]); } // Try Right if (x < width - 1) { mapcords[x, y].neighbours.Add(mapcords[x + 1, y]); if (y > 0) mapcords[x, y].neighbours.Add(mapcords[x + 1, y - 1]); if (y < height - 1) mapcords[x, y].neighbours.Add(mapcords[x + 1, y + 1]); } // Try straight up and down if (y > 0) mapcords[x, y].neighbours.Add(mapcords[x, y - 1]); if (y < height - 1) mapcords[x, y].neighbours.Add(mapcords[x, y + 1]); } } } public static bool UnitCanEnterTile(float x, float y) { int tx = Mathf.RoundToInt(x); int ty = Mathf.RoundToInt(y); if (tx > Instance.width || ty > Instance.height) return false; else return Instance.mapcords[tx, ty].enterable; }}public class Node : ScriptableObject{ public Vector3 cords; public GameObject inWorld; public int cost; public Seeker occupied; public bool enterable; public List neighbours = new List();}[System.Serializable]public class NodeTemplate{ public Material mat; public int Cost; public bool enterable;}

using UnityEngine;using System.Collections;using System.Collections.Generic;public class Seeker : MonoBehaviour{ public List path = new List(); public int cordsX, cordsY; Transform tr; void Start() { tr = transform; cordsX = Mathf.RoundToInt(tr.position.x); cordsY = Mathf.RoundToInt(tr.position.z); } public Animator anim; void LateUpdate() { if (path.Count > 1) { for (int i = 0; i < path.Count - 1; i++) { Debug.DrawLine(path[i].cords, path[i + 1].cords, Color.blue); } transform.position = Vector3.Lerp(transform.position, path[1].cords, Time.deltaTime * 4); if (Vector3.Distance(transform.position, path[1].cords) < 0.4f) { Vector3 pos = path[path.Count - 1].cords; cordsX = Mathf.RoundToInt(path[1].cords.x); cordsY = Mathf.RoundToInt(path[1].cords.z); path[0].occupied = null; if (path.Count > 2 && path[path.Count - 1].occupied == false) { if (path[2].occupied == true) { GeneratePathTo(pos.x, pos.z); path[1].occupied = this; } else { path.RemoveAt(0); path[1].occupied = this; } } } if (path.Count > 2 && path[path.Count - 1].occupied == false) { transform.rotation = Quaternion.LookRotation(path[1].cords - transform.position); if (anim != null) { anim.SetFloat("Speed", 1); } } else { anim.SetFloat("Speed", 0); } } if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { GeneratePathTo(hit.point.x, hit.point.z); } } if (Input.GetMouseButtonDown(1)) { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { if (PathfindingMap.Instance.nodeTypes.Length >= 2) { NodeTemplate temp = PathfindingMap.Instance.nodeTypes[1]; Node node = PathfindingMap.Instance.mapcords[Mathf.RoundToInt(hit.point.x), Mathf.RoundToInt(hit.point.z)]; node.inWorld.GetComponent().material = temp.mat; node.cost = temp.Cost; node.enterable = temp.enterable; } //GeneratePathTo(hit.point.x, hit.point.z); } } }

public void GeneratePathTo(float tx, float ty) { int x = Mathf.RoundToInt(tx); int y = Mathf.RoundToInt(ty); if (PathfindingMap.UnitCanEnterTile(x, y) == false) { // We probably clicked on a mountain or something, so just quit out. return; } Dictionary dist = new Dictionary(); Dictionary prev = new Dictionary(); // Setup the "Q" -- the list of nodes we haven't checked yet. List unvisited = new List(); Node source = PathfindingMap.Instance.mapcords[ cordsX, cordsY ]; Node target = PathfindingMap.Instance.mapcords[ x, y ]; dist[source] = 0; prev[source] = null; // Initialize everything to have INFINITY distance, since // we don't know any better right now. Also, it's possible // that some nodes CAN'T be reached from the source, // which would make INFINITY a reasonable value foreach (Node v in PathfindingMap.Instance.mapcords) { if (v != source) { dist[v] = Mathf.Infinity; prev[v] = null; } unvisited.Add(v); } while (unvisited.Count > 0) { // "u" is going to be the unvisited node with the smallest distance. Node u = null; foreach (Node possibleU in unvisited) { if (u == null || dist[possibleU] < dist[u]) { u = possibleU; } } if (u == target) { break; // Exit the while loop! } unvisited.Remove(u); foreach (Node v in u.neighbours) { //float alt = dist[u] + u.DistanceTo(v); float alt = dist[u] + PathfindingMap.CostToEnterTile(u, v); if (alt < dist[v]) { dist[v] = alt; prev[v] = u; } } } // If we get there, the either we found the shortest route // to our target, or there is no route at ALL to our target. if (prev[target] == null) { // No route between our target and the source return; } path = new List(); Node curr = target; // Step through the "prev" chain and add it to our path while (curr != null) { path.Add(curr); curr = prev[curr]; } // Right now, currentPath describes a route from out target to our source // So we need to invert it! path.Reverse(); }}

does unity not have profiling??

oh yeah, i forgot

just go through the algorithm normally
then go through the visited spots and find the closest one to the goal then reconstruct the path from that node.
heres my implementation for reference pastebin.com/iyzm9bxi
I know there is a lot of stuff here but its all important
The relevant stuff is in the aStarSearch function
I also created a version of A* that finds the shortest path to a set of points with almost no extra overhead which could be usefull for attackmove commands or something, thats whay i use it for anyway.

yeah fuck me, the path generating function is shit and costs too much framerate

i can't for the life of me translate that to c#
i remember there was some site with gamedev tutorials, and decent visual examples, that had A*, line of sight and other shit, but i can't remember the name, anyone know it?

and of course i find it like 5 seconds later
redblobgames.com/pathfinding/a-star/introduction.html

It's really just this part thats relevent
float distance = - 1;
f2 pos;

for(auto i : cameFrom)
{
float newLength = (i.second - goal).lengthSquared();
if (distance == - 1 || distance > newLength)
{
distance = newLength;
pos = i.second;
}
}
if (start == pos)
{
return {};
}
else
{
return reconstructPath(cameFrom, start, pos);
}

should be pretty straightforward to turn into C# right
you just need to figure which object is cameFrom for you
and i believe it mapCoords for you?
It should be the map that saves where the algorithm has been.

Perhaps I'll have to return to my Deus Exesque project… My TicTacs pale in comparison to your RTSes

Well fuck, here I was seriously thinking you and that other user were the same person and his updates were progress on the tictacs, just replaced by models.
But hey, you sure as fuck won't hear me complaining if you work more on the doodsex-like.

Is this Team Buddies, RTS edition?

I love AoE but the tictacs would be more of a modern thing, more akin to Battle for Dune, I guess.
I guess I'll give this project ~two weeks to fulfill my basic idea, which I intend to be something a bit more original in the RTS realm. You guys will get the build and tell me whatcha think.

Notice the primary thing I intend to implement (one that I'm not sure will be fun yet): All units shooting projectiles - meaning that
1. You will need to move your units in order not to be hit
2. Hitting your enemy will require flanking and/or pre-firing a'la C&C's Ctrl-click
don't worry I intend them to make more damage than in attached webm

Too bad the early stages of tictac development were done while my wife was away and now, while I'm happy that she's back… I slowed down a lot


That's actually a fantastic idea for placeholder models

Ok guys I need some ideas
I wanna figure when a circle goes past a rectangle
what i mean by that is some part of the area of the circle is outside of the rectangle but there is no straightline between that area and the center of the circle
I've attached a shitty image to clarify

Looks neat also you've got some comfy music there.

don't worry, i still can't figure out how the fuck A* works

so i've been following redblobgames.com/pathfinding/a-star/implementation.html#csharp
so far what i understand, is that i have the costs for each tile from from the start, and we've only been searching for tiles until we reached the end goal, so we don't have costs for the whole grid, just for the nearby tiles
now i need to take the costs and construct the shortest path out of those
how the fuck do i do that

I threw a really shitty example together for someone a few days ago in like 20 minutes.
pastebin.com/2BYeUEZZ

Basically, every node can be connected to any number of nodes. In a grid, each square is just a node connected to its 4 or 8 neighbors.


at the very end, the stack is the path

alright, i figured it out. pls no bully anymore
public void FindShortestPath() { Vector3 next = _goal; Debug.DrawLine(_goal, _goal + Vector3.up, Color.red, 5);//end List path = new List(); path.Add(next); for (int i = 0; i < cameFrom.Count; ++i) { next = cameFrom[next]; path.Add(next); if (next == _start) { path.Reverse(); Debug.DrawLine(_start, _start + Vector3.up, Color.red, 5);//start break; } } for (int i = 0; i < path.Count - 1; i++) { Debug.DrawLine(path[i], path[i + 1], Color.blue, 5); } }

and with added diagonal directions

Probably some magic to make transforms faster on pre-SSE processors.


hey shodanon
why won't you help me make this instead

Is map making devving?

user, which algorithm are you using? Standard A* or JPS (which is far superior on uniform grids). Or are you using something else entirely?


Well, it's one aspect of it. (Looks sexy)

no idea
i just followed redblopgames's tutorial
so it's probably standard

Nevermind the op fucked up and the thread is called

it's fine.

I-is this heaven?

(checked)
Make the rim a bit smaller, and make the inside a bit lighter if you're making good ol' American processed bread product. Have a picture for scale and future reference.

SHIEEEEEEET

that looks frigging amazing.
If a bit too StarCrafty
What would you need help with?

So now there's four RTS makers
Let's ALL team up


If heaven is supposed to go ultra slow…

yes, because that's been proven time and time again to be a good idea

it works
now i just need to get him to avoid occupied tiles n shit
but i'll do that tomorrow

Things that I couldn't be arsed to do last time
and I dropped it because doing it alone was a bitch, and Unity was still crippled at the time
Right now, I could probably do all that but an extra pair of hands would bring this closer to the realm of possibility.

On the other hand, I wouldn't want to make it an internet collab unless the design stayed the same, but we could make a common framework for an RTS to save ourselves a dick ton of work, then part ways.

The other two aren't using Unity I think.

but that works fine for an fps
it's horrible for an rts

Are you asking for a way to check for a collision between the circle and rectangle? Is the rectangle able to rotate?

Read again.

Ok, guys, long story short, I'm making a turn-based "tactical shooter", actually there's more to it, but I'm trying to adopt a policy of talking about it only after I do it to keep my internal idea guy in control, except for this exact post.

So there's two things I need opinions about.

1. I'm going to make a system not based on health points, but more like kill or be liked shootouts, so all I will calculate is if the shot got the target or missed it.

To give some depth to this, I decided to give random chances to where the shots can get, for example, if it shoots the leg, the target will be crawling for the rest of the fight or if it gets the head, it's instant kill.

So my doubt is, what about the chest and stomach area? I know that with the right bullet is practically a instant kill, but maybe with a pistol round the target could walk a few miles before dropping dead for blood loss. My ideal until now is making some kind of death clock if the target gets wounded on this area, he can still do stuff, but will inevitably die on a couple of rounds, maybe even less depending on the ammo type.

2. Since the chances of getting the shot right will depend on the distance, shotting from point blank is almost a guarantee for a free kill, I'm trying to think ways to counter that, here what comes to mind
- A costfree, optional, but active by default overwatch command, if someone tries to get close to your character, he'll start shooting back even if it is not his turn.
- Same thing, but not costfree nor active by default, players will need to think when use overwatch command
- Switching everything to real time and rethink the fucking game
- Doing nothing and see what the fuck happens

meh

heh?

bix nood

just some progress shit from my microtank mod

I thought a solution for problem 2, but I still open for ideas

Nah, look at that window. RockPaperScissors guy started with placeholder capsules like me.

Then he went lightyears ahead

Much of the stuff you need is in the realm of "things I myself still need to learn" so I imagine my involvement in this project could lead to you getting more frustrated than you deserve to bear.
But pls return to it Unless you have something even better in the pipeline now


1. Sounds neato, although I'm wondering what kind of tricky level design and player available skills would be required to keep anyone in your squad alive until the end of a level
2. Option 2 sounds best.

wellllll

ALRIGHT

I think I've got it now.

heh, I suspected it was you. Looked to good for it to be anyone else. And not many people remember that nickname

When did you get down to that RTS project? Was it a side-thing like my tictacs or was that before Tetrachrome?

I'm used to a totally different look for bread here

C99 now also allows you to do magic like this:
typedef union { struct {float x, y, z, w;}; struct {float r, g, b, a;}; float v[4];} vec4_t;

Looks like bread to me.

...

I did it when I was waiting for Unity to unfuck the animation system, early in the 4.x cycle, after a few nights too many of LAN Brood War.

Yep, it's bread.

Is that the shinra tower in Midgar ?

it's this bit

normals reeeeeeeeeeeeeeeeeeeeee

Pretty good catch. That's "I recognize that bulge" tier.

but that ain't midgar

>Make a quest where you rescue a succubus from a powerful neckromancer
Ah, the joys of testing shit.

Impressive dedication user

The thread is 2 days old. Nice try, asshole!

Well, there's the good ol' stealth, not every mission, if any, will require to kill everything in your way plus there is a mechanic, which I'll not talk about in the moment, that turns this whole life and death thing inside out, even making suicide a viable and tactical choice.

btw your game looks nice.

How the fuck do I get decals working in Unity, just using quads with a texture is a retarded idea because they don't follow the shape of the surface and they're z fighting like crazy.
Am I just going to have to learn how to write shaders?

Do it anyway.

The best way to do decals is to modify the g-buffers before shading.

Probably what that user was referring to:
blogs.unity3d.com/ru/2015/02/06/extending-unity-5-rendering-pipeline-command-buffers/

Ah well, I wanted to put off learning shaders until after my little project, since I mostly wanted to focus on learning how to program game logic and putting my 3d art skills to the test. Thanks for the suggestions, though, I'll tinker with that.

Precisely this.
I do have one issue with this method, you can't apply it to a single layer.
Right now I'm trying to figure out if some layer info can be packed into any of the buffers and taken into account by the decal.

I have one problem though, this doesn't work in forward rendering, and my project wouldn't really benefit from deferred shading, and I'd like to keep MSAA.

tbh that's one of the more advanced low-level ish applications of shaders in Unity (as you're directly editing the g-buffer in the deferred rendering pipeline, for that specific example).

Best to learn cg or hlsl and program a few vertex/fragment shaders, and mess with that; learn the pipeline, and then dive into the command buffers class, Graphics class, and/or GL class.

Try the Projector component then.

I could be wrong, but it sounds like it'd have a big performance impact, I need to instantiate the decals at runtime.

Oh my fucking god, I figured out the z fighting, I was offsetting the prefab's position on the wrong axis. God I'm retarded.

The Projector works by rendering a special, clipped material over each surface it hits.
There are other, ghetto solutions to decals such as rendering a quad and fudging its Z so that it doesn't clip with the surface that easily, or simply pushing the quad a bit along the normal of the surface it's on.
You can also make sure that such ghetto decal doesn't extend beyond the object it's glued to, by comparing its Z with the Z behind it. This requires a very simple custom shader, similar to the built in particle shaders. (particle softness also uses depth difference)


You could still benefit from padding out the Z a bit, to prevent z-fighting when viewed from a large distance.

Guys, I'm torn. I could take my drawing skills and try to make webcomics and hope I can develop a following through networking with some networks I know take open solicitations and support their artists well. Or I can move over to making vidya. The problem I find is that whenever I immerse myself in one, I wind up wanting to go back to the other in this vicious cycle. I would do both if I could but juggling things as big as comic and vidya production is unsustainable for me as just one man. I simply can't do both without one dragging down the other.
Both options will probably end up in me continuing to work a dead-end, rat race job for the next 2 years(Being generous) while I work on these things before I see any kind of results from it. I already have the skillset for drawing, and I have only a very modest skillset for programming. But the big deal for me is that I feel like I'm not emotionally invested in comics the same way I am with video games. And that if I try to work my way into webcomics being my bread and butter it might be worse for me in the long run.
I'm torn between the two things I love in the worst way possible. I like comics, have a good idea of where I could go more it and am decent enough that I could probably get an audience with enough time and effort. But I like video games way more but am complete ass at programming and modeling. What should I do Holla Forums? (inb4 kill yourself)

Make a video game cross comic so you're doing both at once. Then kill yourself.

Really though, it depends on where your skills and talents lie. If you've got some skill for vidya and your heart's in it, go for it. Just don't expect to make a living from it.

I always did have ideas of adapting the comics or their universes in a video game. Still heavily leaning towards comics and it does help to be reminded that video games are a lot more work for their reward. You can't start a video game and if it's a hit, launch a Patreon in a few months so that you can quit your job and do it full time like you can with a comic.
Video games are still primarily an old school market where if you're doing anything independently you're funding it out of pocket and you don't see any possibility for a return until it's out on the market.(There are a few games being developed through Patreon funding but most are degenerate porn games that have been shut down a year or two later)

Your destiny is clear.
You need to make another Comix Zone.

Comix Zone is a pretty rad game I'll admit. I'd wonder how well such a format would translate to GameMaker or Unity 3D(The two things I have the most experience in, though that's not saying much)

Who is this ba-vocalizing enemy creature?

alright, i'm still having trouble with A*
i managed to get it to work with Nodes instead of vector3s (not the actual search, only the reconstructed path)
my issue is that now i have a 10-20 fps drop when calculating the path, with 6 units
it's even worse if i start telling the units to recalculate the path if there's someone in front of them
so i need an even more optimized A* method
map script: pastebin.com/cbZKNKPn
unit script: pastebin.com/EGPP2Pnu
A* script: pastebin.com/SSnXPmgZ

use profiling to figure what is causing the biggest delay then optimize

the A* grid generation is what causes it
that's why i'm asking for a more optimized method

well regular A* doesnt use grid generation
If you just have a regular grid based solution you don't need generate the graph before hand.
neighbors function should check what the cost needs to be depending on the position.
Now if you wanna be more efficient you can do some kind of spatial indexing
also i looked at the grid generation and it doesn't look that expensive can you show what parts are costing alot
generating the grid before hand should be possible

If you're not going to go with a binary heap, at least do this:


Also, shouldn't your hueristic be
so that it will underestimate the distance?

He uses the manhattan distance as heuristic. Both are valid.

i don't know which exact parts are making it run slowly, probably having a frontier search for each unit that needs a path
anyways, how would i get the shortest path without generating a grid beforehand?
i thought A* worked by generating a grid until it reached the goal, and then just reconstructed the path backwards from the goal to the start
vid related is with them checking if their next tile is occupied
fps goes down to 30
only updated the unit script for this pastebin.com/86AT9SD8

forgot vid

Then just use the profiler.
private void SomeMethod(){ // code, code, code Profiler.BeginSample("Probably slow"); // code you want to check Profiler.EndSample(); // code, code, code}
Then profile and filter for "Probably slow". Be careful when nesting these instructions, as they will generate garbage in and of themselves. Also make sure that for each BeginSample(), there EndSample() is actually reached (careful with conditional logic).

i guess it's the neighbors
is there a better way to find them?
public AStarSearch(SquareGrid graph, Vector3 start, Vector3 goal) { var frontier = new PriorityQueue(); frontier.Enqueue(start, 0); _start = start; _goal = goal; cameFrom[start] = start; costSoFar[start] = 0; while (frontier.Count > 0) { var current = frontier.Dequeue(); if (current.Equals(goal)) { break; } foreach (var next in graph.Neighbors(current)) { Profiler.BeginSample("neighbors"); double newCost = costSoFar[current] + graph.Cost(current, next); if (!costSoFar.ContainsKey(next) || newCost < costSoFar[next]) { costSoFar[next] = newCost; double priority = newCost + Heuristic(next, goal); frontier.Enqueue(next, priority); cameFrom[next] = current; } Profiler.EndSample(); } } }
public IEnumerable Neighbors(Vector3 id) { foreach (var dir in DIRS) { Vector3 next = new Vector3(id.x + dir.x, 0, id.z + dir.z); if (InBounds(next) && Passable(next)) { yield return next; } } }

Then you to profile your game and figure it out optimizing without knowing what is taking up cycles is probably the stupidest thing you can do

You said "generate a grid"

Does your game/map not work on a grid to begin with? If this is the case, it could be generating a full grid for every unit every time. See if adding one or two more, or even 10 more affect the time linearly or exponentially

See also your logic for querying tiles. This is the meat that gets invoked the most so if youre doing something stupid it will multiply up from here. Make sure that eg visited tiles arent checked as neighbours every time

use the deep profiler

Ooops, forgot that part.
Yes, A* works by generating a »graph« on the fly. In your case the graph describes a grid, but that doesn't matter. I think what the other user meant is that you don't build the entire graph, only the parts you really need (fringe). If you would build the entire graph, you might as well just use breadth first search.


That's really weird. Usually pathfinding shouldn't slow you down that much, as you don't run it on every frame. You calculate the path once, then follow it blindly which should be basically free. When you're dealing with more complex situations, you add checks that determine whether your path is still valid and generate a new path, if it's not. Above all else, you make sure that the pathfinding itself doesn't repeat on every iteration.


Yeah, there seems to be a problem there, but you should do more fine-grained profiling, if you want to figure out the culprit.
foreach (var next in graph.Neighbors(current)){ Profiler.BeginSample("neighbors Cost"); double c = graph.Cost(current, next); Profiler.EndSample(); double newCost = costSoFar[current] + c; if (!costSoFar.ContainsKey(next) || newCost < costSoFar[next]) { costSoFar[next] = newCost; Profiler.BeginSample("neighbors Heuristic"); double h = Heuristic(next, goal); Profiler.EndSample(); double priority = newCost + h; Profiler.BeginSample("neigbors fontier enqueue"); frontier.Enqueue(next, priority); Profiler.EndSample(); cameFrom[next] = current; }}

Tempted to say this is the problem… in my own implementation I didn't use any indirection and I didnt create any objects, i kept my tile indexes simply as ints. Doesn't help in turn, your enumerator also calls two other (unknown to us) functions

Okay then that definitely sounds like bad neighbour checks. I remember mine being that high until it petered out, with my corrected cersion taking like 14 to 30

I don't know C# but it looks fine to me
are InBounds and Passable expensive?
also it might be usefull to show inclusive performance so you can see where the function is called the most unless its just in the astarsearch function
It's worth noting that adding diagonals makes the function twice as slow

it does work on a grid, i mean that it generates the vectors and cost to reach each of them , until it reaches the goal
it is generating a new grid for each unit when it starts looking for a path

DIRS is just a vector for each possible direction
public static readonly Vector3[] DIRS = new[] { new Vector3(1,0, 0), new Vector3(1,0, 1), new Vector3(1,0, -1), new Vector3(-1,0, 1), new Vector3(-1,0, -1), new Vector3(0,0, -1), new Vector3(-1,0, 0), new Vector3(0,0, 1) };
inbounds checks if it's within the grid's bounds (0-width, 0-height)
passable checks if the specific tile can be walked on. both of these shouldn't be expensive

the issue is definitely in the amount of times i call neighbours
the grid is 20x20, and we've got 6 units each looking for a path, and recalculating it when their path gets obstructed

It seems like you're calling that function on during every frame. Try this:

private float lastNeighborsCheck = 0.0f;[SerializeField][Range(0.0f, 5.0f)]private float neighborRefreshRate= 0.5f;// ...private void LateUpdate(){ // ... if (Time.time - lastNeighborsCheck > neighborRefreshRate) { lastNeighborsCheck = Time.time; // This code is only executed every neighborRefreshRate seconds. // This should give your units some time to actually move a substantial distance // before checking the neighboring sectors again. } // ...}

Your heap allocations are absolutely unacceptable too. 0.8 MB per frame. That's really bad, but I would fix that once you've reached an acceptable level of performance.

ah i found it
i was making a new node object every time i enqued
now how do i do that without a custom class?
this is how the original was
private List elements = new List(); public int Count { get { return elements.Count; } } public void Enqueue(T item, double priority) { elements.Add(Tuple.Create(item, priority)); } public T Dequeue() { int bestIndex = 0; for (int i = 0; i < elements.Count; i++) { if (elements[i].Item2 < elements[bestIndex].Item2) { bestIndex = i; } } T bestItem = elements[bestIndex].Item1; elements.RemoveAt(bestIndex); return bestItem; }

alright, now enque doesn't cost me a ton of ms
everything else is still fucked though
pastebin.com/tTAp8zjZ

would it be better if i just used a scriptable object instead of vectors? the vectors are all the same, but from what i can tell, i'm making too much, instead of just referencing the same existing ones

That's because they're floats, and hashing the floats doesn't really equate to the same thing everytime.
You either need to round them (Mathf round is also slow, too many type conversions), consistently, before hashing them, or something along those lines.
Do a custom IEqualityComparer for your dictionary keys (implement that hashing/rounding here).
That will prevent duplicate keys, speed up contains calls + less garbage (no boxing/unboxing).

alright, this time i'm using a class that stores the vector3, cost and if the tile is passable
the only time i'm making new vectors is when i create the initial grid
in any of the functions i use the paramaters instead of the vectors, so that i don't make too many new structs
and in the end i just reference the nodes, rather than making a new vector
and amazingly, shit actually works
framerate doesn't drop under 80
has some slight bugs like random teleportation, or too much diagonal movement but i should be able to fix it
i just need to clean up the code from tons of useless shit from before
i think the reason why i fucked this up is because the original tutorial used it's own class, instead of Vector2/Vector3, and i didn't realize it actually had any significance

and for reference
A*: pastebin.com/iJBczWRQ
seeker: pastebin.com/w6xZ6K5F
map: pastebin.com/xy87D5yp

The teleportation is related to the unit stopping before reaching the destination.

meant for
when the guy gives up and stops, he's probably considered to have reached the final position

alright, i think i got it working perfectly this time
i went and redid some stuff from redblop's tutorial, apparently i fucked up enque/deque's priority, since i thought it was just the tile cost and i wasn't planning on using that
so NOW there's no visible framerate drops at all, unless i have the profiler running, but even then it goes to 20 ms to calculate the path at most
on a 100x100 map, it's stays at around 70-74 the entire time, even if i tell them to go from one corner of the map to the other
i also sort of got them to avoid each other
and i think i might have optimized (or made it worse) by ditching the dictionaries and instead i simply tell each node where it came from/what it's cost is, and then clear them when the path is complete. searching for stuff through dictionaries was adding at least another 20 ms to the path generation, although that was before i had enque/deque fixed, so i could just be imagining things
so now i think i'm finally ready to implement this pathfinding to the existing formations n shit
although i might have to mess with the collision checking
seeker: pastebin.com/qKUADJXX
map: pastebin.com/utmN7keG
A*: pastebin.com/S12dHsu1


i already fixed it.

Do not use foreach, it generates garbage.

isn't that just a myth

Did the jiggling tits anime developer ever change out those retard boots?

...

The compiler should avoid that kind of thing, but you can't be sure with this old ass Mono version.
Profile it and see for yourself.

Oi, could I get some criticism on my basemesh so far?

shoulders/tits aren't wide enough

enjoy your botnet, goyim.

Those legs are looking weird as fuck.

It's not a compiler thing, but depends on how the enumerator is implemented.
foreach (foo x in bar) // the foreach doesn't produce garbage, creating the x may or may not{ // ...}


Haven't you heard of Microsoft's latest move, user?

Much-appreciated; will see what I can do about that.


Could you please be more specific?

Proportions are kinda weird but I like it. I'd make her thigs and butt a bit bigger though, looks really flat from the side view.

This is probably the first time I ever see someone use polar topology for the butt.

lol

The upcoming jiggle physics will be something to behold.

What flavor of freedom do you run?

Linux Mint, I might change soon something like to Kubuntu because I am pissed off that Linux Mint packaging gets funky all the time.

Don't exaggerate too much.

It's been quite a while since I used either of these. I use Windows 8.1 almost exclusively for Windows-only applications/games and gamedev. Ubuntu 16.04 is installed to test my game on, because I want to officially support it. My main OS is Arch, which I tried for KDE 5 back when it was new. I just kept it afterward (both Arch and KDE 5).

what latest move? I stripped out telemetry and disabled updates.

You could probably cheat a little and cluster units into groups that are close to each other (in most cases all selected units), generate a path for one of them, then have the others use that as well (assuming they have a straight line to the first node).

They won't do individual updates anymore. You will now have nice cumulative updates, so no more selecting which ones to skip and/or uninstall.

Ever heard of not installing updates?

so what kind of game are you gonna put her in?

Any Unityfags around? I decided to stop being a nodev and am working on babby's first 3d platformer. I posted in the quick questions thread on /agdg/ but since this thread tends to be faster I'll ask here too.

What's the general way to make movement relative to the camera? Using TransformDirection I can match it to the camera's angle 1:1, but how do I strip out the elevation? I just want the rotation.

Transform trans=Camera.main.transform
Vector3 forward=trans.forward;
Vector3 right=trans.right

and then just add those vectors to your position whenever you want to move

Vector3 cameraFlat;Quaternion cameraFlatRot;Vector3 localDirection;Vector3 finaldirection;cameraFlat = camera.transform.forward;cameraFlat.y = 0f;cameraFlatRot = Quaternion.LookRotation(cameraFlat);finalDirection = cameraFlatRot * localDirection;

Yeah, typically from the people whose notebooks I fix after they get a million-billion "weird messages" and "nothing works anymore". I stopped updating now too though. I just hope that my development tools get ported soon. As it stands, Substance B2M and fmod Studio are the last two tools that I need to work on Linux. Once I'm at a point where I use Windows exclusively for Windows-only games, MS can add as much data-mining/telemetry/whatever as they want for all I care.

Oh, that's easy. Thank you.

I'm at my rope's end. Has anyone here used that godawful CMS, Joomla? I just want to access the POST data whens someone fills out a form. This shouldn't be that hard. It shouldn't be hard at all.

Did the dwarves now. Any suggestions to make their gameplay more dwarf fortress like?


Meet the dwarves:

Dwarves are a race of old customs. They say it's nearly impossible to earn a dwarf's trust, but once you do you have a most loyal friend for the rest of your life.
Their civilization has survived through all sorts of cataclysms and dangers, though they weren't always victorious and much of their advanced technology has been lost several times. They covet only the riches of the underground world and wish to expand their territories merely where they don't have to clash with any of the other races, save the pesky goblins, which can be found everywhere. The Dwarven capital was taken a long time ago by the ancient dragon Syragos the destroyer and since then, dwarves have been forced to remain in Derdezor. A rich village indeed, but far from their luxurious capital, and without the magic tower which granted the dwarves all their powers.

To play as a dwarf means to need to earn your pride back. You will be in charge of a small outpost outside Derdrezor, and will be unable to control any of the larger cities until you take back your capital from the grasps of the dragon. Once you do, you can restore your civilization's former glory and dig underground. The outer world is dangerous and full of threats, but the underground will belong only to those who can carve their way into the earth. Discover mines and dungeons, take back the underground from the grasps of goblins and other creatures, but never forget that there is a shadow growing outside your safe mines, preparing to extend its dominance over all the known world.

Like if I wanted to check for $pNameStr or $mapWidth how could I write code that "knows" it should expect a certain variable type? This isn't a matter of generics either, because it deals with common data of an unknown type - I want to actually add T instances and such

Pretty sure everybody already told you all the info you need.

/mmg/ is

Wew

But /mmg/ and that other board for modding are dead. We said we would migrate here if it the general didn't take fly.

grorious bsp folded 1000 times

What, is that what people normally use polar topology for? I just thought it looked better.


A fighting game.

You should skin that butt and see if the topo causes deformation problems.

Just did that; looks fine to me.

...

Was that not what you meant?

dummy

I'm gonna touch that butt.

I'm gonna do it.

That first gif is gonna see some reposting, oh yes.

...

Sorry if I hurt your feelings.

Will the other characters look similar to her or are going to make them different (men, monsters,etc)?
and will there be a demo?

Draconians were the military caste of the more advanced naga race. When the underworld was destroyed, they were the only ones who survived.
Most of them are unable to use magic, and even though they are disciplined among their ranks they tend to be aggressive towards other races. Their strongest become generals, but only the smartest become shamans and leaders, just as it was when they served the naga. Unable to extract resources from the depths, the draconians use their natural talents to hunt and fish. But as their population grows they feel drawn towards the sea, where there are islands to explore and kingdoms to conquer.

To play as a lizarman you have to use brute strength and diplomacy. You don't have very advanced settlements, so if you wish to have a chance to succeed you will need to expand your territory. Your initial island is easy to defend, but invading the continent may prove a difficult task with the beastmen awaiting for you on the other side while humans grow stronger. Perhaps an alliance with the beast race will prove more useful than war at first, although your simple settlements are more than prepared for a quick war.

Ignoring the fact that you'd have to learn a different language, how much skill/knowledge carry-over is there moving from Unity to UE4?

Any interest from anyone in teaming up for a hobby project? I've got a little experience with every developer skill except for actually coding. With a few other amateurs I think we could feasibly hammer out something and just like make game.

hownew.ru

Got ideas for the project? What engine / languages / tools are you experienced with? What is the scope of the project you want to do?

...

Something small and feasible for other amateurs. A turn-based strategy game or a simple horror/survival game. Something that a group of relatively inexperienced nodevs could work together on to get some actual experience.

I've got experience in texturing using a combo of PS, Substance Painter, and Substance Designer, I've done sound engineering via FLstudio11, and I can sort of navigate Blender and ZBrush, though I've not got much talent for modeling.

The ultimate goal should be to get something substantive enough that it can be used on a resume and is a functional, complete project. However, I don't want to start something that won't get finished, so any outside ideas would have to be reasonable for the skill level of the team members.

What, exactly, does this mean user?

Being a developer pretty much means that you, you know, develop.

the grid based pathfinding more or less works
i still need to unfuck the unit stacking though, but at least the formations work
i also made a closest node finder, so the units can go to unreachable nodes this way, like the rectangle in the vid

Steve pls. Artfags are devs too.

One of them is going to be a big metal mobster in a pin-striped suit.

He's a grappler.

that's a slippery slope user
next thing you're gonna tell me that idea guys are devs too

I may as well be an ascended idea guy. I can texture, do sound engineering, have held writing jobs in the past, etc.

Basically everything except actually coding.

Nah, idea guys aren't devs because they can't contribute anything. Art guys can at-least contribute things like concept art, sprites, character designs, level designs, etc.

youre butthole is a slippery slope I bet

New thread