dmp_reader{ var{ quote = "\"" } verb{ load_map(var/dmp_file as file){ var/z_offset = world.maxz var/quote = ascii2text(34) var/tfile = file2text(dmp_file) var/tfile_len = length(tfile) var/list/grid_models[0] var/key_len = length(copytext(tfile,2,findtext(tfile,quote,2,0))) for(var/lpos=1;lpos<tfile_len;lpos=findtext(tfile,"\n",lpos,0)+1){ var/tline = copytext(tfile,lpos,findtext(tfile,"\n",lpos,0)) if(copytext(tline,1,2)!=quote){break} var/model_key = copytext(tline,2,findtext(tfile,quote,2,0)) var/model_contents = copytext(tline,findtext(tfile,"=")+3,length(tline)) grid_models[model_key] = model_contents sleep(-1) } var/zcrd=0 var/ycrd=0 var/xcrd=0 for(var/zpos=findtext(tfile,"\n(1,1,");TRUE;zpos=findtext(tfile,"\n(1,1,",zpos+1,0)){ world.maxz++ zcrd++ ycrd=0 var/zgrid = copytext(tfile,findtext(tfile,quote+"\n",zpos,0)+2,findtext(tfile,"\n"+quote,zpos,0)+1) for(var/gpos=1;gpos!=0;gpos=findtext(zgrid,"\n",gpos,0)+1){ var/grid_line = copytext(zgrid,gpos,findtext(zgrid,"\n",gpos,0)+1) var/y_depth = length(zgrid)/(length(grid_line)) if(world.maxy<y_depth){world.maxy=y_depth} grid_line=copytext(grid_line,1,length(grid_line)) if(!ycrd){ ycrd = y_depth } else{ycrd--} xcrd=0 for(var/mpos=1;mpos<=length(grid_line);mpos+=key_len){ xcrd++ if(world.maxx<xcrd){world.maxx=xcrd} var/model_key = copytext(grid_line,mpos,mpos+key_len) parse_grid(grid_models[model_key],xcrd,ycrd,zcrd+z_offset) } if(gpos+length(grid_line)+1>length(zgrid)){break} sleep(-1) } if(findtext(tfile,quote+"}",zpos,0)+2==tfile_len){break} sleep(-1) } } } proc{ parse_grid(var/model as text,var/xcrd as num,var/ycrd as num,var/zcrd as num){ var/list/text_strings[0] for(var/index=1;findtext(model,quote);index++){ text_strings.len=index text_strings[index] = copytext(model,findtext(model,quote)+1,findtext(model,quote,findtext(model,quote)+1,0)) model = copytext(model,1,findtext(model,quote))+"~[index]"+copytext(model,findtext(model,quote,findtext(model,quote)+1,0)+1,0) sleep(-1) } var/list/old_turf_underlays[0] var/old_turf_density var/old_turf_opacity for(var/dpos=1;dpos!=0;dpos=findtext(model,",",dpos,0)+1){ var/full_def = copytext(model,dpos,findtext(model,",",dpos,0)) var/atom_def = text2path(copytext(full_def,1,findtext(full_def,"{"))) var/list/attributes[0] if(findtext(full_def,"{")){ full_def = copytext(full_def,1,length(full_def)) for(var/apos=findtext(full_def,"{")+1;apos!=0;apos=findtext(full_def,";",apos,0)+1){ attributes.Add(copytext(full_def,apos,findtext(full_def,";",apos,0))) if(!findtext(copytext(full_def,apos,0),";")){break} sleep(-1) } } var/atom/instance if(ispath(atom_def,/area)){ instance = locate(atom_def) instance.contents.Add(locate(xcrd,ycrd,zcrd)) } else if(ispath(atom_def,/turf)){ var/turf/old_turf = locate(xcrd,ycrd,zcrd) if(old_turf.density){old_turf_density = 1} if(old_turf.opacity){old_turf_opacity = 1} if(old_turf.icon){ var/image/old_turf_image = image(old_turf.icon,null,old_turf.icon_state,old_turf.layer,old_turf.dir) old_turf_underlays.Add(old_turf_image) } instance = new atom_def(old_turf) for(var/inverse_index=old_turf_underlays.len;inverse_index;inverse_index--){ var/image/image_underlay = old_turf_underlays[inverse_index] image_underlay.loc = instance instance.underlays.Add(image_underlay) } if(!instance.density){instance.density = old_turf_density} if(!instance.opacity){instance.opacity = old_turf_opacity} } else{ instance = new atom_def(locate(xcrd,ycrd,zcrd)) } for(var/index=1;index<=attributes.len;index++){ var/trim_left = trim_text(copytext(attributes[index],1,findtext(attributes[index],"="))) var/trim_right = trim_text(copytext(attributes[index],findtext(attributes[index],"=")+1,0)) if(findtext(trim_right,"~")){ var/reference_index = copytext(trim_right,findtext(trim_right,"~")+1,0) trim_right=text_strings[text2num(reference_index)] } if(copytext(trim_right,1,2) == "'"){ trim_right = file(copytext(trim_right,2,length(trim_right))) } instance.vars[trim_left] = trim_right } if(!findtext(copytext(model,dpos,0),",")){break} sleep(-1) } } trim_text(var/what as text){ while(findtext(what," ",1,2)&&length(what)){ what=copytext(what,2,0) } while(findtext(what," ",length(what),0)&&length(what)){ what=copytext(what,1,length(what)) } return what } } }
mob Admin verb Map_Changer() set category = "Admin" var/dmp_map switch(input("Pick a map","Choose")in list("1-1","1-2","2-1","Cancel")) if("1-1") dmp_map='Maps/NES_Mario_1.dmp' var/new_maxz = world.maxz + 1 var/dmp_reader/new_reader = new() new_reader.load_map(dmp_map) src.z = new_maxz usr.loc=locate(1,1,1) if("1-2") dmp_map='Maps/NES_Mario_2.dmp' var/new_maxz = world.maxz + 1 var/dmp_reader/new_reader = new() new_reader.load_map(dmp_map) src.z = new_maxz usr.loc=locate(1,1,1) if("2-1") dmp_map='Maps/NES_Mario_2-1.dmp' var/new_maxz = world.maxz + 1 var/dmp_reader/new_reader = new() new_reader.load_map(dmp_map) src.z = new_maxz usr.loc=locate(1,1,1)
|