Yay! Comments!
Warning: long post!
hiker {l Wrote}:NowhereMan {l Wrote}:I'd like to start by thanking solistice for going to so much effort to provide semi-customized kart configs (yay!), as well as a quick way to represent that in the kart selection menu. Because of his efforts, I felt encouraged to expand on the idea. Naturally, I've run into some problems.
It would be great if someone would look and tune that part of stk
Certainly could use it, but if you're trying to hint at me to take it up, I'm going to have to dissapoint you. I'm not a programmer in any sense of the word. Give me something straightforward to work with (such as these config files), and I can do something with that. Otherwise, it'll have to be someone else. I'm not complaining, though. Everyone has their focus. If someone wants to help in that regard, I will personally be quite happy, but I'm not going to make any demands.
hiker {l Wrote}:Rather than 3 kart-types, I'd like to expand that into 5 chassis and 5 transmissions. This would give us 25 combinations to use for karts, leaving plenty of room for immediate expansion (at least among standard karts; obviously you could easily blow through these if you include addons). However, it appears the game won't allow me to define new kart tags in stk_config. When I tried and referenced them in a kart config file, it just used the default settings.
Can you post your example here? I think it should be possible to define your own types.
Sure, if you don't mind the post being ridiculously long.
I'm going to truncate a bunch for the sake of brevity. If this isn't clear, let me know and I'll attach a couple files for you to look at.
So, in stk_config, here's what I tried doing (pardon the formatting, but I'm doing a bit of copy-paste from different files which results in different indentations):
- {l Code}: {l Select All Code}
....
<mass value="350"/>
<explosion time="1.5" radius="4"
invulnerability-time="6" />
</heavy>
</kart-type>
<kart-chassis>
<dainty>
<stability
chassis-angular-damping="0"
chassis-linear-damping="0.2"
downward-impulse-factor="5"
roll-influence="0.2"
smooth-flying-impulse="15"
track-connection-accel="2"
/>
<rescue
height="2"
time="1.2"
vert-offset="0.0"
/>
<bubblegum
fade-in-time="1"
speed-fraction="0.1"
time="1.4"
torque="500"
/>
<zipper
fade-out-time="3"
force="200"
max-speed-increase="18"
speed-gain="5"
time="4"
/>
<slipstream
add-power="3"
collect-time="1"
duration="3"
fade-out-time="4"
length="12"
max-speed-increase="7"
min-speed="6"
use-time="7"
width="5"
/>
<swatter
distance="3"
duration="7"
squash-duration="3"
squash-slowdown="0.7"
/>
<mass value="125"/>
<plunger
band-duration="1"
band-fade-out-time="5"
band-force="900"
band-max-length="40"
band-speed-increase="10"
in-face-time="4 5 5.5 5.5"
/>
<explosion
invulnerability-time="8"
radius="2"
time="3"
/>
<engine
brake-factor="15.0"
brake-time-increase="7"
power="340 375 410 440"
max-speed="17 22 27 32"
max-speed-reverse-ratio="0.3"
/>
</dainty>
<light></light>
<standard></standard>
<heavy></heavy>
<massive></massive>
</kart-chassis>
<kart-transmission>
<universal></universal>
<light>
<startup
time="0.2 0.7"
boost="4 2"
/>
<gear
switch-ratio="0.5 1"
power-increase="2.0 1.7"
/>
</light>
<standard></standard>
<heavy></heavy>
<super></super>
</kart-transmission>
Note that I didn't include turn, skid, and nitro. I stated why this is necessary in my OP.
After that, I open a kart.xml file. Let's use Adiumy as an example. Here's the original:
- {l Code}: {l Select All Code}
<kart name = "Adiumy"
version = "2"
model-file = "adiumy.b3d"
icon-file = "adiumyicon.png"
minimap-icon-file = "adiumyicon.png"
shadow-file = "adiumyshadow.png"
random-wheel-rot = "true"
type = "medium"
groups = "standard"
rgb = "0.00 0.70 0.00" >
I would like to be able to do this:
- {l Code}: {l Select All Code}
<kart name = "Adiumy"
version = "2"
model-file = "adiumy.b3d"
icon-file = "adiumyicon.png"
minimap-icon-file = "adiumyicon.png"
shadow-file = "adiumyshadow.png"
random-wheel-rot = "true"
chassis = "dainty"
transmission = "light"
groups = "standard"
rgb = "0.00 0.70 0.00" >
Then all I should need to do is separately copy-paste the predifined turn, skid, and nitro params for each kart. Still a bit of a hassle, but not nearly as bad.
hiker {l Wrote}:Second, I currently have turn, nitro, and skid parameters split between chassis and transmission. Obviously, this doesn't work since the game only recognizes the first instance of an xml tag. But, taking the nitro tag as one example, engine-force needs to be based on the chassis or heavy karts with weak transmissions won't get enough power while light karts with powerful transmissions will get too much. However, the rest of the nitro settings should be based on the transmission since that's the part of the engine I think should be used to determine all the efficiency factors. Similar thinking goes into the other tags I'm trying to split.
Partly this, it would require additional code to handle this - but the main issue: how can you guarantee (at least to a certain degree) that all 25 combinations are balanced?
I'm a lone person doing this as a personal project I thought others might like. If someone else can help with the balancing (or any other) aspect, that would be great! But on my own, I don't know of any way to guarantee it's balanced. For now, I use a spreadsheet to crunch the numbers and keep track of corrections, and then test the karts myself and see how they drive. Are they fun to drive? Can I compete well on any track with any kart? (Whether or not a track is winnable can depend on the number of laps and number of AI karts you choose, so I don't go that far with the criteria. That said, I do expect to be able to win a 20 lap race against any number of AI karts. So far, that holds true.
) Do they all have unique driving characteristics? Those are the primary questions I try to answer. If I can say yes to them all, then that would be a good start, I think.
For the first question, ignoring stability issues, I can answer yes for every kart. Once stability is dealt with, that should be an uncatagorical affirmative.
To the second question, I haven't tested every kart on every track, but with those I have tested (most karts on most tracks), the answer is yes, leading me to feel confident about the others.
To the third question, some of this depends on the kart design, and as things currently stand, it's prohibitively difficult to test different config options on the same kart. I can only tell you that, so far, I have noticed a definite difference in kart handling between them all, and it's not all due to the kart design.
I did
not try to balance them to win the nitro challenge in story mode. Mostly because I find those challenges to be boring and tedious, so I just don't care about it. Universal transmissions can't hold enough nitro to complete it. This could be fixed, but the numbers I'm using right now seem to work pretty well for normal racing, so the only tweaking I intend to do is with that in mind. Of course, if someone comes along and presents a different set of numbers that can also allow every kart to complete the nitro challenge, I'm not going to ignore it. It just isn't on my priority list.
I also did
not try to balance them for AI use. The AI (such as it is) needs fixing. Badly. I think you know this already, so I won't belabor the point.
In any case, trying to balance the options to make up for poor AI isn't on my todo list. However, I certainly won't complain if you take my work and change it to fit your needs. And again, if someone presents changes that address that issue, I won't ignore it out of hand. But my priority is always going to be on making the karts fun
for players to drive. (If I could code, I'd fix the AI, too, but since I can't, I'll just have to wait for someone else to do the work.)
And as a general note, I look mostly at SuperTux difficulty primarily because that's where the greatest changes are happening. If a kart drives well at that setting, it should drive well at the lower settings. If you have any doubts, please do drive some karts at lower diff settings and see how they handle. The basic ratios between the different chassis and transmissions should be similar, if not exactly the same, no matter the difficulty. (Some ratios are going to be different because I don't want to use long decimal parameters. Please concede that much in your critique.
)
hiker {l Wrote}:Third, looking to the future, I'd like to add three basic engine types. .... Thus, the affected settings would need to be modified percentage-wise, which obviously is not currently possible. I'd like to put it on the wish-list, though, for anyone who can code and has the time and will (and assuming it's trivial or at least not too non-trivial).
Well, it can be done of course, but you have to also consider the fact that we have 4 different difficulty settings to take into account.
Naturally. And naturally, I don't have even the slightest inkling of how much trouble that would be to code. Maybe it's trivial, but then again, maybe it requires ripping out great heaping chunks of code and doing all sorts of Byzantine cross-library hacking. So like I said, it's on my wish-list should someone feel up to working on it, but I'm not going to make any demands. Even if it never happens, I'll keep plugging away with what's available, and who knows, maybe I'll figure out some other solution.
hiker {l Wrote}:swatter - lighter karts have shorter reach and duration; if I'm understanding the params correctly, being squashed by lighter karts shouldn't slow you down as much and shouldn't last very long
Well, we don't need any realism tbh - but balanced karts. So, whatever works is fine for me
Actually, what I wanted was for lighter karts to be squashed harder and longer, but that's not how the params function, so this is my backup plan. It's still pretty interesting, I think.
hiker {l Wrote}:I often use an arena to skid in circles
If you can build stk yourself (not that hard), I can give you a patch that would print x,y,z position of the kart. You can plot this to visualise the affect of different parameters on the turn radius.
Ooh! I'll get back to you on that soon as I manage to build it.
hiker {l Wrote}:I always anticipated that some features should be added to STK to allow for heavier karts to push other karts out of their way.
Would be nice, but just setting a high enough mass seems to do the trick.
hiker {l Wrote}:Overall, heavier karts are tankier while lighter karts are zippier. Heavier transmissions are better for twisty tracks (i.e. minigolf) where you have to slow down a lot, so getting back up to speed is important, while lighter transmissions are better for gentler tracks (i.e. barnyard). There is no outright race-winning combo. You should be able to win (or at least compete well, depending on your lap and kart number settings) on any track no matter which kart you drive, so choose one that suits your preferences. I prefer heavier transmissions, myself, but the lighter transmissions are not to be dismissed (I had plenty of fun winning with ElePhPant--heavy chassis, universal transmission--on a 16 kart 20 lap minigolf race).
The interesting and difficult question: how do you want to verify this? For example, if heavier karts get an advantage from collisions, the driver needs to use this feature (and the AI won't know anything about trying to crash into people).
Eh? The AI is always trying to ram me (and each other) off the road. (At least until I lap them, at which point they ignore me for the most part.) Have you ever watched how the AI start? After a second, they all do hard turns into each other like it's a frickin' crash derby. The problem isn't getting the AI to hit other karts, it's getting them to recognize that if they're in a light kart (relative to another), they should try to avoid it. And not to sound like a skipping record, but again, that's a problem with the AI, not the config settings.
And to pre-empt the obvious rebuttle, no, I don't expect the AI to handle weird or outlandish settings. But I don't think the settings I'm using fall into either category. I'm using what I think are fairly rational settings--settings which are perfectly drivable by players, even as they are right now--so I don't see a need to scale them back for the sake of bad AI. And, because the AI can (and does) have instant reaction time, by rights, it should be able to better take advantage of those settings. The fact that it can't is proof that the AI doesn't work well. I don't mind tweaking things, but if I have to choose settings so the AI can take full advantage of them, I might as well leave it to the defaults. Fix the AI, first. Then I'll be more receptive to balancing for the AI.
Anyway, leaving that specific example behind, I'm open to suggestions and help for testing methodology. I don't have the resources or skill to do comprehensive testing, myself. But, for games at least, I'm plenty used to looking at numbers and seeing how they interact without ever playing. So even before I started what little testing I can do, I was pretty confident the numbers I used were at least in the ballpark, if not pitch perfect. I've refined them some with the testing I've done. Also found that some settings didn't do what I thought they did, so made corrections on those. But again, help and suggestions would be quite welcome.
hiker {l Wrote}:What exactly are the kart-track collision problems you have? I am aware of some karts apparently colliding with the ground, and I have seen karts now sometimes stuck at a wall. Is it one of those?
Correct. I've also noticed it's worse at higher speeds, so it's easier to reproduce on higher diff settings.
hiker {l Wrote}:Re suspension: I had to tweak the suspension from 0.8.1 to the next release in order to better support 'driving on the wall' - which is not really included in this release, but if you compile yourself (or just download the tracks from stk-assets) you can have a look at the Newton track.
Sounds cool. Let's see how good I am at building from source, first.
hiker {l Wrote}:Iirc I had to re-activate the downward impulse because of the Newton track
On the other hand, that might indeed cause kart-track collision in some cases *sigh* Physics are a pain
So true. And to be clear, I'm not faulting you. I understand the need to make these kinds of changes for "anti-grav" driving. Being able to drive in loops is something I've been looking forward to, too.
If there's nothing in the game code that can solve the issue, I'll just keep plugging away at the config numbers until something sticks.
hiker {l Wrote}:In 0.8.2, ending the skid is jerky, so that needs smoothing. Works great in 0.8.1, though. Not sure why the discrepancy.
Jerky? You mean the pretty much instantaneous straightening of the kart? That's a thing I have been wanting to improve for a long time ... never got around to that
It took us forever to tune the direction in which you would leave a skid :P
Yep, that's the one! Well, I don't feel so bad about not being able to figure out a solution, now.
Still, it does work better in 0.8.1 for some reason, and that's a head-scratcher for me.
hiker {l Wrote}:I actually haven't seen too much of the karts toppling over in the last months (well, I see some of it, but typically during more crazy physics tests I do). I've seen karts taking a bit too long to get back into horizontal (e.g. if you drive with one side of the wheels on the paper plane in math class), but was always struggling to reproduce the issue to be able to improve it ... so in the end I decided that it might actually be quite rare
This is another one that's easier to reproduce at higher diff settings. And especially on twisty tracks. I'm always getting Konqi port-over-starboard on minigolf, and I consider that kart to be very stable, if not the most stable of all. I'm sure part of it is that the karts are taking too long to get righted, so they keep bouncing around, but there really shouldn't be a reason in most cases for the karts to start tumbling in the first place. I make my comparisons with 0.8.1. If a kart doesn't tumble in 0.8.1 under the same (or worse) conditions, then I consider that a problem. (I'd prefer to even improve on it, some, but for now, I'll be ecstatic if I can just achieve parity.)
hiker {l Wrote}:I hope I didn't sound too negative
Getting more kart types would be really great, but from the previous work I know that it's difficult and easy to get wrong - and while I really would love to have two or three main categories, which combines gives us dozens of different karts, balancing them might be difficult - esp. if you would also consider that for example heavier karts would get a benefit by being able to push other karts around more. This either needs to be tested by human vs human games, or the AI would need to be improved to use this features.
You didn't come off at all negative to me.
And hopefully I don't come off combative or negative, either. If so, I apologize. I appreciate the interest and feedback. Even when I'm basically saying "no" in response, I'm not doing so without a reason. (Might not be a reason you like, but we can't have everything, can we?
) And if you have a counter-argument that you think can persuade me, by all means, let me have it.
I think your worry about heavier karts is unfounded. It's not as simple as you make it sound to push around other karts. I urge you to download the modded kart files I attached in the OP and try them out. Heavier karts
can push lighter karts around, but lighter karts are generally more nimble, so they can avoid it. But yes, I agree there needs to be more and better testing to make sure this and other settings aren't unbalanced.
hiker {l Wrote}:Just for the record: us devs from the core team won't have time to look into this in the near future, since we want to get a release candidate out asap. But we are certainly interested in that,
No worries. There's plenty here to keep me busy, as is. Whenever you get around to it is fine by me.
ardanwol {l Wrote}:I have had just a few kart/track collision problems. They seem to happen in Cocoa Temple, right after you jump over the road, on Snow Mountain, and in Old Mine right before the finish line (once, just about every kart in a 10 kart race had a track collision and ended up in the pond beside the road
). I'll post screenshots of the exact places if I can.
I can get track collisions on pretty much any track. Managed it on a reverse Lighthouse race the other day driving up the chicane. :/ Some karts are better than others, too. Xue seems to collide at the slightest hint of change. On the other end, Gnu glides over dips and bumps the other karts collide against. (Tumbles at the push of a feather, though. *sigh*)
ardanwol {l Wrote}:Just drive Adumy or Sara the racer (especially) and crash into a roadside object at high speed. You'll see what he means by tumbling.
It gets really fun when the AI is driving Sara and you hit her with a heavy kart at high speed!
It's even more fun when it's
you driving Sara. (Travel places; see the world! Upside down!
)
samuncle {l Wrote}:We are open improvement to the kart system. Now you have to understand several things
1) It's relatively new we still need to tweak it
Completely understandable. No arguments from me on that.
hiker {l Wrote}:samuncle {l Wrote}:2) It's a nightmare to balance it. Let's imagine 3 parameters, 15 karts, 4 difficulties level, 20 tracks. Which means 3 * 15 * 4 * 20 = 3600 different cases. Which is a HUGE amount of work to test them and be sure everything works and is balanced. AS a rule of thumb I prefer to keep the number of options low and be kiss (keep it simple).
I think it is actually impossible to balance them that generally - we would have to accept that certain tracks favour certain type of karts - but that only means that it is more work to balance it all.
Besides which, I think those numbers are way off base.
You can remove the track parameter because that's not something that needs balancing through kart configs. It's necessary for the karts to be able to handle various track
situations,, and we can use different tracks to help test those situations, but actually racing the tracks is up to the player and AI. And as for those situations, there are only a few that really need testing. Steep hills, tight corners, jumps, track getting sideways/upside-down (currently, I can only test that on Cocoa), hard bumps/dips,....there's really not that much that needs testing. If a kart can handle the worst, then it can handle easier stuff, too. (On that note, I'd really like to see old Minigolf come back so I could test its switch-back in 0.8.2. I'm pretty sure it won't drive the same as in 0.8.1, but until I can test it, I won't know what I need to change.)
As for difficulties, there are very few config options touched by that: engine power and max-speed, and plunger in-face-time. That's pretty much it. So maintain the power-weight ratios across difficulties and don't over-tweak the plunger settings. All that's left then is tweaks to improve how the karts handle. In other words, if a kart drives well at SuperTux diff, then it'll be fine at lower diffs because the lower power and speeds and shorter plunger times make it easier to drive the karts for both players and AI.
Last, we can also ignore the number of karts. Not because it's necessarily unimportant, but because it's irrelavent. Karts are what take the config parameters in the first place. We would actually be
limiting how much we need to test if we included karts. I'm providing 25 combinations as a starting point. There aren't that many karts in the game as standard, so it's pretty much impossible to test all 25 combinations without including addon karts. (Or we can duplicate existing karts, I guess.)
Or were you (
samuncle) suggesting we should test every possible combination with every kart? Because if so, I have to point out there is no reason to do so. For example, why should Adiumy have anything heavier than a light chassis? Or why should Pidgeon or Suzanne, both karts that look like they can handle off-roading, get anything less than a heavy transmission? So no, we don't need to test every combo with every kart. At most, pick the combos that make sense and test those. For my part, I decided to try to make sure each standard kart had a unique combo that made sense. Of course, if you want to make an in-game method for choosing chassis and transmissions (and other potential kart settings), then I will agree we need to test all possible combinations. Until then, though, it's a waste of time.
TL;DR: I don't have the resources to throw everything and the kitchen sink at testing my settings. I have to test smart, not hard. Please, at least respect my limitations.
hiker {l Wrote}:samuncle {l Wrote}:AS a rule of thumb I prefer to keep the number of options low and be kiss (keep it simple). 3 classes, well done is sufficient IMHO. Light, Medium, Heavy. We might do some karts with particular options (like nolok).
I would actually prefer more variety. Just three classes is rather boring.
And why bother with a config file if you're just going to limit it? 25 combos is really small when you consider that each parameter could be changed to practically anything, thus providing limitless options. What's really impressive to me (in a sad way) is how long STK has been around and had these config options and
no one has touched them until now.
hiker {l Wrote}:samuncle {l Wrote}: 3) One interesting parameter that could be added is nitro consumption it would be relatively easy to add something like that and that (IMHO) would not influence too much the balance
We already have this parameter, but (as mentioned) I should check if this still works as expected. We changed the nitro behaviour to use one unit of nitro whenever you press it (as opposed to use a certain smaller amount every frame you have it pressed, which resulted in kind of cheating by pressing nitro often for a shorter time).
Right. And I've already made some changes in that regard in the nitro settings. Heavier transmissions hold more nitro but also use more, so relatively speaking, they can't boost as often because the nitro tank:consumption ratio is worse. (Currently 15, 10, 8.3, 7.5, 7 -- which obviously could use work, and I'll come back to it again at some point, but is still quite playable.) The main issue is the AI, which doesn't know to use nitro only once and then wait for nitro duration (you could use fade-out-time as an extra fudge factor--maybe based on difficulty) before hitting it again.
Visually, would be nice to see the nitro boost flames last for the entire duration, too, but that's me being nitpicky.
Holy rinky-doodle, was that long! Whew!