Gravity Hull Designator [Localized Physics] - new thread

**The old thread got locked because of the post count limit. Here’s a link if you need one of the old posts: http://forum.facepunch.com/showthread.php?t=1085630&p=29623508&viewfull=1#post29623508
Unfortunately the good people at facepunch didn’t think it useful to allow editing or quoting of locked thread posts, so I can’t get the BBCode for the original post nor can I add a link to this one in the old thread. I don’t have a lot of time right now, but I’ll reproduce the original post as best as I can over time, beginning with a straight copypasta not preserving formatting. I suppose this is my chance to reformat the OP anyway, might as well take it.

For now if you want a decent-looking page, use the link to old thread.**

RECENT UPDATES
Git Merge: Fixed tooltip text (thanks to MattJeanes being far less lazy than myself)
Revision 27: Fixed the underwater system in gm13.
Revision 26: Ported to Gmod 13, some infinite map fixes, physghosts also should work now.
Revision 25: Fixed smartsnap in infinite maps (partially), fixed spawning initially without weapons.
Revision 24: Fixed hulls from erroring when broken. Added the map used for Map Repeater – uncomment the second line in lua/autorun/gravityhull_init.lua in order to enable it.
Revision 23: Stopped maprepeat from loading, it was breaking spacebuild even in unaffected maps.
Revision 22: SUBMARINES YEAHHHHH
• added the prealpha maprepeat code-- don’t use it yet though.
• fixed players in hulls being invisible underwater.
• fixed players in hulls having incorrect lighting (sort of).
• stopped the water warp effect from being visible when in a hull.
• increased the minimum distance for water fog while in a hull.

if you’re updating from an early revision, I recommend scrolling down and looking at r12, r17, and r20, they’re awesome.

Well, here it is, a thread for my localized physics mod, currently in BETA. It was announced a four hours back in waywo by a friend, who posted it for me due to my lack of a facepunch account. Obviously I have one now and I decided to just go ahead and make a thread for it. A lot of people say it has the potential to change gmod forever, and I agree if only because that’s what it’s designed to do. Most of what it does is explained in the videos, so I’ll refrain from babbling and just let you see for yourself. NOTE: In video 1, it says the transitions are problematic. They are not anymore, as you can see in video 3. These were recorded with a couple days inbetween so things have changed for each video.

VIDEO ONE IS OLD. Most of the bugs mentioned in the video have been fixed by now, including velocity. The third video was made today so it gives a much better idea of the state the mod is in, but I posted the old video anyway since it explains what the mod does and how it works, and those two things have not changed. I’ll probably make a new all-in-one video when the beta is released.

[media]http://www.youtube.com/watch?v=56j7jaEtDTc[/media]
[media]http://www.youtube.com/watch?v=xn4bDLPY69Q

DOWNLOAD
It’s been a while since I updated this page, but the new thread kind of brought some issues with the page to light. For quite a while now this page has recommended using SVN while there is actually a more up-to-date GIT repository for the mod. I’m not sure how to explain to you how to use Git if you don’t know, but the link is here: https://github.com/superllama/gravityhull

You can also still download the mod from the googlecode SVN repository at http://gravityhull.googlecode.com/svn/trunk/ - see http://wiki.garrysmod.com/?title=SVN for information about using SVN if you don’t already know.

What defines the hull?
The interior of the hull is defined as the set of locations where there is a floor under you, and if the point’s elevation from the floor exceeds the vertical protrusion factor, it also requires at least one non-floor (a wall or ceiling).

What this ISN’T:
• NOT a module, the mod is made entirely with lua and has no dependencies.
• NOT a reimplementation of source physics, it’s a complex illusion that involves a room in the middle of nowhere.
• NOT a wall walking mod, though it can be used on something and then rotated 90 degrees so that down is now the wall.
• NOT a spherical planet mod. “Down” inside the ship is defined as the orientation gravity was pulling when the tool was first used. Spawn a dumpster, shoot it, flip it upside-down, and you’re on the ceiling.
• NOT a way to stick to things. Again, down is only one direction internally and you cannot walk around the inside of a ring unless you make it out of multiple hulls, each with their own down. This might be made easier in the future.
• NOT a map entity. I might make a map entity later on that allows the effect to be present, but for now it’s just something you build with.
• NOT a collision engine. This mod uses nothing more than source’s built-in havok implementation, but it sure fools it a lot. Many shortcomings of havok are avoided by making it think something different is happening.

What this mod IS:
• a localized physics environment for any contraption, essentially behaving as if each hull was its own map.
• a tool that anyone can use on any set of welded props that has a clear interior and exterior.
• the first and only complete spazz protection for ships. Since the ghost doesn’t move, entities inside cannot be thrown through the wall.
NOTE: In the future there will be a slider to control how much entities are thrown around by motion, but it will be applied in a backwards manner (negative velocity to the props, not positive velocity to the ghost) to avoid wallclipping, so even a 0% dampener will still stop spazz deaths even though it will throw things around just as much as before.
• a separate area with its own sense of “down.” Gravity’s internal direction is defined when you first designate your hull, and does not change relative to the ship’s rotation.
• a stabilizer for pretty much any vehicle you can think of. Boats are especially interesting with the tool applied, because you actually rock back and forth in the water.
• linked with the outside world as seamlessly as possible-- the physgun behaves properly for the most part, and you can toolgun entities on the outside while you’re inside a hull, as well as press buttons/get in chairs.
• an override of many built-in functions such as GetPos, so there is a chance that your favorite mod might work with it already without any changes.
• a very convincing illusion. You’re not actually in your ship, but it sure looks like you are. For this reason a lot of things (manhack lights for example) might render in the wrong place. But hey, a video game is just an illusion too, so who cares.
• a simple change brought on by extremely non-simple code, that can revolutionize almost everything else that’s already possible with the simple addition of walking in a moving object and gravity being affected by rotation.

FAQ
Q: My contraption isn’t working, it says it was designated but it isn’t!
A: Does it have walls or a ceiling? If not, you need to increase the Vertical Protrusion Factor.

Q: Does this work with spheres?
A: Not in the way you’re asking.

Q: Does this work with <<SUBJECT ADDON HERE>>
A: Maybe; depends on what the addon does. There may or may not be conflicts and there’s a decent chance it won’t work inside the hull, but lots of mods do. It’s a matter of overriding the right things and I plan to fix as many of these as I can.

Q: I just want to fly a spaceship, I don’t want people running around climbing walls like spiderman.
A: They can’t. The only way you can walk on a wall is by making a “ship” and rotating it so that its floor is on the wall (or designating the wall with hit surface defines floor checked)-- it’s not just a “climb wherever you want” deal.

Want to give me a little push?
Modding is a labor of love, but it doesn’t make any money, and neither does anything else I do. Therein lies the problem with my projects-- I have to set them aside at lower priorities than things that could potentially provide an income. I have no income at this time so looking for a job and working with my indie group to start off with some steam games is my top priority, and oftentimes I’ll go for long stretches without working. Donations are an excellent excuse to get back to work on the mod for a week or so, so if you want to give me a push either to encourage me or to prod me back to work, I have a paypal account and my days are made when I see “notification of donation recieved” in my email inbox! I care a lot about my project, and donations make me care even more, and give me something to show for the work that I put into something other than my indie group’s game engine.
[http://i.imgur.com/Vvp0w.png](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=8B3SY4XU8D6T8&lc=US&item_name=Gravity%20Hull%20Designator%20Developer% 27s%20Tip%20Jar&item_number=gravityhull&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonH osted)

I also have a bitcoin wallet: 13SC8WFS8ukDTU3UVNCicmo7Cw1x1QqVT6 – if you donate btc and want me to know who you are, leave a PM with your wallet address so I know who to credit.

Currently, my todo list looks something like this:
TODO
• Optimize the constraint-enabled in/out scanner to reduce lag.
• Add the ability for the effect to be (adv)duplicated, including objects welded to the inside of the ship.
• Fix the hull within a hull within a hull from sending you to limbo
• Work on making major mods work flawlessly with the mod, especially wire and spacebuild.
• Implement a dampening percentage slider so that values below 100% will allow some inertia through.
• Implement a dampening threshold slider so that only velocity changes above the value will obey the above.
• Recode the physgun beam in lua so that it renders.
• Add a stencil system so you can have the classic “cloaked ship with a doorway” effect, plus total exclusion of water effects in a hull.

SPECIAL THANKS TO:
• Cerberus Studios, a mod team that I am apart of, working towards being an indie game company, both for beta testing support and allowing me to take breaks from my game engine work to work on this. Keep us in mind if you ever see a Cerberus game on steam, it means I worked on it!
• Lavacano for providing the original alpha server, which served well for pre-facepunch releases. Though the server was overwhelmed as soon as it was announced here, it played a valuable part in the making of the mod.
• Divran for always nagging me to finish it and always being there to help with algorithm design-- and he split shipdef.lua into a bunch of files for me.
• The Wiremod forums and team for providing the original home for my Attempting the Impossible project, out of which this mod stems.
• Valve for obvious reasons, Garry for said obvious reasons and additionally for the FP highlight.
• The SBEP modellers for imagining a world without prop spazz and describing it in model form, which is perfect now that such a world exists.
• The spacebuild/sbep teams in general for making such a perfect purpose for a walk-around spaceship.
• Everybody that posted in this thread, whether it be with a bug report, encouragement, a video, or discussion; it’s been helpful.
• The donators for giving me another excuse to work on the mod, and brightening my day whenever I see paypal notifications :smiley:

OLD CHANGELOG
Revision 21 fixed the rocket launcher and improved velocity support so that ship velocity is added/subtracted during transitions.
Revision 20:
• added FireBullets support, fixing most SWEPs
• fixed ghosted explosives from infinitely exploding
• fixed a stack overflow when welding a contraption to the inside of a hull
• fixed transitions between ships taking too long to reset
• added a player gravity slider (will work on props later on)
• added a Help button to explain how to use the tool
• added a GravHull.RegisterHull(ent,protrusion,gravity) function for developers (YOU WILL NEED TO CALL GravHull.UpdateHull(ent) AFTERWARDS)
Revision 19 fixed stack overflow when welding an object to the inside of a ship
Revision 18 fixed easy weld and keep upright causing an error
Revision 17 added/fixed:
• New Tool Handler

  • most tools work both inside and outside the ship now, including many wiremod ones
  • physghosts can be constrained, colored, etc, redirecting to the actual entity
  • ship prop modifications can be applied from the inside (i.e. color, material)
  • should fix most trace-related errors including the WAC helicopter bug
    • Fixed entities spawning hundreds of physghosts by accident
    • Fixed physghosts permanently setting a prop’s mass to 4768
    • Added client console command ‘ghd_fixcamera’ which, if run enough times, should fix the camera bug whenever it occurs
    • Fixed open sbep doors in a hull being closed on the inside
    Revision 16 re-fixed buttons and chairs
    Revision 15 fixed sbep lifts and hopefully spacebuild and stargate.
    Revision 14 fixed the AddCSLuaFile bug.
    Revision 13 fixed the floor checkbox designating hulls with extremely wrong angles, various lag/crash problems involving the new hull scanner, stopped the tool from designating something that’s already designated, and fixed a bug with physghosts where a prop would disappear if you held a prop, put it in the ship, then walked in yourself without letting go.
    Revision 12, added/fixed:
    • New Hull Scanner
  • ignores no collides
  • builds a hull out of welded/nailed props
  • adds anything constrained without a weld (ropes, hydraulics) to the “moving parts” list for permanent physghosting, allowing hydraulic doors to function with collision
  • two constrained hulls will also add each other as permanent physghosts
    • SBEP Door Support
  • uses SetNotSolid, so props will remain in the ship until they exit the door
    • Vertical Protusion Factor Slider (0 to 300)
  • sets the maximum distance from the floor for an entity to be inside the ship without a ceiling or walls
    • Hit Surface Defines Floor checkbox
  • if checked, gravity will be perpendicular to the normal of your tool’s hit trace
  • in laymen’s terms, shoot the surface you want to walk on.
    • Stopped rotating objects in a ship from pressing Use
    • Applied Divran’s file splits and loader
    • Cleaned up the code a bit and moved the globals into a table called GravHull
    Revision 11 fixed the chair teleport issue.
    Revision 10 re-fixed physghosts, added explosion effects to gas cans, and stops physboxes from crashing
    Revision 9 fixes vehicles, the invisible toolgun, no collide (sort of), and hopefully player respawning in ships
    Revision 8 should fix the thruster crash (the ship was absorbing itself) and stargates, and the following hooks for easier mod integration:
    • EnterShip(ent,ship,ghost,oldpos,oldang)
    • ExitShip(ent,ship,ghost,oldpos,oldang)
    • ValidHull(ent) – return false to disallow ent from being considered part of the hull geometry
    • OnCreatePhysghost(ship,ent,physghost) – used for custom extra steps in the setup of physghosts (the objects you’re actually dragging when you drag physgun something outside from inside a ship)
    • AllowGhostSpot(pos) – return false if pos should not be used to spawn ghost ships (i.e. underwater, though this is disabled by default)
    Revision 7 should fix Smartsnap and possibly certain aim-based E2’s
    Revision 6 should fix the GetPhysicsAttacker crash
    Revision 5 fixed:
    • Chairs/Buttons not working when welded to a ship
    • Sharpeye compatibility (and hopefully other view mods too, if you had the camera bug this should fix it permanently (EDIT: or not))
    • Physghosts (they were nonfunctional due to a typo)
    Revision 4 fixed entities not ghosting properly
    Revision 3 fixed the in/out algorithm giving unexpected results

Could it be possible to implement a second mode which allows you to select individual parts on a contraption?
Otherwise, thank you for this mod.

Yeah, that’s been suggested a lot-- the main problem with it is the fact that hulls grow and shrink as you add or remove props so even if you start with one prop and add more onto it, the hull covers the whole ship. The reason for this is I’d always imagined having GHD’d ships flying around and getting parts destroyed by weapons, and the engineers on board having to replace the part while it’s still moving. Plus I always wanted people to be able to make modifications to their ship without having to disable the gravity hull. Most of the benefits of having individual prop GHD support is that you can make a single ship with multiple gravity vectors-- but you can already do this since the hull expansion mechanism never overtakes a prop that’s already been claimed. It’d probably be easier to come up with a solution if I knew the reason for suggesting the feature-- there might be a solution that works better with both the code and the problem than just having another mode that makes a different kind of non-expanding single-prop hull. One possibility would be the option to exclude specific props and prop chains from the GHD rather than including them-- this would allow the hull expansion code to run normally but have a way of stopping it.

You should definitely embed the videos in the OP so people realize what this really is.

Damn this is cool

WHY YOU NO WORKSHOP?

I opted not to use the workshop for the same reason wiremod did-- issues with licensing and intellectual property along with the fact that it’s harder to update than a simple SVN. I hope it’s not too inconvenient.

I have never used this mod and probably never will - it looks cool though so have some free money.

I was wondering if I could possibly use and edit your addon for another game mode called Community Roleplay? I want to make some type of train entity and use your script to keep players on. This is all an idea though.

That server list is about two years old, you should just remove it. Or at least the one about me.

Thanks, I appreciate it. Always nice to have a free meal.

Good point, I completely skim over that every time I look at the OP, just removed it.

Technically if the gamemode doesn’t have a toolgun, you can just install Gravity Hulls as they already are and then call the right functions from inside the gamemode-- just look at localphysics.lua in the toolgun folder of my mod to see how it sets up hulls. If you need to, you can remove the entities folder from my mod and just use the autorun code-- it’d be best if you could keep my addon separate though and make it a dependency rather than just taking the code out of it-- that way any bugs I fix will be fixed in your application of the mod as well provided people keep it up to date. If you really have to though, just use my autorun and gravityhull script folders and leave the file structure intact as best you can, taking out the entities folder and stuff. Also make sure I’m properly credited if you do have to take my files and put them in your gamemode folder. Again, I’d prefer it if you just kept my mod as a dependency and then made any changes to it in the form of overrides in your own autorun code-- you can wrap functions or even replace them the same way I do with sandbox functions in my code.

EDIT: Of course if you’re not the developer of the gamemode and you’re just running a server and want to make two existing mods working together, you can do whatever you want with it. I just don’t want a publicly available gamemode to include a lot of files from my mod if it’s possible to just leave them separate.

Yep I completely understand where you are coming from. I want to make it a dependency for a type of train mod that will automatically apply your physics mod to the floor so players can jump on a working train in game, ect, ect. This is for a public gamemode I’m currently working on, so I would keep all your work in a separate spot with your credits at the top of each page. Mainly I want to use the mod as a learning experience but not only that, added to a train entity would make for one hell of a train mod in a roleplay game. If you are curious about the gamemode it is Community Roleplay, in this forum somewhere. Also this might not be added anytime soon as right now it is all just concept. But I do appreciate the kindness of letting me work around you mod.

No problem. I’d still look into keeping my code as is in addon form and strictly using overrides and calls though, if that’s possible for you. You wouldn’t need to include any of my code in the gamemode folder that way, people could keep it up-to-date separately with their svn/git routines, and all you’d really need to do is wrap all GHD-requiring code and wrappers with “if GravityHull then” in your code. Plus, if you can manage to implement GHD usage without moving any of my code into your project, you don’t even need to credit me for it-- you can just say in the gamemode’s description “best played with Gravity Hulls installed” or something like that. Also feel free to steal anything out of the STOOL’s code if you do that, it’s not always clear how my functions need to be called and obviously if you want to take the strict calling/overriding approach you’ll have to probably look at how the functions are called by the regular implementations.

EDIT: Looking at this old OP makes me realize how little attention I’ve paid to the public image of the mod, lol. So much information on that first post is extremely outdated and I’m a little embarrassed that it was still up there. One thing I don’t know if everyone noticed is there is now a github page for GHD if you want to help out with code contribution and fixing small errors or adding compatibility for mods, available here: https://github.com/superllama/gravityhull
I also feel like there needs to be a new video for the first page… maybe I’ll get around to it myself, but if anyone else wants to give it a shot, there’s a good chance it’ll end up on the OP. One thing I’d like to be mentioned in the videos that isn’t in any of the existing ones is Submarine support.

Protip: Never destroy the hull you’re standing on. Video coming soon.
EDIT: Oooookayyy, watching myself create a Hull in a demo crashes my game.
:v:

The reason is because my game(or my PC, it’s not the best thing in the world) hates it when GHD is applied to a steam locomotive. The frame rate drops like a stone when you axis a prop onto another prop that already has axis applied. Ballsockets help somewhat, but the frame rate still drops when the thing gets up to speed. I’m thinking it’s a limitation of this addon, but it could also be my PC.(It’s a dell laptop, laugh if you want)

Oh, that’s because of the way it treats constraints. It already only applies the hull to the prop you fire it at and other props WELDED to it, but it has to create internal physics ghosts for the other props that are attached without welds. That kind of framerate drop shouldn’t be happening, I’ll have to check that out.

Having fun !

I know this is not what it suppose to be for, but im still having one fun time.

How…did you do this?

do you not know what this topic is about? its a tool called gravity hull designator, gives you the ability to do this.

I mean, how did you get the hulls to not run into each other? Unless you applied it to each plate and then welded it.

edit:
sorry that I don’t know everything, but I thought that the way it handle’s welds would make one override the other.