Skip to content

Commit

Permalink
Port vehicle changes (#187)
Browse files Browse the repository at this point in the history
  • Loading branch information
xTrainx committed Jun 4, 2024
1 parent c7f6925 commit 38f8f57
Show file tree
Hide file tree
Showing 16 changed files with 608 additions and 6 deletions.
1 change: 1 addition & 0 deletions code/__HELPERS/icon_smoothing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,7 @@
/atom
var/icon_type_smooth
var/junction
var/bypass_interactions = FALSE

/atom/proc/recalculate_junction()
junction = 0
Expand Down
12 changes: 11 additions & 1 deletion code/_onclick/drag_drop.dm
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,18 @@ GLOBAL_VAR_INIT(use_experimental_clickdrag_thing, TRUE)
if(!object.IsAutoclickable())
return
var/obj/item/h = get_active_held_item()
if(h)
if(istype(loc, /obj/mecha))
var/obj/mecha/piloting = loc
if(piloting.selected && istype(piloting.selected, /obj/item/mecha_parts/mecha_equipment/weapon))
var/obj/item/mecha_parts/mecha_equipment/weapon/selectedweapon = piloting.selected
. = selectedweapon.is_automatic
else if(h)
. = h.CanItemAutoclick(object, location, params)
if(istype(loc, /obj/mecha))
var/obj/mecha/piloting = loc
if(piloting.selected && istype(piloting.selected, /obj/item/mecha_parts/mecha_equipment/weapon))
var/obj/item/mecha_parts/mecha_equipment/weapon/selectedweapon = piloting.selected
. = selectedweapon.is_automatic

/mob/proc/canMobMousedown(atom/object, location, params)

Expand Down
13 changes: 11 additions & 2 deletions code/controllers/subsystem/jukeboxes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,18 @@ SUBSYSTEM_DEF(jukeboxes)
if(!(M.client.prefs.toggles & SOUND_INSTRUMENTS) || !M.can_hear())
M.stop_sound_channel(jukeinfo[2])
continue

if(jukebox.z == M.z) //todo - expand this to work with mining planet z-levels when robust jukebox audio gets merged to master
var/turf/juketurf = get_turf(jukebox)
var/turf/mturf = get_turf(M)
if(juketurf.z == mturf.z) //todo - expand this to work with mining planet z-levels when robust jukebox audio gets merged to master
song_played.status = SOUND_UPDATE
else if(juketurf.z == mturf.z -1)
var/turf/juketurf_above = SSmapping.get_turf_above(juketurf)
if(istype(juketurf_above, /turf/open/transparent))
song_played.status = SOUND_UPDATE
else if(juketurf.z == mturf.z +1)
var/turf/mturf_above = SSmapping.get_turf_above(mturf)
if(istype(mturf_above, /turf/open/transparent) || istype(juketurf,/turf/open/transparent))
song_played.status = SOUND_UPDATE
else
song_played.status = SOUND_MUTE | SOUND_UPDATE //Setting volume = 0 doesn't let the sound properties update at all, which is lame.

Expand Down
9 changes: 8 additions & 1 deletion code/controllers/subsystem/throwing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,14 @@ SUBSYSTEM_DEF(throwing)
if (obstacle == actual_target || (obstacle.density && !(obstacle.flags_1 & ON_BORDER_1)))
finalize(TRUE, obstacle)
return

var/turf/starting_turf = get_turf(AM)
if(AM.z < target_turf.z)
var/turf/new_turf = SSmapping.get_turf_above(starting_turf)
AM.forceMove(new_turf)
if(starting_turf.z > target_turf.z)
var/turf/new_turf = SSmapping.get_turf_below(starting_turf)
AM.forceMove(new_turf)

var/atom/step

last_move = world.time
Expand Down
24 changes: 24 additions & 0 deletions code/datums/components/crafting/recipes/recipes_tools.dm
Original file line number Diff line number Diff line change
Expand Up @@ -130,3 +130,27 @@
/obj/item/stack/rods = 2)
category = CAT_CRAFTING
subcategory = CAT_TOOL

/datum/crafting_recipe/cellupgrade
name = "High cell to Ultra cell convertion"
result = /obj/item/stock_parts/cell/bluespace
time = 80
reqs = list(/obj/item/stock_parts/cell/high = 4,
/obj/item/stack/cable_coil = 10,
/obj/item/toy/crayon/spraycan = 1)
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
category = CAT_CRAFTING
subcategory = CAT_TOOL

/datum/crafting_recipe/carpart/stereo
name = "Mounted Stereo"
result = /obj/item/mecha_parts/mecha_equipment/stereo
reqs = list(/obj/item/stack/sheet/metal = 5,
/obj/item/stack/crafting/metalparts = 10,
/obj/item/circuitboard/machine/jukebox = 1,
/obj/item/stack/rods = 5)
tools = list(TOOL_WORKBENCH)
time = 90
category = CAT_VEHICLES
subcategory = CAT_VEHICLEPARTS

46 changes: 46 additions & 0 deletions code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,52 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON

/*/datum/crafting_recipe/gun/minigunVehicle
name = "Minigun"
result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/minigun
reqs = list(/obj/item/stack/crafting/metalparts = 10,
/obj/item/stack/crafting/goodparts = 5,
/obj/item/stack/crafting/electronicparts = 5,
/obj/item/stack/sheet/metal = 10,
/obj/item/stack/sheet/mineral/titanium = 20,
/obj/item/stack/rods = 6,
/obj/item/advanced_crafting_components/assembly = 1,
/obj/item/advanced_crafting_components/receiver = 1,
/obj/item/advanced_crafting_components/alloys = 1)
tools = list(TOOL_WORKBENCH)
time = 180
category = CAT_WEAPONRY
subcategory = CAT_WEAPON*/

/datum/crafting_recipe/gun/PheumonicLauncherVehicle
name = "Mounted Pheumonic launcher"
result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/anykind
reqs = list(/obj/item/stack/crafting/metalparts = 20,
/obj/item/stack/crafting/goodparts = 10,
/obj/item/stack/crafting/electronicparts = 5,
/obj/item/stack/sheet/metal = 30,
/obj/item/stack/sheet/mineral/titanium = 20,
/obj/item/stack/rods = 8,
/obj/item/advanced_crafting_components/assembly = 1,
/obj/item/advanced_crafting_components/receiver = 1)
tools = list(TOOL_WORKBENCH)
time = 180
category = CAT_WEAPONRY
subcategory = CAT_WEAPON

/*/datum/crafting_recipe/mech_ammo/brm8_missiles
name = "Minigun Ammo Pack"
result = /obj/item/mecha_ammo/minigun
reqs = list(/obj/item/ammo_box/magazine/ammobelt/m1919 = 3,
/obj/item/stack/sheet/metal = 10,
/obj/item/stack/sheet/mineral/titanium = 20,
/obj/item/stack/crafting/powder = 30)
tools = list(TOOL_WORKBENCH)
time = 180
category = CAT_WEAPONRY
subcategory = CAT_AMMO*/


/datum/crafting_recipe/gun/HMGvehicle
name = "Improvised HMG (for vehicles)"
result = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/hobo
Expand Down
217 changes: 217 additions & 0 deletions code/game/mecha/equipment/tools/work_tools.dm
Original file line number Diff line number Diff line change
Expand Up @@ -479,3 +479,220 @@
//NC.mergeConnectedNetworksOnTurf()
last_piece = NC
return 1


/obj/item/mecha_parts/mecha_equipment/stereo
name = "exosuit Stereo System"
desc = "a stereo system hooked up a jukebox, modified for easy transport."
icon_state = "mecha_stereo"
range = MELEE
var/active = FALSE
var/list/rangers = list()
var/stop = 0
var/volume = 70
var/datum/track/selection = null
var/open_tray = TRUE
var/list/obj/item/record_disk/record_disks = list()
var/obj/item/record_disk/selected_disk = null

/obj/item/mecha_parts/mecha_equipment/stereo/attach(obj/mecha/M)
. = ..()
bypass_interactions = TRUE

/obj/item/mecha_parts/mecha_equipment/stereo/detach(obj/mecha/M)
. = ..()
bypass_interactions = FALSE

/obj/item/mecha_parts/mecha_equipment/stereo/attackby(obj/item/O, mob/user, params)
. = ..()
if(!active)
if(istype(O, /obj/item/record_disk)) //this one checks for a record disk and if the jukebox is open, it adds it to the machine
if(open_tray == FALSE)
to_chat(usr, "The Disk Tray is not open!")
return
var/obj/item/record_disk/I = O
if(!I.R.song_associated_id)
to_chat(user, span_warning("This record is empty!"))
return
for(var/datum/track/RT in SSjukeboxes.songs)
if(I.R.song_associated_id == RT.song_associated_id)
to_chat(user, span_warning("this track is already added to the jukebox!"))
return
record_disks += I
O.forceMove(src)
playsound(src, 'sound/effects/plastic_click.ogg', 100, 0)
if(I.R.song_path)
SSjukeboxes.add_song(I.R)
return

/obj/item/mecha_parts/mecha_equipment/stereo/proc/eject_record(obj/item/record_disk/M) //BIG IRON EDIT -start- ejects a record as defined and removes it's song from the list
if(!M)
visible_message("no disk to eject")
return
playsound(src, 'sound/effects/disk_tray.ogg', 100, 0)
src.visible_message("<span class ='notice'> ejected the [selected_disk] from the [src]!</span>")
M.forceMove(get_turf(src))
SSjukeboxes.remove_song(M.R)
record_disks -= M
selected_disk = null

/obj/item/mecha_parts/mecha_equipment/stereo/ui_status(mob/user)
if(!SSjukeboxes.songs.len && !isobserver(user))
to_chat(user,"<span class='warning'>Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.</span>")
playsound(src, 'sound/misc/compiler-failure.ogg', 25, TRUE)
return UI_CLOSE
return ..()

/obj/item/mecha_parts/mecha_equipment/stereo/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Jukebox", name)
ui.open()

/obj/item/mecha_parts/mecha_equipment/stereo/ui_data(mob/user)
var/list/data = list()
data["active"] = active
data["songs"] = list()
for(var/datum/track/S in SSjukeboxes.songs)
var/list/track_data = list(
name = S.song_name
)
data["songs"] += list(track_data)
data["track_selected"] = null
data["track_length"] = null
data["track_beat"] = null
data["disks"] = list()
for(var/obj/item/record_disk/RD in record_disks)
var/list/tracks_data = list(
name = RD.name
)
data["disks"] += list(tracks_data)
data["disk_selected"] = null //BIG IRON EDIT- start more tracks data
data["disk_selected_lenght"] = null
data["disk_beat"] = null //BIG IRON EDIT -end
if(selection)
data["track_selected"] = selection.song_name
data["track_length"] = DisplayTimeText(selection.song_length)
data["track_beat"] = selection.song_beat
if(selected_disk)
data["disk_selected"] = selected_disk
data["disk_selected_length"] = DisplayTimeText(selected_disk.R.song_length)
data["disk_selected_beat"] = selected_disk.R.song_beat
data["volume"] = volume
return data

/obj/item/mecha_parts/mecha_equipment/stereo/ui_act(action, list/params)
. = ..()
if(.)
return

switch(action)
if("toggle")
if(QDELETED(src))
return
if(!active)
if(stop > world.time)
to_chat(usr, "<span class='warning'>Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].</span>")
playsound(src, 'sound/misc/compiler-failure.ogg', 50, TRUE)
return
activate_music()
START_PROCESSING(SSobj, src)
return TRUE
else
stop = 0
return TRUE
if("select_track")
if(active)
to_chat(usr, "<span class='warning'>Error: You cannot change the song until the current one is over.</span>")
return
var/list/available = list()
for(var/datum/track/S in SSjukeboxes.songs)
available[S.song_name] = S
var/selected = params["track"]
if(QDELETED(src) || !selected || !istype(available[selected], /datum/track))
return
selection = available[selected]
return TRUE
if("select_record")
if(!record_disks.len)
to_chat(usr, "<span class='warning'>Error: no tracks on the bin!.</span>")
return
var/list/obj/item/record_disk/availabledisks = list()
for(var/obj/item/record_disk/RR in record_disks)
availabledisks[RR.name] = RR
var/selecteddisk = params["record"]
if(QDELETED(src) || !selecteddisk)
return
selected_disk = availabledisks[selecteddisk]
updateUsrDialog()
if("eject_disk") // sanity check for the disk ejection
if(!record_disks.len)
to_chat(usr, "<span class='warning'>Error: no disks in trays.</span>")
return
if(!selected_disk)
to_chat(usr,"<span class='warning'>Error: no disk chosen.</span>" )
return
if(selection == selected_disk.R)
selection = null
eject_record(selected_disk)
return TRUE
if("set_volume")
var/new_volume = params["volume"]
if(new_volume == "reset")
volume = initial(volume)
return TRUE
else if(new_volume == "min")
volume = 0
return TRUE
else if(new_volume == "max")
volume = 100
return TRUE
else if(text2num(new_volume) != null)
volume = text2num(new_volume)
return TRUE

/obj/item/mecha_parts/mecha_equipment/stereo/proc/activate_music()
if(!selection)
visible_message("Track is no longer avaible")
return
var/jukeboxslottotake = SSjukeboxes.addjukebox(src, selection, 2)
if(jukeboxslottotake)
active = TRUE
update_icon()
START_PROCESSING(SSobj, src)
stop = world.time + selection.song_length
return TRUE
else
return FALSE

/obj/item/mecha_parts/mecha_equipment/stereo/get_equip_info()
var/output = ..()
if(output)
var/temp = ""
temp = "<a href='?src=[REF(src)];dashboard=1'>Dashboard</a>"
return "[output] [temp]"
return

/obj/item/mecha_parts/mecha_equipment/stereo/Topic(href,href_list)
..()
if(href_list["dashboard"])
var/mob/user = chassis.occupant
ui_interact(user)
return

/obj/item/mecha_parts/mecha_equipment/stereo/process()
if(active && world.time >= stop)
active = FALSE
dance_over()
playsound(src,'sound/machines/terminal_off.ogg',50,1)
update_icon()
stop = world.time + 100

/obj/item/mecha_parts/mecha_equipment/stereo/proc/dance_over()
var/position = SSjukeboxes.findjukeboxindex(src)
if(!position)
return
SSjukeboxes.removejukebox(position)
STOP_PROCESSING(SSobj, src)
rangers = list()

7 changes: 7 additions & 0 deletions code/game/mecha/equipment/weapons/mecha_ammo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,10 @@
round_term = "cluster"
direct_load = TRUE
ammo_type = "clusterbang"

/obj/item/mecha_ammo/minigun
name = "Minigun ammo pack"
desc = "A box of high caliber ammo, ready to be consumed in nano seconds. Cannot be primed by hand."
icon_state = "lmg"
rounds = 600
ammo_type = "minigun"
Loading

0 comments on commit 38f8f57

Please sign in to comment.