Absolute beginners guide seamless level switching (draft)

 

Mar 27 22:12:26 <OneManClan> 1. Is there any way in 2019 FTE to do the ‘seamless levels’ thing, eg like HalfLife, where the next level loads as you go around a corridor?Mar 27 22:12:26 <OneManClan> 1. Is there any way in 2019 FTE to do the ‘seamless levels’ thing, eg like HalfLife, where the next level loads as you go around a corridor?Mar 27 22:15:52 <KrimZon_2> it might be doable in the quakec – I made some extension ages ago that let you inspect the properties of entitiesMar 27 22:16:24 <Spoike> the way I see it, its just a gamecode thing.Mar 27 22:16:51 <Spoike> just use some parms for the player’s position relative to the trigger_changelevelMar 27 22:17:33 <Spoike> any ents that you want to transfer with you can be passed via changelevel’s startspot arg (you’ll need to stringify any entity data)Mar 27 22:18:18 <Spoike> (be sure to remove them, so that you don’t get dupes when you return to the same map later)Mar 27 22:19:28 <OneManClan> oh.. im just talkin from the point of having the next level load without a ‘break’Mar 27 22:19:38 <daemon> what about the load screen part, yea thatMar 27 22:19:48 <OneManClan> yeaMar 27 22:20:05 <Spoike> even halflife had loading screensMar 27 22:20:28 <OneManClan> there was a *tiny* ‘glitch’Mar 27 22:20:33 <daemon> there were some parts that it seems like it was pretty minimalMar 27 22:23:00 <Spoike> if your aim is to reduce load times, then you can preload the next map before the changelevel callMar 27 22:23:46 <daemon> i think it was more that it just said loading in the middle really tiny for a couple seconds so you could still see the mapMar 27 22:23:48 <Spoike> just precache it a few seconds early and it’ll be in memory when the changelevel actually happens.Mar 27 22:25:19 <OneManClan> so the ‘console coming down’ is an (automatic) engine ‘response’ to the map not being ready yet?Mar 27 22:25:48 <Spoike> if you just want the console to stay hidden then just set con_stayhiddenMar 27 22:27:57 <OneManClan> so how do you precache a level?Mar 27 22:28:27 <OneManClan> precache_fileMar 27 22:28:29 <OneManClan> ?Mar 27 22:28:50 <OneManClan> “This builtin does nothing. It was used only as a hint for pak generation”Mar 27 22:30:02 <Spoike> precache_modelMar 27 22:30:28 <Spoike> precache_model(“maps/foo.bsp”)Mar 27 22:31:02 <eukara_h> setmodel(player, “maps/start.bsp”); // Go!Mar 27 22:31:41 <Spoike> probably best not to setmodel the player to a bsp, but stranger things have happened.Mar 27 22:31:50 <daemon> would it be beneficial at all to somethow precache files loaded with fopen(); ?Mar 27 22:32:11 <daemon> somehow*Mar 27 22:32:22 <Spoike> no.Mar 27 22:32:47 <eukara_h> precaches are mainly useful to tell the clients what resources are used to download stuffMar 27 22:32:57 <eukara_h> to do index mapping and whatnotMar 27 22:33:28 <eukara_h> fopen on the ssqc is not gonna require the clients to do anythingMar 27 22:33:35 <Spoike> yeah, the primary reason to precache stuff on the server is to establish a name->index->name mapping for smaller networking.Mar 27 22:33:37 <eukara_h> since the logic runs on the server… soMar 27 22:34:03 <Spoike> but precaching stuff also gives the client a change to load stuff ahead of when its needed.Mar 27 22:34:32 <Spoike> combine that with fte’s loader threads and you can load the next map with all its textures and stuff in the backgroundMar 27 22:37:03 <Spoike> clients will still need to wait for all the precache lists though. :(Mar 27 22:37:43 <Spoike> makes me wonder if it might be possible to delta-compress those from one map to the nextMar 27 22:39:19 <Spoike> though singleplayer will have enough bandwidth that a player wouldn’t notice.Mar 27 22:39:58 <Spoike> it should also be possible to grab a screen capture just before the loading screen, and keep presenting the same image behind the loading screenMar 27 23:05:00 <OneManClan> https://pastebin.com/RLqFguwxMar 27 23:05:22 <OneManClan> theres still 2 seconds pf black screenMar 27 23:06:55 <OneManClan> hmm.. a screencap might do itMar 27 23:08:07 <daemon> what happens if you turn off screen clearing in csqc during that time?Mar 27 23:08:24 <daemon> or is that super hacky?Mar 27 23:17:53 <OneManClan> (Q2 is unrelated to this one, ill save it for tomorrow)Mar 27 23:18:15 <Spoike> vanilla nq just didn’t refresh at all while loading.Mar 27 23:18:57 <Spoike> (except for the initial loading message shown while the rest of the gamestate was still valid enough to redraw the screen)Mar 27 23:21:07 <OneManClan> um holdon i just realised .. the 2 second black screen only happens on the (2nd) client, not the actual listenserver clientMar 27 23:22:04 <OneManClan> which has .2 second (?) black screenMar 27 23:22:49 <OneManClan> ie im running ‘fteqccgui + F5 client’, and ‘a second FTE connected to localhost’Mar 27 23:23:54 <OneManClan> the first has .2 second ‘load’ screen, the second has the 2 second ‘load screen’Mar 27 23:24:22 <OneManClan> (not really a ‘load screen’, the screen goes black while the level loads)Mar 27 23:24:58 <OneManClan> anyway the 2nd client is irrelevant, just ran it out of habitMar 27 23:27:33 <OneManClan> hmm and its possible that the (what looks like a) black screen might be because levels load darker and the light comes up, in the first few secondsMar 27 23:27:54 <OneManClan> of every level (ie its a qc thing)Mar 27 23:29:50 <OneManClan> so.. does that mean youd have to design each map so that the ‘matchign corridors’ are at the exact same coordinates?Mar 27 23:30:14 <OneManClan> ie so you could just copy the origin and angles from map2 over to the new map?Mar 27 23:30:26 <OneManClan> ugh i mean to sayMar 27 23:30:42 <OneManClan> ie so you could just copy the players origin and angles from map1 over to map2?Mar 27 23:31:01 <Spoike> no, just use 3 parms that are the coords relative to the changelevel triggerMar 27 23:31:18 <OneManClan> ahhhh yes brilliantMar 27 23:31:26 <Spoike> then it doesn’t matter where on the map that trigger isMar 27 23:32:51 <OneManClan> wow so this means a MASSIVE ‘neverending world’ feeling is posible without q3bspMar 27 23:33:03 <OneManClan> (large outdoor areas notwithstanding)Mar 27 23:34:36 <OneManClan> hey, might as well as Q2 now:Mar 27 23:34:37 <OneManClan> 2. Is there any way to do the um, the thing where you turn a corner, but when you go back, the room you just left has completely changedMar 27 23:34:56 <daemon> ofcMar 27 23:35:03 <OneManClan> (someone was asking about this (somewhere) recently, and I cant find it)Mar 27 23:35:12 <Spoike> ad_sepulcher can feel neverending at times… and that map fites within vanilla’s +/- 4096 bounds!Mar 27 23:36:12 <daemon> you could achieve that several waysMar 27 23:36:41 <OneManClan> Stanbley Parable had it, and it was fKN bizarre, and disturbingMar 27 23:36:57 <daemon> make that room an insert, and just swap it out with a different bspMar 27 23:37:38 <daemon> could move trainsMar 27 23:37:58 <Spoike> beware the lighting.Mar 27 23:39:02 <daemon> can you compile them with lights tho?Mar 27 23:39:23 <daemon> the non-trainsMar 27 23:39:35 <daemon> i think you can also duplicate light on trains tho right?Mar 27 23:39:43 <OneManClan> I suppose.. the solution could relate directly to Q1… make a trigger, and when you go backwards, load the other mapMar 27 23:39:47 <Spoike> you can tryMar 27 23:40:00 <daemon> or that, load a different mapMar 27 23:40:35 <OneManClan> easey peaseyMar 27 23:40:40 <OneManClan> :)Mar 27 23:41:50 <daemon> maybe pass a parm if you need to store which map to load depending on the situationMar 27 23:47:08 <OneManClan> i wonder why the ‘load delay’ was greater for the clientMar 27 23:47:25 <OneManClan> ie the second clientMar 27 23:47:53 <OneManClan> maybe its a ‘because im running 2 clients on one computer’ thingMar 27 23:52:04 <Spoike> over loopback it knows its own limitsMar 27 23:52:23 <Spoike> so it can just use 65k max packet sizes, etcMar 27 23:54:26 <OneManClan> hmmm i was gonna ask “so it wouldnt happen in a true multiplayer environment” (ie seperate computers)….Mar 27 23:54:41 <OneManClan> … but then you cant have the server running 2 maps at a time….Mar 27 23:55:06 <OneManClan> .. so this isn’t ‘multiplayer-compatible’Mar 27 23:57:25 <daemon> you’d have to move all players to the map start, it would still work multiplayer. it’s just a little odd for people who are behindMar 27 23:57:27 <OneManClan> i imagine massive games like second life have a differernt server handling each level/area?Mar 27 23:59:20 <OneManClan> Yep: “The world is divided into 256×256 m areas of land, called Regions. Each Region is simulated by a single named server instance”Mar 27 23:59:25 <OneManClan> Mar 27 23:59:26 <OneManClan> https://en.wikipedia.org/wiki/Second_Life_GridMar 28 00:00:34 <OneManClan> “each instance is given a dedicated CPU core of its own”Mar 28 00:00:40 <Spoike> if you’re talking mmos, then yeah, they either have something like quake where the player just gets teleported from one map to the next (see fte’s mapcluster command), or they do something much more fancy and connect to multiple servers at once, so you can see things moving in areas that are controlled by another server entirely (otherwise nearby stuff ends up invisible)Mar 28 00:00:52 <daemon> but if it’s coop, it’s not such a big deal to be teleported to where the rest of the players areMar 28 00:03:16 <OneManClan> wow

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>