empserver/scripts/bigstart

86 lines
1.6 KiB
Awk

#!/bin/awk -f
#
# IMPORTANT: You must change "height" and "width" by hand below.
#
# A deity tool to parse a dump file and generate edit commands
# to build larger start sanctuaries.
# dump * | bigstart >bigstart.out
# exec bigstart.out
# -Drake (dld@chem.psu.edu)
function sanctuary(x,y,o,nsect)
{
if (x>=width/2) x -= width;
if (y>=height/2) y -= height;
if (x<-width/2) x += width;
if (y<-height/2) y+= height;
nsect = x "," y;
if ((nsect in newown) && !(nsect in own)) {
printf("des %s s\n",nsect);
printf("give civ %s 550\n",nsect);
printf("setsector oldowner %s %d\n",nsect,o);
printf("setsector owner %s %d\n",nsect,o);
printf("setsector work %s 100\n",nsect);
own[nsect]=o;
delete newown[nsect];
added++;
}
}
BEGIN {
SUBSEP=",";
sects=0;
begin=0;
width=64;
height=32;
}
{
if (begin==1) {
for (i=1;i<=NF;i++) header[i]=$i;
nheader=NF;
begin=2;
break;
}
if (NF != nheader) {
begin=0;
}
if (begin==2) {
for (i=1;i<=nheader;i++) {
val[header[i]] = $i;
}
if (val["own"]==0 && val["des"]=="-") {
newown[val["x"],val["y"]]=0;
}
if (val["own"]>0) {
own[val["x"],val["y"]]=val["own"];
}
}
}
/ *DUMP SECTOR/ { begin=1; }
END {
do {
added=0;
for (sect in own) {
split(sect,a,",");
x=a[1];
y=a[2];
sanctuary(x+2,y,own[sect]);
sanctuary(x-2,y,own[sect]);
sanctuary(x+1,y+1,own[sect]);
sanctuary(x+1,y-1,own[sect]);
sanctuary(x-1,y+1,own[sect]);
sanctuary(x-1,y-1,own[sect]);
}
} while (added);
}