Time |
Nick |
Message |
00:17 |
|
Sokomine joined #minetest |
00:34 |
|
Sokomine joined #minetest |
00:55 |
|
Zambyte joined #minetest |
01:10 |
|
smk joined #minetest |
01:28 |
|
Zambyte joined #minetest |
02:15 |
|
Lesha_Vel joined #minetest |
04:00 |
|
MTDiscord joined #minetest |
04:11 |
|
fluxionary joined #minetest |
06:40 |
|
s20 joined #minetest |
06:47 |
|
calcul0n_ joined #minetest |
07:25 |
|
definitelya joined #minetest |
07:32 |
|
jaca122 joined #minetest |
07:38 |
|
fury999io joined #minetest |
08:10 |
|
mrkubax10 joined #minetest |
08:15 |
|
justache joined #minetest |
08:21 |
|
copygirl joined #minetest |
08:22 |
|
Warr1024 joined #minetest |
08:22 |
copygirl |
Hoi everyone! I'm creating a mod for NodeCore and might have some moddev questions. Is this a good place to ask around? |
08:23 |
copygirl |
I'm just gonna go on a whin here and guess that it is. ^^ |
08:24 |
copygirl |
Just for a bit of context I'm trying to move players, but setting the position serverside is very jarring, understandably. So I'm going to just send some information to the player for them to decide if they should be moved, and then do so on their end. |
08:27 |
copygirl |
Are mod channels the idiomatic way to send arbitrary messages? I only need it for server->client communication so it seems a bit overkill. And there appears to be no way to send a message to a specific player? |
08:28 |
erle |
yes this is a good place but i think a nodecore channel exists also |
08:29 |
copygirl |
In which I am also present, but I believe this is a general Minetest modding question. |
08:29 |
erle |
yes |
08:29 |
erle |
copygirl if you want to display arbitrary stuff to players, i'd suggest to use the HUD |
08:31 |
erle |
like i do here: https://git.minetest.land/erlehmann/xmaps/src/branch/master/init.lua#L580 |
08:31 |
erle |
you can also send chat messages to players |
08:31 |
copygirl |
I want to cause the player to move but the movement to happen clientside based on some logic the client needs to execute, to avoid being jerked around and their position and look rotation to be reset to the server-side known value from 0.2s ago or whatever the ping is to that player. |
08:31 |
erle |
but i guess you figured that out |
08:32 |
|
Sobinec joined #minetest |
08:33 |
erle |
copygirl i doubt you actually want client-side logic for this use case to avoid being jerked around. you probably want some target and a smoothing function? |
08:33 |
erle |
like CSS transitions or so? |
08:33 |
erle |
anyway, i think minetest can not do it. best you can probably do is attach the player to an invisible entity and move that. this will, in case of lag, rubberband the player. |
08:34 |
erle |
sadly, minetest has no way to specify movement prediction AFAIK |
08:34 |
copygirl |
I'm writing node-based movable objects. When the nodes get moved around, any player on top should also move. The player could, due to lag, have moved off or jumped on their screen, so the decision of whether to move should be made on the client. |
08:34 |
erle |
i.e. everything will be moved in a straight line |
08:35 |
erle |
oh i see the issue |
08:35 |
erle |
i think this simply does not work, game-logic wise |
08:35 |
copygirl |
Right now these "moves" are just going to be snappy teleports of 1m at a time. Whether I want to smooth that out I'll see later. |
08:35 |
erle |
consider the following: what if a player sees themselves not on a node but others see them on the node |
08:36 |
erle |
if the decision where the player ends up is made client-side, this is going to be a mess to reconcile |
08:36 |
erle |
i mean ultimately, that decision can indeed be made client-side |
08:36 |
copygirl |
The logic works with set_pos(), it's just jarring due to lag, the worse the lag, the more jarring it is. (Because setting position serverside resets any motion done by the player since the last server-known position, especially look orientation.) |
08:36 |
erle |
as long as you observe the speed limit |
08:37 |
copygirl |
All I need now is to have a way to send a message or packet from the server to a specific player for it to do the movement logic on its end. |
08:37 |
erle |
again: are you sure you need *logic* here? logic-free movement can exist |
08:38 |
copygirl |
I don't mind of the players visually lag behind on other players' screens, I just want them to not feel sick as they get moved themselves. |
08:38 |
copygirl |
don't mind if* |
08:38 |
erle |
if it is about that, maybe you could figure out how to smooth the set_pos thing? |
08:39 |
copygirl |
And.. do it server-side? Or what are you suggesting? |
08:39 |
erle |
yeah |
08:39 |
erle |
alternatively, get the cheat client dragonfire. it has no CSM restrictions. you can basically move arbitrarily client-side there. |
08:39 |
erle |
try to prototype your issue using it |
08:39 |
copygirl |
Okay how do you solve the issue of the player being jerked back to an old known position? |
08:40 |
erle |
well, i would rubberband them to that position using a transition function provided |
08:40 |
|
lemonzest joined #minetest |
08:41 |
copygirl |
Rubberbanding is what I want to avoid. |
08:42 |
copygirl |
I mean, perhaps I can't do what I want to do because in certain cases the server will think the player has teleported through a block or so. |
08:42 |
erle |
the server is not smart enough for that |
08:43 |
erle |
basically you have a speed limit server side and that's it |
08:43 |
erle |
so with dragonfire, you can, for example, do the dragonball z thing |
08:43 |
copygirl |
You could noclip if you wanted to? |
08:43 |
erle |
you can easily noclip in minetest without a cheat client even |
08:43 |
erle |
i mean, the server is pretty dumb. and it has to be that! |
08:44 |
copygirl |
In that case it sounds like I might be fine. Ish. |
08:44 |
erle |
take fall damage for example: if you let the server calculate it, you will get lag |
08:44 |
erle |
so the client calculates it and sends it to the server |
08:44 |
erle |
which means you can easily modify the client to not have any |
08:44 |
erle |
this also applies to falling speed. the speed limit does not apply when going fast downwards. |
08:45 |
erle |
this means you can teleport to the mineclone2/mineclonia nether using a cheat client |
08:45 |
erle |
(the way to mitigate that would not be to check falling speed, but to check if there is an active portal at the source point) |
08:45 |
erle |
(but AFAIK no one is doing that) |
08:46 |
copygirl |
Alright, so then I'd like to return to my original question: How do I send a message from server to a specific player? |
08:46 |
erle |
a message? a chat message? a HUD display message? |
08:46 |
copygirl |
Okay, maybe I should call it a network packet or event. |
08:46 |
|
Warr1024 joined #minetest |
08:47 |
erle |
for anything you want to display, again, look at: https://git.minetest.land/erlehmann/xmaps/src/branch/master/init.lua#L580 and the documentation for player:hud_change([…]) |
08:47 |
erle |
i think i have an example of code that does that |
08:47 |
erle |
give me a moment |
08:47 |
copygirl |
I need to send some data from the server to the client for it to listen to and do something. |
08:48 |
erle |
again, prototype it using a cheat client. and maybe mod channels? |
08:48 |
erle |
i think our girl lizzy made a server side fps thing. like how many ticks the server had. |
08:48 |
copygirl |
Mod channels appear to be sending messages to all players. |
08:49 |
erle |
encrypt the data then? |
08:49 |
copygirl |
It's about not sending unnecessary data. |
08:49 |
copygirl |
The data is not sensitive. |
08:49 |
erle |
again, i suggest to prototype it using a cheat client and see if this actually works before going into implementation details |
08:50 |
erle |
“not sending unnecessary data” is a non-functional |
08:50 |
erle |
functionals are things that do stuff |
08:50 |
erle |
non-functionals are things that don't do stuff, like performance or security |
08:50 |
copygirl |
Okay what if I prototype it and then it turns out I can't actually move the player client-side in the official client? What good does this do me? |
08:51 |
erle |
you have a good case for an API then |
08:51 |
copygirl |
I think we're derailing from the actual question I have. |
08:51 |
erle |
and maybe a good case for general movement prediction |
08:51 |
erle |
well your question is kinda like an X-Y question from my POV |
08:52 |
erle |
people want to do X and figure out that Y lets them do that, so they ask for Y |
08:52 |
erle |
but they actually want to do X, not Y |
08:52 |
erle |
https://en.wikipedia.org/wiki/XY_problem |
08:52 |
erle |
not? |
08:52 |
erle |
> Q: How can I use X to do Y? |
08:52 |
erle |
> A: If what you want is to do Y, you should ask that question without pre-supposing the use of a method that may not be appropriate. Questions of this form often indicate a person who is not merely ignorant about X, but confused about what problem Y they are solving and too fixated on the details of their particular situation. |
08:52 |
erle |
well here X and Y are reversed |
08:53 |
erle |
copygirl is it like that or not? if not, why not? |
08:53 |
copygirl |
Fair but I've got 15+ years of programming experience so I can make some decisions for myself at this point. At this point I regret including the context for my question. |
08:53 |
erle |
LO |
08:53 |
erle |
LOL |
08:54 |
erle |
look, a reason why i suggest prototyping it is that often people, even experienced people, fixate on solutions that seem obvious but are not helping. you notice that during implementation. i don't have your use case, so i can not help you with a concrete implementation. i doubt what you want is possible. |
08:54 |
copygirl |
I didn't sign up to discuss whether my approach is the correct one, I'm asking the basic question of how to handle sending custom network packages (or the equivalent thereof) to specific players. |
08:54 |
Ingar |
not sending unnecessary data is efficiecy |
08:54 |
erle |
yeah but it is, again, a non-functional. thus it can be ignored for a proof-of-concept. |
08:54 |
erle |
oh i have a solution |
08:55 |
erle |
attach it to some entity that only that player sees. |
08:55 |
erle |
:P |
08:55 |
Ingar |
calculations are cheap, data transfers are are prohibitively expensive - nvidia |
08:55 |
copygirl |
I already have a proof of concept that works using server-side teleportation. The issue is jarring movement. The fix is to push the teleportation to the client. |
08:55 |
erle |
copygirl i suggest to ask in #minetest-dev for details on the engine and maybe post on the forums |
08:56 |
erle |
as i said, on a protocol level, the client can *already* teleport |
08:56 |
erle |
what is missing here is movement smoothing, no? |
08:56 |
copygirl |
That's nice, now I just need to find a way to tell the client that it needs to teleport. |
08:56 |
copygirl |
I never once asked for smoothing. |
08:57 |
erle |
again, i suggest to prototype that using dragonfire or waspsaliva, then show it off. you have full control over movements using CSMs there. |
08:58 |
copygirl |
I'm not willing to use a cheat client even if it is for prototyping. I'll be wanting to use and test the mod on a friends' server and such and we're all using the official client. |
08:58 |
copygirl |
I would like to try out whether it is impossible to move the player client-side first before I go to such measures. |
08:59 |
erle |
have you looked at other mods that move players standing on blocks? |
08:59 |
copygirl |
I don't know of any. |
08:59 |
erle |
i have built a teleporter abusing mineclone2/mineclonia pistons |
08:59 |
erle |
the player is definitely moved by being pushed there |
09:00 |
erle |
the trick is to repeatedly trigger the teleporters in a very short interval |
09:00 |
erle |
i mean the pistons |
09:00 |
erle |
this makes the player move repeatedly |
09:02 |
erle |
copygirl if you have not looked at any solutions and do not want to prototype it using a client that definitely can do it, i can not help you. |
09:03 |
copygirl |
Even if I have a different client, I will still need to tell it to move somehow. |
09:03 |
erle |
and btw “I have X years of experience outside of this context so my chosen solution for this context is non-negotiable” is not something i have bad experiences with (people don't actually try to explore solution space then) |
09:04 |
erle |
strike the ”not” |
09:04 |
erle |
i am still too sleepy |
09:04 |
erle |
copygirl have you tried standing on a node moved by a mesecons piston? |
09:05 |
copygirl |
Whether or not my solution is the correct one, I still would like to know how to do this super basic thing. |
09:05 |
copygirl |
I only play NodeCore. |
09:05 |
copygirl |
I suppose I could look at mesecon. |
09:07 |
erle |
insisting something is “super basic” does not make the minetest engine do it. case in point, calling “addShadowVolumeSceneNode()” is super-easy and minetest instead got an entirely separate shadows implementation because no one tried that function. |
09:07 |
copygirl |
Okay, so they use `move_to`. |
09:07 |
erle |
minetest is weird |
09:08 |
copygirl |
> For players this does the same as `set_pos`, `continuous` is ignored. |
09:08 |
copygirl |
So we're back to my faulty solution that jerks around players. |
09:08 |
erle |
would not ignoring the continuous make it not-jerky? |
09:10 |
copygirl |
Player moves. Sends their position to the server. Player continues to move on their end. Server receives player position, updates it on their end. Server teleports the player based on their currently known position, which is now outdated. Player receives the "teleport" packet, and is now jerked around relative to where they should have been. |
09:10 |
copygirl |
This is especially jarring when they have looked in another direction because apparently it also overides their look direction with what the server is telling them. |
09:11 |
erle |
have you looked if there is an issue on github about this behaviour and possible approaches? |
09:11 |
copygirl |
Do you understand my problem now, and why I want to do the "movement" (technically teleportation) on the client? |
09:11 |
erle |
yes, but i *still* think while movement-on-the-client is a worthwhile goal, arbitrary-logic-on-the-client is not. |
09:11 |
erle |
at least not when server-dictated |
09:12 |
copygirl |
Whatever the server tells the client to do, it will not have up-to-date information regarding the client's movement, so the server alone cannot solve this issue. The client will have to move according to its state of the world and its position. |
09:12 |
erle |
i did suggest a solution some time ago for this kind of thing, i.e. sending the client the movement paths of objects and letting it interpolate along this for any object |
09:12 |
erle |
but no implementor interest and i do not have this problem often |
09:12 |
erle |
basically only when i go very far in a minecart |
09:12 |
copygirl |
Bad solution would be for the server to go "you have been moved 1 block in this direction". And the client just does it. |
09:13 |
erle |
movement paths could be relative or absolute anyway |
09:13 |
erle |
are you familiar with the svg path syntax? |
09:13 |
erle |
i had something like that in mind |
09:13 |
copygirl |
The solution I'm wanting to go for is the server saying "hey these blocks around you have been moved, if you would be affected by them, then move yourself". |
09:13 |
erle |
that sounds more like a node property than anything else |
09:13 |
erle |
like making nodes sticky or changing the fall damage on them |
09:15 |
copygirl |
The server moves the nodes. I'm not going to add metadata to all the moved nodes for a tick just to cause some players to (hopefully) move, and I don't even know if that would propagate properly. |
09:15 |
copygirl |
The nodes are not always in motion. The are not moving at a constant rate, either. |
09:17 |
erle |
yes but consider the following |
09:17 |
erle |
imagine if a node had a property that just means “if a player is on it, the player moves” |
09:17 |
erle |
with the node |
09:17 |
erle |
the thing is, nodes can not *move* per se |
09:17 |
erle |
they teleport, or you make a falling entity and create a new node |
09:18 |
erle |
or maybe you could want an API that says “every entity in area ” |
09:18 |
erle |
or maybe you could want an API that says “every entity in area X move by 1 node to the north, interpolated using this curve with this movement duration” |
09:18 |
erle |
do you see now why i urge you to prototype it instead of insisting you need a way to control player movements using server-sent CSMs? |
09:19 |
copygirl |
I can already find all the players that are nodes that have been moved. |
09:19 |
copygirl |
That's what I've been doing. |
09:19 |
copygirl |
Now, how do I move these players? |
09:19 |
copygirl |
Server-side movement is out of the question. |
09:20 |
erle |
okay, let me ask directly. would a “move everyone in this area 1 node along the +X axis, the movement taking 1 second” command from the server solve your problem? |
09:20 |
copygirl |
Client-side movement is a possibility. |
09:20 |
copygirl |
So I have to tell the client somehow that it needs to move. |
09:20 |
erle |
i ask because that thing is logic-free |
09:20 |
copygirl |
Ideally I'd like to prototype this before, I dunno, creating an issue on the issue tracker. |
09:20 |
copygirl |
So I need to let the player know when it gets moved. |
09:21 |
copygirl |
Hence I need a way to send a network packet (or equivalent) with some data that tells the player how to move. |
09:21 |
copygirl |
So, am I wrong in asking if there's a way to do that with Minetest? |
09:21 |
erle |
no |
09:21 |
erle |
but i think i'm done here. |
09:22 |
copygirl |
Alright, then maybe someone else can actually answer my question :I |
09:22 |
copygirl |
To repeat myself: I'd like to know if there's a way for a my mod to send a message from the server to a specific client. |
09:23 |
erle |
from my POV, the issue is that you don't answer questions about alternate approaches. i have no domain knowledge about your problem, so my suggestions are likely not appropriate. but if you don't tell me why, i can't help you figure it out. |
09:23 |
erle |
i already told you how. use hud messages. |
09:24 |
erle |
there is an amount of APIs that sends packets only to specific players. the issue here seems to be that i can't say if any of them is appropriate to your problem. |
09:26 |
erle |
if i would prototype it, i'd try a) a CSM solution using modchannels b) a new API prototype server-side that gives movement hints (a.k.a. “move everything in this area using the specified properties”) and just teleports old clients |
09:27 |
erle |
though i am pretty convinced the CSM solution is a dead-end implementation-wise |
09:27 |
erle |
but i can't say, i don't have this problem! |
09:27 |
erle |
also: if you are that hung-up about modchannels only sending to specific clients, make a separate channel for each player? |
09:44 |
copygirl |
Alright so from looking into it, the client API does not allow for modifying objects' positions. |
09:44 |
erle |
unless you use a cheat client |
09:44 |
copygirl |
This issue seems to address that directly: https://github.com/minetest/minetest/issues/13727 |
09:45 |
copygirl |
This issue talks about the jerkiness of the camera when you get teleported: https://github.com/minetest/minetest/issues/11502 |
09:45 |
erle |
yes and the suggested solution in #13727 is A BIT WEIRD lol |
09:45 |
ShadowBot |
https://github.com/minetest/minetest/issues/13727 -- Allow clientside customization of entities, add a clientside API for clientside entity manipulation. |
09:48 |
erle |
to anyone else: if you can tell me what i might have done different in the conversation with copygirl to get answers about questions about alternate API approaches, please tell me. |
10:12 |
|
Talkless joined #minetest |
10:50 |
|
sparky4 joined #minetest |
11:03 |
|
mrkubax10 joined #minetest |
11:05 |
|
pounce joined #minetest |
11:06 |
|
calcul0n joined #minetest |
11:08 |
|
appguru joined #minetest |
11:14 |
erle |
okay so it turned out that copygirl and me had some misunderstandings. in particular, copygirl did not know that minetest server mods are only executed server-side and do not have a client-side component. |
11:50 |
|
justache joined #minetest |
12:01 |
|
Thelie joined #minetest |
12:32 |
|
sparky4 joined #minetest |
13:11 |
|
Markow joined #minetest |
13:32 |
|
Talkless joined #minetest |
13:35 |
|
Talkless joined #minetest |
14:00 |
|
jaca122 joined #minetest |
14:04 |
|
s20 joined #minetest |
14:23 |
MTDiscord |
<luatic> that at least partially explains this mind-numbing convo |
14:29 |
copygirl |
In my defense I didn't realize that a lot of the client-side predition was just features built into the engine rather than some piece of code running on the client. (Such as breaking a block to another in-place.) |
14:30 |
MTDiscord |
<luatic> fair |
14:31 |
MTDiscord |
<luatic> minetest's "design" is definitely.. unusual to say the least for something that calls itself a game engine, and def. very frustrating |
14:33 |
muurkha |
luatic: how would you do it? |
14:33 |
MTDiscord |
<luatic> muurkha: do what, design a game engine or solve the mod problem? |
14:33 |
muurkha |
design a game engine |
14:34 |
MTDiscord |
<luatic> in my book, a proper game engine should give me full control over the client |
14:34 |
MTDiscord |
<luatic> so something more like LÖVE2D or LÖVR |
14:37 |
erle |
and here, again LANGSEC says nopity nope |
14:37 |
erle |
also you can look at a bunch of game engines and see how you don't really get *full* control |
14:37 |
erle |
i think the client is more like a dumb terminal in the ideal case |
14:37 |
erle |
doing dumb terminal things |
14:38 |
erle |
(if possible, in a scriptable manner) |
14:38 |
erle |
luatic have you read the seven turrets of babel? |
14:40 |
MTDiscord |
<luatic> erle: this is not about langsec |
14:40 |
MTDiscord |
<luatic> my users need to trust me |
14:40 |
MTDiscord |
<luatic> on the basis of "trust me sis" |
14:40 |
erle |
lol |
14:40 |
erle |
look, if you have a boundary between systems you can get a holographic fracture |
14:40 |
MTDiscord |
<luatic> (and if they don't, they can isolate the software i give them, or they can audit it themselves) |
14:41 |
erle |
i.e. the interpretation of information changes at the boundary |
14:41 |
erle |
and for a lot of things that can not be parsed by a deterministic pushdown automaton the question “is this valid input” is UNDECIDABLE. |
14:42 |
erle |
which means you are forced to write a client that can not even answer the simple question “is this a valid rasponse from the server” |
14:42 |
erle |
if your grammar is complex enough |
14:42 |
erle |
i don't see how that has to do with trusting oyu |
14:42 |
erle |
you |
14:43 |
muurkha |
I think this is rarely an issue in practice |
14:43 |
erle |
and yet we have entire categories of bugs that hinge on this possibility |
14:43 |
muurkha |
I don't think that's really true |
14:43 |
muurkha |
we have entire categories of bugs in parsers, it's true |
14:43 |
muurkha |
and by using better parsing technology we can eliminate them |
14:44 |
erle |
well is it really parser bug if your parser is intermingled with business logic by necessity |
14:44 |
muurkha |
but the reason for those bugs is not because the decision problem for the language is potentially nonterminating |
14:44 |
MTDiscord |
<luatic> erle: when i write a game, i want to distribute it more or less standalone; a game engine is essentially just a tool / library to help me write that game. this is how i use "game engine" and what i want a game engine to be; if need be, i want to be able to control the networking, the clientside presentation, the client prediction, the server, the server steps, the collisions, the physics, every aspect. |
14:46 |
erle |
muurkha yes but trying to have maximum flexibility might make it so |
14:46 |
muurkha |
parser bugs that result in a parser failing to terminate do not in themselves grant the supplier of the data any additional privileges |
14:46 |
MTDiscord |
<luatic> this is not really what minetest is. minetest is a to some extent general-purpose thin-ish client with oddly specific behavior that was originally more or less aimed at minetest game and a scriptable server which you still don't fully control. |
14:46 |
erle |
muurkha that is true. but surely, if the decision problem is not decidable, it will just be ignored? |
14:47 |
MTDiscord |
<luatic> i have taken to calling minetest a "platform" rather than a game engine; roblox probably is closest to what minetest is, but even roblox has client-side scripts |
14:47 |
muurkha |
sure, but that's probably okay; if the user gets tired of waiting for a message to parse, they can cancel the attempt to parse |
14:47 |
erle |
i mean i have seen this time and time again. at work there is one product that uses user-provided lua to control [redacted]. when i asked how to make sure that the lua code does not do anything stupid, the answer was: we are aware of this and chose to do nothing (cause it's a prototype). |
14:48 |
muurkha |
confining Turing-complete mobile code is not an intractable problem |
14:48 |
muurkha |
although it's the kind of problem that people tend to underestimate :) |
14:48 |
erle |
i think what i want to say is: if you are designing a system yourself, you should *probably* try to figure out the problem space and try to make your message passing formats match the domain as close as posible. |
14:49 |
erle |
and “let's just use arbitrary code” is a cop-out that a) seems obvious b) inhibits a lot of other stuff you might want to do later (usually relating to decision problems or optimization) |
14:50 |
erle |
that it might be insecure or hang your app is just a very obvious way to show a boundary that matters |
14:50 |
muurkha |
well, I'm in favor of the Principle of Least Power |
14:50 |
muurkha |
you should only use mobile code where you need it |
14:50 |
muurkha |
but where you need it is definitely not "nowhere" :) |
14:50 |
erle |
by “mobile code” you mean ”code sent from a server to a client” ? |
14:51 |
erle |
well, take the problem that copygirl has with moving players when nodes move. nodes can't move. they change. so the minimum-thing here would be a hint from the server to the client “these nodes moved there” (suggested by copygirl in query). |
14:52 |
erle |
and then the client would know “oh i stood on this node” or not |
14:52 |
erle |
and could react accordingly |
14:53 |
copygirl |
Something more generic to apply force or relative position / rotation updates would work for me as well. |
14:53 |
copygirl |
Though the ideal solution would involve client-side code. |
14:53 |
erle |
anyway, i maintain that the proper technique to address unknown problem is to provide extension points and not to make the system do everything in principle |
14:54 |
erle |
because ”everything” is a huge space and “everything you ever wanted” is a smaller infinity (or how you would call that) |
14:54 |
copygirl |
Because in one case the server can apply some force to the player when on the players' end they've already moved out of the area that would cause the force to be applied. |
14:54 |
erle |
it might even be finite who knows |
14:54 |
copygirl |
Think of a piston, for example. The client should probably decide if it got pushed by the block or not. |
14:55 |
copygirl |
Else it'll move out of the way and then get seemingly pushed by nothing. |
14:55 |
erle |
on the other hand, my beautiful teleportation machinery that chains together piston movements no longer works if it relies on client-side prediction hehe |
14:55 |
erle |
so i can no longer teleport through walls |
14:55 |
erle |
(using a weird contraption) |
14:57 |
copygirl |
Also regarding game engine, I've looked into the possibility to using Wasmtime to run WebAssembly in a sandbox, as well as putting it all in a sandboxed / containerized process, similar to how browsers do that. |
14:58 |
copygirl |
And since in my case I want to ship around source code as well, the compiler needs to run in Wasm too. Zig looks like a good candidate that also fits well in other ways. |
14:58 |
MTDiscord |
<luatic> yeah, there are various ways to isolate apps including games, web apps are one of them and many engines allow you to target web one way or another |
14:58 |
erle |
yes, browsers, the things that even multi-billion-dollar corporations can not write secure sandboxes for |
14:58 |
copygirl |
Indeed, the other way is to just target browsers and let them do all the security sandboxing. |
14:59 |
MTDiscord |
<luatic> copygirl: I think you should ship precompiled stuff and just provide your sources on GH etc. |
14:59 |
copygirl |
Though then you'd still need to secure servers. (I want devs to mod the server as its running, pushing code.) |
14:59 |
erle |
https://github.com/allpaca/chrome-sbx-db this list of chrome sandbox exploits is as long as my arm |
14:59 |
copygirl |
I dunno how easy it is to get the entire security suite that browsers have on a dedicated server, or if that even makes sense. |
14:59 |
MTDiscord |
<luatic> erle: what is wrong with your arm |
15:00 |
erle |
nothing, maybe i have a larger default font than you |
15:00 |
erle |
if webshits really believed that javascript was easily secured, the would let me upload javascript to execute on their servers, these cowards! |
15:00 |
erle |
the → they |
15:01 |
muurkha |
erle: by "mobile code" I mean "code obtained from a remote and possibly malicious source during the normal execution of a system, rather than when a new installation is initially configured". wasm (wasmtime, lucet, whatever) is a promising approach here |
15:01 |
copygirl |
MTDiscord: I want to encourage an ecosystem of open source and remixing on the spot. I want you to be able to get on a server and inspect the mods it's running, and grab it for your own. Fuck intellectual property to be honest. Let's just make cool shit. |
15:01 |
muurkha |
copygirl: agreed |
15:02 |
erle |
copygirl oh you might like how mindustry does it with in-game processors |
15:02 |
erle |
ever checked that one out? |
15:02 |
copygirl |
I played it but propably 2+ years ago so I have not heard of that. |
15:02 |
erle |
i think they existed back then too |
15:02 |
muurkha |
btw MTDiscord is a bot relaying what people say on Discord; in this case the person who's been talking there is luatic |
15:02 |
erle |
so processors are buildings that can execute code in some limited-domain specific language to do stuff |
15:03 |
erle |
usuallly it is used to either control complicated factories or make units mine or go to war |
15:03 |
copygirl |
muurkha: Oh derp. I do know that, just muscle memory. |
15:03 |
erle |
or use flying units to supply some resources |
15:03 |
copygirl |
I need to add MTDiscord to my relay bots in my client. |
15:03 |
erle |
each building has its own code that can be edited |
15:04 |
erle |
i used it for example to make a battery charge up and then only discharge it when i had enough energy to start this really huge generator |
15:04 |
erle |
i forgot the name |
15:04 |
erle |
but the one that needs like 30 seconds or so of input energy |
15:04 |
erle |
and then outputs lots of energy |
15:04 |
erle |
*if* it started up |
15:04 |
MTDiscord |
<luatic> copygirl: I'm not saying you should ship binaries for obfuscation purposes. It's for convenience / performance. The zig compiler toolchain sure isn't small. |
15:05 |
MTDiscord |
<luatic> (they are in the process of separating from LLVM, though) |
15:05 |
erle |
muurkha luatic what do you think of the way openRA does mods? |
15:05 |
MTDiscord |
<luatic> never heard of it |
15:05 |
erle |
i.e. units and buildings being purely declarative using a traits system |
15:05 |
erle |
openRA is an engine to run command & conquer / command & conquer: red alert and some other games |
15:05 |
MTDiscord |
<luatic> wait i think i heard from it once and it was from you and it was this point |
15:05 |
erle |
dune 2000 too |
15:06 |
erle |
i suggest to play around with it for everyone wanting to make their own game engine |
15:06 |
MTDiscord |
<luatic> (my brain is not at full capacity when i'm sick, to say the least) |
15:06 |
erle |
it's *way* more flexible than i thought it could be |
15:06 |
copygirl |
The Zig compiler seems pretty small though, and it compiles pretty fast. Add a cache to that and it shouldn't be that painful. |
15:06 |
erle |
oh i hope you get better! |
15:06 |
MTDiscord |
<luatic> erle: thanks :3 |
15:06 |
copygirl |
The problem is if you do binary + source separately you don't know if you're actually running the source. |
15:07 |
erle |
is performance really a problem if i can run python on a microcontroller |
15:07 |
erle |
like for games |
15:07 |
copygirl |
Performance is a problem if you're thinking big like me xD |
15:07 |
MTDiscord |
<luatic> erle: python is not as bloated as it seems, actually |
15:07 |
copygirl |
I'm not thinking small like Minetest. I'm thinking big like processing thousands of active entities. |
15:07 |
MTDiscord |
<luatic> like ok its very wasteful but the language itself is much smaller than many compiled languages |
15:08 |
erle |
why would processing thousands of entities be an issue unless you go accidentally quadratic? |
15:08 |
MTDiscord |
<luatic> yeah, thousands doesn't sound like a lot |
15:08 |
erle |
computers are fast |
15:08 |
MTDiscord |
<luatic> even with quadratic stuff, that puts you in the millions, which is not unreasonable |
15:09 |
MTDiscord |
<luatic> hell even minetest survives thousands of entities (barely) |
15:09 |
erle |
like, minetest particles for example only lag because they are doing a drawcall for each particle or so (correct me on this if you know better) |
15:09 |
MTDiscord |
<luatic> (and if you make too many thousands you run out if IDs :3) |
15:09 |
erle |
lol |
15:09 |
erle |
true |
15:09 |
MTDiscord |
<luatic> erle: good news, there's a PR to fix that |
15:09 |
erle |
luatic bad news, x2048 left |
15:09 |
MTDiscord |
<luatic> was about to point that out |
15:09 |
erle |
also there was a PR to fix that once in the past, it got rejected |
15:10 |
erle |
but nice that FINALLY someone addresses it |
15:10 |
MTDiscord |
<luatic> there's also some nitpick i brought up, but i think it could be sorted out satisfyingly |
15:11 |
erle |
i go to bed for a while |
15:11 |
MTDiscord |
<luatic> eep well |
15:11 |
erle |
nah i will just rest |
15:11 |
erle |
> eep |
15:11 |
erle |
this is what ppl who are like 25 say right? :D |
15:11 |
erle |
eepy peepy |
15:11 |
copygirl |
> hell even minetest survives thousands of entities (barely) |
15:11 |
copygirl |
That kind of proves my point tho. |
15:12 |
erle |
what is your point? |
15:12 |
copygirl |
That Minetest can't "really" handle thousands of entities. |
15:12 |
erle |
i'm pretty sure a nice thing would be to handle thousands of players |
15:12 |
erle |
but come on, whatever performance problems are there, they are *probably* superficial |
15:12 |
copygirl |
Yeah that would be nice though players are a bit more effort to process than other entities. |
15:13 |
erle |
like the thing where signs made using texmods have some non-zero performance impact |
15:13 |
erle |
because using many texmods has some non-zero performance impact |
15:13 |
erle |
(because the parser is a bit weird, unless it has been changed) |
15:14 |
copygirl |
Maybe not the best example but this is the kind of thing I'm talking about: https://www.youtube.com/watch?v=F-v6Xz6-pf4 |
15:14 |
copygirl |
Maybe I can find the video I'm thinking of. |
15:15 |
MTDiscord |
<luatic> erle: i think i have a linear time texmod parser in modlib |
15:15 |
MTDiscord |
<luatic> this comes at the cost of not being 100% congruent with the current shotgun parser, which allows messy thingies |
15:16 |
MTDiscord |
<luatic> but as far as the docs (lua_api.md and the docs i wrote) are concerned, it should be correct |
15:17 |
MTDiscord |
<luatic> and i also churned gazillions of real world texmods through it (collected with lizzy's help) |
15:19 |
muurkha |
luatic: that's fucking awesome |
15:19 |
MTDiscord |
<luatic> thanks :) |
15:20 |
MTDiscord |
<luatic> i feel i should maybe split this off into a separate mod... |
15:20 |
MTDiscord |
<luatic> (that is true for much of modlib) |
15:20 |
MTDiscord |
<luatic> but mods always have this overhead.. need to make a new repo, move stuff there, mod.conf, readme, forum post, contentdb package yadda yadda.. |
15:22 |
MTDiscord |
<luatic> here's the link to the bot lizzy wrote to collect texmods from servers, btw: https://github.com/LizzyFleckenstein03/texmodbot/ |
15:47 |
MinetestBot |
[git] grorp -> minetest/minetest: Notify users to reinstall MTG if worlds exist (#13850) d05da51 https://github.com/minetest/minetest/commit/d05da513beef622b8c74f0ab5c56af9c74512b2b (2023-10-08T15:47:00Z) |
15:47 |
MinetestBot |
[git] Wuzzy2 -> minetest/minetest: Add script to update/generate mod translations (#13739) 2c74797 https://github.com/minetest/minetest/commit/2c74797d340be791b1891596b26ca311815afa93 (2023-10-08T15:47:11Z) |
15:49 |
|
fluxionary joined #minetest |
15:58 |
|
Thelie joined #minetest |
16:06 |
|
MTDiscord1 joined #minetest |
16:06 |
|
s20 joined #minetest |
16:13 |
MinetestBot |
[git] sfan5 -> minetest/minetest_game: Fix typo in German translation b58991d https://github.com/minetest/minetest_game/commit/b58991d4f3d34449da670ee1948d414323fa89db (2023-10-08T16:11:44Z) |
16:13 |
lissobone |
I've checked out Arena_Lib, and in spite of its apparent inability to correctly set lighting (it crashes while saving the parameters, though they do display well), it's literally the best mod for mini-games. Should've done my manhunt mod with it. Hell, I ought to rewrite it COMPLETELY, for it's an unreadable and unmaintainable mess. I will closely follow the directives from SICP. |
16:16 |
muurkha |
luatic: splitting dependencies is tricky. it's less hassle to add one dependency on one version of one library than on N versions of N libraries |
16:16 |
muurkha |
lissobone: not sure SICP is a reliable guide to making your code maintainable; if it were, there wouldn't be nearly as much Java and Golang code in the world as there is |
16:17 |
muurkha |
or TypeScript |
16:17 |
muurkha |
(though to be fair there's quite a bit of Lua, Python, and JS now) |
16:18 |
lissobone |
It's not just a "reliable" "guide", it's one of the Bibles of the LISP world. |
16:19 |
|
lissobone left #minetest |
16:22 |
muurkha |
it certainly is, and it changed my whole way of thinking about programming |
16:24 |
|
lhofhansl joined #minetest |
16:25 |
muurkha |
but what SICP aims at is maximum flexibility, obviously not maximum performance, nor maximum maintainability or even maximum readability; and those goals are not always aligned. most of maintenance consists of looking at existing code to figure out what it does and how, and most importantly what it does *not* do. SICP is all about making code that can do *anything* |
16:39 |
|
Thelie joined #minetest |
16:43 |
|
Sobinec joined #minetest |
16:54 |
|
grorp joined #minetest |
17:08 |
|
calcul0n joined #minetest |
17:09 |
|
mrkubax10 joined #minetest |
18:11 |
|
mazes_83 joined #minetest |
18:20 |
|
calcul0n joined #minetest |
18:43 |
|
qqq joined #minetest |
19:47 |
|
doseijin joined #minetest |
19:53 |
|
jaca122 joined #minetest |
20:01 |
|
gxt joined #minetest |
20:34 |
|
fling joined #minetest |
20:34 |
erle |
luatic “i think i have a linear time […] parser, but it is not exactly the same” hihi ;) |
20:34 |
erle |
luatic oh that is why lizzy has a script to collect texmods! |
20:35 |
erle |
i noticed it today |
21:03 |
|
jaca122 joined #minetest |
21:16 |
|
fling joined #minetest |
21:36 |
|
YuGiOhJCJ joined #minetest |
21:45 |
|
est31 joined #minetest |
21:45 |
|
YuGiOhJCJ joined #minetest |
22:32 |
|
panwolfram joined #minetest |
22:56 |
|
ball joined #minetest |
23:46 |
|
gxt joined #minetest |