## About The Pull Request

Resprites:
Tesla Cannon
Tesla Cannon crafting kit
### New SFX / VFX
The tesla cannon now uses a new type of beam effect that randomly picks
sprite variants for each segment instead of a tracer.
This makes the arc look more dynamic and less distorted.
Autofire guns can now choose to use a looping sound datum when firing.

#### Balance changes
The tesla cannon must now have its stock unfolded before firing, this
takes 1.5 seconds and makes the gun bulky.
It is still normal sized when folded, and folding it is instant.
### Bug fixes
Fixed a bug where looping_sound.stop() would fail to stop sounds.
The tesla cannon is an incredibly powerfu
## Why It's Good For The Game
### My reasons for respriting
The old sprite was not bad, by all means but I had a few gripes with it.
* The old sprite does not incorporate the flux anomaly yellow colour.
* The old sprite looks a bit much like a real, professionally produced
sci-fi weapon,
* The old sprite looks pretty small for such a ultra high dps full auto
weapon.
* The old inhand is quite indistinct for something that can game end you
in like one second.
### My design
I think that anomaly items should be very mad science coded and, since
anomaly science is by definition a poorly studied field, they should
look more like prototypes created by a scientist rather than something
professionally made in a factory.
## Changelog
🆑
image: The tesla cannon has new sprites.
image: The tesla parts kit has new sprites.
image: The tesla cannon has a new shocking beam effect when firing.
sound: The tesla cannon has new sounds.
balance: The tesla cannon must now be unfolded to fire.
fix: looping sounds now stop playing sounds when commaned to do so.
/🆑
## About The Pull Request
Adds Diode Disks, installable disks that when fitted into an emitter can
change its function.
* Healing
* Stamina damage, and heals the SM slightly at the cost of internal
energy
* Traitor engi only explosive that damages and supercharges the SM if
used that way. Firerate is halved.
* Incendiary that slightly damages the SM but has lots of energy
* Sanity damaging one that improves SM psi coeff
* Magnetic item attracting one that improves SM mol absorption.
## Why It's Good For The Game
Fun and unique ways for Engi to use excess power or improve their SM
setups. Could also lead to neat engi inventions such as, say, a circuit
device that aims and fires a healing emitter at anyone nearby who is
damaged. Should also incentivize the researching of useful techs, hence
why important medium tier techs are what lock the different disks.
## Changelog
🆑
add: New Diode Disks which allow you to configurate emitters with
special functions.
add: New Engi & CE exclusive traitor item, a diode disk that causes an
emitter to create low radius explosions when it hits things. Note that
this will reduce the fire-rate of your emitter.
/🆑
---------
Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
## About The Pull Request
~~Kept you waitin huh!~~
The projectile refactor is finally here, 4 years later. This PR (almost)
completely rewrites projectile logic to be more maintainable and
performant.
### Key changes:
* Instead of moving by a fixed amount of pixels, potentially skipping
tile corners and being performance-heavy, projectiles now use
raymarching in order to teleport through tiles and only visually animate
themselves. This allows us to do custom per-projectile animations and
makes the code much more reliable, sane and maintainable. You (did not)
serve us well, pixel_move.
* Speed variable now measures how many tiles (if SSprojectiles has
default values) a projectile passes in a tick instead of being a magical
Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired
because it never had a right to exist in the first place. __This means
that downstreams will need to set all of their custom projectiles' speed
values to ``pixel_speed_multiplier / speed``__ in order to prevent
projectiles from inverting their speed.
* Hitscans no longer operate with spartial vectors and instead only
store key points in which the projectile impacted something or changed
its angle. This should similarly make the code much easier to work with,
as well as fixing some visual jank due to incorrect calculations.
* Projectiles only delete themselves the ***next*** tick after impacting
something or reaching their maximum range. Doing so allows them to
finish their impact animation and hide themselves between ticks via
animation chains. This means that projectiles no longer disappear ~a
tile before hitting their target, and that we can finally make impact
markers be consistent with where the projectile actually landed instead
of being entirely random.
<details>
<summary>Here is an example of how this affects our slowest-moving
projectile: Magic Missiles.</summary>
Before:
https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e
After:
https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915
</details>
<details>
<summary>And here is a much faster, and currently jankier, disabler
SMG.</summary>
Before:
https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348
After:
https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238
</details>
### But how will this affect the ~~trout population~~ gameplay?
Beyond improved visuals, smoother movement and a few minor bugfixes,
this should not have a major gameplay impact. If something changed its
behavior in an unexpected way or started looking odd, please make an
issue report.
Projectile impacts should now be consistent with their visual position,
so hitting and dodging shots should be slightly easier and more
intuitive.
This PR should be testmerged extensively due to the amount of changes it
brings and considerable difficulty in reviewing them. Please contact me
to ensure its good to merge.
Closes#71822Closes#78547Closes#78871Closes#83901Closes#87802Closes#88073
## Why It's Good For The Game
Our core projectile code is an ungodly abomination that nobody except
me, Kapu and Potato dared to poke in the past months (potentially
longer). It is laggy, overcomplicated and absolutely unmaintaineable -
while a lot of decisions made sense 4 years ago when we were attempting
to introduce pixel movement, nowadays they are only acting as major
roadblocks for any contributor who is attempting to make projectile
behavior that differs from normal in any way.
Huge thanks to Kapu and Potato (Lemon) on the discord for providing
insights, ideas and advice throughout the past months regarding
potential improvements to projectile code, almost all of which made it
in.
## Changelog
🆑
qol: Projectiles now visually impact their targets instead of
disappearing about a tile short of it.
fix: Fixed multiple minor issues with projectile behavior
refactor: Completely rewrote almost all of our projectile code - if
anything broke or started looking/behaving oddly, make an issue report!
/🆑
## About The Pull Request
All usages of world.icon_size in code have been replaced with new
`ICONSIZE_X`, `ICONSIZE_Y` and `ICONSIZE_ALL` defines depending on
context
Replaces some "32" magic numbers with the defines
A few bits of code have been modified to split up x/y math as well
## Why It's Good For The Game
Magic number bad, code more readable, code more flexible and I'm told
there's an access cost to doing world.icon_size so minor performance
gains
## Changelog
🆑 tonty
code: made some code relating to the world's icon size more readable
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Ultrakill is a neat game that I like, and I like to add fun things from
things I like. This PR adds the marksman revolver as an admin-only
weapon, complete with coin flipping and splitshotting mechanics! [Have a
video demonstration!](https://streamable.com/5x4mnj)
Basically, right clicking on a visible tile flips a coin towards a
random adjacent tile to the one you targeted. Shooting the coin
projectile with the hitscan primary fire while it's within one tile of
the target will trigger a splitshot. Those two child splitshots will
roughly follow the priority order of Ultrakill (prioritizing coins [for
even more splits!], then nearby mobs, then less nearby mobs, then other
random stuff nearby). I plan to add other stuff for the shots to
prioritize like fuel tanks, windows, and others.
I'm still working out some of the finer details of balance and more
closely matching how it works to UK (while still working in the realm of
SS13), and of course I hope to get unique sprites/sounds/whatever.
<img src='https://imgur.com/XUTqksD.png'>
## Why It's Good For The Game
Adds more funny/unique things for admins to spawn in.
## Changelog
🆑 Ryll/Shaps
add: Added the Marksman Revolver, for admins to spawn.
/🆑
Moves singulo and supermatter dmis into obj/engine, renamed from obj/tesla_engine
Moves Halloween, Christmas, and misc holiday items to obj/holiday
Moves lollipops to obj/food
Moves crates, closets, and storage to obj/storage
Moves assemblies to obj/assemblies
Renames decals.dmi to signs.dmi ...because they're signs and not decals
Moves statues, cutouts, instruments, art supplies, and crayons to obj/art
Moves balloons, plushes, toys, cards, dice, the hourglass, and TCG to obj/toys
Moves guns, swords, shields to obj/weapons
Removes the old sniper rifle zoom, replaces it with a scope component. the scope activates on right click and lets your camera follow your mouse.
https://streamable.com/2c63u4 (due to byond rounding some shots were weirdly missed in that video, its fixed now)
Also adds sniper marksman ammo to the nukie uplink. It does slightly less damage, but it is hitscan and has one guaranteed ricochet shot, so you can shoot a wall and it could still hit someone.
bring code up to latest standards, move many procs to named files inside _HELPERS
no idea where to put some of these procs, help is appreciated
made more files to contain some unique code, deleted unsorted.dm, we can rest now
## About The Pull Request
Changes up some layer and plane defines for no particular reason lol
## Why It's Good For The Game
Planes actually override layers, and layers control ordering within planes. A lot of the usage of plane and layer was wholly unnecessary. This refactor helps future maintainability while also being needed staging for _future features._
moves ammo icons, projectile icons and hitscan effect icons to guns folder
renames projectile.dmi to ballistic.dmi so its less confusing
moves rcd ammo from ammo.dmi to tools.dmi with the rcd
Done using this command sed -Ei 's/(\s*\S+)\s*\t+/\1 /g' code/**/*.dm
We have countless examples in the codebase with this style gone wrong, and defines and such being on hideously different levels of indentation. Fixing this to keep the alignment involves tainting the blames of code your PR doesn't need to be touching at all. And ultimately, it's hideous.
There are some files that this sed makes uglier. I can fix these when they are pointed out, but I believe this is ultimately for the greater good of readability. I'm more concerned with if any strings relied on this.
Hi codeowners!
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
cl
experimental: Hitscanning tracers now have lighting effects
experimental: Projectile pathing has been changed - instead of moving to a turf 32 pixels forward using byond's built in step_towards() proc, it now increments 2 pixel 16 times (subject to change). While this will increase the processing overhead, this will more or less eliminate cases of "projectiles clipping past corners in some angles but not others".
It is my belief that science weaponry should exist but not be "just better energy guns/whatever". Right now, portal guns are actually pretty powerful, as their random teleport can space people (especially if they have bohs), and actually does burn damage, albeit very little. I want to make scilathe weapons into useful utility things that can be weaponized if you use it right and in somewhat niche scenarios.
This PR will make wormhole projectors into more utility than combat.
Moves beam rifle snowflake code up to projectile level for a proper hitscan system.
🆑
rscadd: Chameleon laser guns now have a special firing mode, activated by using them in hand! Only certain gun disguises will allow this to work!
/🆑