summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon <simon@hardwired.org.uk>2011-03-04 11:14:34 (GMT)
committer Simon <simon@hardwired.org.uk>2011-03-04 11:14:34 (GMT)
commit30462ec28d2c610f2fa81b88f8cc4f5534710d89 (patch)
tree6f28f150d2aeabaa303abbffb126d4a04826e718 /src
parent918dab0e30583471eed2f52349c69c2548f0dc07 (diff)
parent04f4a0d9fe90533d583d118a907122cb2060bf02 (diff)
downloadpowder-30462ec28d2c610f2fa81b88f8cc4f5534710d89.zip
powder-30462ec28d2c610f2fa81b88f8cc4f5534710d89.tar.gz
Python console changes
Diffstat (limited to 'src')
-rw-r--r--src/interface.c38
-rw-r--r--src/main.c341
-rw-r--r--src/powder.c10
-rw-r--r--src/python/tpt_console.py77
4 files changed, 381 insertions, 85 deletions
diff --git a/src/interface.c b/src/interface.c
index 79ebcb1..6382ed0 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -3847,10 +3847,12 @@ struct command_history {
};
typedef struct command_history command_history;
command_history *last_command = NULL;
+command_history *last_command2 = NULL;
char *console_ui(pixel *vid_buf,char error[255],char console_more) {
int mx,my,b,cc,ci = -1;
pixel *old_buf=calloc((XRES+BARSIZE)*(YRES+MENUSIZE), PIXELSIZE);
command_history *currentcommand;
+ command_history *currentcommand2;
ui_edit ed;
ed.x = 15;
ed.y = 207;
@@ -3864,10 +3866,15 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
ed.cursor = 0;
//fillrect(vid_buf, -1, -1, XRES, 220, 0, 0, 0, 190);
memcpy(old_buf,vid_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
- fillrect(old_buf, -1, -1, XRES, 220, 0, 0, 0, 190);
+ fillrect(old_buf, -1, -1, XRES+1, 220, 0, 0, 0, 190);
- SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
+ currentcommand2 = malloc(sizeof(command_history));
+ memset(currentcommand2, 0, sizeof(command_history));
+ currentcommand2->prev_command = last_command2;
+ currentcommand2->command = mystrdup(error);
+ last_command2 = currentcommand2;
+ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
cc = 0;
while(cc < 80){
fillrect(old_buf, -1, -1+cc, XRES+BARSIZE, 2, 0, 0, 0, 160-(cc*2));
@@ -3880,6 +3887,7 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
my /= sdl_scale;
ed.focus = 1;
+ //clearrect(vid_buf, 0, 0, XRES+BARSIZE, 220);//anyway to make it transparent?
memcpy(vid_buf,old_buf,(XRES+BARSIZE)*YRES*PIXELSIZE);
draw_line(vid_buf, 0, 219, XRES+BARSIZE-1, 219, 228, 228, 228, XRES+BARSIZE);
drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python by Doxin)" //TODO: help command
@@ -3907,9 +3915,31 @@ char *console_ui(pixel *vid_buf,char error[255],char console_more) {
break;
}
}
+ cc = 0;
+ currentcommand2 = last_command2;
+ while(cc < 10)
+ {
+ if(currentcommand2==NULL)
+ break;
+ drawtext(vid_buf, 215, 175-(cc*12), currentcommand2->command, 255, 225, 225, 255);
+ if(currentcommand2->prev_command!=NULL)
+ {
+ if(cc<9) {
+ currentcommand2 = currentcommand2->prev_command;
+ } else if(currentcommand2->prev_command!=NULL) {
+ free(currentcommand2->prev_command);
+ currentcommand2->prev_command = NULL;
+ }
+ cc++;
+ }
+ else
+ {
+ break;
+ }
+ }
- if(error && ed.str[0]=='\0')
- drawtext(vid_buf, 20, 207, error, 255, 127, 127, 200);
+ //if(error && ed.str[0]=='\0')
+ //drawtext(vid_buf, 20, 207, error, 255, 127, 127, 200);
if(console_more==0)
drawtext(vid_buf, 5, 207, ">", 255, 255, 255, 240);
else
diff --git a/src/main.c b/src/main.c
index 005fc65..a793a7b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -24,6 +24,8 @@
*/
#include "Python.h"
+#include "pyconsole.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -1189,12 +1191,16 @@ char console_error[255] = "";
//functions callable from python:
static PyObject*
-emb_create(PyObject *self, PyObject *args)
+emb_create(PyObject *self, PyObject *args, PyObject *keywds)
{
int x,y,t;
- if(!PyArg_ParseTuple(args, "III:create",&x,&y,&t))
+ char *name = "";
+ char *kwlist[] = {"x","y","t","name", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "II|Is:create",kwlist, &x,&y,&t,&name))
return NULL;
//
+ if(strcmp(name,"")!=0)
+ console_parse_type(name, &t, console_error);
return Py_BuildValue("i",create_part(-1,x,y,t));
}
//sys_pause = !sys_pause
@@ -1338,13 +1344,17 @@ emb_reset_sparks(PyObject *self, PyObject *args)
return Py_BuildValue("i",1);
}
-emb_set_life(PyObject *self, PyObject *args)
+emb_set_life(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_life",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1352,7 +1362,7 @@ emb_set_life(PyObject *self, PyObject *args)
parts[i].life = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1360,16 +1370,33 @@ emb_set_life(PyObject *self, PyObject *args)
parts[i].life = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].life = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].life = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_type(PyObject *self, PyObject *args)
+emb_set_type(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_type",&j,&life))
+ int i = -1,life,j=-1,x=-1,y=-1;
+ char *name = "";
+ char *type = "";
+ char *kwlist[] = {"setto", "settoint", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "|sIsIII:set_type",kwlist ,&type,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1 && j==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ console_parse_type(type, &life, console_error);
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1377,7 +1404,7 @@ emb_set_type(PyObject *self, PyObject *args)
parts[i].type = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1385,16 +1412,31 @@ emb_set_type(PyObject *self, PyObject *args)
parts[i].type = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].type = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].type = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_temp(PyObject *self, PyObject *args)
+emb_set_temp(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_temp",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1402,7 +1444,7 @@ emb_set_temp(PyObject *self, PyObject *args)
parts[i].temp = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1410,16 +1452,31 @@ emb_set_temp(PyObject *self, PyObject *args)
parts[i].temp = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].temp = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].temp = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_tmp(PyObject *self, PyObject *args)
+emb_set_tmp(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_tmp",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1427,7 +1484,7 @@ emb_set_tmp(PyObject *self, PyObject *args)
parts[i].tmp = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1435,16 +1492,32 @@ emb_set_tmp(PyObject *self, PyObject *args)
parts[i].tmp = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].tmp = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].tmp = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_x(PyObject *self, PyObject *args)
+emb_set_x(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_x",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *type = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1452,7 +1525,7 @@ emb_set_x(PyObject *self, PyObject *args)
parts[i].x = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1460,16 +1533,31 @@ emb_set_x(PyObject *self, PyObject *args)
parts[i].x = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].x = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].x = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_y(PyObject *self, PyObject *args)
+emb_set_y(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_y",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1477,7 +1565,7 @@ emb_set_y(PyObject *self, PyObject *args)
parts[i].y = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1485,16 +1573,34 @@ emb_set_y(PyObject *self, PyObject *args)
parts[i].y = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].y = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].y = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_ctype(PyObject *self, PyObject *args)
+emb_set_ctype(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_ctype",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *type = "";
+ char *kwlist[] = {"setto", "toctypeint", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "s|IsIII:set_type",kwlist ,&type, &life, &name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(!life)
+ console_parse_type(type, &life, console_error);
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1502,7 +1608,7 @@ emb_set_ctype(PyObject *self, PyObject *args)
parts[i].ctype = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1510,16 +1616,31 @@ emb_set_ctype(PyObject *self, PyObject *args)
parts[i].ctype = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].ctype = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].ctype = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_vx(PyObject *self, PyObject *args)
+emb_set_vx(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_vx",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1527,7 +1648,7 @@ emb_set_vx(PyObject *self, PyObject *args)
parts[i].vx = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1535,16 +1656,31 @@ emb_set_vx(PyObject *self, PyObject *args)
parts[i].vx = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].vx = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].vx = life;
+ }
return Py_BuildValue("i",1);
}
-emb_set_vy(PyObject *self, PyObject *args)
+emb_set_vy(PyObject *self, PyObject *args, PyObject *keywds)
{
- int i,life,j;
- if(!PyArg_ParseTuple(args, "II:set_vy",&j,&life))
+ int i = -1,life,j,x=-1,y=-1;
+ char *name = "";
+ char *kwlist[] = {"setto", "from", "i", "x", "y", NULL};
+ if(!PyArg_ParseTupleAndKeywords(args, keywds, "I|sIII:set_type",kwlist ,&life,&name,&i,&x,&y))
return NULL;
//
- if(j==-1)
+ if(strcmp(name,"")==0 && x==-1 && y==-1 && i==-1)
+ return Py_BuildValue("s","Need more args(coords,i,or a particle name)");
+ if(strcmp(name,"all")==0)
{
for(i=0; i<NPART; i++)
{
@@ -1552,7 +1688,7 @@ emb_set_vy(PyObject *self, PyObject *args)
parts[i].vy = life;
}
}
- else
+ else if(console_parse_type(name, &j, console_error))
{
for(i=0; i<NPART; i++)
{
@@ -1560,32 +1696,87 @@ emb_set_vy(PyObject *self, PyObject *args)
parts[i].vy = life;
}
}
+ else if(i!=-1)
+ {
+ if(parts[i].type != PT_NONE)
+ parts[i].vy = life;
+
+ }
+ else if(x!=-1 && y!=-1 && x>=0 && x<XRES && y>=0 && y<YRES)
+ {
+ if(parts[pmap[y][x]>>8].type != PT_NONE)
+ parts[pmap[y][x]>>8].vy = life;
+ }
return Py_BuildValue("i",1);
}
+emb_get_pmap(PyObject *self, PyObject *args)
+{
+ int x,y;
+ if(!PyArg_ParseTuple(args, "II:get_pmap",&x,&y))
+ return NULL;
+ //
+ if(x<0 || y<0 || x>=XRES || y>=YRES)
+ return Py_BuildValue("i",-1);
+
+ return Py_BuildValue("I",pmap[y][x]);
+}
+emb_get_prop(PyObject *self, PyObject *args)
+{
+ int i;
+ char *prop = "";
+ if(!PyArg_ParseTuple(args, "Is:get_pmap",&i,&prop))
+ return NULL;
+ //
+ if(parts[i].type)
+ {
+ if(strcmp(prop,"type")==0)
+ return Py_BuildValue("i",parts[i].type);
+ if(strcmp(prop,"life")==0)
+ return Py_BuildValue("i",parts[i].life);
+ if(strcmp(prop,"ctype")==0)
+ return Py_BuildValue("i",parts[i].ctype);
+ if(strcmp(prop,"temp")==0)
+ return Py_BuildValue("i",parts[i].temp);
+ if(strcmp(prop,"tmp")==0)
+ return Py_BuildValue("i",parts[i].tmp);
+ if(strcmp(prop,"vy")==0)
+ return Py_BuildValue("f",parts[i].vy);
+ if(strcmp(prop,"vx")==0)
+ return Py_BuildValue("f",parts[i].vx);
+ if(strcmp(prop,"x")==0)
+ return Py_BuildValue("i",parts[i].x);
+ if(strcmp(prop,"y")==0)
+ return Py_BuildValue("i",parts[i].y);
+ }
+
+ return Py_BuildValue("i",-1);
+}
static PyMethodDef EmbMethods[] = { //WARNING! don't forget to register your function here!
- {"create", emb_create, METH_VARARGS,"create a particle."},
- {"log", emb_log, METH_VARARGS,"logs an error string to the console."},
- {"reset_pressure", emb_reset_pressure, METH_VARARGS,"resets all the pressure."},
- {"reset_velocity", emb_reset_velocity, METH_VARARGS,"resets all the velocity."},
- {"reset_sparks", emb_reset_sparks, METH_VARARGS,"resets all the sparks."},
- {"set_life", emb_set_life, METH_VARARGS,"sets life of a specified particle."},
- {"set_type", emb_set_type, METH_VARARGS,"sets type of a specified particle."},
- {"set_temp", emb_set_temp, METH_VARARGS,"sets temp of a specified particle."},
- {"set_tmp", emb_set_tmp, METH_VARARGS,"sets tmp of a specified particle."},
- {"set_x", emb_set_x, METH_VARARGS,"sets x of a specified particle."},
- {"set_y", emb_set_y, METH_VARARGS,"sets y of a specified particle."},
- {"set_ctype", emb_set_y, METH_VARARGS,"sets ctype of a specified particle."},
- {"set_vx", emb_set_vx, METH_VARARGS,"sets vx of a specified particle."},
- {"set_vy", emb_set_vy, METH_VARARGS,"sets vy of a specified particle."},
- {"pause", emb_pause, METH_VARARGS,"pause the game."},
- {"unpause", emb_unpause, METH_VARARGS,"unpause the game."},
- {"toggle_pause", emb_toggle_pause, METH_VARARGS,"toggle game pause."},
- {"open_console", emb_open_console, METH_VARARGS,"open the game console."},
- {"close_console", emb_close_console, METH_VARARGS,"close the game console."},
- {"toggle_console", emb_toggle_console, METH_VARARGS,"toggle the game console."},
- {"console_more", emb_console_more, METH_VARARGS,"turns the more indicator on."},
- {"console_less", emb_console_less, METH_VARARGS,"turns the more indicator off."},
+ {"create", emb_create, METH_VARARGS|METH_KEYWORDS, "create a particle."},
+ {"log", emb_log, METH_VARARGS, "logs an error string to the console."},
+ {"reset_pressure", emb_reset_pressure, METH_VARARGS, "resets all the pressure."},
+ {"reset_velocity", emb_reset_velocity, METH_VARARGS, "resets all the velocity."},
+ {"reset_sparks", emb_reset_sparks, METH_VARARGS, "resets all the sparks."},
+ {"set_life", emb_set_life, METH_VARARGS|METH_KEYWORDS, "sets life of a specified particle."},
+ {"set_type", emb_set_type, METH_VARARGS|METH_KEYWORDS, "sets type of a specified particle."},
+ {"set_temp", emb_set_temp, METH_VARARGS|METH_KEYWORDS, "sets temp of a specified particle."},
+ {"set_tmp", emb_set_tmp, METH_VARARGS|METH_KEYWORDS, "sets tmp of a specified particle."},
+ {"set_x", emb_set_x, METH_VARARGS|METH_KEYWORDS, "sets x of a specified particle."},
+ {"set_y", emb_set_y, METH_VARARGS|METH_KEYWORDS, "sets y of a specified particle."},
+ {"set_ctype", emb_set_y, METH_VARARGS|METH_KEYWORDS, "sets ctype of a specified particle."},
+ {"set_vx", emb_set_vx, METH_VARARGS|METH_KEYWORDS, "sets vx of a specified particle."},
+ {"set_vy", emb_set_vy, METH_VARARGS|METH_KEYWORDS, "sets vy of a specified particle."},
+ {"pause", emb_pause, METH_VARARGS, "pause the game."},
+ {"unpause", emb_unpause, METH_VARARGS, "unpause the game."},
+ {"toggle_pause", emb_toggle_pause, METH_VARARGS, "toggle game pause."},
+ {"open_console", emb_open_console, METH_VARARGS, "open the game console."},
+ {"close_console", emb_close_console, METH_VARARGS, "close the game console."},
+ {"toggle_console", emb_toggle_console, METH_VARARGS, "toggle the game console."},
+ {"console_more", emb_console_more, METH_VARARGS, "turns the more indicator on."},
+ {"console_less", emb_console_less, METH_VARARGS, "turns the more indicator off."},
+ {"get_pmap", emb_get_pmap, METH_VARARGS, "get the pmap value."},
+ {"get_prop", emb_get_prop, METH_VARARGS, "get some properties."},
{NULL, NULL, 0, NULL}
};
@@ -1639,11 +1830,13 @@ int main(int argc, char *argv[])
PyRun_SimpleString("import sys\nsys.path.append('.')");
PyRun_SimpleString("print 'python present.'");
//load the console module and whatnot
- pname=PyString_FromString("tpt_console");//create string object
- pmodule = PyImport_Import(pname);//import module
+ //pname=PyString_FromString("tpt_console");//create string object
+ //pmodule = PyImport_Import(pname);//import module
+ PyObject *tpt_console_obj = PyMarshal_ReadObjectFromString(tpt_console_pyc+8, sizeof(tpt_console_pyc)-8);
+ pmodule=PyImport_ExecCodeModule("tpt_console", tpt_console_obj);
if(pmodule!=NULL)
{
- Py_DECREF(pname);//throw away the string object
+ //Py_DECREF(pname);//throw away the string object
pfunc=PyObject_GetAttrString(pmodule,"handle");//get the handler function
if(pfunc && PyCallable_Check(pfunc))//check if it's really a function
{
@@ -2885,9 +3078,7 @@ int main(int argc, char *argv[])
}
}
else
- {
create_line(lx, ly, x, y, bsx, bsy, c);
- }
lx = x;
ly = y;
}
@@ -2912,7 +3103,7 @@ int main(int argc, char *argv[])
{
if (sdl_mod & (KMOD_CAPS))
c = 0;
- if (c!=WL_STREAM+100&&c!=SPC_AIR&&c!=SPC_HEAT&&c!=SPC_COOL&&c!=SPC_VACUUM&&c!=PT_WIND&&!REPLACE_MODE)
+ if (c!=WL_STREAM+100&&c!=SPC_AIR&&c!=SPC_HEAT&&c!=SPC_COOL&&c!=SPC_VACUUM&&!REPLACE_MODE&&c!=PT_WIND)
flood_parts(x, y, c, -1, -1);
if (c==SPC_HEAT || c==SPC_COOL)
create_parts(x, y, bsx, bsy, c);
diff --git a/src/powder.c b/src/powder.c
index e93f88d..e15565b 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -1138,7 +1138,7 @@ int nearest_part(int ci, int t)
void update_particles_i(pixel *vid, int start, int inc)
{
- int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors;
+ int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors, createdsomething;
float mv, dx, dy, ix, iy, lx, ly, nrx, nry, dp, ctemph, ctempl;
int fin_x, fin_y, clear_x, clear_y;
float fin_xf, fin_yf, clear_xf, clear_yf;
@@ -1345,14 +1345,14 @@ void update_particles_i(pixel *vid, int start, int inc)
if(neighbors==0 || !(ptypes[r&0xFF].properties&PROP_LIFE || !r&0xFF) || (r>>8)>=NPART)
continue;
for ( golnum = 1; golnum<=NGOL; golnum++)
- for ( goldelete = 0; goldelete<9; goldelete++)
{
- if (neighbors==goldelete&&gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2)
+ goldelete = neighbors;
+ if (gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2)
{
if (create_part(-1,nx,ny,goltype[golnum-1]))
createdsomething = 1;
}
- else if (neighbors-1==goldelete&&gol[nx][ny]==golnum&&(grule[golnum][goldelete]==0||grule[golnum][goldelete]==2))//subtract 1 because it counted itself
+ else if (gol[nx][ny]==golnum&&(grule[golnum][goldelete-1]==0||grule[golnum][goldelete-1]==2))//subtract 1 because it counted itself
{
if(parts[r>>8].tmp==grule[golnum][9]-1)
parts[r>>8].tmp --;
@@ -2873,9 +2873,7 @@ int create_parts(int x, int y, int rx, int ry, int c)
dw = 1;
}
if (c == PT_WIND)
- {
return 1;
- }
if (dw==1)
{
rx = rx/CELL;
diff --git a/src/python/tpt_console.py b/src/python/tpt_console.py
new file mode 100644
index 0000000..864fed8
--- /dev/null
+++ b/src/python/tpt_console.py
@@ -0,0 +1,77 @@
+import tpt
+from tpt import *
+from utils import *
+import sys
+import code
+import ctypes
+import traceback
+#print "console module loaded."
+#redirect stdout like this:
+class logger:
+ def write(self,txt):
+ txt=txt.strip().split("\n")[-1]
+ repr(txt)
+ tpt.log(txt)
+sys.stdout=logger()
+sys.stderr=logger()
+
+element={"none":0,"dust":1,"watr":2,"oil":3,"fire":4,"stne":5,"lava":6,"gunp":7,
+ "nitr":8,"clne":9,"gas":10,"plex":11,"goo":12,"icei":13,"metl":14,"sprk":15,
+ "snow":16,"wood":17,"neut":18,"plut":19,"plnt":20,"acid":21,"void":22,
+ "wtrv":23,"cnct":24,"dstw":25,"salt":26,"sltw":27,"dmnd":28,"bmtl":29,
+ "brmt":30,"phot":31,"uran":32,"wax":33,"mwax":34,"pscn":35,"nscn":36,
+ "lntg":37,"insl":38,"bhol":39,"whol":40,"rbdm":41,"lrbd":42,"ntct":43,
+ "sand":44,"glas":45,"ptct":46,"bgla":47,"thdr":48,"plsm":49,"etrd":50,
+ "nice":51,"nble":52,"btry":53,"lcry":54,"stkm":55,"swch":56,"smke":57,
+ "desl":58,"coal":59,"lo2":60,"o2":61,"inwr":62,"yest":63,"dyst":64,
+ "thrm":65,"glow":66,"brck":67,"hflm":68,"firw":69,"fuse":70,"fsep":71,
+ "amtr":72,"bcol":73,"pcln":74,"hswc":75,"iron":76,"mort":77,"gol":78,
+ "hlif":79,"asim":80,"2x2":81,"dani":82,"amoe":83,"move":84,"pgol":85,
+ "dmoe":86,"34":87,"llif":88,"stan":89,"spng":90,"rime":91,"fog":92,
+ "bcln":93,"love":94,"deut":95,"warp":96,"pump":97,"fwrk":98,"pipe":99,
+ "frzz":100,"frzw":101,"grav":102,"bizr":103,"bizrg":104,"bizrs":105,
+ "inst":106,"isoz":107,"iszs":108,"prti":109,"prto":110,"pste":111,
+ "psts":112,"anar":113,"vine":114,"invis":115,"equalvel":116,"spawn2":117,
+ "spawn":118,"shld1":119,"shld2":120,"shld3":121,"shld4":122,"lolz":123,
+ "wifi":124,"filt":125,"aray":126,"bray":127,"stkm2":128,"bomb":129,
+ "c5":130,"sing":131,"qrtz":132,"pqrt":133,"seed":134,"maze":135,
+ "coag":136,"wall":137,"gnar":138,"repl":139,"myst":140,"boyl":141,
+ "lote":142,"frg2":143,"star":144,"frog":145,"bran":146,"wind":147,
+ "num":148}
+
+
+def fork_unblock():
+ pass#i need to implement this some day.
+def error(ex):
+ err=traceback.format_exc()
+ sys.stdout.write(err)
+
+def clean():
+ #add any functions that must be reachable here.
+ """copy=["__builtins__","__name__","__doc__","__package__",'tpt','clean',
+ 'element','fork','_fork','fork_status','fork_unblock','sys']
+ handle.glob={}
+ for item in copy:
+ handle.glob[item]=globals()[item]"""
+ handle.glob=globals()
+ handle.buf=""
+
+def handle(txt):
+ try:
+ a=handle.glob
+ except:
+ clean()
+ try:
+ _handle(txt)
+ except Exception as ex:
+ error(ex)
+
+def _handle(txt):
+ #print "handling '%s'"%txt
+ try:
+ sys.stdout.write(repr(eval(txt,handle.glob)))
+ except:
+ try:
+ exec txt in handle.glob
+ except Exception as ex:
+ error(ex)