Skip to content
This repository has been archived by the owner on Feb 16, 2024. It is now read-only.

Commit

Permalink
Update 14/03/2021 (#820)
Browse files Browse the repository at this point in the history
* fixes tile atmos overlays going invisible

* Attempts to fix CI dependency failures (ParadiseSS13#15709)

* Attempts to fix CI dependency failures

* Lets try this

* And this

* And this

* Fixes an exploit with boxing gloves and other martial arts (ParadiseSS13#15711)

* Fixes being unable to make a disk compartmentalizer (ParadiseSS13#15696)

* Adds more magic items and spells to the wizard spellbook (ParadiseSS13#15036)

* touches more or less everthing that is magic

* Other changes I forgot to put in

* removes extra s

* nevermind lets not do drake form

* Apply suggestions from code review

Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>

* Better variable name

* Heart curse removed

* Re adds new stuff

Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>

* Combines some admin verbs together (ParadiseSS13#15159)

* Admin Jumping

* GLOB.clients

* Review suggestions

Co-authored-by: Farie82 <farie82@users.noreply.github.com>

* Blackbox comments

* Not sure why it wasn't a proc in the first place to be honest...

Co-authored-by: Farie82 <farie82@users.noreply.github.com>

* Nerfs drake form. (ParadiseSS13#15235)

* Shaking the dead now gives a message indicating the person is dead (ParadiseSS13#15512)

* Shaking the dead now gives a message indicating the person is dead

* Update carbon.dm

* Update carbon.dm

* Revert "Revert "Revert "Update carbon.dm"""

This reverts commit 5e5da7bb6ddba56872a05b0e5c6aaa2c835c1e94.

* Fixing, and adding a check for self waking

Overhaul based on Faries points

* Prevents the look of Krav maga from being changed in a washing machine (ParadiseSS13#15522)

* Prevents the look of Krav maga from being changed in a washing machine

* Apply suggestions from code review

Co-authored-by: SabreML <57483089+SabreML@users.noreply.github.com>

Co-authored-by: SabreML <57483089+SabreML@users.noreply.github.com>

* Ports Slapping and Kissing (ParadiseSS13#15539)

* Ports Slapping and Kissing

* forgot this

* table slapping

* Fixes the top left pixels on vending machines (ParadiseSS13#15550)

@LightFire53 did some fixes to the top left pixels on the vending machines. Before the fix, they had two gray pixels which would clash with the general sprite (very out of place).

Pics will be posted below.

This fix was added to the following sprites inside vending.dmi:
+ Snack Vendor (snack)
+ Soviet Soda Vendor (sovietsoda)
+ Nutrimat (nutrimat)
+ Nutrient Vendor (nutri)
+ Robotics Vendor (robotics)
+ Generic Vendor (generic)
+ Engineering Vendor (engivend)
+ Cigarettes Vendor (cigs)
+ Magic Vendor (MagiVend)
+ Cola Machine Vendor (Cola_Machine)
+ Engineer Vendor (engi)

* oops I broke the repo (ParadiseSS13#15715)

* Adds a cancel combo button for krav maga  (ParadiseSS13#15543)

* pew pew

* uhhh yes

* tumblr moment

Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>

Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>

* Fixes HUD sunglasses deconstruction (ParadiseSS13#15444)

* sunglasses

* Unit test test

* Unit test test tested

* vamosvamosvamos

Co-authored-by: mafemergency <mafemergency@gmail.com>
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Co-authored-by: Farie82 <farie82@users.noreply.github.com>
Co-authored-by: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com>
Co-authored-by: Fox McCloud <Fox-McCloud@users.noreply.github.com>
Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>
Co-authored-by: SabreML <57483089+SabreML@users.noreply.github.com>
Co-authored-by: hal9000PR <69320440+hal9000PR@users.noreply.github.com>
Co-authored-by: Kepplerx <65926304+Kepplerx@users.noreply.github.com>
Co-authored-by: Johnathan Pewtershmitz <xengan@gmail.com>
  • Loading branch information
11 people committed Mar 14, 2021
1 parent bd1ee3b commit 4010c96
Show file tree
Hide file tree
Showing 47 changed files with 534 additions and 267 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
jobs:
run_linters:
name: Run Linters
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Setup Cache
Expand All @@ -36,7 +36,7 @@ jobs:

compile_all_maps:
name: Compile All Maps
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Setup Cache
Expand All @@ -53,7 +53,7 @@ jobs:
unit_tests_and_sql:
name: Unit Tests + SQL Validation
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
services:
mariadb:
image: mariadb:latest
Expand Down
3 changes: 3 additions & 0 deletions code/__HELPERS/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NOEXAMINE "no_examine"
#define TRAIT_NOPAIN "no_pain"

/// Blowing kisses actually does damage to the victim
#define TRAIT_KISS_OF_DEATH "kiss_of_death"

//
// common trait sources
#define TRAIT_GENERIC "generic"
Expand Down
1 change: 1 addition & 0 deletions code/_globalvars/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_DWARF" = TRAIT_DWARF,
"TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS,
"TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE,
"TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH,

"TRAIT_COMIC_SANS" = TRAIT_COMIC_SANS,
"TRAIT_NOFINGERPRINTS" = TRAIT_NOFINGERPRINTS,
Expand Down
4 changes: 2 additions & 2 deletions code/_onclick/item_attack.dm
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
return FALSE

/obj/attackby(obj/item/I, mob/living/user, params)
return ..() || (can_be_hit && I.attack_obj(src, user))
return ..() || (can_be_hit && I.attack_obj(src, user, params))

/mob/living/attackby(obj/item/I, mob/living/user, params)
user.changeNext_move(CLICK_CD_MELEE)
Expand Down Expand Up @@ -87,7 +87,7 @@


//the equivalent of the standard version of attack() but for object targets.
/obj/item/proc/attack_obj(obj/O, mob/living/user)
/obj/item/proc/attack_obj(obj/O, mob/living/user, params)
if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ)
return
if(flags & (NOBLUDGEON))
Expand Down
12 changes: 10 additions & 2 deletions code/datums/spells/shapeshift.dm
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,22 @@

/obj/effect/proc_holder/spell/targeted/shapeshift/dragon
name = "Dragon Form"
desc = "Take on the shape a lesser ash drake."
invocation = "RAAAAAAAAWR!"
desc = "Take on the shape a lesser ash drake after a short delay."
invocation = "*scream"

shapeshift_type = /mob/living/simple_animal/hostile/megafauna/dragon/lesser
current_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser)
current_casters = list()
possible_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser)

/obj/effect/proc_holder/spell/targeted/shapeshift/dragon/Shapeshift(mob/living/caster)
caster.visible_message("<span class='danger'>[caster] screams in agony as bones and claws erupt out of their flesh!</span>",
"<span class='danger'>You begin channeling the transformation.</span>")
if(!do_after(caster, 5 SECONDS, FALSE, caster))
to_chat(caster, "<span class='warning'>You lose concentration of the spell!</span>")
return
return ..()

/obj/effect/proc_holder/spell/targeted/shapeshift/bats
name = "Bat Form"
desc = "Take on the shape of a swarm of bats."
Expand Down
57 changes: 56 additions & 1 deletion code/game/gamemodes/wizard/spellbook.dm
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,18 @@
log_name = "IG"
category = "Offensive"

/datum/spellbook_entry/sacred_flame
name = "Sacred Flame"
spell_type = /obj/effect/proc_holder/spell/targeted/sacred_flame
cost = 1
log_name = "SF"
refundable = 0 //You get fire immunity out of it, no.

/datum/spellbook_entry/sacred_flame/LearnSpell(mob/living/carbon/human/user, obj/item/spellbook/book, obj/effect/proc_holder/spell/newspell)
..()
user.dna.SetSEState(GLOB.coldblock, 1)
singlemutcheck(user, GLOB.coldblock, MUTCHK_FORCED)

//Defensive
/datum/spellbook_entry/disabletech
name = "Disable Tech"
Expand Down Expand Up @@ -357,10 +369,14 @@
name = "Buy Item"
refundable = 0
buy_word = "Summon"
var/spawn_on_floor = FALSE
var/item_path = null

/datum/spellbook_entry/item/Buy(mob/living/carbon/human/user, obj/item/spellbook/book)
user.put_in_hands(new item_path)
if(spawn_on_floor == FALSE)
user.put_in_hands(new item_path)
else
new item_path(user.loc)
SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, log_name)
return 1

Expand Down Expand Up @@ -406,6 +422,30 @@
log_name = "WA"
category = "Artefacts"

/datum/spellbook_entry/item/cursed_heart
name = "Cursed Heart"
desc = "A heart that has been empowered with magic to heal the user. The user must ensure the heart is manually beaten or their blood circulation will suffer, but every beat heals their injuries. It must beat every 6 seconds. Not reccomended for first time wizards."
item_path = /obj/item/organ/internal/heart/cursed/wizard
log_name = "CH"
cost = 1
category = "Artefacts"

/datum/spellbook_entry/item/voice_of_god
name = "Voice of god"
desc = "A magical vocal cord that can be used to yell out with the voice of a god, be it to harm, help, or confuse the target."
item_path = /obj/item/organ/internal/vocal_cords/colossus/wizard
log_name = "VG"
category = "Artefacts"

/datum/spellbook_entry/item/warp_cubes
name = "Warp Cubes"
desc = "Two magic cubes, that when they are twisted in hand, teleports the user to the location of the other cube instantly. Great for silently teleporting to a fixed location, or teleporting you to an appretnance, or vice versa. Do not leave on the wizard den, it will not work."
item_path = /obj/item/warp_cube/red
log_name = "WC"
cost = 1
spawn_on_floor = TRUE // breaks if spawned in hand
category = "Artefacts"

//Weapons and Armors
/datum/spellbook_entry/item/battlemage
name = "Battlemage Armour"
Expand Down Expand Up @@ -437,6 +477,21 @@
log_name = "SI"
category = "Weapons and Armors"

/datum/spellbook_entry/item/spell_blade //Yes spellblade is technicaly a staff, but you can melee with it and it is not called a staff so I am putting it here
name = "Spellblade"
desc = "A magical sword that is quite good at slashing people, but is even better at shooting magical projectiles that can potentialy delimb at range."
item_path = /obj/item/gun/magic/staff/spellblade
log_name = "SB"
category = "Weapons and Armors"

/datum/spellbook_entry/item/meat_hook
name = "Meat hook"
desc = "An enchanted hook, that can be used to hook people, hurt them, and bring them right to you. Quite bulky, works well as a belt though."
item_path = /obj/item/gun/magic/hook
cost = 1
log_name = "MH"
category = "Weapons and Armors"

//Staves
/datum/spellbook_entry/item/staffdoor
name = "Staff of Door Creation"
Expand Down
3 changes: 2 additions & 1 deletion code/game/machinery/constructable_frame.dm
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,8 @@ to destroy them and players will be able to make replacements.
"\improper Secure Refrigerated Medicine Storage" = /obj/machinery/smartfridge/secure/medbay,
"\improper Smart Chemical Storage" = /obj/machinery/smartfridge/secure/chemistry,
"smart virus storage" = /obj/machinery/smartfridge/secure/chemistry/virology,
"\improper Drink Showcase" = /obj/machinery/smartfridge/drinks
"\improper Drink Showcase" = /obj/machinery/smartfridge/drinks,
"disk compartmentalizer" = /obj/machinery/smartfridge/disks
)


Expand Down
3 changes: 3 additions & 0 deletions code/game/machinery/washing_machine.dm
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@
if( istype(W,/obj/item/clothing/gloves/furgloves ) )
to_chat(user, "This item does not fit.")
return
if(istype(W, /obj/item/clothing/gloves/color/black/krav_maga/sec))
to_chat(user, "<span class='warning'>Washing these gloves would fry the electronics!</span>")
return
if(W.flags & NODROP) //if "can't drop" item
to_chat(user, "<span class='notice'>\The [W] is stuck to your hand, you cannot put it in the washing machine!</span>")
return
Expand Down
116 changes: 116 additions & 0 deletions code/game/objects/items/hand_item.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/obj/item/slapper
name = "slapper"
desc = "This is how real men fight."
icon_state = "latexballon"
item_state = "nothing"
force = 0
throwforce = 0
flags = DROPDEL | ABSTRACT
attack_verb = list("slaps")
hitsound = 'sound/weapons/slap.ogg'
/// How many smaller table smacks we can do before we're out
var/table_smacks_left = 3

/obj/item/slapper/attack(mob/M, mob/living/carbon/human/user)
user.do_attack_animation(M)
playsound(M, hitsound, 50, TRUE, -1)
user.visible_message("<span class='danger'>[user] slaps [M]!</span>", "<span class='notice'>You slap [M]!</span>", "<span class='hear'>You hear a slap.</span>")

/obj/item/slapper/attack_obj(obj/O, mob/living/user, params)
if(!istype(O, /obj/structure/table))
return ..()

var/obj/structure/table/the_table = O

if(user.a_intent == INTENT_HARM && table_smacks_left == initial(table_smacks_left)) // so you can't do 2 weak slaps followed by a big slam
transform = transform.Scale(1.5) // BIG slap
if(HAS_TRAIT(user, TRAIT_HULK))
transform = transform.Scale(2)
color = COLOR_GREEN
user.do_attack_animation(the_table)
if(ishuman(user))
var/mob/living/carbon/human/human_user = user
if(istype(human_user.shoes, /obj/item/clothing/shoes/cowboy))
human_user.say(pick("Hot damn!", "Hoo-wee!", "Got-dang!"))
playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 110, TRUE)
user.visible_message("<b><span class='danger'>[user] slams [user.p_their()] fist down on [the_table]!</span></b>", "<b><span class='danger'>You slam your fist down on [the_table]!</span></b>")
qdel(src)
else
user.do_attack_animation(the_table)
playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 40, TRUE)
user.visible_message("<span class='notice'>[user] slaps [user.p_their()] hand on [the_table].</span>", "<span class='notice'>You slap your hand on [the_table].</span>")
table_smacks_left--
if(table_smacks_left <= 0)
qdel(src)

/obj/item/kisser
name = "kiss"
desc = "I want you all to know, everyone and anyone, to seal it with a kiss."
icon = 'icons/mob/animal.dmi'
icon_state = "heart"
item_state = "nothing"
force = 0
throwforce = 0
flags = DROPDEL | ABSTRACT
/// The kind of projectile this version of the kiss blower fires
var/kiss_type = /obj/item/projectile/kiss

/obj/item/kisser/afterattack(atom/target, mob/user, flag, params)
var/turf/user_turf = get_turf(user)
var/obj/item/projectile/blown_kiss = new kiss_type(user_turf)
user.visible_message("<b>[user]</b> blows \a [blown_kiss] at [target]!", "<span class='notice'>You blow \a [blown_kiss] at [target]!</span>")

//Shooting Code:
blown_kiss.spread = 0
blown_kiss.original = target
blown_kiss.firer = user // don't hit ourself that would be really annoying
blown_kiss.preparePixelProjectile(target, user_turf, user, params)
blown_kiss.fire()
qdel(src)

/obj/item/kisser/death
name = "kiss of death"
desc = "If looks could kill, they'd be this."
color = COLOR_BLACK
kiss_type = /obj/item/projectile/kiss/death

/obj/item/projectile/kiss
name = "kiss"
icon = 'icons/mob/animal.dmi'
icon_state = "heart"
hitsound = 'sound/effects/kiss.ogg'
hitsound_wall = 'sound/effects/kiss.ogg'
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
speed = 1.6
damage_type = BRUTE
damage = 0
nodamage = TRUE // love can't actually hurt you
armour_penetration = 100 // but if it could, it would cut through even the thickest plate
flag = "magic" // and most importantly, love is magic~

/obj/item/projectile/kiss/fire(angle)
if(firer)
name = "[name] blown by [firer]"
return ..()

/obj/item/projectile/kiss/on_hit(atom/target, blocked, hit_zone)
def_zone = BODY_ZONE_HEAD // let's keep it PG, people
. = ..()

/obj/item/projectile/kiss/death
name = "kiss of death"
nodamage = FALSE // okay i kinda lied about love not being able to hurt you
damage = 35
sharp = TRUE
color = COLOR_BLACK

/obj/item/projectile/kiss/death/on_hit(atom/target, blocked, pierce_hit)
. = ..()
if(!iscarbon(target))
return
var/mob/living/carbon/heartbreakee = target
var/obj/item/organ/internal/heart/dont_go_breakin_my_heart = heartbreakee.get_organ_slot("heart")
if(dont_go_breakin_my_heart)
dont_go_breakin_my_heart.receive_damage(999)
else // You're probably a snowflakey species or Xenomorph
heartbreakee.adjustFireLoss(1000) // the sickest of burns
2 changes: 1 addition & 1 deletion code/game/objects/items/weapons/extinguisher.dm
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
to_chat(user, "The safety is [safety ? "on" : "off"].")
return

/obj/item/extinguisher/attack_obj(obj/O, mob/living/user)
/obj/item/extinguisher/attack_obj(obj/O, mob/living/user, params)
if(AttemptRefill(O, user))
refilling = TRUE
return FALSE
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/weapons/pneumaticCannon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@

/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/pneumatic_cannon/ghetto
result = list(/obj/item/pneumatic_cannon/ghetto)
tools = list(TOOL_WELDER, TOOL_WRENCH)
reqs = list(/obj/item/stack/sheet/metal = 4,
/obj/item/stack/packageWrap = 8,
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/weapons/signs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@

/datum/crafting_recipe/picket_sign
name = "Picket Sign"
result = /obj/item/picket_sign
result = list(/obj/item/picket_sign)
reqs = list(/obj/item/stack/rods = 1,
/obj/item/stack/sheet/cardboard = 2)
time = 80
Expand Down

0 comments on commit 4010c96

Please sign in to comment.