1
- #define AIRLOCK_REGION_PAINT " Paint"
2
- #define AIRLOCK_REGION_STRIPE " Stripe"
3
- #define AIRLOCK_REGION_WINDOW " Window"
1
+ #define PAINT_REGION_PAINT " Paint"
2
+ #define PAINT_REGION_STRIPE " Stripe"
3
+ #define PAINT_REGION_WINDOW " Window"
4
4
5
5
#define PLACEMENT_MODE_QUARTERS 1
6
6
#define PLACEMENT_MODE_TRIANGLES 2
19
19
desc = " A slender and none-too-sophisticated device capable of applying paint on floors, walls, exosuits and certain airlocks."
20
20
var /decal = " Quarter-Tile"
21
21
var /paint_color
22
+ var /wall_paint_region = PAINT_REGION_PAINT
22
23
var /category
23
24
24
25
var /list /decals = list (
109
110
var /radial = list ()
110
111
radial[" Remove all decals" ] = mutable_appearance(" icons/screen/radial.dmi" , " cable_invalid" )
111
112
radial[" Pick color" ] = mutable_appearance(" icons/screen/radial.dmi" , " color_hexagon" )
113
+ radial[" Switch wall paint region" ] = mutable_appearance(" icons/screen/radial.dmi" , " wall_paint_swap" )
112
114
for (var /key in categories)
113
115
radial[key] = mutable_appearance(" icons/screen/radial.dmi" , categories[key][" icon_state" ])
114
116
var /choice = show_radial_menu(user, user, radial, require_near = TRUE , radius = 50 , tooltips = TRUE , check_locs = list (src ))
121
123
if (" Pick color" )
122
124
choose_color (user)
123
125
return
126
+ if (" Switch wall paint region" )
127
+ choose_wall_paint_region (user)
128
+ return
124
129
category = categories[choice][" id" ]
125
130
show_decals_by_category (user)
126
131
150
155
var /datum /click_handler/default/paint_sprayer/CH = user. click_handlers[1 ]
151
156
CH . paint_sprayer = src
152
157
if (isrobot(user))
153
- GLOB . module_deselected_event. register(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
154
- GLOB . module_deactivated_event. register(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
158
+ GLOB . module_deselected_event. register(user, src , PROC_REF ( remove_click_handler))
159
+ GLOB . module_deactivated_event. register(user, src , PROC_REF ( remove_click_handler))
155
160
else
156
- GLOB . hands_swapped_event. register(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
157
- GLOB . mob_equipped_event. register(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
158
- GLOB . mob_unequipped_event. register(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
161
+ GLOB . hands_swapped_event. register(user, src , PROC_REF ( remove_click_handler))
162
+ GLOB . mob_equipped_event. register(user, src , PROC_REF ( remove_click_handler))
163
+ GLOB . mob_unequipped_event. register(user, src , PROC_REF ( remove_click_handler))
159
164
160
165
/ obj / item/ device/ paint_sprayer/ proc / remove_click_handler( mob / user)
161
166
if (user. RemoveClickHandler(/ datum / click_handler/ default/ paint_sprayer))
162
- GLOB . hands_swapped_event. unregister(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
163
- GLOB . mob_equipped_event. unregister(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
164
- GLOB . mob_unequipped_event. unregister(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
165
- GLOB . module_deselected_event. unregister(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
166
- GLOB . module_deactivated_event. unregister(user, src , TYPE_PROC_REF ( / obj / item / device / paint_sprayer, remove_click_handler))
167
+ GLOB . hands_swapped_event. unregister(user, src , PROC_REF ( remove_click_handler))
168
+ GLOB . mob_equipped_event. unregister(user, src , PROC_REF ( remove_click_handler))
169
+ GLOB . mob_unequipped_event. unregister(user, src , PROC_REF ( remove_click_handler))
170
+ GLOB . module_deselected_event. unregister(user, src , PROC_REF ( remove_click_handler))
171
+ GLOB . module_deactivated_event. unregister(user, src , PROC_REF ( remove_click_handler))
167
172
168
- / obj / item/ device/ paint_sprayer/ use_after ( atom / target, mob / living/ user, click_parameters)
173
+ / obj / item/ device/ paint_sprayer/ use_before ( atom / target, mob / living/ user, click_parameters)
169
174
if (apply_paint(target, user, click_parameters))
170
175
return TRUE
171
176
return .. ()
178
183
new_color = pick_color_from_floor(A, user)
179
184
else if (istype(A, / obj / machinery/ door/ airlock))
180
185
new_color = pick_color_from_airlock(A, user)
186
+ else if (istype(A, / turf / simulated/ wall))
187
+ new_color = pick_color_from_wall(A, user)
188
+ else if (istype(A, / obj / structure/ wall_frame))
189
+ var /obj /structure/wall_frame/wall_frame = A
190
+ new_color = wall_frame. stripe_color
181
191
else if (A. atom_flags & ATOM_FLAG_CAN_BE_PAINTED )
182
192
new_color = A. get_color()
183
193
if (! change_color(new_color, user))
184
194
to_chat (user, SPAN_WARNING (" \The [ A] does not have a color that you could pick from." ))
185
195
return TRUE // There was an attempt to pick a color.
186
196
187
197
/ obj / item/ device/ paint_sprayer/ proc / apply_paint( atom / A, mob / user, click_parameters)
188
- if (A. atom_flags & ATOM_FLAG_CAN_BE_PAINTED )
189
- A. set_color(paint_color)
190
- . = TRUE
198
+ if (istype(A, / turf / simulated/ wall))
199
+ . = paint_wall(A, user)
191
200
else if (istype(A, / turf / simulated/ floor))
192
201
. = paint_floor(A, user, click_parameters)
193
202
else if (istype(A, / obj / machinery/ door/ airlock))
194
203
. = paint_airlock(A, user)
204
+ else if (istype(A, / obj / structure/ wall_frame))
205
+ . = paint_wall_frame(A, user)
195
206
else if (istype(A, / mob / living/ exosuit))
196
207
to_chat (user, SPAN_WARNING (" You can't paint an active exosuit. Dismantle it first." ))
208
+ else if (A. atom_flags & ATOM_FLAG_CAN_BE_PAINTED )
209
+ A. set_color(paint_color)
210
+ . = TRUE
197
211
if (. )
198
212
playsound (get_turf(src ), ' sound/effects/spray3.ogg' , 30 , 1 , - 6 )
199
213
return .
207
221
LIST_DEC (F. decals)
208
222
F. update_icon()
209
223
. = TRUE
224
+ else if (istype(A, / turf / simulated/ wall))
225
+ var /turf /simulated/wall/wall = A
226
+ wall. paint_wall(null )
227
+ wall. stripe_wall(null )
228
+ . = TRUE
229
+ else if (istype(A, / obj / structure/ wall_frame))
230
+ var /obj /structure/wall_frame/wall_frame = A
231
+ . = wall_frame. stripe_wall_frame(null )
210
232
else if (istype(A, / obj / machinery/ door/ airlock))
211
233
var /obj /machinery/door/airlock/D = A
212
234
if (D. paintable)
308
330
if (! D. paintable)
309
331
return FALSE
310
332
switch (select_airlock_region(D, user, " Where do you wish to pick the color from?" ))
311
- if (AIRLOCK_REGION_PAINT )
333
+ if (PAINT_REGION_PAINT )
312
334
return D. door_color
313
- if (AIRLOCK_REGION_STRIPE )
335
+ if (PAINT_REGION_STRIPE )
314
336
return D. stripe_color
315
- if (AIRLOCK_REGION_WINDOW )
337
+ if (PAINT_REGION_WINDOW )
316
338
return D. window_color
317
339
else
318
340
return FALSE
323
345
return FALSE
324
346
325
347
switch (select_airlock_region(D, user, " What do you wish to paint?" ))
326
- if (AIRLOCK_REGION_PAINT )
348
+ if (PAINT_REGION_PAINT )
327
349
D. paint_airlock(paint_color)
328
- if (AIRLOCK_REGION_STRIPE )
350
+ if (PAINT_REGION_STRIPE )
329
351
D. stripe_airlock(paint_color)
330
- if (AIRLOCK_REGION_WINDOW )
352
+ if (PAINT_REGION_WINDOW )
331
353
D. paint_window(paint_color)
332
354
else
333
355
return FALSE
334
356
return TRUE
335
357
336
- / obj / item/ device/ paint_sprayer/ proc / select_airlock_region( obj / machinery/ door/ airlock/ D , mob / user, input_text)
358
+ / obj / item/ device/ paint_sprayer/ proc / select_airlock_region( obj / machinery/ door/ airlock/ door , mob / user, input_text)
337
359
var /choice
338
360
var /list /choices = list ()
339
- if (D . paintable & AIRLOCK_PAINTABLE_MAIN )
340
- choices |= AIRLOCK_REGION_PAINT
341
- if (D . paintable & AIRLOCK_PAINTABLE_STRIPE )
342
- choices |= AIRLOCK_REGION_STRIPE
343
- if (D . paintable & AIRLOCK_PAINTABLE_WINDOW )
344
- choices |= AIRLOCK_REGION_WINDOW
361
+ if (door . paintable & MATERIAL_PAINTABLE_MAIN )
362
+ choices |= PAINT_REGION_PAINT
363
+ if (door . paintable & MATERIAL_PAINTABLE_STRIPE )
364
+ choices |= PAINT_REGION_STRIPE
365
+ if (door . paintable & MATERIAL_PAINTABLE_WINDOW )
366
+ choices |= PAINT_REGION_WINDOW
345
367
choice = input (user, input_text) as null | anything in sortList (choices)
346
- if (user . incapacitated() || ! D || ! user. Adjacent(D ))
368
+ if (! user. use_sanity_check(door, src ))
347
369
return FALSE
348
370
return choice
349
371
372
+ / obj / item/ device/ paint_sprayer/ proc / paint_wall( turf / simulated/ wall/ wall, mob / user)
373
+ if (istype(wall) && (! wall. material?. wall_flags))
374
+ to_chat (user, SPAN_WARNING (" You can't paint this wall type." ))
375
+ return
376
+ if (! user. use_sanity_check(wall, src ))
377
+ return FALSE
378
+ if (istype(wall))
379
+ if (wall_paint_region == PAINT_REGION_PAINT )
380
+ if (! (wall. material?. wall_flags & MATERIAL_PAINTABLE_MAIN ))
381
+ to_chat (user, SPAN_WARNING (" You can't paint this wall type." ))
382
+ return FALSE
383
+ wall. paint_wall(paint_color)
384
+ return TRUE
385
+ else if (wall_paint_region == PAINT_REGION_STRIPE )
386
+ if (! (wall. material?. wall_flags & MATERIAL_PAINTABLE_STRIPE ))
387
+ to_chat (user, SPAN_WARNING (" You can't stripe this wall type." ))
388
+ return FALSE
389
+ wall. stripe_wall(paint_color)
390
+ return TRUE
391
+
392
+
393
+ / obj / item/ device/ paint_sprayer/ proc / pick_color_from_wall( turf / simulated/ wall/ wall, mob / user)
394
+ if (! wall. material || ! wall. material. wall_flags)
395
+ return FALSE
396
+
397
+ switch (select_wall_region(wall, user, " Where do you wish to select the color from?" ))
398
+ if (PAINT_REGION_PAINT )
399
+ return wall. paint_color
400
+ if (PAINT_REGION_STRIPE )
401
+ return wall. stripe_color
402
+ else
403
+ return FALSE
404
+
405
+ / obj / item/ device/ paint_sprayer/ proc / select_wall_region( turf / simulated/ wall/ wall, mob / user, input_text)
406
+ var /list /choices = list ()
407
+ if (wall. material. wall_flags & MATERIAL_PAINTABLE_MAIN )
408
+ choices |= PAINT_REGION_PAINT
409
+ if (wall. material. wall_flags & MATERIAL_PAINTABLE_STRIPE )
410
+ choices |= PAINT_REGION_STRIPE
411
+ var /choice = input (user, input_text) as null | anything in sortTim (choices, GLOBAL_PROC_REF (cmp_text_asc))
412
+ if (! user. use_sanity_check(wall, src ))
413
+ return FALSE
414
+ return choice
415
+
416
+ / obj / item/ device/ paint_sprayer/ proc / paint_wall_frame( obj / structure/ wall_frame/ wall_frame, mob / user)
417
+ if (! user. use_sanity_check(wall_frame, src ))
418
+ return FALSE
419
+ wall_frame. stripe_wall_frame(paint_color)
420
+ return TRUE
421
+
350
422
/ obj / item/ device/ paint_sprayer/ proc / change_color(new_color, mob / user)
351
423
if (new_color)
352
424
paint_color = new_color
382
454
return
383
455
change_color (new_color, user)
384
456
457
+ / obj / item/ device/ paint_sprayer/ proc / choose_wall_paint_region( mob / user)
458
+ if (wall_paint_region == PAINT_REGION_STRIPE )
459
+ wall_paint_region = PAINT_REGION_PAINT
460
+ to_chat (user, SPAN_NOTICE (" You set \the [ src ] to paint walls." ))
461
+ else
462
+ wall_paint_region = PAINT_REGION_STRIPE
463
+ to_chat (user, SPAN_NOTICE (" You set \the [ src ] to stripe walls." ))
464
+
385
465
/ obj / item/ device/ paint_sprayer/ verb / choose_preset_color()
386
466
set name = " Choose Preset Color"
387
467
set desc = " Choose a preset color."
409
489
return
410
490
user. ClickOn(A, params)
411
491
412
- #undef AIRLOCK_REGION_PAINT
413
- #undef AIRLOCK_REGION_STRIPE
414
- #undef AIRLOCK_REGION_WINDOW
492
+ #undef PAINT_REGION_PAINT
493
+ #undef PAINT_REGION_STRIPE
494
+ #undef PAINT_REGION_WINDOW
415
495
416
496
#undef PLACEMENT_MODE_QUARTERS
417
497
#undef PLACEMENT_MODE_TRIANGLES
420
500
#undef CATEGORY_TILES
421
501
#undef CATEGORY_HAZARD
422
502
#undef CATEGORY_WARD
423
- #undef CATEGORY_MISC
503
+ #undef CATEGORY_MISC
0 commit comments