Edit history:
tigrou: 2016-03-19 04:25:22 pm
tigrou: 2016-03-19 04:24:16 pm
tigrou: 2016-03-19 06:53:37 am
tigrou: 2016-03-19 06:51:54 am
tigrou: 2016-03-19 06:50:23 am
tigrou: 2016-03-19 06:47:09 am
tigrou: 2016-03-19 06:46:11 am
tigrou: 2016-03-19 04:02:54 am
tigrou: 2016-03-19 04:02:42 am
tigrou: 2016-03-19 04:02:05 am
tigrou: 2016-03-19 03:57:55 am
tigrou: 2016-03-19 03:55:49 am
tigrou: 2016-03-19 03:54:35 am
tigrou: 2016-03-19 03:50:36 am
tigrou: 2016-03-19 03:49:48 am
tigrou: 2016-03-19 03:26:20 am
tigrou: 2016-03-18 04:26:48 pm
tigrou: 2016-03-18 01:02:33 pm
tigrou: 2016-03-18 10:30:50 am
tigrou: 2016-03-18 10:30:22 am
tigrou: 2016-03-18 10:28:54 am
@LotBlind : I already answer some of your questions. I will probably EDIT later and add more
Yes, exactly, it is like a bot that do the speedrun for you. The path might or might not be optimal depending the steps you ask him to do. The bot is dummy: for example it does not try to find OOB. He just follows your orders : "go here, do a OOB here, take that object, do another OOB here...". If you ask the bot to go to position 1 then position 2, it will interpolate them by a straight line (which is, by definition, the shortest path between two points). You just have to make sure there is no collliders between those two points.
Since the game controls are simple (tank controls) it is probably feasible for such a bot to achieve similar performance as the one of a human player. In contrast, it would be very difficult (if not impossible) for a bot to be as good a human in a Quake speedrun.
That was another approach : to not "autopilot" the game but have a list of key shortcuts to use to make the speedrun easier. Running by pressing a single key is one of them. I think Diablo3 players do this with AutoHotkey.
Yes it would be possible in theory (but not easy). However you will probably get a lot of false positives. The real question is: will it be really useful ? I think you almost checked 99.9% percent of all the corners in E0-E4. The only remaining places are now in E5-E6. How much is left there ?
Could you please send me a video of the room viewer during the glitch (with orthographic camera) ? it will be a lot easier to understand.
You can summary OOB like this : first player need to be in contact with at minimum two boxes : eg : one actor and one collider, two colliders, ...
Then you have to think about the position where player will end up. This is in same direction as player angle and about same distance as player bounding box.
Then check which are the colliders for that new position : if there is only one (instead of two) then chance are there will be an OOB. The missing collider (the one that you were in contact before) will be the wall you will penetrate.
The order in which you check the boxes is very important. First you need to check the walls, then the actors. That order is important because the engine will fix/update player position if necessary between checks.
I'm not sure to fully understand what you mean. Do you mean that above a certain boderline your player position get clipped and you cannot reach some actors ?
In that case the explanation could be this : each actor (including player) store its position using 16-bit variables (thus only -32767 32768 range is possible)
That position stored in memory is not the actor global position (relative to the whole floor) but a local position, relative to the current actor room (so at 0,0,0 the actor should be near room center).
It might explain why some actors clip before some others (they has to be in different rooms btw).
Note that the player position shown in the viewer (in the up right corner) is the global position not the local one. It's done like this to have a easy way to reference any player position, regardless current room.
We know this since a long time, its written in the wiki
You are right. I already explained that to NHG in a private discussion (in french) :
=> all rooms of a given floor are loaded in memory.
=> there is a notion of "active room" per actor. For a given actor, collisions against walls are checked only for the active room of that actor.
=> all actors are not loaded to memory. only actors which are in the same room as the actor referenced by CURRENT_TARGET (a global variable) are loaded to memory. By default CURRENT_TARGET is PLAYER. It mean actors are loaded depending where player go. Same for camera which is targeted on player. But the game can temporary change that variable (eg : when zombie poulet goes trough the window, or arrow in the gallery). So when CURRENT_TARGET = ARROW it's the arrow which decide which actors are loaded and the camera image to be set (depending the room where the arrow is).
LOL, mega jump!
Quote:
it sounds like botting except it doesn't produce an optimal path between the two places necessarily.
Yes, exactly, it is like a bot that do the speedrun for you. The path might or might not be optimal depending the steps you ask him to do. The bot is dummy: for example it does not try to find OOB. He just follows your orders : "go here, do a OOB here, take that object, do another OOB here...". If you ask the bot to go to position 1 then position 2, it will interpolate them by a straight line (which is, by definition, the shortest path between two points). You just have to make sure there is no collliders between those two points.
Since the game controls are simple (tank controls) it is probably feasible for such a bot to achieve similar performance as the one of a human player. In contrast, it would be very difficult (if not impossible) for a bot to be as good a human in a Quake speedrun.
Quote:
I see you suggested to get precise turning from this...
That was another approach : to not "autopilot" the game but have a list of key shortcuts to use to make the speedrun easier. Running by pressing a single key is one of them. I think Diablo3 players do this with AutoHotkey.
Quote:
Do you think there's any way to automate finding spots where you can clip?
Yes it would be possible in theory (but not easy). However you will probably get a lot of false positives. The real question is: will it be really useful ? I think you almost checked 99.9% percent of all the corners in E0-E4. The only remaining places are now in E5-E6. How much is left there ?
Quote:
I also want you to help me analyse, if you can, what happens when I do the OOB I showed earlier
Could you please send me a video of the room viewer during the glitch (with orthographic camera) ? it will be a lot easier to understand.
Quote:
Actually I think what's happening is this: the game does a projection of where the player will end up
You can summary OOB like this : first player need to be in contact with at minimum two boxes : eg : one actor and one collider, two colliders, ...
Then you have to think about the position where player will end up. This is in same direction as player angle and about same distance as player bounding box.
Then check which are the colliders for that new position : if there is only one (instead of two) then chance are there will be an OOB. The missing collider (the one that you were in contact before) will be the wall you will penetrate.
The order in which you check the boxes is very important. First you need to check the walls, then the actors. That order is important because the engine will fix/update player position if necessary between checks.
Quote:
When I tried doing some more wrapping around with all objects visible, I noticed that some of them look like they're beyond the wrapping point completely, i.e. I can't get to their coordinates. Is this just the way the viewer is rendering the game?
I'm not sure to fully understand what you mean. Do you mean that above a certain boderline your player position get clipped and you cannot reach some actors ?
In that case the explanation could be this : each actor (including player) store its position using 16-bit variables (thus only -32767 32768 range is possible)
That position stored in memory is not the actor global position (relative to the whole floor) but a local position, relative to the current actor room (so at 0,0,0 the actor should be near room center).
It might explain why some actors clip before some others (they has to be in different rooms btw).
Note that the player position shown in the viewer (in the up right corner) is the global position not the local one. It's done like this to have a easy way to reference any player position, regardless current room.
Quote:
Have you guys noticed this game has a pause button?
We know this since a long time, its written in the wiki
Quote:
What I said earlier about monsters being in a different room ...
You are right. I already explained that to NHG in a private discussion (in french) :
=> all rooms of a given floor are loaded in memory.
=> there is a notion of "active room" per actor. For a given actor, collisions against walls are checked only for the active room of that actor.
=> all actors are not loaded to memory. only actors which are in the same room as the actor referenced by CURRENT_TARGET (a global variable) are loaded to memory. By default CURRENT_TARGET is PLAYER. It mean actors are loaded depending where player go. Same for camera which is targeted on player. But the game can temporary change that variable (eg : when zombie poulet goes trough the window, or arrow in the gallery). So when CURRENT_TARGET = ARROW it's the arrow which decide which actors are loaded and the camera image to be set (depending the room where the arrow is).
Quote:
Just go down to E5 via study and jump into the stairs trigger. Hahaha.
LOL, mega jump!