-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create test chamber 15 #39
Comments
I mainly opened this issue to start tracking related progress and to enable collaboration on this, while chamber 14 ist still being finished. Initially I was just trying to get more familiar with Blender but ended up mapping out the complete first room of chamber 15. I used the other levels as well as the decompiled Portal map ( chamber15_first_room.mp4 |
How do you create maps for portal64 correctly? I was under the impression, that James imported the original Portal maps into blender? Is that false and he always recreated them? |
@hackgrid they are created from scratch. This allows changes to be made as necessary (e.g., simplification), and many elements of the original map are irrelevant Source engine features. I have created documentation in https://github.com/mwpenny/portal64-still-alive/blob/master/documentation/levels/file_formats.md and related pages on level objects. |
I can't say how James created the maps exactly. There are tools to import Source engine maps into Blender, such as Plumber. However, the level geometry in Portal64 maps is simplified in many places and significantly differs in format, e.g. Portal maps use box shaped brushes for most geometry Portal64 uses plane surfaces for walls etc. to reduce polycount. Materials, decals, models, lighting and other entities are handled very differently. This makes the effort required to make imported maps compatible with Portal64 not really worth it imho. |
James explained:
|
@hackgrid Thanks, good to know for sure! Then my process is not too different. I just prefer to use Hammer to view the reference map as I'm more familiar with that. |
I'm glad my documentation seems to be helpful. I don't have as much free time as you, and project documentation/management takes up some of it, but one of the main motivators for me continuing this project is being able to build game content such as levels. I'm happy you're excited about it too, though collaboration/sharing of work is important to me here. The rough order of detail passes you've listed above looks good. I think a good way to split this up would be each working on separate rooms to avoid conflicts (e.g., begin at start/end of the level and meet in the middle).
As an update, my current focus is making the animated stairs performant. It's a balance between Portal 2007 parity and smooth gameplay, and I'm also finding gaps to address along the way (e.g., f16f88a, 35e9d43). With this in mind, before chamber 15, I'd be fine if you want to take some of the remaining chamber 14 items in #5. I can resolve the conflicts - just leave a message on the issue if you go ahead with this so we don't duplicate work. |
Bold assumption. Not that I particularly care in this instance, but I'd keep statements like this one free of personal comparisons in an environment like GitHub. "I have limited freetime" would have been more apropriate.
Then we are on the same page, perhaps my wording didn't capture my intentions very well. I'd have mapped out the first room of Chamber 15 regardless of its relevance for this repository, simply because I had fun doing so. This might also be true for any contribution I've made so far, but I'd rather collaborate than just tinker with this on my own. With opening this issue, I wanted to make sure I don't step on your toes if I wanted to contribute to mapping this chamber.
Sounds like a good plan. I made a branch for this chamber on my fork, you could check out the state of the .blend file there when you want to start working on this chamber. Aside from that, I'd just keep this issue updated with what rooms I'm working on.
Thanks for the update. I'll leave a note if I'll start working on these. |
Didn't mean to offend here. In a comment in PR #15 you mentioned you recently got some free time on your hands, and you've been making frequent helpful contributions these past few weeks. "My schedule doesn't allow me to work at the same pace you have been, but this area is important/motivating to me" is all I meant. I wanted to highlight that we work in different ways which each impact collaboration, rather than "I don't have time for this". Sorry if it felt like anything more.
Sounds like my wording wasn't great either. But I agree, we have similar motivations here. This is something - in spite of time restrictions - I want to work on since I find it fun in the same way as you do. I could do that independently, but the purpose of "Still Alive" is to help encourage collaboration, focus effort, and avoid fragmentation so that we can make this project as great as it can be. So splitting it up into sections to share would work best.
I'm looking forward to progress on this. As for chamber 14, it's been quite helpful in uncovering some engine limitations. Most recent I've found is #40, which will be needed to complete the stair pit. I'm going to work around it and leave the stairs as "non-behind-the-scenes" until then (as in the above screenshot). |
Oh that makes perfect sense now. No worries and I didn't mean to put you on the spot or anything. That statement just seemed odd to me, as I simply didn't see how it would be of relevance before. Mapping is also one of my more preferred areas of working on games, so I get your sentiment. I won't mind at all, if you'd like to "reserve" certain parts of that process or certain chambers for yourself. Looking at how much more has to be mapped just didn't lead me to worry about that.
Even without knowing of that bug, I was wondering if the floor surface geometry being split into the individual stairs would also be an issue by itself. Just spitballing and perhaps that is already the work around you mentioned, but wouldn't it suffice to have a static |
Great, glad it's cleared up.
That's right. Portals in P64 can't overlap multiple pieces of collision. So the stairs can't come together to form one surface, and each individual step is too narrow on its own. The original game doesn't have this limitation and so portals on the descended stairs "just work". The added constraint in P64 allows portal placement logic to be simpler and faster. I suspect that the performance impact of changing this wouldn't be too bad (shouldn't affect portals after placement), but reworking it is non-negligible effort that doesn't feel particularly worth it for this one part of the game (I can't recall another that needs this).
Lowering the stairs beneath a static floor is what I'm mostly doing now, but portal surfaces currently require both collision and A transparent material could be added to allow the player to see the pit when the stairs are up, but portal placement logic only cuts holes in the surface a portal is attached to, so the floor would z-fight with its portals. Placing the portal surface slightly above would solve that, but also mean portals wouldn't sit flush with the floor. This would probably still look okay if the distance were small enough, but now there is another problem: when entering a portal, the player can still collide with objects behind it - i.e., the stairs hidden beneath the floor. I currently solve the collision issue by hiding the stairs far beneath the floor, but that disallows a transparent portal surface. You're right that disabling the collision would work. But in practice it doesn't seem as elegant as at first glance. For instance, how would it be configured? If in another animation channel, all animations would increase in size. If in the object name in Blender (e.g., "deactivate at beginning/end of animation"), that doesn't work nicely with the stair's different up/down animations. If in a cutscene, that would require animating and playing each stair step individually which is quite cumbersome compared to two Blender animations. Another options is a new kind of level object which deactivates the collision of everything inside of it. That could work, but doesn't have a use (for now) outside of this chamber. Some of the negatives above aren't as bad as others, but I didn't want to get too complicated in my first pass. I could animate the collision separately from the geometry. However, the animation is already fairly expensive and this change would result in doubling the number of bones. So the compromise I was working on was to have just one extra bone to show/hide a floor over top of the stair pit, which seemed like the best middle ground for the short term - until I found bug #40 at the end of my last session. So it looks like any solution will necessitate some engine improvements. It's been on my mind and now, with everything above, the approach that sounds like it strikes the best balance is the transparent floor with stair collision animated separately from geometry. I'm currently looking at some promising hot spots in code to optimize to hopefully make this more viable. I will also look at supporting nested bones in level animations. Both of these things will not only help with the stairs, but any other complex animations later in the game (escape sequence). If it's going to take more than a few more sessions, I'll push my 2-floors hack so there is a base in master that can be improved. Hope that explains the limitations and my thought process. Let me know if you have suggestions (let's continue discussion in #5). |
Update on the mapping progress: The second room along with the hallway connecting it to room three is mostly finished. ch15_second_room.mp4 |
Nice work. And with decor/decals/indicator lights too. I added similar polish to chamber 14 the other day and will finish up this week. Next week I'll be able to start on chamber 15's final room and moving platform room/hallway. |
Nice, looking forward to seeing that in-game! |
If you would open a |
Sounds good. I've created a new branch. I'll work in a separate blend file so we only have to deal with merging our work at the end. |
Great! Just something to keep in mind: if we're working on different blend files, we should try to have the same orientation in regards to the world coordinate system from the start. When rotating groups of objects in blender, small numerical imperfections can show up in the position or volume attributes due to limited floating point precision. This shouldn't generally be a problem, but can be a bit pesky to clean up afterwards. |
Yes, this is something I've run into it in the past. Good to keep in mind. I'm going to use the scaled coordinates and same orientation from the original game so it should be drop-in. |
Update: I am about ready to merge the second half of chamber 15 with the first. Along the way when building part 2 it seemed that most rocks I turned over revealed a bug or something missing. Fixed/added:
Things I've found that aren't addressed:
Given the number of items, I'm going to finish the chamber itself and merge to master so we will have a base that can be fixed/iterated on more easily, rather than hold it up indefinitely. Many of these affect more than just chamber 15 as well. I've started looking at updating the movement to be more like the original game and have made some good progress. I have the player landing in the same locations as the original game. Right now I'm looking at improving air control/strafing, which makes a big difference to the feel. @Deconimus let me know if you're interested in looking at some of the above. |
* started on chamber 15 * fizzler width can now be scaled via blender object's scale.x * fix fizzler rendering radius (remember, fizzlers are per default 2x2, still their internal width height was 1x1?) * chamber 15 first room functionally complete * chamber 15: first room decor * finished first room of chamber 15 * test chamber 15 second room WIP * chamber15 hallway from room 2 to room 3 (WIP) and more progress on room 2 * test chamber 15: added observation room to room2, added voice lines add the beginning * test chamber 15: finishing room 2 * enable "new game" menu entry for chamber 15 & boot into the intro menu again instead of straight into chamber 15 * Start on shamber 15 hazard hallway Hallway is modeled with collision. No platforms. * Decals and platform + light cutouts for chamber 15 hazard hallway * Animate one moving platform in chamber 15 hazard hallway This one animation is ~19 KB. Look at optimizing. * Add material for water hazard wall * Use water hazard wall material in chamber 15 * Start modelling final room of chamber 15 * Chamber 15 final room - side rooms * Chamber 15 final room - pistons and exit * Chamber 15 final room - observation room * Chamber 15 final room - ball launcher and catcher * Chamber 15 final room - ball trap and indicator lights * Chamber 15 final room - ball trap doors * Chamber 15 final room - collision * Chamber 15 final room - animations and triggers * Chamber 15 - escape hatch * Chamber 15 - finish final room * Chamber 15 - start on room 3 * Chamber 15 - main room 3 layout and collision * Fix UV translation Do not translate minimum coordinates, otherwise the translation will be cancelled out. * Chamber 15 - room 3 stair room * Chamber 15 - room 3 dividers and ball launcher/catcher * Chamber 15 - room 3 finishing touches * Observation room decor * Triggers * Indicator lights * Decals * Chamber 15 - merge beginning and end * Chamber 15 - fix room boundaries --------- Co-authored-by: Deconimus <[email protected]> Co-authored-by: Deconimus <[email protected]>
I found another issue involving how room visibility is determined, making it easy to trigger false positives. Since chamber 15 is so large, this caused the maximum number of static objects per frame to be exceeded and portions of the level to not be drawn. I've merged a change that improves this (see 220dd58) and will look at further improvements later. In addition to making larger chambers possible, this is worthwhile to improve general performance. Similarly, there is a maximum number of dynamic level objects (currently 48). Since fizzlers have 3 dynamic objects (fizzler itself + collision on 2 sides), and the level has 14 fizzlers, the limit is quickly exceeded and most dynamic objects are missing. I've disabled fizzlers for now. I'm thinking of supporting vertically tiled fizzlers to reduce this number, and will likely need to increase the limit as well after investigating the implications. For now - the first pass of chamber 15 is merged. There's still a lot of work to do, but this is an exciting milestone. Thanks for your help, @Deconimus. |
Good to hear chamber 15 is coming along well!
Tiling fizzlers vertically sounds like a good plan. Another thought I had back when I added the fizzler collision boxes: Instead of adding the collision as dynamic objects, we could create them as static level geometry, since fizzlers are not movable objects. I suppose this would have to be done when parsing the |
Yes, that would help. For chamber 15, that won't be enough to fit under the limit. However, optimizations like this add up. General reduction of dynamic elements avoids waste, helps avoid exceeding the limit in future levels, and is good for performance even if the limit needs to be increased regardless - especially since these elements aren't really "dynamic" in practice. The general technique of baking level data could even be extended to other "dynamic" objects. For example, converting collisionless |
Awesome work guys! :-) I noticed if you try to shoot the first camera in chamber 15, the game will freeze and the rumble goes berserk! It freezes on this frame. Shooting the second camera causes no problem at all. Trying the first camera after that again, freezes again + rumble goes berserk. (ares 136 and 1e8275e |
Thanks, I'm aware of this one. It's due the ceiling geometry when trying to place a portal there. It also happens on the back wall of the hallway you're facing. Firing directly on the camera wall should work. It's possible to fix by adding a couple more vertices but I'm going to look at the portal placement code to see if it can be made more robust in general so we don't have to think about stuff like this or add extra detail. Appreciate you testing this out! |
Great, thanks! Of course, still a big fan! :-) |
Sounds great! And that's understandable. No rush/pressure. |
I've created some issues for the problems discussed above. I mentioned this issue so they're linked. |
Earlier this week I added the moving platforms above the goo, and I just merged some basic lighting. With that, I think it's safe to call chamber 15 "created" :) There's more work to do but it's tracked in separate issues. I didn't expect the number of engine enhancements and bug fixes that would be required for this chamber, but the good news is that they benefit the entire game. In hindsight, it makes sense that 15 would push some limits given its size and complexity. |
Great work, it is awesome! Thanks for continuing this! :-) |
What is the enhancement?
Test chamber 15 is yet to be created. Rough steps include:
Mapping progress per room:
Room 1(see note)Room 2(see note)Room 3 (in progress)Moving-Platforms Hallway (mwpenny)Final Room (mwpenny)Related issues:
Add collision for Fizzler frames #41Apply blender object size to fizzlers #38The text was updated successfully, but these errors were encountered: