Skip to content

Commit

Permalink
Implement Clash / LPDNA compilation support
Browse files Browse the repository at this point in the history
code cleanup later if i have time
  • Loading branch information
drewc5131 committed Oct 19, 2020
1 parent c0d62ec commit a4b2085
Show file tree
Hide file tree
Showing 64 changed files with 2,448 additions and 5,503 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,10 @@ notice.txt

# UGC
*.dna
*.pdna
screenshots/
maps/
phase_*/

# VS Code
.history
.history
61 changes: 18 additions & 43 deletions toontown/compiler/clashdna/dna/base/DNAPacker.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import struct
from typing import Union

# Byte orders...
LITTLE_ENDIAN = '<'
Expand Down Expand Up @@ -29,60 +30,34 @@
FLOAT64 = 'd' # double


class DNAPacker:
class DNAPacker(bytearray):
def __init__(self, name='DNAPacker', packer=None, verbose=False):
if packer is not None:
super().__init__(packer)
else:
super().__init__()
self.name = name
self.__data = ''
self.verbose = verbose

# If we've been given either a DNAPacker object, or a string as an
# argument for packer, let's use this as the starting point for our
# data:
if isinstance(packer, DNAPacker) or isinstance(packer, str):
self.__data = str(packer)

def __str__(self):
return self.__data

def __repr__(self):
return repr(self.__data)

def __len__(self):
return len(self.__data)

def __add__(self, other):
return DNAPacker(name=self.name, packer=(self.__data + str(other)),
verbose=self.verbose)

def __radd__(self, other):
return DNAPacker(name=self.name, packer=(str(other) + self.__data),
verbose=self.verbose)

def __iadd__(self, other):
self.__data += str(other)
return self

def debug(self, message):
def debug(self, message: str):
if self.verbose:
print '{name}: {message}'.format(name=self.name, message=message)
print(f'{self.name}: {message}')

def pack(self, fieldName, value, dataType, byteOrder=LITTLE_ENDIAN):
self.debug('packing... {fieldName}: {value}'.format(
fieldName=fieldName, value=repr(value)))
def pack(self, fieldName: str, value: Union[str, int, float, bool], dataType: str, byteOrder=LITTLE_ENDIAN):
self.debug(f'packing... {fieldName}: {repr(value)}')

# If we're packing a string, add the length header:
if dataType == STRING:
self += struct.pack(UINT16, len(value))
self += value

self.extend(struct.pack(UINT16, len(value)))
self.extend(value.encode('utf-8'))
elif dataType in {FLOAT32, FLOAT64}:
self.extend(struct.pack(byteOrder + dataType, float(value)))
else:
# Pack the value using struct.pack():
self += struct.pack(byteOrder + dataType, value)
self.extend(struct.pack(byteOrder + dataType, int(value)))

def packColor(self, fieldName, r, g, b, a=None, byteOrder=LITTLE_ENDIAN):
self.debug('packing... {fieldName}: ({r}, {g}, {b}, {a})'.format(
fieldName=fieldName, r=r, g=g, b=b, a=a))
def packColor(self, fieldName: str, r, g, b, a=None, byteOrder=LITTLE_ENDIAN):
self.debug(f'packing... {fieldName}: ({r}, {g}, {b}, {a})')

for component in (r, g, b, a):
if component is not None:
self += struct.pack(byteOrder + UINT8, int(component * 255))
self.extend(struct.pack(byteOrder + UINT8, int(component * 255)))
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/base/DNAStorage.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from dna.base.DNAPacker import *
from dna.components.DNASuitEdge import DNASuitEdge
from toontown.compiler.libpandadna.dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.components.DNASuitEdge import DNASuitEdge


class DNAStorage:
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAAnimBuilding.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import DNALandmarkBuilding
from dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.components import DNALandmarkBuilding
from toontown.compiler.libpandadna.dna.base.DNAPacker import *


class DNAAnimBuilding(DNALandmarkBuilding.DNALandmarkBuilding):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAAnimProp.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from dna.base.DNAPacker import *
from DNAProp import DNAProp
from toontown.compiler.libpandadna.dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.components.DNAProp import DNAProp


class DNAAnimProp(DNAProp):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNACornice.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNAGroup import DNAGroup
from dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.components.DNAGroup import DNAGroup
from toontown.compiler.libpandadna.dna.base.DNAPacker import *


class DNACornice(DNAGroup):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNADoor.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNAGroup import DNAGroup
from dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.components.DNAGroup import DNAGroup
from toontown.compiler.libpandadna.dna.base.DNAPacker import *


class DNADoor(DNAGroup):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAFlatBuilding.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNANode import DNANode
from dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.components.DNANode import DNANode
from toontown.compiler.libpandadna.dna.base.DNAPacker import *


class DNAFlatBuilding(DNANode):
Expand Down
2 changes: 1 addition & 1 deletion toontown/compiler/clashdna/dna/components/DNAFlatDoor.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import DNADoor
from toontown.compiler.libpandadna.dna.components import DNADoor


class DNAFlatDoor(DNADoor.DNADoor):
Expand Down
2 changes: 1 addition & 1 deletion toontown/compiler/clashdna/dna/components/DNAGroup.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.base.DNAPacker import *


class DNAGroup:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import DNAAnimProp
from dna.base.DNAPacker import *
from toontown.compiler.libpandadna.dna.components import DNAAnimProp
from toontown.compiler.libpandadna.dna.base.DNAPacker import *


class DNAInteractiveProp(DNAAnimProp.DNAAnimProp):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNANode import DNANode
from dna.base.DNAPacker import *
from .DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNALandmarkBuilding(DNANode):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNANode.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNAGroup import DNAGroup
from dna.base.DNAPacker import *
from toontown.compiler.clashdna.dna.components.DNAGroup import DNAGroup
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNANode(DNAGroup):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAProp.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNANode import DNANode
from dna.base.DNAPacker import *
from toontown.compiler.clashdna.dna.components.DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNAProp(DNANode):
Expand Down
6 changes: 3 additions & 3 deletions toontown/compiler/clashdna/dna/components/DNARoot.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dna.components.DNAGroup import DNAGroup
from dna.parser.parser import *
from dna.parser.tokens import *
from toontown.compiler.clashdna.dna.components.DNAGroup import DNAGroup
from toontown.compiler.clashdna.dna.parser.parser import *
from toontown.compiler.clashdna.dna.parser.tokens import *
from ply import yacc


Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNASign.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from dna.base.DNAPacker import *
from DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *
from .DNANode import DNANode


class DNASign(DNANode):
Expand Down
9 changes: 5 additions & 4 deletions toontown/compiler/clashdna/dna/components/DNASignBaseline.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import math
import sys
from dna.base.DNAPacker import *
from DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *
from .DNANode import DNANode


class DNASignBaseline(DNANode):
Expand Down Expand Up @@ -55,7 +55,7 @@ def traverse(self, recursive=True, verbose=False):
packer = DNANode.traverse(self, recursive=False, verbose=verbose)
packer.name = 'DNASignBaseline' # Override the name for debugging.

traversed_data = ''
traversed_data = DNAPacker()
text = ''

for child in self.children:
Expand All @@ -78,6 +78,7 @@ def traverse(self, recursive=True, verbose=False):
packer.pack('sign node height', self.height, FLOAT32)

if recursive:
packer += traversed_data + chr(255)
packer += traversed_data
packer += b'\xFF'

return packer
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNASignGraphic.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNANode import DNANode
from dna.base.DNAPacker import *
from .DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNASignGraphic(DNANode):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNASignText.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNANode import DNANode
from dna.base.DNAPacker import *
from .DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNASignText(DNANode):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAStreet.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNANode import DNANode
from dna.base.DNAPacker import *
from .DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNAStreet(DNANode):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAVisGroup.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNAGroup import DNAGroup
from dna.base.DNAPacker import *
from .DNAGroup import DNAGroup
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNAVisGroup(DNAGroup):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAWall.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNANode import DNANode
from dna.base.DNAPacker import *
from .DNANode import DNANode
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNAWall(DNANode):
Expand Down
4 changes: 2 additions & 2 deletions toontown/compiler/clashdna/dna/components/DNAWindows.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from DNAGroup import DNAGroup
from dna.base.DNAPacker import *
from .DNAGroup import DNAGroup
from toontown.compiler.clashdna.dna.base.DNAPacker import *


class DNAWindows(DNAGroup):
Expand Down
9 changes: 5 additions & 4 deletions toontown/compiler/clashdna/dna/components/parsetab.py

Large diffs are not rendered by default.

42 changes: 21 additions & 21 deletions toontown/compiler/clashdna/dna/parser/parser.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import os
from dna.components.DNAAnimBuilding import DNAAnimBuilding
from dna.components.DNAAnimProp import DNAAnimProp
from dna.components.DNABattleCell import DNABattleCell
from dna.components.DNACornice import DNACornice
from dna.components.DNADoor import DNADoor
from dna.components.DNAFlatBuilding import DNAFlatBuilding
from dna.components.DNAFlatDoor import DNAFlatDoor
from dna.components.DNAGroup import DNAGroup
from dna.components.DNAInteractiveProp import DNAInteractiveProp
from dna.components.DNALandmarkBuilding import DNALandmarkBuilding
from dna.components.DNANode import DNANode
from dna.components.DNAProp import DNAProp
from dna.components.DNASign import DNASign
from dna.components.DNASignBaseline import DNASignBaseline
from dna.components.DNASignGraphic import DNASignGraphic
from dna.components.DNASignText import DNASignText
from dna.components.DNAStreet import DNAStreet
from dna.components.DNASuitPoint import DNASuitPoint
from dna.components.DNAVisGroup import DNAVisGroup
from dna.components.DNAWall import DNAWall
from dna.components.DNAWindows import DNAWindows
from toontown.compiler.clashdna.dna.components.DNAAnimBuilding import DNAAnimBuilding
from toontown.compiler.clashdna.dna.components.DNAAnimProp import DNAAnimProp
from toontown.compiler.clashdna.dna.components.DNABattleCell import DNABattleCell
from toontown.compiler.clashdna.dna.components.DNACornice import DNACornice
from toontown.compiler.clashdna.dna.components.DNADoor import DNADoor
from toontown.compiler.clashdna.dna.components.DNAFlatBuilding import DNAFlatBuilding
from toontown.compiler.clashdna.dna.components.DNAFlatDoor import DNAFlatDoor
from toontown.compiler.clashdna.dna.components.DNAGroup import DNAGroup
from toontown.compiler.clashdna.dna.components.DNAInteractiveProp import DNAInteractiveProp
from toontown.compiler.clashdna.dna.components.DNALandmarkBuilding import DNALandmarkBuilding
from toontown.compiler.clashdna.dna.components.DNANode import DNANode
from toontown.compiler.clashdna.dna.components.DNAProp import DNAProp
from toontown.compiler.clashdna.dna.components.DNASign import DNASign
from toontown.compiler.clashdna.dna.components.DNASignBaseline import DNASignBaseline
from toontown.compiler.clashdna.dna.components.DNASignGraphic import DNASignGraphic
from toontown.compiler.clashdna.dna.components.DNASignText import DNASignText
from toontown.compiler.clashdna.dna.components.DNAStreet import DNAStreet
from toontown.compiler.clashdna.dna.components.DNASuitPoint import DNASuitPoint
from toontown.compiler.clashdna.dna.components.DNAVisGroup import DNAVisGroup
from toontown.compiler.clashdna.dna.components.DNAWall import DNAWall
from toontown.compiler.clashdna.dna.components.DNAWindows import DNAWindows


def p_dna(p):
Expand Down
4 changes: 0 additions & 4 deletions toontown/compiler/clashdna/ply/__init__.py

This file was deleted.

Loading

0 comments on commit a4b2085

Please sign in to comment.