mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
Recodes spawn selection, cleans up mob type lists
Changes to spawn selection: - Elemental types now have a set of area and turf black/whitelists to eliminate copy-pasted ones for same-type mobs - Mobs still have their own black/whitelists to further customize their spawn preferences beyond their elemental type preferences - Whitelisted areas/turfs now increase weight by 4 per whitelist they are on - Blacklisted areas/turfs now decrease weight by 2 per blacklist they are on (if the ending weight is less than 1, the area/turf is removed from consideration) - Creation of weighted lists for area and turf selection moved to separate procs for readability - Spawn area selection now uses pickweight Elemental Types now use the defines instead of hardcoded paths for their lists - Fixed a mistake with Rock Type resistances improperly including Grass and not including Flying
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
var/health = list(0, 0) //health[1] is the mob's current health, health[2] is the mob's max health (calculated in New())
|
||||
|
||||
//SPAWN PREFERENCES AND VARIABLES
|
||||
//A note on mob spawn preferences: The mob types also have preferences, which are handled prior to per-mob preferences, so ultimately you use a combined set of preferences
|
||||
var/list/area_blacklist = list() //list of areas this mob can NOT spawn in (such as the bridge)
|
||||
var/list/turf_blacklist = list() //list of turfs this mob can NOT spawn on (such as wood floors)
|
||||
var/list/area_whitelist = list() //list of areas this mob is more likely to spawn in (can be used to reinclude subtypes of blacklisted areas)
|
||||
@@ -73,35 +74,18 @@
|
||||
qdel(src) //if you reach this, the datum is just pure clutter, so delete it
|
||||
|
||||
/datum/mob_hunt/proc/select_spawn()
|
||||
var/list/possible_areas = list()
|
||||
for(var/areapath in the_station_areas)
|
||||
if(istype(areapath, /area/holodeck)) //don't allow holodeck areas as possible spawns since it will allow it to spawn in the holodeck rooms on z2 as well
|
||||
continue
|
||||
possible_areas += typesof(areapath)
|
||||
for(var/areapath in area_blacklist)
|
||||
possible_areas -= typesof(areapath)
|
||||
for(var/areapath in area_whitelist)
|
||||
possible_areas += typesof(areapath) //yes, this means some areas may be included multiple times, which simply increases their likelihood of being chosen
|
||||
var/list/possible_areas = get_possible_areas()
|
||||
if(!possible_areas.len)
|
||||
log_admin("No possible areas to spawn [type] found. Possible code/mapping error?")
|
||||
return 0
|
||||
var/list/possible_turfs = list()
|
||||
while(possible_areas.len)
|
||||
//randomly select an area from our possible_areas list to try spawning in, then remove it from possible_areas so it won't get picked over and over forever.
|
||||
var/area/spawn_area = locate(pick_n_take(possible_areas))
|
||||
var/area/spawn_area = locate(pickweight(possible_areas))
|
||||
possible_areas -= spawn_area
|
||||
if(!spawn_area)
|
||||
break
|
||||
//clear and generate a fresh list of turfs in the selected area, weighted based on white/black lists
|
||||
possible_turfs.Cut()
|
||||
for(var/turf/PT in spawn_area)
|
||||
var/value = 1
|
||||
if(is_type_in_list(PT, turf_whitelist)) //if whitelisted, we have a significant bonus to our weight
|
||||
value += 2
|
||||
if(is_type_in_list(PT, turf_blacklist)) //blacklisting only removes 1 value (weight), so whitelisted subtypes are still more likely than normal turfs
|
||||
value -= 1 //but non-whitelisted turfs will be disqualified
|
||||
if(!value)
|
||||
continue
|
||||
possible_turfs[PT] = value
|
||||
var/list/possible_turfs = get_possible_turfs(spawn_area)
|
||||
if(!possible_turfs.len) //If we don't have any possible turfs, this attempt was a failure. Try again.
|
||||
continue
|
||||
//if we got this far, we're spawning on this attempt, hooray!
|
||||
@@ -113,6 +97,73 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/mob_hunt/proc/get_possible_areas()
|
||||
var/list/possible_areas = list()
|
||||
//setup, sets all station areas (and subtypes) to weight 1
|
||||
for(var/A in the_station_areas)
|
||||
if(istype(A, /area/holodeck)) //don't allow holodeck areas as possible spawns since it will allow it to spawn in the holodeck rooms on z2 as well
|
||||
continue
|
||||
for(var/areapath in typesof(A))
|
||||
possible_areas[areapath] = 1
|
||||
//primary type preferences
|
||||
if(primary_type)
|
||||
for(var/A in primary_type.area_whitelist)
|
||||
for(var/areapath in typesof(A))
|
||||
possible_areas[areapath] += 4
|
||||
for(var/A in primary_type.area_blacklist)
|
||||
for(var/areapath in typesof(A))
|
||||
possible_areas[areapath] -= 2
|
||||
//secondary type preferences
|
||||
if(secondary_type)
|
||||
for(var/A in secondary_type.area_whitelist)
|
||||
for(var/areapath in typesof(A))
|
||||
possible_areas[areapath] += 4
|
||||
for(var/A in secondary_type.area_blacklist)
|
||||
for(var/areapath in typesof(A))
|
||||
possible_areas[areapath] -= 2
|
||||
//mob preferences
|
||||
for(var/A in area_whitelist)
|
||||
for(var/areapath in typesof(A))
|
||||
possible_areas[areapath] += 4
|
||||
for(var/A in area_blacklist)
|
||||
for(var/areapath in typesof(A))
|
||||
possible_areas[areapath] -= 2
|
||||
//weight check, remove negative or zero weight areas from the list, then return the list
|
||||
for(var/areapath in possible_areas)
|
||||
if(possible_areas[areapath] < 1)
|
||||
possible_areas -= areapath
|
||||
return possible_areas
|
||||
|
||||
/datum/mob_hunt/proc/get_possible_turfs(area/spawn_area)
|
||||
if(!spawn_area)
|
||||
return list()
|
||||
var/list/possible_turfs = list()
|
||||
//setup, sets all turfs in spawn_area to weight 1
|
||||
for(var/turf/T in spawn_area)
|
||||
possible_turfs[T] = 1
|
||||
//primary type preferences
|
||||
if(primary_type)
|
||||
for(var/turf/T in primary_type.turf_whitelist)
|
||||
possible_turfs[T] += 4
|
||||
for(var/turf/T in primary_type.turf_blacklist)
|
||||
possible_turfs[T] -= 2
|
||||
//secondary type preferences
|
||||
if(secondary_type)
|
||||
for(var/turf/T in secondary_type.turf_whitelist)
|
||||
possible_turfs[T] += 4
|
||||
for(var/turf/T in secondary_type.turf_blacklist)
|
||||
possible_turfs[T] -= 2
|
||||
//mob preferences
|
||||
for(var/turf/T in turf_whitelist)
|
||||
possible_turfs[T] += 4
|
||||
for(var/turf/T in turf_blacklist)
|
||||
possible_turfs[T] -= 2
|
||||
//weight check, remove negative or zero weight turfs from the list, then return the list
|
||||
for(var/T in possible_turfs)
|
||||
if(possible_turfs[T] < 1)
|
||||
possible_turfs -= T
|
||||
return possible_turfs
|
||||
|
||||
/datum/mob_hunt/proc/calc_dam_multiplier(datum/mob_type/attack_type)
|
||||
if(!primary_type)
|
||||
return 99 //typeless mobs are weak to everything since they shouldn't exist
|
||||
@@ -195,11 +246,6 @@
|
||||
primary_type = TYPE_BUG
|
||||
icon_state_normal = "nemabug"
|
||||
icon_state_shiny = "nemabug_shiny"
|
||||
area_blacklist = list(/area/toxins)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/hydroponics,
|
||||
/area/hallway/secondary/construction)
|
||||
turf_whitelist = list(/turf/simulated/floor/grass)
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/stoutquill
|
||||
@@ -210,12 +256,6 @@
|
||||
primary_type = TYPE_ICE
|
||||
icon_state_normal = "stoutquill"
|
||||
icon_state_shiny = "stoutquill_shiny"
|
||||
area_blacklist = list(/area/maintenance/turbine,
|
||||
/area/maintenance/incinerator,
|
||||
/area/crew_quarters/kitchen)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/toxins/server_coldroom)
|
||||
turf_whitelist = list()
|
||||
lifetime = 4500
|
||||
|
||||
/datum/mob_hunt/spectra
|
||||
@@ -226,17 +266,6 @@
|
||||
primary_type = TYPE_POISON
|
||||
icon_state_normal = "spectra"
|
||||
icon_state_shiny = "spectra_shiny"
|
||||
area_blacklist = list(/area/medical,
|
||||
/area/security/medbay,
|
||||
/area/janitor)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/medical/virology,
|
||||
/area/toxins,
|
||||
/area/medical/research,
|
||||
/area/medical/research_shuttle_dock,
|
||||
/area/crew_quarters/hor,
|
||||
/area/maintenance/asmaint2)
|
||||
turf_whitelist = list()
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/dunny
|
||||
@@ -247,16 +276,6 @@
|
||||
primary_type = TYPE_FIRE
|
||||
icon_state_normal = "dunny"
|
||||
icon_state_shiny = "dunny_shiny"
|
||||
area_blacklist = list(/area/crew_quarters/toilet,
|
||||
/area/crew_quarters/sleep_male/toilet_male,
|
||||
/area/crew_quarters/sleep_female/toilet_female,
|
||||
/area/crew_quarters/locker/locker_toilet,
|
||||
/area/toxins/server_coldroom)
|
||||
turf_blacklist = list(/turf/simulated/floor/beach/water)
|
||||
area_whitelist = list(/area/maintenance/turbine,
|
||||
/area/maintenance/incinerator,
|
||||
/area/crew_quarters/kitchen)
|
||||
turf_whitelist = list()
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/buffsel
|
||||
@@ -267,12 +286,6 @@
|
||||
primary_type = TYPE_ROCK
|
||||
icon_state_normal = "buffsel"
|
||||
icon_state_shiny = "buffsel_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/quartermaster,
|
||||
/area/maintenance/disposal)
|
||||
turf_whitelist = list(/turf/simulated/wall,
|
||||
/turf/simulated/floor/mineral)
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/quarrel
|
||||
@@ -283,10 +296,6 @@
|
||||
primary_type = TYPE_NORMAL
|
||||
icon_state_normal = "quarrel"
|
||||
icon_state_shiny = "quarrel_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list()
|
||||
turf_whitelist = list()
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/vulerrt
|
||||
@@ -297,16 +306,6 @@
|
||||
primary_type = TYPE_DARK
|
||||
icon_state_normal = "vulerrt"
|
||||
icon_state_shiny = "vulerrt_shiny"
|
||||
area_blacklist = list(/area/solar,
|
||||
/area/maintenance/auxsolarport,
|
||||
/area/maintenance/starboardsolar,
|
||||
/area/maintenance/portsolar,
|
||||
/area/maintenance/auxsolarstarboard,
|
||||
/area/clownoffice)
|
||||
turf_blacklist = list(/turf/simulated/floor/light)
|
||||
area_whitelist = list(/area/maintenance,
|
||||
/area/assembly/assembly_line,
|
||||
/area/mimeoffice)
|
||||
turf_whitelist = list()
|
||||
lifetime = 4500
|
||||
|
||||
@@ -318,17 +317,6 @@
|
||||
primary_type = TYPE_ELECTRIC
|
||||
icon_state_normal = "strudel"
|
||||
icon_state_shiny = "strudel_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/engine,
|
||||
/area/toxins/server,
|
||||
/area/maintenance,
|
||||
/area/turret_protected/ai,
|
||||
/area/turret_protected/ai_upload,
|
||||
/area/turret_protected/aisat_interior,
|
||||
/area/aisat,
|
||||
/area/assembly)
|
||||
turf_whitelist = list(/turf/simulated/floor/bluegrid)
|
||||
lifetime = 4500
|
||||
|
||||
/datum/mob_hunt/folstick
|
||||
@@ -339,15 +327,6 @@
|
||||
primary_type = TYPE_WATER
|
||||
icon_state_normal = "folstick"
|
||||
icon_state_shiny = "folstick_shiny"
|
||||
area_blacklist = list(/area/maintenance/turbine,
|
||||
/area/maintenance/incinerator,
|
||||
/area/crew_quarters/kitchen)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/crew_quarters/toilet,
|
||||
/area/crew_quarters/sleep_male/toilet_male,
|
||||
/area/crew_quarters/sleep_female/toilet_female,
|
||||
/area/crew_quarters/locker/locker_toilet)
|
||||
turf_whitelist = list(/turf/simulated/floor/beach/water)
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/glimmerflare
|
||||
@@ -358,18 +337,6 @@
|
||||
primary_type = TYPE_PSYCHIC
|
||||
icon_state_normal = "glimmerflare"
|
||||
icon_state_shiny = "glimmerflare_shiny"
|
||||
area_blacklist = list(/area/toxins,
|
||||
/area/medical/research,
|
||||
/area/medical/research_shuttle_dock,
|
||||
/area/crew_quarters/hor,
|
||||
/area/maintenance/asmaint2,
|
||||
/area/teleporter,
|
||||
/area/gateway)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/library,
|
||||
/area/chapel,
|
||||
/area/medical/psych)
|
||||
turf_whitelist = list()
|
||||
lifetime = 4500
|
||||
|
||||
/datum/mob_hunt/leecoon
|
||||
@@ -380,11 +347,6 @@
|
||||
primary_type = TYPE_GRASS
|
||||
icon_state_normal = "leecoon"
|
||||
icon_state_shiny = "leecoon_shiny"
|
||||
area_blacklist = list(/area/toxins)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/hydroponics,
|
||||
/area/hallway/secondary/construction)
|
||||
turf_whitelist = list(/turf/simulated/floor/grass)
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/halk
|
||||
@@ -395,13 +357,6 @@
|
||||
primary_type = TYPE_FLYING
|
||||
icon_state_normal = "halk"
|
||||
icon_state_shiny = "halk_shiny"
|
||||
area_blacklist = list(/area/maintenance)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/hallway,
|
||||
/area/escapepodbay,
|
||||
/area/engine/mechanic_workshop,
|
||||
/area/security/podbay)
|
||||
turf_whitelist = list()
|
||||
lifetime = 6000
|
||||
|
||||
/datum/mob_hunt/gooby
|
||||
@@ -413,17 +368,6 @@
|
||||
secondary_type = TYPE_BUG
|
||||
icon_state_normal = "gooby"
|
||||
icon_state_shiny = "gooby_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/engine,
|
||||
/area/toxins/server,
|
||||
/area/maintenance,
|
||||
/area/turret_protected/ai,
|
||||
/area/turret_protected/ai_upload,
|
||||
/area/turret_protected/aisat_interior,
|
||||
/area/aisat,
|
||||
/area/assembly)
|
||||
turf_whitelist = list(/turf/simulated/floor/bluegrid)
|
||||
lifetime = 3000
|
||||
|
||||
/datum/mob_hunt/pandoom
|
||||
@@ -434,12 +378,6 @@
|
||||
primary_type = TYPE_GHOST
|
||||
icon_state_normal = "pandoom"
|
||||
icon_state_shiny = "pandoom_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/medical/morgue,
|
||||
/area/chapel,
|
||||
/area/medical/genetics_cloning)
|
||||
turf_whitelist = list()
|
||||
lifetime = 4500
|
||||
|
||||
/datum/mob_hunt/relish
|
||||
@@ -451,10 +389,6 @@
|
||||
secondary_type = TYPE_GROUND
|
||||
icon_state_normal = "relish"
|
||||
icon_state_shiny = "relish_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list()
|
||||
turf_whitelist = list()
|
||||
lifetime = 3000
|
||||
|
||||
/datum/mob_hunt/xofine
|
||||
@@ -466,10 +400,6 @@
|
||||
secondary_type = TYPE_NORMAL
|
||||
icon_state_normal = "xofine"
|
||||
icon_state_shiny = "xofine_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list()
|
||||
turf_whitelist = list()
|
||||
lifetime = 3000
|
||||
|
||||
/datum/mob_hunt/gitten
|
||||
@@ -481,10 +411,6 @@
|
||||
secondary_type = TYPE_POISON
|
||||
icon_state_normal = "gitten"
|
||||
icon_state_shiny = "gitten_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list()
|
||||
turf_whitelist = list()
|
||||
lifetime = 3000
|
||||
|
||||
/datum/mob_hunt/nai
|
||||
@@ -496,10 +422,6 @@
|
||||
secondary_type = TYPE_NORMAL
|
||||
icon_state_normal = "nai"
|
||||
icon_state_shiny = "nai_shiny"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list()
|
||||
turf_whitelist = list()
|
||||
lifetime = 3000
|
||||
|
||||
/datum/mob_hunt/pyroghast
|
||||
@@ -511,10 +433,6 @@
|
||||
secondary_type = TYPE_GHOST
|
||||
icon_state_normal = "pyroghast"
|
||||
icon_state_shiny = "pyroghast"
|
||||
area_blacklist = list()
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list()
|
||||
turf_whitelist = list()
|
||||
lifetime = 4500
|
||||
|
||||
/datum/mob_hunt/starslam
|
||||
@@ -526,12 +444,6 @@
|
||||
secondary_type = TYPE_ICE
|
||||
icon_state_normal = "starslam"
|
||||
icon_state_shiny = "starslam_shiny"
|
||||
area_blacklist = list(/area/medical)
|
||||
turf_blacklist = list()
|
||||
area_whitelist = list(/area/crew_quarters/bar,
|
||||
/area/crew_quarters/fitness,
|
||||
/area/security)
|
||||
turf_whitelist = list(/turf/simulated/floor/wood)
|
||||
lifetime = 2500
|
||||
|
||||
/datum/mob_hunt/pheron
|
||||
|
||||
@@ -5,161 +5,252 @@
|
||||
var/list/resistance = list()
|
||||
var/list/immunity = list()
|
||||
|
||||
//Type-based spawn preferences (to eliminate copy-pasting the same area and turf lists on each mob type)
|
||||
var/list/area_blacklist = list() //areas to be avoided
|
||||
var/list/area_whitelist = list() //areas to be more preferred
|
||||
var/list/turf_blacklist = list() //turf types to be avoided
|
||||
var/list/turf_whitelist = list() //turf types to be more preferred
|
||||
|
||||
//Type defines, to avoid spelling mistakes
|
||||
/datum/mob_type/fire
|
||||
name = "Fire"
|
||||
weakness = list(/datum/mob_type/water,
|
||||
/datum/mob_type/rock,
|
||||
/datum/mob_type/ground)
|
||||
resistance = list(/datum/mob_type/bug,
|
||||
/datum/mob_type/fire,
|
||||
/datum/mob_type/grass,
|
||||
/datum/mob_type/ice,
|
||||
/datum/mob_type/steel)
|
||||
weakness = list(TYPE_WATER,
|
||||
TYPE_ROCK,
|
||||
TYPE_GROUND)
|
||||
resistance = list(TYPE_BUG,
|
||||
TYPE_FIRE,
|
||||
TYPE_GRASS,
|
||||
TYPE_ICE,
|
||||
TYPE_STEEL)
|
||||
area_blacklist = list(/area/crew_quarters/toilet,
|
||||
/area/crew_quarters/sleep_male/toilet_male,
|
||||
/area/crew_quarters/sleep_female/toilet_female,
|
||||
/area/crew_quarters/locker/locker_toilet,
|
||||
/area/toxins/server_coldroom)
|
||||
area_whitelist = list(/area/maintenance/turbine,
|
||||
/area/maintenance/incinerator,
|
||||
/area/crew_quarters/kitchen)
|
||||
turf_blacklist = list(/turf/simulated/floor/beach/water)
|
||||
|
||||
/datum/mob_type/water
|
||||
name = "Water"
|
||||
weakness = list(/datum/mob_type/electric,
|
||||
/datum/mob_type/grass)
|
||||
resistance = list(/datum/mob_type/fire,
|
||||
/datum/mob_type/ice,
|
||||
/datum/mob_type/steel,
|
||||
/datum/mob_type/water)
|
||||
weakness = list(TYPE_ELECTRIC,
|
||||
TYPE_GRASS)
|
||||
resistance = list(TYPE_FIRE,
|
||||
TYPE_ICE,
|
||||
TYPE_STEEL,
|
||||
TYPE_WATER)
|
||||
area_blacklist = list(/area/maintenance/turbine,
|
||||
/area/maintenance/incinerator,
|
||||
/area/crew_quarters/kitchen)
|
||||
area_whitelist = list(/area/crew_quarters/toilet,
|
||||
/area/crew_quarters/sleep_male/toilet_male,
|
||||
/area/crew_quarters/sleep_female/toilet_female,
|
||||
/area/crew_quarters/locker/locker_toilet)
|
||||
turf_whitelist = list(/turf/simulated/floor/beach/water)
|
||||
|
||||
/datum/mob_type/grass
|
||||
name = "Grass"
|
||||
weakness = list(/datum/mob_type/fire,
|
||||
/datum/mob_type/bug,
|
||||
/datum/mob_type/poison,
|
||||
/datum/mob_type/ice,
|
||||
/datum/mob_type/flying)
|
||||
resistance = list(/datum/mob_type/water,
|
||||
/datum/mob_type/grass,
|
||||
/datum/mob_type/electric,
|
||||
/datum/mob_type/ground)
|
||||
weakness = list(TYPE_FIRE,
|
||||
TYPE_BUG,
|
||||
TYPE_POISON,
|
||||
TYPE_ICE,
|
||||
TYPE_FLYING)
|
||||
resistance = list(TYPE_WATER,
|
||||
TYPE_GRASS,
|
||||
TYPE_ELECTRIC,
|
||||
TYPE_GROUND)
|
||||
area_blacklist = list(/area/toxins)
|
||||
area_whitelist = list(/area/hydroponics,
|
||||
/area/hallway/secondary/construction)
|
||||
turf_whitelist = list(/turf/simulated/floor/grass)
|
||||
|
||||
/datum/mob_type/electric
|
||||
name = "Electric"
|
||||
weakness = list(/datum/mob_type/ground)
|
||||
resistance = list(/datum/mob_type/electric,
|
||||
/datum/mob_type/flying,
|
||||
/datum/mob_type/steel)
|
||||
weakness = list(TYPE_GROUND)
|
||||
resistance = list(TYPE_ELECTRIC,
|
||||
TYPE_FLYING,
|
||||
TYPE_STEEL)
|
||||
area_whitelist = list(/area/engine,
|
||||
/area/toxins/server,
|
||||
/area/maintenance,
|
||||
/area/turret_protected/ai,
|
||||
/area/turret_protected/ai_upload,
|
||||
/area/turret_protected/aisat_interior,
|
||||
/area/aisat,
|
||||
/area/assembly)
|
||||
turf_whitelist = list(/turf/simulated/floor/bluegrid)
|
||||
|
||||
/datum/mob_type/ground
|
||||
name = "Ground"
|
||||
weakness = list(/datum/mob_type/water,
|
||||
/datum/mob_type/grass,
|
||||
/datum/mob_type/ice)
|
||||
resistance = list(/datum/mob_type/rock,
|
||||
/datum/mob_type/poison)
|
||||
immunity = list(/datum/mob_type/electric)
|
||||
weakness = list(TYPE_WATER,
|
||||
TYPE_GRASS,
|
||||
TYPE_ICE)
|
||||
resistance = list(TYPE_ROCK,
|
||||
TYPE_POISON)
|
||||
immunity = list(TYPE_ELECTRIC)
|
||||
|
||||
/datum/mob_type/rock
|
||||
name = "Rock"
|
||||
weakness = list(/datum/mob_type/water,
|
||||
/datum/mob_type/grass,
|
||||
/datum/mob_type/ground,
|
||||
/datum/mob_type/fighting,
|
||||
/datum/mob_type/steel)
|
||||
resistance = list(/datum/mob_type/fire,
|
||||
/datum/mob_type/grass,
|
||||
/datum/mob_type/poison,
|
||||
/datum/mob_type/normal)
|
||||
weakness = list(TYPE_WATER,
|
||||
TYPE_GRASS,
|
||||
TYPE_GROUND,
|
||||
TYPE_FIGHTING,
|
||||
TYPE_STEEL)
|
||||
resistance = list(TYPE_FIRE,
|
||||
TYPE_FLYING,
|
||||
TYPE_POISON,
|
||||
TYPE_NORMAL)
|
||||
area_whitelist = list(/area/quartermaster,
|
||||
/area/maintenance/disposal)
|
||||
turf_whitelist = list(/turf/simulated/wall,
|
||||
/turf/simulated/floor/mineral)
|
||||
|
||||
/datum/mob_type/bug
|
||||
name = "Bug"
|
||||
weakness = list(/datum/mob_type/fire,
|
||||
/datum/mob_type/rock,
|
||||
/datum/mob_type/flying)
|
||||
resistance = list(/datum/mob_type/grass,
|
||||
/datum/mob_type/ground,
|
||||
/datum/mob_type/fighting)
|
||||
weakness = list(TYPE_FIRE,
|
||||
TYPE_ROCK,
|
||||
TYPE_FLYING)
|
||||
resistance = list(TYPE_GRASS,
|
||||
TYPE_GROUND,
|
||||
TYPE_FIGHTING)
|
||||
area_blacklist = list(/area/toxins)
|
||||
area_whitelist = list(/area/hydroponics,
|
||||
/area/hallway/secondary/construction)
|
||||
turf_whitelist = list(/turf/simulated/floor/grass)
|
||||
|
||||
/datum/mob_type/poison
|
||||
name = "Poison"
|
||||
weakness = list(/datum/mob_type/ground,
|
||||
/datum/mob_type/psychic)
|
||||
resistance = list(/datum/mob_type/grass,
|
||||
/datum/mob_type/bug,
|
||||
/datum/mob_type/fighting)
|
||||
weakness = list(TYPE_GROUND,
|
||||
TYPE_PSYCHIC)
|
||||
resistance = list(TYPE_GRASS,
|
||||
TYPE_BUG,
|
||||
TYPE_POISON,
|
||||
TYPE_FIGHTING)
|
||||
area_blacklist = list(/area/medical,
|
||||
/area/security/medbay,
|
||||
/area/janitor)
|
||||
area_whitelist = list(/area/medical/virology,
|
||||
/area/toxins,
|
||||
/area/medical/research,
|
||||
/area/medical/research_shuttle_dock,
|
||||
/area/crew_quarters/hor,
|
||||
/area/maintenance/asmaint2)
|
||||
|
||||
/datum/mob_type/normal
|
||||
name = "Normal"
|
||||
weakness = list(/datum/mob_type/fighting)
|
||||
immunity = list(/datum/mob_type/ghost)
|
||||
weakness = list(TYPE_FIGHTING)
|
||||
immunity = list(TYPE_GHOST)
|
||||
|
||||
/datum/mob_type/fighting
|
||||
name = "Fighting"
|
||||
weakness = list(/datum/mob_type/psychic,
|
||||
/datum/mob_type/flying)
|
||||
resistance = list(/datum/mob_type/rock,
|
||||
/datum/mob_type/bug,
|
||||
/datum/mob_type/dark)
|
||||
weakness = list(TYPE_PSYCHIC,
|
||||
TYPE_FLYING)
|
||||
resistance = list(TYPE_ROCK,
|
||||
TYPE_BUG,
|
||||
TYPE_DARK)
|
||||
area_blacklist = list(/area/medical)
|
||||
area_whitelist = list(/area/crew_quarters/bar,
|
||||
/area/crew_quarters/fitness,
|
||||
/area/security)
|
||||
turf_whitelist = list(/turf/simulated/floor/wood)
|
||||
|
||||
/datum/mob_type/psychic
|
||||
name = "Psychic"
|
||||
weakness = list(/datum/mob_type/bug,
|
||||
/datum/mob_type/ghost,
|
||||
/datum/mob_type/dark)
|
||||
resistance = list(/datum/mob_type/fighting,
|
||||
/datum/mob_type/psychic)
|
||||
weakness = list(TYPE_BUG,
|
||||
TYPE_GHOST,
|
||||
TYPE_DARK)
|
||||
resistance = list(TYPE_FIGHTING,
|
||||
TYPE_PSYCHIC)
|
||||
area_blacklist = list(/area/toxins,
|
||||
/area/medical/research,
|
||||
/area/medical/research_shuttle_dock,
|
||||
/area/crew_quarters/hor,
|
||||
/area/maintenance/asmaint2,
|
||||
/area/teleporter,
|
||||
/area/gateway)
|
||||
area_whitelist = list(/area/library,
|
||||
/area/chapel,
|
||||
/area/medical/psych)
|
||||
|
||||
/datum/mob_type/ghost
|
||||
name = "Ghost"
|
||||
weakness = list(/datum/mob_type/ghost,
|
||||
/datum/mob_type/dark)
|
||||
resistance = list(/datum/mob_type/bug,
|
||||
/datum/mob_type/poison)
|
||||
immunity = list(/datum/mob_type/normal,
|
||||
/datum/mob_type/fighting)
|
||||
weakness = list(TYPE_GHOST,
|
||||
TYPE_DARK)
|
||||
resistance = list(TYPE_BUG,
|
||||
TYPE_POISON)
|
||||
immunity = list(TYPE_NORMAL,
|
||||
TYPE_FIGHTING)
|
||||
area_whitelist = list(/area/medical/morgue,
|
||||
/area/chapel,
|
||||
/area/medical/genetics_cloning)
|
||||
|
||||
/datum/mob_type/ice
|
||||
name = "Ice"
|
||||
weakness = list(/datum/mob_type/fire,
|
||||
/datum/mob_type/rock,
|
||||
/datum/mob_type/fighting,
|
||||
/datum/mob_type/steel)
|
||||
resistance = list(/datum/mob_type/ice)
|
||||
weakness = list(TYPE_FIRE,
|
||||
TYPE_ROCK,
|
||||
TYPE_FIGHTING,
|
||||
TYPE_STEEL)
|
||||
resistance = list(TYPE_ICE)
|
||||
area_blacklist = list(/area/maintenance/turbine,
|
||||
/area/maintenance/incinerator,
|
||||
/area/crew_quarters/kitchen)
|
||||
area_whitelist = list(/area/toxins/server_coldroom)
|
||||
|
||||
/datum/mob_type/flying
|
||||
name = "Flying"
|
||||
weakness = list(/datum/mob_type/electric,
|
||||
/datum/mob_type/rock,
|
||||
/datum/mob_type/ice)
|
||||
resistance = list(/datum/mob_type/grass,
|
||||
/datum/mob_type/bug,
|
||||
/datum/mob_type/fighting)
|
||||
immunity = list(/datum/mob_type/ground)
|
||||
weakness = list(TYPE_ELECTRIC,
|
||||
TYPE_ROCK,
|
||||
TYPE_ICE)
|
||||
resistance = list(TYPE_GRASS,
|
||||
TYPE_BUG,
|
||||
TYPE_FIGHTING)
|
||||
immunity = list(TYPE_GROUND)
|
||||
area_blacklist = list(/area/maintenance)
|
||||
area_whitelist = list(/area/hallway,
|
||||
/area/escapepodbay,
|
||||
/area/engine/mechanic_workshop,
|
||||
/area/security/podbay)
|
||||
|
||||
/datum/mob_type/bluespace
|
||||
name = "Bluespace"
|
||||
weakness = list(/datum/mob_type/ice,
|
||||
/datum/mob_type/bluespace)
|
||||
resistance = list(/datum/mob_type/fire,
|
||||
/datum/mob_type/water,
|
||||
/datum/mob_type/grass,
|
||||
/datum/mob_type/electric)
|
||||
weakness = list(TYPE_ICE,
|
||||
TYPE_BLUESPACE)
|
||||
resistance = list(TYPE_FIRE,
|
||||
TYPE_WATER,
|
||||
TYPE_GRASS,
|
||||
TYPE_ELECTRIC)
|
||||
|
||||
/datum/mob_type/dark
|
||||
name = "Dark"
|
||||
weakness = list(/datum/mob_type/bug,
|
||||
/datum/mob_type/fighting)
|
||||
resistance = list(/datum/mob_type/ghost,
|
||||
/datum/mob_type/dark)
|
||||
immunity = list(/datum/mob_type/psychic)
|
||||
weakness = list(TYPE_BUG,
|
||||
TYPE_FIGHTING)
|
||||
resistance = list(TYPE_GHOST,
|
||||
TYPE_DARK)
|
||||
immunity = list(TYPE_PSYCHIC)
|
||||
area_blacklist = list(/area/solar,
|
||||
/area/maintenance/auxsolarport,
|
||||
/area/maintenance/starboardsolar,
|
||||
/area/maintenance/portsolar,
|
||||
/area/maintenance/auxsolarstarboard,
|
||||
/area/clownoffice)
|
||||
area_whitelist = list(/area/maintenance,
|
||||
/area/assembly/assembly_line,
|
||||
/area/mimeoffice)
|
||||
turf_blacklist = list(/turf/simulated/floor/light)
|
||||
|
||||
/datum/mob_type/steel
|
||||
name = "Steel"
|
||||
weakness = list(/datum/mob_type/fire,
|
||||
/datum/mob_type/ground,
|
||||
/datum/mob_type/fighting)
|
||||
resistance = list(/datum/mob_type/grass,
|
||||
/datum/mob_type/rock,
|
||||
/datum/mob_type/bug,
|
||||
/datum/mob_type/normal,
|
||||
/datum/mob_type/psychic,
|
||||
/datum/mob_type/ice,
|
||||
/datum/mob_type/flying,
|
||||
/datum/mob_type/bluespace,
|
||||
/datum/mob_type/steel)
|
||||
immunity = list(/datum/mob_type/poison)
|
||||
weakness = list(TYPE_FIRE,
|
||||
TYPE_GROUND,
|
||||
TYPE_FIGHTING)
|
||||
resistance = list(TYPE_GRASS,
|
||||
TYPE_ROCK,
|
||||
TYPE_BUG,
|
||||
TYPE_NORMAL,
|
||||
TYPE_PSYCHIC,
|
||||
TYPE_ICE,
|
||||
TYPE_FLYING,
|
||||
TYPE_BLUESPACE,
|
||||
TYPE_STEEL)
|
||||
immunity = list(TYPE_POISON)
|
||||
Reference in New Issue
Block a user