コード例 #1
0
class PK2SPR_ANIM(cpystruct.CpyStruct("""
  uchar   seq[10];
  uchar   frames;
  bool    loop;
""")):
  def __repr__(self):
    return str(self)
コード例 #2
0
class asciifile(cpystruct.CpyStruct("char filename[13]")):
  @classmethod
  def fromraw(cls, v):
    return re.search('[\w\.]*', v, re.U).group(0)
  def __repr__(self):
    return str(self)
  def __str__(self):
    return self.filename
コード例 #3
0
class PK2MAP(
        cpystruct.CpyStruct("""
  char ver[4];
  BYTE nan;
  asciifile tileFile, fieldFile, musicFile;
  asciitxt mapName, author;
  asciinum lvl, air, trig1, trig2, trig3;
  asciinum playTime, v1, background, plrSpr;
  asciinum lvlX, lvlY, icon;
  asciinum spriteCount;
  asciifile spriteFiles[spriteCount];
""")):
    pass
コード例 #4
0
class PK2SPR(cpystruct.CpyStruct("""
asciinum  tyyppi;
asciilongfile  kuvatiedosto;
asciilongfile  aanitiedostot[7];
int     aanet[7];
uchar   frameja;
PK2SPR_ANIM animaatiot[20];
uchar   animaatioita;
uchar   frame_rate;
int     kuva_x;
int     kuva_y;
int     kuva_frame_leveys;
int     kuva_frame_korkeus;
int     kuva_frame_vali;
char    nimi[30];
int     width, height;
double  paino;
bool    vihollinen;
int     energia;
int     vahinko;
uchar   vahinko_tyyppi;
uchar   suojaus;
int     pisteet;
int     AI[10];
uchar   max_hyppy;
double  max_nopeus;
int     latausaika;
uchar   vari;
bool    este;
int     tuhoutuminen;
bool    avain;
bool    tarisee;
uchar   bonusten_lkm;
int     hyokkays1_aika;
int     hyokkays2_aika;
int     pallarx_kerroin;
char    muutos_sprite[100];
char    bonus_sprite[100];
char    ammus1_sprite[100];
char    ammus2_sprite[100];

bool    tiletarkistus;
DWORD   aani_frq;
bool    random_frq;

bool    este_ylos;
bool    este_alas;
bool    este_oikealle;
bool    este_vasemmalle;

uchar   lapinakyvyys;
bool    hehkuu;
int     tulitauko;
bool    liitokyky;
bool    boss;
bool    bonus_aina;
bool    osaa_uida;
""")):
  def __init__(self, f, m):
    with open(f, 'rb') as fh:
      super(self.__class__, self).__init__(fh)
コード例 #5
0
class PK2MAPLAYER(cpystruct.CpyStruct("asciinum lx, ly, w, h;")):
  MAXW = 256
  MAXH = 224
  MAXSZ = MAXW*MAXH

  def width(self):
    return self.w.num + 1
  def height(self):
    return self.h.num + 1

  def __init__(self, dat):
    # should make cpystruct support this usecase better
    super(self.__class__, self).__init__(dat)

    #print str(cpystruct.peek(dat, 128))

    self.layer = bytearray(self.MAXSZ)
    for i in range(len(self.layer)): self.layer[i] = 0xff

    for y in range(self.ly.num, self.ly.num+self.height()):
      for x in range(self.lx.num, self.lx.num+self.width()):
        self.layer[x+y*self.MAXW] = dat.read(1)

  def findBounds(self):
    "find bounding box for coords that have tiles"
    mx,my,mw,mh = None,None,10,10

    for y in range(self.ly, self.ly+self.height()):
      for x in range(self.lx, self.lx+self.width()):
        if self.layer[x + y * self.MAXW] != 255:
          if not my: my = y
          if not mx or x < mx: mx = x
          if x > mw: mw = x
          if y > mh: mh = y

    if not mx: mx = 0
    if not my: my = 0
    return mx, my, mw, mh

  def doSprites(self, la, bb):
    for y in range(self.height()):
      for x in range(self.width()):
        sprite = self.layer[self.lx.num + x + (self.ly.num + y) * self.MAXW]
        if sprite != 255:
          #if sprite > len(self.sprites):
          #  print 'invalid spr',sprite
          #  continue
          rx = self.lx.num + x - bb[0]
          ry = self.ly.num + y - bb[1] + 1
          spr = self.sprites[sprite]
          obj = Tiled.MapObject(str(spr.kuvatiedosto), '', QPointF(rx, ry), QSizeF(1, 1)) #spr.width, spr.height))
          # 0 should point to the actual sprite but how?
          obj.setCell(Tiled.Cell(self.spriteGfx[str(spr.kuvatiedosto)].tileAt(0)))
          la.addObject(obj)

  def doTiles(self, ts, la, bb):
    for y in range(self.height()):
      for x in range(self.width()):
        tile = self.layer[self.lx.num + x + (self.ly.num + y) * self.MAXW]
        if tile != 255:
          rx = self.lx.num + x - bb[0]
          ry = self.ly.num + y - bb[1]
          if tile == 149: print 'start @',rx,ry
          if tile == 150: print 'end @',rx,ry
          ti = ts.tileAt(tile)
          if ti != None and rx < bb[2] and ry < bb[3]:
            # app should check that coords are within layer
            #print rx,ry,self.ly,y
            la.setCell(rx, ry, Tiled.Cell(ti))
          else:
            print 'invalid',rx,ry
コード例 #6
0
class asciinum(cpystruct.CpyStruct("char num[8]")):
  @classmethod
  def fromraw(cls, v):
    #v = ''.join(re.findall('[0-9]', v))
    v = re.sub('[^0-9]','',v)
    return 0 if not v.strip().isdigit() else int(v)
コード例 #7
0
class asciitxt(cpystruct.CpyStruct("char txt[40]")):
  @classmethod
  def fromraw(cls, v):
    return re.search('[\w\. ]', v, re.U).group(0)
コード例 #8
0
ファイル: fotf.py プロジェクト: alexialeplus/Warm-Up-Escape
class RleData(cpystruct.CpyStruct('BYTE rep, sig, val')):
    pass
コード例 #9
0
ファイル: fotf.py プロジェクト: alexialeplus/Warm-Up-Escape
class LevelData(cpystruct.CpyStruct('ushort len; BYTE d[len];')):
    pass
コード例 #10
0
class LevelData(cpystruct.CpyStruct('ushort len; BYTE d[len];')): pass

class RleData(cpystruct.CpyStruct('BYTE rep, sig, val')): pass