-
-
Notifications
You must be signed in to change notification settings - Fork 444
/
Copy pathpirate.dm
181 lines (139 loc) · 5.79 KB
/
pirate.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/datum/antagonist/pirate
name = "Space Pirate"
job_rank = ROLE_PIRATE
roundend_category = "space pirates"
antagpanel_category = "Pirate"
show_to_ghosts = TRUE
count_towards_antag_cap = TRUE
var/datum/team/pirate/crew
/// In the preview icon, the nukies who are behind the leader
var/preview_outfit_behind = /datum/outfit/pirate/space/gunner
/datum/antagonist/pirate/greet()
to_chat(owner, span_boldannounce("You are a Space Pirate!"))
to_chat(owner, "<B>The station refused to pay for your protection, protect the ship, siphon the credits from the station and raid it for even more loot.</B>[span_notice(" As a pirate, you are NOT authorized to murder the station's inhabitants without good reason.")]")
owner.announce_objectives()
/datum/antagonist/pirate/get_team()
return crew
/datum/antagonist/pirate/create_team(datum/team/pirate/new_team)
if(!new_team)
for(var/datum/antagonist/pirate/P in GLOB.antagonists)
if(!P.owner)
continue
if(P.crew)
crew = P.crew
return
if(!new_team)
crew = new /datum/team/pirate
crew.forge_objectives()
return
if(!istype(new_team))
stack_trace("Wrong team type passed to [type] initialization.")
crew = new_team
/datum/antagonist/pirate/on_gain()
if(crew)
objectives |= crew.objectives
. = ..()
/datum/team/pirate
name = "Pirate crew"
/datum/team/pirate/proc/forge_objectives()
var/datum/objective/loot/getbooty = new()
getbooty.team = src
for(var/obj/machinery/computer/piratepad_control/P in GLOB.machines)
var/area/A = get_area(P)
if(istype(A,/area/shuttle/pirate))
getbooty.cargo_hold = P
break
getbooty.update_explanation_text()
objectives += getbooty
for(var/datum/mind/M in members)
var/datum/antagonist/pirate/P = M.has_antag_datum(/datum/antagonist/pirate)
if(P)
P.objectives |= objectives
/datum/objective/loot
var/obj/machinery/computer/piratepad_control/cargo_hold
explanation_text = "Acquire valuable loot and store it in designated area."
var/target_value = 50000
/datum/objective/loot/update_explanation_text()
if(cargo_hold)
var/area/storage_area = get_area(cargo_hold)
explanation_text = "Acquire loot and store [target_value] of credits worth in [storage_area.name] cargo hold."
/datum/objective/loot/proc/loot_listing()
//Lists notable loot.
if(!cargo_hold || !cargo_hold.total_report)
return "Nothing"
cargo_hold.total_report.total_value = sortTim(cargo_hold.total_report.total_value, cmp = /proc/cmp_numeric_dsc, associative = TRUE)
var/count = 0
var/list/loot_texts = list()
for(var/datum/export/E in cargo_hold.total_report.total_value)
if(++count > 5)
break
loot_texts += E.total_printout(cargo_hold.total_report,notes = FALSE)
return loot_texts.Join(", ")
/datum/objective/loot/proc/get_loot_value()
return cargo_hold ? cargo_hold.points : 0
/datum/objective/loot/check_completion()
return ..() || get_loot_value() >= target_value
/datum/team/pirate/roundend_report()
var/list/parts = list()
parts += span_header("Space Pirates were:")
var/all_dead = TRUE
for(var/datum/mind/M in members)
if(considered_alive(M))
all_dead = FALSE
parts += printplayerlist(members)
parts += "Loot stolen: "
var/datum/objective/loot/L = locate() in objectives
parts += L.loot_listing()
parts += "Total loot value : [L.get_loot_value()]/[L.target_value] credits"
if(L.check_completion() && !all_dead)
parts += "<span class='greentext big'>The pirate crew was successful!</span>"
for(var/datum/mind/M in members)
SSachievements.unlock_achievement(/datum/achievement/greentext/pirate,M.current.client)
else
parts += "<span class='redtext big'>The pirate crew has failed.</span>"
return "<div class='panel redborder'>[parts.Join("<br>")]</div>"
/datum/antagonist/pirate/get_preview_icon()
if (!preview_outfit)
return null
var/icon/final_icon = render_preview_outfit(preview_outfit)
if (!isnull(preview_outfit_behind))
var/icon/teammate = render_preview_outfit(preview_outfit_behind)
teammate.Blend(rgb(128, 128, 128, 128), ICON_MULTIPLY)
final_icon.Blend(teammate, ICON_OVERLAY, -world.icon_size / 4, 0)
final_icon.Blend(teammate, ICON_OVERLAY, world.icon_size / 4, 0)
return finish_preview_icon(final_icon)
/*
/datum/antagonist/pirate/get_preview_icon()
var/mob/living/carbon/human/dummy/consistent/zombiedummy = new
zombiedummy.set_species(/datum/species/zombie)
var/icon/zombie_icon = render_preview_outfit(null, zombiedummy)
qdel(zombiedummy)
return finish_preview_icon(zombie_icon)
/datum/antagonist/pirate/get_preview_icon()
var/mob/living/carbon/human/dummy/consistent/captain = new
var/mob/living/carbon/human/dummy/consistent/gunner = new
captain.set_species(/datum/species/skeleton)
gunner.set_species(/datum/species/skeleton)
var/icon/final_icon = render_preview_outfit(/datum/outfit/pirate/space/captain, captain)
var/icon/teammate = render_preview_outfit(/datum/outfit/pirate/space/gunner, gunner)
//teammate.Blend(rgb(128, 128, 128, 128), ICON_MULTIPLY)
final_icon.Blend(teammate, ICON_OVERLAY, -world.icon_size / 4, 0)
final_icon.Blend(teammate, ICON_OVERLAY, world.icon_size / 4, 0)
qdel(teammate)
qdel(captain)
return finish_preview_icon(final_icon)
*/
/datum/antagonist/pirate/get_preview_icon()
var/mob/living/carbon/human/dummy/consistent/captain = new
captain.set_species(/datum/species/skeleton)
var/icon/final_icon = render_preview_outfit(/datum/outfit/pirate/space/captain, captain)
final_icon.Blend(make_assistant_icon(), ICON_UNDERLAY, -8, 0)
final_icon.Blend(make_assistant_icon(), ICON_UNDERLAY, 8, 0)
return finish_preview_icon(final_icon)
/datum/antagonist/pirate/proc/make_assistant_icon()
var/mob/living/carbon/human/dummy/assistant = new
assistant.set_species(/datum/species/skeleton)
var/icon/assistant_icon = render_preview_outfit(/datum/outfit/pirate/space/gunner, assistant)
assistant_icon.ChangeOpacity(0.5)
qdel(assistant)
return assistant_icon