Renames/Moves a bunch of mech variables and defines as well as moving tool acts to tool act. (#46000)

Changes some stuff in mech code:

state renamed to construction_state

magic state numbers changed to defines

mechadefines moved into their own file as well as putting a MECHA in front of every single one to avoid conflicts (a define just called MELEE is a dumb idea)

tool interactions in attackby moved to tool_acts
Why It's Good For The Game

I still haven't given up on saving mech code.
This commit is contained in:
nemvar
2019-08-26 10:45:34 +02:00
committed by oranges
parent d3bc669a21
commit 7edab00a57
11 changed files with 135 additions and 115 deletions
+18
View File
@@ -0,0 +1,18 @@
#define MECHA_INT_FIRE (1<<0)
#define MECHA_INT_TEMP_CONTROL (1<<1)
#define MECHA_INT_SHORT_CIRCUIT (1<<2)
#define MECHA_INT_TANK_BREACH (1<<3)
#define MECHA_INT_CONTROL_LOST (1<<4)
#define MECHA_MELEE (1 << 0)
#define MECHA_RANGED (1 << 1)
#define MECHA_FRONT_ARMOUR 1
#define MECHA_SIDE_ARMOUR 2
#define MECHA_BACK_ARMOUR 3
#define MECHA_LOCKED 0
#define MECHA_SECURE_BOLTS 1
#define MECHA_LOOSE_BOLTS 2
#define MECHA_OPEN_HATCH 3
#define MECHA_UNSECURE_CELL 4
+4 -3
View File
@@ -11,7 +11,8 @@
var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff)
var/energy_drain = 0
var/obj/mecha/chassis = null
var/range = MELEE //bitFflags
///Bitflag. Determines the range of the equipment.
var/range = MECHA_MELEE
var/salvageable = 1
var/selectable = 1 // Set to 0 for passive equipment such as mining scanner or armor plates
var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist.
@@ -67,10 +68,10 @@
return txt
/obj/item/mecha_parts/mecha_equipment/proc/is_ranged()//add a distance restricted equipment. Why not?
return range&RANGED
return range&MECHA_RANGED
/obj/item/mecha_parts/mecha_equipment/proc/is_melee()
return range&MELEE
return range&MECHA_MELEE
/obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target)
@@ -34,7 +34,7 @@
icon = 'icons/obj/machines/sleeper.dmi'
icon_state = "sleeper"
energy_drain = 20
range = MELEE
range = MECHA_MELEE
equip_cooldown = 20
var/mob/living/carbon/patient = null
var/inject_amount = 10
@@ -256,7 +256,7 @@
var/synth_speed = 5 //[num] reagent units per cycle
energy_drain = 10
var/mode = 0 //0 - fire syringe, 1 - analyze reagents.
range = MELEE|RANGED
range = MECHA_MELEE|MECHA_RANGED
equip_cooldown = 10
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/Initialize()
@@ -524,7 +524,7 @@
desc = "Equipment for medical exosuits. Generates a focused beam of medical nanites."
icon_state = "mecha_medigun"
energy_drain = 10
range = MELEE|RANGED
range = MECHA_MELEE|MECHA_RANGED
equip_cooldown = 0
var/obj/item/gun/medbeam/mech/medigun
materials = list(/datum/material/iron = 15000, /datum/material/glass = 8000, /datum/material/plasma = 3000, /datum/material/gold = 8000, /datum/material/diamond = 2000)
@@ -10,7 +10,7 @@
icon_state = "mecha_teleport"
equip_cooldown = 150
energy_drain = 1000
range = RANGED
range = MECHA_RANGED
/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target)
if(!action_checks(target) || is_centcom_level(loc.z))
@@ -30,7 +30,7 @@
icon_state = "mecha_wholegen"
equip_cooldown = 50
energy_drain = 300
range = RANGED
range = MECHA_RANGED
/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target)
@@ -73,7 +73,7 @@
icon_state = "mecha_teleport"
equip_cooldown = 10
energy_drain = 100
range = MELEE|RANGED
range = MECHA_MELEE|MECHA_RANGED
var/atom/movable/locked
var/mode = 1 //1 - gravsling 2 - gravpush
@@ -361,7 +361,7 @@
name = "exosuit plasma converter"
desc = "An exosuit module that generates power using solid plasma as fuel. Pollutes the environment."
icon_state = "tesla"
range = MELEE
range = MECHA_MELEE
var/coeff = 100
var/obj/item/stack/sheet/fuel
var/max_fuel = 150000
@@ -186,7 +186,7 @@
icon_state = "mecha_exting"
equip_cooldown = 5
energy_drain = 0
range = MELEE|RANGED
range = MECHA_MELEE|MECHA_RANGED
/obj/item/mecha_parts/mecha_equipment/extinguisher/Initialize()
. = ..()
@@ -253,7 +253,7 @@
icon_state = "mecha_rcd"
equip_cooldown = 10
energy_drain = 250
range = MELEE|RANGED
range = MECHA_MELEE|MECHA_RANGED
item_flags = NO_MAT_REDEMPTION
var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock.
+3 -3
View File
@@ -1,6 +1,6 @@
/obj/item/mecha_parts/mecha_equipment/weapon
name = "mecha weapon"
range = RANGED
range = MECHA_RANGED
destroy_sound = 'sound/mecha/weapdestr.ogg'
var/projectile
var/fire_sound
@@ -167,7 +167,7 @@
icon_state = "mecha_honker"
energy_drain = 200
equip_cooldown = 150
range = MELEE|RANGED
range = MECHA_MELEE|MECHA_RANGED
kickback = FALSE
/obj/item/mecha_parts/mecha_equipment/weapon/honker/can_attach(obj/mecha/combat/honker/M)
@@ -454,7 +454,7 @@
icon_state = "mecha_punching_glove"
energy_drain = 250
equip_cooldown = 20
range = MELEE|RANGED
range = MECHA_MELEE|MECHA_RANGED
missile_range = 5
projectile = /obj/item/punching_glove
fire_sound = 'sound/items/bikehorn.ogg'
+5 -19
View File
@@ -1,17 +1,3 @@
#define MECHA_INT_FIRE (1<<0)
#define MECHA_INT_TEMP_CONTROL (1<<1)
#define MECHA_INT_SHORT_CIRCUIT (1<<2)
#define MECHA_INT_TANK_BREACH (1<<3)
#define MECHA_INT_CONTROL_LOST (1<<4)
#define MELEE 1
#define RANGED 2
#define FRONT_ARMOUR 1
#define SIDE_ARMOUR 2
#define BACK_ARMOUR 3
/obj/mecha
name = "mecha"
desc = "Exosuit"
@@ -36,10 +22,10 @@
max_integrity = 300 //max_integrity is base health
var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
armor = list("melee" = 20, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
var/list/facing_modifiers = list(FRONT_ARMOUR = 1.5, SIDE_ARMOUR = 1, BACK_ARMOUR = 0.5)
var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5)
var/equipment_disabled = 0 //disabled due to EMP
var/obj/item/stock_parts/cell/cell
var/state = 0
var/construction_state = MECHA_LOCKED
var/last_message = 0
var/add_req_access = 1
var/maint_access = 0
@@ -475,7 +461,7 @@
return
if(user.incapacitated())
return
if(state)
if(construction_state)
occupant_message("<span class='warning'>Maintenance protocols in effect.</span>")
return
if(!get_charge())
@@ -558,7 +544,7 @@
occupant_message("<span class='warning'>Unable to move while connected to the air system port!</span>")
last_message = world.time
return 0
if(state)
if(construction_state)
occupant_message("<span class='danger'>Maintenance protocols in effect.</span>")
return
return domove(direction)
@@ -722,7 +708,7 @@
//Transfer from core or card to mech. Proc is called by mech.
switch(interaction)
if(AI_TRANS_TO_CARD) //Upload AI from mech to AI card.
if(!state) //Mech must be in maint mode to allow carding.
if(!construction_state) //Mech must be in maint mode to allow carding.
to_chat(user, "<span class='warning'>[name] must have maintenance protocols active in order to allow a transfer.</span>")
return
AI = occupant
+82 -68
View File
@@ -1,11 +1,11 @@
/obj/mecha/proc/get_armour_facing(relative_dir)
switch(relative_dir)
if(0) // BACKSTAB!
return facing_modifiers[BACK_ARMOUR]
return facing_modifiers[MECHA_BACK_ARMOUR]
if(45, 90, 270, 315)
return facing_modifiers[SIDE_ARMOUR]
return facing_modifiers[MECHA_SIDE_ARMOUR]
if(225, 180, 135)
return facing_modifiers[FRONT_ARMOUR]
return facing_modifiers[MECHA_FRONT_ARMOUR]
return 1 //always return non-0
/obj/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
@@ -187,52 +187,13 @@
id_card = pda.id
output_maintenance_dialog(id_card, user)
return
else
to_chat(user, "<span class='warning'>Invalid ID: Access denied.</span>")
else
to_chat(user, "<span class='warning'>Maintenance protocols disabled by operator.</span>")
else if(W.tool_behaviour == TOOL_WRENCH)
if(state==1)
state = 2
to_chat(user, "<span class='notice'>You undo the securing bolts.</span>")
else if(state==2)
state = 1
to_chat(user, "<span class='notice'>You tighten the securing bolts.</span>")
return
else if(W.tool_behaviour == TOOL_CROWBAR)
if(state==2)
state = 3
to_chat(user, "<span class='notice'>You open the hatch to the power unit.</span>")
else if(state==3)
state=2
to_chat(user, "<span class='notice'>You close the hatch to the power unit.</span>")
return
else if(istype(W, /obj/item/stack/cable_coil))
if(state == 3 && (internal_damage & MECHA_INT_SHORT_CIRCUIT))
var/obj/item/stack/cable_coil/CC = W
if(CC.use(2))
clearInternalDamage(MECHA_INT_SHORT_CIRCUIT)
to_chat(user, "<span class='notice'>You replace the fused wires.</span>")
else
to_chat(user, "<span class='warning'>You need two lengths of cable to fix this mech!</span>")
return
else if(W.tool_behaviour == TOOL_SCREWDRIVER && user.a_intent != INTENT_HARM)
if(internal_damage & MECHA_INT_TEMP_CONTROL)
clearInternalDamage(MECHA_INT_TEMP_CONTROL)
to_chat(user, "<span class='notice'>You repair the damaged temperature controller.</span>")
else if(state==3 && cell)
cell.forceMove(loc)
cell = null
state = 4
to_chat(user, "<span class='notice'>You unscrew and pry out the powercell.</span>")
log_message("Powercell removed", LOG_MECHA)
else if(state==4 && cell)
state=3
to_chat(user, "<span class='notice'>You screw the cell in place.</span>")
to_chat(user, "<span class='warning'>Invalid ID: Access denied.</span>")
return
to_chat(user, "<span class='warning'>Maintenance protocols disabled by operator.</span>")
return
else if(istype(W, /obj/item/stock_parts/cell))
if(state==4)
if(istype(W, /obj/item/stock_parts/cell))
if(construction_state == MECHA_UNSECURE_CELL)
if(!cell)
if(!user.transferItemToLoc(W, src))
return
@@ -244,33 +205,86 @@
to_chat(user, "<span class='notice'>There's already a powercell installed.</span>")
return
else if(W.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
user.changeNext_move(CLICK_CD_MELEE)
if(obj_integrity < max_integrity)
if(W.use_tool(src, user, 0, volume=50, amount=1))
if (internal_damage & MECHA_INT_TANK_BREACH)
clearInternalDamage(MECHA_INT_TANK_BREACH)
to_chat(user, "<span class='notice'>You repair the damaged gas tank.</span>")
else
user.visible_message("<span class='notice'>[user] repairs some damage to [name].</span>", "<span class='notice'>You repair some damage to [src].</span>")
obj_integrity += min(10, max_integrity-obj_integrity)
if(obj_integrity == max_integrity)
to_chat(user, "<span class='notice'>It looks to be fully repaired now.</span>")
return 1
else
to_chat(user, "<span class='warning'>The [name] is at full integrity!</span>")
return 1
if(istype(W, /obj/item/stack/cable_coil))
if(construction_state == MECHA_OPEN_HATCH && (internal_damage & MECHA_INT_SHORT_CIRCUIT))
var/obj/item/stack/cable_coil/CC = W
if(CC.use(2))
clearInternalDamage(MECHA_INT_SHORT_CIRCUIT)
to_chat(user, "<span class='notice'>You replace the fused wires.</span>")
else
to_chat(user, "<span class='warning'>You need two lengths of cable to fix this mech!</span>")
return
else if(istype(W, /obj/item/mecha_parts))
if(istype(W, /obj/item/mecha_parts))
var/obj/item/mecha_parts/P = W
P.try_attach_part(user, src)
return
else
return ..()
log_message("Attacked by [W]. Attacker - [user]", LOG_MECHA)
return ..()
/obj/mecha/attacked_by(obj/item/I, mob/living/user)
log_message("Attacked by [I]. Attacker - [user]", LOG_MECHA)
/obj/mecha/wrench_act(mob/living/user, obj/item/I)
..()
. = TRUE
if(construction_state == MECHA_SECURE_BOLTS)
construction_state = MECHA_LOOSE_BOLTS
to_chat(user, "<span class='notice'>You undo the securing bolts.</span>")
return
if(construction_state == MECHA_LOOSE_BOLTS)
construction_state = MECHA_SECURE_BOLTS
to_chat(user, "<span class='notice'>You tighten the securing bolts.</span>")
/obj/mecha/crowbar_act(mob/living/user, obj/item/I)
..()
. = TRUE
if(construction_state == MECHA_LOOSE_BOLTS)
construction_state = MECHA_OPEN_HATCH
to_chat(user, "<span class='notice'>You open the hatch to the power unit.</span>")
return
if(construction_state == MECHA_OPEN_HATCH)
construction_state = MECHA_LOOSE_BOLTS
to_chat(user, "<span class='notice'>You close the hatch to the power unit.</span>")
/obj/mecha/screwdriver_act(mob/living/user, obj/item/I)
..()
. = TRUE
if(internal_damage & MECHA_INT_TEMP_CONTROL)
clearInternalDamage(MECHA_INT_TEMP_CONTROL)
to_chat(user, "<span class='notice'>You repair the damaged temperature controller.</span>")
return
if(!cell)
to_chat(user, "<span class='notice'>There is no cell in [src].</span>")
return
if(construction_state == MECHA_OPEN_HATCH)
cell.forceMove(loc)
cell = null
construction_state = MECHA_UNSECURE_CELL
to_chat(user, "<span class='notice'>You unscrew and pry out the powercell.</span>")
log_message("Powercell removed", LOG_MECHA)
return
if(construction_state == MECHA_UNSECURE_CELL)
construction_state = MECHA_OPEN_HATCH
to_chat(user, "<span class='notice'>You screw the cell in place.</span>")
/obj/mecha/welder_act(mob/living/user, obj/item/W)
. = ..()
if(user.a_intent == INTENT_HARM)
return
. = TRUE
if(internal_damage & MECHA_INT_TANK_BREACH)
if(!W.use_tool(src, user, 0, volume=50, amount=1))
return
clearInternalDamage(MECHA_INT_TANK_BREACH)
to_chat(user, "<span class='notice'>You repair the damaged gas tank.</span>")
return
if(obj_integrity < max_integrity)
if(!W.use_tool(src, user, 0, volume=50, amount=1))
return
user.visible_message("<span class='notice'>[user] repairs some damage to [name].</span>", "<span class='notice'>You repair some damage to [src].</span>")
obj_integrity += min(10, max_integrity-obj_integrity)
if(obj_integrity == max_integrity)
to_chat(user, "<span class='notice'>It looks to be fully repaired now.</span>")
return
to_chat(user, "<span class='warning'>The [name] is at full integrity!</span>")
/obj/mecha/proc/mech_toxin_damage(mob/living/target)
playsound(src, 'sound/effects/spray2.ogg', 50, 1)
+9 -9
View File
@@ -201,8 +201,8 @@
</head>
<body>
[add_req_access?"<a href='?src=[REF(src)];req_access=1;id_card=[REF(id_card)];user=[REF(user)]'>Edit operation keycodes</a>":null]
[maint_access?"<a href='?src=[REF(src)];maint_access=1;id_card=[REF(id_card)];user=[REF(user)]'>[(state>0) ? "Terminate" : "Initiate"] maintenance protocol</a>":null]
[(state>0) ?"<a href='?src=[REF(src)];set_internal_tank_valve=1;user=[REF(user)]'>Set Cabin Air Pressure</a>":null]
[maint_access?"<a href='?src=[REF(src)];maint_access=1;id_card=[REF(id_card)];user=[REF(user)]'>[(construction_state > MECHA_LOCKED) ? "Terminate" : "Initiate"] maintenance protocol</a>":null]
[(construction_state > MECHA_LOCKED) ?"<a href='?src=[REF(src)];set_internal_tank_valve=1;user=[REF(user)]'>Set Cabin Air Pressure</a>":null]
</body>
</html>"}
user << browse(., "window=exosuit_maint_console")
@@ -244,11 +244,11 @@
if(href_list["maint_access"])
if(!maint_access)
return
if(state==0)
state = 1
if(construction_state == MECHA_LOCKED)
construction_state = MECHA_SECURE_BOLTS
to_chat(usr, "The securing bolts are now exposed.")
else if(state==1)
state = 0
else if(construction_state == MECHA_SECURE_BOLTS)
construction_state = MECHA_LOCKED
to_chat(usr, "The securing bolts are now hidden.")
output_maintenance_dialog(id_card,usr)
return
@@ -275,9 +275,9 @@
return
//Set pressure.
if(href_list["set_internal_tank_valve"] && state)
if(href_list["set_internal_tank_valve"] && construction_state)
var/new_pressure = input(usr,"Input new output pressure","Pressure setting",internal_tank_valve) as num|null
if(isnull(new_pressure) || usr.incapacitated() || !state)
if(isnull(new_pressure) || usr.incapacitated() || !construction_state)
return
internal_tank_valve = new_pressure
to_chat(usr, "<span class='notice'>The internal pressure valve has been set to [internal_tank_valve]kPa.</span>")
@@ -339,7 +339,7 @@
//Toggles main access.
if(href_list["toggle_maint_access"])
if(state)
if(construction_state)
occupant_message("<span class='danger'>Maintenance protocols in effect</span>")
return
maint_access = !maint_access
@@ -78,7 +78,7 @@
var/do_ranged = 0
for(var/equip in mecha.equipment)
var/obj/item/mecha_parts/mecha_equipment/ME = equip
if(ME.range & RANGED)
if(ME.range & MECHA_RANGED)
do_ranged = 1
break
if(do_ranged)
@@ -144,7 +144,7 @@
ME.rearm()
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/get_mecha_equip_by_flag(flag = RANGED)
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/get_mecha_equip_by_flag(flag = MECHA_RANGED)
. = list()
if(mecha)
for(var/equip in mecha.equipment)
@@ -160,7 +160,7 @@
if(mecha)
mecha_reload()
mecha_face_target(A)
var/list/possible_weapons = get_mecha_equip_by_flag(RANGED)
var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_RANGED)
if(possible_weapons.len)
var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons) //so we don't favor mecha.equipment[1] forever
if(ME.action(A))
@@ -173,7 +173,7 @@
/mob/living/simple_animal/hostile/syndicate/mecha_pilot/AttackingTarget()
if(mecha)
var/list/possible_weapons = get_mecha_equip_by_flag(MELEE)
var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_MELEE)
if(possible_weapons.len)
var/obj/item/mecha_parts/mecha_equipment/ME = pick(possible_weapons)
mecha_face_target(target)
+1
View File
@@ -63,6 +63,7 @@
#include "code\__DEFINES\materials.dm"
#include "code\__DEFINES\maths.dm"
#include "code\__DEFINES\MC.dm"
#include "code\__DEFINES\mecha.dm"
#include "code\__DEFINES\medal.dm"
#include "code\__DEFINES\melee.dm"
#include "code\__DEFINES\menu.dm"