diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index ffe718cca79..88e7dd8b429 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -194,3 +194,17 @@ #define ui_adminbus_tdarena "2:4,13:26" #define ui_adminbus_tdgreen "3:6,13:26" #define ui_adminbus_tdobs "2:4,14:28" + +//Blob HUD +#define ui_blob_bg "1:0,1:0" +#define ui_blob_powerbar "1:0,5:0" +#define ui_blob_healthbar "15:14,5:0" +#define ui_blob_spawnblob "1:18,5:5" +#define ui_blob_spawnstrong "1:18,6:9" +#define ui_blob_spawnresource "1:18,7:13" +#define ui_blob_spawnfactory "1:18,8:17" +#define ui_blob_spawnnode "1:18,9:21" +#define ui_blob_spawncore "1:18,10:25" +#define ui_blob_ping "14:24,11:21" +#define ui_blob_rally "14:24,12:25" +#define ui_blob_taunt "14:24,13:29" diff --git a/code/_onclick/hud/adminbus.dm b/code/_onclick/hud/adminbus.dm index 074509bc398..665458ec483 100644 --- a/code/_onclick/hud/adminbus.dm +++ b/code/_onclick/hud/adminbus.dm @@ -1,210 +1,210 @@ /datum/hud/proc/adminbus_hud() - mymob.gui_icons.adminbus_bg = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_bg = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_bg.icon = 'icons/adminbus/fullscreen.dmi' mymob.gui_icons.adminbus_bg.icon_state = "HUD" mymob.gui_icons.adminbus_bg.name = "HUD" mymob.gui_icons.adminbus_bg.layer = 19 mymob.gui_icons.adminbus_bg.screen_loc = ui_adminbus_bg - mymob.gui_icons.adminbus_delete = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_delete = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_delete.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_delete.icon_state = "icon_delete" mymob.gui_icons.adminbus_delete.name = "Delete Bus" mymob.gui_icons.adminbus_delete.screen_loc = ui_adminbus_delete - mymob.gui_icons.adminbus_delmobs = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_delmobs = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_delmobs.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_delmobs.icon_state = "icon_delmobs" mymob.gui_icons.adminbus_delmobs.name = "Delete Mobs" mymob.gui_icons.adminbus_delmobs.screen_loc = ui_adminbus_delmobs - mymob.gui_icons.adminbus_spclowns = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_spclowns = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_spclowns.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_spclowns.icon_state = "icon_spclown" mymob.gui_icons.adminbus_spclowns.name = "Spawn Clowns" mymob.gui_icons.adminbus_spclowns.screen_loc = ui_adminbus_spclowns - mymob.gui_icons.adminbus_spcarps = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_spcarps = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_spcarps.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_spcarps.icon_state = "icon_spcarp" mymob.gui_icons.adminbus_spcarps.name = "Spawn Carps" mymob.gui_icons.adminbus_spcarps.screen_loc = ui_adminbus_spcarps - mymob.gui_icons.adminbus_spbears = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_spbears = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_spbears.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_spbears.icon_state = "icon_spbear" mymob.gui_icons.adminbus_spbears.name = "Spawn Bears" mymob.gui_icons.adminbus_spbears.screen_loc = ui_adminbus_spbears - mymob.gui_icons.adminbus_sptrees = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_sptrees = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_sptrees.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_sptrees.icon_state = "icon_sptree" mymob.gui_icons.adminbus_sptrees.name = "Spawn Trees" mymob.gui_icons.adminbus_sptrees.screen_loc = ui_adminbus_sptrees - mymob.gui_icons.adminbus_spspiders = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_spspiders = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_spspiders.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_spspiders.icon_state = "icon_spspider" mymob.gui_icons.adminbus_spspiders.name = "Spawn Spiders" mymob.gui_icons.adminbus_spspiders.screen_loc = ui_adminbus_spspiders - mymob.gui_icons.adminbus_spalien = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_spalien = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_spalien.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_spalien.icon_state = "icon_spalien" mymob.gui_icons.adminbus_spalien.name = "Spawn Large Alien Queen" mymob.gui_icons.adminbus_spalien.screen_loc = ui_adminbus_spalien - mymob.gui_icons.adminbus_loadsids = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_loadsids = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_loadsids.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_loadsids.icon_state = "icon_loadsids" mymob.gui_icons.adminbus_loadsids.name = "Spawn Loads of Captain Spare IDs" mymob.gui_icons.adminbus_loadsids.screen_loc = ui_adminbus_loadsids - mymob.gui_icons.adminbus_loadsmoney = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_loadsmoney = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_loadsmoney.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_loadsmoney.icon_state = "icon_loadsmone" mymob.gui_icons.adminbus_loadsmoney.name = "Spawn Loads of Money" mymob.gui_icons.adminbus_loadsmoney.screen_loc = ui_adminbus_loadsmone - mymob.gui_icons.adminbus_massrepair = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_massrepair = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_massrepair.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_massrepair.icon_state = "icon_massrepair" mymob.gui_icons.adminbus_massrepair.name = "Repair Surroundings" mymob.gui_icons.adminbus_massrepair.screen_loc = ui_adminbus_massrepair - mymob.gui_icons.adminbus_massrejuv = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_massrejuv = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_massrejuv.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_massrejuv.icon_state = "icon_massrejuv" mymob.gui_icons.adminbus_massrejuv.name = "Mass Rejuvination" mymob.gui_icons.adminbus_massrejuv.screen_loc = ui_adminbus_massrejuv - mymob.gui_icons.adminbus_hook = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_hook = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_hook.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_hook.icon_state = "icon_hook" mymob.gui_icons.adminbus_hook.name = "Singularity Hook" mymob.gui_icons.adminbus_hook.screen_loc = ui_adminbus_hook - mymob.gui_icons.adminbus_juke = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_juke = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_juke.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_juke.icon_state = "icon_jukebox" mymob.gui_icons.adminbus_juke.name = "Adminbus-mounted Jukebox" mymob.gui_icons.adminbus_juke.screen_loc = ui_adminbus_juke - mymob.gui_icons.adminbus_tele = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_tele = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_tele.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_tele.icon_state = "icon_teleport" mymob.gui_icons.adminbus_tele.name = "Teleportation" mymob.gui_icons.adminbus_tele.screen_loc = ui_adminbus_tele - mymob.gui_icons.adminbus_bumpers_1 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_bumpers_1 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_bumpers_1.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_bumpers_1.icon_state = "icon_bumpers_1-on" mymob.gui_icons.adminbus_bumpers_1.name = "Capture Mobs" mymob.gui_icons.adminbus_bumpers_1.screen_loc = ui_adminbus_bumpers_1 - mymob.gui_icons.adminbus_bumpers_2 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_bumpers_2 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_bumpers_2.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_bumpers_2.icon_state = "icon_bumpers_2-off" mymob.gui_icons.adminbus_bumpers_2.name = "Hit Mobs" mymob.gui_icons.adminbus_bumpers_2.screen_loc = ui_adminbus_bumpers_2 - mymob.gui_icons.adminbus_bumpers_3 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_bumpers_3 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_bumpers_3.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_bumpers_3.icon_state = "icon_bumpers_3-off" mymob.gui_icons.adminbus_bumpers_3.name = "Gib Mobs" mymob.gui_icons.adminbus_bumpers_3.screen_loc = ui_adminbus_bumpers_3 - mymob.gui_icons.adminbus_door_0 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_door_0 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_door_0.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_door_0.icon_state = "icon_door_0-on" mymob.gui_icons.adminbus_door_0.name = "Close Door" mymob.gui_icons.adminbus_door_0.screen_loc = ui_adminbus_door_0 - mymob.gui_icons.adminbus_door_1 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_door_1 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_door_1.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_door_1.icon_state = "icon_door_1-off" mymob.gui_icons.adminbus_door_1.name = "Open Door" mymob.gui_icons.adminbus_door_1.screen_loc = ui_adminbus_door_1 - mymob.gui_icons.adminbus_roadlights_0 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_roadlights_0 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_roadlights_0.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_roadlights_0.icon_state = "icon_lights_0-on" mymob.gui_icons.adminbus_roadlights_0.name = "Turn Off Headlights" mymob.gui_icons.adminbus_roadlights_0.screen_loc = ui_adminbus_roadlights_0 - mymob.gui_icons.adminbus_roadlights_1 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_roadlights_1 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_roadlights_1.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_roadlights_1.icon_state = "icon_lights_1-off" mymob.gui_icons.adminbus_roadlights_1.name = "Dipped Headlights" mymob.gui_icons.adminbus_roadlights_1.screen_loc = ui_adminbus_roadlights_1 - mymob.gui_icons.adminbus_roadlights_2 = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_roadlights_2 = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_roadlights_2.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_roadlights_2.icon_state = "icon_lights_2-off" mymob.gui_icons.adminbus_roadlights_2.name = "Main Headlights" mymob.gui_icons.adminbus_roadlights_2.screen_loc = ui_adminbus_roadlights_2 - mymob.gui_icons.adminbus_free = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_free = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_free.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_free.icon_state = "icon_free" mymob.gui_icons.adminbus_free.name = "Release Passengers" mymob.gui_icons.adminbus_free.screen_loc = ui_adminbus_free - mymob.gui_icons.adminbus_home = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_home = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_home.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_home.icon_state = "icon_home" mymob.gui_icons.adminbus_home.name = "Send Passengers Back Home" mymob.gui_icons.adminbus_home.screen_loc = ui_adminbus_home - mymob.gui_icons.adminbus_antag = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_antag = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_antag.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_antag.icon_state = "icon_antag" mymob.gui_icons.adminbus_antag.name = "Antag Madness!" mymob.gui_icons.adminbus_antag.screen_loc = ui_adminbus_antag - mymob.gui_icons.adminbus_dellasers = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_dellasers = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_dellasers.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_dellasers.icon_state = "icon_delgiven" mymob.gui_icons.adminbus_dellasers.name = "Delete the given Infinite Laser Guns" mymob.gui_icons.adminbus_dellasers.screen_loc = ui_adminbus_dellasers - mymob.gui_icons.adminbus_givelasers = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_givelasers = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_givelasers.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_givelasers.icon_state = "icon_givelasers" mymob.gui_icons.adminbus_givelasers.name = "Give Infinite Laser Guns to the Passengers" mymob.gui_icons.adminbus_givelasers.screen_loc = ui_adminbus_givelasers - mymob.gui_icons.adminbus_delbombs = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_delbombs = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_delbombs.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_delbombs.icon_state = "icon_delgiven" mymob.gui_icons.adminbus_delbombs.name = "Delete the given Fuse-Bombs" mymob.gui_icons.adminbus_delbombs.screen_loc = ui_adminbus_delbombs - mymob.gui_icons.adminbus_givebombs = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_givebombs = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_givebombs.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_givebombs.icon_state = "icon_givebombs" mymob.gui_icons.adminbus_givebombs.name = "Give Fuse-Bombs to the Passengers" mymob.gui_icons.adminbus_givebombs.screen_loc = ui_adminbus_givebombs - mymob.gui_icons.adminbus_tdred = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_tdred = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_tdred.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_tdred.icon_state = "icon_tdred" mymob.gui_icons.adminbus_tdred.name = "Send Passengers to the Thunderdome's Red Team" mymob.gui_icons.adminbus_tdred.screen_loc = ui_adminbus_tdred - mymob.gui_icons.adminbus_tdarena = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_tdarena = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_tdarena.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_tdarena.icon_state = "icon_tdarena" mymob.gui_icons.adminbus_tdarena.name = "Split the Passengers between the two Thunderdome Teams" mymob.gui_icons.adminbus_tdarena.screen_loc = ui_adminbus_tdarena - mymob.gui_icons.adminbus_tdgreen = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_tdgreen = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_tdgreen.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_tdgreen.icon_state = "icon_tdgreen" mymob.gui_icons.adminbus_tdgreen.name = "Send Passengers to the Thunderdome's Green Team" mymob.gui_icons.adminbus_tdgreen.screen_loc = ui_adminbus_tdgreen - mymob.gui_icons.adminbus_tdobs = getFromPool(/obj/screen) + mymob.gui_icons.adminbus_tdobs = getFromPool(/obj/screen/adminbus) mymob.gui_icons.adminbus_tdobs.icon = 'icons/adminbus/32x32.dmi' mymob.gui_icons.adminbus_tdobs.icon_state = "icon_tdobs" mymob.gui_icons.adminbus_tdobs.name = "Send Passengers to the Thunderdome's Observers' Lodge" @@ -249,7 +249,7 @@ ) for(var/i=1;i<=16;i++) - var/obj/screen/S = getFromPool(/obj/screen) + var/obj/screen/adminbus/S = getFromPool(/obj/screen/adminbus) S.icon = 'icons/adminbus/32x32.dmi' S.icon_state = "" S.screen_loc = "[12-round(i/2)]:[16*((i-1)%2)],14:16" diff --git a/code/_onclick/hud/blob.dm b/code/_onclick/hud/blob.dm new file mode 100644 index 00000000000..c6ef3e5b540 --- /dev/null +++ b/code/_onclick/hud/blob.dm @@ -0,0 +1,157 @@ + +/datum/hud/proc/blob_hud() + mymob.gui_icons.blob_bgs = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_bgs.icon = 'icons/mob/screen1_blob_fullscreen.dmi' + mymob.gui_icons.blob_bgs.icon_state = "backgrounds" + mymob.gui_icons.blob_bgs.name = "Blob HUD" + mymob.gui_icons.blob_bgs.layer = 19 + mymob.gui_icons.blob_bgs.screen_loc = ui_blob_bg + mymob.gui_icons.blob_bgs.mouse_opacity = 0 + + mymob.gui_icons.blob_coverLEFT = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_coverLEFT.icon = 'icons/mob/screen1_blob_fullscreen.dmi' + mymob.gui_icons.blob_coverLEFT.icon_state = "coverLEFT" + mymob.gui_icons.blob_coverLEFT.name = "Points" + mymob.gui_icons.blob_coverLEFT.layer = 21 + mymob.gui_icons.blob_coverLEFT.screen_loc = ui_blob_bg + mymob.gui_icons.blob_coverLEFT.maptext_x = 1 + mymob.gui_icons.blob_coverLEFT.maptext_y = 126 + + mymob.gui_icons.blob_coverRIGHT = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_coverRIGHT.icon = 'icons/mob/screen1_blob_fullscreen.dmi' + mymob.gui_icons.blob_coverRIGHT.icon_state = "coverRIGHT" + mymob.gui_icons.blob_coverRIGHT.name = "Health" + mymob.gui_icons.blob_coverRIGHT.layer = 21 + mymob.gui_icons.blob_coverRIGHT.screen_loc = ui_blob_bg + mymob.gui_icons.blob_coverRIGHT.maptext_x = 464 + mymob.gui_icons.blob_coverRIGHT.maptext_y = 126 + + mymob.gui_icons.blob_powerbar = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_powerbar.icon = 'icons/mob/screen1_blob_bars.dmi' + mymob.gui_icons.blob_powerbar.icon_state = "points" + mymob.gui_icons.blob_powerbar.name = "Points" + mymob.gui_icons.blob_powerbar.layer = 20 + mymob.gui_icons.blob_powerbar.screen_loc = ui_blob_powerbar + + mymob.gui_icons.blob_healthbar = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_healthbar.icon = 'icons/mob/screen1_blob_bars.dmi' + mymob.gui_icons.blob_healthbar.icon_state = "health" + mymob.gui_icons.blob_healthbar.name = "Health" + mymob.gui_icons.blob_healthbar.layer = 20 + mymob.gui_icons.blob_healthbar.screen_loc = ui_blob_healthbar + + mymob.gui_icons.blob_spawnblob = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_spawnblob.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_spawnblob.icon_state = "blob1" + mymob.gui_icons.blob_spawnblob.name = "Spawn Blob" + mymob.gui_icons.blob_spawnblob.layer = 22 + mymob.gui_icons.blob_spawnblob.screen_loc = ui_blob_spawnblob + + mymob.gui_icons.blob_spawnstrong = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_spawnstrong.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_spawnstrong.icon_state = "strong1" + mymob.gui_icons.blob_spawnstrong.name = "Spawn Strong Blob" + mymob.gui_icons.blob_spawnstrong.layer = 22 + mymob.gui_icons.blob_spawnstrong.screen_loc = ui_blob_spawnstrong + + mymob.gui_icons.blob_spawnresource = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_spawnresource.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_spawnresource.icon_state = "resource1" + mymob.gui_icons.blob_spawnresource.name = "Spawn Resource Blob" + mymob.gui_icons.blob_spawnresource.layer = 22 + mymob.gui_icons.blob_spawnresource.screen_loc = ui_blob_spawnresource + + mymob.gui_icons.blob_spawnfactory = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_spawnfactory.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_spawnfactory.icon_state = "factory1" + mymob.gui_icons.blob_spawnfactory.name = "Spawn Factory Blob" + mymob.gui_icons.blob_spawnfactory.layer = 22 + mymob.gui_icons.blob_spawnfactory.screen_loc = ui_blob_spawnfactory + + mymob.gui_icons.blob_spawnnode = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_spawnnode.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_spawnnode.icon_state = "node1" + mymob.gui_icons.blob_spawnnode.name = "Spawn Node Blob" + mymob.gui_icons.blob_spawnnode.layer = 22 + mymob.gui_icons.blob_spawnnode.screen_loc = ui_blob_spawnnode + + mymob.gui_icons.blob_spawncore = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_spawncore.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_spawncore.icon_state = "core1" + mymob.gui_icons.blob_spawncore.name = "Spawn Blob Core" + mymob.gui_icons.blob_spawncore.layer = 22 + mymob.gui_icons.blob_spawncore.screen_loc = ui_blob_spawncore + + mymob.gui_icons.blob_ping = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_ping.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_ping.icon_state = "ping" + mymob.gui_icons.blob_ping.name = "Call Overminds" + mymob.gui_icons.blob_ping.layer = 22 + mymob.gui_icons.blob_ping.screen_loc = ui_blob_ping + + mymob.gui_icons.blob_rally = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_rally.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_rally.icon_state = "rally" + mymob.gui_icons.blob_rally.name = "Rally Spores" + mymob.gui_icons.blob_rally.layer = 22 + mymob.gui_icons.blob_rally.screen_loc = ui_blob_rally + + mymob.gui_icons.blob_taunt = getFromPool(/obj/screen/specialblob) + mymob.gui_icons.blob_taunt.icon = 'icons/mob/screen1_blob.dmi' + mymob.gui_icons.blob_taunt.icon_state = "taunt" + mymob.gui_icons.blob_taunt.name = "Psionic Message" + mymob.gui_icons.blob_taunt.layer = 22 + mymob.gui_icons.blob_taunt.screen_loc = ui_blob_taunt + + mymob.client.reset_screen() + + mymob.client.screen += list( + mymob.gui_icons.blob_bgs, + mymob.gui_icons.blob_coverLEFT, + mymob.gui_icons.blob_coverRIGHT, + mymob.gui_icons.blob_powerbar, + mymob.gui_icons.blob_healthbar, + mymob.gui_icons.blob_spawnblob, + mymob.gui_icons.blob_spawnstrong, + mymob.gui_icons.blob_spawnresource, + mymob.gui_icons.blob_spawnfactory, + mymob.gui_icons.blob_spawnnode, + mymob.gui_icons.blob_spawncore, + mymob.gui_icons.blob_ping, + mymob.gui_icons.blob_rally, + mymob.gui_icons.blob_taunt, + ) + + for(var/i=1;i<=24;i++) + var/obj/screen/specialblob/S = getFromPool(/obj/screen/specialblob) + S.icon = 'icons/mob/screen1_blob.dmi' + S.icon_state = "" + var/total_offset = -16 + (i * 20) + S.screen_loc = "[1 + round(total_offset/32)]:[total_offset%32],15:0" + mymob.gui_icons.specialblobs[i] = S + + for(var/i=1;i<=24;i++) + mymob.client.screen += mymob.gui_icons.specialblobs[i] + +/* +/datum/hud/proc/remove_blob_hud() + for(var/i=1;i<=24;i++) + mymob.client.screen -= mymob.gui_icons.specialblobs[i] + + mymob.client.screen -= list( + mymob.gui_icons.blob_bgs, + mymob.gui_icons.blob_coverLEFT, + mymob.gui_icons.blob_coverRIGHT, + mymob.gui_icons.blob_powerbar, + mymob.gui_icons.blob_healthbar, + mymob.gui_icons.blob_spawnblob, + mymob.gui_icons.blob_spawnstrong, + mymob.gui_icons.blob_spawnresource, + mymob.gui_icons.blob_spawnfactory, + mymob.gui_icons.blob_spawnnode, + mymob.gui_icons.blob_spawncore, + mymob.gui_icons.blob_ping, + mymob.gui_icons.blob_rally, + mymob.gui_icons.blob_taunt, + ) +*/ \ No newline at end of file diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 018084a75d5..b7a70f6ed04 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -19,8 +19,6 @@ var/global/obj/screen/clicker/catcher = new() var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) var/obj/screen/lingchemdisplay - var/obj/screen/blobpwrdisplay - var/obj/screen/blobhealthdisplay var/obj/screen/vampire_blood_display // /vg/ var/obj/screen/r_hand_hud_object var/obj/screen/l_hand_hud_object @@ -45,8 +43,6 @@ var/global/obj/screen/clicker/catcher = new() disarm_intent = null help_intent = null lingchemdisplay = null - blobpwrdisplay = null - blobhealthdisplay = null vampire_blood_display = null r_hand_hud_object = null l_hand_hud_object = null @@ -146,8 +142,6 @@ var/global/obj/screen/clicker/catcher = new() robot_hud() else if(isobserver(mymob)) ghost_hud() - else if(isovermind(mymob)) - blob_hud() else if(isshade(mymob)) shade_hud() else if(isconstruct(mymob)) diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index 065f5d8438a..22579e9d4cc 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -64,25 +64,6 @@ /datum/hud/proc/brain_hud(ui_style = 'icons/mob/screen1_Midnight.dmi') -/datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen1_Midnight.dmi') - - - blobpwrdisplay = getFromPool(/obj/screen) - blobpwrdisplay.name = "blob power" - blobpwrdisplay.icon_state = "block" - blobpwrdisplay.screen_loc = ui_health - blobpwrdisplay.layer = 20 - - blobhealthdisplay = getFromPool(/obj/screen) - blobhealthdisplay.name = "blob health" - blobhealthdisplay.icon_state = "block" - blobhealthdisplay.screen_loc = ui_internal - blobhealthdisplay.layer = 20 - - mymob.client.reset_screen() - - mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay) - /datum/hud/proc/shade_hud() diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index c487d698a2a..383597e1502 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -28,6 +28,11 @@ maptext_height = 480 maptext_width = 480 +/obj/screen/adminbus + +/obj/screen/specialblob + var/obj/effect/blob/linked_blob = null + /obj/screen/schematics var/datum/rcd_schematic/ourschematic @@ -666,8 +671,12 @@ M.wearglasses(null) else if (istype(M.get_active_hand(), /obj/item/clothing/glasses)) M.wearglasses(M.get_active_hand()) + else + return 0 + return 1 -////////////ADMINBUS HUD ICONS//////////// +/obj/screen/adminbus/Click() + switch(name) if("Delete Bus") if(usr.locked_to && istype(usr.locked_to, /obj/structure/bed/chair/vehicle/adminbus)) var/obj/structure/bed/chair/vehicle/adminbus/A = usr.locked_to @@ -804,8 +813,51 @@ if(usr.locked_to && istype(usr.locked_to, /obj/structure/bed/chair/vehicle/adminbus)) var/obj/structure/bed/chair/vehicle/adminbus/A = usr.locked_to A.toggle_lights(usr,2) - else - return 0 + +/obj/screen/specialblob/Click() + switch(name) + if("Spawn Blob") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.expand_blob_power() + if("Spawn Strong Blob") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.create_shield_power() + if("Spawn Resource Blob") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.create_resource() + if("Spawn Factory Blob") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.create_factory() + if("Spawn Node Blob") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.create_node() + if("Spawn Blob Core") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.create_core() + if("Call Overminds") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.callblobs() + if("Rally Spores") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + overmind.rally_spores_power() + if("Psionic Message") + if(isovermind(usr)) + var/mob/camera/blob/overmind = usr + var/message = input(overmind,"Send a message to the crew.","Psionic Message") as null|text + if(message) + overmind.telepathy(message) + if("Jump to Blob") + if(isovermind(usr) && linked_blob) + var/mob/camera/blob/overmind = usr + overmind.loc = linked_blob.loc return 1 /obj/screen/inventory/Click() diff --git a/code/datums/ui_icons.dm b/code/datums/ui_icons.dm index cf6fb1f07a3..9472b196091 100644 --- a/code/datums/ui_icons.dm +++ b/code/datums/ui_icons.dm @@ -3,38 +3,55 @@ //Adminbus HUD stuff var/list/rearviews[16] - var/obj/screen/adminbus_bg = null - var/obj/screen/adminbus_delete = null - var/obj/screen/adminbus_delmobs = null - var/obj/screen/adminbus_spclowns = null - var/obj/screen/adminbus_spcarps = null - var/obj/screen/adminbus_spbears = null - var/obj/screen/adminbus_sptrees = null - var/obj/screen/adminbus_spspiders = null - var/obj/screen/adminbus_spalien = null - var/obj/screen/adminbus_loadsids = null - var/obj/screen/adminbus_loadsmoney = null - var/obj/screen/adminbus_massrepair = null - var/obj/screen/adminbus_massrejuv = null - var/obj/screen/adminbus_hook = null - var/obj/screen/adminbus_juke = null - var/obj/screen/adminbus_tele = null - var/obj/screen/adminbus_bumpers_1 = null - var/obj/screen/adminbus_bumpers_2 = null - var/obj/screen/adminbus_bumpers_3 = null - var/obj/screen/adminbus_door_0 = null - var/obj/screen/adminbus_door_1 = null - var/obj/screen/adminbus_roadlights_0 - var/obj/screen/adminbus_roadlights_1 - var/obj/screen/adminbus_roadlights_2 - var/obj/screen/adminbus_free = null - var/obj/screen/adminbus_home = null - var/obj/screen/adminbus_antag = null - var/obj/screen/adminbus_dellasers = null - var/obj/screen/adminbus_givelasers = null - var/obj/screen/adminbus_delbombs = null - var/obj/screen/adminbus_givebombs = null - var/obj/screen/adminbus_tdred = null - var/obj/screen/adminbus_tdarena = null - var/obj/screen/adminbus_tdgreen = null - var/obj/screen/adminbus_tdobs = null + var/obj/screen/adminbus/adminbus_bg = null + var/obj/screen/adminbus/adminbus_delete = null + var/obj/screen/adminbus/adminbus_delmobs = null + var/obj/screen/adminbus/adminbus_spclowns = null + var/obj/screen/adminbus/adminbus_spcarps = null + var/obj/screen/adminbus/adminbus_spbears = null + var/obj/screen/adminbus/adminbus_sptrees = null + var/obj/screen/adminbus/adminbus_spspiders = null + var/obj/screen/adminbus/adminbus_spalien = null + var/obj/screen/adminbus/adminbus_loadsids = null + var/obj/screen/adminbus/adminbus_loadsmoney = null + var/obj/screen/adminbus/adminbus_massrepair = null + var/obj/screen/adminbus/adminbus_massrejuv = null + var/obj/screen/adminbus/adminbus_hook = null + var/obj/screen/adminbus/adminbus_juke = null + var/obj/screen/adminbus/adminbus_tele = null + var/obj/screen/adminbus/adminbus_bumpers_1 = null + var/obj/screen/adminbus/adminbus_bumpers_2 = null + var/obj/screen/adminbus/adminbus_bumpers_3 = null + var/obj/screen/adminbus/adminbus_door_0 = null + var/obj/screen/adminbus/adminbus_door_1 = null + var/obj/screen/adminbus/adminbus_roadlights_0 + var/obj/screen/adminbus/adminbus_roadlights_1 + var/obj/screen/adminbus/adminbus_roadlights_2 + var/obj/screen/adminbus/adminbus_free = null + var/obj/screen/adminbus/adminbus_home = null + var/obj/screen/adminbus/adminbus_antag = null + var/obj/screen/adminbus/adminbus_dellasers = null + var/obj/screen/adminbus/adminbus_givelasers = null + var/obj/screen/adminbus/adminbus_delbombs = null + var/obj/screen/adminbus/adminbus_givebombs = null + var/obj/screen/adminbus/adminbus_tdred = null + var/obj/screen/adminbus/adminbus_tdarena = null + var/obj/screen/adminbus/adminbus_tdgreen = null + var/obj/screen/adminbus/adminbus_tdobs = null + + //Blob HUD stuff + var/list/specialblobs[24] + var/obj/screen/specialblob/blob_bgs = null + var/obj/screen/specialblob/blob_coverLEFT = null + var/obj/screen/specialblob/blob_coverRIGHT = null + var/obj/screen/specialblob/blob_powerbar = null + var/obj/screen/specialblob/blob_healthbar = null + var/obj/screen/specialblob/blob_spawnblob = null + var/obj/screen/specialblob/blob_spawnstrong = null + var/obj/screen/specialblob/blob_spawnresource = null + var/obj/screen/specialblob/blob_spawnfactory = null + var/obj/screen/specialblob/blob_spawnnode = null + var/obj/screen/specialblob/blob_spawncore = null + var/obj/screen/specialblob/blob_ping = null + var/obj/screen/specialblob/blob_rally = null + var/obj/screen/specialblob/blob_taunt = null diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 79e5a3cdbc7..e205bde0121 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -92,7 +92,7 @@ if(blob_looks[looks] == 64) anim(target = loc, a_icon = icon, flick_anim = "corepulse", sleeptime = 15, lay = 12, offX = -16, offY = -16, alph = 200) for(var/mob/M in viewers(src)) - M.playsound_local(loc, 'sound/effects/blob_pulse.ogg', 50, 0, null, FALLOFF_SOUNDS, 0) + M.playsound_local(loc, adminblob_beat, 50, 0, null, FALLOFF_SOUNDS, 0) var/turf/T = get_turf(overmind) //The overmind's mind can expand the blob var/obj/effect/blob/O = locate() in T //As long as it is 'thinking' about a blob already @@ -145,6 +145,11 @@ B.key = C.key B.blob_core = src src.overmind = B + + B.special_blobs += src + B.hud_used.blob_hud() + B.update_specialblobs() + if(!B.blob_core.creator)//If this core is the first of its lineage (created by game mode/event/admins, instead of another overmind) it gets to choose its looks. var/new_name = "Blob Overmind ([rand(1, 999)])" B.name = new_name @@ -155,7 +160,8 @@ B.verbs += /mob/camera/blob/proc/create_core spawn() - var/chosen = input(B,"Select a blob looks", "Blob Looks", blob_looks[1]) as null|anything in blob_looks + var/can_choose_from = blob_looks - "adminbus" + var/chosen = input(B,"Select a blob looks", "Blob Looks", blob_looks[1]) as null|anything in can_choose_from if(chosen) for(var/obj/effect/blob/nearby_blob in range(src,5)) nearby_blob.looks = chosen @@ -164,10 +170,14 @@ var/new_name = "Blob Cerebrate ([rand(1, 999)])" B.name = new_name B.real_name = new_name + B.gui_icons.blob_spawncore.icon_state = "" + B.gui_icons.blob_spawncore.name = "" for(var/mob/camera/blob/O in blob_overminds) if(O != B) to_chat(O,"A new blob cerebrate has started thinking inside a blob core! [B] joins the blob! (JUMP)") + + if(istype(ticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/mode = ticker.mode mode.infected_crew += B.mind diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index c1739e98619..5287979b936 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -52,6 +52,8 @@ S.Die() if(!manual_remove && overmind) to_chat(overmind,"A factory blob that you had created has been destroyed. (JUMP)") + overmind.special_blobs -= src + overmind.update_specialblobs() ..() /obj/effect/blob/factory/update_icon(var/spawnend = 0) diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index eb04dc2c43c..46e0f29253c 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -28,6 +28,8 @@ blob_nodes -= src if(!manual_remove && overmind) to_chat(overmind,"A node blob that you had created has been destroyed. (JUMP)") + overmind.special_blobs -= src + overmind.update_specialblobs() processing_objects.Remove(src) ..() @@ -37,7 +39,7 @@ if(blob_looks[looks] == 64) anim(target = loc, a_icon = icon, flick_anim = "nodepulse", sleeptime = 15, lay = 12, offX = -16, offY = -16, alph = 150) for(var/mob/M in viewers(src)) - M.playsound_local(loc, 'sound/effects/blob_pulse.ogg', 50, 0, null, FALLOFF_SOUNDS, 0) + M.playsound_local(loc, adminblob_beat, 50, 0, null, FALLOFF_SOUNDS, 0) for(var/i = 1; i < 8; i += i) Pulse(5, i) diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm index 829327b3c07..61855a72866 100644 --- a/code/game/gamemodes/blob/blobs/resource.dm +++ b/code/game/gamemodes/blob/blobs/resource.dm @@ -24,6 +24,8 @@ blob_resources -= src if(!manual_remove && overmind) to_chat(overmind,"You lost a resource blob. (JUMP)") + overmind.special_blobs -= src + overmind.update_specialblobs() ..() /obj/effect/blob/resource/update_health() @@ -40,6 +42,8 @@ if(B) to_chat(B,"You take control of the resource blob.") overmind = B + B.special_blobs += src + B.update_specialblobs() update_icon() ..() diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index c75ef4cc1f8..edc9997a679 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -29,7 +29,8 @@ /obj/effect/blob/shield/Cross(atom/movable/mover, turf/target, height=1.5, air_group = 0) if(istype(mover) && mover.checkpass(PASSBLOB)) return 1 - mover.Bump(src) //Only automatic for dense objects + if(mover) + mover.Bump(src) //Only automatic for dense objects return 0 /obj/effect/blob/shield/run_action() diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 741ffc4dccc..3a07cd59ac7 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -20,6 +20,8 @@ var/blob_warning = 0 + var/list/special_blobs = list() + /mob/camera/blob/New() blob_overminds += src ..() @@ -70,8 +72,14 @@ /mob/camera/blob/proc/update_health() - if(blob_core) - hud_used.blobhealthdisplay.maptext = "
[blob_core.health]
" + if(blob_core && hud_used) + var/matrix/M = matrix() + M.Scale(1,blob_core.health/blob_core.maxhealth) + var/total_offset = 60 + (100*(blob_core.health/blob_core.maxhealth)) + hud_used.mymob.gui_icons.blob_healthbar.transform = M + hud_used.mymob.gui_icons.blob_healthbar.screen_loc = "15:14,[round(total_offset/32)]:[total_offset%32]" + hud_used.mymob.gui_icons.blob_coverRIGHT.maptext = "[blob_core.health]" + var/severity = 0 switch(round(blob_core.health)) if(167 to 199) @@ -86,6 +94,12 @@ severity = 5 if(-INFINITY to 33) severity = 6 + + if(severity >= 5) + hud_used.mymob.gui_icons.blob_healthbar.icon_state = "healthcrit" + else + hud_used.mymob.gui_icons.blob_healthbar.icon_state = "health" + if(severity > 0) overlay_fullscreen("damage", /obj/screen/fullscreen/brute, severity) else @@ -94,9 +108,42 @@ /mob/camera/blob/proc/add_points(var/points) if(points != 0) blob_points = Clamp(blob_points + points, 0, max_blob_points) - //sanity for manual spawned blob cameras + + //Updating the HUD if(hud_used) - hud_used.blobpwrdisplay.maptext = "
[src.blob_points]
" + var/matrix/M = matrix() + M.Scale(1,blob_points/max_blob_points) + var/total_offset = 60 + (100*(blob_points/max_blob_points)) + hud_used.mymob.gui_icons.blob_powerbar.transform = M + hud_used.mymob.gui_icons.blob_powerbar.screen_loc = "1:0,[round(total_offset/32)]:[total_offset%32]" + hud_used.mymob.gui_icons.blob_coverLEFT.maptext = "[blob_points]" + hud_used.mymob.gui_icons.blob_coverLEFT.maptext_x = 4 + if(blob_points >= 100) + hud_used.mymob.gui_icons.blob_coverLEFT.maptext_x = 1 + + hud_used.mymob.gui_icons.blob_spawnblob.color = grayscale + hud_used.mymob.gui_icons.blob_spawnstrong.color = grayscale + hud_used.mymob.gui_icons.blob_spawnresource.color = grayscale + hud_used.mymob.gui_icons.blob_spawnfactory.color = grayscale + hud_used.mymob.gui_icons.blob_spawnnode.color = grayscale + hud_used.mymob.gui_icons.blob_spawncore.color = grayscale + hud_used.mymob.gui_icons.blob_rally.color = grayscale + hud_used.mymob.gui_icons.blob_taunt.color = grayscale + + if(blob_points >= 5) + hud_used.mymob.gui_icons.blob_spawnblob.color = null + hud_used.mymob.gui_icons.blob_rally.color = null + if(blob_points >= 10) + hud_used.mymob.gui_icons.blob_spawnstrong.color = null + if(blob_points >= 15) + hud_used.mymob.gui_icons.blob_taunt.color = null + if(blob_points >= 40) + hud_used.mymob.gui_icons.blob_spawnresource.color = null + if(blob_points >= 60) + hud_used.mymob.gui_icons.blob_spawnfactory.color = null + hud_used.mymob.gui_icons.blob_spawnnode.color = null + if(blob_points >= 100) + hud_used.mymob.gui_icons.blob_spawncore.color = null /mob/camera/blob/say(var/message) if (!message) @@ -191,3 +238,30 @@ // Update on_moved listeners. INVOKE_EVENT(on_moved,list("loc"=NewLoc)) + +/mob/camera/blob/proc/update_specialblobs() + if(client && gui_icons) + for(var/i=1;i<=24;i++) + client.screen -= gui_icons.specialblobs[i] + var/obj/screen/specialblob/S = gui_icons.specialblobs[i] + var/obj/effect/blob/B = null + if(i<=special_blobs.len) + B = special_blobs[i] + if(!B) + S.icon_state = "" + S.name = "" + S.linked_blob = null + else + switch(B.type) + if(/obj/effect/blob/core) + S.icon_state = "smallcore" + if(/obj/effect/blob/resource) + S.icon_state = "smallresource" + if(/obj/effect/blob/factory) + S.icon_state = "smallfactory" + if(/obj/effect/blob/node) + S.icon_state = "smallnode" + S.name = "Jump to Blob" + S.linked_blob = B + gui_icons.specialblobs[i] = S + client.screen += gui_icons.specialblobs[i] diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index d416d858402..33070875deb 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -94,6 +94,8 @@ var/obj/effect/blob/resource/R = locate() in T if(R) R.overmind = src + special_blobs += R + update_specialblobs() return /mob/camera/blob/proc/create_core() @@ -162,6 +164,8 @@ var/obj/effect/blob/node/N = locate() in T if(N) N.overmind = src + special_blobs += N + update_specialblobs() return @@ -196,6 +200,8 @@ var/obj/effect/blob/factory/F = locate() in T if(F) F.overmind = src + special_blobs += F + update_specialblobs() return diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index ffeba2dfd40..8a28ab9b4b2 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -261,6 +261,8 @@ var/list/blob_looks icon = 'icons/mob/blob_64x64.dmi' if("classic") icon = 'icons/mob/blob.dmi' + if("adminbus") + icon = adminblob_icon //<----------------------------------------------------------------------------DEAR SPRITERS, THIS IS WHERE YOU ADD YOUR NEW BLOB DMIs /*EXAMPLES if("fleshy") @@ -275,6 +277,7 @@ var/list/blob_looks var/list/blob_looks = list( "new" = 64, "classic" = 32, + "adminbus" = adminblob_size, ) //<---------------------------------------ALSO ADD THE NAME OF YOUR BLOB LOOKS HERE, AS WELL AS THE RESOLUTION OF THE DMIS (64 or 32) diff --git a/code/game/objects/structures/vehicles/adminbus.dm b/code/game/objects/structures/vehicles/adminbus.dm index 6ad5de7a17b..008510d2da8 100644 --- a/code/game/objects/structures/vehicles/adminbus.dm +++ b/code/game/objects/structures/vehicles/adminbus.dm @@ -387,7 +387,7 @@ for(var/i=1;i<=MAX_CAPACITY;i++) var/mob/living/M = occupant M.client.screen -= M.gui_icons.rearviews[i] - var/obj/screen/S = M.gui_icons.rearviews[i] + var/obj/screen/adminbus/S = M.gui_icons.rearviews[i] var/icon/passenger_img = null var/atom/A = null if(i<=passengers.len) diff --git a/code/global.dm b/code/global.dm index 4c9a5bf7764..7168b693cb2 100644 --- a/code/global.dm +++ b/code/global.dm @@ -404,3 +404,11 @@ var/global/hardcore_mode = 0 //Global list of all unsimulated mineral turfs for xenoarch var/global/list/mineral_turfs = list() var/global/list/static_list = list('sound/effects/static/static1.ogg','sound/effects/static/static2.ogg','sound/effects/static/static3.ogg','sound/effects/static/static4.ogg','sound/effects/static/static5.ogg',) + +//Used to set an atom's color var to "grayscale". The magic of color matrixes. +var/list/grayscale = list(0.3,0.3,0.3,0,0.59,0.59,0.59,0,0.11,0.11,0.11,0,0,0,0,1,0,0,0,0) + +//For adminbus blob looks +var/adminblob_icon = null +var/adminblob_size = 64 +var/adminblob_beat = 'sound/effects/blob_pulse.ogg' diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 47289ac0b49..7b13ac728f6 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1042,12 +1042,32 @@ var/list/admin_verbs_mod = list( set name = "Set Blob Looks" set category = "Fun" - var/chosen = input("This will change the looks of every blob currently in the world.", "Blob Looks", blob_looks[1]) as null|anything in blob_looks + var/to_choose_from = list("ADMINBUS (custom DMI upload)") + to_choose_from += blob_looks - "adminbus" + var/chosen = input("This will change the looks of every blob currently in the world.", "Blob Looks", blob_looks[1]) as null|anything in to_choose_from - if(chosen) - for(var/obj/effect/blob/B in blobs) - B.looks = chosen - B.update_looks(1) + if(!chosen) + return + + if(chosen == "ADMINBUS (custom DMI upload)") + adminblob_icon = input("Pick Icon:","Icon") as icon + if(!adminblob_icon) + return + adminblob_size = text2num(alert("Which size are those icons?","","64","32")) + + if((adminblob_size == 64) && (alert("Do you want to use a custom Pulse soundfile?","","Yes","No") == "Yes")) + adminblob_beat = input("Pick Soundfile (DO NOT USE AN OVERLY LONG SOUNDFILE UNLESS YOU ARE READY TO FACE THE CONSEQUENCES):","(DO NOT USE AN OVERLY LONG SOUNDFILE UNLESS YOU ARE READY TO FACE THE CONSEQUENCES)") as file + else + adminblob_beat = 'sound/effects/blob_pulse.ogg' + + blob_looks["adminbus"] = adminblob_size + chosen = "adminbus" + else + adminblob_icon = null + + for(var/obj/effect/blob/B in blobs) + B.looks = chosen + B.update_looks(1) log_admin("[key_name(src)] set all blobs to use the \"[chosen]\" look.") message_admins("[key_name_admin(src)] set all blobs to use the \"[chosen]\" look.") diff --git a/html/changelogs/DeityLink_9948.yml b/html/changelogs/DeityLink_9948.yml new file mode 100644 index 00000000000..e1a4538f43a --- /dev/null +++ b/html/changelogs/DeityLink_9948.yml @@ -0,0 +1,6 @@ +author: Deity Link +delete-after: true +changes: + - rscadd: (BLOB HUD) Blob Overminds now have their own amazing custom HUD. Points gauge on the left, Health gauge on the right. The health gauge start flashing when it gets low. + - rscadd: (BLOB HUD) Buttons that require more points than you currently have appear grayscale. + - rscadd: (BLOB HUD) You can always jump back to your core using the small button to the top left. The first 24 special blobs that you've created (not counting the ones that got destroyed) also appear at the top, and you can quickly teleport from one to another by clicking them. diff --git a/icons/mob/screen1_blob.dmi b/icons/mob/screen1_blob.dmi new file mode 100644 index 00000000000..4fb5cb66da6 Binary files /dev/null and b/icons/mob/screen1_blob.dmi differ diff --git a/icons/mob/screen1_blob_bars.dmi b/icons/mob/screen1_blob_bars.dmi new file mode 100644 index 00000000000..8215eb4e3fc Binary files /dev/null and b/icons/mob/screen1_blob_bars.dmi differ diff --git a/icons/mob/screen1_blob_fullscreen.dmi b/icons/mob/screen1_blob_fullscreen.dmi new file mode 100644 index 00000000000..237a791b441 Binary files /dev/null and b/icons/mob/screen1_blob_fullscreen.dmi differ diff --git a/vgstation13.dme b/vgstation13.dme index c62f0f26941..16781a339da 100644 --- a/vgstation13.dme +++ b/vgstation13.dme @@ -63,6 +63,7 @@ #include "code\_onclick\hud\ai.dm" #include "code\_onclick\hud\alien.dm" #include "code\_onclick\hud\alien_larva.dm" +#include "code\_onclick\hud\blob.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\hud.dm" #include "code\_onclick\hud\human.dm"