|
11 | 11 | var/dryname = "dried blood" //when the blood lasts long enough, it becomes dry and gets a new name |
12 | 12 | var/drydesc = "Looks like it's been here a while. Eew." //as above |
13 | 13 | var/drytime = 0 |
| 14 | + var/footprint_sprite = null |
14 | 15 |
|
15 | 16 | /obj/effect/decal/cleanable/blood/Initialize(mapload) |
16 | 17 | . = ..() |
|
205 | 206 | /obj/effect/decal/cleanable/blood/footprints |
206 | 207 | name = "footprints" |
207 | 208 | icon = 'icons/effects/footprints.dmi' |
208 | | - icon_state = "nothingwhatsoever" |
209 | 209 | desc = "WHOSE FOOTPRINTS ARE THESE?" |
210 | | - icon_state = "blood1" |
| 210 | + icon_state = "blood_shoes_enter" |
211 | 211 | random_icon_states = null |
212 | 212 | blood_state = BLOOD_STATE_HUMAN //the icon state to load images from |
213 | 213 | var/entered_dirs = 0 |
|
220 | 220 | dryname = "dried footprints" |
221 | 221 | drydesc = "HMM... SOMEONE WAS HERE!" |
222 | 222 |
|
| 223 | +/obj/effect/decal/cleanable/blood/footprints/Initialize(mapload, footprint_sprite) |
| 224 | + src.footprint_sprite = footprint_sprite |
| 225 | + . = ..() |
| 226 | + icon_state = "" //All of the footprint visuals come from overlays |
| 227 | + if(mapload) |
| 228 | + entered_dirs |= dir //Keep the same appearance as in the map editor |
| 229 | + update_appearance(mapload ? (ALL) : (UPDATE_NAME | UPDATE_DESC)) |
| 230 | + |
| 231 | +//Rotate all of the footprint directions too |
| 232 | +/obj/effect/decal/cleanable/blood/footprints/setDir(newdir) |
| 233 | + if(dir == newdir) |
| 234 | + return ..() |
| 235 | + |
| 236 | + var/ang_change = dir2angle(newdir) - dir2angle(dir) |
| 237 | + var/old_entered_dirs = entered_dirs |
| 238 | + var/old_exited_dirs = exited_dirs |
| 239 | + entered_dirs = 0 |
| 240 | + exited_dirs = 0 |
| 241 | + |
| 242 | + for(var/Ddir in GLOB.cardinals) |
| 243 | + if(old_entered_dirs & Ddir) |
| 244 | + entered_dirs |= angle2dir_cardinal(dir2angle(Ddir) + ang_change) |
| 245 | + if(old_exited_dirs & Ddir) |
| 246 | + exited_dirs |= angle2dir_cardinal(dir2angle(Ddir) + ang_change) |
| 247 | + |
| 248 | + update_appearance() |
| 249 | + return ..() |
| 250 | + |
| 251 | +/obj/effect/decal/cleanable/blood/footprints/update_name(updates) |
| 252 | + switch(footprint_sprite) |
| 253 | + if(FOOTPRINT_SPRITE_CLAWS) |
| 254 | + name = "clawprints" |
| 255 | + if(FOOTPRINT_SPRITE_SHOES) |
| 256 | + name = "footprints" |
| 257 | + if(FOOTPRINT_SPRITE_PAWS) |
| 258 | + name = "pawprints" |
| 259 | + dryname = "dried [name]" |
| 260 | + return ..() |
| 261 | + |
| 262 | +/obj/effect/decal/cleanable/blood/footprints/update_desc(updates) |
| 263 | + desc = "WHOSE [uppertext(name)] ARE THESE?" |
| 264 | + return ..() |
| 265 | + |
| 266 | +/obj/effect/decal/cleanable/blood/footprints/update_icon() |
| 267 | + . = ..() |
| 268 | + alpha = min(BLOODY_FOOTPRINT_BASE_ALPHA + (255 - BLOODY_FOOTPRINT_BASE_ALPHA) * bloodiness / (BLOOD_ITEM_MAX / 2), 255) |
| 269 | + |
223 | 270 | /obj/effect/decal/cleanable/blood/footprints/update_overlays() |
224 | 271 | . = ..() |
225 | 272 |
|
226 | 273 | for(var/Ddir in GLOB.cardinals) |
227 | 274 | if(entered_dirs & Ddir) |
228 | | - var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] |
| 275 | + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[footprint_sprite]-[blood_state]-[Ddir]"] |
229 | 276 | if(!bloodstep_overlay) |
230 | | - GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]1", dir = Ddir) |
| 277 | + GLOB.bloody_footprints_cache["entered-[footprint_sprite]-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]_[footprint_sprite]_enter", dir = Ddir) |
231 | 278 | . += bloodstep_overlay |
232 | 279 | if(exited_dirs & Ddir) |
233 | | - var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] |
| 280 | + var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[footprint_sprite]-[blood_state]-[Ddir]"] |
234 | 281 | if(!bloodstep_overlay) |
235 | | - GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]2", dir = Ddir) |
| 282 | + GLOB.bloody_footprints_cache["exited-[footprint_sprite]-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]_[footprint_sprite]_exit", dir = Ddir) |
236 | 283 | . += bloodstep_overlay |
237 | 284 |
|
238 | | - alpha = min(BLOODY_FOOTPRINT_BASE_ALPHA + (255 - BLOODY_FOOTPRINT_BASE_ALPHA) * bloodiness / (BLOOD_ITEM_MAX / 2), 255) |
239 | | - |
240 | | - |
241 | 285 | /obj/effect/decal/cleanable/blood/footprints/examine(mob/user) |
242 | 286 | . = ..() |
243 | 287 | if((shoe_types.len + species_types.len) > 0) |
244 | | - . += "You recognise the footprints as belonging to:" |
| 288 | + . += "You recognise the [name] as belonging to:" |
245 | 289 | for(var/sole in shoe_types) |
246 | 290 | var/obj/item/clothing/item = sole |
247 | 291 | var/article = initial(item.gender) == PLURAL ? "Some" : "A" |
|
251 | 295 | if(species == "unknown") |
252 | 296 | . += "Some <B>feet</B>." |
253 | 297 | else if(species == "monkey") |
254 | | - . += "[icon2html('icons/mob/monkey.dmi', user, "monkey1")] Some <B>monkey feet</B>." |
| 298 | + . += "[icon2html('icons/mob/monkey.dmi', user, "monkey1")] Some <B>monkey paws</B>." |
255 | 299 | else if(species == "human") |
256 | 300 | . += "[icon2html('icons/mob/human_parts.dmi', user, "default_human_l_leg")] Some <B>human feet</B>." |
257 | 301 | else |
258 | 302 | . += "[icon2html('icons/mob/human_parts.dmi', user, "[species]_l_leg")] Some <B>[species] feet</B>." |
259 | 303 |
|
260 | | -/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/C) |
261 | | - if(blood_state != C.blood_state) //We only replace footprints of the same type as us |
| 304 | +/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/blood/blood_decal) |
| 305 | + if(blood_state != blood_decal.blood_state || footprint_sprite != blood_decal.footprint_sprite) //We only replace footprints of the same type as us |
262 | 306 | return FALSE |
263 | 307 | return ..() |
264 | 308 |
|
|
0 commit comments