Conflicts:
	_maps/map_files/cyberiad/cyberiad.dmm
This commit is contained in:
Markolie
2015-09-26 05:20:05 +02:00
104 changed files with 1702 additions and 1862 deletions
+72 -61
View File
@@ -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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsadmin=showgm'>Show Game Mode</A>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A>
[check_rights(R_SERVER, 0) ? "&nbsp;&nbsp;<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>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
<A href='?src=\ref[src];secretsfun=power'>Make all areas powered</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=unpower'>Make all areas unpowered</A>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=forcelaunchshuttle'>Force launch a shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=jumpshuttle'>Jump a shuttle</A>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=striketeam_syndicate'>Send in a syndicate strike team</A>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=securitylevel1'>Security Level - Blue</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=securitylevel2'>Security Level - Red</A><br>
<A href='?src=\ref[src];secretsfun=securitylevel3'>Security Level - Gamma</A>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=securitylevel4'>Security Level - Epsilon</A>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=onlyone'>There can only be one!</A>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A>&nbsp;&nbsp;
<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>&nbsp;&nbsp;
<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)
+8 -36
View File
@@ -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)
+15 -15
View File
@@ -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()
*/
*/
-58
View File
@@ -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
+1
View File
@@ -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.
+24
View File
@@ -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
+1 -1
View File
@@ -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")
+7 -14
View File
@@ -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()
+15 -15
View File
@@ -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
+5 -1
View File
@@ -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
+16 -1
View File
@@ -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
View File
@@ -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)
-2
View File
@@ -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
+42 -119
View File
@@ -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)
+2 -1
View File
@@ -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]
+10 -5
View File
@@ -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.
-26
View File
@@ -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
+2 -2
View File
@@ -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].")
+8 -11
View File
@@ -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))
+1 -1
View File
@@ -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)
-3
View File
@@ -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
+11 -16
View File
@@ -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
+9
View File
@@ -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
+2 -12
View File
@@ -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
+1 -11
View File
@@ -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
+24 -8
View File
@@ -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)