Files
Paradise/code/game/asteroid/asteroid.dm
SkyMarshal 4b79c258b6 Map update: Adds wardrobes for all jobs + copiers and filing cabinets.
Modified surgery to work with autopsy
Adminhelp should go to the admin channel without being stupid
suicide tweaked so all antags can use it
You can no longer radio while stunned
More door fixes.
2012-01-29 02:16:18 -07:00

163 lines
5.0 KiB
Plaintext

proc/spawn_asteroid(var/turf/start_loc,var/type,var/size,var/richness)//type: 0 or null - random, 1 - nothing, 2 - iron, 3 - silicon
if(!size)
size = pick(100;2,50;3,35;4,25;6,10;12)
if(start_loc.x - size < 5 || start_loc.x + size >= world.maxx - 5 || start_loc.y - size < 5 || start_loc.y + size > world.maxy -5)
return 0
if(!type)
type = pick(50;1,2,3)
if(!richness)
richness = rand(10,40)
// world << "Asteroid size: [size]; Asteroid type: [type]"
var/list/turfs = circlerangeturfs(start_loc,size)
if(!islist(turfs) || isemptylist(turfs))
return 0
var/area/asteroid/AstAr = new
AstAr.name = "Asteroid #[start_loc.x][start_loc.y][start_loc.z]"
for(var/turf/T in turfs)
var/dist = get_dist(start_loc,T)
if(abs(GaussRand(dist))<size) //prob(100-(dist*rand(2,4))))//I'm terrible at generating random things.
var/turf/simulated/wall/asteroid/A
if(type > 1 && prob(richness))
switch(type)
if(2)
A = new /turf/simulated/wall/asteroid/iron(T)
if(3)
A = new /turf/simulated/wall/asteroid/silicon(T)
else
A = new /turf/simulated/wall/asteroid(T)
A.opacity = 0
A.sd_NewOpacity(1)
AstAr.contents += A
if(max_secret_rooms && size >= 10)
var/x_len = rand(4,size)
var/y_len = pick(4,size)
var/st_l = locate(start_loc.x-round(x_len/2),start_loc.y-round(y_len/2),start_loc.z)
if(st_l)
spawn_room(st_l,x_len,y_len)
max_secret_rooms--
return 1
/proc/populate_w_asteroids(var/z,var/density=null)
if(!density)
density = pick(10,20,40)
while(density)
var/x = rand(1,world.maxx)
var/y = rand(1,world.maxy)
// world << "Asteroid coords: [x], [y], [z]"
var/start_loc = locate(x,y,z)
if(start_loc && spawn_asteroid(start_loc))
density--
return
/datum/game_mode/proc/setup_sectors()
world << "\blue \b Randomizing space sectors."
var/list/sectors = list(1,3,4,0,0,0,0,0,0)
var/length = sectors.len/3
global_map = new/list(length,length)//3x3 map
var/x
var/y
for(x=1,x<=length,x++)
for(y=1,y<=length,y++)
var/sector
if(sectors.len)
sector = pick(sectors)
sectors -= sector
if(sector == 0)
sector = ++world.maxz
populate_w_asteroids(sector)
global_map[x][y] = sector
else
break
world << "\blue \b Randomization complete."
/*
//debug
for(x=1,x<=global_map.len,x++)
var/list/y_arr = global_map[x]
for(y=1,y<=y_arr.len,y++)
var/t = ""
switch(y_arr[y])
if(1) t = "SS13"
if(3) t = "AI Satellite"
if(4) t = "Derelict"
else t = "Empty Cold Space"
world << "Global map [x] - [y] contains [t] (Z = [y_arr[y]])"
//debug
*/
return
/datum/game_mode/proc/spawn_exporation_packs()
for (var/obj/effect/landmark/L in world)
if (L.tag == "landmark*ExplorationPack")
new /obj/item/weapon/storage/explorers_box(L.loc)
del(L)
return
proc/spawn_room(var/atom/start_loc,var/x_size,var/y_size,var/wall,var/floor)
var/list/room_turfs = list("walls"=list(),"floors"=list())
//world << "Room spawned at [start_loc.x],[start_loc.y],[start_loc.z]"
if(!wall)
wall = pick(/turf/simulated/wall/r_wall,/turf/simulated/wall,/obj/effect/alien/resin)
if(!floor)
floor = pick(/turf/simulated/floor,/turf/simulated/floor/engine)
for(var/x = 0,x<x_size,x++)
for(var/y = 0,y<y_size,y++)
var/turf/T
var/cur_loc = locate(start_loc.x+x,start_loc.y+y,start_loc.z)
if(x == 0 || x==x_size-1 || y==0 || y==y_size-1)
T = new wall(cur_loc)
room_turfs["walls"] += T
else
T = new floor(cur_loc)
room_turfs["floors"] += T
return room_turfs
proc/admin_spawn_room_at_pos()
var/wall
var/floor
var/x = input("X position","X pos",1)
var/y = input("Y position","Y pos",1)
var/z = input("Z position","Z pos",1)
var/x_len = input("Desired length.","Length",5)
var/y_len = input("Desired width.","Width",5)
switch(alert("Wall type",null,"Reinforced wall","Regular wall","Asteroid wall","Resin wall"))
if("Reinforced wall")
wall=/turf/simulated/wall/r_wall
if("Regular wall")
wall=/turf/simulated/wall
if("Asteroid wall")
wall=/turf/simulated/wall/asteroid
if("Resin wall")
wall=/obj/effect/alien/resin
switch(alert("Floor type",null,"Regular floor","Reinforced floor"))
if("Regular floor")
floor=/turf/simulated/floor
if("Reinforced floor")
floor=/turf/simulated/floor/engine
if(x && y && z && wall && floor && x_len && y_len)
spawn_room(locate(x,y,z),x_len,y_len,wall,floor)
return
var/global/list/space_surprises = list(/obj/item/clothing/mask/facehugger,
/obj/effect/critter/spesscarp,
/obj/effect/critter/spesscarp/elite,
// /obj/creature,
/obj/item/weapon/rcd,
/obj/item/weapon/rcd_ammo,
/obj/item/weapon/spacecash,
// /obj/item/weapon/cloaking_device,
// /obj/item/weapon/gun/energy/teleport_gun,
/obj/item/weapon/rubber_chicken,
/obj/item/weapon/melee/energy/sword/pirate
)
var/global/max_secret_rooms = 6