diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index aa5a9e000c..19bd2b9c53 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -33,6 +33,9 @@ defence_mode_possible = 1 + icon_scale_x = 1.5 + icon_scale_y = 1.5 + /* /obj/mecha/combat/durand/New() ..() diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 0323124c47..1f9d4a0b6e 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -31,6 +31,9 @@ overload_possible = 1 + icon_scale_x = 1.35 + icon_scale_y = 1.35 + //Not quite sure how to move those yet. /obj/mecha/combat/gygax/get_commands() var/output = {"
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index e2c0b9467a..fd0442a294 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -44,6 +44,9 @@ /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster ) + icon_scale_x = 1.5 + icon_scale_y = 1.5 + /obj/mecha/combat/marauder/seraph desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." name = "Seraph" diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index bec2b1a6c3..c716b1f33e 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -49,6 +49,9 @@ ..() return +/obj/item/mecha_parts/mecha_equipment/proc/add_equip_overlay(obj/mecha/M as obj) + return + /obj/item/mecha_parts/mecha_equipment/proc/update_chassis_page() if(chassis) send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) diff --git a/code/game/mecha/equipment/tools/repair_droid.dm b/code/game/mecha/equipment/tools/repair_droid.dm index 7cd8ebd9ab..acae64142f 100644 --- a/code/game/mecha/equipment/tools/repair_droid.dm +++ b/code/game/mecha/equipment/tools/repair_droid.dm @@ -26,9 +26,10 @@ pr_repair_droid = null ..() -/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) +/obj/item/mecha_parts/mecha_equipment/repair_droid/add_equip_overlay(obj/mecha/M as obj) ..() - droid_overlay = new(src.icon, icon_state = "repair_droid") + if(!droid_overlay) + droid_overlay = new(src.icon, icon_state = "repair_droid") M.add_overlay(droid_overlay) return diff --git a/code/game/mecha/equipment/tools/shield.dm b/code/game/mecha/equipment/tools/shield.dm index ce0c43e7da..0a50869e88 100644 --- a/code/game/mecha/equipment/tools/shield.dm +++ b/code/game/mecha/equipment/tools/shield.dm @@ -37,15 +37,19 @@ my_shield = null ..() +/obj/item/mecha_parts/mecha_equipment/combat_shield/add_equip_overlay(obj/mecha/M as obj) + ..() + if(!drone_overlay) + drone_overlay = new(src.icon, icon_state = "shield_droid") + M.overlays += drone_overlay + return + /obj/item/mecha_parts/mecha_equipment/combat_shield/attach(obj/mecha/M as obj) ..() if(chassis) my_shield.shield_health = 0 my_shield.my_mecha = chassis my_shield.forceMove(chassis) - - drone_overlay = new(src.icon, icon_state = "shield_droid") - M.overlays += drone_overlay return /obj/item/mecha_parts/mecha_equipment/combat_shield/detach() diff --git a/code/game/mecha/equipment/tools/syringe_gun.dm b/code/game/mecha/equipment/tools/syringe_gun.dm index 7449d80c0f..1658a01df6 100644 --- a/code/game/mecha/equipment/tools/syringe_gun.dm +++ b/code/game/mecha/equipment/tools/syringe_gun.dm @@ -467,11 +467,15 @@ if(enabled) set_ready_state(0) log_message("Activated.") - chassis.overlays += drone_overlay else set_ready_state(1) log_message("Deactivated.") - chassis.overlays -= drone_overlay + +/obj/item/mecha_parts/mecha_equipment/crisis_drone/add_equip_overlay(obj/mecha/M as obj) + ..() + if(enabled) + M.add_overlay(drone_overlay) + return /obj/item/mecha_parts/mecha_equipment/crisis_drone/Topic(href, href_list) ..() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 548bb0fbe9..6b925b564e 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -209,6 +209,11 @@ var/obj/item/mecha_parts/mecha_equipment/ME = new path(src) ME.attach(src) +<<<<<<< HEAD +======= + update_transform() + +>>>>>>> 95ea4f6... Mech Appearance Update (#7818) /obj/mecha/drain_power(var/drain_check) if(drain_check) @@ -1576,11 +1581,12 @@ src.verbs += /obj/mecha/verb/eject src.Entered(mmi_as_oc) src.Move(src.loc) - src.icon_state = src.reset_icon() + update_icon() set_dir(dir_in) src.log_message("[mmi_as_oc] moved in as pilot.") if(!hasInternalDamage()) src.occupant << sound('sound/mecha/nominal.ogg',volume=50) + update_icon() return 1 else return 0 @@ -1883,11 +1889,15 @@ src.forceMove(src.loc) src.verbs += /obj/mecha/verb/eject src.log_append_to_last("[H] moved in as pilot.") +<<<<<<< HEAD src.icon_state = src.reset_icon() //VOREStation Edit Add if(occupant.hud_used) minihud = new (occupant.hud_used, src) //VOREStation Edit Add End +======= + update_icon() +>>>>>>> 95ea4f6... Mech Appearance Update (#7818) //This part removes all the verbs if you don't have them the _possible on your mech. This is a little clunky, but it lets you just add that to any mech. //And it's not like this 10yo code wasn't clunky before. @@ -2003,7 +2013,7 @@ occupant.clear_alert("mech damage") occupant.in_enclosed_vehicle = 0 occupant = null - icon_state = src.reset_icon()+"-open" + update_icon() set_dir(dir_in) verbs -= /obj/mecha/verb/eject @@ -2663,13 +2673,6 @@ return 1 return 0 -/obj/mecha/proc/reset_icon() - if (initial_icon) - icon_state = initial_icon - else - icon_state = initial(icon_state) - return icon_state - //This is for mobs mostly. /obj/mecha/attack_generic(var/mob/user, var/damage, var/attack_message) diff --git a/code/game/mecha/mecha_appearance.dm b/code/game/mecha/mecha_appearance.dm new file mode 100644 index 0000000000..5136ef070b --- /dev/null +++ b/code/game/mecha/mecha_appearance.dm @@ -0,0 +1,65 @@ + + +/obj/mecha + // Show the pilot. + var/show_pilot = FALSE + + // The state of the 'face', or the thing that overlays on the pilot. If this isn't set, it will probably look really weird. + var/face_state = null + var/icon/face_overlay + + var/icon/pilot_image + + // How many pixels do we bump the pilot upward? + var/pilot_lift = 0 + +/obj/mecha/update_transform() + // Now for the regular stuff. + var/matrix/M = matrix() + M.Scale(icon_scale_x, icon_scale_y) + M.Translate(0, 16*(icon_scale_y-1)) + animate(src, transform = M, time = 10) + return + +/obj/mecha/update_icon() + if(!initial_icon) + initial_icon = initial(icon_state) + + if(occupant) + icon_state = initial_icon + else + icon_state = "[initial_icon]-open" + + cut_overlays() + + if(show_pilot) + if(occupant) + pilot_image = getCompoundIcon(occupant) + + if(!istype(occupant, /mob/living/carbon/brain)) + + var/icon/Cutter + + if("[initial_icon]_cutter" in icon_states(icon)) + Cutter = new(src.icon, "[initial_icon]_cutter") + + if(Cutter) + pilot_image.Blend(Cutter, ICON_MULTIPLY, y = (-1 * pilot_lift)) + + var/image/Pilot = image(pilot_image) + + Pilot.pixel_y = pilot_lift + + add_overlay(Pilot) + else + pilot_image = null + + if(face_state && !face_overlay) + face_overlay = new(src.icon, icon_state = face_state) + + if(face_overlay) + add_overlay(face_overlay) + + for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) + ME.add_equip_overlay(src) + return diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index dbba0cd251..4db6332cb1 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -17,6 +17,9 @@ step_energy_drain = 6 var/obj/item/clothing/glasses/hud/health/mech/hud + icon_scale_x = 1.2 + icon_scale_y = 1.2 + /obj/mecha/medical/odysseus/New() ..() hud = new /obj/item/clothing/glasses/hud/health/mech(src) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index aff19e301d..def044c9bb 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -24,6 +24,9 @@ /obj/item/mecha_parts/component/electrical ) + icon_scale_x = 1.2 + icon_scale_y = 1.2 + /obj/mecha/working/ripley/Destroy() for(var/atom/movable/A in src.cargo) A.loc = loc @@ -92,6 +95,20 @@ for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily qdel (B) +/obj/mecha/working/ripley/antique + name = "APLU \"Geiger\"" + desc = "You can't beat the classics." + icon_state = "ripley-old" + initial_icon = "ripley-old" + + show_pilot = TRUE + pilot_lift = 5 + + max_utility_equip = 1 + max_universal_equip = 3 + + icon_scale_x = 1 + icon_scale_y = 1 //Vorestation Edit Start diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index 223c9a2018..45430a41c9 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -241,7 +241,7 @@ M.initial_icon = new_icon if(new_icon_file) M.icon = new_icon_file - M.reset_icon() + M.update_icon() use(1, user) /obj/mecha/attackby(var/obj/item/weapon/W, var/mob/user) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f47566279a..e963539aff 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -286,6 +286,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(part.transparent) //VOREStation Edit. For better slime limbs. Avoids using solid var due to limb dropping. icon_key += "_t" //VOREStation Edit. + if(istype(tail_style, /datum/sprite_accessory/tail/taur)) + icon_key += tail_style.clip_mask_state + icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" var/icon/base_icon if(human_icon_cache[icon_key]) @@ -295,10 +298,26 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() var/obj/item/organ/external/chest = get_organ(BP_TORSO) base_icon = chest.get_icon() + var/icon/Cutter = null + + if(istype(tail_style, /datum/sprite_accessory/tail/taur)) // Tail icon 'cookie cutters' are filled in where icons are preserved. We need to invert that. + Cutter = new(icon = tail_style.icon, icon_state = tail_style.clip_mask) + + Cutter.Blend("#000000", ICON_MULTIPLY) // Make it all black. + + Cutter.SwapColor("#00000000", "#FFFFFFFF") // Everywhere empty, make white. + Cutter.SwapColor("#000000FF", "#00000000") // Everywhere black, make empty. + + Cutter.Blend("#000000", ICON_MULTIPLY) // Black again. + for(var/obj/item/organ/external/part in organs) if(isnull(part) || part.is_stump() || part.is_hidden_by_tail()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff. continue var/icon/temp = part.get_icon(skeleton) + + if((part.organ_tag in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) && Cutter) + temp.Blend(Cutter, ICON_AND, x = -16) + //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) if(part.icon_position & (LEFT | RIGHT)) diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi index 65dfa98237..44f6047eeb 100644 Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ diff --git a/vorestation.dme b/vorestation.dme index bf9150e85e..b410e9fe49 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -948,6 +948,7 @@ #include "code\game\mecha\mech_sensor.dm" #include "code\game\mecha\mecha.dm" #include "code\game\mecha\mecha_actions.dm" +#include "code\game\mecha\mecha_appearance.dm" #include "code\game\mecha\mecha_construction_paths.dm" #include "code\game\mecha\mecha_control_console.dm" #include "code\game\mecha\mecha_helpers.dm"