mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-04-22 15:41:57 +02:00
More cracker fixes
This commit is contained in:
commit
c096b2b14a
8
Makefile
8
Makefile
@ -1,8 +1,8 @@
|
||||
SOURCES := src/*.c src/elements/*.c
|
||||
|
||||
CFLAGS := -w -std=c99 -D_POSIX_C_SOURCE=200112L -Iincludes/
|
||||
CFLAGS := -w -std=c99 -D_POSIX_C_SOURCE=200112L -Iincludes/
|
||||
OFLAGS := -O3 -ffast-math -ftree-vectorize -funsafe-math-optimizations
|
||||
LFLAGS := -lSDL -lm -lbz2
|
||||
LFLAGS := -lSDL -lm -lbz2
|
||||
LFLAGS_X := -lm -lbz2 -lSDLmain
|
||||
MFLAGS_SSE3 := -march=native -DX86 -DX86_SSE3 -msse3
|
||||
MFLAGS_SSE2 := -march=native -DX86 -DX86_SSE2 -msse2
|
||||
@ -68,10 +68,10 @@ powder-sse.exe: $(SOURCES) powder-res.o
|
||||
chmod 0644 $@
|
||||
mv $@ build
|
||||
powder-x: $(SOURCES)
|
||||
gcc -o $@ $(CFLAGS) $(OFLAGS) $(LFLAGS_X) $(MFLAGS) $(SOURCES) -DMACOSX -DPIX32BGRA -arch x86_64 -framework Cocoa -framework SDL
|
||||
gcc -o $@ $(CFLAGS) $(OFLAGS) $(LFLAGS_X) $(MFLAGS) $(SOURCES) -DMACOSX -DPIX32BGRA -arch x86_64 -framework Cocoa -framework SDL -framework Python
|
||||
strip $@
|
||||
mv $@ build/Powder.app/Contents/MacOS/
|
||||
powder-x-ogl: $(SOURCES)
|
||||
gcc -o $@ $(CFLAGS) $(OFLAGS) $(LFLAGS_X) $(MFLAGS) $(SOURCES) -DOpenGL -DMACOSX -DPIX32BGRA -arch x86_64 -framework Cocoa -framework SDL -framework OpenGL
|
||||
gcc -o $@ $(CFLAGS) $(OFLAGS) $(LFLAGS_X) $(MFLAGS) $(SOURCES) -DOpenGL -DMACOSX -DPIX32BGRA -arch x86_64 -framework Cocoa -framework SDL -framework OpenGL -framework Python
|
||||
strip $@
|
||||
mv $@ build
|
||||
|
211
build/ext_chat.py
Normal file
211
build/ext_chat.py
Normal file
@ -0,0 +1,211 @@
|
||||
import tpt
|
||||
import sys
|
||||
import time
|
||||
import socket
|
||||
import tpt_console
|
||||
|
||||
HOST="irc.freenode.net"
|
||||
PORT=6667
|
||||
name=tpt.get_name()
|
||||
print "name is %s"%repr(name)
|
||||
if(name==""):
|
||||
#fuck. abort?
|
||||
raise SystemExit("please log in!")
|
||||
|
||||
def raw(s,st):
|
||||
s.send("%s\n\r"%st)
|
||||
|
||||
def init():
|
||||
global frame,s,rec,readbuffer,namelist,typing,typed,IDENT,NICK
|
||||
global REALNAME,CHANNEL
|
||||
frame=0
|
||||
s=None
|
||||
rec=([("",0,0,0,255)]*20)+[("connected.",255,0,0,128)]
|
||||
readbuffer=""
|
||||
namelist=[]
|
||||
typing=False
|
||||
typed=""
|
||||
NICK=name+"[tpt]"
|
||||
IDENT=name+"[tpt]"
|
||||
REALNAME=name
|
||||
CHANNEL="#foobar7"
|
||||
readbuffer=""
|
||||
|
||||
def exit():
|
||||
raw(s,"QUIT")
|
||||
s.close()
|
||||
|
||||
def console_handle(txt):
|
||||
"""
|
||||
:doxin!~lieuwe@unaffiliated/lieuwe JOIN :#foobar7
|
||||
:doxin!~lieuwe@unaffiliated/lieuwe PRIVMSG #foobar7 :there
|
||||
:doxin!~lieuwe@unaffiliated/lieuwe PRIVMSG #foobar7 :ACTION is fat
|
||||
"""
|
||||
lst=txt.split(" ")
|
||||
if(lst[0]=="/me"):
|
||||
rec.append(("%s %s"%(NICK,txt[4:]),255,0,255,128))
|
||||
raw(s,"PRIVMSG %s :\x01ACTION %s\x01"%(CHANNEL,txt[4:]))
|
||||
tpt.console_close()
|
||||
else:
|
||||
rec.append(("<%s>: %s"%(NICK,txt),255,255,0,128))
|
||||
raw(s,"PRIVMSG %s :%s"%(CHANNEL,txt))
|
||||
tpt.console_close()
|
||||
|
||||
def key(keyy) :
|
||||
try:
|
||||
a=key.pmod
|
||||
except:
|
||||
key.pmod=(False,False,False)
|
||||
global typing,typed
|
||||
print "got %s"%repr(keyy)
|
||||
ctrl1,ctrl2,alt1,alt2,shift1,shift2=tpt.get_modifier()
|
||||
mod=(ctrl1 or ctrl2,alt1 or alt2,shift1 or shift2)
|
||||
skip=False
|
||||
if(not key.pmod[0] and mod[0]):
|
||||
skip=True
|
||||
if(not key.pmod[1] and mod[1]):
|
||||
skip=True
|
||||
if(not key.pmod[2] and mod[2]):
|
||||
skip=True
|
||||
key.pmod=mod
|
||||
if(skip):
|
||||
return
|
||||
|
||||
if(typing and ord(keyy)>=32 and ord(keyy)<=126):
|
||||
if(mod[2]):
|
||||
typed+=keyy.upper()#needs to be fixed for special chars
|
||||
else:
|
||||
typed+=keyy
|
||||
if(keyy=="\x1b" and typing):
|
||||
typing=False
|
||||
typed=""
|
||||
tpt.shortcuts_enable()
|
||||
if(keyy=="t" and typing==False):
|
||||
typing=True
|
||||
tpt.shortcuts_disable()
|
||||
if(keyy=="\r" and typing==True):
|
||||
console_handle(typed)
|
||||
typed=""
|
||||
typing=False
|
||||
tpt.shortcuts_enable()
|
||||
#got '\t'
|
||||
#got '\x08'
|
||||
if(keyy=="\x08"):
|
||||
typed=typed[:-1]
|
||||
#if(keyy=="\t"):
|
||||
# startswith=
|
||||
|
||||
|
||||
def step():
|
||||
global frame,s,rec,readbuffer,namelist
|
||||
frame+=1
|
||||
if(frame==1):
|
||||
tpt.console_close()
|
||||
#lets see if we can seize the console:
|
||||
tpt_console._handle=console_handle
|
||||
if(frame==2):
|
||||
tpt.draw_fillrect(0,0,612,384,0,0,0,128)
|
||||
tpt.draw_text(32,32,"opening connection\nhold on to your pants.",255,255,255)
|
||||
if(frame==3):
|
||||
s=socket.socket()
|
||||
s.settimeout(5)
|
||||
s.connect((HOST, PORT))
|
||||
raw(s,"NICK %s" % NICK)
|
||||
raw(s,"USER %s %s bla :%s" % (IDENT, HOST, REALNAME))
|
||||
s.settimeout(0)
|
||||
if(frame==120):
|
||||
raw(s,"JOIN %s"%CHANNEL)
|
||||
rec.append(("joined",255,0,0,255))
|
||||
if(frame>=3):
|
||||
try:
|
||||
readbuffer=readbuffer+s.recv(1024)
|
||||
except IOError:
|
||||
pass
|
||||
else:
|
||||
temp=readbuffer.split("\n")
|
||||
readbuffer=temp.pop()
|
||||
|
||||
for line in temp:
|
||||
line=line.strip()
|
||||
#print repr(line)
|
||||
line=line.split()
|
||||
if(line[1]=="PRIVMSG"):
|
||||
#:doxin!~lieuwe@unaffiliated/lieuwe PRIVMSG doxin[tpt] :some shit
|
||||
frm=line[0][1:].partition("!")[0]
|
||||
msg=' '.join(line[3:])[1:]
|
||||
tmp=["<",frm,"> ",msg]
|
||||
if(msg[0]=="\x01" and msg[-1]=="\x01"):
|
||||
msg=msg[8:-1]#ACTION
|
||||
tmp=[frm," ",msg]
|
||||
if(line[2]==NICK):
|
||||
rec.append((''.join(tmp),255,255,255,255))
|
||||
else:
|
||||
rec.append((''.join(tmp),255,255,255,128))
|
||||
elif(line[0]=="PING"):
|
||||
raw(s,"PONG %s"%line[1])
|
||||
elif(line[1]=="353"):
|
||||
#:leguin.freenode.net 353 doxin[tpt] = #powder :doxin[tpt] ZebraineZ _-_Rafael_-_ doxin bildramer BlueMaxima TheRazorsEDGE raj-k webb|AP where @devast8a Merbo FrozenKnight EppyMoon EvilJStoker Mortvert SpitfireWP @frankbro Ares
|
||||
names=line[4:]
|
||||
namelist=[]
|
||||
for item in names:
|
||||
item=item.strip()
|
||||
r=255
|
||||
g=255
|
||||
b=255
|
||||
if(item[0]==":"):
|
||||
item=item[1:]
|
||||
elif(item[0]=="@"):
|
||||
g=0
|
||||
b=0
|
||||
namelist.append((item,r,g,b,128))
|
||||
elif(line[1]=="JOIN"):
|
||||
#':savask!~savask@95-190-25-195-xdsl-dynamic.kuzbass.net JOIN :#powder'
|
||||
tmp=line[0][1:].partition("!")[0]
|
||||
namelist.append((tmp,255,255,255,128))
|
||||
rec.append(("%s joined"%name,0,255,0,128))
|
||||
elif(line[1]=="PART"):
|
||||
#':savask!~savask@95-190-25-195-xdsl-dynamic.kuzbass.net PART #powder :"Leaving."'
|
||||
tmp=line[0][1:].partition("!")[0]
|
||||
msg=' '.join(line[2:])[1:]
|
||||
rem=None
|
||||
for item in namelist:
|
||||
if(item[0]==tmp or item[0]=="@"+tmp):
|
||||
rem=item
|
||||
rec.append(("%s parted: %s"%(name,msg),0,255,0,128))
|
||||
if(rem!=None):
|
||||
namelist.remove(rem)
|
||||
elif(line[1]=="NICK"):
|
||||
#:doxin!~lieuwe@unaffiliated/lieuwe NICK :d0x1n
|
||||
tmp=line[0][1:].partition("!")[0]
|
||||
rem=None
|
||||
for item in namelist:
|
||||
if(item[0]==tmp or item[0]=="@"+tmp):
|
||||
rem=item
|
||||
rec.append(("%s is now known as %s"%(name,line[2]),0,255,0,128))
|
||||
if(rem!=None):
|
||||
if(rem[0][0]=="@"):
|
||||
namelist.append(("@"+line[2][1:],rem[1],rem[2],rem[3],rem[4]))
|
||||
else:
|
||||
namelist.append((line[2][1:],rem[1],rem[2],rem[3],rem[4]))
|
||||
namelist.remove(rem)
|
||||
|
||||
|
||||
|
||||
|
||||
yy=32
|
||||
if(len(rec)>20):
|
||||
rec=rec[-20:]
|
||||
for item in rec:
|
||||
tpt.draw_text(8,yy,item[0],item[1],item[2],item[3],item[4])
|
||||
yy+=8
|
||||
if(typing):
|
||||
if(frame%30<15):
|
||||
tpt.draw_text(8,yy,typed+"|",255,255,255,255)
|
||||
else:
|
||||
tpt.draw_text(8,yy,typed,255,255,255,255)
|
||||
#print namelist
|
||||
yy=32
|
||||
for item in namelist:
|
||||
tpt.draw_text(604-tpt.get_width(item[0]),yy,item[0],item[1],item[2],item[3],item[4])
|
||||
yy+=8
|
||||
|
9
build/ext_fun.py
Normal file
9
build/ext_fun.py
Normal file
@ -0,0 +1,9 @@
|
||||
import tpt
|
||||
def init():
|
||||
pass
|
||||
def key(keyy):
|
||||
pass
|
||||
def step():
|
||||
tpt.draw_text(100,100,"FUCK YEAH!",255,255,255,255)
|
||||
def exit():
|
||||
pass
|
45
console_README
Normal file
45
console_README
Normal file
@ -0,0 +1,45 @@
|
||||
### CONSOLE ###
|
||||
the console in this version is a python console and will execute any command you enter.
|
||||
the api for interacting with the powder toy is contained in the tpt module and is already imported at startup.
|
||||
currently implemented api functions:
|
||||
create(x,y,type) create a particle of type <type> at <x>,<y>
|
||||
reset_velocity() resets all velocity
|
||||
reset_pressure() resets all pressure
|
||||
reset_sparks() resets all sparks
|
||||
|
||||
### USING SET COMMANDS ###
|
||||
the console uses keywords to identify variables of what to set, you can specify x and y coords with x=100 y=100, ect.
|
||||
i is the particle number
|
||||
setfrom will change all of setfrom's type to the setto variable. It needs to be a string "dust" ect, "all" for all.
|
||||
the setto is what the particle(s) will be set to, it is a string for the type/ctype commands, and an int for the rest, there is a settoint for type and ctype command.
|
||||
you need to set the to* variable and one location/name/coords for it to work.
|
||||
set_type(x=,y=,i=,setfrom="",setto="")
|
||||
set_life()
|
||||
set_temp()
|
||||
set_tmp()
|
||||
set_x()
|
||||
set_y()
|
||||
set_vx()
|
||||
set_vy()
|
||||
set_ctype()
|
||||
|
||||
pause() pause the game(note that closing the console
|
||||
pauses the game)
|
||||
unpause() unpause the game(note that closing the console
|
||||
pauses the game)
|
||||
toggle_pause() toggle pause(note that closing the console
|
||||
pauses the game)
|
||||
close_console() closes the console and pauses the game
|
||||
open_console() opens the console
|
||||
toggle_console() toggles the console
|
||||
|
||||
NOTE: these functions don't do bounds checking, which means that they CAN AND
|
||||
WILL CRASH the powder toy. be carefull.
|
||||
|
||||
### TIPS&TRICKS ###
|
||||
all functions that need a particle type expect a number. but instead of doing
|
||||
tpt.set_life(32,life) you can do tpt.set_life(element['uran'],life)
|
||||
|
||||
### COMPILING ###
|
||||
before you compile you should have python 2.x installed.
|
||||
you must run the "getheader.py" script to get the correct linking options, add these options to the makefile
|
37
getheader.py
Normal file
37
getheader.py
Normal file
@ -0,0 +1,37 @@
|
||||
import sys
|
||||
import os.path
|
||||
import compileall
|
||||
path=os.path.join(sys.exec_prefix,"include","python%s"%sys.version[:3])
|
||||
#print "headers at ",repr(path)
|
||||
#-lpython2.3 -lm -L/usr/lib/python2.3/config
|
||||
args="-lpython%s -lm -L%s"%(sys.version[:3],os.path.join(sys.exec_prefix,"lib","python%s"%sys.version[:3],"config"))
|
||||
print " linux args are"
|
||||
print args,"-I%s"%path
|
||||
|
||||
path=os.path.join(sys.exec_prefix,"include")
|
||||
args="-lpython%s -lm -L%s"%(sys.version[:3],os.path.join(sys.exec_prefix,"lib","config"))#,"python%s"%sys.version[:3]
|
||||
print "\n windows args are"
|
||||
print args,"-I%s"%path
|
||||
|
||||
#unsigned char tpt_console_pyc[] = { 0x1B, 0x57};
|
||||
lst=[]
|
||||
compileall.compile_dir("./src/python", force=1)
|
||||
|
||||
print "generating pyconsole.h"
|
||||
|
||||
fname="./src/python/tpt_console.pyc"
|
||||
try:
|
||||
fid=open(fname,"r")
|
||||
except IOError:
|
||||
fname="./src/python/tpt_console.pyo"
|
||||
finally:
|
||||
fid.close()
|
||||
|
||||
with open(fname,"r") as fid:
|
||||
for char in fid.read():
|
||||
lst.append(hex(ord(char)))
|
||||
tmp=",".join(lst)
|
||||
out=''.join(["#include <Python.h>\nunsigned char tpt_console_pyc[] = {",tmp,"};"])
|
||||
with open("./includes/pyconsole.h","w") as fid:
|
||||
fid.write(out)
|
||||
print "done"
|
@ -16,6 +16,8 @@
|
||||
|
||||
#define THUMB_CACHE_SIZE 256
|
||||
|
||||
//#define pyconsole
|
||||
|
||||
#define IMGCONNS 3
|
||||
#define TIMEOUT 100
|
||||
#define HTTP_TIMEOUT 10
|
||||
@ -65,6 +67,8 @@ extern unsigned char ZSIZE;
|
||||
#define SQUARE_BRUSH 1
|
||||
#define BRUSH_NUM 2
|
||||
|
||||
#define PYCONSOLE
|
||||
|
||||
#ifdef PIX16
|
||||
typedef unsigned short pixel;
|
||||
#else
|
||||
|
@ -225,7 +225,7 @@ void open_link(char *uri);
|
||||
|
||||
int report_ui(pixel *vid_buf, char *save_id);
|
||||
|
||||
char *console_ui(pixel *vid_buf, char error[255]);
|
||||
char *console_ui(pixel *vid_buf, char error[255],char console_more);
|
||||
int console_parse_coords(char *txt, int *x, int *y, char *err);
|
||||
int console_parse_type(char *txt, int *element, char *err);
|
||||
int console_parse_partref(char *txt, int *which, char *err);
|
||||
|
@ -50,15 +50,15 @@
|
||||
|
||||
|
||||
|
||||
#define PT_NONE 0
|
||||
#define PT_DUST 1
|
||||
#define PT_WATR 2
|
||||
#define PT_NONE 0
|
||||
#define PT_DUST 1
|
||||
#define PT_WATR 2
|
||||
#define PT_OIL 3
|
||||
#define PT_FIRE 4
|
||||
#define PT_STNE 5
|
||||
#define PT_LAVA 6
|
||||
#define PT_GUNP 7
|
||||
#define PT_NITR 8
|
||||
#define PT_GUNP 7
|
||||
#define PT_NITR 8
|
||||
#define PT_CLNE 9
|
||||
#define PT_GAS 10
|
||||
#define PT_PLEX 11
|
||||
@ -166,7 +166,7 @@
|
||||
#define PT_ANAR 113
|
||||
#define PT_VINE 114
|
||||
#define PT_INVIS 115
|
||||
#define PT_EQUALVEL 116//all particles equal their velocities
|
||||
#define PT_EQUALVEL 116 //all particles equal their velocities
|
||||
#define PT_SPAWN2 117
|
||||
#define PT_SPAWN 118
|
||||
#define PT_SHLD1 119
|
||||
|
2
includes/pyconsole.h
Normal file
2
includes/pyconsole.h
Normal file
File diff suppressed because one or more lines are too long
@ -6,8 +6,8 @@ int update_PRTO(UPDATE_FUNC_ARGS) {
|
||||
parts[i].tmp = (int)((parts[i].temp-73.15f)/100+1);
|
||||
if (parts[i].tmp>=CHANNELS) parts[i].tmp = CHANNELS-1;
|
||||
else if (parts[i].tmp<0) parts[i].tmp = 0;
|
||||
for (rx=-1; rx<2; rx++)
|
||||
for (ry=-1; ry<2; ry++)
|
||||
for (rx=1; rx>-2; rx--)
|
||||
for (ry=1; ry>-2; ry--)
|
||||
if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry))
|
||||
{
|
||||
r = pmap[y+ry][x+rx];
|
||||
|
@ -3868,10 +3868,12 @@ struct command_history {
|
||||
};
|
||||
typedef struct command_history command_history;
|
||||
command_history *last_command = NULL;
|
||||
char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show previous commands
|
||||
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;
|
||||
@ -3885,7 +3887,17 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
||||
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);
|
||||
|
||||
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));
|
||||
@ -3900,8 +3912,7 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
||||
|
||||
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)\n"
|
||||
"Current commands are quit, set, reset, load, create, file, kill, sound\n" //TODO: help command
|
||||
drawtext(vid_buf, 15, 15, "Welcome to The Powder Toy console v.3 (by cracker64, python by Doxin)" //TODO: help command
|
||||
,255, 255, 255, 255);
|
||||
|
||||
cc = 0;
|
||||
@ -3926,11 +3937,35 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
||||
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);
|
||||
|
||||
drawtext(vid_buf, 5, 207, ">", 255, 255, 255, 240);
|
||||
//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
|
||||
drawtext(vid_buf, 5, 207, "...", 255, 255, 255, 240);
|
||||
|
||||
ui_edit_draw(vid_buf, &ed);
|
||||
ui_edit_process(mx, my, b, &ed);
|
||||
@ -3943,12 +3978,14 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
||||
currentcommand->command = mystrdup(ed.str);
|
||||
last_command = currentcommand;
|
||||
free(old_buf);
|
||||
SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||
return currentcommand->command;
|
||||
}
|
||||
if (sdl_key==SDLK_ESCAPE || sdl_key==SDLK_BACKQUOTE)
|
||||
{
|
||||
console_mode = 0;
|
||||
free(old_buf);
|
||||
SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||
return NULL;
|
||||
}
|
||||
if(sdl_key==SDLK_UP || sdl_key==SDLK_DOWN)
|
||||
@ -3985,6 +4022,7 @@ char *console_ui(pixel *vid_buf,char error[255]) { //TODO: error messages, show
|
||||
}
|
||||
console_mode = 0;
|
||||
free(old_buf);
|
||||
SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
1303
src/main.c
1303
src/main.c
File diff suppressed because it is too large
Load Diff
116
src/python/tpt_console.py
Normal file
116
src/python/tpt_console.py
Normal file
@ -0,0 +1,116 @@
|
||||
import tpt
|
||||
from tpt import *
|
||||
import sys
|
||||
import code
|
||||
import ctypes
|
||||
import traceback
|
||||
DEBUG=False
|
||||
|
||||
#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)
|
||||
if(DEBUG==False):
|
||||
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):
|
||||
traceback.print_exc()
|
||||
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)
|
||||
|
||||
|
||||
_extensions=[]
|
||||
def loadext(fname):
|
||||
ext=__import__(fname)
|
||||
ext.init()
|
||||
_extensions.append(ext)
|
||||
|
||||
def keypress(key):
|
||||
unload=[]
|
||||
for item in _extensions:
|
||||
try:
|
||||
item.key(key)
|
||||
except Exception as ex:
|
||||
error(ex)
|
||||
unload.append(item)
|
||||
for item in unload:
|
||||
item.exit()
|
||||
_extensions.remove(item)
|
||||
|
||||
|
||||
def step():
|
||||
unload=[]
|
||||
for item in _extensions:
|
||||
try:
|
||||
item.step()
|
||||
except Exception as ex:
|
||||
error(ex)
|
||||
unload.append(item)
|
||||
for item in unload:
|
||||
try:
|
||||
item.exit()
|
||||
except Exception as ex:
|
||||
error(ex)
|
||||
_extensions.remove(item)
|
Loading…
x
Reference in New Issue
Block a user