- Redrew router and firewall objects to be more Cisco-like.
- Corrected random crash when running under Windows - Added more keyboard shortcuts - Corrected bug in savemap() function, and added convert.c program to convert old diagram files - Increased maximum object dimensions - Increased maximum number of maps - Increased maximum number of vectors per object - Object toolbox nows scrolls to show all objects (use q/w or ,/. keys) - Can now use CTRL+LMB to create links/add points (for 2-button mice) - Added export to BMP function when save filename ends with ".bmp" - No longer need to avoid text when double clicking to drill down.
This commit is contained in:
parent
05fabbfaf3
commit
bdc798c0fa
6
Makefile
6
Makefile
|
@ -1,5 +1,5 @@
|
||||||
netmapr: netmapr.c constants.h netmapr.h Makefile
|
netmapr: netmapr.c constants.h netmapr.h Makefile
|
||||||
gcc -Wall -g netmapr.c -onetmapr `sdl-config --libs --cflags` -L/usr/X11R6/lib -lX11 -lpthread -lXext
|
gcc -Wall -g netmapr.c -I/usr/local/include -onetmapr -lmingw32 -L/usr/local/lib -lSDLmain -lSDL -mwindows
|
||||||
|
|
||||||
install: netmapr
|
convert: convert.c convert.h Makefile
|
||||||
cp -f netmapr /usr/local/bin ; [ ! -d ~/.netmapr ] && mkdir ~/.netmapr ; cp -f *.dat ~/.netmapr/
|
gcc -Wall -g convert.c -I/usr/local/include -oconvert -lmingw32 -L/usr/local/lib -lSDLmain -lSDL
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
netmapr: netmapr.c constants.h netmapr.h Makefile
|
netmapr: netmapr.c constants.h netmapr.h Makefile
|
||||||
gcc -Wall -g netmapr.c -I/usr/local/include -onetmapr -lmingw32 -L/usr/local/lib -lSDLmain -lSDL
|
gcc -Wall -g netmapr.c -I/usr/local/include -onetmapr -lmingw32 -L/usr/local/lib -lSDLmain -lSDL -mwindows
|
||||||
|
|
||||||
|
convert: convert.c convert.h Makefile
|
||||||
|
gcc -Wall -g convert.c -I/usr/local/include -oconvert -lmingw32 -L/usr/local/lib -lSDLmain -lSDL
|
||||||
|
|
11
constants.h
11
constants.h
|
@ -1,4 +1,4 @@
|
||||||
#define VERSION "0.97"
|
#define VERSION "0.99"
|
||||||
|
|
||||||
#define BUFLEN 512
|
#define BUFLEN 512
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
#define MAXPOINTS 20
|
#define MAXPOINTS 20
|
||||||
#define MAXBUTTONS 40
|
#define MAXBUTTONS 40
|
||||||
|
|
||||||
#define MAXMAPS 20
|
#define MAXMAPS 100
|
||||||
|
|
||||||
#define MAXHISTORY 50
|
#define MAXHISTORY 50
|
||||||
#define MAXCHILDREN 10
|
#define MAXCHILDREN 10
|
||||||
|
@ -29,14 +29,15 @@
|
||||||
#define MAXLETTERWIDTH 100
|
#define MAXLETTERWIDTH 100
|
||||||
#define MAXLETTERHEIGHT 100
|
#define MAXLETTERHEIGHT 100
|
||||||
|
|
||||||
#define MAXOBJWIDTH 300
|
#define MAXOBJWIDTH 750
|
||||||
#define MAXOBJHEIGHT 300
|
#define MAXOBJHEIGHT 550
|
||||||
#define MINOBJWIDTH 20
|
#define MINOBJWIDTH 20
|
||||||
#define MINOBJHEIGHT 20
|
#define MINOBJHEIGHT 20
|
||||||
|
|
||||||
#define MAXFILLSTACK 500000
|
#define MAXFILLSTACK 500000
|
||||||
|
|
||||||
#define MAXVECTORSPERIMAGE (60)
|
#define OLDMAXVECTORSPERIMAGE (60)
|
||||||
|
#define MAXVECTORSPERIMAGE (120)
|
||||||
|
|
||||||
#define LINESELTHRESHOLD (4)
|
#define LINESELTHRESHOLD (4)
|
||||||
#define LINESELHANDLESIZE (5)
|
#define LINESELHANDLESIZE (5)
|
||||||
|
|
|
@ -0,0 +1,163 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <SDL/SDL.h>
|
||||||
|
#include <SDL/SDL_keysym.h>
|
||||||
|
#include "convert.h"
|
||||||
|
#include "constants.h"
|
||||||
|
|
||||||
|
char text[BUFLEN];
|
||||||
|
|
||||||
|
int nummaps;
|
||||||
|
int curmap;
|
||||||
|
int modified;
|
||||||
|
|
||||||
|
int main (int argc, char **argv) {
|
||||||
|
if (argc != 3) {
|
||||||
|
printf("convert - converts old netmapr 0.98 maps to new format.\n",argv[0]);
|
||||||
|
printf("usage: %s source dest\n",argv[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(text, argv[1]);
|
||||||
|
loadmap();
|
||||||
|
|
||||||
|
strcpy(text, argv[2]);
|
||||||
|
savemap();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int loadmap(void) {
|
||||||
|
char filename[BUFLEN];
|
||||||
|
FILE *f;
|
||||||
|
int namelen;
|
||||||
|
int i;
|
||||||
|
/* TODO: validate */
|
||||||
|
strcpy(filename, text);
|
||||||
|
|
||||||
|
|
||||||
|
f = fopen(filename, "rb");
|
||||||
|
if (!f) {
|
||||||
|
printf("ERROR: Cannot open '%s'.\n",filename);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: free() variables! */
|
||||||
|
|
||||||
|
|
||||||
|
/* read in number maps */
|
||||||
|
fread(&nummaps, sizeof(int), 1, f);
|
||||||
|
|
||||||
|
for (i = 0; i < nummaps; i++) {
|
||||||
|
fread(&map[i].width, sizeof(int), 1, f);
|
||||||
|
fread(&map[i].height, sizeof(int), 1, f);
|
||||||
|
fread(&map[i].bpp, sizeof(int), 1, f);
|
||||||
|
fread(&map[i].bgcol, sizeof(SDL_Color), 1, f);
|
||||||
|
fread(&map[i].boxcol, sizeof(SDL_Color), 1, f);
|
||||||
|
fread(&map[i].numthings, sizeof(int), 1, f);
|
||||||
|
fread(&map[i].numobjects, sizeof(int), 1, f);
|
||||||
|
fread(&map[i].numlinks, sizeof(int), 1, f);
|
||||||
|
fread(&map[i].numtext, sizeof(int), 1, f);
|
||||||
|
map[i].selecteditem = -1;
|
||||||
|
map[i].selecteditemtype = -1;
|
||||||
|
map[i].selectedlinkpoint = -1;
|
||||||
|
map[i].selectedtype = 0;
|
||||||
|
map[i].curobj = -1;
|
||||||
|
map[i].curlink = -1;
|
||||||
|
map[i].curlinkpoint = -1;
|
||||||
|
map[i].curtext = -1;
|
||||||
|
map[i].startx = -1;
|
||||||
|
map[i].starty = -1;
|
||||||
|
map[i].textanchor = -1;
|
||||||
|
strcpy(map[i].text, "");
|
||||||
|
|
||||||
|
fread(&namelen, sizeof(int), 1, f);
|
||||||
|
fread(&map[i].name, (namelen+1) * sizeof(char), 1, f);
|
||||||
|
|
||||||
|
/* read objects */
|
||||||
|
fread(&map[i].thing, sizeof(thing_t), map[i].numthings, f);
|
||||||
|
fread(&map[i].olink, sizeof(link_t), map[i].numlinks, f);
|
||||||
|
fread(&map[i].obj, sizeof(object_t), map[i].numobjects, f);
|
||||||
|
fread(&map[i].textob, sizeof(text_t), map[i].numtext, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
curmap = 0;
|
||||||
|
|
||||||
|
modified = FALSE;
|
||||||
|
printf("Successfully loaded map from '%s' (%d maps).\n",filename,nummaps); fflush(stdout);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int savemap(void) {
|
||||||
|
char filename[BUFLEN];
|
||||||
|
FILE *f;
|
||||||
|
int namelen;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* TODO: validate */
|
||||||
|
strcpy(filename, text);
|
||||||
|
|
||||||
|
|
||||||
|
printf("Saving map...\n");
|
||||||
|
|
||||||
|
|
||||||
|
if ((f = fopen(filename, "wb")) == NULL) {
|
||||||
|
printf("ERROR: Could not open '%s'.\n",filename);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dump out numbers of map[curmap].objects */
|
||||||
|
fwrite(&nummaps, sizeof(int), 1, f);
|
||||||
|
|
||||||
|
for (i = 0; i < nummaps; i++) {
|
||||||
|
fwrite(&map[i].width, sizeof(int), 1, f);
|
||||||
|
fwrite(&map[i].height, sizeof(int), 1, f);
|
||||||
|
fwrite(&map[i].bpp, sizeof(int), 1, f);
|
||||||
|
fwrite(&map[i].bgcol, sizeof(SDL_Color), 1, f);
|
||||||
|
fwrite(&map[i].boxcol, sizeof(SDL_Color), 1, f);
|
||||||
|
fwrite(&map[i].numthings, sizeof(int), 1, f);
|
||||||
|
fwrite(&map[i].numobjects, sizeof(int), 1, f);
|
||||||
|
fwrite(&map[i].numlinks, sizeof(int), 1, f);
|
||||||
|
fwrite(&map[i].numtext, sizeof(int), 1, f);
|
||||||
|
/* selecteditem*/
|
||||||
|
/* selecteditemtype*/
|
||||||
|
/* selectedlinkpoint*/
|
||||||
|
/* selectedtype*/
|
||||||
|
/* curobj*/
|
||||||
|
/* curlink*/
|
||||||
|
/* curlinkpoint*/
|
||||||
|
/* curtext*/
|
||||||
|
/* startx,starty */
|
||||||
|
/* textanchor */
|
||||||
|
/* text*/
|
||||||
|
namelen = strlen(map[i].name);
|
||||||
|
fwrite(&namelen, sizeof(int), 1, f);
|
||||||
|
fwrite(&map[i].name, (namelen+1) * sizeof(char), 1, f);
|
||||||
|
|
||||||
|
/* write objects */
|
||||||
|
fwrite(&map[i].thing, sizeof(thing_t), map[i].numthings, f);
|
||||||
|
fwrite(&map[i].olink, sizeof(link_t), map[i].numlinks, f);
|
||||||
|
fwrite(&map[i].obj, sizeof(mapobject_t), map[i].numobjects, f);
|
||||||
|
fwrite(&map[i].textob, sizeof(text_t), map[i].numtext, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
|
||||||
|
modified = FALSE;
|
||||||
|
printf("Successfully saved map to '%s'.\n",filename);
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,243 @@
|
||||||
|
#include "constants.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
} xy_t;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int pos;
|
||||||
|
int gridsize;
|
||||||
|
int gridrowlen;
|
||||||
|
SDL_Color gridcol;
|
||||||
|
SDL_Color gridbgcol;
|
||||||
|
SDL_Color bgcol;
|
||||||
|
} obox;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int gridsize;
|
||||||
|
int gridrowlen;
|
||||||
|
SDL_Color gridcol;
|
||||||
|
SDL_Color bgcol;
|
||||||
|
} toolbox;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
} mapbox;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char text[BUFLEN];
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int w;
|
||||||
|
int h;
|
||||||
|
SDL_Color c;
|
||||||
|
int anchor;
|
||||||
|
} text_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int srcobj;
|
||||||
|
int srcxoff;
|
||||||
|
int srcyoff;
|
||||||
|
int dstobj;
|
||||||
|
int dstxoff;
|
||||||
|
int dstyoff;
|
||||||
|
int npoints;
|
||||||
|
xy_t point[MAXPOINTS];
|
||||||
|
SDL_Color col;
|
||||||
|
int style;
|
||||||
|
} link_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int type; /* line, square */
|
||||||
|
int x1,y1;
|
||||||
|
int x2,y2;
|
||||||
|
SDL_Color c;
|
||||||
|
} vector_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int w;
|
||||||
|
int h;
|
||||||
|
vector_t vector[OLDMAXVECTORSPERIMAGE];
|
||||||
|
int vnum;
|
||||||
|
} vectorimg_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char name[BUFLEN];
|
||||||
|
int canscale;
|
||||||
|
int defw;
|
||||||
|
int defh;
|
||||||
|
vectorimg_t vimg;
|
||||||
|
} object_t;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
vectorimg_t vect;
|
||||||
|
char name;
|
||||||
|
} letter[MAXLETTERVECTS];
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int id;
|
||||||
|
int type;
|
||||||
|
} thing_t;
|
||||||
|
|
||||||
|
object_t objtype[MAXOBJTYPES];
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int type; /* index into objtype[] */
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int w;
|
||||||
|
int h;
|
||||||
|
int child;
|
||||||
|
} mapobject_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char name[BUFLEN];
|
||||||
|
SDL_Surface *img;
|
||||||
|
} button_t;
|
||||||
|
button_t button[MAXBUTTONS];
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int bpp;
|
||||||
|
SDL_Color bgcol;
|
||||||
|
SDL_Color boxcol;
|
||||||
|
int numthings;
|
||||||
|
int numobjects;
|
||||||
|
int numlinks;
|
||||||
|
int numtext;
|
||||||
|
|
||||||
|
int selecteditem;
|
||||||
|
int selecteditemtype;
|
||||||
|
int selectedlinkpoint;
|
||||||
|
int selectedtype;
|
||||||
|
|
||||||
|
int curobj; /* object being moved/dragged/etc */
|
||||||
|
int curlink; /* link being moved/dragged/etc */
|
||||||
|
int curlinkpoint; /* link point being moved/dragged/etc */
|
||||||
|
int curtext; /* text being moved/dragged/etc */
|
||||||
|
int startx,starty;
|
||||||
|
int textanchor;
|
||||||
|
char text[BUFLEN];
|
||||||
|
|
||||||
|
char name[BUFLEN];
|
||||||
|
|
||||||
|
/* actual data */
|
||||||
|
text_t textob[MAXTEXT];
|
||||||
|
mapobject_t obj[MAXOBJECTS];
|
||||||
|
thing_t thing[MAXOBJECTS + MAXLINKS];
|
||||||
|
link_t olink[MAXLINKS];
|
||||||
|
|
||||||
|
} map_t;
|
||||||
|
|
||||||
|
map_t map[MAXMAPS];
|
||||||
|
|
||||||
|
|
||||||
|
void addlinkpoint(int linkid, int x, int y);
|
||||||
|
int addvector(vectorimg_t *vimg, int type, int x1, int y1, int x2, int y2, SDL_Color *c);
|
||||||
|
void changestate(int newstate);
|
||||||
|
void cleanup(void);
|
||||||
|
int createobject(int type, int x, int y);
|
||||||
|
void copyline(SDL_Surface *screen,int x1, int y1, int x2, int y2, int *lbuf);
|
||||||
|
void deletething(int id, int type);
|
||||||
|
void deletelink(int linkid);
|
||||||
|
void deleteobject(int oid );
|
||||||
|
void deletetext(int textid);
|
||||||
|
void drawbox(SDL_Surface *screen, int x1, int y1, int x2, int y2, SDL_Color c);
|
||||||
|
void drawcolorchart(SDL_Surface *dest);
|
||||||
|
void drawmaplist(SDL_Surface *dest);
|
||||||
|
int drawletter(SDL_Surface *dest,int x, int y, int w, int h, char let, SDL_Color col);
|
||||||
|
void drawline(SDL_Surface *screen, int x1, int y1, int x2, int y2, SDL_Color c);
|
||||||
|
void drawlinebehind(SDL_Surface *screen, int x1, int y1, int x2, int y2, SDL_Color c);
|
||||||
|
void drawlink(SDL_Surface *dest, link_t *l);
|
||||||
|
void drawpixel(SDL_Surface *screen, int x, int y, SDL_Color c);
|
||||||
|
void drawmap(void);
|
||||||
|
void drawmapbox(void);
|
||||||
|
void drawobox(void);
|
||||||
|
void drawscreen(void);
|
||||||
|
void drawstatusbar(void);
|
||||||
|
void drawtext(SDL_Surface *dest, text_t *t);
|
||||||
|
void drawtoolbox(void);
|
||||||
|
void drawtoolboxselector(int buttonid);
|
||||||
|
void drawvector(SDL_Surface *dest, vectorimg_t *vimg, int x, int y, int w, int h,SDL_Color *overridefg );
|
||||||
|
void drillto(int mapnum);
|
||||||
|
int endobjmove(int x, int y);
|
||||||
|
int endresize(int x, int y);
|
||||||
|
int endtextresize(int x, int y);
|
||||||
|
int endlink(int x, int y);
|
||||||
|
int endlinkmove(int x, int y);
|
||||||
|
int endlinkdstmove(int x, int y);
|
||||||
|
int endlinkpointmove(int x, int y);
|
||||||
|
int endlinksrcmove(int x, int y);
|
||||||
|
int endtext(void);
|
||||||
|
int endtextmove(int x, int y);
|
||||||
|
int findpointpos(link_t *l, int px, int py);
|
||||||
|
void floodfill(SDL_Surface *dest, int x, int y, SDL_Color fillcol);
|
||||||
|
void floodfill2(SDL_Surface *dest, int x, int y, SDL_Color fillcol, SDL_Color bgcol);
|
||||||
|
void floodfill3(SDL_Surface *dest, int x1, int x2, int y, SDL_Color fillcol, SDL_Color bgcol);
|
||||||
|
void floodfill4(SDL_Surface *dest, int x, int y, SDL_Color fillcol, SDL_Color bgcol);
|
||||||
|
int getcolor(SDL_Surface *dest, int x, int y, SDL_Color *col);
|
||||||
|
void drawyn(char *prompt);
|
||||||
|
int getyn(int x, int y);
|
||||||
|
void goback(void);
|
||||||
|
int linelen(int x1,int y1,int x2,int y2);
|
||||||
|
int linkat(int x, int y);
|
||||||
|
int loadmap(void);
|
||||||
|
void lowerselected(void);
|
||||||
|
int objat(int x, int y);
|
||||||
|
void pasteline(SDL_Surface *screen, int *lbuf);
|
||||||
|
void pop(int *x, int *y);
|
||||||
|
void push(int x, int y);
|
||||||
|
int initgraphics(void);
|
||||||
|
void initmap(int mapnum);
|
||||||
|
int initobject(int onum);
|
||||||
|
int isonline (int fx, int fy, int x1, int y1, int x2, int y2);
|
||||||
|
int isonlink(int linkid, int mx, int my);
|
||||||
|
int isonlinkdst(int lineid, int mx, int my);
|
||||||
|
int isonlinkpoint(int lineid, int mx, int my);
|
||||||
|
int isonlinksrc(int lineid, int mx, int my);
|
||||||
|
int isonmap (int x, int y);
|
||||||
|
int isonobox (int x, int y);
|
||||||
|
int isontoolbox (int x, int y);
|
||||||
|
int isonmapbox (int x, int y);
|
||||||
|
int isonmapboxchildren (int x, int y);
|
||||||
|
int isonmapname (int x, int y);
|
||||||
|
int isongoback (int x, int y);
|
||||||
|
void initvars(void);
|
||||||
|
void raiseselected(void);
|
||||||
|
int savemap(void);
|
||||||
|
int showfiledialog(void);
|
||||||
|
int startlink (int x, int y);
|
||||||
|
int startlinkdstmove(int x, int y);
|
||||||
|
int startlinkpointmove(int x, int y);
|
||||||
|
int startlinksrcmove(int x, int y);
|
||||||
|
int startlinkmove(int x, int y);
|
||||||
|
int startobjmove(int x, int y);
|
||||||
|
int startresize (int x, int y);
|
||||||
|
int startresizetext (int x, int y);
|
||||||
|
int starttextmove(int x, int y);
|
||||||
|
int textat(int x, int y);
|
||||||
|
int thingat(int x, int y);
|
||||||
|
int updatefilename(void);
|
||||||
|
int updatelinkshadow(int x, int y);
|
||||||
|
int updatelinkpointshadow(int x, int y);
|
||||||
|
int updatemoveshadow(int x, int y);
|
||||||
|
int updateresizeshadow(int x, int y);
|
||||||
|
int updateresizetextshadow(int x, int y);
|
||||||
|
int updatetextcursor(void);
|
||||||
|
int updatetextshadow(int x, int y);
|
206
netmapr.c
206
netmapr.c
|
@ -72,6 +72,8 @@ int textanchor;
|
||||||
char text[BUFLEN];
|
char text[BUFLEN];
|
||||||
int startobj,endobj;
|
int startobj,endobj;
|
||||||
|
|
||||||
|
char progdir[BUFLEN];
|
||||||
|
|
||||||
int shift;
|
int shift;
|
||||||
|
|
||||||
int main (int argc, char **argv) {
|
int main (int argc, char **argv) {
|
||||||
|
@ -89,6 +91,12 @@ int main (int argc, char **argv) {
|
||||||
autoload = TRUE;
|
autoload = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getenv("NETMAPRDIR") != NULL) {
|
||||||
|
strncpy(progdir, getenv("NETMAPRDIR"), BUFLEN);
|
||||||
|
} else {
|
||||||
|
strcpy(progdir, "/usr/local/share/netmapr");
|
||||||
|
}
|
||||||
|
|
||||||
if (initgraphics()) {
|
if (initgraphics()) {
|
||||||
printf("Error initialising graphics.\n");
|
printf("Error initialising graphics.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -201,13 +209,17 @@ int main (int argc, char **argv) {
|
||||||
oldticks = ticks;
|
oldticks = ticks;
|
||||||
if (isonmap(event.button.x, event.button.y)) {
|
if (isonmap(event.button.x, event.button.y)) {
|
||||||
if (state != S_REALLYQUIT) {
|
if (state != S_REALLYQUIT) {
|
||||||
if ((doubleclick) && (objat(event.button.x, event.button.y) == map[curmap].selecteditem)) {
|
//if ((doubleclick) && (objat(event.button.x, event.button.y) == map[curmap].selecteditem)) {
|
||||||
|
if (doubleclick) {
|
||||||
|
o = objat(event.button.x, event.button.y);
|
||||||
|
|
||||||
/* only works on an object */
|
/* only works on an object */
|
||||||
if (map[curmap].selecteditem != -1) {
|
//if (map[curmap].selecteditem != -1) {
|
||||||
|
if (o != -1) {
|
||||||
/* can't create a new child via double click */
|
/* can't create a new child via double click */
|
||||||
if (map[curmap].obj[map[curmap].selecteditem].child != -1) {
|
if (map[curmap].obj[o].child != -1) {
|
||||||
changestate(S_NONE);
|
changestate(S_NONE);
|
||||||
drillto(map[curmap].obj[map[curmap].selecteditem].child);
|
drillto(map[curmap].obj[o].child);
|
||||||
} else {
|
} else {
|
||||||
sprintf(statustext, "Cannot drill down - object has no children (use drill tool to create one).");
|
sprintf(statustext, "Cannot drill down - object has no children (use drill tool to create one).");
|
||||||
map[curmap].selecteditem = -1;
|
map[curmap].selecteditem = -1;
|
||||||
|
@ -239,9 +251,21 @@ int main (int argc, char **argv) {
|
||||||
sprintf(statustext, "Size match mode aborted.");
|
sprintf(statustext, "Size match mode aborted.");
|
||||||
drawstatusbar();
|
drawstatusbar();
|
||||||
} else {
|
} else {
|
||||||
|
int n;
|
||||||
/* resize selected item to match one which was clicked */
|
/* resize selected item to match one which was clicked */
|
||||||
map[curmap].obj[map[curmap].selecteditem].w = map[curmap].obj[o].w;
|
map[curmap].obj[map[curmap].selecteditem].w = map[curmap].obj[o].w;
|
||||||
map[curmap].obj[map[curmap].selecteditem].h = map[curmap].obj[o].h;
|
map[curmap].obj[map[curmap].selecteditem].h = map[curmap].obj[o].h;
|
||||||
|
/* adjust offsets on all links to/from object */
|
||||||
|
for (n = 0; n < map[curmap].numlinks; n++) {
|
||||||
|
if (map[curmap].olink[n].srcobj == map[curmap].selecteditem) {
|
||||||
|
map[curmap].olink[n].srcxoff = (map[curmap].obj[o].w / 2);
|
||||||
|
map[curmap].olink[n].srcyoff = (map[curmap].obj[o].h / 2);
|
||||||
|
}
|
||||||
|
if (map[curmap].olink[n].dstobj == map[curmap].selecteditem) {
|
||||||
|
map[curmap].olink[n].dstxoff = (map[curmap].obj[o].w / 2);
|
||||||
|
map[curmap].olink[n].dstyoff = (map[curmap].obj[o].h / 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
changestate(S_NONE);
|
changestate(S_NONE);
|
||||||
sprintf(statustext, "Object #%d resized to match object #%d.",map[curmap].selecteditem,o);
|
sprintf(statustext, "Object #%d resized to match object #%d.",map[curmap].selecteditem,o);
|
||||||
drawmap();
|
drawmap();
|
||||||
|
@ -436,7 +460,7 @@ int main (int argc, char **argv) {
|
||||||
|
|
||||||
tempx = (event.button.x - obox.x) / obox.gridsize;
|
tempx = (event.button.x - obox.x) / obox.gridsize;
|
||||||
tempy = (event.button.y - obox.y) / obox.gridsize;
|
tempy = (event.button.y - obox.y) / obox.gridsize;
|
||||||
map[curmap].selectedtype = tempy*obox.gridrowlen + tempx;
|
map[curmap].selectedtype = tempy*obox.gridrowlen + tempx + (obox.pos*3);
|
||||||
if (map[curmap].selectedtype >= numobjtypes) map[curmap].selectedtype = numobjtypes-1;
|
if (map[curmap].selectedtype >= numobjtypes) map[curmap].selectedtype = numobjtypes-1;
|
||||||
sprintf(statustext,"Object type '%s' selected.\n",objtype[map[curmap].selectedtype].name);
|
sprintf(statustext,"Object type '%s' selected.\n",objtype[map[curmap].selectedtype].name);
|
||||||
drawstatusbar();
|
drawstatusbar();
|
||||||
|
@ -755,6 +779,26 @@ int main (int argc, char **argv) {
|
||||||
changestate(S_LOADING);
|
changestate(S_LOADING);
|
||||||
drawmap();
|
drawmap();
|
||||||
}
|
}
|
||||||
|
if ((c == ',') || (c == 'q')) { /* scroll object box up */
|
||||||
|
if (obox.pos > 0) {
|
||||||
|
obox.pos--;
|
||||||
|
drawobox();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((c == '.') || (c == 'w')) { /* scroll object box down */
|
||||||
|
int fitx,fity,fit;
|
||||||
|
|
||||||
|
/* figure out how many objects we can fit in the box */
|
||||||
|
fitx = (obox.width / obox.gridsize);
|
||||||
|
fity = ((obox.height+3) / obox.gridsize);
|
||||||
|
fit = fitx * fity;
|
||||||
|
|
||||||
|
/* check if incrementing position is okay or not */
|
||||||
|
if (((obox.pos+1)*3 + fit) <= (numobjtypes+2)) {
|
||||||
|
obox.pos++;
|
||||||
|
drawobox();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (c == 'x') {
|
if (c == 'x') {
|
||||||
if (map[curmap].selecteditem != -1) {
|
if (map[curmap].selecteditem != -1) {
|
||||||
if (map[curmap].selecteditemtype == T_OBJECT) {
|
if (map[curmap].selecteditemtype == T_OBJECT) {
|
||||||
|
@ -771,6 +815,14 @@ int main (int argc, char **argv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (c == 'b') {
|
||||||
|
if (map[curmap].selecteditem != -1) {
|
||||||
|
if (map[curmap].selecteditemtype == T_OBJECT) {
|
||||||
|
changestate(S_MATCHSIZE);
|
||||||
|
drawmap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (c == 'd') { /* drill down */
|
if (c == 'd') { /* drill down */
|
||||||
if (state == S_NONE) {
|
if (state == S_NONE) {
|
||||||
if ((map[curmap].selecteditemtype == T_OBJECT) && (map[curmap].selecteditem != -1)) {
|
if ((map[curmap].selecteditemtype == T_OBJECT) && (map[curmap].selecteditem != -1)) {
|
||||||
|
@ -857,7 +909,9 @@ void addlinkpoint(int linkid, int x, int y) {
|
||||||
sprintf(statustext, "Point added to link #%d",linkid);
|
sprintf(statustext, "Point added to link #%d",linkid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void addvector(vectorimg_t *vimg, int type, int x1, int y1, int x2, int y2, SDL_Color *c) {
|
int addvector(vectorimg_t *vimg, int type, int x1, int y1, int x2, int y2, SDL_Color *c) {
|
||||||
|
|
||||||
|
if ((vimg->vnum + 1) >= MAXVECTORSPERIMAGE) return TRUE;
|
||||||
vimg->vector[vimg->vnum].type = type;
|
vimg->vector[vimg->vnum].type = type;
|
||||||
vimg->vector[vimg->vnum].x1 = x1;
|
vimg->vector[vimg->vnum].x1 = x1;
|
||||||
vimg->vector[vimg->vnum].y1 = y1;
|
vimg->vector[vimg->vnum].y1 = y1;
|
||||||
|
@ -867,6 +921,8 @@ void addvector(vectorimg_t *vimg, int type, int x1, int y1, int x2, int y2, SDL_
|
||||||
vimg->vector[vimg->vnum].c.g = c->g;
|
vimg->vector[vimg->vnum].c.g = c->g;
|
||||||
vimg->vector[vimg->vnum].c.b = c->b;
|
vimg->vector[vimg->vnum].c.b = c->b;
|
||||||
vimg->vnum = vimg->vnum + 1;
|
vimg->vnum = vimg->vnum + 1;
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void changestate(int newstate) {
|
void changestate(int newstate) {
|
||||||
|
@ -1400,11 +1456,17 @@ void drawobject(SDL_Surface *dest, mapobject_t *o) {
|
||||||
Uint32 bgcol;
|
Uint32 bgcol;
|
||||||
|
|
||||||
/* create temp surface */
|
/* create temp surface */
|
||||||
temps = SDL_CreateRGBSurface(SDL_SWSURFACE,o->w, o->h,
|
temps = SDL_CreateRGBSurface(SDL_SWSURFACE,(o->w + 3), (o->h + 3),
|
||||||
screen->format->BitsPerPixel, screen->format->Rmask,
|
screen->format->BitsPerPixel, screen->format->Rmask,
|
||||||
screen->format->Gmask,screen->format->Bmask,
|
screen->format->Gmask,screen->format->Bmask,
|
||||||
screen->format->Amask);
|
screen->format->Amask);
|
||||||
|
|
||||||
|
if (temps == NULL) {
|
||||||
|
printf("temp surface is NULL!\n");
|
||||||
|
fflush(stdout);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
bgcol = SDL_MapRGB(temps->format, map[curmap].bgcol.r,map[curmap].bgcol.g,map[curmap].bgcol.b);
|
bgcol = SDL_MapRGB(temps->format, map[curmap].bgcol.r,map[curmap].bgcol.g,map[curmap].bgcol.b);
|
||||||
SDL_FillRect(temps, NULL, bgcol);
|
SDL_FillRect(temps, NULL, bgcol);
|
||||||
|
|
||||||
|
@ -1415,6 +1477,9 @@ void drawobject(SDL_Surface *dest, mapobject_t *o) {
|
||||||
SDL_SetColorKey(temps, SDL_SRCCOLORKEY|SDL_RLEACCEL, bgcol);
|
SDL_SetColorKey(temps, SDL_SRCCOLORKEY|SDL_RLEACCEL, bgcol);
|
||||||
|
|
||||||
/* blit to screen */
|
/* blit to screen */
|
||||||
|
/*printf("set area params: x=%d,y=%d w=%d,h=%d x2=%d,y2=%d\n",
|
||||||
|
o->x, o->y,o->w,o->h,o->x+o->w,o->y+o->h); fflush(stdout);
|
||||||
|
*/
|
||||||
area.x = o->x;
|
area.x = o->x;
|
||||||
area.y = o->y;
|
area.y = o->y;
|
||||||
area.w = o->w;
|
area.w = o->w;
|
||||||
|
@ -1513,23 +1578,33 @@ void drawmap(void) {
|
||||||
fillcol = SDL_MapRGB(buffer->format, map[curmap].bgcol.r,map[curmap].bgcol.g,map[curmap].bgcol.b);
|
fillcol = SDL_MapRGB(buffer->format, map[curmap].bgcol.r,map[curmap].bgcol.g,map[curmap].bgcol.b);
|
||||||
SDL_FillRect(buffer, NULL, fillcol);
|
SDL_FillRect(buffer, NULL, fillcol);
|
||||||
|
|
||||||
/* draw all map[curmap].objects links etc*/
|
/* draw all objects links etc*/
|
||||||
for (i = 0; i < map[curmap].numthings; i++) {
|
for (i = 0; i < map[curmap].numthings; i++) {
|
||||||
if (map[curmap].thing[i].type == T_OBJECT) {
|
if (map[curmap].thing[i].type == T_OBJECT) {
|
||||||
if (testing) printf("Drawing thing #%d (%d, %s)\n",i,map[curmap].thing[i].id,objtype[map[curmap].obj[map[curmap].thing[i].id].type].name);
|
if (testing) {
|
||||||
|
printf("Drawing thing #%d (%d, %s)\n",i,map[curmap].thing[i].id,objtype[map[curmap].obj[map[curmap].thing[i].id].type].name);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
drawobject(buffer, &map[curmap].obj[map[curmap].thing[i].id]);
|
drawobject(buffer, &map[curmap].obj[map[curmap].thing[i].id]);
|
||||||
} else if (map[curmap].thing[i].type == T_LINK) {
|
} else if (map[curmap].thing[i].type == T_LINK) {
|
||||||
if (testing) printf ("Drawing thing #%d (%d, link)\n",i,map[curmap].thing[i].id);
|
if (testing) {
|
||||||
|
printf ("Drawing thing #%d (%d, link)\n",i,map[curmap].thing[i].id);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
drawlink(buffer, &map[curmap].olink[map[curmap].thing[i].id]);
|
drawlink(buffer, &map[curmap].olink[map[curmap].thing[i].id]);
|
||||||
} else if (map[curmap].thing[i].type == T_TEXT) {
|
} else if (map[curmap].thing[i].type == T_TEXT) {
|
||||||
if (testing) printf ("Drawing thing #%d (%d, text)\n",i,map[curmap].thing[i].id);
|
if (testing) {
|
||||||
|
printf ("Drawing thing #%d (%d, text)\n",i,map[curmap].thing[i].id);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
drawtext(buffer, &map[curmap].textob[map[curmap].thing[i].id]);
|
drawtext(buffer, &map[curmap].textob[map[curmap].thing[i].id]);
|
||||||
} else {
|
} else {
|
||||||
printf("WARNING: Thing #%d has unknown type %d!\n",i,map[curmap].thing[i].type);
|
printf("WARNING: Thing #%d has unknown type %d!\n",i,map[curmap].thing[i].type);
|
||||||
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* highlight the selected map[curmap].object */
|
/* highlight the selected object */
|
||||||
/* by drawing boxes in its corners */
|
/* by drawing boxes in its corners */
|
||||||
if (map[curmap].selecteditem != -1) {
|
if (map[curmap].selecteditem != -1) {
|
||||||
if (map[curmap].selecteditemtype == T_OBJECT) {
|
if (map[curmap].selecteditemtype == T_OBJECT) {
|
||||||
|
@ -1668,8 +1743,10 @@ void drawmap(void) {
|
||||||
/* draw status bar */
|
/* draw status bar */
|
||||||
drawstatusbar();
|
drawstatusbar();
|
||||||
|
|
||||||
|
|
||||||
/* flip */
|
/* flip */
|
||||||
SDL_UpdateRect(screen, 0, 0, map[curmap].width, map[curmap].height);
|
SDL_UpdateRect(screen, 0, 0, map[curmap].width, map[curmap].height);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawstatusbar(void) {
|
void drawstatusbar(void) {
|
||||||
|
@ -1877,6 +1954,8 @@ void drawobox(void) {
|
||||||
mapobject_t temp;
|
mapobject_t temp;
|
||||||
Uint32 fillcol;
|
Uint32 fillcol;
|
||||||
SDL_Color outlinecol;
|
SDL_Color outlinecol;
|
||||||
|
int outlinepos;
|
||||||
|
int fitx,fity,fit;
|
||||||
|
|
||||||
fillcol = SDL_MapRGB(screen->format, obox.bgcol.r,obox.bgcol.g,obox.bgcol.b);
|
fillcol = SDL_MapRGB(screen->format, obox.bgcol.r,obox.bgcol.g,obox.bgcol.b);
|
||||||
area.x = obox.x;
|
area.x = obox.x;
|
||||||
|
@ -1888,7 +1967,14 @@ void drawobox(void) {
|
||||||
x = obox.x;
|
x = obox.x;
|
||||||
y = obox.y;
|
y = obox.y;
|
||||||
|
|
||||||
for (i = 0; i < numobjtypes; i++) {
|
|
||||||
|
/* calculate how many items we can fit in the obox */
|
||||||
|
/* figure out how many objects we can fit in the box */
|
||||||
|
fitx = (obox.width / obox.gridsize);
|
||||||
|
fity = ((obox.height+3) / obox.gridsize);
|
||||||
|
fit = fitx * fity;
|
||||||
|
|
||||||
|
for (i = (obox.pos*3); i < numobjtypes; i++) {
|
||||||
if ((x + obox.gridsize) >= (map[curmap].width + SIDEBARW)) {
|
if ((x + obox.gridsize) >= (map[curmap].width + SIDEBARW)) {
|
||||||
x = obox.x;
|
x = obox.x;
|
||||||
if ((y + obox.gridsize) >= (map[curmap].height)) {
|
if ((y + obox.gridsize) >= (map[curmap].height)) {
|
||||||
|
@ -1924,15 +2010,20 @@ void drawobox(void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* oooo */
|
||||||
/* draw selector */
|
/* draw selector */
|
||||||
outlinecol = red;
|
outlinecol = red;
|
||||||
y = (map[curmap].selectedtype / obox.gridrowlen) * obox.gridsize + obox.y;
|
outlinepos = map[curmap].selectedtype - (obox.pos*3);
|
||||||
x = (map[curmap].selectedtype % obox.gridrowlen) * obox.gridsize + obox.x;
|
|
||||||
|
if ((outlinepos >= 0) && (outlinepos < fit)) {
|
||||||
|
y = ((map[curmap].selectedtype - (obox.pos*3)) / obox.gridrowlen) * obox.gridsize + obox.y;
|
||||||
|
x = ((map[curmap].selectedtype - (obox.pos*3)) % obox.gridrowlen) * obox.gridsize + obox.x;
|
||||||
|
|
||||||
drawline(screen, x, y,x+obox.gridsize,y,outlinecol); /* top */
|
drawline(screen, x, y,x+obox.gridsize,y,outlinecol); /* top */
|
||||||
drawline(screen, x, y+obox.gridsize,x+obox.gridsize,y+obox.gridsize,outlinecol); /* bottom */
|
drawline(screen, x, y+obox.gridsize,x+obox.gridsize,y+obox.gridsize,outlinecol); /* bottom */
|
||||||
drawline(screen, x, y,x,y+obox.gridsize,outlinecol); /* left */
|
drawline(screen, x, y,x,y+obox.gridsize,outlinecol); /* left */
|
||||||
drawline(screen, x+obox.gridsize, y,x+obox.gridsize,y+obox.gridsize,outlinecol); /* right */
|
drawline(screen, x+obox.gridsize, y,x+obox.gridsize,y+obox.gridsize,outlinecol); /* right */
|
||||||
|
}
|
||||||
|
|
||||||
//SDL_UpdateRect(screen, x, y, obox.gridsize+1,obox.gridsize+1);
|
//SDL_UpdateRect(screen, x, y, obox.gridsize+1,obox.gridsize+1);
|
||||||
|
|
||||||
|
@ -2438,6 +2529,7 @@ int linkat(int x, int y) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int loadmap(void) {
|
int loadmap(void) {
|
||||||
char filename[BUFLEN];
|
char filename[BUFLEN];
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
@ -2491,7 +2583,7 @@ int loadmap(void) {
|
||||||
/* read objects */
|
/* read objects */
|
||||||
fread(&map[i].thing, sizeof(thing_t), map[i].numthings, f);
|
fread(&map[i].thing, sizeof(thing_t), map[i].numthings, f);
|
||||||
fread(&map[i].olink, sizeof(link_t), map[i].numlinks, f);
|
fread(&map[i].olink, sizeof(link_t), map[i].numlinks, f);
|
||||||
fread(&map[i].obj, sizeof(object_t), map[i].numobjects, f);
|
fread(&map[i].obj, sizeof(mapobject_t), map[i].numobjects, f);
|
||||||
fread(&map[i].textob, sizeof(text_t), map[i].numtext, f);
|
fread(&map[i].textob, sizeof(text_t), map[i].numtext, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2677,7 +2769,7 @@ int initgraphics(void) {
|
||||||
int x1,x2,y1,y2;
|
int x1,x2,y1,y2;
|
||||||
SDL_Color c;
|
SDL_Color c;
|
||||||
|
|
||||||
if(SDL_Init(SDL_INIT_VIDEO)==-1) {
|
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE)==-1) {
|
||||||
printf("SDL_Init: %s\n", SDL_GetError());
|
printf("SDL_Init: %s\n", SDL_GetError());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
@ -2786,16 +2878,20 @@ int initgraphics(void) {
|
||||||
|
|
||||||
|
|
||||||
printf("Reading shapes...\n");
|
printf("Reading shapes...\n");
|
||||||
/* read map[curmap].objects from file */
|
|
||||||
f = fopen("objects.dat","rt");
|
f = fopen("objects.dat","rt");
|
||||||
if (!f) {
|
if (!f) {
|
||||||
sprintf(file, "%s/.netmapr/objects.dat",getenv("HOME"));
|
sprintf(file, "/usr/local/share/netmapr/objects.dat");
|
||||||
f = fopen(file,"rt");
|
f = fopen(file,"rt");
|
||||||
|
}
|
||||||
|
if (!f) {
|
||||||
|
sprintf(file, "%s/objects.dat",progdir);
|
||||||
|
f = fopen(file,"rt");
|
||||||
|
}
|
||||||
if (!f) {
|
if (!f) {
|
||||||
printf("Cannot open objects file!\n");
|
printf("Cannot open objects file!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
state = 0;
|
state = 0;
|
||||||
line = 0;
|
line = 0;
|
||||||
numobjtypes = 0;
|
numobjtypes = 0;
|
||||||
|
@ -2861,7 +2957,11 @@ int initgraphics(void) {
|
||||||
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
||||||
c.b = atoi(p);
|
c.b = atoi(p);
|
||||||
|
|
||||||
addvector(&objtype[numobjtypes].vimg,VT_LINE,x1,y1,x2,y2,&c);
|
if (addvector(&objtype[numobjtypes].vimg,VT_LINE,x1,y1,x2,y2,&c)) {
|
||||||
|
printf("Too many vectors on line %d of objects file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
} else if (!strcmp(p, "fill")) {
|
} else if (!strcmp(p, "fill")) {
|
||||||
p = strtok(NULL, " ");
|
p = strtok(NULL, " ");
|
||||||
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
||||||
|
@ -2879,7 +2979,10 @@ int initgraphics(void) {
|
||||||
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
||||||
c.b = atoi(p);
|
c.b = atoi(p);
|
||||||
|
|
||||||
addvector(&objtype[numobjtypes].vimg,VT_FILL,x1,y1,0,0,&c);
|
if (addvector(&objtype[numobjtypes].vimg,VT_FILL,x1,y1,0,0,&c)) {
|
||||||
|
printf("Too many vectors on line %d of objects file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "box")) {
|
} else if (!strcmp(p, "box")) {
|
||||||
p = strtok(NULL, " ");
|
p = strtok(NULL, " ");
|
||||||
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
||||||
|
@ -2903,7 +3006,10 @@ int initgraphics(void) {
|
||||||
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of objects file.\n",line); exit(1); }
|
||||||
c.b = atoi(p);
|
c.b = atoi(p);
|
||||||
|
|
||||||
addvector(&objtype[numobjtypes].vimg,VT_BOX,x1,y1,x2,y2,&c);
|
if (addvector(&objtype[numobjtypes].vimg,VT_BOX,x1,y1,x2,y2,&c)) {
|
||||||
|
printf("Too many vectors on line %d of objects file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "end")) {
|
} else if (!strcmp(p, "end")) {
|
||||||
state = 0;
|
state = 0;
|
||||||
numobjtypes++;
|
numobjtypes++;
|
||||||
|
@ -2926,18 +3032,21 @@ int initgraphics(void) {
|
||||||
fclose(f);
|
fclose(f);
|
||||||
printf("Shape load complete - %d objects found.\n",numobjtypes);
|
printf("Shape load complete - %d objects found.\n",numobjtypes);
|
||||||
|
|
||||||
/* read in button images */
|
|
||||||
printf("Reading buttons...\n");
|
printf("Reading buttons...\n");
|
||||||
/* read buttons from file */
|
|
||||||
f = fopen("buttons.dat","rt");
|
f = fopen("buttons.dat","rt");
|
||||||
if (!f) {
|
if (!f) {
|
||||||
sprintf(file, "%s/.netmapr/buttons.dat",getenv("HOME"));
|
sprintf(file, "/usr/local/share/netmapr/buttons.dat");
|
||||||
f = fopen(file,"rt");
|
f = fopen(file,"rt");
|
||||||
|
}
|
||||||
|
if (!f) {
|
||||||
|
sprintf(file, "%s/buttons.dat",progdir);
|
||||||
|
f = fopen(file,"rt");
|
||||||
|
}
|
||||||
if (!f) {
|
if (!f) {
|
||||||
printf("Cannot open buttons file!\n");
|
printf("Cannot open buttons file!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
state = 0;
|
state = 0;
|
||||||
line = 0;
|
line = 0;
|
||||||
numbuttons = 0;
|
numbuttons = 0;
|
||||||
|
@ -3005,7 +3114,10 @@ int initgraphics(void) {
|
||||||
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
||||||
c.b = atoi(p);
|
c.b = atoi(p);
|
||||||
|
|
||||||
addvector(&tempv,VT_LINE,x1,y1,x2,y2,&c);
|
if (addvector(&tempv,VT_LINE,x1,y1,x2,y2,&c)) {
|
||||||
|
printf("Too many vectors on line %d of objects file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "fill")) {
|
} else if (!strcmp(p, "fill")) {
|
||||||
p = strtok(NULL, " ");
|
p = strtok(NULL, " ");
|
||||||
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
||||||
|
@ -3023,7 +3135,10 @@ int initgraphics(void) {
|
||||||
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
||||||
c.b = atoi(p);
|
c.b = atoi(p);
|
||||||
|
|
||||||
addvector(&tempv,VT_FILL,x1,y1,0,0,&c);
|
if (addvector(&tempv,VT_FILL,x1,y1,0,0,&c)) {
|
||||||
|
printf("Too many vectors on line %d of objects file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "box")) {
|
} else if (!strcmp(p, "box")) {
|
||||||
p = strtok(NULL, " ");
|
p = strtok(NULL, " ");
|
||||||
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
||||||
|
@ -3047,7 +3162,10 @@ int initgraphics(void) {
|
||||||
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of buttons file.\n",line); exit(1); }
|
||||||
c.b = atoi(p);
|
c.b = atoi(p);
|
||||||
|
|
||||||
addvector(&tempv,VT_BOX,x1,y1,x2,y2,&c);
|
if (addvector(&tempv,VT_BOX,x1,y1,x2,y2,&c)) {
|
||||||
|
printf("Too many vectors on line %d of buttons file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "end")) {
|
} else if (!strcmp(p, "end")) {
|
||||||
/* draw vector image into button's bitmap field */
|
/* draw vector image into button's bitmap field */
|
||||||
drawvector(button[numbuttons].img, &tempv, 1, 1, toolbox.gridsize-2,toolbox.gridsize-2, NULL);
|
drawvector(button[numbuttons].img, &tempv, 1, 1, toolbox.gridsize-2,toolbox.gridsize-2, NULL);
|
||||||
|
@ -3071,18 +3189,21 @@ int initgraphics(void) {
|
||||||
fclose(f);
|
fclose(f);
|
||||||
printf("Button load complete - %d buttons found.\n",numbuttons);
|
printf("Button load complete - %d buttons found.\n",numbuttons);
|
||||||
|
|
||||||
/* read in letter images */
|
|
||||||
printf("Reading letters...\n");
|
printf("Reading letters...\n");
|
||||||
/* read letters from file */
|
|
||||||
f = fopen("letters.dat","rt");
|
f = fopen("letters.dat","rt");
|
||||||
if (!f) {
|
if (!f) {
|
||||||
sprintf(file, "%s/.netmapr/letters.dat",getenv("HOME"));
|
sprintf(file, "/usr/local/share/netmapr/letters.dat");
|
||||||
f = fopen(file,"rt");
|
f = fopen(file,"rt");
|
||||||
|
}
|
||||||
|
if (!f) {
|
||||||
|
sprintf(file, "%s/letters.dat",progdir);
|
||||||
|
f = fopen(file,"rt");
|
||||||
|
}
|
||||||
if (!f) {
|
if (!f) {
|
||||||
printf("Cannot open letters file!\n");
|
printf("Cannot open letters file!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
state = 0;
|
state = 0;
|
||||||
line = 0;
|
line = 0;
|
||||||
numletters = 0;
|
numletters = 0;
|
||||||
|
@ -3137,7 +3258,10 @@ int initgraphics(void) {
|
||||||
|
|
||||||
c = fgcol;
|
c = fgcol;
|
||||||
|
|
||||||
addvector(&letter[numletters].vect,VT_LINE,x1,y1,x2,y2,&c);
|
if (addvector(&letter[numletters].vect,VT_LINE,x1,y1,x2,y2,&c)) {
|
||||||
|
printf("Too many vectors on line %d of letters file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "fill")) {
|
} else if (!strcmp(p, "fill")) {
|
||||||
p = strtok(NULL, " ");
|
p = strtok(NULL, " ");
|
||||||
if (p == NULL) { printf("Missing token on line #%d of letters file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of letters file.\n",line); exit(1); }
|
||||||
|
@ -3148,7 +3272,10 @@ int initgraphics(void) {
|
||||||
|
|
||||||
c = fgcol;
|
c = fgcol;
|
||||||
|
|
||||||
addvector(&letter[numletters].vect,VT_FILL,x1,y1,0,0,&c);
|
if (addvector(&letter[numletters].vect,VT_FILL,x1,y1,0,0,&c)) {
|
||||||
|
printf("Too many vectors on line %d of letters file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "box")) {
|
} else if (!strcmp(p, "box")) {
|
||||||
p = strtok(NULL, " ");
|
p = strtok(NULL, " ");
|
||||||
if (p == NULL) { printf("Missing token on line #%d of letters file.\n",line); exit(1); }
|
if (p == NULL) { printf("Missing token on line #%d of letters file.\n",line); exit(1); }
|
||||||
|
@ -3165,7 +3292,10 @@ int initgraphics(void) {
|
||||||
|
|
||||||
c = fgcol;
|
c = fgcol;
|
||||||
|
|
||||||
addvector(&letter[numletters].vect,VT_BOX,x1,y1,x2,y2,&c);
|
if (addvector(&letter[numletters].vect,VT_BOX,x1,y1,x2,y2,&c)) {
|
||||||
|
printf("Too many vectors on line %d of letters file.\n",line);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
} else if (!strcmp(p, "end")) {
|
} else if (!strcmp(p, "end")) {
|
||||||
|
|
||||||
//printf("Adding letter %d: '%c' (vnum = %d).\n",numletters,letter[numletters].name,letter[numletters].vect.vnum);
|
//printf("Adding letter %d: '%c' (vnum = %d).\n",numletters,letter[numletters].name,letter[numletters].vect.vnum);
|
||||||
|
@ -3608,7 +3738,7 @@ int savemap(void) {
|
||||||
/* write objects */
|
/* write objects */
|
||||||
fwrite(&map[i].thing, sizeof(thing_t), map[i].numthings, f);
|
fwrite(&map[i].thing, sizeof(thing_t), map[i].numthings, f);
|
||||||
fwrite(&map[i].olink, sizeof(link_t), map[i].numlinks, f);
|
fwrite(&map[i].olink, sizeof(link_t), map[i].numlinks, f);
|
||||||
fwrite(&map[i].obj, sizeof(object_t), map[i].numobjects, f);
|
fwrite(&map[i].obj, sizeof(mapobject_t), map[i].numobjects, f);
|
||||||
fwrite(&map[i].textob, sizeof(text_t), map[i].numtext, f);
|
fwrite(&map[i].textob, sizeof(text_t), map[i].numtext, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ map_t map[MAXMAPS];
|
||||||
|
|
||||||
|
|
||||||
void addlinkpoint(int linkid, int x, int y);
|
void addlinkpoint(int linkid, int x, int y);
|
||||||
void addvector(vectorimg_t *vimg, int type, int x1, int y1, int x2, int y2, SDL_Color *c);
|
int addvector(vectorimg_t *vimg, int type, int x1, int y1, int x2, int y2, SDL_Color *c);
|
||||||
void changestate(int newstate);
|
void changestate(int newstate);
|
||||||
void cleanup(void);
|
void cleanup(void);
|
||||||
int createobject(int type, int x, int y);
|
int createobject(int type, int x, int y);
|
||||||
|
|
254
objects.dat
254
objects.dat
|
@ -1,55 +1,152 @@
|
||||||
object router 120 120
|
object router3d 200 200
|
||||||
# outline
|
# top left
|
||||||
line 0 40 40 0 0 0 0
|
line 0 50 0 38 170 230 255
|
||||||
line 40 0 80 0 0 0 0
|
line 0 38 10 26 170 230 255
|
||||||
line 80 0 119 40 0 0 0
|
line 10 26 30 14 170 230 255
|
||||||
line 119 40 119 80 0 0 0
|
line 30 14 60 0 170 230 255
|
||||||
line 119 80 80 119 0 0 0
|
line 60 0 100 0 170 230 255
|
||||||
line 80 119 40 119 0 0 0
|
# bottom left
|
||||||
line 40 119 0 80 0 0 0
|
line 0 50 0 62 170 230 255
|
||||||
line 0 80 0 40 0 0 0
|
line 0 62 10 74 170 230 255
|
||||||
|
line 10 74 30 86 170 230 255
|
||||||
|
line 30 86 60 99 170 230 255
|
||||||
|
line 60 99 100 99 170 230 255
|
||||||
|
# top right
|
||||||
|
line 199 50 199 38 170 230 255
|
||||||
|
line 199 38 190 26 170 230 255
|
||||||
|
line 190 26 170 14 170 230 255
|
||||||
|
line 170 14 140 0 170 230 255
|
||||||
|
line 140 0 100 0 170 230 255
|
||||||
|
# bottom right
|
||||||
|
line 199 50 199 62 170 230 255
|
||||||
|
line 199 62 190 74 170 230 255
|
||||||
|
line 190 74 170 86 170 230 255
|
||||||
|
line 170 86 140 99 170 230 255
|
||||||
|
line 140 99 100 99 170 230 255
|
||||||
|
# fill top
|
||||||
|
fill 100 50 0 180 255
|
||||||
|
# bottom half - sides
|
||||||
|
line 0 50 0 162 170 230 255
|
||||||
|
line 199 50 199 150 170 230 255
|
||||||
|
# bottom half - bottom left
|
||||||
|
# next line not being drawn on windows??
|
||||||
|
line 0 150 0 112 170 230 255
|
||||||
|
line 0 162 10 174 170 230 255
|
||||||
|
line 10 174 30 186 170 230 255
|
||||||
|
line 30 186 60 199 170 230 255
|
||||||
|
line 60 199 100 199 170 230 255
|
||||||
|
# bottom half - bottom right
|
||||||
|
line 199 150 199 162 170 230 255
|
||||||
|
line 199 162 190 174 170 230 255
|
||||||
|
line 190 174 170 186 170 230 255
|
||||||
|
line 170 186 140 199 170 230 255
|
||||||
|
line 140 199 100 199 170 230 255
|
||||||
|
# fill bottom half
|
||||||
|
fill 100 162 0 120 170
|
||||||
# arrows
|
# arrows
|
||||||
line 30 30 50 50 0 0 0
|
# top left arrow
|
||||||
line 89 30 69 50 0 0 0
|
line 35 25 65 40 0 0 0
|
||||||
line 89 89 69 69 0 0 0
|
line 55 15 85 30 0 0 0
|
||||||
line 30 89 50 69 0 0 0
|
line 35 25 55 15 0 0 0
|
||||||
# arrowheads
|
# arrowhead /____
|
||||||
line 50 50 40 50 0 0 0
|
line 55 47 65 40 0 0 0
|
||||||
line 50 50 50 40 0 0 0
|
line 55 47 90 47 0 0 0
|
||||||
|
# arrowhead /|
|
||||||
|
line 95 20 90 47 0 0 0
|
||||||
|
line 95 20 85 30 0 0 0
|
||||||
|
# fill it
|
||||||
|
fill 60 30 250 250 250
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# bottom left arrow
|
||||||
|
line 95 65 65 80 0 0 0
|
||||||
|
line 75 55 45 70 0 0 0
|
||||||
|
line 95 65 75 55 0 0 0
|
||||||
|
# arrowhead /____
|
||||||
|
line 75 87 65 80 0 0 0
|
||||||
|
line 75 87 40 87 0 0 0
|
||||||
|
# arrowhead /|
|
||||||
|
line 45 60 40 87 0 0 0
|
||||||
|
line 45 60 45 70 0 0 0
|
||||||
|
# fill it
|
||||||
|
fill 70 70 250 250 250
|
||||||
|
# top right arrow
|
||||||
|
line 110 40 140 25 0 0 0
|
||||||
|
line 130 50 160 35 0 0 0
|
||||||
|
line 110 40 130 50 0 0 0
|
||||||
|
# arrowhead /____
|
||||||
|
line 130 18 140 25 0 0 0
|
||||||
|
line 130 18 165 18 0 0 0
|
||||||
|
# arrowhead /|
|
||||||
|
line 160 45 165 18 0 0 0
|
||||||
|
line 160 45 160 35 0 0 0
|
||||||
|
# fill it
|
||||||
|
fill 135 35 250 250 250
|
||||||
|
# bottom right arrow
|
||||||
|
line 165 80 135 65 0 0 0
|
||||||
|
line 145 90 115 75 0 0 0
|
||||||
|
# joining
|
||||||
|
line 165 80 145 90 0 0 0
|
||||||
|
# arrowhead /____
|
||||||
|
line 145 58 135 65 0 0 0
|
||||||
|
line 145 58 110 58 0 0 0
|
||||||
|
# arrowhead /|
|
||||||
|
line 115 85 110 58 0 0 0
|
||||||
|
line 115 85 115 75 0 0 0
|
||||||
|
# fill it
|
||||||
|
fill 140 75 250 250 250
|
||||||
#
|
#
|
||||||
line 89 30 79 30 0 0 0
|
|
||||||
line 89 30 89 40 0 0 0
|
|
||||||
#
|
#
|
||||||
line 69 69 79 69 0 0 0
|
|
||||||
line 69 69 69 79 0 0 0
|
|
||||||
#
|
#
|
||||||
line 30 89 40 89 0 0 0
|
|
||||||
line 30 89 30 79 0 0 0
|
|
||||||
# fill in with blue
|
|
||||||
fill 20 40 0 175 254
|
|
||||||
end
|
end
|
||||||
object firewall 120 120
|
object fw3d 60 140
|
||||||
# outline
|
# front of wall
|
||||||
line 0 0 119 0 0 0 0
|
box 0 20 30 139 199 199 199
|
||||||
line 119 0 119 119 0 0 0
|
# right side
|
||||||
line 0 0 0 119 0 0 0
|
line 30 20 59 0 199 199 199
|
||||||
line 0 119 119 119 0 0 0
|
line 59 0 59 120 199 199 199
|
||||||
# fill
|
line 30 139 59 120 199 199 199
|
||||||
fill 20 20 255 0 0
|
# top of wall
|
||||||
# horizontal mortar lines
|
line 0 20 30 0 199 199 199
|
||||||
line 0 30 119 30 0 0 0
|
line 30 0 59 0 199 199 199
|
||||||
line 0 60 119 60 0 0 0
|
# fill with red
|
||||||
line 0 90 119 90 0 0 0
|
# front
|
||||||
# vertical mortar lines - top
|
fill 10 50 170 0 0
|
||||||
line 60 0 60 30 0 0 0
|
# right
|
||||||
# vertical mortar lines - second top
|
fill 50 50 119 0 0
|
||||||
line 30 30 30 60 0 0 0
|
# top
|
||||||
line 90 30 90 60 0 0 0
|
fill 30 10 255 85 93
|
||||||
# vertical mortar lines - second bottom
|
# horiz. mortar lines - front
|
||||||
line 60 60 60 90 0 0 0
|
line 0 40 30 40 199 199 199
|
||||||
# vertical mortar lines - bottom
|
line 0 60 30 60 199 199 199
|
||||||
line 30 90 30 119 0 0 0
|
line 0 80 30 80 199 199 199
|
||||||
line 90 90 90 119 0 0 0
|
line 0 100 30 100 199 199 199
|
||||||
|
line 0 120 30 120 199 199 199
|
||||||
|
# horiz. mortar lines - side
|
||||||
|
line 30 40 59 20 170 170 170
|
||||||
|
line 30 60 59 40 170 170 170
|
||||||
|
line 30 80 59 60 170 170 170
|
||||||
|
line 30 100 59 80 170 170 170
|
||||||
|
line 30 120 59 100 170 170 170
|
||||||
|
# vert. mortar lines - front
|
||||||
|
line 10 20 10 40 199 199 199
|
||||||
|
line 20 40 20 60 199 199 199
|
||||||
|
line 10 60 10 80 199 199 199
|
||||||
|
line 20 80 20 100 199 199 199
|
||||||
|
line 10 100 10 120 199 199 199
|
||||||
|
line 20 120 20 140 199 199 199
|
||||||
|
# vert. mortar lines - top
|
||||||
|
line 10 20 40 0 227 227 227
|
||||||
|
# horiz. mortar lines - top
|
||||||
|
line 20 13 40 13 227 227 227
|
||||||
|
line 20 7 30 7 227 227 227
|
||||||
|
# vert. mortar lines - side
|
||||||
|
line 40 13 40 33 170 170 170
|
||||||
|
line 50 27 50 46 170 170 170
|
||||||
|
line 40 53 40 73 170 170 170
|
||||||
|
line 50 67 50 86 170 170 170
|
||||||
|
line 40 93 40 113 170 170 170
|
||||||
|
line 50 107 50 126 170 170 170
|
||||||
end
|
end
|
||||||
object switch 120 120
|
object switch 120 120
|
||||||
# outline
|
# outline
|
||||||
|
@ -216,32 +313,6 @@ fill 57 55 255 0 0
|
||||||
fill 82 55 255 0 0
|
fill 82 55 255 0 0
|
||||||
fill 106 55 255 0 0
|
fill 106 55 255 0 0
|
||||||
end
|
end
|
||||||
object floppy 120 120
|
|
||||||
# border
|
|
||||||
box 10 10 109 109 0 0 0
|
|
||||||
# hole
|
|
||||||
line 15 15 20 15 0 0 0
|
|
||||||
line 15 15 15 20 0 0 0
|
|
||||||
line 15 20 20 20 0 0 0
|
|
||||||
line 20 15 20 20 0 0 0
|
|
||||||
# border fill
|
|
||||||
fill 50 50 0 0 255
|
|
||||||
# label
|
|
||||||
line 30 10 30 50 0 0 0
|
|
||||||
line 30 50 89 50 0 0 0
|
|
||||||
line 89 10 89 50 0 0 0
|
|
||||||
fill 50 30 210 190 130
|
|
||||||
# metal bit
|
|
||||||
line 35 109 35 80 0 0 0
|
|
||||||
line 35 80 84 80 0 0 0
|
|
||||||
line 84 80 84 109 0 0 0
|
|
||||||
#
|
|
||||||
line 50 109 50 90 0 0 0
|
|
||||||
line 50 90 60 90 0 0 0
|
|
||||||
line 60 90 60 109 0 0 0
|
|
||||||
# fill metal bit
|
|
||||||
fill 80 100 200 200 200
|
|
||||||
end
|
|
||||||
object printer 120 120
|
object printer 120 120
|
||||||
# outline
|
# outline
|
||||||
box 40 30 119 119 0 0 0
|
box 40 30 119 119 0 0 0
|
||||||
|
@ -283,7 +354,7 @@ line 65 55 100 15 0 0 0
|
||||||
line 100 15 98 25 0 0 0
|
line 100 15 98 25 0 0 0
|
||||||
line 100 15 96 13 0 0 0
|
line 100 15 96 13 0 0 0
|
||||||
end
|
end
|
||||||
object switchrouter 120 120
|
object layer3switch 135 135
|
||||||
# outside border
|
# outside border
|
||||||
box 0 0 119 119 0 0 0
|
box 0 0 119 119 0 0 0
|
||||||
# router
|
# router
|
||||||
|
@ -322,3 +393,38 @@ line 66 73 109 50 250 250 250
|
||||||
line 66 88 109 109 250 250 250
|
line 66 88 109 109 250 250 250
|
||||||
line 54 73 10 50 250 250 250
|
line 54 73 10 50 250 250 250
|
||||||
end
|
end
|
||||||
|
object firewall 120 120
|
||||||
|
# outline
|
||||||
|
line 0 0 119 0 0 0 0
|
||||||
|
line 119 0 119 119 0 0 0
|
||||||
|
line 0 0 0 119 0 0 0
|
||||||
|
line 0 119 119 119 0 0 0
|
||||||
|
# fill
|
||||||
|
fill 20 20 255 0 0
|
||||||
|
# horizontal mortar lines
|
||||||
|
line 0 30 119 30 0 0 0
|
||||||
|
line 0 60 119 60 0 0 0
|
||||||
|
line 0 90 119 90 0 0 0
|
||||||
|
# vertical mortar lines - top
|
||||||
|
line 60 0 60 30 0 0 0
|
||||||
|
# vertical mortar lines - second top
|
||||||
|
line 30 30 30 60 0 0 0
|
||||||
|
line 90 30 90 60 0 0 0
|
||||||
|
# vertical mortar lines - second bottom
|
||||||
|
line 60 60 60 90 0 0 0
|
||||||
|
# vertical mortar lines - bottom
|
||||||
|
line 30 90 30 119 0 0 0
|
||||||
|
line 90 90 90 119 0 0 0
|
||||||
|
end
|
||||||
|
object redbox 120 120
|
||||||
|
box 0 0 119 119 0 0 0
|
||||||
|
fill 50 50 255 0 0
|
||||||
|
end
|
||||||
|
object greenbox 120 120
|
||||||
|
box 0 0 119 119 0 0 0
|
||||||
|
fill 50 50 0 255 0
|
||||||
|
end
|
||||||
|
object bluebox 120 120
|
||||||
|
box 0 0 119 119 0 0 0
|
||||||
|
fill 50 50 0 0 255
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue