Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Рефактор скиллов #9420

Merged
merged 39 commits into from
Jul 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
ebfcdc2
fix
Dushess0 Jun 4, 2022
ddce105
Merge branch 'TauCetiStation:master' into master
Dushess0 Jun 4, 2022
5b1f64b
start refactor
Dushess0 Jun 5, 2022
c0a9e83
bruh
Dushess0 Jun 5, 2022
2a396c2
roles
Dushess0 Jun 5, 2022
faf23aa
fix
Dushess0 Jun 5, 2022
aa80da2
fixed wrong min level
Dushess0 Jun 5, 2022
10e1600
fix IPC surgery fix
Dushess0 Jun 5, 2022
dc69b16
faster surgery
Dushess0 Jun 5, 2022
be02d54
fix melee skill
Dushess0 Jun 5, 2022
85fd541
renamed
Dushess0 Jun 5, 2022
f51e277
fix handcuffing
Dushess0 Jun 5, 2022
ebe580a
neft civilians
Dushess0 Jun 5, 2022
6afd541
revert fix
Dushess0 Jun 5, 2022
d1144f2
fix newline
Dushess0 Jun 5, 2022
f1cdb80
cargo newline
Dushess0 Jun 5, 2022
af15a89
fix tabs and skill ranks namings
Dushess0 Jun 5, 2022
727cfce
Merge branch 'master' into skills-refactor
Dushess0 Jun 6, 2022
dc89cc6
Merge branch 'master' into skills-refactor
Dushess0 Jun 6, 2022
8c5e043
removed
Dushess0 Jun 8, 2022
baeeea9
Merge branch 'master' into skills-refactor
Dushess0 Jun 19, 2022
7bf0259
Merge branch 'master' into skills-refactor
Dushess0 Jun 28, 2022
73cd004
Merge branch 'master' of https://github.com/TauCetiStation/TauCetiCla…
Dushess0 Jul 2, 2022
ecf7931
part one
Dushess0 Jul 2, 2022
4fe136d
compiling but not tested!!!
Dushess0 Jul 2, 2022
116430a
fixed skills menu
Dushess0 Jul 2, 2022
a29e6f2
part 2
Dushess0 Jul 2, 2022
90e78aa
some fixes (testing needed)
Dushess0 Jul 2, 2022
c8146e3
Merge branch 'master' into skills-refactor
Dushess0 Jul 3, 2022
b1fcb39
final fixes
Dushess0 Jul 3, 2022
475f632
Merge branch 'master' of https://github.com/TauCetiStation/TauCetiCla…
Dushess0 Jul 3, 2022
74661f6
fix
Dushess0 Jul 3, 2022
64b0711
what
Dushess0 Jul 3, 2022
70c0790
Merge branch 'master' into skills-refactor
Dushess0 Jul 3, 2022
7e78532
Merge branch 'master' into skills-refactor
Dushess0 Jul 3, 2022
bb0018f
some nerfs
Dushess0 Jul 3, 2022
7a87eaa
Merge branch 'master' into skills-refactor
Dushess0 Jul 3, 2022
f4069c8
Merge branch 'master' into skills-refactor
Dushess0 Jul 3, 2022
fb5fa41
Merge branch 'master' into skills-refactor
Dushess0 Jul 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 10 additions & 1 deletion code/__DEFINES/skills.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#define SKILL_SURGERY "Surgery"
#define SKILL_COMMAND "Command"


#define SKILL_TASK_TRIVIAL 10
#define SKILL_TASK_VERY_EASY 20
#define SKILL_TASK_EASY 30
Expand All @@ -23,3 +22,13 @@
#define SKILL_TASK_CHALLENGING 150
#define SKILL_TASK_FORMIDABLE 200
#define HELP_OTHER_TIME 200

#define SKILL_LEVEL_MIN 0
#define SKILL_LEVEL_MAX 5

#define SKILL_LEVEL_NONE 0
#define SKILL_LEVEL_NOVICE 1
#define SKILL_LEVEL_TRAINED 2
#define SKILL_LEVEL_PRO 3
#define SKILL_LEVEL_MASTER 4
#define SKILL_LEVEL_ROBUST 5
1 change: 1 addition & 0 deletions code/__HELPERS/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@

global.full_ignore_question = get_list_of_keys_from_values_as_list_from_associative_list(special_roles_ignore_question)


global.all_skills = list()
for(var/skill_type in subtypesof(/datum/skill))
global.all_skills[skill_type] = new skill_type
Expand Down
34 changes: 1 addition & 33 deletions code/_globalvars/lists/skills.dm
Original file line number Diff line number Diff line change
@@ -1,37 +1,5 @@
var/global/list/skills_list = list(
/datum/skill/civ_mech,
/datum/skill/combat_mech,
/datum/skill/police,
/datum/skill/firearms,
/datum/skill/melee,
/datum/skill/engineering,
/datum/skill/atmospherics,
/datum/skill/construction,
/datum/skill/medical,
/datum/skill/surgery,
/datum/skill/chemistry,
/datum/skill/research,
/datum/skill/command,
)

var/global/list/default_skills_list = list(
/datum/skill/civ_mech/default,
/datum/skill/combat_mech/default,
/datum/skill/police/default,
/datum/skill/firearms/default,
/datum/skill/melee/default,
/datum/skill/engineering/default,
/datum/skill/atmospherics/default,
/datum/skill/construction/default,
/datum/skill/medical/default,
/datum/skill/surgery/default,
/datum/skill/chemistry/default,
/datum/skill/research/default,
/datum/skill/command/default,
)
var/global/list/all_skills

var/global/list/all_skillsets

var/global/list/all_skills

var/global/list/skillset_names_aliases
2 changes: 1 addition & 1 deletion code/_onclick/item_attack.dm
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@
var/obj/item/organ/external/BP = H.get_bodypart(H.hand ? BP_L_ARM : BP_R_ARM)
if(BP.pumped)
power += max(round((PARABOLIC_SCALING(force, 1, 0.01) * BP.pumped * 0.1)), 0) //We need a pumped force multiplied by parabolic scaled item's force with a borders of 1 to 0
power = apply_skill_bonus(user, power, list(/datum/skill/melee/default), 0.2) // 20% for each level
power = apply_skill_bonus(user, power, list(/datum/skill/melee = SKILL_LEVEL_NOVICE), 0.15) // 15% for each level
if(HULK in user.mutations)
power *= 2
if(!ishuman(M))
Expand Down
13 changes: 6 additions & 7 deletions code/datums/mind.dm
Original file line number Diff line number Diff line change
Expand Up @@ -205,17 +205,16 @@
out +="<i>[skillset]</i><a href='?src=\ref[src];delete_skillset=[skillset]'>-</a><br>"
out += "<B>Maximum skill values:</B><br><table>"
var/sorted_max = list()
for(var/datum/skill/s as anything in skills_list)
var/datum/skill/skill = all_skills[s]
sorted_max[skill.name] = skills.get_max(skill.name)
for(var/skill_type in all_skills)
sorted_max[skill_type] = skills.get_max(skill_type)
sorted_max = sortTim(sorted_max, /proc/cmp_numeric_dsc, TRUE)
var/row = 0
for(var/skill_name in sorted_max)
for(var/skill_type in sorted_max)
var/datum/skill/skill = all_skills[skill_type]
if(row % 3 == 0)
out += "</tr><tr>"
var/datum/skill/available_skill = skills.available.get_skill(skill_name)
var/rank_name = get_skill_rank_name(available_skill, available_skill.value)
out +="<td>[skill_name]: [rank_name] ([available_skill.value])</td>"
var/rank_name = skill.custom_ranks[skills.get_max(skill)]
out +="<td>[skill]: [rank_name] ([skills.get_max(skill)])</td>"
row++
out +="</table>"
out += "<br><a href='?src=\ref[src];add_skillset=1'>Add skillset</a><br>"
Expand Down
19 changes: 9 additions & 10 deletions code/datums/skills.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@

var/list/available_skillsets

/datum/skills/New()
active.skills = active.copy_skills() // new instance of skills because we will change the skills in active skillset

/datum/skills/proc/get_value(skill)
return active.get_value(skill)
Expand All @@ -15,7 +13,6 @@

/datum/skills/proc/update_available()
var/datum/skillset/temporary = new
temporary.skills = temporary.copy_skills() //we want different instance beceause of merging proc
if(length(available_skillsets) == 1)
temporary = LAZYACCESS(available_skillsets, 1)
for(var/datum/skillset/sk_set as anything in available_skillsets)
Expand Down Expand Up @@ -43,16 +40,18 @@
LAZYADD(available_skillsets, target.skills.available_skillsets)
update_available()

/datum/skills/proc/choose_value(skill_name,value)
var/datum/skill/skill = active.get_skill(skill_name)
if (!skill || value > skill.max_value || value < skill.min_value)
/datum/skills/proc/choose_value(skill_type, value)
if (value > SKILL_LEVEL_MAX || value < SKILL_LEVEL_MIN)
return
if (value > available.get_value(skill_name))
if (value > available.get_value(skill_type))
return
if (value == get_value(skill_name))
if (value == get_value(skill_type))
return
to_chat(usr, "<span class='notice'>You changed your skill proficiency in [skill_name] from [active.get_value(skill_name)] to [value].</span>")
active.set_value(skill_name, value)
var/datum/skill/skill = all_skills[skill_type]
var/prev_rank = skill.custom_ranks[active.get_value(skill_type) + 1]
var/new_rank = skill.custom_ranks[value + 1]
to_chat(usr, "<span class='notice'>You changed your skill proficiency in [skill] from [prev_rank] to [new_rank].</span>")
active.set_value(skill_type, value)

/mob/living
var/list/helpers_skillsets
Expand Down
4 changes: 2 additions & 2 deletions code/datums/wires/_wires.dm
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ var/global/list/wire_daltonism_colors = list()
var/window_x = 370
var/window_y = 470

var/required_skill = /datum/skill/engineering/novice
var/required_skills = list(/datum/skill/engineering = SKILL_LEVEL_NOVICE)

// All possible wires colors are here.
var/static/list/wire_colors = list("red", "blue", "green", "white", "orange", "brown", "gold", "gray", "cyan", "lime", "purple", "pink")
Expand Down Expand Up @@ -264,7 +264,7 @@ var/global/list/wire_daltonism_colors = list()
return
var/target_wire = params["wire"]
var/obj/item/I = L.get_active_hand()
if(!handle_fumbling(L, holder, SKILL_TASK_AVERAGE, list(required_skill), message_self = "<span class='notice'>You fumble around figuring out the wiring.</span>"))
if(!handle_fumbling(L, holder, SKILL_TASK_AVERAGE, required_skills, message_self = "<span class='notice'>You fumble around figuring out the wiring.</span>"))
return
switch(action)
if("cut")
Expand Down
2 changes: 1 addition & 1 deletion code/datums/wires/nuclearbomb.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ var/global/const/NUKE_WIRE_SAFETY = 4
random = TRUE
holder_type = /obj/machinery/nuclearbomb
wire_count = 7
required_skill = /datum/skill/engineering/master
required_skills = list(/datum/skill/engineering = SKILL_LEVEL_PRO)

/datum/wires/nuclearbomb/can_use()
var/obj/machinery/nuclearbomb/N = holder
Expand Down
2 changes: 1 addition & 1 deletion code/datums/wires/syndicatebomb.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ var/global/const/SYNDIEBOMB_WIRE_ACTIVATE = 16 // Will start a bombs timer if
random = TRUE
holder_type = /obj/machinery/syndicatebomb
wire_count = 5
required_skill = /datum/skill/engineering/pro
required_skills = list(/datum/skill/engineering = SKILL_LEVEL_PRO)

/datum/wires/syndicatebomb/can_use()
var/obj/machinery/syndicatebomb/S = holder
Expand Down
2 changes: 1 addition & 1 deletion code/game/atoms.dm
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@
if(istype(src, /obj/structure/reagent_dispensers)) //watertanks, fueltanks
for(var/datum/reagent/R in reagents.reagent_list)
msg += "<br><span class='info'>[R.volume] units of [R.name]</span>"
else if (is_skill_competent(user, list(/datum/skill/chemistry/master)))
else if (is_skill_competent(user, list(/datum/skill/chemistry = SKILL_LEVEL_MASTER)))
if(length(reagents.reagent_list) == 1)
msg += "<br><span class='info'>[reagents.reagent_list[1].volume] units of [reagents.reagent_list[1].name]</span>"
else
Expand Down
2 changes: 1 addition & 1 deletion code/game/dna/dna_modifier.dm
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@
active_power_usage = 400
var/waiting_for_user_input=0 // Fix for #274 (Mash create block injector without answering dialog to make unlimited injectors) - N3X

required_skills = list(/datum/skill/research/trained, /datum/skill/medical/trained)
required_skills = list(/datum/skill/research = SKILL_LEVEL_TRAINED, /datum/skill/medical = SKILL_LEVEL_TRAINED)


/obj/machinery/computer/scan_consolenew/attackby(obj/item/I, mob/user)
Expand Down
2 changes: 1 addition & 1 deletion code/game/gamemodes/roles/families.dm
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
name = "Gun Dealer"
id = GANGSTER_DEALER
required_pref = ROLE_FAMILIES

change_to_maximum_skills = TRUE
telecrystals = 10

/datum/role/traitor/dealer/OnPostSetup(laterole)
Expand Down
3 changes: 2 additions & 1 deletion code/game/gamemodes/roles/syndicate.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
logo_state = "nuke-logo"

var/nuclear_outfit = /datum/outfit/nuclear
skillset_type = /datum/skillset/max
skillset_type = /datum/skillset/nuclear_operative

var/TC_num = 0 // using for statistics

Expand Down Expand Up @@ -73,6 +73,7 @@
logo_state = "nuke-logo-leader"

nuclear_outfit = /datum/outfit/nuclear/leader
skillset_type = /datum/skillset/nuclear_operative_leader

TC_num = 25

Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/Sleeper.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
list("dexalinp", "alkysine")
)
var/upgraded = FALSE
required_skills = list(/datum/skill/medical/trained)
required_skills = list(/datum/skill/medical = SKILL_LEVEL_TRAINED)

/obj/machinery/sleeper/upgraded
upgraded = TRUE
Expand Down
4 changes: 2 additions & 2 deletions code/game/machinery/adv_med.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
density = TRUE
anchored = TRUE
light_color = "#00ff00"
required_skills = list(/datum/skill/medical/novice)
required_skills = list(/datum/skill/medical = SKILL_LEVEL_NOVICE)

/obj/machinery/bodyscanner/power_change()
..()
Expand Down Expand Up @@ -157,7 +157,7 @@
anchored = TRUE
var/next_print = 0
var/storedinfo = null
required_skills = list(/datum/skill/medical/trained)
required_skills = list(/datum/skill/medical = SKILL_LEVEL_TRAINED)

/obj/machinery/body_scanconsole/atom_init()
..()
Expand Down
4 changes: 2 additions & 2 deletions code/game/machinery/atmo_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
var/list/sensors = list()

var/list/sensor_information = list()
required_skills = list(/datum/skill/atmospherics/trained)
required_skills = list(/datum/skill/atmospherics = SKILL_LEVEL_TRAINED)


/obj/machinery/computer/general_air_control/ui_interact(mob/user)
Expand Down Expand Up @@ -279,7 +279,7 @@ Max Output Pressure: [output_pressure] kPa<BR>"}

var/cutoff_temperature = 2000
var/on_temperature = 1200
required_skills = list(/datum/skill/engineering/pro)
required_skills = list(/datum/skill/engineering = SKILL_LEVEL_PRO)

/obj/machinery/computer/general_air_control/fuel_injection/process()
if(automation)
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/aifixer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
var/mob/living/silicon/ai/occupier = null
var/active = 0
circuit = /obj/item/weapon/circuitboard/aifixer
required_skills = list(/datum/skill/research/master)
required_skills = list(/datum/skill/research = SKILL_LEVEL_MASTER)
fumbling_time = 7 SECONDS

/obj/machinery/computer/aifixer/atom_init()
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/atmos_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

var/obj/machinery/alarm/current
var/overridden = FALSE //not set yet, can't think of a good way to do it
required_skills = list(/datum/skill/atmospherics/trained)
required_skills = list(/datum/skill/atmospherics = SKILL_LEVEL_TRAINED)

/obj/machinery/computer/atmoscontrol/ui_interact(mob/user)
if(allowed(user)) // this is very strange when you know, that this var will be set everytime someone opens with and without access and interfere with each other... but maybe i don't understand smth.
Expand Down
6 changes: 3 additions & 3 deletions code/game/machinery/computer/card.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
var/mode = 0.0
var/printing = null
var/datum/money_account/datum_account = null //if money account is tied to the card and the card is inserted into the console, the account is stored here
required_skills = list(/datum/skill/command/pro)
required_skills = list(/datum/skill/command = SKILL_LEVEL_PRO)
fumbling_time = SKILL_TASK_TOUGH

/obj/machinery/computer/card/proc/is_centcom()
Expand Down Expand Up @@ -114,8 +114,8 @@
data["civilian_jobs"] = format_jobs(civilian_positions)
data["centcom_jobs"] = format_jobs(get_all_centcom_jobs())

data["fast_modify_region"] = is_skill_competent(user, list(/datum/skill/command/pro))
data["fast_full_access"] = is_skill_competent(user, list(/datum/skill/command/master))
data["fast_modify_region"] = is_skill_competent(user, list(/datum/skill/command = SKILL_LEVEL_PRO))
data["fast_full_access"] = is_skill_competent(user, list(/datum/skill/command = SKILL_LEVEL_MASTER))

if (modify && is_centcom())
var/list/all_centcom_access = list()
Expand Down
4 changes: 2 additions & 2 deletions code/game/machinery/computer/cloning.dm
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
var/loading = 0 // Nice loading text
var/autoprocess = 0
required_skills = list(/datum/skill/medical/pro, /datum/skill/research/trained)
required_skills = list(/datum/skill/medical = SKILL_LEVEL_PRO, /datum/skill/research = SKILL_LEVEL_TRAINED)
fumbling_time = 3 SECONDS

/obj/machinery/computer/cloning/atom_init()
Expand Down Expand Up @@ -57,7 +57,7 @@

/obj/machinery/computer/cloning/proc/findcloner()
var/obj/machinery/clonepod/podf = locate(/obj/machinery/clonepod) in range(4, src)

if(!isnull(podf))
return podf

Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/communications.dm
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

var/datum/announcement/station/command/announcement = new

required_skills = list(/datum/skill/command/pro)
required_skills = list(/datum/skill/command = SKILL_LEVEL_PRO)

/obj/machinery/computer/communications/atom_init()
. = ..()
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/guestpass.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
var/reason = "NOT SPECIFIED"
var/expiration_time = 0

required_skills = list(/datum/skill/command/novice)
required_skills = list(/datum/skill/command = SKILL_LEVEL_NOVICE)

/obj/item/weapon/card/id/guest/GetAccess()
if(world.time > expiration_time)
Expand Down
4 changes: 2 additions & 2 deletions code/game/machinery/computer/law.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
light_color = "#ffffff"
var/mob/living/silicon/ai/current = null
var/opened = FALSE
required_skills = list(/datum/skill/command/default, /datum/skill/research/pro)
required_skills = list(/datum/skill/command = SKILL_LEVEL_NONE, /datum/skill/research = SKILL_LEVEL_PRO)
fumbling_time = 7 SECONDS

/obj/machinery/computer/aiupload/verb/AccessInternals()
Expand Down Expand Up @@ -55,7 +55,7 @@
icon_state = "command"
circuit = /obj/item/weapon/circuitboard/borgupload
var/mob/living/silicon/robot/current = null
required_skills = list(/datum/skill/command/default, /datum/skill/research/pro)
required_skills = list(/datum/skill/command = SKILL_LEVEL_NONE, /datum/skill/research = SKILL_LEVEL_PRO)
fumbling_time = 7 SECONDS

/obj/machinery/computer/borgupload/attackby(obj/item/weapon/aiModule/module, mob/user)
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/medical.dm
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
var/static/icon/mugshot = icon('icons/obj/mugshot.dmi', "background") //records photo background
var/next_print = 0
var/docname
required_skills = list(/datum/skill/medical/novice)
required_skills = list(/datum/skill/medical = SKILL_LEVEL_NOVICE)

/obj/machinery/computer/med_data/attackby(obj/item/O, user)
if(istype(O, /obj/item/weapon/card/id) && !scan)
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/power.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
active_power_usage = 80
circuit = /obj/item/weapon/circuitboard/powermonitor
var/datum/powernet/powernet = null
required_skills = list(/datum/skill/engineering/trained)
required_skills = list(/datum/skill/engineering = SKILL_LEVEL_TRAINED)

//fix for issue 521, by QualityVan.
//someone should really look into why circuits have a powernet var, it's several kinds of retarded.
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/prisoner.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
var/stop = 0.0
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed

required_skills = list(/datum/skill/police/master)
required_skills = list(/datum/skill/police = SKILL_LEVEL_PRO)

/obj/machinery/computer/prisoner/ui_interact(mob/user)
var/dat = ""
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/computer/robot.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
req_access = list(access_robotics)
circuit = /obj/item/weapon/circuitboard/robotics

required_skills = list(/datum/skill/research/pro)
required_skills = list(/datum/skill/research = SKILL_LEVEL_PRO)

var/id = 0.0
var/temp = null
Expand Down