|
1 | | -/obj/item/boombox |
| 1 | +/obj/item/music_player/boombox |
2 | 2 | name = "boombox" |
3 | 3 | desc = "A device used to emit rhythmic sounds, colloquially referred to as a 'boombox'. It's in a retro style (massive), and absolutely unwieldy." |
4 | | - icon = 'icons/obj/items/device/boombox.dmi' |
5 | | - icon_state = ICON_STATE_WORLD |
6 | | - _base_attack_force = 7 |
7 | | - w_class = ITEM_SIZE_HUGE //forbid putting something that emits loud sounds forever into a backpack |
8 | 4 | origin_tech = @'{"magnets":2,"combat":1}' |
9 | 5 | material = /decl/material/solid/organic/plastic |
10 | 6 | matter = list( |
11 | 7 | /decl/material/solid/metal/copper = MATTER_AMOUNT_REINFORCEMENT, |
12 | 8 | /decl/material/solid/metal/aluminium = MATTER_AMOUNT_REINFORCEMENT, |
13 | 9 | /decl/material/solid/silicon = MATTER_AMOUNT_TRACE, |
14 | 10 | ) |
15 | | - var/playing = 0 |
16 | | - var/track_num = 1 |
17 | | - var/music_volume = 20 |
18 | | - var/max_volume = 40 |
19 | | - var/frequency = 1 |
20 | | - var/datum/sound_token/sound_token |
21 | | - var/list/datum/track/tracks |
22 | | - var/sound_id |
| 11 | + player_name = "BOOMTASTIC 3000" |
| 12 | + interact_sound = "switch" |
| 13 | + icon = 'icons/obj/items/device/boombox.dmi' |
| 14 | + |
23 | 15 | var/break_chance = 3 |
24 | 16 | var/broken |
25 | 17 | var/panel = TRUE |
26 | 18 |
|
27 | | -/obj/item/boombox/attack_self(var/mob/user) |
28 | | - interact(user) |
29 | | - |
30 | | -/obj/item/boombox/Initialize() |
31 | | - . = ..() |
32 | | - sound_id = "[type]_[sequential_id(type)]" |
33 | | - tracks = setup_music_tracks(tracks) |
34 | | - |
35 | | -/obj/item/boombox/emp_act(severity) |
| 19 | +/obj/item/music_player/boombox/emp_act(severity) |
36 | 20 | boombox_break() |
37 | 21 |
|
38 | | -/obj/item/boombox/get_examine_strings(mob/user, distance, infix, suffix) |
| 22 | +/obj/item/music_player/boombox/get_examine_strings(mob/user, distance, infix, suffix) |
39 | 23 | . = ..() |
40 | 24 | if(!panel) |
41 | 25 | . += SPAN_NOTICE("The front panel is unhinged.") |
42 | 26 | if(broken) |
43 | 27 | . += SPAN_WARNING("It's broken.") |
44 | 28 |
|
45 | | -/obj/item/boombox/Destroy() |
46 | | - stop() |
47 | | - . = ..() |
48 | | - |
49 | | -/obj/item/boombox/interact(var/mob/user) |
50 | | - if(!CanPhysicallyInteract(user)) |
51 | | - return |
52 | | - var/dat = "<A href='byond://?src=\ref[src];tracknum=1;'>NEXT</a>" |
53 | | - dat += "<A href='byond://?src=\ref[src];tracknum=-1;'>PREV</a>" |
54 | | - dat += "<A href='byond://?src=\ref[src];start=1;'>PLAY</a>" |
55 | | - dat += "<A href='byond://?src=\ref[src];stop=1;'>STOP</a>" |
56 | | - dat += "<A href='byond://?src=\ref[src];voldown=1;'>VOL -</a>" |
57 | | - dat += "<A href='byond://?src=\ref[src];volup=1;'>VOL +</a>" |
58 | | - var/datum/browser/popup = new(user, "boombox", "BOOMTASTIC 3000", 290, 110) |
59 | | - popup.set_content(dat) |
60 | | - popup.open() |
61 | | - |
62 | | -/obj/item/boombox/DefaultTopicState() |
63 | | - return global.physical_topic_state |
64 | | - |
65 | | -/obj/item/boombox/CouldUseTopic(var/mob/user) |
66 | | - ..() |
67 | | - playsound(src, "switch", 40) |
68 | | - |
69 | | -/obj/item/boombox/OnTopic(var/user, var/list/href_list) |
70 | | - if(href_list["tracknum"]) |
71 | | - var/diff = text2num(href_list["tracknum"]) |
72 | | - track_num += diff |
73 | | - if(track_num > tracks.len) |
74 | | - track_num = 1 |
75 | | - else if (track_num < 1) |
76 | | - track_num = tracks.len |
77 | | - if(playing) |
78 | | - start() |
79 | | - return TOPIC_REFRESH |
80 | | - if(href_list["stop"]) |
81 | | - stop() |
82 | | - return TOPIC_HANDLED |
83 | | - if(href_list["start"] && !broken) |
84 | | - start() |
85 | | - return TOPIC_HANDLED |
86 | | - if(href_list["volup"]) |
87 | | - change_volume(music_volume + 10) |
88 | | - return TOPIC_HANDLED |
89 | | - if(href_list["voldown"]) |
90 | | - change_volume(music_volume - 10) |
91 | | - return TOPIC_HANDLED |
92 | | - |
93 | | -/obj/item/boombox/attackby(var/obj/item/used_item, var/mob/user) |
| 29 | +/obj/item/music_player/boombox/attackby(var/obj/item/used_item, var/mob/user) |
94 | 30 | if(IS_SCREWDRIVER(used_item)) |
95 | 31 | if(!panel) |
96 | 32 | user.visible_message(SPAN_NOTICE("\The [user] re-attaches \the [src]'s front panel with \the [used_item]."), SPAN_NOTICE("You re-attach \the [src]'s front panel.")) |
|
115 | 51 | else |
116 | 52 | . = ..() |
117 | 53 |
|
118 | | -/obj/item/boombox/proc/AdjustFrequency(var/obj/item/used_item, var/mob/user) |
| 54 | +/obj/item/music_player/boombox/proc/AdjustFrequency(var/obj/item/used_item, var/mob/user) |
119 | 55 | var/const/MIN_FREQUENCY = 0.5 |
120 | 56 | var/const/MAX_FREQUENCY = 1.5 |
121 | 57 |
|
|
126 | 62 | var/tighten = "Tighten (play slower)" |
127 | 63 | var/loosen = "Loosen (play faster)" |
128 | 64 |
|
129 | | - if(frequency > MIN_FREQUENCY) |
| 65 | + if(music_frequency > MIN_FREQUENCY) |
130 | 66 | options += tighten |
131 | | - if(frequency < MAX_FREQUENCY) |
| 67 | + if(music_frequency < MAX_FREQUENCY) |
132 | 68 | options += loosen |
133 | 69 |
|
134 | 70 | var/operation = input(user, "How do you wish to adjust the player head?", "Adjust player", options[1]) as null|anything in options |
|
143 | 79 | return FALSE |
144 | 80 |
|
145 | 81 | if(operation == loosen) |
146 | | - frequency += 0.1 |
| 82 | + music_frequency += 0.1 |
147 | 83 | else if(operation == tighten) |
148 | | - frequency -= 0.1 |
149 | | - frequency = clamp(frequency, MIN_FREQUENCY, MAX_FREQUENCY) |
| 84 | + music_frequency -= 0.1 |
| 85 | + music_frequency = clamp(music_frequency, MIN_FREQUENCY, MAX_FREQUENCY) |
150 | 86 |
|
151 | 87 | user.visible_message(SPAN_NOTICE("\The [user] adjusts \the [src]'s player head."), SPAN_NOTICE("You adjust \the [src]'s player head.")) |
152 | 88 | playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) |
153 | 89 |
|
154 | | - if(frequency > 1.0) |
| 90 | + if(music_frequency > 1.0) |
155 | 91 | to_chat(user, SPAN_NOTICE("\The [src] should be playing faster than usual.")) |
156 | | - else if(frequency < 1.0) |
| 92 | + else if(music_frequency < 1.0) |
157 | 93 | to_chat(user, SPAN_NOTICE("\The [src] should be playing slower than usual.")) |
158 | 94 | else |
159 | 95 | to_chat(user, SPAN_NOTICE("\The [src] should be playing as fast as usual.")) |
160 | 96 |
|
161 | 97 | return TRUE |
162 | 98 |
|
163 | | -/obj/item/boombox/proc/MayAdjust(var/mob/user) |
| 99 | +/obj/item/music_player/boombox/proc/MayAdjust(var/mob/user) |
164 | 100 | if(playing) |
165 | 101 | to_chat(user, "<span class='warning'>You can only adjust \the [src] when it's not playing.</span>") |
166 | 102 | return FALSE |
167 | 103 | return TRUE |
168 | 104 |
|
169 | | -/obj/item/boombox/on_update_icon() |
170 | | - . = ..() |
171 | | - icon_state = get_world_inventory_state() |
172 | | - if(playing) |
173 | | - icon_state = "[icon_state]_on" |
174 | | - |
175 | | -/obj/item/boombox/proc/stop() |
176 | | - playing = 0 |
177 | | - update_icon() |
178 | | - QDEL_NULL(sound_token) |
179 | | - |
180 | | -/obj/item/boombox/proc/start() |
181 | | - QDEL_NULL(sound_token) |
182 | | - var/datum/track/T = tracks[track_num] |
183 | | - sound_token = play_looping_sound(src, sound_id, T.GetTrack(), volume = music_volume, frequency = frequency, range = 7, falloff = 4, prefer_mute = TRUE, preference = /datum/client_preference/play_game_music, streaming = TRUE) |
184 | | - playing = 1 |
185 | | - update_icon() |
186 | | - if(prob(break_chance)) |
187 | | - boombox_break() |
188 | | - |
189 | | -/obj/item/boombox/proc/boombox_break() |
| 105 | +/obj/item/music_player/boombox/proc/boombox_break() |
190 | 106 | audible_message(SPAN_WARNING("\The [src]'s speakers pop with a sharp crack!")) |
191 | 107 | playsound(src.loc, 'sound/effects/snap.ogg', 100, 1) |
192 | 108 | broken = TRUE |
193 | 109 | stop() |
194 | 110 |
|
195 | | -/obj/item/boombox/proc/change_volume(var/new_volume) |
196 | | - music_volume = clamp(new_volume, 0, max_volume) |
197 | | - if(sound_token) |
198 | | - sound_token.SetVolume(music_volume) |
| 111 | +/obj/item/music_player/boombox/start() |
| 112 | + if(broken) |
| 113 | + return |
| 114 | + . = ..() |
| 115 | + if(prob(break_chance)) |
| 116 | + boombox_break() |
199 | 117 |
|
200 | 118 | /obj/random_multi/single_item/boombox |
201 | 119 | name = "boombox spawnpoint" |
202 | 120 | id = "boomtastic" |
203 | | - item_path = /obj/item/boombox |
| 121 | + item_path = /obj/item/music_player/boombox |
0 commit comments