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
+ world << " paint"
374
+ if (istype(wall) && (! wall. material?. wall_flags))
375
+ to_chat (user, SPAN_WARNING (" You can't paint this wall type." ))
376
+ return
377
+ if (! user. use_sanity_check(wall, src ))
378
+ return FALSE
379
+ if (istype(wall))
380
+ if (wall_paint_region == PAINT_REGION_PAINT )
381
+ if (! (wall. material?. wall_flags & MATERIAL_PAINTABLE_MAIN ))
382
+ to_chat (user, SPAN_WARNING (" You can't paint this wall type." ))
383
+ return FALSE
384
+ world << " paint1"
385
+ wall. paint_wall(paint_color)
386
+ return TRUE
387
+ else if (wall_paint_region == PAINT_REGION_STRIPE )
388
+ if (! (wall. material?. wall_flags & MATERIAL_PAINTABLE_STRIPE ))
389
+ to_chat (user, SPAN_WARNING (" You can't stripe this wall type." ))
390
+ return FALSE
391
+ world << " paint2"
392
+ wall. stripe_wall(paint_color)
393
+ return TRUE
394
+
395
+
396
+ / obj / item/ device/ paint_sprayer/ proc / pick_color_from_wall( turf / simulated/ wall/ wall, mob / user)
397
+ if (! wall. material || ! wall. material. wall_flags)
398
+ return FALSE
399
+
400
+ switch (select_wall_region(wall, user, " Where do you wish to select the color from?" ))
401
+ if (PAINT_REGION_PAINT )
402
+ return wall. paint_color
403
+ if (PAINT_REGION_STRIPE )
404
+ return wall. stripe_color
405
+ else
406
+ return FALSE
407
+
408
+ / obj / item/ device/ paint_sprayer/ proc / select_wall_region( turf / simulated/ wall/ wall, mob / user, input_text)
409
+ var /list /choices = list ()
410
+ if (wall. material. wall_flags & MATERIAL_PAINTABLE_MAIN )
411
+ choices |= PAINT_REGION_PAINT
412
+ if (wall. material. wall_flags & MATERIAL_PAINTABLE_STRIPE )
413
+ choices |= PAINT_REGION_STRIPE
414
+ var /choice = input (user, input_text) as null | anything in sortTim (choices, GLOBAL_PROC_REF (cmp_text_asc))
415
+ if (! user. use_sanity_check(wall, src ))
416
+ return FALSE
417
+ return choice
418
+
419
+ / obj / item/ device/ paint_sprayer/ proc / paint_wall_frame( obj / structure/ wall_frame/ wall_frame, mob / user)
420
+ if (! user. use_sanity_check(wall_frame, src ))
421
+ return FALSE
422
+ wall_frame. stripe_wall_frame(paint_color)
423
+ return TRUE
424
+
350
425
/ obj / item/ device/ paint_sprayer/ proc / change_color(new_color, mob / user)
351
426
if (new_color)
352
427
paint_color = new_color
382
457
return
383
458
change_color (new_color, user)
384
459
460
+ / obj / item/ device/ paint_sprayer/ proc / choose_wall_paint_region( mob / user)
461
+ if (wall_paint_region == PAINT_REGION_STRIPE )
462
+ wall_paint_region = PAINT_REGION_PAINT
463
+ to_chat (user, SPAN_NOTICE (" You set \the [ src ] to paint walls." ))
464
+ else
465
+ wall_paint_region = PAINT_REGION_STRIPE
466
+ to_chat (user, SPAN_NOTICE (" You set \the [ src ] to stripe walls." ))
467
+
385
468
/ obj / item/ device/ paint_sprayer/ verb / choose_preset_color()
386
469
set name = " Choose Preset Color"
387
470
set desc = " Choose a preset color."
409
492
return
410
493
user. ClickOn(A, params)
411
494
412
- #undef AIRLOCK_REGION_PAINT
413
- #undef AIRLOCK_REGION_STRIPE
414
- #undef AIRLOCK_REGION_WINDOW
495
+ #undef PAINT_REGION_PAINT
496
+ #undef PAINT_REGION_STRIPE
497
+ #undef PAINT_REGION_WINDOW
415
498
416
499
#undef PLACEMENT_MODE_QUARTERS
417
500
#undef PLACEMENT_MODE_TRIANGLES
420
503
#undef CATEGORY_TILES
421
504
#undef CATEGORY_HAZARD
422
505
#undef CATEGORY_WARD
423
- #undef CATEGORY_MISC
506
+ #undef CATEGORY_MISC
0 commit comments