mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-05 23:11:52 +00:00
* Replace SSingulo with SScalamity; processing cleanup
- SScalamity now handles blobs as well as singularity-types.
- Processing subtypes have been simplified to not require a stop_processing definition.
* this is probably important
* Remove cascade disabling SSgarbage
* Fixed a bug where dust() did not qdel the target mob
* Misc fixes
* Fix decals surviving break-to-plating
* Subsystem flag tweaks
* Apparently subsystems are new'd before config is.
* Fix paper icons
* Speculative fix for insane lag
* Better machinery stat
* Make organs not use SSoverlay
* Misc bugfixes & tweaks
* Nightmode fixes
* Changelog for SMC
* Port /tg/'s improved MC crash handling
* Add some more SS Recover() procs
* supply_controller -> SScargo
* More New() -> Initialize()
* pAI and robot construction overlays
* Fix cargo unit tests
* Merge the DMM Suite's atom/New() into atoms_init
* Lighting pre-baking
* Lighting initialization logging
* Fix some bad SS init orders
* Fix SSlighting logging; rename Processes to MC
* Speculative fix for insane GC lag
* Prebaked openturf/icon_smooth & fix lighting prebake
* SS init status; SSatoms LATEQDEL
* Fix bug with MC init stat panel
* Fix parallax
* Misc
* Ignore SS_NO_DISPLAY during init
* apparently this is important
* REEEEEE
* Image GC fixes; broadcaster radio-new sanity
* RCON Cleanup
* Move pAI recruiter into subsystem
* Move global solars list into sun subsystem
* Make chickens not use a global
* Demote SSdisposals to SS_BACKGROUND; garbage-debug cleanup
* Speed up space init a little
* Fix bad timer flags on floor drying
* Subsystem panic-restart verb for mins
* Explosion speedup
* Minor subsystem & MC logging tweaks
* SSopenturf improvements
* Make pipenet actually initialize (whoops)
* Minor tweaks
* Implement lighting rounding
* comments are hard okay
* Minor lattice tweaks
* Fix some timer issues & better closet init
* Timer sanity
* Request console tweaks + Storage init sanity
* Minor SSmachiner RCON improvements
* Further reduce world-start timer count
* Standardize subsystem logging
* Garbage hard delete profiling from /tg/
* Timer hang detection & recovery
* Log machines that sleep in process() and fuck up SSmachinery
* Fix an issue with external airlocks sleeping in process()
* Failsafe logging
* Minor tweaks
* Revert "Request console tweaks + Storage init sanity"
This reverts commit 98d3579e35.
* Re-implement RC changes
* Fix SQL FT saving
* Fix SSmachinery sleep in disposals
* Minor SS tweaks
* Paper fixes
* Blood drying fixes
* Merge gameticker and SSticker
* Minor global list init cleanup
* Lagcheck biogenerator & bags
* Tweak SScargo init order; RIG Initialize()
* Caching tweaks
* Remove rogue comma
* Initialize fixes
* Lighting destroy cleanup
* Fix emagging airlocks
* Initial SSicon implementation
* Tweaks & Fixes
* Fire + Air alarm queued icon updates
* Overlays + Queued icon cleanup
* Runtime & background fixes
* Kill some meaningless set statements
* Kill some image qdels
* Bump up lighting rounding val
* Fix adv. scanner destroy runtimes
* Remove unneeded icon update limiting
* Move icon smoothing into helpers
* Show a warning if DM 510 compiles without memory leak hack enabled
* Re-organize subsystems & MC defines a little
* Airlock SFX
* Log of Changes
* Make SSicon_update disable itself when not doing anything
* Fix respawn verb runtime when used early in server-init
* Add more information to MC's stat_entry()
* Replace direct refernces to gcDestroyed with QDEL* macros
* plant_controller -> SSplants
* More plant tweaks
* Add more humor to changelog
* Move parallax globals into SSparallax
* Lighting responsiveness tweaks
* Fix parallax init order & better MC init panel stat
* Make mobs GC
* More overlays + Remove intercom spawn()
* SSfast_process; make pinpointers not use spawn-recursion to process
Also made the SM Cascade beach process with SSprocessing instead of a spawn loop.
* Update changelog
* Mob GC tweaks
* Del() cleanup
* Fix insomniac ZAS connection edges
* Minor pAI cleanup
* Convert more things to SSoverlay; fix duplicated overlay in field gens
* SM Bluespace turf tweaks
* Update SSgarbage debug globals list
* Human-type qdel tweaks
* Subsystem suspension; stat_entry improvements
* SQL Statistics cleanup
* Fix runtimes with ambrosia
* More disable() -> suspend(); fix nightmode again
* Human qdel fix; minor tweaks
* Update turbolift to work with StonedMC
* Make lifts use timers instead of a subsystem
* Make SSassets start earlier
* Convert the radio controller into a subsystem
* Fix some missing CHECK_TICKs in asteroid generation
* MC stat tweaks; make shouldnt_see a typecache
* Kill some redundant debug-controller entries
* radio_controller -> SSradio
* Better SSgarbage hard-del logging from /tg/ upstream
* Logging tweaks + GELF
* Misc client caching improvements
* Slime SSoverlay
* Oven icon fixes
* Implant fixes
- Death implants will no longer spam Common on death of user.
- Death implants should handle a deleted user better.
* Holder tweaks + Welding tool Initialize()
* Fix some bad subsystem logging
* Fix suit cooling units spawning without cells
* Starlight tweaks
* Gibber infinite gib fix
* More SSoverlay stuff
* Make crates use CUT_OVERLAY_IN
* Make SSarrivals suspend instead of disable
* Make openturf use split/phased tick checks
* Speculative fix for unwet timer runtimes
* Blood overlay tweaks/fixes
* Update crusher to play nice with SMC + SSoverlay
* Openturf improvements and fixes
* Minor turbolift tweaks
* Lighting performance improvements + ChangeTurf tweaks
* this is probably important
* Fix wall weld noises on changeturf
* More ChangeTurf tweaks
* Explosion tweaks
* Pre-game lobby tweaks
* Openturf tweaks
* Prevent admins from starting the game before init finishes
* Fix Travis
* Kill an unused var
* Fix ChangeTurf runtimes on openturfs
* Fixes
* Browser datum fixes, asset caching
* Update changelog
* Changelog
* Lobby tweaks
* Ticker tweaks; kill ticker var
* Further lobby tweaks
* Cascade tweaks
* air_master -> SSair
* Reduce overhead from radio autosay
* alarm_manager -> SSalarm
* bomb_processor -> SSexplosives
* corp_regs -> SSlaw
* ZAS overlay fixes
* Small wall icon optimization
* Fix effects master
* Assembly tweaks
* Megavend fixes
* Shuttle fixes
* Camera alert performance improvements
* Fix some world.log spam from lighting overlays
* Fix some Initialize() procs
* Openspace responsiveness tweaks
* Make HE pipes animate through openturfs
* Kill a spawn
275 lines
8.6 KiB
Plaintext
275 lines
8.6 KiB
Plaintext
/* Two-handed Weapons
|
|
* Contains:
|
|
* Twohanded
|
|
* Fireaxe
|
|
* Double-Bladed Energy Swords
|
|
*/
|
|
|
|
/*##################################################################
|
|
##################### TWO HANDED WEAPONS BE HERE~ -Agouri :3 ########
|
|
####################################################################*/
|
|
|
|
//Rewrote TwoHanded weapons stuff and put it all here. Just copypasta fireaxe to make new ones ~Carn
|
|
//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons.
|
|
//It also tidies stuff up elsewhere.
|
|
|
|
/*
|
|
* Twohanded
|
|
*/
|
|
/obj/item/weapon/material/twohanded
|
|
w_class = 4
|
|
var/wielded = 0
|
|
var/force_wielded = 0
|
|
var/force_unwielded
|
|
var/wieldsound = null
|
|
var/unwieldsound = null
|
|
var/base_icon
|
|
var/base_name
|
|
var/unwielded_force_divisor = 0.25
|
|
action_button_name = "Wield two-handed weapon"
|
|
|
|
/obj/item/weapon/material/twohanded/proc/unwield()
|
|
wielded = 0
|
|
force = force_unwielded
|
|
name = "[base_name]"
|
|
update_icon()
|
|
|
|
/obj/item/weapon/material/twohanded/proc/wield()
|
|
wielded = 1
|
|
force = force_wielded
|
|
name = "[base_name] (Wielded)"
|
|
update_icon()
|
|
|
|
/obj/item/weapon/material/twohanded/update_force()
|
|
base_name = name
|
|
if(sharp || edge)
|
|
force_wielded = material.get_edge_damage()
|
|
else
|
|
force_wielded = material.get_blunt_damage()
|
|
force_wielded = round(force_wielded*force_divisor)
|
|
force_unwielded = round(force_wielded*unwielded_force_divisor)
|
|
force = force_unwielded
|
|
throwforce = round(force*thrown_force_divisor)
|
|
//world << "[src] has unwielded force [force_unwielded], wielded force [force_wielded] and throwforce [throwforce] when made from default material [material.name]"
|
|
|
|
/obj/item/weapon/material/twohanded/New()
|
|
..()
|
|
update_icon()
|
|
|
|
/obj/item/weapon/material/twohanded/mob_can_equip(M as mob, slot)
|
|
//Cannot equip wielded items.
|
|
if(wielded)
|
|
M << "<span class='warning'>Unwield the [base_name] first!</span>"
|
|
return 0
|
|
|
|
return ..()
|
|
|
|
/obj/item/weapon/material/twohanded/dropped(mob/user as mob)
|
|
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
|
|
if(user)
|
|
var/obj/item/weapon/material/twohanded/O = user.get_inactive_hand()
|
|
if(istype(O))
|
|
O.unwield()
|
|
return unwield()
|
|
|
|
//Allow a small chance of parrying melee attacks when wielded - maybe generalize this to other weapons someday
|
|
/obj/item/weapon/material/twohanded/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
|
if(wielded && default_parry_check(user, attacker, damage_source) && prob(15))
|
|
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
|
|
playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1)
|
|
return 1
|
|
return 0
|
|
|
|
/obj/item/weapon/material/twohanded/update_icon()
|
|
icon_state = "[base_icon][wielded]"
|
|
item_state = icon_state
|
|
|
|
/obj/item/weapon/material/twohanded/pickup(mob/user)
|
|
unwield()
|
|
|
|
/obj/item/weapon/material/twohanded/attack_self(mob/user as mob)
|
|
|
|
..()
|
|
|
|
if(istype(user, /mob/living/carbon/human))
|
|
var/mob/living/carbon/human/H = user
|
|
if(issmall(H))
|
|
user << "<span class='warning'>It's too heavy for you to wield fully.</span>"
|
|
return
|
|
else
|
|
return
|
|
|
|
if(wielded) //Trying to unwield it
|
|
unwield()
|
|
user << "<span class='notice'>You are now carrying the [name] with one hand.</span>"
|
|
if (src.unwieldsound)
|
|
playsound(src.loc, unwieldsound, 50, 1)
|
|
|
|
var/obj/item/weapon/material/twohanded/offhand/O = user.get_inactive_hand()
|
|
if(O && istype(O))
|
|
user.u_equip(O)
|
|
O.unwield()
|
|
|
|
else //Trying to wield it
|
|
if(user.get_inactive_hand())
|
|
user << "<span class='warning'>You need your other hand to be empty</span>"
|
|
return
|
|
wield()
|
|
user << "<span class='notice'>You grab the [base_name] with both hands.</span>"
|
|
if (src.wieldsound)
|
|
playsound(src.loc, wieldsound, 50, 1)
|
|
|
|
var/obj/item/weapon/material/twohanded/offhand/O = new /obj/item/weapon/material/twohanded/offhand(user) ////Let's reserve his other hand~
|
|
O.name = "[base_name] - offhand"
|
|
O.desc = "Your second grip on the [base_name]."
|
|
user.put_in_inactive_hand(O)
|
|
|
|
if(istype(user,/mob/living/carbon/human))
|
|
var/mob/living/carbon/human/H = user
|
|
H.update_inv_l_hand()
|
|
H.update_inv_r_hand()
|
|
|
|
return
|
|
|
|
/obj/item/weapon/material/twohanded/ui_action_click()
|
|
if(src in usr)
|
|
attack_self(usr)
|
|
|
|
/obj/item/weapon/material/twohanded/verb/wield_twohanded()
|
|
set name = "Wield two-handed weapon"
|
|
set category = "Object"
|
|
set src in usr
|
|
|
|
attack_self(usr)
|
|
|
|
///////////OFFHAND///////////////
|
|
/obj/item/weapon/material/twohanded/offhand
|
|
w_class = 5
|
|
icon_state = "offhand"
|
|
name = "offhand"
|
|
default_material = "placeholder"
|
|
|
|
/obj/item/weapon/material/twohanded/offhand/unwield()
|
|
if (ismob(loc))
|
|
var/mob/living/our_mob = loc
|
|
our_mob.remove_from_mob(src)
|
|
|
|
qdel(src)
|
|
|
|
/obj/item/weapon/material/twohanded/offhand/wield()
|
|
if (ismob(loc))
|
|
var/mob/living/our_mob = loc
|
|
our_mob.remove_from_mob(src)
|
|
|
|
qdel(src)
|
|
|
|
/obj/item/weapon/material/twohanded/offhand/update_icon()
|
|
return
|
|
|
|
/*
|
|
* Fireaxe
|
|
*/
|
|
/obj/item/weapon/material/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
|
|
icon_state = "fireaxe0"
|
|
base_icon = "fireaxe"
|
|
name = "fire axe"
|
|
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
|
|
unwielded_force_divisor = 0.25
|
|
force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor
|
|
sharp = 1
|
|
edge = 1
|
|
w_class = 4.0
|
|
slot_flags = SLOT_BACK
|
|
force_wielded = 30
|
|
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
|
applies_material_colour = 0
|
|
|
|
/obj/item/weapon/material/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
|
if(!proximity) return
|
|
..()
|
|
if(A && wielded)
|
|
if(istype(A,/obj/structure/window))
|
|
var/obj/structure/window/W = A
|
|
W.shatter()
|
|
else if(istype(A,/obj/structure/grille))
|
|
qdel(A)
|
|
else if(istype(A,/obj/effect/plant))
|
|
var/obj/effect/plant/P = A
|
|
P.die_off()
|
|
|
|
//spears, bay edition
|
|
/obj/item/weapon/material/twohanded/spear
|
|
icon_state = "spearglass0"
|
|
base_icon = "spearglass"
|
|
name = "spear"
|
|
desc = "A haphazardly-constructed yet still deadly weapon of ancient design."
|
|
force = 10
|
|
w_class = 4.0
|
|
slot_flags = SLOT_BACK
|
|
force_wielded = 0.75 // 22 when wielded with hardness 15 (glass)
|
|
unwielded_force_divisor = 0.65 // 14 when unwielded based on above
|
|
thrown_force_divisor = 1.5 // 20 when thrown with weight 15 (glass)
|
|
throw_speed = 3
|
|
edge = 1
|
|
sharp = 1
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
|
|
default_material = "glass"
|
|
|
|
//Putting heads on spears
|
|
/*bj/item/organ/external/head/attackby(var/obj/item/weapon/W, var/mob/living/user, params)
|
|
if(istype(W, /obj/item/weapon/material/twohanded/spear))
|
|
user << "<span class='notice'>You stick the head onto the spear and stand it upright on the ground.</span>"
|
|
var/obj/structure/headspear/HS = new /obj/structure/headspear(user.loc)
|
|
var/matrix/M = matrix()
|
|
src.transform = M
|
|
user.drop_item()
|
|
src.loc = HS
|
|
var/image/IM = image(src.icon,src.icon_state)
|
|
IM.overlays = src.overlays.Copy()
|
|
HS.overlays += IM
|
|
qdel(W)
|
|
qdel(src)
|
|
return
|
|
return ..()*/
|
|
|
|
/obj/item/weapon/material/twohanded/spear/attackby(var/obj/item/I, var/mob/living/user)
|
|
if(istype(I, /obj/item/organ/external/head))
|
|
user << "<span class='notice'>You stick the head onto the spear and stand it upright on the ground.</span>"
|
|
var/obj/structure/headspear/HS = new /obj/structure/headspear(user.loc)
|
|
var/matrix/M = matrix()
|
|
I.transform = M
|
|
usr.drop_item()
|
|
I.loc = HS
|
|
var/image/IM = image(I.icon,I.icon_state)
|
|
IM.overlays = I.overlays.Copy()
|
|
HS.overlays += IM
|
|
HS.name = "[I.name] on a spear"
|
|
qdel(src)
|
|
return
|
|
return ..()
|
|
|
|
//predefined materials for spears
|
|
/obj/item/weapon/material/twohanded/spear/steel/New(var/newloc)
|
|
..(newloc,"steel")
|
|
|
|
/obj/item/weapon/material/twohanded/spear/plasteel/New(var/newloc)
|
|
..(newloc,"plasteel")
|
|
|
|
/obj/item/weapon/material/twohanded/spear/diamond/New(var/newloc)
|
|
..(newloc,"diamond")
|
|
|
|
/obj/structure/headspear
|
|
name = "head on a spear"
|
|
desc = "How barbaric."
|
|
icon_state = "headspear"
|
|
density = 0
|
|
anchored = 1
|
|
|
|
/obj/structure/headspear/attack_hand(mob/living/user)
|
|
user.visible_message("<span class='warning'>[user] kicks over \the [src]!</span>", "<span class='danger'>You kick down \the [src]!</span>")
|
|
new /obj/item/weapon/material/twohanded/spear(user.loc)
|
|
for(var/obj/item/organ/external/head/H in src)
|
|
H.loc = user.loc
|
|
qdel(src)
|