Time |
Nick |
Message |
00:18 |
hmmmm |
[06:25 PM] <celeron55> often the best result is achieved by considering the first implementation just a prototype |
00:19 |
hmmmm |
well |
00:19 |
hmmmm |
there's a good way to justify horrible code quality (which will often never be fixed) |
00:20 |
hmmmm |
especially when whatever it is becomes an API standard |
00:22 |
jojoa1997|Tablet |
ShadowNinja nice :-) |
00:43 |
|
dexter0 joined #minetest-dev |
01:52 |
|
salamanderrake joined #minetest-dev |
02:20 |
|
Deivan joined #minetest-dev |
03:44 |
|
Deivan joined #minetest-dev |
03:51 |
|
celeron55 joined #minetest-dev |
05:10 |
|
emptty joined #minetest-dev |
06:19 |
|
celeron55 joined #minetest-dev |
07:01 |
|
serengeor joined #minetest-dev |
07:03 |
|
darkrose joined #minetest-dev |
08:05 |
|
emptty joined #minetest-dev |
08:53 |
|
Jordach joined #minetest-dev |
08:53 |
|
Jordach joined #minetest-dev |
08:53 |
|
ImQ009 joined #minetest-dev |
09:04 |
|
iqualfragile joined #minetest-dev |
09:13 |
|
darkrose joined #minetest-dev |
09:13 |
|
darkrose joined #minetest-dev |
09:25 |
|
darkrose joined #minetest-dev |
09:25 |
|
darkrose joined #minetest-dev |
09:39 |
|
emptty joined #minetest-dev |
10:01 |
iqualfragile |
if someone would be so kind to merge that: https://github.com/minetest/minetest/pull/648 in? |
10:02 |
iqualfragile |
that would fix the serverlists on the ubuntu installations and that good for marketshare |
10:16 |
Taoki |
http://forum.minetest.net/viewtopic.php?pid=84449 For everyone interested in hardware lighting. Hoping we can try getting something done one way or another and finding an idea to make this possible |
10:17 |
|
proller joined #minetest-dev |
10:26 |
|
darkrose joined #minetest-dev |
10:45 |
|
Zeg9 joined #minetest-dev |
10:55 |
|
darkrose joined #minetest-dev |
11:32 |
|
emptty joined #minetest-dev |
12:01 |
|
PilzAdam joined #minetest-dev |
12:17 |
|
darkrose joined #minetest-dev |
13:02 |
|
darkrose joined #minetest-dev |
13:04 |
|
PilzAdam joined #minetest-dev |
13:14 |
|
hmmmm joined #minetest-dev |
13:21 |
|
proller joined #minetest-dev |
13:30 |
|
proller joined #minetest-dev |
13:34 |
|
darkrose joined #minetest-dev |
13:34 |
|
darkrose joined #minetest-dev |
13:46 |
|
ecube_ joined #minetest-dev |
13:55 |
|
ImQ009 joined #minetest-dev |
13:59 |
|
troller joined #minetest-dev |
14:16 |
|
emptty joined #minetest-dev |
14:21 |
|
darkrose joined #minetest-dev |
14:21 |
|
darkrose joined #minetest-dev |
14:24 |
|
blue42u joined #minetest-dev |
14:25 |
|
blue42u left #minetest-dev |
14:37 |
|
troller joined #minetest-dev |
14:41 |
|
darkrose joined #minetest-dev |
14:58 |
|
OWNSyouAll joined #minetest-dev |
15:00 |
|
darkrose joined #minetest-dev |
15:07 |
|
proller__ joined #minetest-dev |
15:21 |
|
emptty1 joined #minetest-dev |
15:27 |
|
serengeor joined #minetest-dev |
15:41 |
|
emptty joined #minetest-dev |
15:49 |
|
Calinou joined #minetest-dev |
15:54 |
|
swilde joined #minetest-dev |
15:55 |
swilde |
Hi, what is the right way to get features into minetest? I wonder besause https://github.com/minetest/minetest/pull/365#issuecomment-16393860 stalled and I can't see why/what to do to get progress... |
15:58 |
Calinou |
by poking PilzAdam endlessly |
15:58 |
PilzAdam |
annoy core devs to merge it in |
15:59 |
PilzAdam |
s/to/until they |
16:00 |
Calinou |
you are a core dev 8) |
16:01 |
Exio |
the right way? |
16:01 |
PilzAdam |
this probably needs a rebase |
16:01 |
Exio |
PilzAdam: merge mouse_sensitivy and crosshair_image! |
16:02 |
PilzAdam |
I guess this is the branch we want to merge in: https://github.com/matttpt/minetest/compare/ipv6-revised |
16:02 |
PilzAdam |
(according to the comments by xyz and c55) |
16:02 |
proller__ |
+1 |
16:02 |
PilzAdam |
but there is a mistake in minetest.conf.example, ipv6_server is set to false in defaultsettings.cpp |
16:03 |
PilzAdam |
it also needs testing |
16:03 |
PilzAdam |
with backwards compatibility etc. |
16:04 |
swilde |
Maybe it would help to put some of this information in the pull-request? The original author seems not to know about it... |
16:04 |
PilzAdam |
just linke the discussion |
16:04 |
PilzAdam |
*this |
16:04 |
proller__ |
i think we not need in gui checkbox |
16:05 |
swilde |
PilzAdam: Sorry, how do I link to an IRC discussion? |
16:05 |
Exio |
you get the log from the site on the topic |
16:06 |
Exio |
and click at the hour |
16:06 |
swilde |
Exio: Oh, tnaks! |
16:06 |
PilzAdam |
swilde, in the logs: http://irc.minetest.ru/minetest-dev/2013-04-16#i_3022715 |
16:06 |
|
Zeg9 joined #minetest-dev |
16:10 |
PilzAdam |
I have rebased the branch |
16:12 |
PilzAdam |
https://github.com/PilzAdam/minetest/tree/ipv6-revised |
16:12 |
hmmmm |
oh wow, matttpt is still around? |
16:13 |
Calinou |
yes |
16:13 |
PilzAdam |
hm... there is not enough space in the settings tab |
16:13 |
PilzAdam |
Ill remove it from the GUI |
16:13 |
proller__ |
+1 |
16:13 |
proller__ |
nobody will use it |
16:14 |
hmmmm |
indeed^ |
16:14 |
hmmmm |
i don't get why people worry about making ipv6 support optional |
16:15 |
hmmmm |
is it really that difficult to add #ifdef USE_IPV6 around things? |
16:15 |
hmmmm |
but no, it's already been done that way, so they're arguing to do more work to remove an option that in no way impacts people who want to use it |
16:16 |
swilde |
PilzAdam: I agree, it shouldn't be in the gui, but an option in minetest.conf is mandatory. |
16:16 |
hmmmm |
when i go to install programs from ports, i like that i see a neat checkbox with USE_IPV6 to the side of it |
16:16 |
hmmmm |
and there's no reason for such a thing to be in the gui at all. people who want ipv6 know what it is |
16:17 |
proller__ |
i think in year 2013 USE_IPV6 must be enabled everywhere by defaut |
16:17 |
Exio |
just a question - why not for the mouse_sens option? it would be useful for some people and is a ... "2 lines" change |
16:18 |
proller__ |
and USE_IPV4 now can be optional 8) |
16:18 |
hmmmm |
proller, that's crazy |
16:18 |
hmmmm |
ipv6 is definitely NOT widespread |
16:18 |
hmmmm |
it's a very small handful of people who use it -- no, a small handful of people who are ABLE to use it |
16:19 |
Calinou |
1% of internet traffic |
16:19 |
proller__ |
its because USE_IPV6 checkboxes not enabled by default in many soft 8) |
16:19 |
hmmmm |
umm |
16:19 |
Jordach |
highlight: proller__ is using ipv6 |
16:19 |
hmmmm |
or maybe it's because most ISPs don't even have ipv6 support |
16:19 |
Zeg9 |
Yeah, ISPs are the main problem :) |
16:19 |
hmmmm |
all they do is NAT trunking |
16:19 |
proller__ |
yes, but you can use ipv6 via one external v4 |
16:19 |
Calinou |
ipv6 might keep NAT |
16:19 |
hmmmm |
and ipv6 will probably never be necessary |
16:19 |
Calinou |
some trolls wanted to put that in linux kernel recently |
16:20 |
hmmmm |
ipv6 natting? that's ridiculous |
16:20 |
Calinou |
probably dropbox employees |
16:20 |
Calinou |
8) |
16:20 |
StrayBytes |
My setup causes trouble with IPv4 users tryingto connect to a server running at my location. |
16:20 |
Calinou |
ipv6 will make not using domains painful though :3 |
16:20 |
PilzAdam |
so, someone who actually uses IPv6 has to test the rebased branch |
16:20 |
hmmmm |
which is proller |
16:20 |
proller__ |
5-10% of userc now CAN use ipv6 via teredo and 6to4 |
16:20 |
PilzAdam |
this one: https://github.com/PilzAdam/minetest/tree/ipv6-revised |
16:20 |
hmmmm |
I am not aware of anybody else who can use ipv6 |
16:21 |
hmmmm |
without having to set up teredo and whatnot |
16:21 |
Calinou |
noone wants to buy cisco stuff to be able to use ipv6 |
16:21 |
hmmmm |
you don't need to do _that_ |
16:21 |
hmmmm |
but it is more trouble than it's worth ;) |
16:21 |
* proller__ |
compiling on odroid.. |
16:21 |
Exio |
in 2013 proller__ got ipv6 so now it is cooler than before |
16:21 |
hmmmm |
lol |
16:22 |
Exio |
btw, what about the mouse_sensitivy option? |
16:22 |
Calinou |
proller__: how fast? :D |
16:22 |
hmmmm |
i say, why not |
16:22 |
hmmmm |
some others have objections to it though |
16:22 |
Calinou |
mouse sensitivity should be merged ASAP |
16:22 |
Calinou |
really |
16:22 |
Calinou |
only people like 0gb.us would object to it |
16:22 |
hmmmm |
pilzadam doesn't like it |
16:22 |
PilzAdam |
what? |
16:23 |
hmmmm |
i'm not sure why |
16:23 |
hmmmm |
or maybe i'm confusing people |
16:23 |
PilzAdam |
hmmmm, liar! |
16:23 |
* swilde |
uses ipv6 for about five years... |
16:23 |
|
rubenwardy joined #minetest-dev |
16:23 |
PilzAdam |
I dont care about a mouse sensivity config |
16:23 |
hmmmm |
people have very strong opinions about small things like that |
16:23 |
swilde |
PilzAdam: your branch now matches HEAD + ipv6? |
16:23 |
PilzAdam |
its rebased, yes |
16:23 |
hmmmm |
but when it comes to changing the entire MapNode structure, woohoo, everybody's all for it |
16:24 |
Exio |
that is because nobody knows what MapNode really does |
16:24 |
swilde |
PilzAdam: I'll give it a try asap... |
16:25 |
PilzAdam |
somone also try to connect with a IPv6 client to a IPv4 server and vise versa |
16:25 |
swilde |
PilzAdam: ok |
16:25 |
hmmmm |
if i were going to do colored lighting at that level, what i would do is try to figure out how to avoid needing a night lightbank and using those 4 bits for another component, and using the 4 unused bits of the content for the third component |
16:25 |
swilde |
PilzAdam: I expect it to be dual stack enabled? (serving v4 and v6 at the same tim e that is) |
16:25 |
PilzAdam |
someone has to set up a IPv6 server first, *cough* proller__ |
16:26 |
hmmmm |
which would produce other problems too :) |
16:26 |
PilzAdam |
swilde, theres a setting #ipv6_server for it |
16:26 |
PilzAdam |
so I guess not |
16:26 |
hmmmm |
but it's better than doubling the size of everything |
16:26 |
PilzAdam |
comment by mattpt: "(an IPv6 server is normally restricted to IPv6 clients)" |
16:26 |
hmmmm |
dynamic lighting remains the best solution; it just has a problem that hasn't been solved *yet* |
16:27 |
Calinou |
dynamic lighting with shadows == slow |
16:27 |
|
dexter0 joined #minetest-dev |
16:27 |
hmmmm |
gotta pay to play |
16:27 |
Calinou |
it works nice on today's mid/high-end hardware, but the community response will be, "no, i keep my P4" |
16:27 |
Calinou |
tesseract = 120FPS for me on max settings |
16:27 |
hmmmm |
if you really want fancy colored lighting you need the hardware |
16:27 |
hmmmm |
it's better than changing literally everything for a rather minor feature |
16:28 |
Exio |
then people will hate you because their pentium4+intel ggp from the 2004 will not be able to hande that! |
16:28 |
hmmmm |
really? i've heard arguments that are the opposite of that |
16:28 |
swilde |
PilzAdam: that sounds of little use, as not all users are ipv6 enabled. The cononical solution is to serve both Protokolls (which is what my http and smtp, pop, imap and dns servers do...) |
16:28 |
swilde |
PilzAdam: I'll try it anyway |
16:29 |
hmmmm |
people have been crying "oh everybody has such fast hardware now, it doesn't matter if everything is twice as big and takes 3x as long and blah blah" |
16:29 |
Exio |
hmmmm: nah, just saying, you can't make everybody happy :P |
16:29 |
hmmmm |
but this is one issue i'm not budging on |
16:29 |
PilzAdam |
swilde, we will see when we try to connect an v4 client to a v6 server |
16:29 |
proller__ |
IPv6 server must serve v4 and v6 clients |
16:29 |
hmmmm |
JSON in the config is something that's pretty radical that i'm willing to consider though |
16:30 |
swilde |
proller__: well, _should_ not must... |
16:31 |
proller__ |
ok, must listen tcp46 and udp46, and should serve 4 and 6 clients |
16:33 |
swilde |
proller__: still not fully true: this is what dual stack implementations do (and what is sensible in most cases) but IPv6 it self does not depent on IPv4 and you can build IPv6 only networks with systems which don't provide v4 at all. |
16:34 |
proller__ |
ok, but next 5-10 years we need in dual stack |
16:34 |
swilde |
proller__: ACK |
16:40 |
Calinou |
hmmmm: I have been crying that, but certainly not other people |
16:41 |
proller__ |
1835.91user 63.82system 8:56.41elapsed 354%CPU (0avgtext+0avgdata 886672maxresident)k |
16:41 |
proller__ |
111456inputs+85040outputs (0major+4833720minor)pagefaults 0swaps |
16:46 |
|
swilde left #minetest-dev |
16:47 |
|
rubenwardy left #minetest-dev |
16:48 |
|
troller joined #minetest-dev |
16:48 |
troller |
odroid.setun.net : 30000 |
16:49 |
troller |
now i have no gui client to test 8( |
16:51 |
troller |
PilzAdam, ÑÑ„Ñ‚ нщг ьфлу цшт32 игшдв акщь ершы икфтÑÑ€ , |
16:51 |
troller |
can you make win32 build from this branch ? |
16:52 |
PilzAdam |
yes, but let me eat something first |
16:52 |
PilzAdam |
and I also cant connect to the server |
16:53 |
troller |
something wrong |
16:55 |
troller |
its not listening ports |
16:55 |
troller |
but wrote 20:55:30: ACTION[main]: Server for gameid="minimal" listening on port 30000. |
16:56 |
|
blue42u joined #minetest-dev |
16:56 |
|
emptty joined #minetest-dev |
16:57 |
blue42u |
Where is the code that adds a piece of the map as a scene node to the scene? |
16:57 |
blue42u |
I've been digging to no avail. |
16:59 |
hmmmm |
no idea, but if it comforts you, i've been working on the hud stuff https://github.com/kwolekr/minetest/commits/luahud |
17:00 |
hmmmm |
we didn't forget about it |
17:00 |
blue42u |
Oh, I know. |
17:00 |
blue42u |
I peek at the logs every so often. 8) |
17:01 |
hmmmm |
you're a CS student, right? |
17:01 |
blue42u |
Um, well.... That's a long story.... |
17:01 |
hmmmm |
it's probably beneficial if i tell you better ways of how to do things |
17:01 |
blue42u |
Yeah. |
17:01 |
hmmmm |
if you're going to be a programmer |
17:02 |
blue42u |
Well, of course I am. |
17:02 |
hmmmm |
there are a real lot of details that i had to change but |
17:02 |
hmmmm |
some big, broad things you should know: |
17:03 |
hmmmm |
use an array when you have a mapping of sequential IDs to objects |
17:03 |
hmmmm |
don't just use numbers and add a comment that says what they mean, that's the purpose of a macro or enum |
17:04 |
hmmmm |
also you need to use an enum when specifying things like the stat value or type, that's the standard for the mod API |
17:04 |
hmmmm |
there are handy enum functions in scriptapi_types.cpp |
17:04 |
hmmmm |
hmm, what else... |
17:04 |
hmmmm |
oh, make sure that you don't leak memory, that's a big thing |
17:05 |
Calinou |
lol |
17:05 |
hmmmm |
i don't think you ever deleted a hud element after you removed it, there's a leak |
17:05 |
Calinou |
since when commercial programmers care about code correctness |
17:05 |
Calinou |
they care about money |
17:05 |
Calinou |
be realistic |
17:05 |
blue42u |
I thought that the map would delete it itself. |
17:05 |
hmmmm |
it probably varies from place to place, but the commercial code i've seen is very high in quality |
17:06 |
hmmmm |
blue42u, nope |
17:06 |
|
rubenwardy joined #minetest-dev |
17:06 |
blue42u |
Darn. |
17:06 |
Calinou |
hmmmm: terasology approves |
17:06 |
hmmmm |
also logic shouldn't all be in the scriptapi functions, they're just interfaces to what actually happens elsewhere |
17:06 |
Calinou |
and *cough*windows*cough* and *cough*AAA games*cough* |
17:07 |
hmmmm |
terasology isn't commercial... terasology is some guy's personal project he's charging for, |
17:07 |
|
blue42u_ joined #minetest-dev |
17:07 |
hmmmm |
windows code quality typically very good if you've seen it |
17:07 |
hmmmm |
bloaty but clean |
17:07 |
Calinou |
"he's charging for?" => since when is he paid? |
17:07 |
Calinou |
it* |
17:07 |
hmmmm |
i thought terasology wasn't free? |
17:07 |
Calinou |
it is |
17:08 |
Calinou |
the guy making it works as a java programmer iirc |
17:08 |
hmmmm |
erm anyway |
17:08 |
hmmmm |
yeah and he's ridiculous with the OO abstraction |
17:08 |
hmmmm |
and it shows in the source tree |
17:08 |
hmmmm |
anyway |
17:08 |
hmmmm |
blue42u_, also make sure to use v2f instead of irr::vector2d<float> and so on |
17:09 |
blue42u_ |
You found a rare instace. :) |
17:09 |
hmmmm |
also the code style we follow has pointer asterisks on the other side of the type, not included with the type |
17:09 |
ImQ009 |
2d vectors.... |
17:09 |
ImQ009 |
hmmmm |
17:09 |
blue42u_ |
That piece I was tinkering with at the time you took over. |
17:09 |
hmmmm |
use switch statements instead of huge if else if blocks |
17:10 |
hmmmm |
don't make three separate functions that each take a different parameter, especially if you're already passing the parameter type, try using void * |
17:10 |
ImQ009 |
Unless THAT vector isn't what I think it is |
17:10 |
hmmmm |
or a template if you feel C++y enough |
17:10 |
blue42u_ |
Then I have to typecast or know what I'm doing. ;) |
17:10 |
hmmmm |
also not sure why you pass const references as parameters to functions.... doesn't quite make sense |
17:11 |
* Calinou |
understood why he is only using lua and not C++ |
17:11 |
hmmmm |
and you have the Server functions take a player name and do another lookup of the player which is exactly the same thing you just did in the scriptapi function |
17:11 |
Calinou |
don't blame people using high-level languages, really 8) |
17:12 |
hmmmm |
don't use iterators when unnecessary either |
17:12 |
hmmmm |
you can have much cleaner code without |
17:12 |
blue42u_ |
I beleve that's what I saw in other places too... |
17:12 |
hmmmm |
e.g. https://github.com/kwolekr/minetest/commit/d99cacd4806029119a9f25cea60da08f81edf598#L3R170 |
17:12 |
hmmmm |
also you don't need to create static text controls and destroy them every single frame, that's crazy |
17:12 |
hmmmm |
there's an irrlicht drawtext function you could use |
17:12 |
blue42u_ |
Oh, really? |
17:12 |
hmmmm |
also deque is notably slower than other data structures, FYI |
17:13 |
hmmmm |
i still have a lot more stuff to do |
17:13 |
blue42u_ |
Hm. And your fix with removing iterators will seg-fault. |
17:13 |
hmmmm |
how so? |
17:14 |
blue42u_ |
...if one of the elements was removed. You will end up accessing freeed memory. |
17:14 |
blue42u_ |
Not all hud element ids are in a row. |
17:14 |
hmmmm |
yes, i would add a null check there |
17:15 |
hmmmm |
i didn't completely finish that function, i still have much more to do there |
17:15 |
blue42u_ |
brb |
17:16 |
hmmmm |
it was probably good for me to do this overall, since it opened an opportunity to separate hud things from game.cpp which is much needed |
17:19 |
hmmmm |
still very much a work-in-progresss |
17:19 |
hmmmm |
but when it's done it'll be absolutely perfect code in every way possible |
17:21 |
blue42u_ |
Hmmm.... absolutely perfect.... |
17:22 |
hmmmm |
oh, by the way, what's the point of the inventory HUD element type? |
17:22 |
blue42u_ |
Hotbar #2. :) |
17:22 |
hmmmm |
i'm not sure it's of much use unless you can remove the first hotbar |
17:22 |
blue42u_ |
Might be useful. |
17:23 |
hmmmm |
what would be good is if it didn't necessarily display the main inventory |
17:23 |
hmmmm |
i want to do something like that where you can choose which range of inventory elements to display |
17:23 |
blue42u_ |
Didn't you see? You specify the list to use. |
17:23 |
hmmmm |
i didn't see that part sorry |
17:24 |
hmmmm |
ahhhhh |
17:24 |
hmmmm |
e->number |
17:24 |
hmmmm |
just another random note, actionstream is for events that are happening in the game that server hosters would like to keep logs of, like people placing nodes or joining the game, w/e |
17:24 |
hmmmm |
errors go in errorstream |
17:25 |
hmmmm |
lesser errors that can be safely ignored go into verbosestream |
17:27 |
blue42u_ |
:/ Didn't see those. |
17:29 |
blue42u_ |
But, can you awnser my original question? |
17:29 |
hmmmm |
nopr |
17:29 |
blue42u_ |
:/ Anyone else? |
17:33 |
blue42u_ |
Ohhhhh. |
17:34 |
blue42u_ |
Never mind. I think I found it. |
17:34 |
blue42u_ |
Thanks for the tips hmmm! |
17:35 |
|
blue42u_ left #minetest-dev |
17:35 |
hmmmm |
no problemoo.. |
17:35 |
hmmmm |
agh i should've pasted the link to the code style guidelines page |
17:51 |
|
18VAAZAWE joined #minetest-dev |
17:52 |
|
iqualfragile joined #minetest-dev |
18:22 |
|
sapier joined #minetest-dev |
18:30 |
|
iqualfragile joined #minetest-dev |
19:09 |
|
StrayBytes joined #minetest-dev |
19:11 |
|
aheinecke joined #minetest-dev |
20:29 |
|
proller joined #minetest-dev |
20:59 |
|
sapier1 joined #minetest-dev |
21:13 |
|
darkrose joined #minetest-dev |
21:36 |
|
RealBadAngel joined #minetest-dev |
21:38 |
hmmmm |
hmmm |
21:38 |
Exio |
wut? |
21:39 |
hmmmm |
should've asked blue42u while he was around what https://github.com/kwolekr/minetest/commit/18f26e84684f0d082057f29ca4e40dee9874cf6a#L6R849 this was |
21:40 |
hmmmm |
did he actually intend for i to always be 3, or did he want it to be 3 if right is true? |
21:43 |
hmmmm |
that whole bunch of code is pretty "huh?".. I think what is intended is that it adds a bar on the right if there are 3 or more bars on the right already |
21:46 |
hmmmm |
actually nevermind, i don't understand what that code is even attempting at all |
21:47 |
PilzAdam |
delete it and see whats broken? |
21:47 |
hmmmm |
erm |
21:47 |
hmmmm |
i know what it does, i just don't know what logical steps it's taking |
21:48 |
RealBadAngel |
hi hmmm, im pretty close to finish with new drawtype that uses meshes |
21:49 |
hmmmm |
ahh nice |
21:49 |
hmmmm |
hrm |
21:49 |
PilzAdam |
<VanessaE> inb4 PilzAdam says it violates the blocky/voxel concept |
21:49 |
VanessaE |
^^ |
21:50 |
VanessaE |
do it anyway, ignore the naysayers :) |
21:50 |
hmmmm |
the position vector in the lua hud code is relative, from a range of 0.0 - 1.0, but he's setting the Y position to numbers strictly above 1, so it doesn't really make much sense.... |
21:50 |
RealBadAngel |
all can be abused to make round things in the voxel world |
21:50 |
RealBadAngel |
even nodeboxes |
21:50 |
hmmmm |
i think this code probably didn't work properly in the first place which explains why i'm having trouble understanding it |
21:50 |
PilzAdam |
RealBadAngel, only nodeboxes |
21:51 |
RealBadAngel |
luaentities too |
21:51 |
PilzAdam |
ok, thats hacky |
21:52 |
RealBadAngel |
i can easily import thousands of polygons model and use it in mt |
21:52 |
RealBadAngel |
because irrlicht allows using that |
21:53 |
RealBadAngel |
but thats not the point |
21:55 |
sapier |
does anyone consider writing a collision algorithm for mesh structures? |
21:55 |
sapier |
this is one of the big problems with mesh entities! |
21:55 |
RealBadAngel |
i think i will have to solve it |
21:56 |
RealBadAngel |
first of all i have to find out how to make proper selection boxes for them |
21:56 |
sapier |
current collision algorithm only works for blocks ... |
21:56 |
sapier |
no not quite correct ... it works only for aligned blocks, it doesn't even support rotation |
21:57 |
VanessaE |
RealBadAngel: voxelize the model at load time to a really low resolution (say 4x4x4 per node), use the result as your collision box(es). |
21:57 |
sapier |
if you fix those issues in a performant way I'll be very very very thankfull :-) |
21:57 |
VanessaE |
that should give you a good balance between accuracy and speed. |
21:58 |
RealBadAngel |
im at stage i managed to display meshed node at all |
21:58 |
RealBadAngel |
now i have to give it 6d facedir |
21:58 |
RealBadAngel |
and selection boxes |
21:58 |
RealBadAngel |
which should be outline of a meshed object |
21:58 |
sapier |
vanessae I hope this wont result in server only doing collisionhandling but nothing else :-) |
21:59 |
VanessaE |
heh |
21:59 |
VanessaE |
collision checking with a bunch of boxes is insanely fast compared to checking a hundred arbitary polys |
21:59 |
RealBadAngel |
not the fixed box |
21:59 |
sapier |
collision handling is done by looping through collision boxes ... loops are performance killers if you add lets say 100 boxes for each model its 100x100 for 2 mobs 100x100x100 for three ....... |
22:00 |
VanessaE |
yeah but if each pass through the loop only takes 10ns, who cares if you have hundreds? |
22:00 |
VanessaE |
you don't do collision checking against an object if you aren't in range of it |
22:00 |
VanessaE |
and if you do, you're an idiot ;-) |
22:00 |
RealBadAngel |
for collision maybe check the object, find out all maximum of x, y, z |
22:01 |
sapier |
100x100x100x100x100x100x100x100x100x100 is only 10 mobs! |
22:01 |
RealBadAngel |
and create just a single box using them |
22:01 |
VanessaE |
sapier: if a mob stands 2 nodes tall, that's only 4x4x8 = 128 rectilinear collision boxes |
22:01 |
sapier |
I don't understand what the smaller boxes would be good for then? |
22:01 |
VanessaE |
(in my example) |
22:02 |
RealBadAngel |
i mean box made out of (min_x, min_y,min_z), (max_x,max_y,max_z) |
22:02 |
sapier |
so 128x128x128? ;-) |
22:02 |
VanessaE |
sapier: no, 128 * however many MOBs you have within a couple of nodes of your position. |
22:02 |
VanessaE |
e.g. maybe 128 * 2 or 3 in practice |
22:03 |
sapier |
collision handling doesn't work this way atm |
22:03 |
VanessaE |
C++ could loop through that in a matter of a few hundreds microseconds. |
22:03 |
VanessaE |
if it doesn't work this way, it's being done wrong then |
22:03 |
RealBadAngel |
hey hey, look what i wrote |
22:03 |
RealBadAngel |
i mean single box for each object |
22:03 |
sapier |
vanessae remember collision handlin was already source of one big performance bug |
22:03 |
VanessaE |
RealBadAngel: take your idea and scale it down and multiply = my idea |
22:04 |
VanessaE |
sapier: then collision handling was badly coded to begin with |
22:04 |
sapier |
if a mob with 128 boxes is moving on a crowded willlow it most likely will collide with many others |
22:04 |
sapier |
yes vanessae it is, it's a algorithm for a static blocky workd |
22:04 |
VanessaE |
look, somewhere in the engine there's code that updates the position of an object. THAT is where the collision detection should happen. I get the impression that this is not the case. |
22:04 |
sapier |
that is case |
22:05 |
VanessaE |
then something is being done badly wrong |
22:05 |
sapier |
updating position means get old pos + add stepsize * velocity + add stepsize * acceleration -> new pos ... check all collisionboxes between old and new |
22:06 |
VanessaE |
collision boxes are already rectilinear regions like RBA suggested. It should not take more than a few nanoseconds, maybe a microsecond, to make such a comparison. |
22:06 |
VanessaE |
this is video game 101 stuff here. |
22:07 |
RealBadAngel |
what for scaling down? takin my idea of extremes it will always end with minimum sized box that contains the complex object |
22:07 |
RealBadAngel |
defined only by two vertices |
22:07 |
VanessaE |
every old 8-bit computer of the 1980's was able to do such collision checking (in 2d of course) without spending huge amounts of resources. |
22:07 |
sapier |
you're wrong vanessa, accelerated movement adds lots and lots of objects to this calculation |
22:07 |
sapier |
not in regular case but in worst case wich will happen every now and then |
22:07 |
* VanessaE |
sighs |
22:08 |
sapier |
i don't want to stop rba from adding this but only check if/what performance issues are added |
22:09 |
VanessaE |
the problem with checking for acceleration is the same old issue it always in: setting reasonable-but-slightly-ridiculous limits on how fast an object can move or how quickly it can accelerate to a given speed. |
22:09 |
VanessaE |
is* |
22:09 |
RealBadAngel |
http://www.physics.emory.edu/~weeks/software/sphere.gif |
22:09 |
Exio |
hi |
22:10 |
RealBadAngel |
box as a collission box for spherical object |
22:11 |
VanessaE |
RealBadAngel: in my suggestion, the collision box in that example would be composed of several smaller in a roughly spherical layout. |
22:11 |
sapier |
I have no doubt this works for simple geometric objects |
22:11 |
VanessaE |
smaller boxes. |
22:11 |
RealBadAngel |
with extremes you will always end up with a box |
22:11 |
RealBadAngel |
single box |
22:12 |
RealBadAngel |
no matter what |
22:12 |
sapier |
yes but we need support for rotated boxes which is much more important than creating smaller composed collision boxes ... but someone will have to rewrite collision algorithm in order to do this |
22:12 |
VanessaE |
RealBadAngel: the argument I think is that a mob's body, for example, should have a much larger collision probability than, say, its legs |
22:13 |
RealBadAngel |
what for collisions for part of it? |
22:13 |
VanessaE |
and that's most easily achieved by breaking the one large "box of extremes" range into several small, fixed ranges |
22:13 |
VanessaE |
just like when you scale an image down, you quantize it. |
22:14 |
RealBadAngel |
leading to more and more calculations when we try to minimize it :) |
22:14 |
VanessaE |
I'm saying to voxelize the model and quantize it to some really low resolution, and use the result to build a complex set of collision boxes. |
22:14 |
RealBadAngel |
i say use just one collision box you want to multiply them |
22:15 |
VanessaE |
because it would be easier to check a bunch of small boxes than it would be to check a vectorized model of a collision box. |
22:15 |
VanessaE |
your way is the simplest, yes |
22:15 |
VanessaE |
but it doesn't provide enough granularity |
22:16 |
RealBadAngel |
implement the simplest one then you can go for more complex |
22:16 |
RealBadAngel |
and see how it behaves |
22:16 |
sapier |
vanessae imho you drasticaly underestimate the effect of exponential growth in collision detection |
22:16 |
VanessaE |
remember, one of the *biggest* irritations to most gamers is "hey! wtf! I SHOT him!" (but the bullet missed anyway), or you pass two pixels to the right of a MOB and you're killed anyway, "wtf! I missed him!" |
22:17 |
RealBadAngel |
the simplest one wont let it, it will be easier to hit something |
22:17 |
VanessaE |
this happens when you use a simple rectangle or box to calculate collision for the entire object |
22:18 |
RealBadAngel |
not true |
22:18 |
RealBadAngel |
since the volume of box is bigger than the object youre just wrong |
22:18 |
VanessaE |
RealBadAngel: think back to your 80's gaming days, when collision handling had to be done by checking if two bounding boxes coincided. |
22:19 |
sapier |
I remember the time wher fps added hitboxes for headshots, this was really cpu expensive ... ok processors got faster since that time .. still we are talking about large numbers of boxes |
22:19 |
RealBadAngel |
do we need headshots here? lol |
22:19 |
VanessaE |
RealBadAngel: how hard was it then? just checking two pairs of variables, right? |
22:19 |
VanessaE |
(well, two variables, plus two more per on-screen MOB) |
22:20 |
sapier |
if you like legshots we can add those too ;-) |
22:20 |
sapier |
no it's checking 128 to 128 boxes for only 2 mobs colliding |
22:20 |
VanessaE |
a set of checks that could be done on a dinky little 6502 processor in about 100 microseconds for the player + 5 or 10 on-screen MOBs |
22:20 |
RealBadAngel |
well since we already can use music from artist that made scores for Unreal Tournament |
22:20 |
VanessaE |
sapier: that much is true. |
22:21 |
sapier |
multiply by 200 mobs running around ... wich aren't quite much |
22:21 |
RealBadAngel |
we can add headshot possibility too |
22:21 |
sapier |
on screen is not enough you need to do this for each active mob |
22:21 |
VanessaE |
why would you be checking against 200 mobs? or even a dozen? |
22:21 |
RealBadAngel |
and wait for PvP shooting game mode |
22:21 |
VanessaE |
how many of those are likely to actually be close enough to matter? |
22:21 |
sapier |
because this has to be done for each active mob |
22:22 |
sapier |
wait I'm gonna count number of mobs |
22:22 |
RealBadAngel |
UnrealTest ;) lol |
22:22 |
VanessaE |
sapier: I define "close enough to matter" as "close enough to be pointable" |
22:22 |
VanessaE |
which is around 4 or 5 nodes' distance max. |
22:22 |
RealBadAngel |
or CounterTest |
22:23 |
hmmmm |
<sapier> updating position means get old pos + add stepsize * velocity + add stepsize * acceleration -> new pos ... check all collisionboxes between old and new you mean acceleration^2 |
22:23 |
sapier |
collision needs to be done for each moving mob no matter if its visible or not |
22:23 |
VanessaE |
sapier: then you're doing it wrong. |
22:23 |
RealBadAngel |
wait i got better title for Minetest: FIrst blood ) |
22:23 |
VanessaE |
who are you checking them against? each other? |
22:23 |
sapier |
even if no other mob is involved its 128 to (at least) 9 check |
22:24 |
VanessaE |
hrm |
22:25 |
VanessaE |
ok maybe just one collision box then |
22:25 |
* VanessaE |
shrugs |
22:25 |
RealBadAngel |
told ya ;) |
22:25 |
VanessaE |
it's gonna irritate a lot of people though. |
22:25 |
hmmmm |
what's wrong with a single rectangular collision box.... |
22:25 |
sapier |
right after logging in I've got already 16 mobs loaded ... at daytime! |
22:26 |
VanessaE |
hmmmm: you ever play a 1980's video game? |
22:26 |
RealBadAngel |
they want headshot ability ;) |
22:26 |
VanessaE |
let's say something like pac-man |
22:26 |
sapier |
lol ... sometimes I wonder why worst examples get memorized best :-) |
22:26 |
VanessaE |
sapier: because I grew up in that era, so that's what I remember. |
22:29 |
VanessaE |
and I remember how much it used to piss me off, as well as most gamers I knew at the time, when a game used a collision box when something more sophisticated was needed, that always ended up either killing you or failing to kill an enemy when the opposite should have clearly happened. |
22:29 |
VanessaE |
I'm trying to keep us from making that same mistake. |
22:30 |
VanessaE |
if multi-part collision boxes isn't the answer, then maybe there's some other option. |
22:30 |
VanessaE |
(and c55 thinks I only ever care about creative :-) ) |
22:31 |
RealBadAngel |
some dwarf inside takin a look at screen capture and thinkin: let see if they collide... |
22:32 |
VanessaE |
RealBadAngel: indeed, there were some machines with dedicated hardware collision handling, but we've got way more computing power than even the best dedicated hardware had back then. |
22:32 |
RealBadAngel |
and then just call ask_dwarf(obj1, obj2) if true, they do collide ;) |
22:32 |
sapier |
I suggest using /dev/cristalball |
22:32 |
VanessaE |
heh |
22:33 |
sapier |
but first of all I'm gonna try to fix that damn entity out if sync problem |
22:34 |
VanessaE |
sapier: which one is that? |
22:35 |
sapier |
the one where you have mobs flying/racing away on client because of server doesn't even know about it anymore thus not sending updates |
22:35 |
VanessaE |
oh yes |
22:35 |
VanessaE |
carts love to do that when the server lags |
22:35 |
VanessaE |
that definitely needs fixed. |
22:35 |
sapier |
another issue is mobs simply missing because server thinks it already sent it but client never received anything |
22:36 |
sapier |
no lag issue is another one |
22:36 |
VanessaE |
what is needed is a way to tell the server "accelerate to max speed X, travel at that speed for a maximum of Y seconds or Z nodes' distance, whichever comes first." |
22:36 |
sapier |
at least atm I think so |
22:36 |
sapier |
why? |
22:37 |
sapier |
I sugges stalling movement if client didn't receive an update for some time |
22:37 |
RealBadAngel |
i used to implement last_valid_position for that |
22:37 |
VanessaE |
so that you could, let's say, program a cart to travel down a track and stop 10 nodes away (where the track turns) if an update is not received by that time |
22:37 |
RealBadAngel |
if current excessed last valid+movement prediction i reseted it |
22:37 |
VanessaE |
a mining laser could stop 20 nodes away whether an update is received or not |
22:38 |
VanessaE |
that sort of thing. |
22:38 |
sapier |
so you suggest adding a validity timeout for a movement instead of fixed value |
22:38 |
VanessaE |
yes, basically |
22:38 |
sapier |
more complex to handle but possible too |
22:38 |
VanessaE |
both distance AND time. |
22:38 |
VanessaE |
and just stop whenever the first one expires. |
22:38 |
sapier |
no distance and time are nothing different |
22:38 |
VanessaE |
wait, listen. |
22:39 |
VanessaE |
well, |
22:39 |
VanessaE |
no, just max time is enough I guess |
22:39 |
sapier |
it's just adding additional complexity without functional addition |
22:39 |
VanessaE |
but yeah, an entity should have a timeout - stop moving after X seconds. |
22:39 |
RealBadAngel |
VanessaE, but the problem is enitities sometimes are on the loose |
22:39 |
RealBadAngel |
they fail to report back its postion |
22:40 |
VanessaE |
RealBadAngel: yes I know, and if they move for too long, they simply stop *on the client side too* |
22:40 |
RealBadAngel |
or do that with heavy lags |
22:40 |
VanessaE |
in other words both client and server have to know what the timeout is |
22:40 |
VanessaE |
so both can stop their versions of the entity until the two can be resynched. |
22:40 |
|
nyuszika7h_ joined #minetest-dev |
22:40 |
VanessaE |
that doesn't fix the underlying bug, but it's still needed anyway |
22:40 |
RealBadAngel |
seen items in tubes jumping back into right tracks? |
22:41 |
VanessaE |
yep. |
22:41 |
VanessaE |
carts too. |
22:41 |
RealBadAngel |
thats my reseting code |
22:41 |
sapier |
imho for a first step adding a prediction timeout would qite improve player experience |
22:41 |
VanessaE |
sapier: yes. |
22:41 |
sapier |
it'd be a small change but big in effect |
22:41 |
VanessaE |
because you can then say "Ok, I know this entity is traveling at 10 nodes/second. I want it to stop 50 nodes away, so it needs a 5 second timeout". |
22:41 |
sapier |
and no need to change protocol |
22:42 |
VanessaE |
server says "ok, it moved for 5 seconds, stop all movement entirely". Client says the same thing at the same time, independently of the server. |
22:42 |
VanessaE |
both stop the entity at 5 seconds' out. |
22:42 |
VanessaE |
eventually server+client come back into sync and they reposition the entity where it really should be, if needed. |
22:42 |
sapier |
yes this is necessary if we wanna support lag > 1s |
22:42 |
VanessaE |
*nod8 |
22:42 |
VanessaE |
*nod* |
22:42 |
sapier |
do we want to do that? |
22:42 |
VanessaE |
abso-fucking-lutely. |
22:43 |
VanessaE |
1 second it nothing in lag, I've seen 5+ minutes' worth before. |
22:43 |
sapier |
you can't really play anything with lag at that level |
22:43 |
VanessaE |
any time someone is using worldedit, or even just a really bad internet connecting. |
22:43 |
VanessaE |
connection* |
22:43 |
sapier |
sorry but we can't fix the worldedit issue |
22:43 |
VanessaE |
yes I know. |
22:43 |
VanessaE |
and it doesn't really help ones' playability to be lagging all to hell |
22:44 |
sapier |
I won't put any effort in fixing problems not changing anything at root cause |
22:44 |
VanessaE |
but > 1 second is pretty common really, under normal circumstances. |
22:44 |
VanessaE |
so yeah, a movement timeout for entities/MOBs should solve a lot of problems. |
22:44 |
sapier |
imho rtt>1s are core/mod bugs that need to be fixed |
22:45 |
VanessaE |
sapier: tell that to kaeza, who has got to have THE worst networking hardware among the community :) |
22:45 |
sapier |
if a server can't manage to send 1k bytes per second to each client this game never will fly ;-) |
22:45 |
VanessaE |
noisy, low-quality wireless that frequently causes timeouts *outside* of the game, e.g. on IRC> |
22:46 |
VanessaE |
obviously the solution in his case is to fix his network if possible. |
22:46 |
sapier |
yea but we're not creating a fault tolerant high latency cross solar system network game here ;-) |
22:46 |
VanessaE |
but if we can do something to help soften the blow, we should. |
22:46 |
sapier |
at least didn't I know about anything like that by now |
22:47 |
VanessaE |
heh |
22:47 |
sapier |
problem is adding this will introduce sync problems |
22:47 |
VanessaE |
maybe |
22:47 |
VanessaE |
but would it be any worse than the problem we have now? |
22:47 |
sapier |
the more complex this mechanisms get the more difficult to handle |
22:48 |
VanessaE |
fault-tolerant networking code is a core part of the Internet, and if we can do something about it on our end also, we should. |
22:48 |
sapier |
simply adding a timeout wont make it worse, adding prediction times ... maybe not too but we need to change protocol |
22:48 |
VanessaE |
in the meantime, entity movement timeouts and some kind of more lax settings in the anti-cheat code is enough. |
22:49 |
sapier |
internet protocol is not as fault tolerant as you may think, wireless lan is known to suffer from tcp/ip bugs and interplanetary communication isn't feasable with tcp/ip too ;-) |
22:50 |
VanessaE |
heh |
22:50 |
VanessaE |
so, I see how it is |
22:50 |
VanessaE |
those poor astronauts on the ISS don't get to play minetest now huh? ;) |
22:51 |
sapier |
quite difficult and they are in orbit and not even on another planet ;-) |
22:51 |
VanessaE |
heh |
22:52 |
sapier |
I'll try to add the timeout as first step maybe this is enough for some time |
22:52 |
VanessaE |
*nod* |
22:53 |
sapier |
but first I'm going to get some sleep :-) |
22:53 |
sapier |
good night :) |
22:53 |
|
sapier left #minetest-dev |
23:42 |
|
StrayBytes joined #minetest-dev |