Removes the !isanimal and !isrobot checks from robot creation. A fix has been suggested for the pull currently dealing with MMI that will stop the runtimes. https://github.com/tgstation/-tg-station/pull/1529
Keep in mind that if that request is not ultimately pulled the fix will need to be added to this pull to prevent runtimes from the game trying to take DNA from non-carbon based life.
*Staff of change now has a 20% chance of turning you into a simple animal (all have been tested to make sure they're properly controllable.
*Staff of change now works on simple animals, adding on_hit doesn't double up damage on simple animals or try to inflict non-brute damage because it's hardcoded to avoid inflicting damage to animals in the generic projectile. Special guns seem to work fine on animals (like the syringe gun for example).
*Mutant races were not updating properly thanks the DNA revamp, so that's been fixed and expanded to include all current races.
*Transfering identity for MMI's in newly created robots has been disabled for animal -> robot because it doesn't work properly for them, robot -> robot also apparently NEVER worked and has likewise been disabled.
Adjusts the click code to not use client/Click(). The code is largely unchanged, except that it allows the compiler default behaviour of calling atom/Click(), and then forwards the call to mob/ClickOn(). I had some reports that melee combat mixed with movement was behaving oddly, and I believe it may be due to the use of client/Click; the byond documentation says that redefining client/Click() causes additional overhead, and it isn't strictly necessary.
Alters the way double clicks are handled, in an attempt to better handle clickspam, as often occurs during pitched combat. This may also be responsible for the above, but I don't know.
Inserts proximity (aka flag) checks in all afterattack() procs. The old assumption was that unless an item used the USEDELAY flag, afterattack() was only called when adjacent, but this is no longer true. This led to beakers, soap, crayons, etc, all being usable at all ranges.
Removes the NODELAY flag, which was unused. Removes all existing uses of the USEDELAY flag so that it can be readded to things that need extra delay.
Removes the hand_* procs, previously used by restrained actions. Instead, the mob helper mob/RestrainedClickOn() has abosrbed basically all the functionality they were used for, which is really only monkeys with jungle fever.
Adds a special case of the Adjacency() proc for doors. This fixes#136, airlocks being unreachable due to border fire doors. However, this only takes us back to the unpleasant position where you have to open-hand the door, switch to a crowbar, and pry open the firedoor; it still needs a better fix.
Fixes#646, #579, #863
Completely redoes the click code. Moves all click related code into code/_onclick for reference. Also moves hud datum code and all the screen object code I could find into code/_onclick/hud, as it is related. Item attack(), attackby(), afterattack(), and attack_self() have been moved into item_attack.dm for consistency.
Completely removes dummy objects and adds atom.Adjacent(user). This proc checks for border items and anything marked with throwpass for determining whether or not you can reach a given square. A turf helper, ClickCross(), was added to facilitate this.
Removes the monolithic Atom.Click() proc in favor of an overridable click handler attached to mobs. Click code no longer uses the : path operator as a consequence, and mob/lastDblClick has been moved to Client/next_click. A few end arounds were necessary (screen objects, buildmode, and spells), but this has been handled by repurposing Atom.Click(); if you have special click code, insert it in the object's Click() function and return 1 to prevent normal processing.
This update adds support for attack_ghost(); the previous "new" click handler had support for it but was never finished. I have taken the liberty of letting ghosts click portals, the gateway, and the teleporter to jump to the intended target square, and kept the previous default action of examine()ing every damn thing you click. It is to be suggested that you could do more with this proc when ghost interactions are enabled.
This update also adds support for double clicking. It is currently only used for ghosts and AIs, because the original (first) click still registers normally. For both of these, double clicking a square will jump you to it, and double clicking a mob will follow it. In the case of ghosts, double clicking bots and the singularity will also set you following it; if you double click your own corpse, you will re-enter it; this also works if your body is in a closet, sleeper, DNA scanner, etc. Default mobs ignore double clicks as normal.
-- NOTE --
There are two flags which were previously unused or misused by click code: USEDELAY and NODELAY. Ostensibly, USEDELAY would double the normal 1sec delay, and NODELAY would remove it.
Using either of these flags as intended would significantly affect the timing of the game. In particular, USEDELAY is currently applied to guns and about everything else that acts at range. I am adding USEDELAY as a half-second increase for now, but I have not put a significant amount of thought into it. I considered lowering the normal 1sec delay to .8sec to balance it, but the consequences of that on combat involve more calculations than I care to make.
NODELAY seems to never have been used, and I did not implement it, but I could do so trivially.
Now nucgun has reputation of shitty gun that will weaken you with radiation mid-battle. This update makes nucguns useful even without CE's RIG or radsuit.
Changed atom's bullet_act to call the projectile's on_hit, and changed most bullet_acts to call on_hit as well. Removed some now-unnecessary snowflake code.
These changes will make projectiles which should effect non-mobs, such as the gyrojet and the ion rifle, work properly. Inanimate objects can now be empulsed with the ion rifle, whose projectiles used to dissipate on hitting anything but a mob. Gyrojets now explode on most objects, as opposed to just on walls and mobs, and the snowflake code that made them work on walls is no longer necessary. The code for pulse rifles' breaking walls has been moved from a check in turf to a check in pulse beams, and has been expanded to include structures, allowing them to (slowly) break girders. For coders, it means that on_hit is a reliable proc for the effect of a bullet's hitting an object.
While it does mean a number of needless procs of on_hit, it's not too much more proccing than is already done by the gun code, and the removal of the snowflake code that was used to mask the issue, such as the two checks every time a shot hit a wall, should mostly if not more than offset the extra procs
Changed atom's bullet_act to call the projectile's on_hit, and changed
most bullet_acts to call on_hit as well. Removed some now-unnecessary
snowflake code.
These changes will make projectiles which should effect non-mobs, such
as the gyrojet and the ion rifle, work properly. Inanimate objects can
now be empulsed with the ion rifle, whose projectiles used to dissipate
on hitting anything but a mob. Gyrojets now explode on most objects, as
opposed to just on walls and mobs, and the snowflake code that made them
work on walls is no longer necessary. The code for pulse rifles'
breaking walls has been moved from a check in turf to a check in pulse
beams, and has been expanded to include structures, allowing them to
(slowly) break girders. For coders, it means that on_hit is a reliable
proc for the effect of a bullet's hitting an object.
Makes the temperature projectile get its temperature from the gun, using
a proc used to give the bullet properties based on the properties of the
gun, which can be used with other projectiles for different guns.
Also names the temperature projectile based on its temperature. 500
degrees is not a freeze beam, that's just silly.
DNA modification uses normally distributed random numbers. Radiation strength dictates the standard deviation of the change in the hex character which is hit (higher output means greater chance for a large change) . Similarly, radiation duration dictates how likely we are to hit the hex-character we clicked on (longer duration means more likely to hit). Irradiation is strength*duration. All balancing is done via multiplier defines so you can rebalance it easily.
DNA blocks and structuring all use defines. Making modification/expansion easier. I'll likely expand this into a datum-based system to allow more interesting features, reduce code further and allow admins to interact with the way dna strings behave.
DNA strings can be spliced together using merge_text().
e.g. string 1: "Hello World"
string 2: "Seeya______"
result: "Seeya World"
This isn't used except for admin-spawnable SE injectors at the moment.
r_hair, g_hair, b_hair, r_facial, g_facial, b_facial, r_eyes, g_eyes, b_eyes were removed and made into 3 short hex-colors.
Skin tones now support colours other than shades of brown. I've had to restrict it heavily until other stuff is done. Skin tones include Albino Caucasian, Oriental, Mediterranean, etc.
Data disks and DNA injectors were reworked to use associative lists so transferring data is just a matter of doing list.Copy()
var/dna is now defined at /mob/living/carbon level. Only monkeys and humans may have dna currently. Support is there for all carbon-based lifeforms to have dna.
DNA modifier console has almost all controls on one screen.
UIs and UEs can be injected separately (appearance and name, respectively)
dna helper procs like ready_dna() and such were changed to make them more versatile. There is now a hardset_dna() proc as an alternative to ready_dna which can initialize dna with properties passed into it or update an existing dna string (useful for cloning and antag spawning)
Every block of SEs are in randomised positions.
Disabled automatic logging of world.log, as it produced undesirable behaviour.
Mr Muggles and God Emperor of Mankind disks removed.
Floor() removed. (it was completely uneccesary, that is what round() is).
Fixed spelling mistakes in modularchangling.dm (thanks tenebrosity)
Tanning removed from beaches (again)
Experimental: monkeys and humans do not have dna until first attempt to read dna (using check_dna_integrity(mob))
This is mainly due to the way everything is hardcoded into New().
Changelog.html updated
Signed-off-by: carnie <elly1989@rocketmail.com>
People may select any underwear (regardless of gender) at a dresser, but not in preferences.
random_underwear(gender) will return a random pair of underwear suitable for your gender.
Removed an unused variable in sprite_accessory
The new_player preferences screen now randomizes character slots for which there is no data (so no more bald, fat, white guys in diapers greeting new players)
datum/preferences character settings are randomised at New().
replaced /datum/preferences/proc/randomize_appearance_for(human/H) with /datum/preferences/proc/random_character(), it does the same stuff without the copying to a mob. Basically, now when you want to make a random character you just do var/datum/preferences/A = new(); A.copy_to(human_mob), randomisation of appearance and name will already be done. Easy.
Reworked the savefile updating/versioning code to make it easier to work with. I've used it to update underwear preferences to the new system as an example.
Signed-off-by: carnie <elly1989@rocketmail.com>
-The description "A weak beanbag shell. This one is spent. This one is spent. This one is spent. This one is spent." made by double barreled shotguns is gone, now the message is only added when the shotgun actually fires and uses the shell
-All other kind of shotguns will now add the "This one is spent." message.
-Shotguns will stop firing invisible bullets, making them less confusing.
Changed the "You break the double barreled shotgun" message to "You open the double barreled shotgun" because it was confusing, the playes (myself included) thought that they actually ruined the pretty gun.
The main goal was to remove all the pointless shit in the UI style dmis, but this commit actually goes a bit deeper than that.
Formally renames the "hurt" intent to "harm", in line with everything else in the world.
Removes the old screen1_... .dmis. They've been replaced with screen_... .dmis. They function much the same.
screen_gen.dmi is used for things which apply to multiple UI styles, such as storage slot sprites, or the intent selector. (These can still be overridden in HUD code, though.)
Item action buttons have been changed to use a template from the UI style, and the icon_state of the item.
var/icon_action_button has been removed- varvar/action_button_name must be used instead to add action buttons for items.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5826 316c924e-a436-60f5-8080-3fe189b3f50e
Adds a new 'userdanger' class, which is bold and red. 'danger' is now just red. Adjusts all dangerous messages I could think of to use the appropriate class.
Trash items can now be washed away in sinks.
Removes the robodropper, on account of it being awful. Borgs get a normal dropper instead.
Changes the probability of blood spatter from attacking someone from 33 to item.force * 2
Path changes:
/obj/item/weapon/reagent_containers/ld50_syringe > /obj/item/weapon/reagent_containers/syringe/lethal
/obj/item/weapon/reagent_containers/ld50_syringe/choral > /obj/item/weapon/reagent_containers/syringe/lethal/choral
possibly some others? i think this is it.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5815 316c924e-a436-60f5-8080-3fe189b3f50e
A lot of different calls for update_inv_[slot] now won't call for update_icons.dm(). Such as dropping, throwing, picking up objects, moving objects around your gear, using your active hand, firing guns, stripping, etc.
All the different calls for UpdateDamageIcon() now they won't call for update_icons()
The different sprites of humans/monkeys will now have their own layer, humans starting with MUTANTRACE_LAYER in layer -1 to R_HAND_LAYER in layer -20, so the sprites don't get messy overlapping eachother if update_icons() is not called. To help this change, all layers numbers were changed, R_HAND_LAYER used to be 1, now it's 20. (This can be changed back if it ends up being confusing or ugly to read)
TL;RL I removed 90% of the calls for update_icons() modifying the different update procs of update_icons.dm of monkeys/humans. The goal is to reduce lag.
JUST IN CASE, lying down will call for update_icons(), so players have an easy way to update their icons if something goes horribly wrong. Which won't. I hope.
Fixes issue 842. Handcuffs sprites appearing on the player's UI if this one was handcuffed. Because I liked this we'll call it feature and add some awesome sprites made by Cheridan, you'll now have a new sprite on your UI telling you "you're handcuffed buddy!". (Also he named the sprites so don't blame me)
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5809 316c924e-a436-60f5-8080-3fe189b3f50e