{"action":"created","issue":{"url":"https://api.github.com/repos/d3athrow/vgstation13/issues/3600","labels_url":"https://api.github.com/repos/d3athrow/vgstation13/issues/3600/labels{/name}","comments_url":"https://api.github.com/repos/d3athrow/vgstation13/issues/3600/comments","events_url":"https://api.github.com/repos/d3athrow/vgstation13/issues/3600/events","html_url":"https://github.com/d3athrow/vgstation13/pull/3600","id":64723300,"number":3600,"title":"Experimental Explosion Rework","user":{"login":"dylanstrategie","id":6137403,"avatar_url":"https://avatars.githubusercontent.com/u/6137403?v=3","gravatar_id":"","url":"https://api.github.com/users/dylanstrategie","html_url":"https://github.com/dylanstrategie","followers_url":"https://api.github.com/users/dylanstrategie/followers","following_url":"https://api.github.com/users/dylanstrategie/following{/other_user}","gists_url":"https://api.github.com/users/dylanstrategie/gists{/gist_id}","starred_url":"https://api.github.com/users/dylanstrategie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dylanstrategie/subscriptions","organizations_url":"https://api.github.com/users/dylanstrategie/orgs","repos_url":"https://api.github.com/users/dylanstrategie/repos","events_url":"https://api.github.com/users/dylanstrategie/events{/privacy}","received_events_url":"https://api.github.com/users/dylanstrategie/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-03-27T09:04:59Z","updated_at":"2015-03-27T12:49:41Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/d3athrow/vgstation13/pulls/3600","html_url":"https://github.com/d3athrow/vgstation13/pull/3600","diff_url":"https://github.com/d3athrow/vgstation13/pull/3600.diff","patch_url":"https://github.com/d3athrow/vgstation13/pull/3600.patch"},"body":"This modifies the way explosions behave by tweaking explosion spread to be progressive depending on what is in the way instead of simply cutting big circles and slapping ex_act on everything\r\n\r\nThis also does not seem to have added significant lag on explosion. Small explosions are still lagless, and huge explosions are still causing hangs (although this time, instead of freezing everything for 20+ seconds to delete half the station, it progresses in real time through each layer of tiles outwards)\r\n\r\nNote that this pull request is HIGHLY experimental. The base change is functional (aka I tested explosions and they work about as intended) but it acts oddly in some fashions :\r\n\r\n- Due to the use of view() as a very simplified way of calculating penetration, transparent bomb-proof material, isn't. This notably includes windows in all cases. This has minimal impact with ex_act 1 since only walls can hope to stand in the way, and maximal impact with ex_act 3 since reinforced windows can shield it (and maximal impact on reinforced plasma windows in all cases)\r\n- Since the quality of ex_act procs is hit and miss, this can lead to some items being painfully hard to penetrate or damage, while others just yield too easily\r\n- If an explosion fails to destroy an object, it shields everything \"behind it\". While we all know 2D view procs can have wonky results with complex destruction patterns, this also allows one single \"lucky\" rwall or wall (prob() is used far too much in ex_act()) to casually shield everything behind it from ANY kind of following damage. \r\n- The above is mostly a problem with the way ex_act itself is handled. I propose keeping the devastation, destruction and damage ranges for logging and bomb power calculation, but determining DIRECT damage at each specific range via a -more or less- linear function instead of just saying \"Is it in ex_act 1 range ? Fire ex_act 1\". This way, if a rwall blocks off a 100 dev explosion, there's no way it'll stand\r\n- This could be done by changing ex_act output to output a raw, arbitrary \"this is how much damage the explosion did\" information based on how much ex_act stacks up and using that to see how much damage is done to objects\r\n- The explosive power doesn't actually deplete with penetration, it just stops the explosion completely in a certain direction if it fails to penetrate completely. I have no idea how to fix this in particular, since the current system tracks the explosion progress with \"range rings\", and cannot realistically modify how part of the explosion spreads depending on how much shit is in the way\r\n\r\nMiscalleanous changes :\r\n\r\n- Formatting\r\n- Change sleep(8) expression to spawn(). This delayed powernet and lightning rebuild, and while the intent is good, it FORCES the powernet and lighting process to freeze for 0.8 seconds for no good reason (which is especially bad with the Goon controller)\r\n- The above will most likely help to reduce lag during large, intense chained explosion events. This will most likely help during meteor waves notably since EVERY SINGLE METEOR EXPLOSION stopped lighting and power rebuilding for .8 seconds, over and over again. Not suggesting anything\r\n\r\nDiscuss below. Mostly concerns what should be changed, and any code suggestions"},"comment":{"url":"https://api.github.com/repos/d3athrow/vgstation13/issues/comments/86931024","html_url":"https://github.com/d3athrow/vgstation13/pull/3600#issuecomment-86931024","issue_url":"https://api.github.com/repos/d3athrow/vgstation13/issues/3600","id":86931024,"user":{"login":"clusterfack","id":8516830,"avatar_url":"https://avatars.githubusercontent.com/u/8516830?v=3","gravatar_id":"","url":"https://api.github.com/users/clusterfack","html_url":"https://github.com/clusterfack","followers_url":"https://api.github.com/users/clusterfack/followers","following_url":"https://api.github.com/users/clusterfack/following{/other_user}","gists_url":"https://api.github.com/users/clusterfack/gists{/gist_id}","starred_url":"https://api.github.com/users/clusterfack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clusterfack/subscriptions","organizations_url":"https://api.github.com/users/clusterfack/orgs","repos_url":"https://api.github.com/users/clusterfack/repos","events_url":"https://api.github.com/users/clusterfack/events{/privacy}","received_events_url":"https://api.github.com/users/clusterfack/received_events","type":"User","site_admin":false},"created_at":"2015-03-27T12:49:41Z","updated_at":"2015-03-27T12:49:41Z","body":"What delays the powernet rebuild is the global variable defer_powernet_rebuild, which never actually worked as intended because nobody wrote in something to tell it to rebuild those powernets anyway."}}