Repository navigation
Horroterrors part 2 - lots of bullshit - #487
Open
RandomDudeFromTheRim wants to merge 115 commits into
Open
RandomDudeFromTheRim wants to merge 115 commits into
RandomDudeFromTheRim wants to merge 115 commits into
Conversation
Flesh hands get five fingers that can be lost, drawn on the mob, and put back. - Severe or critical slash/pierce wounds and critical blunt wounds on an arm can take a finger off. Right-clicking a hand with a bladed tool out of combat mode cuts one off on purpose. - Missing fingers make a hand fumble things it picks up; a hand with none can't hold anything. Snapping needs a thumb and a middle finger. - Severed fingers are meat and twitch for a bit. They can be pressed back into their own gap. Prosthetic fingers are printable at the autolathe, protolathe and exosuit fabricator and fit any gap. Either sits loose until sutured, and loose fingers can be knocked off when the arm takes a hit. - Fingers are drawn on the mob, made from each species' own arm sprite and baked per direction, with an idle wiggle, a *wiggle emote, and a curled grip drawn over anything held. Gloves, MODsuit gauntlets and hand-covering suits recolour them to match. - Full heals regrow fingers. Examine shows missing, loose and prosthetic ones. Includes a unit test and a player wiki page.
Finger overlays and severed fingers get PIXEL_SCALE, so rotating or scaling them (dancing, the severed finger's twitch) uses nearest-neighbour instead of blurring one-pixel fingers into mush.
The zone selector has no hand zones, so the hand-only check could never pass. Cutting now uses the same targeting as putting fingers back: aim at the left or right arm.
The cut-off and prosthetic pickers now say which hand, and list fingers as Thumb/Index/Middle/Ring/Pinky.
…limbs Every living human-shaped carbon has its sprite cut into moving pieces (head, torso, arms, legs, held items, fingers) and animated: - walking swings legs and arms with a bob; lying down turns it into crawling - an idle breathing loop, slower and deeper while unconscious - the active arm saws away during any progress bar, and swings when attacking - about 30 emotes act themselves out (*wave, *dance, *dab, *scream, *bow, ...) The body's overlays_standing layers are mirrored onto vis_contents pieces, each cut out with a per-direction alpha mask, instead of repainting clothes into new icons like the dancing PR did (tgstation/tgstation#95581, where the joint positions come from). Held items and fingers ride on unmasked pieces that follow their arm. The pose math works in 3D terms and projects per facing, so one pose reads right from all four sides. Dead humans, dummies, monkeys and xenos aren't rigged. Mirrors get the body added back to their reflection, since the mob's own appearance is empty while rigged.
Maptext on an object in the mob's vis_contents didn't show in game. The digits are now client images on the balloon chat plane, shown to everyone watching.
Arms and legs are now two pieces each, forearm and shin cut at the elbow and knee, laid along a joint chain so each piece gets its own transform instead of inheriting the one above (foreshortening an upper arm no longer squashes the forearm with it). Poses get "elbow" and "knee" angles; walking bends the back knee and lifts the swinging leg, tools are worked from the elbow, and clap, cry, salute, facepalm, hug, jump, dance and *67 use the new joints. Arms are drawn 1.25x and legs 1.3x their sprite length, and the body stands up by the extra leg length so the feet stay on the floor.
Loomers are humans drawn by the limb rig with legs 4.5x and arms 3.2x their sprite length, 3x fingers, a permanent stoop, and a long high-kneed loping walk. Loosely after the Serverblight and DOORS' Figure, but they can see. Purely cosmetic; they play exactly like humans. Roundstart-selectable. The rig now takes its shape from the species (limb_rig_shape: limb and finger stretch, a posture added to every pose, and a walk style), and lifts the body from wherever the lowest foot ends up, so bent knees, crouches and long legs all stay on the floor.
Loomer moves from a species to a neutral quirk, so any species can take it. The rig takes its shape from the quirk first, then the species. A Loomer in combat mode with empty hands reaches out: arms straight forward, fingers stretching out after them, then holds there trembling all over until combat mode drops or something is picked up. *bird makes a fist with the active hand and raises the middle finger. *crankbird brings the fist up first, then the other hand cranks an invisible lever while the middle finger slowly unfurls. The fist-and-finger is on the hand sprite, so any carbon can do it; a rigged body also acts it out, with the raised middle finger on its own piece so it can unfurl separately. Fingers now foreshorten with the forearm, so they point the way the hand does.
In combat mode with empty hands, a walking Loomer keeps its arms out in front with its fingers stretched and twitching, the legs loping underneath and the body shuddering, and goes straight back to trembling in place when it stops.
Facing north, anything the arms do in front of the body happens on the far side of the spine, so the arms, forearms, fingers and held items now layer under the torso and head instead of over them.
- Tendrils: the forearms and fingers writhe under looping wave filters, the same trick anomalies use to wibble. - Stop-motion: every few frames the tremble freezes, then snaps (jump easing) into a wrenched, sheared pose. Poses can now skew the head and torso, and keyframes can pick their own easing. - Glitches: every few seconds, for a moment, the face turns into Ransom from DOORS: crushed to black and white, covered in flickering red-flecked static, warped and smeared sideways, while the body tears into a red and blue split and jumps a couple of pixels.
The combat stance used to re-roll finger reach every beat and jitter the arms' forward swing, which from the front also changes how long the arms and fingers look, so they throbbed bigger and smaller. Reach now only grows: each beat closes part of the gap to the limit, fast at first and slower as they strain, then holds there until the stance ends. Walking carries on stretching from wherever it got to. The arms twitch sideways instead of swinging.
Walking keeps the old walk (and the Loomer lope). With the run intent, rigged mobs lean hard into it with the legs in a wide split, the back foot kicked up, fists pumping with bent elbows, and a little hang in the air as the legs swap. Fingers also stop foreshortening at 40% of their length, so a forearm pointed at the viewer no longer flattens its fingers into a line.
… poses The run was two even poses, so every frame had the same weight. It now hits the ground, sinks into a held squash, drives off and floats, with fast easing into the impact and slow easing out of the air. Poses can lift the body off the ground with a chest "air" offset.
…move speed - Overanimated and Fingers quirks: the limb rig and individual fingers now only apply to people who take them. Loomer is an admin smite that hands out Overanimated if missing; losing that quirk ends the Loomer too. - Steps last as long as crossing a stride's worth of tiles at the current move delay, so the legs keep time with actual speed and long legs stride slower. Faster or slower than usual for the gait scales the stride size too. - Arms account for the torso's bend. The combat stance aims the arms level in the world, so a hunched Loomer reaches straight out instead of drooping, and from the front no longer folds its hands over its face. Hands reaching at the viewer draw larger. - "hand_y" solves the elbow to put a hand at a height; cry, facepalm, cough and gasp use it to actually reach the face. Crying sobs. - The stance tremble is a smooth sway with the odd stop-motion snap, instead of one-frame random jumps. - Facing away, fingers sit under the arm so wings and capes cover them. - Captain's gloves colour the fingers blue rather than their gold trim. - *67 digits ride in vis_contents instead of client images.
An Overanimated arm whose hand has no fingers drawn reaches 20% further, so it still meets whatever it holds instead of stopping short of it. Hands without the Fingers quirk sprout just the middle finger for *bird and *crankbird.
Picking things up, dropping them and changing gloves no longer redraws the bodyparts of carbons without the Fingers quirk. Hands catch up on their grip when they gain fingers.
They live on the fingers branch. This one is for the Experiment species.
Small dark dog-rat people: a crest of swept-back spikes, big orange eyes, digitigrade legs and an enormous spiky tail. The art is original. Their sprites are laid out like a human's so clothes fit, and the rig makes them small (short legs and arms) instead, so they're always rigged, quirk or not. The rig gains per-species masks, a head size and an optional tail piece: the tail is pulled off the chest's overlays onto its own piece, carried high, and sways while idle, swings against each stride and streams out behind a run.
The body is now measured from a reference model: long digitigrade legs in three segments (thigh forward, knee back, foot forward), thick thighs, a big head and the tail, in 64x64 sprites about a head taller than a human. Every rig piece has its own sprite, so no stray bits of body stay on the torso when a limb moves. A species can now give the limb rig its own piece sprites and skeleton (/datum/limb_rig/sprites). Worn clothes, still drawn for a human, are cut into pieces with human-shaped masks and stretched from each human bone onto the matching one: shoes onto the paws, hats onto the crown, scaled to the head.
…g clothes Standing, running, walking and swinging are recreated as key poses from how the creature moves in its home game: a forward-leaning bounding run with pumping arms, a hunched creep for walk intent, a rocking stance and an overhead swing. The limb rig gains hooks for a body's own idle, step and attack animations, and sprite-built bodies take whole joint angles. Eyes are bigger, all pupil with an orange crescent. Hats are smaller, clothes cover the shoulders, and from the front the head no longer squashes flat when the torso bends over.
Shoes get a piece of their own on each paw that takes the whole shoe, instead of being cut by height, which left a boot top halfway up the leg. Sleeves and trouser legs are stretched across as well as along each segment, so they wrap the thick thighs instead of sitting on them. Side-on the pupil now stares ahead with the orange behind it. Head-on the eyes are smaller and rounder.
rig_clip_keyframes() named a parameter "to", a DM keyword, which broke compiling. The tail hung off the torso pivot, which draws as one group over the legs, so it could never go under them or over the arms. It now hangs off the mob with the torso's movement applied to it: under everything from the front and sides, over everything from behind.
Pieces hung on the mob drew in the order they were added, whatever their layers said, so an Experiment's legs always covered its tail and the tail always covered its torso. Whenever the layers change, the pieces are now put in layer order.
…unds - Their own blood type, a thin yellow-orange. - Claws that slash and cut instead of punching, and a bite (pointed, so it can puncture) used whenever their hands are tied or gone, or they have someone in an aggressive grab. - Frail: every limb takes wounds 10 points more easily than a human's. - Wounds drawn on the rig pieces themselves, three levels of brute and burn each, following the limbs as they move; brute marks take the owner's blood colour. - The voice picked in one place (scream, hiss, laugh, death), from sounds already in the game. - Species perks for all of it in the preferences menu.
An admin sends someone to the lake (Admin.Fun). Moffer stands in for Noelle and the player for Kris, through obj_ch5_LW20W's cutscene and the handoff's asking, timed frame for frame: the box going red then white, the heart whitening, the lake fading out behind them, the blur, the chant sinking and climbing, the shaking, and failing if they hesitate once she's under. Walk all the way in and both come out in the Meat Factory, a white plane covered in sheets of the fork's own renders. The game's sounds go in data/weird_route/; without them it plays silent.
Sized to the game's pixels (Noelle's 46 tall against our 32), so the walk, the shore and the camera sit where they do there. Moffer starts where Noelle's marker does. They sink and their shadow shrinks as the game's submerge object does it, going under at 928. Its text runs at two frames a letter throughout, as its slow text and text style 63 do, and stays white when the box does. The choice starts with the heart between the options and nothing picked, as the game's choicer does. The blur is the game's sideways smear, flickering. And the ending is its own: black, then INSERT CHAPTER 7 a letter at a time, and where it would spell out SIDE B, MEAT FACTORY.
"to" is a keyword in DM, so the colour blend, fades and progress no longer use it as an argument name. The pinwheel is now the game's: three places from life aboard (screenshots from the server) each showing through its own third of a wheel over black, fading in a segment at a time, turning faster and rippling harder with each line, and a silhouette of Moffer kneeling in the middle. Before it, the ominous fade: three dark clouds behind the two of them, fading in slower than one another and breathing, gone four seconds after they start to go.
The fade is its sprite: black all over but for a soft patch near the top, three of it behind the two of them. The kneeling Moffer in the pinwheel is drawn solid black, as the game's silhouette is.
…them The white fills were lost when the pinwheel went in, and a null in the screen list stopped any of it showing (the box, Moffer's face, the pinwheel) and crashed the asking on its first step. Volume and pitch updates now keep a looping sound looping. Moffer and the player stand dark against the sunset at the lake, lit again in the Meat Factory.
The box's text sits at the top, larger; Moffer's face shows on the lines the game shows Noelle's; and once a choice is up the box holds only the two options and the heart, which now sits beside the picked one (screen objects take pixel_x/pixel_y, not pixel_w/pixel_z), at a size you can see. The box stays black inside, blurred with the rest and whited out over the top when they hesitate. The ominous fade and the pinwheel's memories fill whatever size the player's screen is, the fade's soft patch a third of the way down it as in the game. The kneeling Moffer in the pinwheel is cyan and faces out. The lake is big enough that the camera never sees past it. The Meat Factory is far bigger, its sheets at their sprites' own size: our renders, tg's test screenshots, and icon files laid out state by state. Moffer follows a step behind. The sounds are sent ahead when the scene starts, so the factory's music isn't waiting on a download.
Its 570px sprite, placed by a corner well off the screen, made BYOND widen the whole view to fit it, shrinking the map into a black frame. It's now a 96px icon on the middle tile, scaled up to the screen, and each axis the game leaves at 1 stays at 1.
…e whiteout, slower sinking, built before it starts Also lets crewmembers hide the green crew marker (IC: Toggle Crew Markers).
…ngs, white comet hair and goatee, grey jumpsuit
…ringlock emotes Fall Down The Stairs: Peter Griffin's fall down a long flight, timed to the clip, into his pose. I Like Trains: asdfmovie's three kids in a white room, then tramstation's own tram car through them. *skibidi: a toilet with your head on a long neck, grinning, for a chorus. *springlock: the springlocks give, crunch by crunch. Fatal.
# Conflicts: # code/modules/unit_tests/_unit_tests.dm # tgstation.dme
…own neck, so it fits every species
…g a downed wearer's hands and aiming the suit's modules
…nd Corruption+ songs' drains only come from the CPU
…ff by default) for whether a player's own character is rigged
…k as capped speed, spin capped, steps cut back when they cost too much, and a torn body starts over; spinning no longer counts as blowing up; no double delete when the hunt ends; Weird Route sends everyone in it back out; physics verbs check for a carbon
… their own); *springlock throws its blood, gibs and organs off at any angle
…le with the edit's poses, invincible and held in place while it plays
…ting and swinging back and forth until it settles; spammable every 10 seconds, invincible at most every 3 minutes
…t lets them go they come out dead with their players back in them
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
About The Pull Request
A big one. Everything lives in its own
voidcrew/modules/folder; upstream files are only touched where markedVOIDCREW EDIT.Limb rig (
voidcrew/modules/limb_rig)Limb physics (
voidcrew/modules/limb_rig/physics,tools/vcphys)vcphys.dll(32-bit Windows, like BYOND) ships in the repo root next to the game; the Rust source is intools/vcphys, and buildslibvcphys.sofor Linux hosts. Wherever the library isn't found, nothing physical happens and nothing breaks.Experiments and Milkies (
voidcrew/modules/expie)ROUNDSTART_RACESinconfig/game_options.txt.Rhythm battles (
voidcrew/modules/fnf, seewiki/content/rhythm-battles.md)Weird Route (
voidcrew/modules/weird_route)Gags (
voidcrew/modules/gags)invincible_preview.mp4
_maps/voidcrew/templates/gags/.MODsuits (
voidcrew/modules/mod)Smaller things
code/__DEFINES/sound.dm:CHANNEL_HIGHEST_AVAILABLE1011 → 1009, because voice barks play on fixed channel 1010, which sat inside the reservable pool. Whatever reserved it (a battle's music, a jukebox) got cut off by the next person to speak.Upstream files touched
code/__DEFINES/sound.dm: the channel change above.code/modules/unit_tests/_unit_tests.dm: includes for the new tests.code/game/objects/effects/spawners/random/mod.dm: the corpse exoskeleton in maintenance MOD loot.config/game_options.txt: the two roundstart races.tgstation.dme: includes.Unit tests
voidcrew/modules/unit_tests/: limb_rig, limb_physics, fnf, weird_route, gags.Assets, and what isn't shipped
Shipped (compiled into the .rsc like any other sound, about 6.5 MB of audio). Credits are in each module's
sound/attribution.txt:Not shipped: hosts fetch these into
data/, which is gitignored:python3 tools/fnf/fetch_funkin.py(a few hundred MB;--from <folder>for an offline copy of funkin.assets).python3 tools/fnf/fetch_corruption_plus.py(about 430 MB download, about 90 MB kept;--from <zip or folder>for a copy already downloaded from GameJolt).data/weird_route/; without them it plays silent.vcphys.dllcovers Windows hosts; a Linux host builds the 32-bitlibvcphys.sofromtools/vcphys(cargo build --release --target i686-unknown-linux-gnu, as for rust_g) and puts it next to the game. Without it, physics simply stays off.Why It's Good For The Game
It's funny.
Testing
Played on a local server while building each part. Each module has unit tests; dreamchecker shows no new diagnostics, and the modularization check passes.
Changelog
🆑
add: Limb rig: bodies that walk, run, crawl, breathe, work and emote with their limbs. Turn it on for your own character with the Animated body game preference; the Overanimated quirk gives it to anyone human-shaped.
add: Experiments and Milkies, new roundstart species.
add: Rhythm battles: the battle microphone, with Funkin' and Corruption+ songs, stages, Pico mixes, game overs and results.
admin: Weird Route and Weird Route: Bring Back (Fun).
admin: Smites: Serverblight, Fall Down The Stairs, I Like Trains.
admin: Limb physics debug verbs (Spawn Physics Ragdoll, Limb Physics: Toggle / Inspect / Toggle Call Log).
add: *skibidi, *invincible and *springlock emotes.
add: MOD corpse exoskeleton module (from Monkestation), in maintenance and the hidden MOD Mortality Modules node.
add: MOD AIs and pAIs can work a downed wearer's hands (slowly), and aim the suit's selected module.
fix: Voice barks no longer cut off rhythm battle music or anything else on a reserved sound channel.
/:cl: