diff --git a/code/__defines/arfs_defines.dm b/code/__defines/arfs_defines.dm index 7f555f5de77..2cb8e86a39f 100644 --- a/code/__defines/arfs_defines.dm +++ b/code/__defines/arfs_defines.dm @@ -27,4 +27,6 @@ #define M_TF "transformed" //A ditto or something has transformed #define M_INVIS "invisible" //Mew can turn invisible, but not ethereal like M_GHOSTED +#define P_TRAIT_BLACKLIST "blacklist" //Don't spawn this pokemon or show it in lists. + #define MAP_LEVEL_VORESPAWN 0x100 // Z-levels players are allowed to late join to via vorish means. Usually non-dangerous locations. \ No newline at end of file diff --git a/content_arfs/code/ghost_pods_arfs.dm b/content_arfs/code/ghost_pods_arfs.dm index 6332d25d929..906ffffc42c 100644 --- a/content_arfs/code/ghost_pods_arfs.dm +++ b/content_arfs/code/ghost_pods_arfs.dm @@ -1,7 +1,6 @@ //globals so the lists dont get generated more than once var/global/list/pokemon_choices_list = list()//Referenced list for use in input() var/global/list/pokemon_pods = list()//List of pods that ghosts can spawn at - //Pod to spawn in as pokemon or other mobs. /obj/structure/ghost_pod/ghost_activated/pokemon name = "\improper Pokemon teleporter" diff --git a/content_arfs/code/mob/pokemon.dm b/content_arfs/code/mob/pokemon.dm index 6425abcdb32..48838271ee2 100644 --- a/content_arfs/code/mob/pokemon.dm +++ b/content_arfs/code/mob/pokemon.dm @@ -34,6 +34,7 @@ var/move_cooldown = FALSE var/list/p_types = list() var/list/additional_moves = list() + var/list/p_traits = list() //List of passive traits/flags. var/resting_heal_max = 2 var/on_manifest = FALSE var/list/active_moves = list() //Moves that are passive or toggles can be found here @@ -295,6 +296,7 @@ default_pixel_y = 16 pixel_y = 16 old_y = 16 + p_traits = list(P_TRAIT_BLACKLIST) /mob/living/simple_mob/animal/passive/pokemon/leg/rayquaza name = "Rayquaza" @@ -547,6 +549,7 @@ /mob/living/simple_mob/animal/passive/pokemon/jolteon/bud name = "Bud" active_moves = list(M_SHOCK) //Shocks you by default + p_traits = list(P_TRAIT_BLACKLIST) /mob/living/simple_mob/animal/passive/pokemon/kirlia name = "kirlia" diff --git a/maps/Arfs/submaps/arfs_common_offmaps.dm b/maps/Arfs/submaps/arfs_common_offmaps.dm index fd21aa89aa7..56ad84d02c1 100644 --- a/maps/Arfs/submaps/arfs_common_offmaps.dm +++ b/maps/Arfs/submaps/arfs_common_offmaps.dm @@ -7,6 +7,7 @@ #include "aerostat/surface.dmm" #include "space/debrisfield.dmm" #include "space/fueldepot.dmm" +#include "pokemon/pokemon_planet.dmm" #endif #include "beach/_beach.dm" @@ -523,4 +524,39 @@ name = "Talon" flags = MAP_LEVEL_PLAYER|MAP_LEVEL_PERSIST|MAP_LEVEL_MAPPABLE base_turf = /turf/space - z = Z_LEVEL_OFFMAP1 \ No newline at end of file + z = Z_LEVEL_OFFMAP1 + +#include "pokemon/_pokemon_planet.dm" +/datum/map_template/common_lateload/away_pokemon_planet + name = "Pokemon Planet" + desc = "The pokemon planet away mission." + mappath = 'maps/Arfs/submaps/pokemon/pokemon_planet.dmm' + associated_map_datum = /datum/map_z_level/common_lateload/away_pokemon_planet + +/datum/map_z_level/common_lateload/away_pokemon_planet + name = "Away Mission - Desert Beach" + z = Z_LEVEL_BEACH + base_turf = /turf/simulated/floor/outdoors/rocks/caves + +/datum/map_template/common_lateload/away_pokemon_planet + name = "Desert Planet - Z2 Cave" + desc = "The beach away mission's cave." + mappath = 'maps/Arfs/submaps/beach/cave.dmm' + associated_map_datum = /datum/map_z_level/common_lateload/away_pokemon_planet_cave + +/datum/map_template/common_lateload/away_pokemon_planet/on_map_loaded(z) + . = ..() + seed_submaps(list(Z_LEVEL_BEACH_CAVE), 120, /area/tether_away/cave/unexplored/normal, /datum/map_template/surface/mountains/normal) + //seed_submaps(list(Z_LEVEL_BEACH_CAVE), 70, /area/tether_away/cave/unexplored/normal, /datum/map_template/surface/mountains/deep) + + // Now for the tunnels. + new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_BEACH_CAVE, world.maxx - 4, world.maxy - 4) +// new /datum/random_map/noise/ore/beachmine(null, 1, 1, Z_LEVEL_BEACH_CAVE, 64, 64) + +/datum/map_z_level/common_lateload/away_pokemon_planet_cave + name = "Away Mission - Desert Cave" + z = Z_LEVEL_BEACH_CAVE + base_turf = /turf/simulated/floor/outdoors/rocks/caves + +/obj/effect/step_trigger/zlevel_fall/beach + var/static/target_z \ No newline at end of file diff --git a/maps/Arfs/submaps/beach/_beach.dm b/maps/Arfs/submaps/beach/_beach.dm index f63be856253..13d30a4cdde 100644 --- a/maps/Arfs/submaps/beach/_beach.dm +++ b/maps/Arfs/submaps/beach/_beach.dm @@ -76,7 +76,7 @@ // Two mob spawners that are placed on the map that spawn some mobs! // They keep track of their mob, and when it's dead, spawn another (only if nobody is looking) // Note that if your map has step teleports, mobs may wander through them accidentally and not know how to get back -/obj/tether_away_spawner/beach_outside +/obj/arfs_away_spawner/beach_outside name = "Beach Outside Spawner" //Just a name faction = "beach_out" //Sets all the mobs to this faction so they don't infight atmos_comp = TRUE //Sets up their atmos tolerances to work in this setting, even if they don't normally (20% up/down tolerance for each gas, and heat) diff --git a/maps/Arfs/submaps/pokemon/_pokemon_planet.dm b/maps/Arfs/submaps/pokemon/_pokemon_planet.dm new file mode 100644 index 00000000000..a45f39ae731 --- /dev/null +++ b/maps/Arfs/submaps/pokemon/_pokemon_planet.dm @@ -0,0 +1,235 @@ +// -- Datums -- // + +/obj/effect/overmap/visitable/sector/pokemon_planet + name = "Great Safari" + desc = "The homeworld to most species of Pokemon. Features mostly moderate climates and a wide variety of pokemon species." + scanner_desc = @{"[i]Stellar Body[/i]: Great Safari +[i]Class[/i]: M-Class Planet +[i]Habitability[/i]: High +[b]Notice[/b]: Request authorization from planetary authorities before attempting to construct settlements"} + icon_state = "globe" + in_space = 0 + initial_generic_waypoints = list("pokemon_e", "pokemon_c", "pokemon_nw") + extra_z_levels = list(Z_LEVEL_pokemon_CAVE) + known = TRUE + icon_state = "desert" + + skybox_icon = 'icons/skybox/virgo4.dmi' + skybox_icon_state = "v4" + skybox_pixel_x = 0 + skybox_pixel_y = 0 + +//This is a special subtype of the thing that generates ores on a map +//It will generate more rich ores because of the lower numbers than the normal one +/datum/random_map/noise/ore/pokemon_planet + descriptor = "pokemon planet ore distribution map" + deep_val = 0.6 //More riches, normal is 0.7 and 0.8 + rare_val = 0.5 + +//The check_map_sanity proc is sometimes unsatisfied with how AMAZING our ores are +/datum/random_map/noise/ore/pokemon_planet/check_map_sanity() + var/rare_count = 0 + var/surface_count = 0 + var/deep_count = 0 + + // Increment map sanity counters. + for(var/value in map) + if(value < rare_val) + surface_count++ + else if(value < deep_val) + rare_count++ + else + deep_count++ + // Sanity check. + if(surface_count < 100) + admin_notice("Insufficient surface minerals. Rerolling...", R_DEBUG) + return 0 + else if(rare_count < 50) + admin_notice("Insufficient rare minerals. Rerolling...", R_DEBUG) + return 0 + else if(deep_count < 50) + admin_notice("Insufficient deep minerals. Rerolling...", R_DEBUG) + return 0 + else + return 1 + +// -- Objs -- // + +//This object simply performs any map setup that needs to happen on our map if it loads. +//As with the above, you do need to place this object on the map somewhere. +/obj/away_mission_init/pokemon_planet + name = "away mission initializer - pokemon_planet" + +//In our case, it initializes the ores and random submaps in the beach's cave, then deletes itself +/obj/away_mission_init/pokemon_planet/Initialize() + // Cave submaps are first. + /*seed_submaps(list(z), 50, /area/tether_away/cave/unexplored/normal, /datum/map_template/surface/mountains/normal) + seed_submaps(list(z), 50, /area/tether_away/cave/unexplored/deep, /datum/map_template/surface/mountains/deep) + + // Now for the tunnels. + new /datum/random_map/automata/cave_system/no_cracks(null, 1, 1, Z_LEVEL_pokemon_CAVE, world.maxx, world.maxy) + new /datum/random_map/noise/ore/pokemon_planet(null, 1, 1, Z_LEVEL_pokemon_CAVE, 64, 64)*/ + + initialized = TRUE + return INITIALIZE_HINT_QDEL + +// Two mob spawners that are placed on the map that spawn some mobs! +// They keep track of their mob, and when it's dead, spawn another (only if nobody is looking) +// Note that if your map has step teleports, mobs may wander through them accidentally and not know how to get back +/obj/arfs_away_spawner/pokemon_outside + name = "Beach Outside Spawner" //Just a name + faction = "pokemon_out" //Sets all the mobs to this faction so they don't infight + atmos_comp = TRUE //Sets up their atmos tolerances to work in this setting, even if they don't normally (20% up/down tolerance for each gas, and heat) + prob_spawn = 100 //Chance of this spawner spawning a mob (once this is missed, the spawner is 'depleted' and won't spawn anymore) + prob_fall = 25 //Chance goes down by this much each time it spawns one (not defining and prob_spawn 100 means they spawn as soon as one dies) + //guard = 40 //They'll stay within this range (not defining this disables them staying nearby and they will wander the map (and through step teleports)) + mobs_to_pick_from = list( + /mob/living/simple_mob/vore/fennec = 300, + /mob/living/simple_mob/animal/passive/snake/python = 100, + /mob/living/simple_mob/vore/alienanimals/teppi = 10, + /mob/living/simple_mob/vore/alienanimals/teppi/baby = 1 + ) + +/obj/arfs_away_spawner/pokemon_outside_friendly + name = "Pokemon Spawner - All" + faction = "neutral" + atmos_comp = TRUE + prob_spawn = 100 + prob_fall = 25 + guard = 30 + mobs_to_pick_from = list( + /mob/living/simple_mob/vore/fennec + ) + +/obj/arfs_away_spawner/pokemon_cave + name = "Beach Cave Spawner" + faction = "pokemon_cave" + atmos_comp = TRUE + prob_spawn = 100 + prob_fall = 40 + //guard = 20 + mobs_to_pick_from = list( + /mob/living/simple_mob/vore/aggressive/frog = 6, //Frogs are 3x more likely to spawn than, + /mob/living/simple_mob/vore/aggressive/deathclaw = 2, //these deathclaws are, with these values, + /mob/living/simple_mob/animal/giant_spider = 4, + /mob/living/simple_mob/vore/aggressive/giant_snake = 2, + /mob/living/simple_mob/animal/giant_spider/webslinger = 2, + /mob/living/simple_mob/vore/oregrub = 1 + ) + +// These are step-teleporters, for map edge transitions +// This top one goes INTO the cave +/obj/effect/step_trigger/teleporter/away_pokemon_tocave/New() + ..() + teleport_x = src.x //X is horizontal. This is a top of map transition, so you want the same horizontal alignment in the cave as you have on the beach + teleport_y = 2 //2 is because it's putting you on row 2 of the map to the north + teleport_z = z+1 //The cave is always our Z-level plus 1, because it's loaded after us + +//This one goes OUT OF the cave +/obj/effect/step_trigger/teleporter/away_pokemon_tobeach/New() + ..() + teleport_x = src.x //Same reason as bove + teleport_y = world.maxy - 1 //This means "1 space from the top of the map" + teleport_z = z-1 //Opposite of 'tocave', beach is always loaded as the map before us + +// -- Turfs -- // + +//These are just some special turfs for the beach water +/turf/simulated/floor/pokemon_planet/coastwater + name = "Water" + icon_state = "water" + +/turf/simulated/floor/pokemon_planet/coastwater/New() + ..() + add_overlay(image("icon"='icons/misc/beach.dmi',"icon_state"="water","layer"=MOB_LAYER+0.1)) + +// -- Areas -- // + +/area/tether_away/beach + name = "\improper Away Mission - Virgo 4 Beach" + icon_state = "away" + base_turf = /turf/simulated/floor/pokemon_planet/sand/outdoors //This is what the ground turns into if destroyed/bombed/etc + dynamic_lighting = 1 + requires_power = 1 + +/area/tether_awaypokemon_planetpowershed + name = "\improper Away Mission - Virgo 4 Coast PS" + icon_state = "blue2" + base_turf = /turf/simulated/floor/pokemon_planet/sand/outdoors + +/area/tether_awaypokemon_planetcoast + name = "\improper Away Mission - Virgo 4 Coast" + icon_state = "blue2" + base_turf = /turf/simulated/floor/pokemon_planet/coastline + +/area/tether_awaypokemon_planetwater + name = "\improper Away Mission - Virgo 4 Water" + icon_state = "bluenew" + base_turf = /turf/simulated/floor/pokemon_planet/coastwater + +/area/tether_awaypokemon_planetjungle + name = "\improper Away Mission - Virgo 4 Desert" + icon_state = "green" + base_turf = /turf/simulated/floor/pokemon_planet/sand/desert/outdoors + +/area/tether_awaypokemon_planetresort + icon = 'icons/turf/areas_vr.dmi' + icon_state = "yellow" + base_turf = /turf/simulated/floor/pokemon_planet/sand/outdoors + +/area/tether_awaypokemon_planetresort/kitchen + name = "\improper Away Mission - Virgo 4 Kitchen" + icon_state = "grewhicir" + +/area/tether_awaypokemon_planetresort/lockermed + name = "\improper Away Mission - Virgo 4 Utility Pavilion" + icon_state = "cyawhicir" + +/area/tether_awaypokemon_planetresort/janibar + name = "\improper Away Mission - Virgo 4 Bar" + icon_state = "purwhicir" + +/area/tether_awaypokemon_planetresort/dorm1 + name = "\improper Away Mission - Virgo 4 Private Room 1" + icon_state = "bluwhicir" + flags = RAD_SHIELDED +/area/tether_awaypokemon_planetresort/dorm2 + name = "\improper Away Mission - Virgo 4 Private Room 2" + icon_state = "bluwhicir" + flags = RAD_SHIELDED +/area/tether_awaypokemon_planetresort/dorm3 + name = "\improper Away Mission - Virgo 4 Private Room 3" + icon_state = "bluwhicir" + flags = RAD_SHIELDED +/area/tether_awaypokemon_planetresort/dorm4 + name = "\improper Away Mission - Virgo 4 Private Room 4" + icon_state = "bluwhicir" + flags = RAD_SHIELDED + +/area/tether_awaypokemon_planetcavebase + name = "\improper Away Mission - Virgo 4 Mysterious Cave" + icon = 'icons/turf/areas_vr.dmi' + icon_state = "orawhicir" + flags = RAD_SHIELDED + +//Some areas for the cave, which are referenced by our init object to seed submaps and ores +/area/tether_away/cave + flags = RAD_SHIELDED + ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') + base_turf = /turf/simulated/mineral/floor/ignore_mapgen/cave + +/area/tether_away/cave/explored/normal + name = "\improper Away Mission - Virgo 4 Cave (E)" + icon_state = "explored" + +/area/tether_away/cave/unexplored/normal + name = "\improper Away Mission - Virgo 4 Cave (UE)" + icon_state = "unexplored" + +/area/tether_away/cave/explored/deep + name = "\improper Away Mission - Virgo 4 Cave Deep (E)" + icon_state = "explored_deep" + +/area/tether_away/cave/unexplored/deep + name = "\improper Away Mission - Virgo 4 Cave Deep (UE)" + icon_state = "unexplored_deep" diff --git a/maps/Arfs/submaps/pokemon/pokemon_planet.dmm b/maps/Arfs/submaps/pokemon/pokemon_planet.dmm new file mode 100644 index 00000000000..11311029b96 --- /dev/null +++ b/maps/Arfs/submaps/pokemon/pokemon_planet.dmm @@ -0,0 +1,3 @@ +"a" = () + +(1,1,1, 255,255,1) = {""}