Tg 2 11 sync (#215)
* first series of updates * datums * games folder * admin and atmosia stuffs * moar * mob updates borg riding * sprites and stuff * fixes for various things * oops. some missed fixes
This commit is contained in:
@@ -57,11 +57,11 @@
|
||||
var/chassis = "repairbot"
|
||||
var/list/possible_chassis = list("cat", "mouse", "monkey", "corgi", "fox", "repairbot", "rabbit")
|
||||
|
||||
var/emitterhealth = 50
|
||||
var/emittermaxhealth = 50
|
||||
var/emitterregen = 0.5
|
||||
var/emittercd = 20
|
||||
var/emitteroverloadcd = 50
|
||||
var/emitterhealth = 20
|
||||
var/emittermaxhealth = 20
|
||||
var/emitterregen = 0.25
|
||||
var/emittercd = 50
|
||||
var/emitteroverloadcd = 100
|
||||
var/emittersemicd = FALSE
|
||||
|
||||
var/overload_ventcrawl = 0
|
||||
@@ -235,4 +235,4 @@
|
||||
|
||||
/mob/living/silicon/pai/process()
|
||||
emitterhealth = Clamp((emitterhealth + emitterregen), -50, emittermaxhealth)
|
||||
hit_slowdown = Clamp((hit_slowdown - 1), 0, 100)
|
||||
hit_slowdown = Clamp((hit_slowdown - 1), 0, 100)
|
||||
@@ -30,4 +30,6 @@
|
||||
|
||||
update_icons()
|
||||
|
||||
sql_report_death(src)
|
||||
unbuckle_all_mobs(TRUE)
|
||||
|
||||
sql_report_death(src)
|
||||
|
||||
@@ -69,4 +69,4 @@
|
||||
"You announce you are operating in low power mode.")
|
||||
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
|
||||
else
|
||||
src << "<span class='warning'>You can only use this emote when you're out of charge.</span>"
|
||||
src << "<span class='warning'>You can only use this emote when you're out of charge.</span>"
|
||||
|
||||
@@ -89,7 +89,9 @@
|
||||
/obj/item/clothing/head/sombrero,
|
||||
/obj/item/clothing/head/witchunter_hat)
|
||||
|
||||
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
var/datum/riding/cyborg/riding_datum = null
|
||||
|
||||
/mob/living/silicon/robot/New(loc)
|
||||
spark_system = new /datum/effect_system/spark_spread()
|
||||
@@ -995,3 +997,90 @@
|
||||
hat = new_hat
|
||||
new_hat.forceMove(src)
|
||||
update_icons()
|
||||
|
||||
/mob/living/silicon/robot/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
. = ..()
|
||||
if(!(M in buckled_mobs))
|
||||
buckle_mob(M)
|
||||
|
||||
/mob/living/silicon/robot/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE)
|
||||
if(!riding_datum)
|
||||
riding_datum = new /datum/riding/cyborg
|
||||
riding_datum.ridden = src
|
||||
if(buckled_mobs)
|
||||
if(buckled_mobs.len >= max_buckled_mobs)
|
||||
return
|
||||
if(M in buckled_mobs)
|
||||
return
|
||||
if(stat)
|
||||
return
|
||||
if(incapacitated())
|
||||
return
|
||||
if(M.restrained())
|
||||
return
|
||||
if(iscyborg(M))
|
||||
M.visible_message("<span class='warning'>[M] really can't seem to mount the [src]...</span>")
|
||||
return
|
||||
if(isbot(M))
|
||||
M.visible_message("<span class='boldwarning'>No. Just... no.</span>")
|
||||
return
|
||||
if(module)
|
||||
if(!module.allow_riding)
|
||||
M.visible_message("<span class='boldwarning'>Unfortunately, [M] just can't seem to hold onto [src]!</span>")
|
||||
return
|
||||
if(iscarbon(M))
|
||||
if(!equip_buckle_inhands(M)) //MAKE SURE THIS IS LAST!
|
||||
M.visible_message("<span class='boldwarning'>[M] can't climb onto [src] because his hands are full!</span>")
|
||||
return
|
||||
. = ..(M, force, check_loc)
|
||||
riding_datum.handle_vehicle_offsets()
|
||||
|
||||
/mob/living/silicon/robot/unbuckle_mob(mob/user)
|
||||
if(iscarbon(user))
|
||||
unequip_buckle_inhands(user)
|
||||
. = ..(user)
|
||||
riding_datum.restore_position(user)
|
||||
|
||||
/mob/living/silicon/robot/proc/unequip_buckle_inhands(mob/living/carbon/user)
|
||||
for(var/obj/item/cyborgride_offhand/O in user.contents)
|
||||
if(O.ridden != src)
|
||||
CRASH("RIDING OFFHAND ON WRONG MOB")
|
||||
continue
|
||||
if(O.selfdeleting)
|
||||
continue
|
||||
else
|
||||
qdel(O)
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/proc/equip_buckle_inhands(mob/living/carbon/user)
|
||||
var/obj/item/cyborgride_offhand/inhand = new /obj/item/cyborgride_offhand(user)
|
||||
inhand.rider = user
|
||||
inhand.ridden = src
|
||||
return user.put_in_hands(inhand, TRUE)
|
||||
|
||||
/obj/item/cyborgride_offhand
|
||||
name = "offhand"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "offhand"
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
flags = ABSTRACT | DROPDEL | NOBLUDGEON
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
var/mob/living/carbon/rider
|
||||
var/mob/living/silicon/robot/ridden
|
||||
var/selfdeleting = FALSE
|
||||
|
||||
/obj/item/cyborgride_offhand/dropped()
|
||||
selfdeleting = TRUE
|
||||
. = ..()
|
||||
|
||||
/obj/item/cyborgride_offhand/equipped()
|
||||
if(loc != rider)
|
||||
selfdeleting = TRUE
|
||||
qdel(src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/cyborgride_offhand/Destroy()
|
||||
if(selfdeleting)
|
||||
if(rider in ridden.buckled_mobs)
|
||||
ridden.unbuckle_mob(rider)
|
||||
. = ..()
|
||||
|
||||
@@ -26,6 +26,11 @@
|
||||
|
||||
var/hat_offset = -3
|
||||
|
||||
var/list/ride_offset_x = list("north" = 0, "south" = 0, "east" = -6, "west" = 6)
|
||||
var/list/ride_offset_y = list("north" = 4, "south" = 4, "east" = 3, "west" = 3)
|
||||
var/ride_allow_incapacitated = FALSE
|
||||
var/allow_riding = TRUE
|
||||
|
||||
/obj/item/weapon/robot_module/New()
|
||||
..()
|
||||
for(var/i in basic_modules)
|
||||
|
||||
@@ -17,3 +17,8 @@
|
||||
/mob/living/silicon/robot/experience_pressure_difference(pressure_difference, direction)
|
||||
if(!magpulse)
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/Moved()
|
||||
. = ..()
|
||||
if(riding_datum)
|
||||
riding_datum.on_vehicle_move()
|
||||
@@ -26,6 +26,11 @@
|
||||
/mob/living/silicon/attack_animal(mob/living/simple_animal/M)
|
||||
if(..())
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
if(prob(damage))
|
||||
for(var/mob/living/N in buckled_mobs)
|
||||
N.Weaken(1)
|
||||
unbuckle_mob(N)
|
||||
N.visible_message("<span class='boldwarning'>[N] is knocked off of [src] by [M]!</span>")
|
||||
switch(M.melee_damage_type)
|
||||
if(BRUTE)
|
||||
adjustBruteLoss(damage)
|
||||
@@ -73,6 +78,10 @@
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0)
|
||||
if(buckled_mobs)
|
||||
for(var/mob/living/M in buckled_mobs)
|
||||
unbuckle_mob(M)
|
||||
M.electrocute_act(shock_damage/100, source, siemens_coeff, safety, tesla_shock, illusion) //Hard metal shell conducts!
|
||||
return 0 //So borgs they don't die trying to fix wiring
|
||||
|
||||
/mob/living/silicon/emp_act(severity)
|
||||
@@ -83,12 +92,26 @@
|
||||
src.take_bodypart_damage(10)
|
||||
src << "<span class='userdanger'>*BZZZT*</span>"
|
||||
src << "<span class='danger'>Warning: Electromagnetic pulse detected.</span>"
|
||||
for(var/mob/living/M in buckled_mobs)
|
||||
if(prob(severity*50))
|
||||
unbuckle_mob(M)
|
||||
M.Weaken(2)
|
||||
M.visible_message("<span class='boldwarning'>[M] is thrown off of [src]!</span>")
|
||||
flash_act(affect_silicon = 1)
|
||||
..()
|
||||
|
||||
/mob/living/silicon/bullet_act(obj/item/projectile/Proj)
|
||||
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
|
||||
adjustBruteLoss(Proj.damage)
|
||||
if(prob(Proj.damage*1.5))
|
||||
for(var/mob/living/M in buckled_mobs)
|
||||
M.visible_message("<span class='boldwarning'>[M] is knocked off of [src]!</span>")
|
||||
unbuckle_mob(M)
|
||||
M.Weaken(2)
|
||||
if(Proj.stun || Proj.weaken)
|
||||
for(var/mob/living/M in buckled_mobs)
|
||||
unbuckle_mob(M)
|
||||
M.visible_message("<span class='boldwarning'>[M] is knocked off of [src] by the [Proj]!</span>")
|
||||
Proj.on_hit(src)
|
||||
return 2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user