mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into sql
Conflicts: _maps/map_files/cyberiad/cyberiad.dmm
This commit is contained in:
@@ -17,99 +17,110 @@
|
||||
if (0) // Debug
|
||||
if(check_rights(R_ADMIN,0))
|
||||
dat += {"
|
||||
<B>Admin Secrets</B><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=list_bombers'>Bombing List</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=list_signalers'>Show last [length(lastsignalers)] signalers</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=list_lawchanges'>Show last [length(lawchanges)] law changes</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=showailaws'>Show AI Laws</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=showgm'>Show Game Mode</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=manifest'>Show Crew Manifest</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=DNA'>List DNA (Blood)</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=fingerprints'>List Fingerprints</A><BR><BR>
|
||||
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=power'>Make all areas powered</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=unpower'>Make all areas unpowered</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=quickpower'>Power all SMES</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=toggleprisonstatus'>Toggle Prison Shuttle Status(Use with S/R)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=activateprison'>Send Prison Shuttle</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=deactivateprison'>Return Prison Shuttle</A><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=launchshuttle'>Launch a shuttle</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=forcelaunchshuttle'>Force launch a shuttle</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=jumpshuttle'>Jump a shuttle</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=moveshuttle'>Move a shuttle</A><BR>
|
||||
<BR>
|
||||
<center><B><h2>Admin Secrets</h2></B>
|
||||
<B>Game</b><br>
|
||||
<A href='?src=\ref[src];secretsadmin=showailaws'>Show AI Laws</A>
|
||||
<A href='?src=\ref[src];secretsadmin=showgm'>Show Game Mode</A>
|
||||
<A href='?src=\ref[src];secretsadmin=manifest'>Show Crew Manifest</A><br>
|
||||
<A href='?src=\ref[src];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
|
||||
<B>Bombs</b><br>
|
||||
<A href='?src=\ref[src];secretsadmin=list_bombers'>Bombing List</A>
|
||||
<A href='?src=\ref[src];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A>
|
||||
[check_rights(R_SERVER, 0) ? " <A href='?src=\ref[src];secretsfun=togglebombcap'>Toggle bomb cap</A><br>" : "<br>"]
|
||||
<B>Lists</b><br>
|
||||
<A href='?src=\ref[src];secretsadmin=list_signalers'>Show last [length(lastsignalers)] signalers</A>
|
||||
<A href='?src=\ref[src];secretsadmin=list_lawchanges'>Show last [length(lawchanges)] law changes</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=DNA'>List DNA (Blood)</A>
|
||||
<A href='?src=\ref[src];secretsadmin=fingerprints'>List Fingerprints</A><BR>
|
||||
<B>Power</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A>
|
||||
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=power'>Make all areas powered</A>
|
||||
<A href='?src=\ref[src];secretsfun=unpower'>Make all areas unpowered</A>
|
||||
<A href='?src=\ref[src];secretsfun=quickpower'>Power all SMES</A><BR>
|
||||
<BR>
|
||||
<B>Shuttle options</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=launchshuttle'>Launch a shuttle</A>
|
||||
<A href='?src=\ref[src];secretsfun=forcelaunchshuttle'>Force launch a shuttle</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=jumpshuttle'>Jump a shuttle</A>
|
||||
<A href='?src=\ref[src];secretsfun=moveshuttle'>Move a shuttle</A><BR>
|
||||
<BR></center>
|
||||
"}
|
||||
|
||||
if(check_rights(R_SERVER,0))
|
||||
dat += "<A href='?src=\ref[src];secretsfun=togglebombcap'>Toggle bomb cap</A><BR>"
|
||||
else if(check_rights(R_SERVER,0)) //only add this if admin secrets are unavailiable; otherwise, it's added inline
|
||||
dat += "<center><b>Bomb cap: </b><A href='?src=\ref[src];secretsfun=togglebombcap'>Toggle bomb cap</A><BR></center>"
|
||||
dat += "<BR>"
|
||||
if(check_rights(R_DEBUG,0))
|
||||
dat += {"
|
||||
<center>
|
||||
<B>Security Level Elevated</B><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretscoder=maint_access_engiebrig'>Change all maintenance doors to engie/brig access only</A><BR>
|
||||
<A href='?src=\ref[src];secretscoder=maint_access_brig'>Change all maintenance doors to brig access only</A><BR>
|
||||
<A href='?src=\ref[src];secretscoder=infinite_sec'>Remove cap on security officers</A><BR>
|
||||
<A href='?src=\ref[src];secretscoder=maint_access_engiebrig'>Change Security Level </A><BR>
|
||||
<A href='?src=\ref[src];secretscoder=infinite_sec'>Remove cap on security officers</A>
|
||||
<BR>
|
||||
<B>Coder Secrets</B><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsadmin=list_job_debug'>Show Job Debug</A><BR>
|
||||
<A href='?src=\ref[src];secretsadmin=list_job_debug'>Show Job Debug</A>
|
||||
<A href='?src=\ref[src];secretscoder=spawn_objects'>Admin Log</A><BR>
|
||||
<BR>
|
||||
</center>
|
||||
"}
|
||||
|
||||
if (1)
|
||||
if(check_rights((R_EVENT|R_SERVER),0))
|
||||
dat += {"
|
||||
<B>IC Events</B><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam'>Send in a strike team</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam_syndicate'>Send in a syndicate strike team</A><BR>
|
||||
<center>
|
||||
<h2><B>IC Events</B></h2>
|
||||
<b>Teams</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam'>Send in a strike team</A>
|
||||
<A href='?src=\ref[src];secretsfun=striketeam_syndicate'>Send in a syndicate strike team</A>
|
||||
<A href='?src=\ref[src];secretsfun=honksquad'>Send in a HONKsquad</A><BR>
|
||||
<b>Change Security Level</b><BR>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel0'>Security Level - Green</A>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel1'>Security Level - Blue</A>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel2'>Security Level - Red</A><br>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel3'>Security Level - Gamma</A>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel4'>Security Level - Epsilon</A>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel5'>Security Level - Delta</A><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel0'>Change Security Level To Green</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel1'>Change Security Level To Blue</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel2'>Change Security Level To Red</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel3'>Change Security Level To Gamma</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel4'>Change Security Level To Epsilon</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=securitylevel5'>Change Security Level To Delta</A><BR>
|
||||
<BR>"}
|
||||
</center>"}
|
||||
|
||||
if (2)
|
||||
if(check_rights((R_SERVER|R_EVENT),0))
|
||||
dat += {"
|
||||
<B>OOC Events</B><BR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS: extremely lame)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=tdomestart'>Start a Thunderdome match</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=tdomereset'>Reset Thunderdome to default state</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A><BR>
|
||||
<center>
|
||||
<h2><B>OOC Events</B></h2>
|
||||
<b>Thunderdome</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=tdomestart'>Start a Thunderdome match</A>
|
||||
<A href='?src=\ref[src];secretsfun=tdomereset'>Reset Thunderdome to default state</A><BR><br>
|
||||
<b>Clothing</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A>
|
||||
<A href='?src=\ref[src];secretsfun=sec_all_clothes'>Remove ALL clothing</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=sec_classic1'>Remove firesuits, grilles, and pods</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=tripleAI'>Triple AI mode (needs to be used in the lobby)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=onlyone'>There can only be one!</A><BR>
|
||||
<b>TDM</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A>
|
||||
<A href='?src=\ref[src];secretsfun=onlyone'>There can only be one!</A>
|
||||
<A href='?src=\ref[src];secretsfun=onlyoneteam'>Dodgeball (TDM)!</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
|
||||
<b>Round-enders</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS: extremely lame)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
|
||||
<b>Misc</b><br>
|
||||
<A href='?src=\ref[src];secretsfun=sec_classic1'>Remove firesuits, grilles, and pods</A>
|
||||
<A href='?src=\ref[src];secretsfun=tripleAI'>Triple AI mode (needs to be used in the lobby)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A>
|
||||
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A>
|
||||
<A href='?src=\ref[src];secretsfun=eagles'>Egalitarian Station Mode</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=guns'>Summon Guns</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=magic'>Summon Magic</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=guns'>Summon Guns</A>
|
||||
<A href='?src=\ref[src];secretsfun=magic'>Summon Magic</A>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];secretsfun=rolldice'>Roll the Dice</A><BR>
|
||||
<BR>"}
|
||||
<BR>
|
||||
</center>"}
|
||||
dat += "</center></body></html>"
|
||||
var/datum/browser/popup = new(usr, "secrets", "<div align='center'>Admin Secrets</div>", 610, 650)
|
||||
var/datum/browser/popup = new(usr, "secrets", "<div align='center'>Admin Secrets</div>", 630, 670)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
if(ticker.mode && ticker.mode.check_antagonists_topic(href, href_list))
|
||||
check_antagonists()
|
||||
return
|
||||
|
||||
|
||||
if(href_list["rejectadminhelp"])
|
||||
if(!check_rights(R_ADMIN|R_MOD))
|
||||
return
|
||||
@@ -905,7 +905,7 @@
|
||||
feedback_add_details("ban_job","- [job]")
|
||||
jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]")
|
||||
if(!msg) msg = job
|
||||
else msg += ", [job]"
|
||||
else msg += ", [job]"
|
||||
add_note(M.ckey, "Banned from [msg] - [reason]", null, usr, 0)
|
||||
message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1)
|
||||
M << "\red<BIG><B>You have been jobbanned by [usr.client.ckey] from: [msg].</B></BIG>"
|
||||
@@ -1000,7 +1000,7 @@
|
||||
if(query_noteedits.NextRow())
|
||||
var/edit_log = query_noteedits.item[1]
|
||||
usr << browse(edit_log,"window=noteedits")
|
||||
|
||||
|
||||
else if(href_list["removejobban"])
|
||||
if(!check_rights(R_BAN)) return
|
||||
|
||||
@@ -1085,7 +1085,7 @@
|
||||
else if(href_list["watchremove"])
|
||||
var/target_ckey = href_list["watchremove"]
|
||||
var/confirm = alert("Are you sure you want to remove [target_ckey] from the watchlist?", "Confirm Watchlist Removal", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
if(confirm == "Yes")
|
||||
usr.client.watchlist_remove(target_ckey)
|
||||
|
||||
else if(href_list["watchedit"])
|
||||
@@ -1119,8 +1119,8 @@
|
||||
return
|
||||
if(query_watchedits.NextRow())
|
||||
var/edit_log = query_watchedits.item[1]
|
||||
usr << browse(edit_log,"window=watchedits")
|
||||
|
||||
usr << browse(edit_log,"window=watchedits")
|
||||
|
||||
else if(href_list["mute"])
|
||||
if(!check_rights(R_ADMIN|R_MOD))
|
||||
return
|
||||
@@ -1542,7 +1542,7 @@
|
||||
if(!isobserver(usr)) C.admin_ghost()
|
||||
sleep(2)
|
||||
C.jumptomob(M)
|
||||
|
||||
|
||||
else if(href_list["adminplayerobservefollow"])
|
||||
if(!check_rights(R_ADMIN|R_MOD))
|
||||
return
|
||||
@@ -2142,7 +2142,7 @@
|
||||
message_admins("[key_name_admin(usr)] created [number]ea [english_list(paths)]")
|
||||
break
|
||||
return
|
||||
|
||||
|
||||
else if(href_list["kick_all_from_lobby"])
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -2270,34 +2270,6 @@
|
||||
log_admin("[key_name(usr)] made all SMESs powered", 1)
|
||||
message_admins("\blue [key_name_admin(usr)] made all SMESs powered", 1)
|
||||
power_restore_quick()
|
||||
if("activateprison")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","AP")
|
||||
world << "\blue <B>Transit signature detected.</B>"
|
||||
world << "\blue <B>Incoming shuttle.</B>"
|
||||
/*
|
||||
var/A = locate(/area/shuttle_prison)
|
||||
for(var/atom/movable/AM as mob|obj in A)
|
||||
AM.z = 1
|
||||
AM.Move()
|
||||
*/
|
||||
message_admins("\blue [key_name_admin(usr)] sent the prison shuttle to the station.", 1)
|
||||
if("deactivateprison")
|
||||
/*
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","DP")
|
||||
var/A = locate(/area/shuttle_prison)
|
||||
for(var/atom/movable/AM as mob|obj in A)
|
||||
AM.z = 2
|
||||
AM.Move()
|
||||
*/
|
||||
message_admins("\blue [key_name_admin(usr)] sent the prison shuttle back.", 1)
|
||||
if("toggleprisonstatus")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","TPS")
|
||||
for(var/obj/machinery/computer/prison_shuttle/PS in world)
|
||||
PS.allowedtocall = !(PS.allowedtocall)
|
||||
message_admins("\blue [key_name_admin(usr)] toggled status of prison shuttle to [PS.allowedtocall].", 1)
|
||||
if("prisonwarp")
|
||||
if(!ticker)
|
||||
alert("The game hasn't started yet!", null, null, null, null, null)
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
phaseanim.master = user
|
||||
user.ExtinguishMob()
|
||||
if(user.buckled)
|
||||
user.buckled.unbuckle()
|
||||
user.buckled.unbuckle_mob()
|
||||
user.loc = holder
|
||||
flick("chronophase", phaseanim)
|
||||
spawn(7)
|
||||
|
||||
@@ -452,7 +452,7 @@
|
||||
result += temp
|
||||
scanner.occupant.dna.uni_identity = setblock(ui, ui_block, result,3)
|
||||
updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity)
|
||||
scanner.occupant.radiation += (radstrength+radduration)
|
||||
scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE)
|
||||
if("ui-f")
|
||||
if (prob(20+radstrength))
|
||||
randmutb(scanner.occupant)
|
||||
@@ -460,7 +460,7 @@
|
||||
else
|
||||
randmuti(scanner.occupant)
|
||||
updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity)
|
||||
scanner.occupant.radiation += ((radstrength*2)+radduration)
|
||||
scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE)
|
||||
|
||||
if("se")
|
||||
var/se = scanner.occupant.dna.struc_enzymes
|
||||
@@ -482,7 +482,7 @@
|
||||
|
||||
scanner.occupant.dna.struc_enzymes = setblock(se, se_block, result,3)
|
||||
domutcheck(scanner.occupant,scanner)
|
||||
scanner.occupant.radiation += (radstrength+radduration)
|
||||
scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE)
|
||||
if("se-f")
|
||||
if (prob(80-radduration))
|
||||
randmutb(scanner.occupant)
|
||||
@@ -490,7 +490,7 @@
|
||||
else
|
||||
randmuti(scanner.occupant)
|
||||
updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity)
|
||||
scanner.occupant.radiation += ((radstrength*2)+radduration)
|
||||
scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE)
|
||||
|
||||
if(null)
|
||||
if (prob(95))
|
||||
@@ -503,7 +503,7 @@
|
||||
randmutg(scanner.occupant)
|
||||
else
|
||||
randmuti(scanner.occupant)
|
||||
scanner.occupant.radiation += ((radstrength*3)+radduration*3)
|
||||
scanner.occupant.apply_effect((radstrength*3)+radduration*3, IRRADIATE)
|
||||
|
||||
|
||||
scanner.locked = lock_state
|
||||
@@ -587,7 +587,7 @@
|
||||
randmutg(scanner.occupant)
|
||||
else
|
||||
randmuti(scanner.occupant)
|
||||
scanner.occupant.radiation += ((radstrength*3)+radduration*3)
|
||||
scanner.occupant.apply_effect((radstrength*3)+radduration*3, IRRADIATE)
|
||||
scanner.locked = lock_state
|
||||
temp_html = null
|
||||
dopage(src,"screen=radsetmenu")
|
||||
@@ -716,7 +716,7 @@
|
||||
tstructure2 = setblock(scanner.occupant.dna.uni_identity, ui_block, newblock,3)
|
||||
scanner.occupant.dna.uni_identity = tstructure2
|
||||
updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity)
|
||||
scanner.occupant.radiation += (radstrength+radduration)
|
||||
scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE)
|
||||
else
|
||||
if (prob(20+radstrength))
|
||||
randmutb(scanner.occupant)
|
||||
@@ -724,7 +724,7 @@
|
||||
else
|
||||
randmuti(scanner.occupant)
|
||||
updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity)
|
||||
scanner.occupant.radiation += ((radstrength*2)+radduration)
|
||||
scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE)
|
||||
scanner.locked = lock_state
|
||||
dopage(src,"screen=unimenu")
|
||||
|
||||
@@ -810,7 +810,7 @@
|
||||
tstructure2 = setblock(scanner.occupant.dna.struc_enzymes, se_block, newblock,3)
|
||||
scanner.occupant.dna.struc_enzymes = tstructure2
|
||||
domutcheck(scanner.occupant,scanner)
|
||||
scanner.occupant.radiation += (radstrength+radduration)
|
||||
scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE)
|
||||
se_block = oldblock
|
||||
else
|
||||
//
|
||||
@@ -822,7 +822,7 @@
|
||||
tstructure2 = setblock(scanner.occupant.dna.struc_enzymes, se_block, newblock,3)
|
||||
scanner.occupant.dna.struc_enzymes = tstructure2
|
||||
domutcheck(scanner.occupant,scanner)
|
||||
scanner.occupant.radiation += (radstrength+radduration)
|
||||
scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE)
|
||||
else
|
||||
if (prob(80-radduration))
|
||||
randmutb(scanner.occupant)
|
||||
@@ -830,7 +830,7 @@
|
||||
else
|
||||
randmuti(scanner.occupant)
|
||||
updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity)
|
||||
scanner.occupant.radiation += ((radstrength*2)+radduration)
|
||||
scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE)
|
||||
scanner.locked = lock_state
|
||||
///
|
||||
dopage(src,"screen=strucmenu")
|
||||
@@ -975,7 +975,7 @@
|
||||
scanner.occupant.dna.struc_enzymes = buffer1
|
||||
domutcheck(scanner.occupant,scanner)
|
||||
temp_html = "Transfered."
|
||||
scanner.occupant.radiation += rand(20,50)
|
||||
scanner.occupant.apply_effect(rand(20,50), IRRADIATE)
|
||||
|
||||
if (href_list["b2transfer"])
|
||||
if (!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna)
|
||||
@@ -990,7 +990,7 @@
|
||||
scanner.occupant.dna.struc_enzymes = buffer2
|
||||
domutcheck(scanner.occupant,scanner)
|
||||
temp_html = "Transfered."
|
||||
scanner.occupant.radiation += rand(20,50)
|
||||
scanner.occupant.apply_effect(rand(20,50), IRRADIATE)
|
||||
|
||||
if (href_list["b3transfer"])
|
||||
if (!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna)
|
||||
@@ -1005,7 +1005,7 @@
|
||||
scanner.occupant.dna.struc_enzymes = buffer3
|
||||
domutcheck(scanner.occupant,scanner)
|
||||
temp_html = "Transfered."
|
||||
scanner.occupant.radiation += rand(20,50)
|
||||
scanner.occupant.apply_effect(rand(20,50), IRRADIATE)
|
||||
|
||||
if (href_list["b1injector"])
|
||||
if (injectorready)
|
||||
@@ -1271,4 +1271,4 @@
|
||||
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
//Misc
|
||||
#define DEAD_PLANT_COLOUR "#C2A180"
|
||||
|
||||
// Definitions for genes (trait groupings)
|
||||
#define GENE_BIOCHEMISTRY "biochemistry"
|
||||
#define GENE_HARDINESS "hardiness"
|
||||
#define GENE_ENVIRONMENT "environment"
|
||||
#define GENE_METABOLISM "metabolism"
|
||||
#define GENE_STRUCTURE "appearance"
|
||||
#define GENE_DIET "diet"
|
||||
#define GENE_PIGMENT "pigment"
|
||||
#define GENE_OUTPUT "output"
|
||||
#define GENE_ATMOSPHERE "atmosphere"
|
||||
#define GENE_VIGOUR "vigour"
|
||||
#define GENE_FRUIT "fruit"
|
||||
#define GENE_SPECIAL "special"
|
||||
|
||||
#define ALL_GENES list(GENE_BIOCHEMISTRY,GENE_HARDINESS,GENE_ENVIRONMENT,GENE_METABOLISM,GENE_STRUCTURE,GENE_DIET,GENE_PIGMENT,GENE_OUTPUT,GENE_ATMOSPHERE,GENE_VIGOUR,GENE_FRUIT,GENE_SPECIAL)
|
||||
|
||||
//Definitions for traits (individual descriptors)
|
||||
#define TRAIT_CHEMS 1
|
||||
#define TRAIT_EXUDE_GASSES 2
|
||||
#define TRAIT_ALTER_TEMP 3
|
||||
#define TRAIT_POTENCY 4
|
||||
#define TRAIT_HARVEST_REPEAT 5
|
||||
#define TRAIT_PRODUCES_POWER 6
|
||||
#define TRAIT_JUICY 7
|
||||
#define TRAIT_PRODUCT_ICON 8
|
||||
#define TRAIT_PLANT_ICON 0
|
||||
#define TRAIT_CONSUME_GASSES 10
|
||||
#define TRAIT_REQUIRES_NUTRIENTS 11
|
||||
#define TRAIT_NUTRIENT_CONSUMPTION 12
|
||||
#define TRAIT_REQUIRES_WATER 13
|
||||
#define TRAIT_WATER_CONSUMPTION 14
|
||||
#define TRAIT_CARNIVOROUS 15
|
||||
#define TRAIT_PARASITE 16
|
||||
#define TRAIT_STINGS 17
|
||||
#define TRAIT_IDEAL_HEAT 18
|
||||
#define TRAIT_HEAT_TOLERANCE 19
|
||||
#define TRAIT_IDEAL_LIGHT 20
|
||||
#define TRAIT_LIGHT_TOLERANCE 21
|
||||
#define TRAIT_LOWKPA_TOLERANCE 22
|
||||
#define TRAIT_HIGHKPA_TOLERANCE 23
|
||||
#define TRAIT_EXPLOSIVE 24
|
||||
#define TRAIT_TOXINS_TOLERANCE 25
|
||||
#define TRAIT_PEST_TOLERANCE 26
|
||||
#define TRAIT_WEED_TOLERANCE 27
|
||||
#define TRAIT_ENDURANCE 28
|
||||
#define TRAIT_YIELD 29
|
||||
#define TRAIT_SPREAD 30
|
||||
#define TRAIT_MATURATION 31
|
||||
#define TRAIT_PRODUCTION 32
|
||||
#define TRAIT_TELEPORTING 33
|
||||
#define TRAIT_PLANT_COLOUR 34
|
||||
#define TRAIT_PRODUCT_COLOUR 35
|
||||
#define TRAIT_BIOLUM 36
|
||||
#define TRAIT_BIOLUM_COLOUR 37
|
||||
#define TRAIT_IMMUTABLE 38
|
||||
@@ -47,6 +47,7 @@
|
||||
set_trait(TRAIT_PLANT_ICON, 0) // Icon to use for the plant growing in the tray.
|
||||
set_trait(TRAIT_PRODUCT_COLOUR, 0) // Colour to apply to product icon.
|
||||
set_trait(TRAIT_BIOLUM_COLOUR, 0) // The colour of the plant's radiance.
|
||||
set_trait(TRAIT_RARITY, 0) // How rare the plant is. Used for giving points to cargo when shipping off to Centcom.
|
||||
set_trait(TRAIT_POTENCY, 1) // General purpose plant strength value.
|
||||
set_trait(TRAIT_REQUIRES_NUTRIENTS, 1) // The plant can starve.
|
||||
set_trait(TRAIT_REQUIRES_WATER, 1) // The plant can become dehydrated.
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
set_trait(TRAIT_MATURATION,4)
|
||||
set_trait(TRAIT_PRODUCTION,4)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00EDC6")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
/datum/seed/chili/ghost
|
||||
name = "ghostchili"
|
||||
@@ -49,6 +50,7 @@
|
||||
set_trait(TRAIT_PRODUCTION,10)
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00EDC6")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
// Berry plants/variants.
|
||||
/datum/seed/berry
|
||||
@@ -90,6 +92,7 @@
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_POTENCY,10)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"c9fa16")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
/datum/seed/berry/poison
|
||||
name = "poisonberries"
|
||||
@@ -103,6 +106,7 @@
|
||||
/datum/seed/berry/poison/New()
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#6DC961")
|
||||
set_trait(TRAIT_RARITY,10) // Mildly poisonous berries are common in reality
|
||||
|
||||
/datum/seed/berry/poison/death
|
||||
name = "deathberries"
|
||||
@@ -117,6 +121,7 @@
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_POTENCY,50)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#7A5454")
|
||||
set_trait(TRAIT_RARITY,30)
|
||||
|
||||
// Nettles/variants.
|
||||
/datum/seed/nettle
|
||||
@@ -155,6 +160,7 @@
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#8C5030")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#634941")
|
||||
set_trait(TRAIT_RARITY,10)
|
||||
|
||||
//Tomatoes/variants.
|
||||
/datum/seed/tomato
|
||||
@@ -192,6 +198,7 @@
|
||||
..()
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FF0000")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
/datum/seed/tomato/killer
|
||||
name = "killertomato"
|
||||
@@ -206,6 +213,7 @@
|
||||
..()
|
||||
set_trait(TRAIT_YIELD,2)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A86747")
|
||||
set_trait(TRAIT_RARITY,30)
|
||||
|
||||
/datum/seed/tomato/blue
|
||||
name = "bluetomato"
|
||||
@@ -219,6 +227,7 @@
|
||||
..()
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#4D86E8")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#070AAD")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
/datum/seed/tomato/blue/teleport
|
||||
name = "bluespacetomato"
|
||||
@@ -234,6 +243,7 @@
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#00E5FF")
|
||||
set_trait(TRAIT_BIOLUM,1)
|
||||
set_trait(TRAIT_BIOLUM_COLOUR,"#4DA4A8")
|
||||
set_trait(TRAIT_RARITY,50)
|
||||
|
||||
//Eggplants/varieties.
|
||||
/datum/seed/eggplant
|
||||
@@ -299,6 +309,7 @@
|
||||
set_trait(TRAIT_YIELD,3)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FFDD00")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#D6B44D")
|
||||
set_trait(TRAIT_RARITY,40) // Alchemy!
|
||||
|
||||
//Ambrosia/varieties.
|
||||
/datum/seed/ambrosia
|
||||
@@ -330,6 +341,10 @@
|
||||
kitchen_tag = "ambrosiadeus"
|
||||
preset_icon = "ambrosiadeus"
|
||||
|
||||
/datum/seed/ambrosia/deus/New()
|
||||
..()
|
||||
set_trait(TRAIT_RARITY,40)
|
||||
|
||||
//Tobacco/varieties
|
||||
/datum/seed/tobacco
|
||||
name = "tobacco"
|
||||
@@ -366,6 +381,7 @@
|
||||
set_trait(TRAIT_POTENCY, 5)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A3F0AD")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#2A9C61")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
//Tea/varieties
|
||||
/datum/seed/teaaspera
|
||||
@@ -405,6 +421,7 @@
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A3F0AD")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#2A9C61")
|
||||
set_trait(TRAIT_PLANT_ICON,"tree6")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
//Coffee/varieties
|
||||
/datum/seed/coffeea
|
||||
@@ -445,6 +462,7 @@
|
||||
set_trait(TRAIT_PRODUCT_ICON,"coffee")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#A22043")
|
||||
set_trait(TRAIT_PLANT_ICON,"bush8")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
//Mushrooms/varieties.
|
||||
/datum/seed/mushroom
|
||||
@@ -519,6 +537,7 @@
|
||||
set_trait(TRAIT_YIELD,1)
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#FAC0F2")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#C4B1C2")
|
||||
set_trait(TRAIT_RARITY,30)
|
||||
|
||||
/datum/seed/mushroom/hallucinogenic
|
||||
name = "reishi"
|
||||
@@ -594,6 +613,7 @@
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#EDE8EA")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#E6D8DD")
|
||||
set_trait(TRAIT_PLANT_ICON,"mushroom5")
|
||||
set_trait(TRAIT_RARITY,30)
|
||||
|
||||
/datum/seed/mushroom/towercap
|
||||
name = "towercap"
|
||||
@@ -631,6 +651,7 @@
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#DDFAB6")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#EFFF8A")
|
||||
set_trait(TRAIT_PLANT_ICON,"mushroom7")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
/datum/seed/mushroom/plastic
|
||||
name = "plastic"
|
||||
@@ -716,6 +737,7 @@
|
||||
set_trait(TRAIT_PRODUCT_ICON,"flower2")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#B5ABDD")
|
||||
set_trait(TRAIT_PLANT_ICON,"flower2")
|
||||
set_trait(TRAIT_RARITY,10)
|
||||
|
||||
/datum/seed/flower/novaflower
|
||||
name = "novaflowers"
|
||||
@@ -805,6 +827,7 @@
|
||||
set_trait(TRAIT_PRODUCT_ICON,"bean")
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#EBE7C0")
|
||||
set_trait(TRAIT_PLANT_ICON,"stalk")
|
||||
set_trait(TRAIT_RARITY,20)
|
||||
|
||||
//Everything else
|
||||
/datum/seed/peanuts
|
||||
@@ -1178,6 +1201,7 @@
|
||||
set_trait(TRAIT_PRODUCT_COLOUR,"#96D278")
|
||||
set_trait(TRAIT_PLANT_COLOUR,"#6F7A63")
|
||||
set_trait(TRAIT_PLANT_ICON,"vine2")
|
||||
set_trait(TRAIT_RARITY,30)
|
||||
|
||||
/datum/seed/diona
|
||||
name = "diona"
|
||||
|
||||
@@ -67,18 +67,17 @@
|
||||
var/last_tick = 0
|
||||
var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/plant
|
||||
|
||||
var/mob/living/buckled_mob = null
|
||||
var/movable = 0
|
||||
|
||||
/obj/effect/plant/Destroy()
|
||||
if(buckled_mob)
|
||||
unbuckle()
|
||||
unbuckle_mob()
|
||||
if(plant_controller)
|
||||
plant_controller.remove_plant(src)
|
||||
for(var/obj/effect/plant/neighbor in range(1,src))
|
||||
plant_controller.add_plant(neighbor)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/effect/plant/single
|
||||
spread_chance = 0
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/obj/effect/plant/attack_hand(mob/user as mob)
|
||||
// Todo, cause damage.
|
||||
manual_unbuckle(user)
|
||||
user_unbuckle_mob(user, user)
|
||||
|
||||
/obj/effect/plant/proc/trodden_on(var/mob/living/victim)
|
||||
if(!is_mature())
|
||||
@@ -26,37 +26,6 @@
|
||||
seed.do_thorns(victim,src)
|
||||
seed.do_sting(victim,src,pick("r_foot","l_foot","r_leg","l_leg"))
|
||||
|
||||
/obj/effect/plant/proc/unbuckle()
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src)
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
buckled_mob = null
|
||||
return
|
||||
|
||||
/obj/effect/plant/proc/manual_unbuckle(mob/user as mob)
|
||||
if(buckled_mob)
|
||||
if(prob(seed ? min(max(0,100 - seed.get_trait(TRAIT_POTENCY)/2),100) : 50))
|
||||
if(buckled_mob.buckled == src)
|
||||
if(buckled_mob != user)
|
||||
buckled_mob.visible_message(\
|
||||
"<span class='notice'>[user.name] frees [buckled_mob.name] from \the [src].</span>",\
|
||||
"<span class='notice'>[user.name] frees you from \the [src].</span>",\
|
||||
"<span class='warning'>You hear shredding and ripping.</span>")
|
||||
else
|
||||
buckled_mob.visible_message(\
|
||||
"<span class='notice'>[buckled_mob.name] struggles free of \the [src].</span>",\
|
||||
"<span class='notice'>You untangle \the [src] from around yourself.</span>",\
|
||||
"<span class='warning'>You hear shredding and ripping.</span>")
|
||||
unbuckle()
|
||||
else
|
||||
var/text = pick("rip","tear","pull")
|
||||
user.visible_message(\
|
||||
"<span class='notice'>[user.name] [text]s at \the [src].</span>",\
|
||||
"<span class='notice'>You [text] at \the [src].</span>",\
|
||||
"<span class='warning'>You hear shredding and ripping.</span>")
|
||||
return
|
||||
|
||||
/obj/effect/plant/proc/entangle(var/mob/living/victim)
|
||||
|
||||
@@ -79,7 +48,6 @@
|
||||
|
||||
//entangling people
|
||||
if(victim.loc == src.loc)
|
||||
victim.buckled = src
|
||||
victim.update_canmove()
|
||||
buckled_mob = victim
|
||||
victim << "<span class='danger'>Tendrils [pick("wind", "tangle", "tighten")] around you!</span>"
|
||||
can_buckle = 1
|
||||
buckle_mob(victim)
|
||||
@@ -113,6 +113,7 @@
|
||||
dat += "<tr><td><b>Maturation time</b></td><td>[grown_seed.get_trait(TRAIT_MATURATION)]</td></tr>"
|
||||
dat += "<tr><td><b>Production time</b></td><td>[grown_seed.get_trait(TRAIT_PRODUCTION)]</td></tr>"
|
||||
dat += "<tr><td><b>Potency</b></td><td>[grown_seed.get_trait(TRAIT_POTENCY)]</td></tr>"
|
||||
dat += "<tr><td><b>Species Discovery Value</b></td><td>[grown_seed.get_trait(TRAIT_RARITY)]</td></tr>"
|
||||
|
||||
//--FalseIncarnate
|
||||
//Tray-specific stats like Age and Mutation Modifier, not shown if target was not a hydroponics tray or soil
|
||||
|
||||
@@ -164,10 +164,7 @@
|
||||
// Radiation
|
||||
for(var/mob/living/carbon/M in view(src,3))
|
||||
var/rads = RADS_PER_TICK * sqrt( 1 / (get_dist(M, src) + 1) )
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
M.apply_effect((rads*3),IRRADIATE)
|
||||
else
|
||||
M.radiation += rads
|
||||
M.apply_effect((rads*3),IRRADIATE)
|
||||
|
||||
// Heat output
|
||||
var/turf/simulated/L = loc
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
src.ExtinguishMob()
|
||||
if(src.buckled)
|
||||
src.buckled.unbuckle()
|
||||
src.buckled.unbuckle_mob()
|
||||
if(src.pulling && src.bloodcrawl == BLOODCRAWL_EAT)
|
||||
if(istype(src.pulling, /mob/living/))
|
||||
var/mob/living/victim = src.pulling
|
||||
|
||||
@@ -179,9 +179,6 @@
|
||||
/mob/living/carbon/alien/IsAdvancedToolUser()
|
||||
return has_fine_manipulation
|
||||
|
||||
/mob/living/carbon/alien/Process_Spaceslipping()
|
||||
return 0 // Don't slip in space.
|
||||
|
||||
/mob/living/carbon/alien/Stat()
|
||||
|
||||
statpanel("Status")
|
||||
|
||||
@@ -481,19 +481,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
item.layer = initial(item.layer)
|
||||
src.visible_message("\red [src] has thrown [item].")
|
||||
|
||||
if(!src.lastarea)
|
||||
src.lastarea = get_area(src.loc)
|
||||
if((istype(src.loc, /turf/space)) || (src.lastarea.has_gravity == 0))
|
||||
src.inertia_dir = get_dir(target, src)
|
||||
step(src, inertia_dir)
|
||||
|
||||
|
||||
/*
|
||||
if(istype(src.loc, /turf/space) || (src.flags & NOGRAV)) //they're in space, move em one space in the opposite direction
|
||||
src.inertia_dir = get_dir(target, src)
|
||||
step(src, inertia_dir)
|
||||
*/
|
||||
|
||||
newtonian_move(get_dir(target, src))
|
||||
|
||||
item.throw_at(target, item.throw_range, item.throw_speed, src)
|
||||
/*
|
||||
@@ -529,6 +517,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
update_inv_wear_mask(0)
|
||||
else if(I == handcuffed)
|
||||
handcuffed = null
|
||||
if(buckled && buckled.buckle_requires_restraints)
|
||||
buckled.unbuckle_mob()
|
||||
update_inv_handcuffed(1)
|
||||
else if(I == legcuffed)
|
||||
legcuffed = null
|
||||
@@ -677,6 +667,9 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
/mob/living/carbon/proc/canBeHandcuffed()
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/fall(forced)
|
||||
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
|
||||
|
||||
/mob/living/carbon/is_muzzled()
|
||||
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
|
||||
@@ -686,7 +679,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
return -6
|
||||
else
|
||||
return initial(pixel_y)
|
||||
|
||||
|
||||
/mob/living/carbon/get_all_slots()
|
||||
return list(l_hand,
|
||||
r_hand,
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
..(new_loc, "Stok")
|
||||
|
||||
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
|
||||
if ((!( yes ) || now_pushing))
|
||||
if ((!( yes ) || now_pushing || buckled))
|
||||
return
|
||||
now_pushing = 1
|
||||
if (ismob(AM))
|
||||
@@ -285,7 +285,7 @@
|
||||
while(limbs_affected != 0 && valid_limbs.len > 0)
|
||||
processing_dismember = pick(valid_limbs)
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,1,2),0,1)
|
||||
processing_dismember.droplimb(1,DROPLIMB_EDGE,0,1)
|
||||
valid_limbs -= processing_dismember
|
||||
limbs_affected -= 1
|
||||
else valid_limbs -= processing_dismember
|
||||
@@ -316,7 +316,7 @@
|
||||
while(limbs_affected != 0 && valid_limbs.len > 0)
|
||||
processing_dismember = pick(valid_limbs)
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
processing_dismember.droplimb(1,pick(0,2),0,1)
|
||||
processing_dismember.droplimb(1,DROPLIMB_EDGE,0,1)
|
||||
valid_limbs -= processing_dismember
|
||||
limbs_affected -= 1
|
||||
else valid_limbs -= processing_dismember
|
||||
@@ -341,7 +341,7 @@
|
||||
while(limbs_affected != 0 && valid_limbs.len > 0)
|
||||
processing_dismember = pick(valid_limbs)
|
||||
if(processing_dismember.limb_name != "chest" && processing_dismember.limb_name != "head" && processing_dismember.limb_name != "groin")
|
||||
processing_dismember.droplimb(1,1,0,1)
|
||||
processing_dismember.droplimb(1,DROPLIMB_EDGE,0,1)
|
||||
valid_limbs -= processing_dismember
|
||||
limbs_affected -= 1
|
||||
else valid_limbs -= processing_dismember
|
||||
@@ -1780,9 +1780,8 @@
|
||||
prot["head"] = max(1 - I.permeability_coefficient, prot["head"])
|
||||
var/protection = (prot["head"] + prot["arms"] + prot["feet"] + prot["legs"] + prot["groin"] + prot["chest"] + prot["hands"])/7
|
||||
return protection
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_full_print()
|
||||
if(!dna || !dna.uni_identity)
|
||||
return
|
||||
return md5(dna.uni_identity)
|
||||
|
||||
@@ -396,23 +396,4 @@ This function restores all organs.
|
||||
// Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life().
|
||||
updatehealth()
|
||||
hud_updateflag |= 1 << HEALTH_HUD
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
// incredibly important stuff follows
|
||||
/mob/living/carbon/human/fall(var/forced)
|
||||
..()
|
||||
if(forced)
|
||||
playsound(loc, "bodyfall", 50, 1, -1)
|
||||
/* if(head)
|
||||
var/multiplier = 1
|
||||
if(stat || (status_flags & FAKEDEATH))
|
||||
multiplier = 2
|
||||
var/obj/item/clothing/head/H = head
|
||||
if(!istype(H) || prob(H.loose * multiplier))
|
||||
unEquip(H)
|
||||
if(prob(60))
|
||||
step_rand(H)
|
||||
if(!stat)
|
||||
src << "<span class='warning'>Your [H] fell off!</span>" */
|
||||
return 1
|
||||
@@ -193,7 +193,7 @@ emp_act
|
||||
var/turf/picked = pick(turfs)
|
||||
if(!isturf(picked)) return
|
||||
if(buckled)
|
||||
buckled.unbuckle()
|
||||
buckled.unbuckle_mob()
|
||||
src.loc = picked
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
if(species.slowdown)
|
||||
tally = species.slowdown
|
||||
|
||||
if (istype(loc, /turf/space)) return -1 // It's hard to be slowed down in space by... anything
|
||||
if(!has_gravity(src))
|
||||
return -1 // It's hard to be slowed down in space by... anything
|
||||
|
||||
if(flying) return -1
|
||||
|
||||
@@ -62,44 +63,18 @@
|
||||
|
||||
return (tally+config.human_delay)
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0)
|
||||
//Can we act
|
||||
if(restrained()) return 0
|
||||
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0)
|
||||
|
||||
//Are we flying?
|
||||
if(flying)
|
||||
inertia_dir = 0
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
//Do we have a working jetpack
|
||||
if(istype(back, /obj/item/weapon/tank/jetpack))
|
||||
if(istype(back, /obj/item/weapon/tank/jetpack) && isturf(loc)) //Second check is so you can't use a jetpack in a mech
|
||||
var/obj/item/weapon/tank/jetpack/J = back
|
||||
if(((!check_drift) || (check_drift && J.stabilization_on)) && (!lying) && (J.allow_thrust(0.01, src)))
|
||||
inertia_dir = 0
|
||||
if((movement_dir || J.stabilization_on) && J.allow_thrust(0.01, src))
|
||||
return 1
|
||||
//If no working jetpack or magboots then use the other checks
|
||||
if(..()) return 1
|
||||
return 0
|
||||
|
||||
|
||||
/mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5)
|
||||
//If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such.
|
||||
if(stat)
|
||||
prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense.
|
||||
|
||||
//Do we have magboots or such on if so no slip
|
||||
if(istype(shoes, /obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP))
|
||||
prob_slip = 0
|
||||
|
||||
//Check hands and mod slip
|
||||
if(!l_hand) prob_slip -= 2
|
||||
else if(l_hand.w_class <= 2) prob_slip -= 1
|
||||
if (!r_hand) prob_slip -= 2
|
||||
else if(r_hand.w_class <= 2) prob_slip -= 1
|
||||
|
||||
prob_slip = round(prob_slip)
|
||||
return(prob_slip)
|
||||
|
||||
/mob/living/carbon/human/mob_has_gravity()
|
||||
. = ..()
|
||||
if(!.)
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
step(AM, t)
|
||||
now_pushing = null
|
||||
|
||||
/mob/living/carbon/slime/Process_Spacemove()
|
||||
/mob/living/carbon/slime/Process_Spacemove(var/movement_dir = 0)
|
||||
return 2
|
||||
|
||||
/mob/living/carbon/slime/Stat()
|
||||
|
||||
@@ -399,9 +399,12 @@
|
||||
|
||||
return
|
||||
|
||||
/mob/living/Move(a, b, flag)
|
||||
if (buckled)
|
||||
return
|
||||
/mob/living/Move(atom/newloc, direct)
|
||||
if (buckled && buckled.loc != newloc)
|
||||
if (!buckled.anchored)
|
||||
return buckled.Move(newloc, direct)
|
||||
else
|
||||
return 0
|
||||
|
||||
if (restrained())
|
||||
stop_pulling()
|
||||
@@ -412,7 +415,7 @@
|
||||
for(var/mob/living/M in range(src, 1))
|
||||
if ((M.pulling == src && M.stat == 0 && !( M.restrained() )))
|
||||
t7 = null
|
||||
if ((t7 && (pulling && ((get_dist(src, pulling) <= 1 || pulling.loc == loc) && (client && client.moving)))))
|
||||
if(t7 && pulling && (get_dist(src, pulling) <= 1 || pulling.loc == loc))
|
||||
var/turf/T = loc
|
||||
. = ..()
|
||||
|
||||
@@ -460,17 +463,12 @@
|
||||
var/turf/location = M.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_blood()
|
||||
|
||||
|
||||
step(pulling, get_dir(pulling.loc, T))
|
||||
M.start_pulling(t)
|
||||
pulling.Move(T, get_dir(pulling, T))
|
||||
if(M)
|
||||
M.start_pulling(t)
|
||||
else
|
||||
if (pulling)
|
||||
if (istype(pulling, /obj/structure/window/full))
|
||||
for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T)))
|
||||
stop_pulling()
|
||||
if (pulling)
|
||||
step(pulling, get_dir(pulling.loc, T))
|
||||
pulling.Move(T, get_dir(pulling, T))
|
||||
else
|
||||
stop_pulling()
|
||||
. = ..()
|
||||
@@ -639,10 +637,10 @@
|
||||
for(var/mob/O in viewers(C))
|
||||
O.show_message("\red <B>[usr] manages to unbuckle themself!</B>", 1)
|
||||
C << "\blue You successfully unbuckle yourself."
|
||||
C.buckled.manual_unbuckle(C)
|
||||
C.buckled.user_unbuckle_mob(C,C)
|
||||
|
||||
else
|
||||
L.buckled.manual_unbuckle(L)
|
||||
L.buckled.user_unbuckle_mob(L,L)
|
||||
|
||||
/* resist_closet() allows a mob to break out of a welded/locked closet
|
||||
*/////
|
||||
@@ -779,6 +777,8 @@
|
||||
CM.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
|
||||
qdel(CM.handcuffed)
|
||||
CM.handcuffed = null
|
||||
if(CM.buckled && CM.buckled.buckle_requires_restraints)
|
||||
CM.buckled.unbuckle_mob()
|
||||
CM.update_inv_handcuffed()
|
||||
return
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
/mob/living/proc/run_armor_check(var/def_zone = null, var/attack_flag = "melee", var/absorb_text = null, var/soften_text = null, armour_penetration, penetrated_text)
|
||||
var/armor = getarmor(def_zone, attack_flag)
|
||||
|
||||
|
||||
//the if "armor" check is because this is used for everything on /living, including humans
|
||||
if(armor && armor < 100 && armour_penetration) // Armor with 100+ protection can not be penetrated for admin items
|
||||
armor = max(0, armor - armour_penetration)
|
||||
@@ -368,3 +368,7 @@
|
||||
else*///This is an example of how you can make special types of grabs simply based on direction.
|
||||
if(!supress_message)
|
||||
visible_message("<span class='warning'>[user] has grabbed [src] passively!</span>")
|
||||
|
||||
/mob/living/incapacitated()
|
||||
if(stat || paralysis || stunned || weakened || restrained())
|
||||
return 1
|
||||
|
||||
@@ -432,7 +432,22 @@
|
||||
|
||||
//Overriding this will stop a number of headaches down the track.
|
||||
/mob/living/silicon/pai/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(W.force)
|
||||
if(istype(W, /obj/item/stack/nanopaste))
|
||||
var/obj/item/stack/nanopaste/N = W
|
||||
if (stat == DEAD)
|
||||
user << "<span class='danger'>\The [src] is beyond help, at this point.</span>"
|
||||
else if (getBruteLoss() || getFireLoss())
|
||||
adjustBruteLoss(-15)
|
||||
adjustFireLoss(-15)
|
||||
updatehealth()
|
||||
N.use(1)
|
||||
user.visible_message("<span class='notice'>[user.name] applied some [W] at [src]'s damaged areas.</span>",\
|
||||
"<span class='notice'>You apply some [W] at [src.name]'s damaged areas.</span>")
|
||||
else
|
||||
user << "<span class='notice'>All [src.name]'s systems are nominal.</span>"
|
||||
|
||||
return
|
||||
else if(W.force)
|
||||
visible_message("<span class='danger'>[user.name] attacks [src] with [W]!</span>")
|
||||
src.adjustBruteLoss(W.force)
|
||||
src.updatehealth()
|
||||
|
||||
@@ -76,15 +76,15 @@
|
||||
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/drone_camera(src)
|
||||
additional_law_channels["Drone"] = ":d"
|
||||
|
||||
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
|
||||
|
||||
//Redefining some robot procs...
|
||||
/mob/living/silicon/robot/drone/SetName(pickedName as text)
|
||||
// Would prefer to call the grandparent proc but this isn't possible, so..
|
||||
real_name = pickedName
|
||||
name = real_name
|
||||
|
||||
name = real_name
|
||||
|
||||
//Redefining some robot procs...
|
||||
/mob/living/silicon/robot/drone/updatename()
|
||||
real_name = "maintenance drone ([rand(100,999)])"
|
||||
@@ -127,13 +127,13 @@
|
||||
if(!allowed(usr))
|
||||
user << "\red Access denied."
|
||||
return
|
||||
|
||||
|
||||
var/delta = (world.time / 10) - last_reboot
|
||||
if(reboot_cooldown > delta)
|
||||
var/cooldown_time = round(reboot_cooldown - ((world.time / 10) - last_reboot), 1)
|
||||
usr << "\red The reboot system is currently offline. Please wait another [cooldown_time] seconds."
|
||||
return
|
||||
|
||||
|
||||
user.visible_message("\red \the [user] swipes \his ID card through \the [src], attempting to reboot it.", "\red You swipe your ID card through \the [src], attempting to reboot it.")
|
||||
last_reboot = world.time / 10
|
||||
var/drones = 0
|
||||
@@ -225,10 +225,6 @@
|
||||
|
||||
..(gibbed)
|
||||
|
||||
//DRONE MOVEMENT.
|
||||
/mob/living/silicon/robot/drone/Process_Spaceslipping(var/prob_slip)
|
||||
//TODO: Consider making a magboot item for drones to equip. ~Z
|
||||
return 0
|
||||
|
||||
//CONSOLE PROCS
|
||||
/mob/living/silicon/robot/drone/proc/law_resync()
|
||||
@@ -338,4 +334,4 @@
|
||||
src.verbs |= silicon_subsystems
|
||||
|
||||
/mob/living/silicon/robot/drone/remove_robot_verbs()
|
||||
src.verbs -= silicon_subsystems
|
||||
src.verbs -= silicon_subsystems
|
||||
@@ -1,9 +1,4 @@
|
||||
/mob/living/silicon/robot/Process_Spaceslipping(var/prob_slip)
|
||||
if(module && (istype(module,/obj/item/weapon/robot_module/drone)))
|
||||
return 0
|
||||
..(prob_slip)
|
||||
|
||||
/mob/living/silicon/robot/Process_Spacemove()
|
||||
/mob/living/silicon/robot/Process_Spacemove(var/movement_dir = 0)
|
||||
if(module)
|
||||
for(var/obj/item/weapon/tank/jetpack/J in module.modules)
|
||||
if(J && istype(J, /obj/item/weapon/tank/jetpack))
|
||||
@@ -24,7 +19,7 @@
|
||||
|
||||
/mob/living/silicon/robot/Move()
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/silicon/robot/mob_negates_gravity()
|
||||
return magpulse
|
||||
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
attack_sound = 'sound/weapons/tap.ogg'
|
||||
construct_spells = list(/obj/effect/proc_holder/spell/targeted/smoke/disable)
|
||||
|
||||
/mob/living/simple_animal/construct/harvester/Process_Spacemove(var/check_drift = 0)
|
||||
/mob/living/simple_animal/construct/harvester/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -30,8 +30,10 @@
|
||||
if(isturf(src.loc) && !resting && !buckled) //This is so it only moves if it's not inside a closet, gentics machine, etc.
|
||||
turns_since_move++
|
||||
if(turns_since_move >= turns_per_move)
|
||||
Move(get_step(src,pick(4,8)))
|
||||
turns_since_move = 0
|
||||
var/east_vs_west = pick(4, 8)
|
||||
if(Process_Spacemove(east_vs_west))
|
||||
Move(get_step(src, east_vs_west), east_vs_west)
|
||||
turns_since_move = 0
|
||||
regenerate_icons()
|
||||
|
||||
//COFFEE! SQUEEEEEEEEE!
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
target = M
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/Process_Spacemove(var/check_drift = 0)
|
||||
/mob/living/simple_animal/hostile/bear/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1 //No drifting in space for space bears!
|
||||
|
||||
/mob/living/simple_animal/hostile/bear/FindTarget()
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
faction = list("carp")
|
||||
flying = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/check_drift = 0)
|
||||
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1 //No drifting in space for space carp! //original comments do not steal
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/FindTarget()
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
faction = list("faithless")
|
||||
|
||||
/mob/living/simple_animal/hostile/faithless/Process_Spacemove(var/check_drift = 0)
|
||||
/mob/living/simple_animal/hostile/faithless/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1
|
||||
|
||||
/mob/living/simple_animal/hostile/faithless/FindTarget()
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
|
||||
speed = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/check_drift = 0)
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/movement_dir = 0)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged
|
||||
@@ -132,7 +132,7 @@
|
||||
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
|
||||
speed = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0)
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/movement_dir = 0)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -130,8 +130,10 @@
|
||||
turns_since_move++
|
||||
if(turns_since_move >= turns_per_move)
|
||||
if(!(stop_automated_movement_when_pulled && pulledby)) //Soma animals don't move when pulled
|
||||
Move(get_step(src,pick(cardinal)))
|
||||
turns_since_move = 0
|
||||
var/anydir = pick(cardinal)
|
||||
if(Process_Spacemove(anydir))
|
||||
Move(get_step(src,anydir), anydir)
|
||||
turns_since_move = 0
|
||||
|
||||
//Speaking
|
||||
if(!client && speak_chance && (ckey == null))
|
||||
|
||||
+18
-62
@@ -135,6 +135,9 @@
|
||||
/mob/proc/restrained()
|
||||
return
|
||||
|
||||
/mob/proc/incapacitated()
|
||||
return
|
||||
|
||||
//This proc is called whenever someone clicks an inventory ui slot.
|
||||
/mob/proc/attack_ui(slot)
|
||||
var/obj/item/W = get_active_hand()
|
||||
@@ -989,76 +992,29 @@ var/list/slot_equipment_priority = list( \
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
/mob/proc/update_canmove()
|
||||
var/ko = weakened || paralysis || stat || (status_flags & FAKEDEATH)
|
||||
if(ko || resting || buckled)
|
||||
canmove = 0
|
||||
if(!lying)
|
||||
if(resting) //Presuming that you're resting on a bed, which would look goofy lying the wrong way
|
||||
lying = 90
|
||||
else
|
||||
lying = pick(90, 270) //180 looks like shit since BYOND inverts rather than turns in that case
|
||||
else if(stunned)
|
||||
drop_l_hand()
|
||||
var/buckle_lying = !(buckled && !buckled.buckle_lying)
|
||||
if(ko || resting || stunned)
|
||||
drop_r_hand()
|
||||
canmove = 0
|
||||
drop_l_hand()
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
var/is_movable
|
||||
if(buckled && istype(buckled))
|
||||
is_movable = buckled.movable
|
||||
|
||||
if(istype(buckled, /obj/vehicle))
|
||||
var/obj/vehicle/V = buckled
|
||||
if(stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH))
|
||||
lying = 90
|
||||
canmove = 0
|
||||
pixel_y = V.mob_offset_y - 5
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
pixel_y = V.mob_offset_y
|
||||
else if(buckled && (!buckled.movable))
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
if( istype(buckled,/obj/structure/stool/bed/chair) )
|
||||
lying = 0
|
||||
else
|
||||
lying = 90
|
||||
else if(buckled && is_movable)
|
||||
anchored = 0
|
||||
canmove = 1
|
||||
lying = 0
|
||||
else if( stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH))
|
||||
lying = 90
|
||||
canmove = 0
|
||||
else if( stunned )
|
||||
drop_l_hand()
|
||||
drop_r_hand()
|
||||
canmove = 0
|
||||
if(buckled)
|
||||
lying = 90 * buckle_lying
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
|
||||
if(lying)
|
||||
density = 0
|
||||
drop_l_hand()
|
||||
drop_r_hand()
|
||||
else
|
||||
density = 1
|
||||
|
||||
//Temporarily moved here from the various life() procs
|
||||
//I'm fixing stuff incrementally so this will likely find a better home.
|
||||
//It just makes sense for now. ~Carn
|
||||
|
||||
if(lying != lying_prev)
|
||||
if(lying && !lying_prev)
|
||||
if((ko || resting) && !lying)
|
||||
fall(ko)
|
||||
|
||||
if(update_icon) //forces a full overlay update
|
||||
update_icon = 0
|
||||
regenerate_icons()
|
||||
canmove = !(ko || resting || stunned || buckled)
|
||||
density = !lying
|
||||
if(lying)
|
||||
if(layer == initial(layer))
|
||||
layer = MOB_LAYER - 0.2
|
||||
else
|
||||
if(layer == MOB_LAYER - 0.2)
|
||||
layer = initial(layer)
|
||||
|
||||
update_transform()
|
||||
lying_prev = lying
|
||||
return canmove
|
||||
|
||||
/mob/proc/fall(var/forced)
|
||||
|
||||
@@ -142,8 +142,6 @@
|
||||
|
||||
var/emote_cd = 0 // Used to supress emote spamming. 1 if on CD, 2 if disabled by admin (manually set), else 0
|
||||
|
||||
var/inertia_dir = 0
|
||||
|
||||
var/music_lastplayed = "null"
|
||||
|
||||
var/job = null//Living
|
||||
|
||||
@@ -127,41 +127,6 @@
|
||||
return
|
||||
|
||||
|
||||
/atom/movable/Move(NewLoc, direct)
|
||||
if (direct & (direct - 1))
|
||||
if (direct & 1)
|
||||
if (direct & 4)
|
||||
if (step(src, NORTH))
|
||||
step(src, EAST)
|
||||
else
|
||||
if (step(src, EAST))
|
||||
step(src, NORTH)
|
||||
else
|
||||
if (direct & 8)
|
||||
if (step(src, NORTH))
|
||||
step(src, WEST)
|
||||
else
|
||||
if (step(src, WEST))
|
||||
step(src, NORTH)
|
||||
else
|
||||
if (direct & 2)
|
||||
if (direct & 4)
|
||||
if (step(src, SOUTH))
|
||||
step(src, EAST)
|
||||
else
|
||||
if (step(src, EAST))
|
||||
step(src, SOUTH)
|
||||
else
|
||||
if (direct & 8)
|
||||
if (step(src, SOUTH))
|
||||
step(src, WEST)
|
||||
else
|
||||
if (step(src, WEST))
|
||||
step(src, SOUTH)
|
||||
else
|
||||
. = ..()
|
||||
return
|
||||
|
||||
|
||||
/client/proc/Move_object(direct)
|
||||
if(mob && mob.control_object)
|
||||
@@ -225,13 +190,15 @@
|
||||
|
||||
if(Process_Grab()) return
|
||||
|
||||
if(mob.buckled) //if we're buckled to something, tell it we moved.
|
||||
return mob.buckled.relaymove(mob, direct)
|
||||
|
||||
if(mob.remote_control) //we're controlling something, our movement is relayed to it
|
||||
return mob.remote_control.relaymove(mob, direct)
|
||||
|
||||
if(isAI(mob))
|
||||
return AIMove(n,direct,mob)
|
||||
|
||||
return AIMove(n,direct,mob)
|
||||
|
||||
if(!mob.canmove)
|
||||
return
|
||||
|
||||
@@ -241,14 +208,13 @@
|
||||
if(!mob.lastarea)
|
||||
mob.lastarea = get_area(mob.loc)
|
||||
|
||||
if((istype(mob.loc, /turf/space)) || ((mob.lastarea.has_gravity == 0) && (!istype(mob.loc, /obj/spacepod)))) // spacepods shouldn't get affected by changes in gravity
|
||||
if(!mob.Process_Spacemove(0)) return 0
|
||||
|
||||
|
||||
if(isobj(mob.loc) || ismob(mob.loc))//Inside an object, tell it we moved
|
||||
var/atom/O = mob.loc
|
||||
return O.relaymove(mob, direct)
|
||||
|
||||
if(!mob.Process_Spacemove(direct))
|
||||
return 0
|
||||
|
||||
if(isturf(mob.loc))
|
||||
|
||||
if(mob.restrained())//Why being pulled while cuffed prevents you from moving
|
||||
@@ -280,24 +246,6 @@
|
||||
var/tickcomp = ((1/(world.tick_lag))*1.3)
|
||||
move_delay = move_delay + tickcomp
|
||||
|
||||
if(istype(mob.buckled, /obj/vehicle) || istype(mob.buckled, /obj/structure/stool/bed/chair/cart))
|
||||
return mob.buckled.relaymove(mob,direct)
|
||||
|
||||
if(mob.pulledby || mob.buckled) // Wheelchair driving!
|
||||
if(istype(mob.loc, /turf/space))
|
||||
return // No wheelchair driving in space
|
||||
if(istype(mob.pulledby, /obj/structure/stool/bed/chair/wheelchair))
|
||||
return mob.pulledby.relaymove(mob, direct)
|
||||
else if(istype(mob.buckled, /obj/structure/stool/bed/chair/wheelchair))
|
||||
if(ishuman(mob.buckled))
|
||||
var/mob/living/carbon/human/driver = mob.buckled
|
||||
var/obj/item/organ/external/l_hand = driver.get_organ("l_hand")
|
||||
var/obj/item/organ/external/r_hand = driver.get_organ("r_hand")
|
||||
if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED)))
|
||||
return // No hands to drive your chair? Tough luck!
|
||||
move_delay += 2
|
||||
return mob.buckled.relaymove(mob,direct)
|
||||
|
||||
//We are now going to move
|
||||
moving = 1
|
||||
//Something with pulling things
|
||||
@@ -335,7 +283,7 @@
|
||||
|
||||
else if(mob.confused)
|
||||
step(mob, pick(cardinal))
|
||||
mob.last_movement=world.time
|
||||
mob.last_movement = world.time
|
||||
else
|
||||
. = ..()
|
||||
mob.last_movement=world.time
|
||||
@@ -348,6 +296,8 @@
|
||||
G.adjust_position()
|
||||
|
||||
moving = 0
|
||||
if(mob && .)
|
||||
mob.throwing = 0
|
||||
|
||||
return .
|
||||
|
||||
@@ -450,62 +400,44 @@
|
||||
///Called by /client/Move()
|
||||
///For moving in space
|
||||
///Return 1 for movement 0 for none
|
||||
/mob/proc/Process_Spacemove(var/check_drift = 0)
|
||||
//First check to see if we can do things
|
||||
if(restrained())
|
||||
return 0
|
||||
/mob/Process_Spacemove(var/movement_dir = 0)
|
||||
|
||||
/*
|
||||
if(istype(src,/mob/living/carbon))
|
||||
if(src.l_hand && src.r_hand)
|
||||
return 0
|
||||
*/
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
var/dense_object = 0
|
||||
for(var/turf/turf in oview(1,src))
|
||||
if(istype(turf,/turf/space))
|
||||
var/atom/movable/dense_object_backup
|
||||
for(var/atom/A in orange(1, get_turf(src)))
|
||||
if(isarea(A))
|
||||
continue
|
||||
|
||||
if(!turf.density && !mob_negates_gravity())
|
||||
continue
|
||||
else if(isturf(A))
|
||||
var/turf/turf = A
|
||||
if(istype(turf,/turf/space))
|
||||
continue
|
||||
|
||||
if(!turf.density && !mob_negates_gravity())
|
||||
continue
|
||||
|
||||
return 1
|
||||
|
||||
else
|
||||
var/atom/movable/AM = A
|
||||
if(AM == buckled) //Kind of unnecessary but let's just be sure
|
||||
continue
|
||||
if(AM.density)
|
||||
if(AM.anchored)
|
||||
return 1
|
||||
if(pulling == AM)
|
||||
continue
|
||||
dense_object_backup = AM
|
||||
|
||||
if(movement_dir && dense_object_backup)
|
||||
if(dense_object_backup.newtonian_move(turn(movement_dir, 180))) //You're pushing off something movable, so it moves
|
||||
src << "<span class='info'>You push off of [dense_object_backup] to propel yourself.</span>"
|
||||
|
||||
|
||||
|
||||
/*
|
||||
if(istype(turf,/turf/simulated/floor) && (src.flags & NOGRAV))
|
||||
continue
|
||||
*/
|
||||
|
||||
|
||||
dense_object++
|
||||
break
|
||||
|
||||
if(!dense_object && (locate(/obj/structure/lattice) in oview(1, src)))
|
||||
dense_object++
|
||||
|
||||
//Lastly attempt to locate any dense objects we could push off of
|
||||
//TODO: If we implement objects drifing in space this needs to really push them
|
||||
//Due to a few issues only anchored and dense objects will now work.
|
||||
if(!dense_object)
|
||||
for(var/obj/O in oview(1, src))
|
||||
if((O) && (O.density) && (O.anchored))
|
||||
dense_object++
|
||||
break
|
||||
|
||||
//Nothing to push off of so end here
|
||||
if(!dense_object)
|
||||
return 0
|
||||
|
||||
//Check to see if we slipped
|
||||
if(prob(Process_Spaceslipping(5)))
|
||||
src << "\blue <B>You slipped!</B>"
|
||||
src.inertia_dir = src.last_move
|
||||
step(src, src.inertia_dir)
|
||||
return 0
|
||||
|
||||
//If not then we can reset inertia and move
|
||||
inertia_dir = 0
|
||||
return 1
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/proc/mob_has_gravity(turf/T)
|
||||
return has_gravity(src, T)
|
||||
@@ -513,14 +445,5 @@
|
||||
/mob/proc/mob_negates_gravity()
|
||||
return 0
|
||||
|
||||
/mob/proc/Process_Spaceslipping(var/prob_slip = 5)
|
||||
//Setup slipage
|
||||
//If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such.
|
||||
if(stat)
|
||||
prob_slip = 0 // Changing this to zero to make it line up with the comment.
|
||||
|
||||
prob_slip = round(prob_slip)
|
||||
return(prob_slip)
|
||||
|
||||
/mob/proc/update_gravity()
|
||||
return
|
||||
|
||||
@@ -268,6 +268,8 @@
|
||||
|
||||
step(src, movement_dir)
|
||||
|
||||
/obj/singularity/Process_Spacemove() //The singularity stops drifting for no man!
|
||||
return 0
|
||||
|
||||
/obj/singularity/proc/check_turfs_in(var/direction = 0, var/step = 0)
|
||||
if(!direction)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
var/can_flashlight = 0
|
||||
var/heavy_weapon = 0
|
||||
var/randomspread = 0
|
||||
|
||||
|
||||
var/burst_size = 1
|
||||
|
||||
proc/ready_to_fire()
|
||||
@@ -186,6 +186,7 @@
|
||||
user.drop_item()
|
||||
break
|
||||
|
||||
user.newtonian_move(get_dir(target, user))
|
||||
update_icon()
|
||||
if(user.hand)
|
||||
user.update_inv_l_hand()
|
||||
|
||||
@@ -381,19 +381,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
// Telegun for Tator RDs
|
||||
|
||||
/obj/item/weapon/gun/energy/telegun
|
||||
name = "Teleporter Gun"
|
||||
desc = "An extremely high-tech bluespace energy gun capable of teleporting targets to far off locations."
|
||||
icon_state = "telegun"
|
||||
item_state = "ionrifle"
|
||||
fire_sound = 'sound/weapons/wave.ogg'
|
||||
origin_tech = "combat=6;materials=7;powerstorage=5;bluespace=5;syndicate=4"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
|
||||
projectile_type = "/obj/item/projectile/energy/teleport"
|
||||
charge_cost = 1250
|
||||
|
||||
/* 3d printer 'pseudo guns' for borgs */
|
||||
|
||||
/obj/item/weapon/gun/energy/printer
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
// Telegun for Tator RDs
|
||||
|
||||
/obj/item/weapon/gun/energy/telegun
|
||||
name = "Teleporter Gun"
|
||||
desc = "An extremely high-tech bluespace energy gun capable of teleporting targets to far off locations."
|
||||
icon_state = "telegun"
|
||||
item_state = "ionrifle"
|
||||
fire_sound = 'sound/weapons/wave.ogg'
|
||||
origin_tech = "combat=6;materials=7;powerstorage=5;bluespace=5;syndicate=4"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
|
||||
projectile_type = "/obj/item/projectile/energy/teleport"
|
||||
charge_cost = 1250
|
||||
var/teleport_target = null
|
||||
|
||||
/obj/item/weapon/gun/energy/telegun/Destroy()
|
||||
teleport_target = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/telegun/attack_self(mob/living/user as mob)
|
||||
var/list/L = list()
|
||||
var/list/areaindex = list()
|
||||
|
||||
for(var/obj/item/device/radio/beacon/R in beacons)
|
||||
var/turf/T = get_turf(R)
|
||||
if (!T)
|
||||
continue
|
||||
if((T.z in config.admin_levels) || T.z > 7)
|
||||
continue
|
||||
if(R.syndicate == 1)
|
||||
continue
|
||||
var/tmpname = T.loc.name
|
||||
if(areaindex[tmpname])
|
||||
tmpname = "[tmpname] ([++areaindex[tmpname]])"
|
||||
else
|
||||
areaindex[tmpname] = 1
|
||||
L[tmpname] = R
|
||||
|
||||
var/desc = input("Please select a location to lock in.", "Telegun Target Interface") in L
|
||||
teleport_target = L[desc]
|
||||
@@ -89,8 +89,8 @@
|
||||
return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, agony, blocked, stamina, jitter)
|
||||
|
||||
proc/OnFired() //if assigned, allows for code when the projectile gets fired
|
||||
return 1
|
||||
|
||||
return 1
|
||||
|
||||
proc/check_fire(var/mob/living/target as mob, var/mob/living/user as mob) //Checks if you can hit them or not.
|
||||
if(!istype(target) || !istype(user))
|
||||
return 0
|
||||
@@ -137,7 +137,7 @@
|
||||
var/mob/living/carbon/human/H = A
|
||||
var/obj/item/organ/external/organ = H.get_organ(check_zone(def_zone))
|
||||
if(isnull(organ))
|
||||
return
|
||||
return
|
||||
if(silenced)
|
||||
playsound(loc, hitsound, 5, 1, -1)
|
||||
M << "\red You've been shot in the [parse_zone(def_zone)] by the [src.name]!"
|
||||
@@ -189,6 +189,11 @@
|
||||
return 1
|
||||
|
||||
|
||||
Process_Spacemove(var/movement_dir = 0)
|
||||
return 1 //Bullets don't drift in space
|
||||
|
||||
|
||||
|
||||
process(var/setAngle)
|
||||
if(setAngle) Angle = setAngle
|
||||
if(!legacy)
|
||||
@@ -332,7 +337,7 @@
|
||||
M = locate() in get_step(src,target)
|
||||
if(istype(M))
|
||||
return 1
|
||||
|
||||
|
||||
/proc/check_trajectory(atom/target as mob|obj, atom/firer as mob|obj, var/pass_flags=PASSTABLE|PASSGLASS|PASSGRILLE, flags=null) //Checks if you can hit them or not.
|
||||
if(!istype(target) || !istype(firer))
|
||||
return 0
|
||||
@@ -343,4 +348,4 @@
|
||||
trace.pass_flags = pass_flags //And the pass flags to that of the real projectile...
|
||||
var/output = trace.process() //Test it!
|
||||
qdel(trace) //No need for it anymore
|
||||
return output //Send it back to the gun!
|
||||
return output //Send it back to the gun!
|
||||
|
||||
@@ -269,15 +269,17 @@ obj/item/projectile/kinetic/New()
|
||||
icon_state = "bluespace"
|
||||
damage = 0
|
||||
nodamage = 1
|
||||
var/obj/item/weapon/gun/energy/telegun/T = null
|
||||
var/teleport_target = null
|
||||
|
||||
OnFired()
|
||||
T = shot_from
|
||||
teleport_target = T.teleport_target
|
||||
|
||||
/obj/item/projectile/energy/teleport/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isliving(target))
|
||||
var/obj/item/device/radio/beacon/teletarget = null
|
||||
for(var/obj/machinery/computer/teleporter/com in machines)
|
||||
if(com.target)
|
||||
teletarget = com.target
|
||||
if(teletarget)
|
||||
do_teleport(target, teletarget, 0)//teleport what's in the tile to the beacon
|
||||
if(teleport_target)
|
||||
do_teleport(target, teleport_target, 0)//teleport what's in the tile to the beacon
|
||||
else
|
||||
do_teleport(target, target, 15) //Otherwise it just warps you off somewhere.
|
||||
|
||||
|
||||
@@ -118,32 +118,6 @@ var/const/INGEST = 2
|
||||
src.handle_reactions()
|
||||
return amount
|
||||
|
||||
/datum/reagents/proc/trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents
|
||||
if (!target )
|
||||
return
|
||||
if (!target.reagents || src.total_volume<=0)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder
|
||||
B.volume = 1000
|
||||
|
||||
var/datum/reagents/BR = B.reagents
|
||||
var/datum/reagents/R = target.reagents
|
||||
|
||||
amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
|
||||
|
||||
src.trans_to(B, amount)
|
||||
|
||||
spawn(-1)
|
||||
src = null // Survive through deletion of the reagent holder
|
||||
sleep(100)
|
||||
if(!target)
|
||||
return
|
||||
BR.trans_to(target, BR.total_volume)
|
||||
qdel(B)
|
||||
|
||||
return amount
|
||||
|
||||
/datum/reagents/proc/copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0)
|
||||
if(!target)
|
||||
return
|
||||
|
||||
@@ -15,7 +15,7 @@ datum/reagent/polonium
|
||||
|
||||
datum/reagent/polonium/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
M.radiation += 8
|
||||
M.apply_effect(8, IRRADIATE)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -742,4 +742,4 @@ datum/reagent/ants/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
M.adjustBruteLoss(2)
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(0)
|
||||
reagents.trans_to_ingest(M, 10)
|
||||
reagents.trans_to(M, 10)
|
||||
|
||||
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
return 1
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(0)
|
||||
reagents.trans_to_ingest(M, gulp_size)
|
||||
reagents.trans_to(M, gulp_size)
|
||||
|
||||
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
return 1
|
||||
@@ -66,7 +66,7 @@
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(0)
|
||||
reagents.trans_to_ingest(M, gulp_size)
|
||||
reagents.trans_to(M, gulp_size)
|
||||
|
||||
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
|
||||
var/mob/living/silicon/robot/bro = user
|
||||
|
||||
@@ -108,9 +108,9 @@
|
||||
var/temp_bitesize = max(reagents.total_volume /2, bitesize)
|
||||
reagents.trans_to(M, temp_bitesize)
|
||||
*/
|
||||
reagents.trans_to_ingest(M, bitesize)
|
||||
reagents.trans_to(M, bitesize)
|
||||
else
|
||||
reagents.trans_to_ingest(M, reagents.total_volume)
|
||||
reagents.trans_to(M, reagents.total_volume)
|
||||
bitecount++
|
||||
On_Consume(M)
|
||||
return 1
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, apply_type)
|
||||
spawn(0)
|
||||
reagents.trans_to_ingest(M, reagents.total_volume*transfer_efficiency)
|
||||
reagents.trans_to(M, reagents.total_volume*transfer_efficiency)
|
||||
qdel(src)
|
||||
else
|
||||
qdel(src)
|
||||
@@ -67,7 +67,7 @@
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, apply_type)
|
||||
spawn(0)
|
||||
reagents.trans_to_ingest(M, reagents.total_volume*transfer_efficiency)
|
||||
reagents.trans_to(M, reagents.total_volume*transfer_efficiency)
|
||||
qdel(src)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
|
||||
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
user.changeNext_move(CLICK_CD_RANGE*2)
|
||||
user.newtonian_move(get_dir(A, user))
|
||||
|
||||
if(reagents.has_reagent("sacid"))
|
||||
msg_admin_attack("[key_name_admin(user)] fired sulphuric acid from \a [src].")
|
||||
|
||||
@@ -57,30 +57,27 @@
|
||||
/obj/machinery/r_n_d/experimentor/proc/SetTypeReactions()
|
||||
var/probWeight = 0
|
||||
for(var/I in typesof(/obj/item))
|
||||
if(istype(I,/obj/item/weapon/relic))
|
||||
if(istype(I,/obj/item/weapon/relic)) //does istype even work here
|
||||
item_reactions["[I]"] = SCANTYPE_DISCOVER
|
||||
else
|
||||
item_reactions["[I]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE)
|
||||
if(ispath(I,/obj/item/weapon/stock_parts) || ispath(I,/obj/item/weapon/grenade/chem_grenade) || ispath(I,/obj/item/weapon/kitchen))
|
||||
var/obj/item/tempCheck = new I()
|
||||
if(tempCheck.icon_state != null) //check it's an actual usable item, in a hacky way
|
||||
var/obj/item/tempCheck = I
|
||||
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
|
||||
valid_items += 15
|
||||
valid_items += I
|
||||
probWeight++
|
||||
qdel(tempCheck)
|
||||
|
||||
if(ispath(I,/obj/item/weapon/reagent_containers/food))
|
||||
var/obj/item/tempCheck = new I()
|
||||
if(tempCheck.icon_state != null) //check it's an actual usable item, in a hacky way
|
||||
var/obj/item/tempCheck = I
|
||||
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
|
||||
valid_items += rand(1,max(2,35-probWeight))
|
||||
valid_items += I
|
||||
qdel(tempCheck)
|
||||
|
||||
if(ispath(I,/obj/item/weapon/rcd) || ispath(I,/obj/item/weapon/grenade) || ispath(I,/obj/item/device/aicard) || ispath(I,/obj/item/weapon/storage/backpack/holding) || ispath(I,/obj/item/slime_extract) || ispath(I,/obj/item/device/onetankbomb) || ispath(I,/obj/item/device/transfer_valve))
|
||||
var/obj/item/tempCheck = new I()
|
||||
if(tempCheck.icon_state != null)
|
||||
var/obj/item/tempCheck = I
|
||||
if(initial(tempCheck.icon_state) != null)
|
||||
critical_items += I
|
||||
qdel(tempCheck)
|
||||
|
||||
|
||||
/obj/machinery/r_n_d/experimentor/New()
|
||||
@@ -349,7 +346,7 @@
|
||||
throwSmoke(src.loc)
|
||||
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
|
||||
visible_message("<span class='warning'>[src] melts [exp_on], ionizing the air around it!</span>")
|
||||
empulse(src.loc, 4, 6)
|
||||
empulse(src.loc, 4, 0) //change this to 4,6 once the EXPERI-Mentor is moved.
|
||||
investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor")
|
||||
ejectItem(TRUE)
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -1,36 +1,11 @@
|
||||
|
||||
/obj/mecha/working/hoverpod
|
||||
name = "hover pod"
|
||||
icon_state = "engineering_pod"
|
||||
desc = "Stubby and round, it has a human sized access hatch on the top."
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/hoverpod
|
||||
|
||||
//duplicate of parent proc, but without space drifting
|
||||
/obj/mecha/working/hoverpod/dyndomove(direction)
|
||||
if(!can_move)
|
||||
return 0
|
||||
if(src.pr_inertial_movement.active())
|
||||
return 0
|
||||
if(!has_charge(step_energy_drain))
|
||||
return 0
|
||||
var/move_result = 0
|
||||
if(hasInternalDamage(MECHA_INT_CONTROL_LOST))
|
||||
move_result = mechsteprand()
|
||||
else if(src.dir!=direction)
|
||||
move_result = mechturn(direction)
|
||||
else
|
||||
move_result = mechstep(direction)
|
||||
if(move_result)
|
||||
can_move = 0
|
||||
use_power(step_energy_drain)
|
||||
/*if(istype(src.loc, /turf/space))
|
||||
if(!src.check_for_support())
|
||||
src.pr_inertial_movement.start(list(src,direction))
|
||||
src.log_message("Movement control lost. Inertial movement started.")*/
|
||||
if(do_after(step_in, target = src))
|
||||
can_move = 1
|
||||
return 1
|
||||
return 0
|
||||
/obj/mecha/working/hoverpod/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1 // puts the hover in hoverpod
|
||||
|
||||
//these three procs overriden to play different sounds
|
||||
/obj/mecha/working/hoverpod/mechturn(direction)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
if(prob(100 * weakness))
|
||||
user << "\red You are suddenly zapped away elsewhere!"
|
||||
if (user.buckled)
|
||||
user.buckled.unbuckle()
|
||||
user.buckled.unbuckle_mob()
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
|
||||
sparks.set_up(3, 0, get_turf(user))
|
||||
@@ -27,7 +27,7 @@
|
||||
if(prob(100 * weakness))
|
||||
M << "\red You are displaced by a strange force!"
|
||||
if(M.buckled)
|
||||
M.buckled.unbuckle()
|
||||
M.buckled.unbuckle_mob()
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
|
||||
sparks.set_up(3, 0, get_turf(M))
|
||||
@@ -46,7 +46,7 @@
|
||||
if(prob(100 * weakness))
|
||||
M << "\red You are displaced by a strange force!"
|
||||
if(M.buckled)
|
||||
M.buckled.unbuckle()
|
||||
M.buckled.unbuckle_mob()
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
|
||||
sparks.set_up(3, 0, get_turf(M))
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
for(var/turf/T in dstturfs)
|
||||
var/turf/D = locate(T.x, throwy - 1, 1)
|
||||
for(var/atom/movable/AM as mob|obj in T)
|
||||
AM.Move(D)
|
||||
AM.Move(D, SOUTH)
|
||||
if(istype(T, /turf/simulated))
|
||||
qdel(T)
|
||||
|
||||
|
||||
@@ -96,7 +96,6 @@
|
||||
icon_state = "scalpel_laser2_on"
|
||||
item_state = "scalpel"
|
||||
damtype = "fire"
|
||||
force = 12.0
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
|
||||
/obj/item/weapon/scalpel/laser3
|
||||
@@ -105,7 +104,6 @@
|
||||
icon_state = "scalpel_laser3_on"
|
||||
item_state = "scalpel"
|
||||
damtype = "fire"
|
||||
force = 15.0
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
|
||||
/obj/item/weapon/scalpel/manager
|
||||
@@ -114,7 +112,6 @@
|
||||
icon_state = "scalpel_manager_on"
|
||||
item_state = "scalpel"
|
||||
damtype = "fire"
|
||||
force = 18.0
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
|
||||
/obj/item/weapon/circular_saw
|
||||
|
||||
@@ -110,44 +110,39 @@
|
||||
///HANDHELD TELEPAD USER///
|
||||
/obj/item/weapon/rcs
|
||||
name = "rapid-crate-sender (RCS)"
|
||||
desc = "Use this to send crates and closets to cargo telepads."
|
||||
desc = "A device used to teleport crates and closets to cargo telepads."
|
||||
icon = 'icons/obj/telescience.dmi'
|
||||
icon_state = "rcs"
|
||||
item_state = "rcd"
|
||||
flags = CONDUCT
|
||||
force = 10.0
|
||||
throwforce = 10.0
|
||||
throw_speed = 2
|
||||
throw_range = 5
|
||||
var/rcharges = 10
|
||||
var/obj/item/weapon/stock_parts/cell/high/rcell = null
|
||||
var/obj/machinery/pad = null
|
||||
var/last_charge = 30
|
||||
var/mode = 0
|
||||
var/rand_x = 0
|
||||
var/rand_y = 0
|
||||
var/emagged = 0
|
||||
var/teleporting = 0
|
||||
var/chargecost = 1500
|
||||
|
||||
/obj/item/weapon/rcs/New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
rcell = new(src)
|
||||
|
||||
|
||||
/obj/item/weapon/rcs/examine(mob/user)
|
||||
..(user)
|
||||
user << "There are [rcharges] charge\s left."
|
||||
user << "There are [round(rcell.charge/chargecost)] charge\s left."
|
||||
|
||||
/obj/item/weapon/rcs/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
if(rcell)
|
||||
qdel(rcell)
|
||||
rcell = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rcs/process()
|
||||
if(rcharges > 10)
|
||||
rcharges = 10
|
||||
if(last_charge == 0)
|
||||
rcharges++
|
||||
last_charge = 30
|
||||
else
|
||||
last_charge--
|
||||
|
||||
/obj/item/weapon/rcs/attack_self(mob/user)
|
||||
if(emagged)
|
||||
if(mode == 0)
|
||||
@@ -165,5 +160,5 @@
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
user << "<span class = 'caution'> You emag the RCS. Click on it to toggle between modes.</span>"
|
||||
user << "<span class = 'caution'> You emag the RCS. Activate it to toggle between modes.</span>"
|
||||
return
|
||||
|
||||
@@ -36,6 +36,15 @@
|
||||
unattach()
|
||||
return 0
|
||||
|
||||
/obj/vehicle/train/can_move()
|
||||
if(!is_train_head())
|
||||
return 1 //towed objects do not need power to Move()
|
||||
|
||||
if(!..())
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/obj/vehicle/train/Bump(atom/Obstacle)
|
||||
if(!istype(Obstacle, /atom/movable))
|
||||
return
|
||||
|
||||
@@ -44,20 +44,10 @@
|
||||
key = new()
|
||||
|
||||
/obj/vehicle/train/ambulance/engine/Move()
|
||||
if(on && cell.charge < charge_use)
|
||||
turn_off()
|
||||
update_stats()
|
||||
if(load && is_train_head())
|
||||
load << "The drive motor briefly whines, then drones to a stop."
|
||||
|
||||
if(is_train_head() && !on)
|
||||
return 0
|
||||
|
||||
. = ..()
|
||||
handle_rotation()
|
||||
update_mob()
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/train/ambulance/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(open && istype(W, /obj/item/weapon/wirecutters))
|
||||
passenger_allowed = !passenger_allowed
|
||||
@@ -176,7 +166,7 @@
|
||||
return 0
|
||||
|
||||
if(is_train_head())
|
||||
if(direction == reverse_direction(dir))
|
||||
if(direction == reverse_direction(dir) && tow) //can reverse with no tow
|
||||
return 0
|
||||
if(Move(get_step(src, direction)))
|
||||
return 1
|
||||
|
||||
@@ -47,18 +47,6 @@
|
||||
overlays += I
|
||||
turn_off() //so engine verbs are correctly set
|
||||
|
||||
/obj/vehicle/train/cargo/engine/Move()
|
||||
if(on && cell.charge < charge_use)
|
||||
turn_off()
|
||||
update_stats()
|
||||
if(load && is_train_head())
|
||||
load << "The drive motor briefly whines, then drones to a stop."
|
||||
|
||||
if(is_train_head() && !on)
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/train/cargo/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(open && istype(W, /obj/item/weapon/wirecutters))
|
||||
passenger_allowed = !passenger_allowed
|
||||
|
||||
@@ -51,20 +51,10 @@
|
||||
R.my_atom = src
|
||||
|
||||
/obj/vehicle/train/janitor/engine/Move()
|
||||
if(on && cell.charge < charge_use)
|
||||
turn_off()
|
||||
update_stats()
|
||||
if(load && is_train_head())
|
||||
load << "The drive motor briefly whines, then drones to a stop."
|
||||
|
||||
if(is_train_head() && !on)
|
||||
return 0
|
||||
|
||||
. = ..()
|
||||
handle_rotation()
|
||||
update_mob()
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/vehicle/train/janitor/trolley/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(openTop)
|
||||
W.loc = src
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
animate_movement=1
|
||||
light_range = 3
|
||||
|
||||
buckle_lying = 0
|
||||
|
||||
var/attack_log = null
|
||||
var/on = 0
|
||||
var/health = 0 //do not forget to set health for your vehicle!
|
||||
@@ -40,10 +42,7 @@
|
||||
//spawn the cell you want in each vehicle
|
||||
|
||||
/obj/vehicle/Move()
|
||||
if(world.time > l_move_time + move_delay)
|
||||
if(on && powered && cell.charge < charge_use)
|
||||
turn_off()
|
||||
|
||||
if(can_move())
|
||||
var/init_anc = anchored
|
||||
anchored = 0
|
||||
if(!..())
|
||||
@@ -63,6 +62,23 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/vehicle/proc/can_move()
|
||||
if(world.time <= l_move_time + move_delay)
|
||||
return 0
|
||||
|
||||
if(!on || !powered)
|
||||
return 0
|
||||
|
||||
if(on && powered && cell.charge < charge_use)
|
||||
turn_off()
|
||||
return 0
|
||||
|
||||
if(istype(loc, /turf/space))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/vehicle/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weapon/hand_labeler))
|
||||
return
|
||||
@@ -222,19 +238,19 @@
|
||||
|
||||
/obj/vehicle/proc/powercheck()
|
||||
if(!cell && !powered)
|
||||
return
|
||||
return 0
|
||||
|
||||
if(!cell && powered)
|
||||
turn_off()
|
||||
return
|
||||
return 0
|
||||
|
||||
if(cell.charge < charge_use)
|
||||
turn_off()
|
||||
return
|
||||
return 0
|
||||
|
||||
if(cell && powered)
|
||||
turn_on()
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/vehicle/proc/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
if(cell)
|
||||
|
||||
Reference in New Issue
Block a user